def invoices(self): """ Get a paginated list of active invoices for current or given month.""" paid_result = {} unpaid_result = {} year = int(self.request.params.get('year', datetime.now().strftime('%Y'))) month = int(self.request.params.get('month', datetime.now().strftime('%m'))) categories = Category.all_active(self.request).all() for c in categories: paid_invoices = Invoice.with_category_paid(c.id, year, month) if paid_invoices: total = Invoice.with_category_paid(c.id, year, month, total_only=True) paid_result[c.title] = [paid_invoices, total] unpaid_invoices = Invoice.with_category_all_unpaid(c.id) if unpaid_invoices: total = Invoice.with_category_all_unpaid(c.id, total_only=True) unpaid_result[c.title] = [unpaid_invoices, total] return {'paiditems': paid_result, 'unpaiditems': unpaid_result, 'title': 'Invoices', 'month': month, 'year': year, 'nextmonth': self.month_switcher(year, month, next=True), 'prevmonth': self.month_switcher(year, month)}
def update_flash(self): """ Since so many methods in this class did the exact same thing, a function was created. This updated the session invoice counter, used in many places (eg. sidebar). """ shared_unpaid_invoices = 0 shared_categories = Category.all_active(self.request).all() for c in shared_categories: unpaid_invoices = Invoice.with_category_all_unpaid(c.id) if unpaid_invoices: shared_unpaid_invoices += len(unpaid_invoices) self.request.session.pop_flash('shared_unpaid_invoices') self.request.session.flash(shared_unpaid_invoices, 'shared_unpaid_invoices') private_unpaid_invoices = 0 private_categories = Category.all_private(self.request).all() for c in private_categories: unpaid_invoices = Invoice.with_category_all_unpaid(c.id) if unpaid_invoices: private_unpaid_invoices += len(unpaid_invoices) self.request.session.pop_flash('private_unpaid_invoices') self.request.session.flash(private_unpaid_invoices, 'private_unpaid_invoices')
def login(self): """ Login view, used for both get and post method. This view also checks and authenicated the user by request. """ form = LoginForm(self.request.POST, csrf_context=self.request.session) if self.request.method == 'POST' and form.validate(): user = User.by_email(self.request.POST.get('email')) if (user and user.verify_password(self.request.POST.get('password')) and user.blocked is not True and user.archived is not True): headers = remember(self.request, user.id) shared_unpaid_invoices = 0 shared_categories = Category.all_shared() for c in shared_categories: unpaid_invoices = Invoice.with_category_all_unpaid(c.id) if unpaid_invoices: shared_unpaid_invoices += len(unpaid_invoices) self.request.session.pop_flash('shared_unpaid_invoices') self.request.session.flash(shared_unpaid_invoices, 'shared_unpaid_invoices') private_unpaid_invoices = 0 private_categories = Category.all_private(self.request, id=user.id)\ .all() for c in private_categories: unpaid_invoices = Invoice.with_category_all_unpaid(c.id) if unpaid_invoices: private_unpaid_invoices += len(unpaid_invoices) self.request.session.pop_flash('private_unpaid_invoices') self.request.session.flash(private_unpaid_invoices, 'private_unpaid_invoices') self.request.session.flash('Welcome back %s' % (user.email), 'success') return HTTPFound(location=self.request.route_url('index'), headers=headers) headers = forget(self.request) self.request.session.flash('Login failed', 'error') return {'title': 'Login', 'form': form} if authenticated_userid(self.request): self.request.session.flash('You are already logged in', 'status') return HTTPFound(location=self.request.route_url('index')) return {'title': 'Login', 'form': form}