Changeset 8:0b63f5eb49b3 in stamper for stamper/stamper.py


Ignore:
Timestamp:
Jul 8, 2014, 10:40:05 AM (10 years ago)
Author:
Borja Lopez <borja@…>
Branch:
default
Phase:
public
Message:

Refactored totals, removed totals_by_customer.
Refactored details, added support to return details by customer.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stamper/stamper.py

    r7 r8  
    9393        return customers
    9494
    95     def total_by_customer(self, customer):
    96         total = 0
     95    def totals(self, stamp_filter=None):
     96        totals = {}
    9797        for stamp in self.stamps:
    98             if stamp['customer'] == customer:
    99                 total += self.worktime(stamp['start'], stamp['end'])
    100         total = timedelta(seconds=total)
    101         return str(total)
     98            customer = stamp['customer']
     99            if customer:
     100                # c will be None for "start" stamps, having no end time
     101                if customer not in totals:
     102                    totals[customer] = 0
     103                totals[customer] += self.worktime(stamp['start'], stamp['end'])
     104        return totals
    102105
    103     def totals(self):
     106    def details(self):
     107        details = {}
    104108        totals = {}
    105         for customer in self.customers():
    106             totals[customer] = self.total_by_customer(customer)
    107         return totals
     109        for stamp in self.stamps:
     110            if stamp['customer']:
     111                # avoid "start" stamps
     112                start_day = stamp['start'].split(' ')[0]
     113                if start_day not in details:
     114                    details[start_day] = []
     115                if start_day not in totals:
     116                    totals[start_day] = 0
     117                worktime = self.worktime(stamp['start'], stamp['end'])
     118                details[start_day].append(
     119                    ' -> %(worktime)s %(customer)s %(action)s' % {
     120                        'worktime': str(timedelta(seconds=worktime)),
     121                        'customer': stamp['customer'],
     122                        'action': stamp['action']
     123                    })
     124                totals[start_day] += worktime
     125        for day in totals:
     126            totals[day] = str(timedelta(seconds=totals[day]))
     127        return details, totals
    108128
    109129    def details_by_customer(self, customer):
Note: See TracChangeset for help on using the changeset viewer.