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 order, nominal_price, size, ini, end, discounts in lines: service = order.service if service.is_fee: fee, __ = Fee.objects.get_or_create(account=account, status=Fee.OPEN) line = fee.lines.create( rate=service.nominal_price, amount=size, total=nominal_price, tax=0, description=self.format_period(ini, end), ) self.create_sublines(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 = order.description if service.billing_period != service.NEVER: description += " %s" % self.format_period(ini, end) line = invoice.lines.create( description=description, rate=service.nominal_price, amount=size, total=nominal_price, tax=service.tax, ) self.create_sublines(line, discounts) return bills def format_period(self, ini, end): ini = 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 name, value in discounts: line.sublines.create( description=_("Discount per %s") % name, total=value, )