diff options
Diffstat (limited to 'app/income')
-rw-r--r-- | app/income/models.py | 13 | ||||
-rw-r--r-- | app/income/parser.py | 42 | ||||
-rw-r--r-- | app/income/views.py | 14 |
3 files changed, 44 insertions, 25 deletions
diff --git a/app/income/models.py b/app/income/models.py index 688d1d7..e5a351b 100644 --- a/app/income/models.py +++ b/app/income/models.py @@ -69,6 +69,9 @@ class InvoiceItem(models.Model): time_end = models.DateTimeField(null=True, blank=True) work_done = models.TextField(null=True, blank=True) + class Meta: + ordering = ('time_start',) + def __str__(self): return str(self.time_start) @@ -89,6 +92,12 @@ class InvoiceItem(models.Model): half_period_seconds = period_seconds / 2 remainder = td.total_seconds() % period_seconds if remainder >= half_period_seconds: - return timedelta(seconds=td.total_seconds() + (period_seconds - remainder)) + tdr = timedelta(seconds=td.total_seconds() + (period_seconds - remainder)) + hours, remainder = divmod(tdr.total_seconds(), 3600) + r = remainder/3600 + return float(hours)+r else: - return timedelta(seconds=td.total_seconds() - remainder) + tdr = timedelta(seconds=td.total_seconds() - remainder) + hours, remainder = divmod(tdr.total_seconds(), 3600) + r = remainder/3600 + return float(hours)+r diff --git a/app/income/parser.py b/app/income/parser.py index 9524902..b19d039 100644 --- a/app/income/parser.py +++ b/app/income/parser.py @@ -1,19 +1,23 @@ -with open('timesheet.csv', newline='') as csvfile: - reader = csv.reader(csvfile, delimiter=';') - counter = 0 - f = "%Y-%m-%d %H:%M:%S" - for row in reader: - if counter > 0: - timer = row[0]+' '+row[1] - timerer = row[0]+' '+row[2] - time_start = datetime.datetime.strptime(timer, f) - time_end = datetime.datetime.strptime(timerer, f) - print(row[4]) - print(timerer, time_end) - InvoiceItem.objects.get_or_create( - time_start=time_start, - time_end=time_end, - work_done=row[4] - ) - counter = counter +1 -f = "%Y-%m-%d %H:%M:%S" +import csv +import datetime +from .models import InvoiceItem + + +def read_timesheet(): + with open('timesheet.csv', newline='') as csvfile: + reader = csv.reader(csvfile, delimiter=';') + counter = 0 + f = "%Y-%m-%d %H:%M:%S" + for row in reader: + if counter > 0: + print(row[4]) + timer = row[0]+' '+row[1] + timerer = row[0]+' '+row[2] + time_start = datetime.datetime.strptime(timer, f) + time_end = datetime.datetime.strptime(timerer, f) + InvoiceItem.objects.get_or_create( + time_start=time_start, + time_end=time_end, + work_done=row[4] + ) + counter = counter + 1 diff --git a/app/income/views.py b/app/income/views.py index 2c3e34a..fc22c0d 100644 --- a/app/income/views.py +++ b/app/income/views.py @@ -20,8 +20,7 @@ class MonthlyInvoiceView(DetailView): total_time = [] for item in context['object_list']: total_time.append(item.rounded_total) - duration = (sum(total_time, datetime.timedelta())) - hours = duration.total_seconds() // 3600 + hours = (sum(total_time)) context['total_hours'] = hours context['total_billed'] = int(hours * 100) context['invoice_number'] = self.object.id+21 @@ -37,10 +36,17 @@ class DownloadMonthlyInvoiceView(MonthlyInvoiceView): logger = logging.getLogger('weasyprint') logger.addHandler(logging.FileHandler('weasyprint.log')) self.object = self.get_object() # assign the object to the view - c = {'object': self.object} + context = self.get_context_data() + c = { + 'object': self.object, + 'object_list': context['object_list'], + 'total_hours': context['total_hours'], + 'total_billed': context['total_billed'], + 'invoice_number': self.object.id+23 + } t = render_to_string('details/invoice.html', c).encode('utf-8') html = HTML(string=t, base_url=self.request.build_absolute_uri()) - pdf = html.write_pdf(stylesheets=[CSS(settings.MEDIA_ROOT + 'site/media/pdf_gen.css')], presentational_hints=True) + pdf = html.write_pdf(stylesheets=[CSS(settings.MEDIA_ROOT + '/pdf_gen.css')], presentational_hints=True) response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = 'inline; filename="invoice.pdf"' return response |