login für den finanzer
übersicht für den finanzer finanzer kann ausgleiche hinzufügen TODO: der Code sieht ekelhaft aus bis zum gehtnicht mehr ... vltt verbessern?
This commit is contained in:
		
							parent
							
								
									9f796caa8e
								
							
						
					
					
						commit
						4648aa8b0c
					
				|  | @ -1,11 +1,17 @@ | |||
| from flask import Flask, g | ||||
| from flask_sqlalchemy import SQLAlchemy | ||||
| from flask_bcrypt import Bcrypt | ||||
| from flask_login import LoginManager | ||||
| 
 | ||||
| 
 | ||||
| app = Flask(__name__) | ||||
| app.config['SECRET_KEY'] = '0a657b97ef546da90b2db91862ad4e29' | ||||
| app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' | ||||
| db = SQLAlchemy(app) | ||||
| bcrypt = Bcrypt(app) | ||||
| login_manager = LoginManager(app) | ||||
| login_manager.login_view = 'login' | ||||
| login_manager.login_message_category = 'info' | ||||
| 
 | ||||
| 
 | ||||
| from geruecht import routes | ||||
|  | @ -1,5 +1,5 @@ | |||
| from flask_wtf import FlaskForm | ||||
| from wtforms import StringField, SubmitField | ||||
| from wtforms import StringField, SubmitField, PasswordField; | ||||
| from wtforms.validators import DataRequired, Length, ValidationError | ||||
| from geruecht.model import User | ||||
| 
 | ||||
|  | @ -14,3 +14,10 @@ class RegistrationForm(FlaskForm): | |||
| 
 | ||||
|         if user: | ||||
|             raise ValidationError('Bist du behindert!? Der Name ist vergeben!!') | ||||
| 
 | ||||
| 
 | ||||
| class FinanzerLogin(FlaskForm): | ||||
|     username = StringField('Name', validators=[DataRequired(), Length(min=2, max=20)]) | ||||
|     password = PasswordField('Password', validators=[DataRequired()]) | ||||
|     submit = SubmitField('Login') | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,41 +1,337 @@ | |||
| from geruecht import db | ||||
| from geruecht import db, login_manager | ||||
| from threading import Timer | ||||
| from flask_login import UserMixin | ||||
| from datetime import date | ||||
| 
 | ||||
| 
 | ||||
| @login_manager.user_loader | ||||
| def load_finanzer(finanzer_id): | ||||
|     return Finanzer.query.get(int(finanzer_id)) | ||||
| 
 | ||||
| 
 | ||||
| class User(db.Model): | ||||
|     id = db.Column(db.Integer, primary_key=True) | ||||
|     username = db.Column(db.String(20), unique=True, nullable=False) | ||||
|     sum = db.Column(db.Float, nullable=False, default=0.0) | ||||
| 
 | ||||
|     jan = db.Column(db.Float, nullable=False, default=0) | ||||
|     jan_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     jan_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     feb = db.Column(db.Float, nullable=False, default=0) | ||||
|     feb_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     feb_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     maer = db.Column(db.Float, nullable=False, default=0) | ||||
|     maer_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     maer_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     apr = db.Column(db.Float, nullable=False, default=0) | ||||
|     apr_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     apr_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     mai = db.Column(db.Float, nullable=False, default=0) | ||||
|     mai_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     mai_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     jun = db.Column(db.Float, nullable=False, default=0) | ||||
|     jun_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     jun_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     jul = db.Column(db.Float, nullable=False, default=0) | ||||
|     jul_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     jul_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     aug = db.Column(db.Float, nullable=False, default=0) | ||||
|     aug_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     aug_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     sep = db.Column(db.Float, nullable=False, default=0) | ||||
|     sep_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     sep_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     okt = db.Column(db.Float, nullable=False, default=0) | ||||
|     okt_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     okt_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     nov = db.Column(db.Float, nullable=False, default=0) | ||||
|     nov_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     nov_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
|     dez = db.Column(db.Float, nullable=False, default=0) | ||||
|     dez_sub = db.Column(db.Float, nullable=False, default=0) | ||||
|     dez_year = db.Column(db.Integer, nullable=False, default=date.today().year) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     def getsum(self): | ||||
|         jan = self.jan - self.jan_sub | ||||
|         feb = self.feb - self.feb_sub | ||||
|         maer = self.maer - self.maer_sub | ||||
|         apr = self.apr - self.apr_sub | ||||
|         mai = self.mai - self.mai_sub | ||||
|         jun = self.jun - self.jun_sub | ||||
|         jul = self.jul - self.jul_sub | ||||
|         aug = self.aug - self.aug_sub | ||||
|         sep = self.sep - self.sep_sub | ||||
|         okt = self.okt - self.okt_sub | ||||
|         nov = self.nov - self.nov_sub | ||||
|         dez = self.dez - self.dez_sub | ||||
| 
 | ||||
|         result = jan + feb + maer + apr + mai + jun + jul + aug + sep + okt + nov + dez | ||||
|         return result | ||||
| 
 | ||||
|     def add_sub(self, value): | ||||
|         year = date.today().year | ||||
|         month = date.today().month | ||||
| 
 | ||||
|         if month == 1: | ||||
|             if year == self.jan_year: | ||||
|                 self.jan_sub += value | ||||
|             else: | ||||
|                 self.jan = 0 | ||||
|                 self.jan_sub = value | ||||
|                 self.jan_year = year; | ||||
|         elif month == 2: | ||||
|             if year == self.feb_year: | ||||
|                 self.feb_sub += value | ||||
|             else: | ||||
|                 self.feb = 0 | ||||
|                 self.feb_sub = value | ||||
|                 self.feb_year = year | ||||
|         elif month == 3: | ||||
|             if year == self.maer_year: | ||||
|                 self.maer_sub += value | ||||
|             else: | ||||
|                 self.maer = 0 | ||||
|                 self.maer_sub = value | ||||
|                 self.maer_year = year | ||||
|         elif month == 4: | ||||
|             if year == self.apr_year: | ||||
|                 self.apr_sub += value | ||||
|             else: | ||||
|                 self.apr = 0 | ||||
|                 self.apr_sub = value | ||||
|                 self.apr_year = year | ||||
|         elif month == 5: | ||||
|             if year == self.mai_year: | ||||
|                 self.mai_sub += value | ||||
|             else: | ||||
|                 self.mai = 0 | ||||
|                 self.mai_sub = value | ||||
|                 self.mai_year = year | ||||
|         elif month == 6: | ||||
|             if year == self.jun_year: | ||||
|                 self.jun_sub += value | ||||
|             else: | ||||
|                 self.jun = 0 | ||||
|                 self.jun_sub = value | ||||
|                 self.jun_year = year | ||||
|         elif month == 7: | ||||
|             if year == self.jul_year: | ||||
|                 self.jul_sub += value | ||||
|             else: | ||||
|                 self.jul = 0 | ||||
|                 self.jul_sub = value | ||||
|                 self.jul_year = year | ||||
|         elif month == 8: | ||||
|             if year == self.aug_year: | ||||
|                 self.aug_sub += value | ||||
|             else: | ||||
|                 self.aug = 0 | ||||
|                 self.aug_sub = value | ||||
|                 self.aug_year = year | ||||
|         elif month == 9: | ||||
|             if year == self.sep_year: | ||||
|                 self.sep_sub += value | ||||
|             else: | ||||
|                 self.sep = 0 | ||||
|                 self.sep_sub = value | ||||
|                 self.sep_year = year | ||||
|         elif month == 10: | ||||
|             if year == self.okt_year: | ||||
|                 self.okt_sub += value | ||||
|             else: | ||||
|                 self.okt = 0 | ||||
|                 self.okt_sub = value | ||||
|                 self.okt_year = year | ||||
|         elif month == 11: | ||||
|             if year == self.nov_year: | ||||
|                 self.nov_sub += value | ||||
|             else: | ||||
|                 self.nov = 0 | ||||
|                 self.nov_sub = value | ||||
|                 self.nov_year = year | ||||
|         elif month == 12: | ||||
|             if year == self.dez_year: | ||||
|                 self.dez_sub += value | ||||
|             else: | ||||
|                 self.dez = 0 | ||||
|                 self.dez_sub = value | ||||
|                 self.dez_year = year | ||||
|         else: | ||||
|             raise IndexError('Mehr monate gibt es nicht') | ||||
| 
 | ||||
| 
 | ||||
|     def add(self, value): | ||||
|         self.sum += value | ||||
|     def storner(self, value): | ||||
|         self.sum = self.sum - value | ||||
| 
 | ||||
|         year = date.today().year | ||||
|         month = date.today().month | ||||
| 
 | ||||
|         if month == 1 : | ||||
|             if year == self.jan_year: | ||||
|                 self.jan += value | ||||
|             else: | ||||
|                 self.jan = value | ||||
|                 self.jan_sub = 0 | ||||
|                 self.jan_year = year | ||||
|         elif month == 2: | ||||
|             if year == self.feb_year: | ||||
|                 self.feb += value | ||||
|             else: | ||||
|                 self.feb = value | ||||
|                 self.feb_sub = 0 | ||||
|                 self.feb_year = year | ||||
|         elif month == 3: | ||||
|             if year == self.maer_year: | ||||
|                 self.maer += value | ||||
|             else: | ||||
|                 self.maer = value | ||||
|                 self.mear_sub = 0 | ||||
|                 self.mear_year = year | ||||
|         elif month == 4: | ||||
|             if year == self.apr_year: | ||||
|                 self.apr += value | ||||
|             else: | ||||
|                 self.apr = value | ||||
|                 self.apr_sub = 0 | ||||
|                 self.apr_year = year | ||||
|         elif month == 5: | ||||
|             if year == self.mai_year: | ||||
|                 self.mai += value | ||||
|             else: | ||||
|                 self.mai = value | ||||
|                 self.mai_sub = 0 | ||||
|                 self.mai_year = year | ||||
|         elif month == 6: | ||||
|             if year == self.jun_year: | ||||
|                 self.jun += value | ||||
|             else: | ||||
|                 self.jun = value | ||||
|                 self.jun_sub = 0 | ||||
|                 self.jun_year = year | ||||
|         elif month == 7: | ||||
|             if year == self.jul_year: | ||||
|                 self.jul += value | ||||
|             else: | ||||
|                 self.jul = value | ||||
|                 self.jul_sub = 0 | ||||
|                 self.jul_year = year | ||||
|         elif month == 8: | ||||
|             if year == self.aug_year: | ||||
|                 self.aug += value | ||||
|             else: | ||||
|                 self.aug = value | ||||
|                 self.aug_sub = 0 | ||||
|                 self.aug_year = year | ||||
|         elif month == 9: | ||||
|             if year == self.sep_year: | ||||
|                 self.sep += value | ||||
|             else: | ||||
|                 self.sep = value | ||||
|                 self.sep_sub = 0 | ||||
|                 self.sep_year = year | ||||
|         elif month == 10: | ||||
|             if year == self.okt_year: | ||||
|                 self.okt += value | ||||
|             else: | ||||
|                 self.okt = value | ||||
|                 self.okt_sub = 0 | ||||
|                 self.okt_year = year | ||||
|         elif month == 11: | ||||
|             if year == self.nov_year: | ||||
|                 self.nov += value | ||||
|             else: | ||||
|                 self.nov = value | ||||
|                 self.nov_sub = 0 | ||||
|                 self.nov_year = year | ||||
|         elif month == 12: | ||||
|             if year == self.dez_year: | ||||
|                 self.dez += value | ||||
|             else: | ||||
|                 self.dez = value | ||||
|                 self.dez_sub = 0 | ||||
|                 self.dez_year = year | ||||
|         else: | ||||
|             raise IndexError('Mehr monate gibt es nicht') | ||||
| 
 | ||||
| 
 | ||||
|     def storner(self, value, month): | ||||
| 
 | ||||
|         if month == 1: | ||||
|             self.jan = self.jan - value | ||||
|         elif month == 2: | ||||
|             self.feb = self.feb - value | ||||
|         elif month == 3: | ||||
|             self.maer = self.maer - value | ||||
|         elif month == 4: | ||||
|             self.apr = self.apr - value | ||||
|         elif month == 5: | ||||
|             self.mai = self.mai - value | ||||
|         elif month == 6: | ||||
|             self.jun = self.jun - value | ||||
|         elif month == 7: | ||||
|             self.jul = self.jul - value | ||||
|         elif month == 8: | ||||
|             self.aug = self.aug - value | ||||
|         elif month == 9: | ||||
|             self.sep = self.sep - value | ||||
|         elif month == 10: | ||||
|             self.okt = self.okt - value | ||||
|         elif month == 11: | ||||
|             self.nov = self.nov - value | ||||
|         elif month == 12: | ||||
|             self.dez = self.dez - value | ||||
|         else: | ||||
|             raise IndexError('Mehr monate gibt es nicht') | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         return f"User('{self.username}', '{self.sum}')" | ||||
| 
 | ||||
| 
 | ||||
| class Finanzer(db.Model, UserMixin): | ||||
|     id = db.Column(db.Integer, primary_key=True) | ||||
|     username = db.Column(db.String(20), unique=True, nullable=False) | ||||
|     password = db.Column(db.String(60), nullable=False) | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         return f"Finanzer('{self.username}')" | ||||
| 
 | ||||
| 
 | ||||
| class History: | ||||
|     history = [] | ||||
|     user = None | ||||
| 
 | ||||
|     def __init__(self, history, user, value): | ||||
|         self.history=history | ||||
|         self.history = history | ||||
|         self.history.append(self) | ||||
|         self.user = user | ||||
|         self.month = date.today().month | ||||
|         self.value = value | ||||
|         self.timer = Timer(60, self.kill) | ||||
|         self.timer.start() | ||||
| 
 | ||||
|     def exec(self): | ||||
|         self.timer.cancel() | ||||
|         User.query.filter_by(username=self.user.username).first().storner(self.value) | ||||
|         User.query.filter_by(username=self.user.username).first().storner(self.value, self.month) | ||||
|         self.kill() | ||||
| 
 | ||||
|     def kill(self): | ||||
|         print("{} deledet from history".format(self.user)) | ||||
|         self.history.remove(self) | ||||
|         print(self.history) | ||||
| 
 | ||||
| 
 | ||||
| ''' | ||||
|     def __repr__(self): | ||||
|         print(f'self:{self}, history:{self.history}, user:{self.user}, value:{self.value}') | ||||
|  |  | |||
|  | @ -1,7 +1,8 @@ | |||
| from flask import render_template, url_for, redirect, flash, jsonify, g | ||||
| from geruecht import app, db | ||||
| from geruecht.forms import RegistrationForm | ||||
| from geruecht.model import User, History | ||||
| from flask import render_template, url_for, redirect, flash, jsonify, g, request | ||||
| from flask_login import login_user, current_user, logout_user, login_required | ||||
| from geruecht import app, db, bcrypt | ||||
| from geruecht.forms import RegistrationForm, FinanzerLogin | ||||
| from geruecht.model import User, History, Finanzer | ||||
| import flask_sijax | ||||
| import os, sys | ||||
| 
 | ||||
|  | @ -36,7 +37,7 @@ def home(): | |||
|         print(history) | ||||
|         obj_response.html('div#flash', f'{user_2.username} wurde {"%.2f"%value} € hinzugefügt') | ||||
|         obj_response.attr('div#flash', "class", "alert alert-success") | ||||
|         obj_response.html(f'#{user_2.id}-sum', str("%.2f" % user_2.sum + " €")) | ||||
|         obj_response.html(f'#{user_2.id}-sum', str("%.2f" % user_2.getsum() + " €")) | ||||
| 
 | ||||
|     def storner(obj_response): | ||||
|         try: | ||||
|  | @ -49,7 +50,7 @@ def home(): | |||
|             db.session.commit() | ||||
|             obj_response.html('div#flash', f'{"%.2f"%obj.value} wurden von {user_2.username} storniert') | ||||
|             obj_response.attr('div#flash', "class", "alert alert-success") | ||||
|             obj_response.html(f'#{user_2.id}-sum', str("%.2f" % user_2.sum + " €")) | ||||
|             obj_response.html(f'#{user_2.id}-sum', str("%.2f" % user_2.getsum() + " €")) | ||||
| 
 | ||||
|         except IndexError: | ||||
|             print("history: {} is empty".format(history)) | ||||
|  | @ -70,10 +71,85 @@ def home(): | |||
|         return redirect(url_for('home')) | ||||
|     return render_template('home.html', users=User.query.all(), form=form) | ||||
| 
 | ||||
| 
 | ||||
| @flask_sijax.route(app, "/return") | ||||
| def to_home(): | ||||
|     return home() | ||||
| 
 | ||||
| 
 | ||||
| @app.route("/login", methods=['GET', 'POST']) | ||||
| def login(): | ||||
|     if current_user.is_authenticated: | ||||
|         return redirect(url_for('home')) | ||||
|     login_form = FinanzerLogin() | ||||
|     if login_form.validate_on_submit(): | ||||
|         user = Finanzer.query.filter_by(username=login_form.username.data).first() | ||||
|         if user: | ||||
|             if user and bcrypt.check_password_hash(user.password, login_form.password.data): | ||||
|                 login_user(user) | ||||
|                 next_page = request.args.get('next') | ||||
|                 return redirect(next_page) if next_page else redirect(url_for('home')) | ||||
|             else: | ||||
|                 flash('Passwort ist falsch', 'error') | ||||
|         else: | ||||
|             flash('nur der finanzer kann sich einloggen !!', 'error') | ||||
|     return render_template('login.html', title='Login', form=login_form) | ||||
| 
 | ||||
| 
 | ||||
| @app.route("/logout") | ||||
| def logout(): | ||||
|     logout_user() | ||||
|     return redirect(url_for('home')) | ||||
| 
 | ||||
| 
 | ||||
| @flask_sijax.route(app, "/uebersicht") | ||||
| def finanzen(): | ||||
| 
 | ||||
|     def supply(obj_response, arg1, arg2): | ||||
| 
 | ||||
|         list = zip(arg1, arg2) | ||||
|         try: | ||||
|             for value in arg2: | ||||
|                 if value: | ||||
|                     float(value) | ||||
| 
 | ||||
|             for user_id, value in list: | ||||
|                 if user_id and value: | ||||
|                     user_ = User.query.get(user_id) | ||||
|                     user_.add_sub(float(value)) | ||||
|                     db.session.commit() | ||||
|                     obj_response.attr(f'#{user_id}-input', 'value', '') | ||||
| 
 | ||||
|             obj_response.html('div#flash', "Alle Werte wurden übernommen") | ||||
|             obj_response.attr('div#flash', 'class', "alert alert-success") | ||||
| 
 | ||||
|             for user_ in User.query.all(): | ||||
|                 obj_response.html(f'p#{user_.id}-jan-sub', "%.2f"%user_.jan_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-feb-sub', "%.2f"%user_.feb_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-maer-sub', "%.2f"%user_.maer_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-apr-sub', "%.2f"%user_.apr_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-mai-sub', "%.2f"%user_.mai_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-jun-sub', "%.2f"%user_.jun_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-jul-sub', "%.2f"%user_.jul_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-aug-sub', "%.2f"%user_.aug_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-sep-sub', "%.2f"%user_.sep_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-okt-sub', "%.2f"%user_.okt_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-nov-sub', "%.2f"%user_.nov_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-dez-sub', "%.2f"%user_.dez_sub + " €") | ||||
|                 obj_response.html(f'p#{user_.id}-sum', "%.2f"%user_.getsum() + " €") | ||||
| 
 | ||||
|         except ValueError: | ||||
|             obj_response.html('div#flash', | ||||
|                               "Du hast irgendwo keine Zahl eingegeb!!") | ||||
|             obj_response.attr('div#flash', "class", "alert alert-error") | ||||
| 
 | ||||
|     if g.sijax.is_sijax_request: | ||||
|         g.sijax.register_callback('supply', supply) | ||||
|         return g.sijax.process_request() | ||||
| 
 | ||||
|     return render_template('finanzer.html', users=User.query.all()) | ||||
| 
 | ||||
| 
 | ||||
| @flask_sijax.route(app, "/about") | ||||
| def about(): | ||||
|     return render_template('about.html', title='about') | ||||
|  |  | |||
|  | @ -13,10 +13,10 @@ body { | |||
|   background-color: #055288; | ||||
|   text-align: center; | ||||
|   padding: 5px 5px; | ||||
|   margin: 17px 17px; | ||||
|   margin: 7px 17px; | ||||
|   text-decoration: none; | ||||
|   font-size: 17px; | ||||
|   border: 0px solid white; | ||||
|   border: 5px solid #055288; | ||||
|   border-style: solid; | ||||
|   border-radius: 10px; | ||||
|   transition-duration: 0.4s; | ||||
|  | @ -33,6 +33,7 @@ body { | |||
| 
 | ||||
| .blue-button:hover { | ||||
|   background: white; | ||||
|   border: 5px solid #055288; | ||||
|   color: black; | ||||
| } | ||||
| 
 | ||||
|  | @ -58,6 +59,17 @@ body { | |||
|   transform: translateY(4px) | ||||
| } | ||||
| 
 | ||||
| .logo-nav img { | ||||
|   position: absolute; | ||||
|   transition-duration: 0.4s; | ||||
| } | ||||
| 
 | ||||
| .logo-nav img.main-logo:hover { | ||||
|   opacity: 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| .geruecht { | ||||
|   margin: 5px auto; | ||||
|   display: table; | ||||
|  | @ -78,28 +90,44 @@ body { | |||
|   width: 20%; | ||||
| } | ||||
| 
 | ||||
| .auto-width { | ||||
|   width:6.66%; | ||||
| } | ||||
| 
 | ||||
| .width-auto { | ||||
|   width:80%; | ||||
| } | ||||
| 
 | ||||
| .g-item p { | ||||
|   font-size: 15px; | ||||
| } | ||||
| 
 | ||||
| .button { | ||||
|   width: 70px; | ||||
|   heigt: 30px; | ||||
|   border-radius: 10px; | ||||
|   border: 5px solid green; | ||||
|   background: green; | ||||
|   color: white; | ||||
|   transition-duration: 0.4s; | ||||
| } | ||||
| 
 | ||||
| .button:hover { | ||||
|   color: green; | ||||
|   background: white; | ||||
| } | ||||
| 
 | ||||
| .button:active { | ||||
|   transform: translateY(4px); | ||||
| } | ||||
| 
 | ||||
| .bottombar { | ||||
|   background-color: #077BCB; | ||||
|   overflow: hidden; | ||||
|   overflow: scroll; | ||||
|   position: fixed; | ||||
|   bottom: 0; | ||||
|   width: 100%; | ||||
|   height: 62px; | ||||
|   display: table; | ||||
| } | ||||
| 
 | ||||
|  | @ -152,3 +180,15 @@ body { | |||
|   border-radius: 5px; | ||||
|   padding: 6px; | ||||
| } | ||||
| 
 | ||||
| .container { | ||||
|   margin-bottom: 50%; | ||||
| } | ||||
| 
 | ||||
| .schulden { | ||||
|   color: red; | ||||
| } | ||||
| 
 | ||||
| .bezahlt { | ||||
|   color: green; | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,119 @@ | |||
| {% extends 'layout.html' %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div class="geruecht"> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Username</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Januar</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Februar</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>März</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>April</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Mai</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Juni</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>July</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>August</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>September</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Oktober</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>November</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Dezember</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Schulden</b> | ||||
|     </div> | ||||
|     <div class="g-item auto-width"> | ||||
|         <b>Ausgleich</b> | ||||
|     </div> | ||||
| </div> | ||||
|     {% for user in users %} | ||||
|         <div class="geruecht"> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p>{{ user.username }}</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-jan" class="schulden">{{ "%.2f"%user.jan }} €</p> | ||||
|                 <p id="{{ user.id }}-jan-sub" class="bezahlt">{{ "%.2f"%user.jan_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-feb" class="schulden">{{ "%.2f"%user.feb }} €</p> | ||||
|                 <p id="{{ user.id }}-feb-sub" class="bezahlt">{{ "%.2f"%user.feb_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-maer" class="schulden">{{ "%.2f"%user.maer }} €</p> | ||||
|                 <p id="{{ user.id }}-maer-sub" class="bezahlt">{{ "%.2f"%user.maer_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-apr" class="schulden">{{ "%.2f"%user.apr }} €</p> | ||||
|                 <p id="{{ user.id }}-apr-sub" class="bezahlt">{{ "%.2f"%user.apr_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-mai" class="schulden">{{ "%.2f"%user.mai }} €</p> | ||||
|                 <p id="{{ user.id }}-mai-sub" class="bezahlt">{{ "%.2f"%user.mai_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-jun" class="schulden">{{ "%.2f"%user.jun }} €</p> | ||||
|                 <p id="{{ user.id }}-jun-sub" class="bezahlt">{{ "%.2f"%user.jun_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-jul" class="schulden">{{ "%.2f"%user.jul }} €</p> | ||||
|                 <p id="{{ user.id }}-jul-sub" class="bezahlt">{{ "%.2f"%user.jul_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-aug" class="schulden">{{ "%.2f"%user.aug }} €</p> | ||||
|                 <p id="{{ user.id }}-aug-sub" class="bezahlt">{{ "%.2f"%user.aug_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-sep" class="schulden">{{ "%.2f"%user.sep }} €</p> | ||||
|                 <p id="{{ user.id }}-sep-sub" class="bezahlt">{{ "%.2f"%user.sep_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-okt" class="schulden">{{ "%.2f"%user.okt }} €</p> | ||||
|                 <p id="{{ user.id }}-okt-sub" class="bezahlt">{{ "%.2f"%user.okt_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-nov" class="schulden">{{ "%.2f"%user.nov }} €</p> | ||||
|                 <p id="{{ user.id }}-nov-sub" class="bezahlt">{{ "%.2f"%user.nov_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-dez" class="schulden">{{ "%.2f"%user.dez }} €</p> | ||||
|                 <p id="{{ user.id }}-dez-sub" class="bezahlt">{{ "%.2f"%user.dez_sub }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <p id="{{ user.id }}-sum">{{ "%.2f"%user.getsum() }} €</p> | ||||
|             </div> | ||||
|             <div class="g-item auto-width"> | ||||
|                 <input class="g-item width-auto" type="text" id="{{ user.id }}-input"> | ||||
|             </div> | ||||
|         </div> | ||||
|     {% endfor %} | ||||
| {% endblock %} | ||||
| {% block bottombar %} <!-- , [[{% for user in users %} {{ user.id }}, {% endfor %} None], [{% for user in users %} $('#{{ user.id }}-input').attr('value'), {% endfor %} None]] --> | ||||
| <!-- document.getElementById('1-input').value --> | ||||
| 
 | ||||
|     <div id="btn" class="right blue-button buttombar-element" textref="javascript://" onclick="Sijax.request('supply', [[{% for user in users %} {{ user.id }}, {% endfor %} null], [{% for user in users %}document.getElementById('{{ user.id }}-input').value, {% endfor %} null]]);"> | ||||
|       Anwenden | ||||
|     </div> | ||||
| {% endblock %} | ||||
|  | @ -6,27 +6,48 @@ | |||
|       <p>{{ user.username }}</p> | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.id }}-2" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 2]);"> | ||||
|       <p>+2 €</p> | ||||
|       +2 € | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.it }}-1" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 1]);"> | ||||
|       <p>+1 €</p> | ||||
|       +1 € | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.id }}-050" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 0.5]);"> | ||||
|       <p>+0,5 €</p> | ||||
|       +0,5 € | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.id }}-040" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 0.4]);"> | ||||
|       <p>+0,4 €</p> | ||||
|       +0,4 € | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.id }}-020" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 0.2]);"> | ||||
|       <p>+0,2 €</p> | ||||
|       +0,2 € | ||||
|     </div> | ||||
|     <div class="g-item button" id="{{ user.id }}-010" href="javascript://" onclick="Sijax.request('add', ['{{ user.username }}', 0.1]);"> | ||||
|       <p>+0,1 €</p> | ||||
|       +0,1 € | ||||
|     </div> | ||||
|     <div class="g-item"> | ||||
|       <p id="{{ user.id }}-sum">{{ "%.2f"%user.sum }} €</p> | ||||
|       <p id="{{ user.id }}-sum">{{ "%.2f"%user.getsum() }} €</p> | ||||
|     </div> | ||||
|   </div> | ||||
|     {% endfor %} | ||||
| {% endblock %} | ||||
| 
 | ||||
| {% block bottombar %} | ||||
|     <div class="bottombar-element"> | ||||
|         {% if form %} | ||||
|         <form method="POST" action=""> | ||||
|             {{ form.hidden_tag() }} | ||||
|             <fieldset class="form-group"> | ||||
|                <!-- <legend class="reg-label">neue Person hinzufügen</legend>  --> | ||||
|                 <div class="form-group"> | ||||
|                     {{ form.username.label(class="reg-label") }} | ||||
|                     {{ form.username() }} | ||||
|                 </div> | ||||
|             </fieldset> | ||||
|             <div class="form-group m"> | ||||
|                 {{ form.submit(class="blue-button no-mg") }} | ||||
|             </div> | ||||
|         </form> | ||||
|         {% endif %} | ||||
|     </div> | ||||
|     <div class="right blue-button buttombar-element" href="javascript://" onclick="Sijax.request('storner');"> | ||||
|       Stornieren | ||||
|     </div> | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -19,24 +19,20 @@ | |||
|     <script type="text/javascript"> | ||||
|         {{ g.sijax.get_js()|safe }} | ||||
|     </script> | ||||
|     <script type="text/JavaScript"> | ||||
|       function hover(element) { | ||||
|       element.setAttribute('src', "{{ url_for('static', filename='img/logo_selected.png') }}"); | ||||
|       } | ||||
| 
 | ||||
|       function unhover(element) { | ||||
|       element.setAttribute('src', "{{ url_for('static', filename='img/logo.png') }}"); | ||||
|       } | ||||
|     </script> | ||||
| 
 | ||||
| </head> | ||||
| <body> | ||||
|   <div class="topnav"> | ||||
|     <a href="{{ url_for('to_home') }}"> | ||||
|       <img class="logo-nav first" src="{{ url_for('static', filename='img/logo.png') }}" onmouseover="hover(this);" onmouseout="unhover(this);"> | ||||
|     <a class="logo-nav first" href="{{ url_for('to_home') }}"> | ||||
|       <img class="logo-nav background-logo" src="{{ url_for('static', filename='img/logo_selected.png')}}"> | ||||
|       <img class="logo-nav main-logo" src="{{ url_for('static', filename='img/logo.png') }}"> | ||||
|     </a> | ||||
|         <!--<div class="logo-nav first"></div>--> | ||||
|     <a class="last blue-button" href="{{ url_for('to_home') }}">Finanzer</a> | ||||
|     {% if current_user.is_authenticated %} | ||||
|       <a class="last blue-button" href="{{ url_for('logout') }}">Logout</a> | ||||
|       <a class="last blue-button" href="{{ url_for('finanzen') }}">Übersicht</a> | ||||
|     {% else %} | ||||
|       <a class="last blue-button" href="{{ url_for('login') }}">Finanzer</a> | ||||
|     {% endif %} | ||||
|   </div> | ||||
|   <div class="container"> | ||||
|     {% block content %} | ||||
|  | @ -44,6 +40,9 @@ | |||
|     {% endblock %} | ||||
| 
 | ||||
|   </div> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   <div class="bottombar"> | ||||
|       {% with messages = get_flashed_messages(with_categories=true) %} | ||||
|       {% if messages %} | ||||
|  | @ -53,38 +52,33 @@ | |||
|             </div> | ||||
|         {% endfor %} | ||||
|       {% endif %} | ||||
|       {% if form.username.errors %} | ||||
|         {% for error in form.username.errors %} | ||||
|             <div class="alert alert-error"> | ||||
|                 <span>{{ error }}</span> | ||||
|             </div> | ||||
|         {% endfor %} | ||||
|       {% if form %} | ||||
|           {% if form.username.errors %} | ||||
|             {% for error in form.username.errors %} | ||||
|                 <div class="alert alert-error"> | ||||
|                     <span>{{ error }}</span> | ||||
|                 </div> | ||||
|             {% endfor %} | ||||
|           {% endif %} | ||||
|           {% if form.password %} | ||||
|             {% if form.password.errors %} | ||||
|                 {% for error in form.password.errors %} | ||||
|                     <div class="alert alert-error"> | ||||
|                         <span>{{ error }}</span> | ||||
|                     </div> | ||||
|                 {% endfor %} | ||||
|             {% endif %} | ||||
|           {% endif %} | ||||
|       {% endif %} | ||||
|     {% endwith %} | ||||
|     <div id="flash"></div> | ||||
|     <div class="bottombar-element"> | ||||
|         {% if form %} | ||||
|         <form method="POST" action=""> | ||||
|             {{ form.hidden_tag() }} | ||||
|             <fieldset class="form-group"> | ||||
|                <!-- <legend class="reg-label">neue Person hinzufügen</legend>  --> | ||||
|                 <div class="form-group"> | ||||
|                     {{ form.username.label(class="reg-label") }} | ||||
|                     {{ form.username() }} | ||||
|                 </div> | ||||
|             </fieldset> | ||||
|             <div class="form-group m"> | ||||
|                 {{ form.submit(class="blue-button no-mg") }} | ||||
|             </div> | ||||
|         </form> | ||||
|         {% endif %} | ||||
|     </div> | ||||
|     <div class="right blue-button buttombar-element no-mg no-pd" href="javascript://" onclick="Sijax.request('storner');"> | ||||
|       <p>Stornieren</p> | ||||
|     </div> | ||||
|     {% block bottombar %} | ||||
| 
 | ||||
|     {% endblock %} | ||||
|   </div> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   <!-- Optional JavaScript --> | ||||
|   <!-- jQuery first, then Popper.js, then Bootstrap JS | ||||
|   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> | ||||
|  |  | |||
|  | @ -0,0 +1,41 @@ | |||
| 
 | ||||
| {% extends "layout.html" %} | ||||
| {% block content %} | ||||
|     <div class="login-content"> | ||||
|         <form method="POST" action=""> | ||||
|             {{ form.hidden_tag() }} | ||||
|             <fieldset class="login-group"> | ||||
|                 <legend class="">Log In</legend> | ||||
|                 <div class="login-group"> | ||||
|                     {{ form.username.label(class="") }} | ||||
|                     {% if form.username.errors %} | ||||
|                         {{ form.username(class="") }} | ||||
|                         <div class=""> | ||||
|                             {% for error in form.username.error %} | ||||
|                                 <span>{{ error }}</span> | ||||
|                             {% endfor %} | ||||
|                         </div> | ||||
|                     {% else %} | ||||
|                         {{ form.username(class="") }} | ||||
|                     {% endif %} | ||||
|                 </div> | ||||
|                 <div class="login-group"> | ||||
|                     {{ form.password.label(class="") }} | ||||
|                     {% if form.password.errors %} | ||||
|                         {{ form.password(class="") }} | ||||
|                         <div class=""> | ||||
|                             {% for error in form.password.error %} | ||||
|                                 <span>{{ error }}</span> | ||||
|                             {% endfor %} | ||||
|                         </div> | ||||
|                     {% else %} | ||||
|                         {{ form.password(class="") }} | ||||
|                     {% endif %} | ||||
|                 </div> | ||||
|             </fieldset> | ||||
|             <div class="login-group"> | ||||
|                 {{ form.submit(class="") }} | ||||
|             </div> | ||||
|         </form> | ||||
|     </div> | ||||
| {% endblock %} | ||||
		Loading…
	
		Reference in New Issue