import datetime from django.utils.translation import ugettext_lazy as _ from orchestra.apps.bills.models import Invoice, Fee, BillLine, BillSubline class BillsBackend(object): def create_bills(self, account, lines): invoice = None bills = [] for line in lines: service = line.order.service if service.is_fee: fee, __ = Fee.objects.get_or_create(account=account, status=Fee.OPEN) storedline = fee.lines.create( rate=service.nominal_price, amount=line.size, total=line.subtotal, tax=0, description=self.format_period(line.ini, line.end), ) self.create_sublines(storedline, line.discounts) bills.append(fee) else: if invoice is None: invoice, __ = Invoice.objects.get_or_create(account=account, status=Invoice.OPEN) bills.append(invoice) description = line.order.description if service.billing_period != service.NEVER: description += " %s" % self.format_period(line.ini, line.end) storedline = invoice.lines.create( description=description, rate=service.nominal_price, amount=line.size, # TODO rename line.total > subtotal total=line.subtotal, tax=service.tax, ) self.create_sublines(storedline, line.discounts) return bills def format_period(self, ini, end): ini = ini.strftime("%b, %Y") end = (end-datetime.timedelta(seconds=1)).strftime("%b, %Y") if ini == end: return ini return _("{ini} to {end}").format(ini=ini, end=end) def create_sublines(self, line, discounts): for discount in discounts: line.sublines.create( description=_("Discount per %s") % discount.type, total=discount.total, )