Esempio n. 1
0
 def rate(self):
     project = Project.load(self.project)
     if self.invoice:
         invoice = Invoice.load(self.invoice)
         if invoice and invoice.rate:
             return invoice.rate
     if project:
         return project.rate
     return 0 
Esempio n. 2
0
 def summary(self, id):
     c.timesheets = Timesheet.for_invoice(id)
     c.title = "Invoice %s" % id
     c.total_time = sum(t.duration for t in c.timesheets)
     c.total_fee = sum(t.fee for t in c.timesheets)
     c.invoice = Invoice.load(id)
     c.taxes = c.total_fee * c.invoice.tax * Decimal("0.01")
     c.after_taxes = c.total_fee + c.taxes
     return render("/invoice/invoice_summary.html")
Esempio n. 3
0
 def view(self, id):
     invoice = Invoice.load(id)
     c.invoice = invoice
     c.project = Project.load_or_create(invoice.project)
     c.timesheets = Timesheet.for_invoice(id)
     c.total_time = sum(t.duration for t in c.timesheets)
     c.total_fee = c.total_time * invoice.rate
     c.taxes = c.total_fee * invoice.tax * Decimal("0.01")
     c.after_taxes = c.total_fee + c.taxes
     return render("/invoice/invoice.html")
Esempio n. 4
0
    def mark_billed(self, id):
        """Sometimes we want to record timesheets as invoiced
        without creating an invoice (ie: to clear out unbilled
        stuff or because it was invoiced in another application.

        We do this by attaching those timesheets to a single
        invoice named 'no invoice'."""
        project_name = id
        invoice = Invoice.load("no invoice")
        if not invoice:
            invoice = Invoice(id="no invoice")
            invoice.store()

        timesheets = Timesheet.for_project(project_name, unbilled=True)
        for timesheet in timesheets:
            timesheet.invoice = invoice.id
            timesheet.store()
        return redirect(url(controller="timesheet", action="index"))