43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
|
import datetime
|
||
|
|
||
|
from orchestra.apps.bills.models import Invoice, Fee, BillLine, BillSubline
|
||
|
|
||
|
|
||
|
class BillsBackend(object):
|
||
|
def create_bills(self, account, lines):
|
||
|
invoice = None
|
||
|
fees = []
|
||
|
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)
|
||
|
self.create_sublines(line, discounts)
|
||
|
fees.append(fee)
|
||
|
else:
|
||
|
if invoice is None:
|
||
|
invoice, __ = Invoice.objects.get_or_create(account=account,
|
||
|
status=Invoice.OPEN)
|
||
|
description = order.description
|
||
|
if service.billing_period != service.NEVER:
|
||
|
description += " {ini} to {end}".format(
|
||
|
ini=ini.strftime("%b, %Y"),
|
||
|
end=(end-datetime.timedelta(seconds=1)).strftime("%b, %Y"))
|
||
|
line = invoice.lines.create(
|
||
|
description=description,
|
||
|
rate=service.nominal_price,
|
||
|
amount=size,
|
||
|
total=nominal_price,
|
||
|
tax=service.tax,
|
||
|
)
|
||
|
self.create_sublines(line, discounts)
|
||
|
return [invoice] + fees
|
||
|
|
||
|
def create_sublines(self, line, discounts):
|
||
|
for name, value in discounts:
|
||
|
line.sublines.create(
|
||
|
description=_("Discount per %s") % name,
|
||
|
total=value,
|
||
|
)
|