Changeset - c0de5deb271c
[Not reviewed]
Dennis Fink - 9 years ago 2015-10-27 23:10:39
dennis.fink@c3l.lu
Fix ValueError in total calculation of received donations

We use decimal to provide accuracy
1 file changed with 2 insertions and 1 deletions:
0 comments (0 inline, 0 general)
ennstatus/donate/views.py
Show inline comments
 
# Ënnstatus
 
# Copyright (C) 2015  Dennis Fink
 
#
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
from decimal import Decimal
 
from flask import (Blueprint, render_template, request,
 
                   redirect, url_for, current_app)
 

	
 
from ennstatus.donate.forms import DateForm
 
from ennstatus.donate.functions import load_csv, get_choices
 

	
 
from ennstatus.root.forms import BPMForm
 
from ennstatus.root.constants import BPM_ADDRESSES
 

	
 
donate_page = Blueprint('donate', __name__)
 

	
 

	
 
@donate_page.route('/', methods=('GET', 'POST'))
 
def index():
 

	
 
    current_app.logger.info('Handling index')
 
    form = BPMForm()
 
    country_choices = [choice[0] for choice in form.country.choices]
 

	
 
    if request.method == 'POST':
 
        current_app.logger.debug('Validating form')
 
        if form.validate_on_submit():
 
            country = form.country.data
 
            return redirect(url_for('donate.index', country=country))
 
@@ -86,31 +87,31 @@ def received():
 
            return redirect(url_for('donate.received', year=year, month=month))
 
    else:
 
        if 'year' in request.args and 'month' in request.args:
 
            year = request.args['year']
 
            month = request.args['month']
 
            form.year.data = year
 
            form.month.data = '{:02d}'.format(int(month))
 
            filename = '-'.join([year, month])
 
            if filename in files:
 
                current_app.logger.info('Showing date %s' % filename)
 
                csv_file = load_csv(filename)
 
            else:
 
                current_app.logger.warn('Date %s not found' % filename)
 
                return render_template('donate/received.html',
 
                                       form=form, csv_file=None,
 
                                       year=year, month=month, total=None)
 
        else:
 
            filename = files[-1]
 
            current_app.logger.info('Showing last date %s' % filename)
 
            year, month = filename.split('-')
 
            form.year.data = year
 
            form.month.data = '{:02d}'.format(int(month))
 
            csv_file = load_csv(filename)
 

	
 
        total = str(sum(int(row[2]) for row in csv_file))
 
        total = str(sum(Decimal(row[2].replace(',', '.')) for row in csv_file))
 
        csv_file = load_csv(filename)
 

	
 
        current_app.logger.info('Return result')
 
        return render_template('donate/received.html',
 
                               form=form, csv_file=csv_file,
 
                               year=year, month=month, total=total)
0 comments (0 inline, 0 general)