コード例 #1
0
ファイル: main.py プロジェクト: amax1213/flask-mailroom
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')
コード例 #2
0
ファイル: main.py プロジェクト: alheadstrong/flask-mailroom
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())
コード例 #3
0
ファイル: main.py プロジェクト: nDruP/flask-mailroom
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())
コード例 #4
0
ファイル: main.py プロジェクト: harvey-herela/flask-mailroom
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'))
コード例 #5
0
ファイル: main.py プロジェクト: Ribbitninja/flask-mailroom
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')
コード例 #6
0
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)
コード例 #7
0
ファイル: main.py プロジェクト: JeroenSweerts/flask-mailroom
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')
コード例 #8
0
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)
コード例 #9
0
ファイル: main.py プロジェクト: pberhe/flask-mailroom
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)
コード例 #10
0
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'))
コード例 #11
0
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')
コード例 #12
0
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')
コード例 #13
0
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')
コード例 #14
0
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')
コード例 #15
0
ファイル: main.py プロジェクト: theseanhodges/flask-mailroom
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 ''
    )
コード例 #16
0
ファイル: main.py プロジェクト: tbrack/flask-mailroom
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')
コード例 #17
0
ファイル: main.py プロジェクト: funnyletter/flask-mailroom
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
コード例 #18
0
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')
コード例 #19
0
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_)
コード例 #20
0
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())
コード例 #21
0
ファイル: main.py プロジェクト: nlenssen2013/flask-mailroom
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")
コード例 #22
0
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'))
コード例 #23
0
ファイル: main.py プロジェクト: wd-uwGH2020/flask-mailroom
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')
コード例 #24
0
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')
コード例 #25
0
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')
コード例 #26
0
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])
コード例 #27
0
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)
コード例 #28
0
ファイル: main.py プロジェクト: navidbahadoran/flask-mailroom
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)
コード例 #29
0
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')
コード例 #30
0
ファイル: main.py プロジェクト: srepking/flask-mailroom
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')