Example #1
0
def monthCalc(request):
    req = request.REQUEST
    if param_exist("date",req):
        date = DateService.parse(req['date'])
    else:
        date = DateService.today()

    fromDate = DateService.firstDateOfMonth(date)
    toDate = DateService.lastDateOfMonth(date)
    
    q = Expense.objects.extra(select={'sum': 'sum(amount)'}).values('sum','date')
    #q = Expense.objects.filter(date__gte=fromDate, date__lte=toDate)
    q = q.filter(date__gte=fromDate, date__lte=toDate).order_by('date')
    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'])
    q.query.group_by = ['date']
    
    list = []
    for exp in q:
        list.append('[%d,%s]' % (int(DateService.toLong(exp['date'])),exp['sum']))
    
    data = "[" + ",".join(list) + "]"
    return data
Example #2
0
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
Example #3
0
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
Example #4
0
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)
Example #5
0
 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())
Example #6
0
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
Example #7
0
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)
Example #8
0
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
Example #9
0
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
Example #10
0
def update(request):
    req = request.REQUEST
    dt = DateService.parse(req['period']) 
    dt = datetime.date(dt.tm_year, dt.tm_mon, 1)
    p = Income(pk=request.REQUEST['id'],period=dt, amount=req['amount'])
    try:
        data = '{"success":true}'
        p.save()
    except _mysql_exceptions.Warning:
        pass
    except Exception, e1:
        data = '{"success":false, "msg": "%s"}' % (e1.args)
Example #11
0
def calc(request):
    req = request.REQUEST
    if param_exist("date",req):
        date = DateService.parse(req['date'])
    else:
        date = DateService.today()

    fromDate = DateService.firstDateOfMonth(date)
    toDate = DateService.lastDateOfMonth(date)
    
    q = Expense.objects.filter(date__gte=fromDate, date__lte=toDate)
    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'])
        
    sum=0
    for exp in q:
        sum+=exp.amount
    
    today = DateService.today()
    if today.tm_year==date.tm_year and today.tm_mon==date.tm_mon:
        days=today.tm_mday
    else:
        days=DateService.lastDayOfMonth(date)

    avg = sum / days
    data = '{"data":{"total":%s,"avg":%s}}' % (sum,avg)
    return data
Example #12
0
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
Example #13
0
def stats(request):
    req = request.REQUEST
    toDate = DateService.today()
    fromDate = datetime.date(toDate.tm_year, toDate.tm_mon, 1)
    fromDate = DateService.addMonth(fromDate,-12)
    toDate = datetime.date(toDate.tm_year, toDate.tm_mon, 1)
    
    q = Income.objects.values('period').annotate(sum=Sum('amount'))
    q = q.filter(period__gte=fromDate, period__lte=toDate).order_by('period')
    
#    q = Income.objects.extra(select={'sum': 'sum(amount)'}).values('sum','period')
#    q = q.filter(period__gte=fromDate, period__lte=toDate).order_by('period')
#    q.query.group_by = ['period']
        
    #q = Income.objects.filter(period__gte=fromDate, period__lte=toDate).order_by('period')
    
    list = []
    for exp in q:
        #list.append('[%d,%s]' % (int(DateService.toLong(exp.period)),exp.amount))
        list.append('[%d,%s]' % (int(DateService.toLong(exp['period'])),exp['sum']))
        
    data = "[" + ",".join(list) + "]"
    return data 
Example #14
0
 def handle(self, *args, **options):
     if settings.USE_GOOGLE_CAL:
         try:
             calendar = googlecalendar.CalendarHelper(settings.GOOGLE_USER, settings.GOOGLE_PASS)
         except Exception,e:
             self.stdout.write("Unable to connect to calendar service [%s]\n" % str(e))
         else:
             taxlist = Tax.objects.filter(updated=False)
             self.stdout.write("%d items to update\n" % len(taxlist))
             a = 0
             for tax in taxlist:
                 event = None
                 if tax.gcalId != '':
                     event = calendar.get_event(tax.gcalId)
                 
                 if not event:
                     event = googlecalendar.CalendarEvent(title=tax.service + ' [$ ' + str(tax.amount) + ']',
                                                          start_date=DateService.midNight(tax.expire),
                                                          end_date=DateService.midNight(tax.expire)+datetime.timedelta(days=1),
                                                          description=tax.account)
                 else:
                     event.set_title(tax.service + ' [$ ' + str(tax.amount) + ']')
                     event.set_start_date(DateService.midNight(tax.expire))
                     event.set_end_date(DateService.midNight(tax.expire)+datetime.timedelta(days=1))
                     event.set_description(tax.account)
                 
                 try:
                     ev = calendar.save_event(event)
                 except Exception, e1:
                     self.stdout.write("Error while saving event %s: %s\n" % (tax.service,str(e1)))
                 else:
                     a += 1
                     tax.gcalId = ev.get_id()
                     tax.updated = True
                     tax.save()
             
             self.stdout.write("%d items updated\n" % a)
Example #15
0
def update_calendar(id):
    tax = Tax.objects.get(pk=id)
    calendar = googlecalendar.CalendarHelper(settings.GOOGLE_USER, settings.GOOGLE_PASS)
    event = False

    if tax.gcalId != '':
        event = calendar.get_event(tax.gcalId)

    if event is False:
        event = googlecalendar.CalendarEvent(title=tax.service + ' [$ ' + str(tax.amount) + ']',
                                             start_date=DateService.midNight(tax.expire),
                                             end_date=DateService.midNight(tax.expire)+datetime.timedelta(days=1),
                                             description=tax.account)
    else:
        event.set_title(tax.service + ' [$ ' + str(tax.amount) + ']')
        event.set_start_date(DateService.midNight(tax.expire))
        event.set_end_date(DateService.midNight(tax.expire)+datetime.timedelta(days=1))
        event.set_description(tax.account)
        
    try:
        ev = calendar.save_event(event)
    except Exception, e1:
        get_logger().error(str(e1))
        tax.updated = False
Example #16
0
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
Example #17
0
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)
Example #18
0
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
Example #19
0
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
Example #20
0
def sixMonthCalc(request):
    req = request.REQUEST
    if param_exist("date",req):
        date = DateService.parse(req['date'])
    else:
        date = DateService.today()

    fromDate = DateService.addMonth(DateService.firstDateOfMonth(date),-6)
    toDate = DateService.lastDateOfMonth(date)
    
    query = "SELECT sum(amount), date FROM expense "\
            "WHERE date between '%s' and '%s'" % (str(fromDate), str(toDate))
    if param_exist("subC",req):
        query += " AND sub_category_id = '%s'" % req['subC']
    elif param_exist("cat",req):
        c = SubCategory.objects.filter(category=req['cat'])
        query += " AND sub_category_id in (%s)" % ",".join(["'"+str(s.id)+"'" for s in c])
    if param_exist("payT",req):
        query += " AND payment_type_id = '%s'" % req['payT']
    query += " group by month(date)"
    
    cursor = connection.cursor()
    cursor.execute(query)

    list = []
    for exp in cursor.fetchall():
        sum, date = exp
        i = Income.objects.extra(select={'sum': 'sum(amount)'}).values('sum')
        i = i.filter(period = DateService.firstDateOfMonth(date.timetuple()))
        val = i[0]['sum']
        if val is None:
            val = 0
        list.append({'date': date, 'expense': sum, 'income': val})

    data = '{"rows": %s}' % (JsonParser.parse(list))
    return data
Example #21
0
# 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()
Example #22
0
        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
        
Example #23
0
    safe = True
    data = '{"success":true, "msg": "%s"}' % (_('Created Tax for Service <b>%(service)s</b>') % {'service':e.service})    
    try:
        elem = e.save()
    except _mysql_exceptions.Warning:
        pass
    except Exception, e1:
        safe = False
        data = '{"success":false, "msg": "%s"}' % (e1.args)
        
    if safe:
        if settings.USE_GOOGLE_CAL:
            try:
                t = Tax.objects.get(id=elem.id)
                event = googlecalendar.CalendarEvent(title=t.service + ' [$ ' + str(t.amount) + ']',
                                                     start_date=DateService.midNight(t.expire),
                                                     end_date=DateService.midNight(t.expire)+datetime.timedelta(days=1),
                                                     description=t.account)
                calendar = googlecalendar.CalendarHelper(settings.GOOGLE_USER, settings.GOOGLE_PASS)
                ev = calendar.save_event(event)
                t.gcalId = ev.get_id()
                t.save()
            except Exception, e1:
                data = '{"success":true, "msg": "%s"}' % (e1.args)
            
    return data

@json_response
def update(request):
    req = request.REQUEST
    o = Tax.objects.get(pk=req['id'])
Example #24
0
 try:
     calendar = googlecalendar.CalendarHelper(settings.GOOGLE_USER, settings.GOOGLE_PASS)
 except Exception,e:
     print "Unable to connect to calendar service [%s]" % str(e)
 else:
     taxlist = Tax.objects.filter(updated=False)
     print "%d items to update" % len(taxlist)
     a = 0
     for tax in taxlist:
         event = None
         if tax.gcalId != '':
             event = calendar.get_event(tax.gcalId)
         
         if not event:
             event = googlecalendar.CalendarEvent(title=tax.service + ' [$ ' + str(tax.amount) + ']',
                                                  start_date=DateService.midNight(tax.expire),
                                                  end_date=DateService.midNight(tax.expire)+datetime.timedelta(days=1),
                                                  description=tax.account)
         else:
             event.set_title(tax.service + ' [$ ' + str(tax.amount) + ']')
             event.set_start_date(DateService.midNight(tax.expire))
             event.set_end_date(DateService.midNight(tax.expire)+datetime.timedelta(days=1))
             event.set_description(tax.account)
         
         try:
             ev = calendar.save_event(event)
         except Exception, e1:
             print "Error while saving event %s: %s" % (tax.service,str(e1))
         else:
             a += 1
             tax.gcalId = ev.get_id()