def list(request): req = request.REQUEST q = Expense.objects.filter() if param_exist("amountStart",req): q = q.filter(amount__gte=req['amountStart']) if param_exist("amountEnd",req): q = q.filter(amount__lte=req['amountEnd']) if param_exist("dateStart",req): q = q.filter(date__gte=DateService.invert(req['dateStart'])) if param_exist("dateEnd",req): q = q.filter(date__lte=DateService.invert(req['dateEnd'])) if param_exist("subC",req): q = q.filter(subCategory=req['subC']) elif param_exist("cat",req): c = SubCategory.objects.filter(category=req['cat']) q = q.filter(subCategory__in=c) if param_exist("payT",req): q = q.filter(paymentType=req['payT']) if param_exist("sort",req): q = q.order_by(sortMethod(req)) if param_exist("limit",req): list = q[req['start']:req['start']+req['limit']] else: list = q res = [] for exp in list: res.append({'id': exp.id, 'amount': exp.amount, 'date': exp.date, 'text': exp.text, 'paymentType_name': exp.paymentType.name, 'subCategory_name': exp.subCategory.name, 'paymentTypeId': exp.paymentType.id, 'subCategoryId': exp.subCategory.id}) data = '{"total": %s, "rows": %s}' % (q.count(), JsonParser.parse(res)) return data
def update(request): req = request.REQUEST c = Card(pk=req['card.id']) p = CardDates(pk=req['id'],closeDate=DateService.invert(req['closeDate']), expireDate=DateService.invert(req['expireDate']), card=c) data = '{"success":true}' try: p.save() except _mysql_exceptions.Warning: pass except Exception, e1: data = '{"success":false, "msg": "%s"}' % (e1.args)
def process_request(request): req = request.REQUEST p = Person(pk=req['person.id']) number = validators.RegexValidator('^([0-9])+(\.[0-9]{1,2})?$', code=_('Amount')) amount=req['amount'] #validate amount number(amount) reason=req['reason'] if not reason or reason.strip() == '': raise ValidationError(_('Required'), code=_('Reason')) date=DateService.invert(req['date']) l = Loan(person=p, amount=amount, reason=reason, remain=amount, date=date) if param_exist("id",req): l.pk = req['id'] l.remain = "%.2f" % getPaymentRemain(l) if param_exist("instalments",req): l.instalments = req['instalments'] else: l.instalments = 1 return l
def pay(request): req = request.REQUEST e = Tax.objects.get(pk=req['id']) if e: if param_exist("nextExpire",req): e.expire = DateService.invert(req['nextExpire']) else: e.expire = e.nextExpire if param_exist("nextExpire2",req): e.nextExpire = DateService.invert(req['nextExpire2']) else: e.nextExpire = None e.amount = req['amount'] e.lastPay = DateService.todayDate() if e.account=="": service = e.service else: service = "%s (%s)" % (e.service, e.account) expense = Expense(date=DateService.todayDate(), text=service, amount=e.amount, subCategory=e.subCategory, paymentType=e.paymentType) data = '{"success":true}' safe = True try: e.save() except _mysql_exceptions.Warning: pass except Exception, e1: safe = False transaction.rollback() data = '{"success":false, "msg": "%s"}' % (e1.args) if safe: try: expense.save() transaction.commit() except _mysql_exceptions.Warning: transaction.commit() except Exception, e2: safe = False transaction.rollback() data = '{"success":false, "msg": "%s"}' % (e2.args)
def fromParams(req): s = SubCategory.objects.get(pk=req['subCategory.id']) p = PaymentType(pk=req['paymentType.id']) if param_exist("id",req): e = Tax.objects.get(pk=req['id']) else: e = Tax() e.service=req['service'] e.amount=req['amount'] e.expire=DateService.invert(req['expire']) if param_exist("nextExpire",req): e.nextExpire=DateService.invert(req['nextExpire']) if param_exist("lastPay",req): e.lastPay=DateService.invert(req['lastPay']) e.account=req['account'] e.subCategory=s e.paymentType=p return e
def from_request(request): req = request.REQUEST p = Person(pk=req['person.id']) l = Loan(person=p,amount=req['amount'],date=DateService.invert(req['date']), reason=req['reason'], remain=req['amount']) if param_exist("id",req): l.pk = req['id'] if param_exist("instalments",req): l.instalments = req['instalments'] else: l.instalments = 1 return l
def req_to_obj(request): req = request.REQUEST if req.has_key("id"): obj = Debits.objects.get(pk=req["id"]) else: obj = Debits() obj.day = req["day"] obj.subCategory = SubCategory.objects.get(pk=req["subCategory.id"]) obj.paymentType = PaymentType.objects.get(pk=req["paymentType.id"]) obj.text = req["text"] obj.amount = req["amount"] obj.since = DateService.invert(req["since"]) return obj
def fromParams(req): if param_exist("id",req): e = CardData(pk=req['id']) else: e = CardData() c = Card(pk=req['card.id']) e.date=DateService.invert(req['date']) e.shop=req['shop'] e.instalments=req['instalments'] e.total=req['total'] e.card = c return e
def handle(self, *args, **options): list = Debits.objects.filter(Q(since__lte=datetime.now()) & (Q(last__isnull=True) | Q(last__lt=DateService.firstDateOfMonth(DateService.today())))) for debit in list: Expense.objects.create(text=debit.text, amount=debit.amount, subCategory=debit.subCategory, paymentType=debit.paymentType, date=DateService.invert(DateService.parse("%d/%d/%d" % (debit.day, DateService.today().tm_mon, DateService.today().tm_year)))) debit.last = datetime.now() debit.save() self.stdout.write("Processed %d\n" % list.count())
def save(request): req = request.REQUEST l = Loan.objects.get(pk=req['loan.id']) p = Payment(loan=l,amount=req['amount'],date=DateService.invert(req['date'])) if checkPayment(l,req['amount'],None): data = '{"success":true}' l.remain = unicode(float(l.remain) - float(p.amount)) try: l.save() except _mysql_exceptions.Warning: pass try: p.save() except _mysql_exceptions.Warning: pass except Exception, e1: data = '{"success":false, "msg": "%s"}' % (e1.args)
def fromParams(req): s = SubCategory.objects.get(pk=req['subCategory.id']) p = PaymentType(pk=req['paymentType.id']) if param_exist("text",req): text = req['text'] else: text = s.name if param_exist("id",req): e = Expense.objects.get(pk=req['id']) else: e = Expense() e.text=text e.date=DateService.invert(req['date']) e.amount=req['amount'] e.subCategory=s e.paymentType=p return e
def fromParams(req): if not req['date']: raise ValidationError(_('Enter a valid date')) amount = req['amount'] number = validators.RegexValidator('^-?([0-9])+(\.[0-9]{1,2})?$', message=_('Enter a valid amount')) number(amount) if not amount or float(amount) == 0.0: raise ValidationError(_('Enter a valid amount')) try: s = SubCategory.objects.get(pk=req['subCategory.id']) except SubCategory.DoesNotExist: raise ValidationError(_('Select a valid category')) try: p = PaymentType.objects.get(pk=req['paymentType.id']) except PaymentType.DoesNotExist: raise ValidationError(_('Select a valid payment type')) if param_exist("text",req): text = req['text'] else: text = s.name if param_exist("id",req): e = Expense.objects.get(pk=req['id']) else: e = Expense() e.text=text e.date=DateService.invert(req['date']) e.amount=amount e.subCategory=s e.paymentType=p return e
p = Payment.objects.get(pk=req['id']) prevAmount = p.amount else: p = Payment(loan=l) prevAmount = None if checkPayment(l,amount,prevAmount): if prevAmount: diff = float(prevAmount) - float(amount) l.remain = unicode(float(l.remain) + diff) else: l.remain = unicode(float(l.remain) - float(amount)) p.amount=amount p.date=DateService.invert(req['date']) try: l.save() except _mysql_exceptions.Warning: pass try: p.save() except _mysql_exceptions.Warning: pass except Exception, e1: data = '{"success":false, "msg": "%s"}' % (e1.args) else: data = '{"success":false, "msg": "%s"}' % (_('The entered amount is greater than the amount owned')) return data
# django settings setup from django.core.management import setup_environ try: import settings except ImportError: sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) sys.exit(1) setup_environ(settings) # -- * -- from cash.models import Expense, Debits from cash.services import JsonParser, DateService from django.db.models import Q from datetime import datetime list = Debits.objects.filter(Q(since__lte=datetime.now()) & (Q(last__isnull=True) | Q(last__lt=DateService.firstDateOfMonth(DateService.today())))) for debit in list: Expense.objects.create(text=debit.text, amount=debit.amount, subCategory=debit.subCategory, paymentType=debit.paymentType, date=DateService.invert(DateService.parse("%d/%d/%d" % (debit.day, DateService.today().tm_mon, DateService.today().tm_year)))) debit.last = datetime.now() debit.save() print "Processed %d" % list.count()
def list(request): req = request.REQUEST # find close date dateQuery = CardDates.objects.filter(closeDate__gt=DateService.todayDate()) dateQuery = dateQuery.order_by('closeDate') if dateQuery.count()>0: dt = dateQuery[:1][0] else: dt = CardDates(closeDate=DateService.todayDate(), expireDate=DateService.todayDate()) q = CardData.objects.extra(where=["ADDDATE(date, INTERVAL ((instalments+1) * 30) DAY) > '%s'" % DateService.invert(dt.closeDate)]) if param_exist("sort",req): q = q.order_by(sortMethod(req)) if param_exist("limit",req): start = req['start'] limit = req['limit'] list = q[start:start+limit] else: list = q res = [] for exp in list: rem = FinancialService.remainInstalments(exp.date, dt.closeDate, exp.instalments) if rem >= 0: res.append({'id': exp.id, 'date': exp.date, 'shop': exp.shop, 'instalments': exp.instalments, 'card_id': exp.card.id, 'card_name': exp.card.name, 'total': exp.total, 'own': exp.own, 'partial': exp.total / exp.instalments, 'remain': rem }) data = '{"total": %s,"close": "%s", "expire": "%s", "rows": %s}' % (CardData.objects.count(), DateService.format(dt.closeDate),DateService.format(dt.expireDate), JsonParser.parse(res)) return data