summaryrefslogtreecommitdiff
path: root/app/income
diff options
context:
space:
mode:
Diffstat (limited to 'app/income')
-rw-r--r--app/income/models.py13
-rw-r--r--app/income/parser.py42
-rw-r--r--app/income/views.py14
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