def validatePayment(self, member_id, idPayment): """ Validate a payment specified by an id """ try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('idPayment', param=True) except: raise HTTPRedirect('/payments/index') try: np = self.db.query(Payment).filter(Payment.id == idPayment).one() if np.verified: np.verified = False else: np.verified = True self.request.db.commit() self.session['flash'] = _('Payment validation successfully toggled') self.session['flash_class'] = 'success' except: self.session['flash'] = _('Saving payment failed') self.session['flash_class'] = 'error' self.session.save() raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id))
def validatePayment(self, member_id, idPayment): """ Validate a payment specified by an id """ try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('idPayment', param=True) except: raise HTTPRedirect('/payments/index') try: np = self.db.query(Payment).filter(Payment.id == idPayment).one() if np.verified: np.verified = False else: np.verified = True self.request.db.commit() self.session['flash'] = _( 'Payment validation successfully toggled') self.session['flash_class'] = 'success' except: self.session['flash'] = _('Saving payment failed') self.session['flash_class'] = 'error' self.session.save() raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id))
def listPayments(self, member_id=None, year=None): """ Show a specific user's payments """ if member_id is None: if not self.is_admin() and not self.is_finance_admin(): raise HTTPError(403, 'Forbidden') else: raise HTTPRedirect('/payments/showOutstanding/?showAll=1') elif not self.is_admin() and not self.is_finance_admin() and not member_id == self.session.get('username'): raise HTTPError(403, 'Forbidden') if not year is None: try: ParamChecker.checkInt('year', param=True, max_len=4) if int(year) > 1970 and int(year) < 2222: year = int(year) else: year = datetime.datetime.now().year except: pass if year is None: try: ParamChecker.checkUsername('member_id', param=True) year = self._getLastPayment(member_id).year except: pass if year is None: year = datetime.datetime.now().year c = TemplateContext() c.heading = _('Payments for the year {0}, user {1}'.format(year, member_id)) c.member_id = member_id ## consider pagination # http://pylonsbook.com/en/1.1/starting-the-simplesite-tutorial.html#using-pagination try: #c.member.leavingDate = date(int(member.leavingDate[:4]),int(member.leavingDate[5:6]),int(member.leavingDate[7:8])) ## ideally, fetch monthly from member and the rest from payment (one to many relation) ## http://www.sqlalchemy.org/docs/05/reference/ext/declarative.html y_start = datetime.date(year, 1, 1) y_end = datetime.date(year, 12, 31) payment_sql = self.db.query(Payment).filter(Payment.uid == member_id).filter(Payment.date.between(y_start, y_end)).order_by(Payment.date.desc()).all() payments = {} c.unverifiedPledges = 0 for p in payment_sql: if p.verified == 0: c.unverifiedPledges += 1 payments[p.date.month] = p c.year = year c.payments = payments except AttributeError, e: return 'This member has made no payments o.O ?!: %s' % e
def new_f(self, member_id, idPayment, date, status): # @TODO request.params may contain multiple values per key... test & fix if not self.is_admin() and not member_id == self.session.get('username') or (member_id == self.session.get('username') and ParamChecker.checkInt('idPayment', param=True, optional=True)): print 'checkPayment err0r::', str(self.isAdmin()), str(member_id), str(self.session.get('username')), str(ParamChecker.checkInt('idPayment', param=True, optional=True)) raise HTTPError(403, 'Forbidden') else: formok = True errors = [] items = {} d = None try: ParamChecker.checkDate('date', param=True) d = parser.parse(date) d = datetime.date(d.year, d.month, 1) except Exception as e: print e formok = False errors.append(_('Invalid date')) try: ParamChecker.checkInt('status', param=True) items['status'] = int(status) except: formok = False errors.append(_('Invalid payment status')) try: ParamChecker.checkInt('idPayment', param=True) items['idPayment'] = int(idPayment) except: items['idPayment'] = 0 if not d is None and items['idPayment'] == 0: p_count = self.db.query(Payment).filter(Payment.uid == member_id).filter(Payment.date == d).count() if p_count > 0: formok = False errors.append(_('That month is already on records!')) if not formok: self.session['errors'] = errors self.session['reqparams'] = {} # @TODO request.params may contain multiple values per key... test & fix for k in self.request.params.iterkeys(): self.session['reqparams'][k] = self.request.params[k] self.session.save() raise HTTPRedirect('/payments/editPayment/?member_id={0}&idPayment={1}'.format(member_id, items['idPayment'])) else: items['date'] = d return f(self, member_id, items)
def deletePayment(self, member_id, idPayment): """ Delete a payment specified by an id """ try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('idPayment', param=True) except: raise HTTPRedirect('/members/index') try: np = self.db.query(Payment).filter(Payment.id == idPayment).one() self.db.delete(np) self.db.commit() except: ''' Don't care ''' pass raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id))
def deletePayment(self, member_id, idPayment): """ Delete a payment specified by an id """ try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('idPayment', param=True) except: raise HTTPRedirect('/members/index') try: np = self.db.query(Payment).filter(Payment.id == idPayment).one() self.db.delete(np) self.db.commit() except: ''' Don't care ''' pass raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id))
def doBulkAdd(self, member_id, months, verified=None): try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('months', param=True, max_len=2) except: raise HTTPRedirect('/payments/index') lastDate = self._getLastPayment(member_id) months = int(months) if self.is_finance_admin(): try: ParamChecker.checkInt('verified', param=True, max_len=1) verified = True except: verified = False try: for i in range(months): p = Payment() p.uid = member_id p.date = lastDate + relativedelta(months=i) p.status = 0 p.verified = verified self.db.add(p) self.db.commit() self.session['flash'] = _('Payments added') self.session['flash_class'] = 'success' except Exception as e: self.session['flash'] = _('Operation failed') self.session['flash_class'] = 'error' self.session.save() raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id))
def doBulkAdd(self, member_id, months, verified=None): try: ParamChecker.checkUsername('member_id', param=True) ParamChecker.checkInt('months', param=True, max_len=2) except: raise HTTPRedirect('/payments/index') lastDate = self._getLastPayment(member_id) months = int(months) if self.is_finance_admin(): try: ParamChecker.checkInt('verified', param=True, max_len=1) verified = True except: verified = False try: for i in range(months): p = Payment() p.uid = member_id p.date = lastDate + relativedelta(months=i) p.status = 0 p.verified = verified self.db.add(p) self.db.commit() self.session['flash'] = _('Payments added') self.session['flash_class'] = 'success' except Exception as e: self.session['flash'] = _('Operation failed') self.session['flash_class'] = 'error' self.session.save() raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id))
def savePayment(self, member_id, items): """ Save a new or edited payment """ verified = False if self.is_finance_admin() and ParamChecker.checkInt( 'verified', param=True, optional=True): verified = True if items['idPayment'] > 0: try: np = self.db.query(Payment).filter( Payment.id == items['idPayment']).one() np.verified = verified except: self.session['flash'] = _('Invalid record') self.session.save() raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id)) else: np = Payment() np.verified = verified np.status = 0 for key, value in items.iteritems(): setattr(np, key, value) try: np.uid = member_id except: self.session['flash'] = _('Invalid member') self.session.save() raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id)) # Cleanup session if 'reqparams' in self.session: del (self.session['reqparams']) self.session.save() ########## self.db.add(np) self.db.commit() self.session['flash'] = _('Payment saved successfully.') self.session['flash_class'] = 'success' self.session.save() raise HTTPRedirect( '/payments/listPayments/?member_id={0}'.format(member_id))
def savePayment(self, member_id, items): """ Save a new or edited payment """ verified = False if self.is_finance_admin() and ParamChecker.checkInt('verified', param=True, optional=True): verified = True if items['idPayment'] > 0: try: np = self.db.query(Payment).filter(Payment.id == items['idPayment']).one() np.verified = verified except: self.session['flash'] = _('Invalid record') self.session.save() raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id)) else: np = Payment() np.verified = verified np.status = 0 for key, value in items.iteritems(): setattr(np, key, value) try: np.uid = member_id except: self.session['flash'] = _('Invalid member') self.session.save() raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id)) # Cleanup session if 'reqparams' in self.session: del(self.session['reqparams']) self.session.save() ########## self.db.add(np) self.db.commit() self.session['flash'] = _('Payment saved successfully.') self.session['flash_class'] = 'success' self.session.save() raise HTTPRedirect('/payments/listPayments/?member_id={0}'.format(member_id))
def new_f(self, member_id, idPayment, date, status): # @TODO request.params may contain multiple values per key... test & fix if not self.is_admin() and not member_id == self.session.get( 'username') or (member_id == self.session.get('username') and ParamChecker.checkInt('idPayment', param=True, optional=True)): print 'checkPayment err0r::', str( self.isAdmin()), str(member_id), str( self.session.get('username')), str( ParamChecker.checkInt('idPayment', param=True, optional=True)) raise HTTPError(403, 'Forbidden') else: formok = True errors = [] items = {} d = None try: ParamChecker.checkDate('date', param=True) d = parser.parse(date) d = datetime.date(d.year, d.month, 1) except Exception as e: print e formok = False errors.append(_('Invalid date')) try: ParamChecker.checkInt('status', param=True) items['status'] = int(status) except: formok = False errors.append(_('Invalid payment status')) try: ParamChecker.checkInt('idPayment', param=True) items['idPayment'] = int(idPayment) except: items['idPayment'] = 0 if not d is None and items['idPayment'] == 0: p_count = self.db.query(Payment).filter( Payment.uid == member_id).filter( Payment.date == d).count() if p_count > 0: formok = False errors.append(_('That month is already on records!')) if not formok: self.session['errors'] = errors self.session['reqparams'] = {} # @TODO request.params may contain multiple values per key... test & fix for k in self.request.params.iterkeys(): self.session['reqparams'][k] = self.request.params[k] self.session.save() raise HTTPRedirect( '/payments/editPayment/?member_id={0}&idPayment={1}'. format(member_id, items['idPayment'])) else: items['date'] = d return f(self, member_id, items)
def listPayments(self, member_id=None, year=None): """ Show a specific user's payments """ if member_id is None: if not self.is_admin() and not self.is_finance_admin(): raise HTTPError(403, 'Forbidden') else: raise HTTPRedirect('/payments/showOutstanding/?showAll=1') elif not self.is_admin() and not self.is_finance_admin( ) and not member_id == self.session.get('username'): raise HTTPError(403, 'Forbidden') if not year is None: try: ParamChecker.checkInt('year', param=True, max_len=4) if int(year) > 1970 and int(year) < 2222: year = int(year) else: year = datetime.datetime.now().year except: pass if year is None: try: ParamChecker.checkUsername('member_id', param=True) year = self._getLastPayment(member_id).year except: pass if year is None: year = datetime.datetime.now().year c = TemplateContext() c.heading = _('Payments for the year {0}, user {1}'.format( year, member_id)) c.member_id = member_id ## consider pagination # http://pylonsbook.com/en/1.1/starting-the-simplesite-tutorial.html#using-pagination try: #c.member.leavingDate = date(int(member.leavingDate[:4]),int(member.leavingDate[5:6]),int(member.leavingDate[7:8])) ## ideally, fetch monthly from member and the rest from payment (one to many relation) ## http://www.sqlalchemy.org/docs/05/reference/ext/declarative.html y_start = datetime.date(year, 1, 1) y_end = datetime.date(year, 12, 31) payment_sql = self.db.query(Payment).filter( Payment.uid == member_id).filter( Payment.date.between(y_start, y_end)).order_by( Payment.date.desc()).all() payments = {} c.unverifiedPledges = 0 for p in payment_sql: if p.verified == 0: c.unverifiedPledges += 1 payments[p.date.month] = p c.year = year c.payments = payments except AttributeError, e: return 'This member has made no payments o.O ?!: %s' % e