def create(): # Creates a donation record if 'username' not in session: # requires user to be signed in to create a donation record return redirect(url_for('login')) if request.method == 'GET': # render the html page return render_template('create.jinja2') if request.method == 'POST': donorName = str.capitalize(request.form['name']) if donorName == '': # no donor name entered, returns to create with an input error message return render_template('create.jinja2', error="No name was entered, please enter the donor's name.") elif (Donor.select().where(Donor.name == donorName)): # set donor to donor from list donor = Donor.select().where(Donor.name==donorName).get() else: # creates a new donor donor = Donor(name=donorName) donor.save() try: # creates the donation record and return user to all donation = Donation(donor=donor, value=int(request.form['amount'])) donation.save() return redirect(url_for('all')) except (AttributeError, ValueError): # no or incorrect donation type entered, returns to create with an input error message return render_template('create.jinja2', error="Donation amount requires a whole number, please try again.") else: return render_template('create.jinja2')
def select_single(): if request.method == 'POST': donor = Donor.select().where(Donor.name == request.form['name']).get() donations = Donation.select().join(Donor).where( Donor.name == donor.name) return render_template('view_single.jinja2', donor=donor, donations=donations) else: return render_template('select_single.jinja2', donors=Donor.select())
def add_donation(): if request.method == 'POST': donor_name = request.form['donor'] amount = request.form['gift'] try: donor = Donor.select().where(Donor.name == donor_name).get() except Donor.DoesNotExist: donor = Donor(name=donor_name) donor.save() Donation(donor=donor, value=amount).save() return redirect(url_for('thank_you', name=donor_name, amount=amount)) return render_template('add_donation.jinja2', donors=Donor.select())
def add_donation(): if request.method == 'GET': # User clicked the "add donation" link to get here donors = Donor.select() return render_template('add_donation.jinja2', donors=donors) elif request.method == 'POST': # User pressed the 'add' button donor_name = Donor.select().where( Donor.name == request.form['name']).get() donation_amount = to_float(request.form['donation']) if donation_amount > 0.0: Donation(donor=donor_name, value=donation_amount).save() return redirect(url_for('all'))
def create(): if request.method == 'POST': if Donor.select().where(Donor.name == request.form['name']).exists(): donor = Donor.select().where( Donor.name == request.form['name']).get() else: donor = Donor(name=request.form['name']) donor.save() donation = request.form['donation'] Donation(donor=donor, value=donation).save() return redirect(url_for('all')) else: return render_template('create.jinja2')
def all_donors(): if request.method == 'POST': donor = Donor.select().where( Donor.name == request.form['donor_name']).get() donations = [ donation for donation in Donation.select() if donation.donor_id == donor.id ] return render_template('donor_info.jinja2', donor=donor, donations=donations) else: donors = Donor.select() return render_template('all_donors.jinja2', donors=donors)
def create(): if request.method == "POST": users_list = [user.name for user in Donor.select()] if request.form['name'] not in users_list: print("User is not in the list") return redirect(url_for('create')) elif request.form['name'] in users_list: print("User is in the list") donor = Donor.select().where( Donor.name == request.form['name']).get() value = int(request.form['donation']) Donation(donor=donor.id, value=value).save() return redirect(url_for('all')) elif request.method == "GET": return render_template('create_donation.jinja2')
def show_stats(): d = dict() donor_sums = dict() donors = Donor.select() debug = "" for x in donors: d[x.name] = 0 donor_sums[x.name] = 0 # oddly, this does not work # donation = Donation.select().where(Donation.donor.name == "Alice") # debug += str(donation.count()) donations = Donation.select() for donation in donations: # debug += str(donation.donor.name) d[donation.donor.name] += 1 donor_sums[donation.donor.name] += int(donation.value) return render_template('stats.jinja2', totals=d, debug=debug, donor_sums=donor_sums)
def create(): # get requests land us at /create if request.method == 'GET': return render_template('create.jinja2') # post request should query db for the donor, add donation, redir to /all if request.method == 'POST': # want to make sure there is an acceptable value entered: try: value = int(request.form['amount']) except ValueError: render_template('create.jinja2') if value <= 0: render_template('create.jinja2') else: donor_name = request.form['name'] if donor_name: try: donor = Donor.select().where( Donor.name == donor_name).get() except Donor.DoesNotExist as e: donor = Donor(name=donor_name) donor.save() donation = Donation(value=value, donor=donor) donation.save() return redirect(url_for('all')) else: return render_template('create.jinja2') return render_template('create.jinja2', create=create)
def donor(): donors = Donor.select() if request.method == 'GET': return render_template('donor.jinja2') donor_name = request.form['donor'] Donor(name=donor_name).save() return redirect(url_for('home'))
def create_donation(): # If the user is attempting to create a donation (method is POST) # Find donor from database that matches the donor provided in form # If you find donor and the donation amount entered is an integer: # Create the new donation record for the donor # Redirect the user to the list of all donations # Else: # Render the create.jinja2 template and include an error message # Else the user is just trying to view the create form # so render the create.jinja2 template if request.method == 'POST': try: this_donor = Donor.select().where(Donor.name == request.form['name']).get() except: return render_template('create.jinja2', error='Incorrect donor name.') if this_donor: try: this_value = int(request.form['donation']) except ValueError: return render_template('create.jinja2', error='Incorrect donation amount (expecting integer).') Donation(donor=this_donor, value=this_value).save() return redirect(url_for('all')) return render_template('create.jinja2', error='Incorrect donor name.') else: return render_template('create.jinja2')
def create(): if request.method == "POST": if request.form['name'] not in [ donor.name for donor in Donor.select() ]: try: new_donor = Donor(name=request.form['name']) new_donor.save() Donation(donor=new_donor, value=request.form['amount']).save() return redirect(url_for('all')) except Exception as ex: print("Whoops! Something went wrong!") print(ex) return render_template('create.jinja2') else: try: donor_obj = Donor.get(Donor.name == (request.form['name'])) donation = int(request.form['amount']) new_Donation = Donation(donor=donor_obj, value=donation) new_Donation.save() return redirect(url_for('all')) except Exception as ex: print("Whoops! Something went wrong!") print(ex) return render_template('create.jinja2') else: return render_template('create.jinja2')
def create_donation(): # redirect the user to login page if not logged in. if 'username' not in session: return redirect(url_for('login')) if request.method == "POST": try: the_donor = Donor.select()\ .where(Donor.name == request.form['name'])\ .get() except Donor.DoesNotExist: # solution1: if donor doesn't exist, then re-display the donation # creation form and inject a message describing the error. #return render_template('create.jinja2', # error='Donor does not exist.') # solution2: if donor doesn't exist, then create a new donor with # the given name, along with the indicated donation. the_donor = Donor(name=request.form['name'], password=pbkdf2_sha256.hash(request.form['name'])) the_donor.save() Donation(value=request.form['amount'], donor=the_donor).save() return redirect(url_for('home')) return render_template('create.jinja2')
def donate(): """ let a user create a new donor / donation """ if request.method == 'POST': donor_name = request.form['name'] amount = request.form['value'] if donor_name and amount: donor_count = Donor.select() \ .where(Donor.name == request.form['name']) \ .count() if donor_count == 0: donor = Donor.create(name=request.form['name']) else: donor = Donor.get(name=request.form['name']) if int(amount) <= 1000000 and int(amount) > 0: Donation.create(donor=donor, value=request.form['value']) _donations = Donation.select() return render_template('donations.jinja2', donations=_donations) flash('Input amount within an acceptable range (0 to 1000000)') return render_template('add_donation.jinja2') elif request.method == 'GET': if session.get('username'): return render_template('add_donation.jinja2') return render_template('login.jinja2')
def add(): if 'username' not in session: return redirect(url_for('login')) error = '' if request.method == 'POST': try: donation = float(request.form['value']) except ValueError: pass else: if request.form['donor'] != '' and donation > 0: if not Donor.select().where(Donor.name == request.form['donor']): Donor( name=request.form['donor'] ).save() Donation( donor=request.form['donor'], value=donation ).save() return redirect(url_for('all')) error = 'A donor name and a positive, non-zero donation amount are required.' return render_template( 'new_donation.jinja2', error=error, request=request, username=session['username'] if 'username' in session.keys() else '' )
def new_donation(): if 'username' not in session: return redirect(url_for('login')) if request.method == 'POST': try: donor = Donor.select().where(Donor.name == request.form['donor_name']).get() except Exception as e: message = "Donor name not found" return render_template('new_donation.jinja2', error=message) # donor = Donor.select().where(Donor.name == request.form['donor_name']).get() try: donation = Donation(donor=donor, value=float(request.form['donation_amt'])) donation.save() except ValueError: message = "Donation value must be a number" return render_template('new_donation.jinja2', error=message) return render_template('new_donation.jinja2', error="Donor name not found") return redirect(url_for('all')) else: return render_template('new_donation.jinja2')
def add(): # there are too many return statements up in here and I need to # clean that ish up. # By default we return the main page with all donations. output = redirect(url_for('all')) if request.method == 'POST': # Let's make sure the donation amount is a positive integer... less_than_0_error = "Please enter a donation amount greater than 0." try: amount = int(request.form['amount']) except ValueError: output = render_template('add.jinja2', error=less_than_0_error) if amount <= 0: output = render_template('add.jinja2', error=less_than_0_error) else: name = request.form['name'] if name: try: donor = Donor.select().where(Donor.name == name).get() except Donor.DoesNotExist: donor = Donor(name) donor.save() donation = Donation(donor=donor, value=amount) donation.save() output = redirect(url_for('all')) else: output = render_template('add.jinja2', error='Please enter a donor name.') else: output = render_template('add.jinja2') return output
def delete_donor(): if 'username' not in session: return redirect(url_for('login')) if request.method == 'POST': name = request.form['name'] print(f"+++ {name} to delete") if name is None: return render_template('delete.jinja2') else: try: donor = Donor.select().where(Donor.name == name).get() # query = Note.delete().where(Note.id > 3) # n = query.execute() query1 = Donation.delete().where(Donation.donor_id == donor.id) query2 = Donor.delete().where(Donor.name == donor.name) m = query1.execute() n = query2.execute() except Donor.DoesNotExist: # no donor in db return render_template('delete.jinja2', error="Donor not found.", not_found=name) except psycopg2.errors.InFailedSqlTransaction: return render_template( 'delete.jinja2', error="Heroku - psycopg2.errors.InFailedSqlTransaction") return redirect(url_for('all_donors')) else: return render_template('delete.jinja2')
def statistic(): # database = connect(os.environ.get('DATABASE_URL', 'sqlite:///my_database.db')) # database = SqliteDatabase('my_database.db') try: # database.connect() # database.execute_sql('PRAGMA foreign_keys = ON;') query = ( Donor.select(Donor.name.alias('name'), fn.COUNT(Donation.donor_id).alias('num'), fn.SUM(Donation.value).alias('total'), fn.AVG(Donation.value).alias('avg')).join( Donation, JOIN.LEFT_OUTER, on=(Donor.id == Donation.donor_id)) # .object() .group_by(Donor.name).order_by(fn.SUM(Donation.value).desc())) report_ = [] for result in query: ## cursor donor_ = {} donor_['name'] = result.name, donor_['number'] = result.num if result.num else 0 donor_['total'] = result.total if result.total else 0.00 donor_['avg'] = result.avg if result.avg else 0.00 report_.append(donor_) except Exception as e: print(e) finally: # database.close() pass return render_template('stats.jinja2', report=report_)
def new_donation(): if "donor-name" not in session: return redirect(url_for("login")) if request.method == "POST": try: donor = Donor.select().where( Donor.name == request.form['name-input']).get() except Donor.DoesNotExist: return render_template("create.jinja2", error="donor not in records") try: value = request.form['value-input'] if not value or not value.isnumeric(): raise ValueError() except ValueError: return render_template( "create.jinja2", error="donation amount missing or not a number") if donor.name == session['donor-name']: new_donation = Donation(donor=donor, value=value) new_donation.save() session.pop("donor-name", None) return redirect(url_for("all")) else: return render_template("create.jinja2", error="please login first") else: return render_template('create.jinja2', donations=Donation.select())
def create(): if "username" not in session: return redirect(url_for("login")) if request.method == "POST": name = request.form["name"] if name is None or name.isspace() or name == "": msg = "Donor cannot be empty or whitespace." return render_template("create.jinja2", error=msg) try: donor = Donor.select().where(Donor.name == name).get() except Donor.DoesNotExist: donor = Donor(name=request.form["name"]) donor.save() try: donation = int(request.form["donation"]) if donation <= 0: raise ValueError() donation = Donation(donor=donor, value=donation) donation.save() except ValueError: msg = "Donation must be a non-negative number greater than 0" return render_template("create.jinja2", error=msg) if request.form["save"] == "Save Donation": return redirect(url_for("all")) return render_template("create.jinja2")
def create(): donors = Donor.select() if request.method == 'GET': return render_template('create.jinja2', donors=donors) donor_name = request.form['donor'] donor_amount = int(request.form['amount']) Donation(donor=donor_name, value=donor_amount).save() return redirect(url_for('home'))
def create_donation(donor_name): if request.method == "POST": donor = Donor.select().where(Donor.name == donor_name) donation = Donation(donor=donor, value=request.form["value"]) donation.save() return redirect(url_for("all")) else: return render_template('create_donation.jinja2')
def create(): """ Creates a new donation. If donor is new user is redirected to page where a donor can be added. """ if request.method == 'POST': if Donor.select().where(Donor.name == request.form['name']).exists(): donor = Donor.select().where( Donor.name == request.form['name']).get() donation = Donation(donor=donor, value=request.form['value']) donation.save() else: return redirect(url_for('add_donor')) return redirect(url_for('home')) else: return render_template('create.jinja2')
def add(): if request.method == 'POST': donor = Donor.select().where(Donor.name == request.form['name']).get() donation = Donation(value=request.form['amount'], donor=donor) donation.save() return redirect(url_for('all')) else: return render_template('add.jinja2')
def _find_donor(name): """ Check to see if donor.name in Donor table :param name: donor's name (unique value) :type name: str :return: bool """ donors = Donor.select().where(Donor.name == name) return any([donor.id for donor in donors])
def singledonor(): donor_name = request.args.get('donor', None) # Check if donor has been submitted, otherwise user visiting for first time if not donor_name: # No donor name supplied, redirect to page return render_template('single.jinja2') else: # Donor name supplied, gather donations and inject to page try: donor = Donor.select().where(Donor.name == donor_name).get() except Donor.DoesNotExist: return render_template( 'single.jinja2', error='Error, donor \'{}\' not found in database.'.format( donor_name), donors=Donor.select()) donations = Donation.select().where(Donation.donor == donor) return render_template('single.jinja2', donor=donor.name, donations=donations)
def single_user(): form = SingleUserForm() if form.validate_on_submit(): username = Donor.select().where(Donor.name == form.name.data) if username: return redirect(url_for('all_donation', user=form.name.data)) else: flash(f'User does not exist!', 'danger') return render_template('single.jinja2', tittle='single_user', form=form)
def create(): """Add new donation to database""" if request.method == 'POST': donor = request.form['donor'] amount = int(request.form['amount']) saved_donor = Donor.select().where(Donor.name == donor).get() Donation(donor=saved_donor, value=amount).save() return redirect(url_for('all')) return render_template('new_donation.jinja2')
def new_donations(): if request.method == 'POST': donor = Donor.select().where( Donor.name == request.form['donor_name']).get() Donation(donor=donor, value=request.form['donation_amount']).save() return redirect(url_for('all')) else: return render_template('new_donation.jinja2')