Fixes on billing
This commit is contained in:
parent
d00befb601
commit
24d0c103a5
2
TODO.md
2
TODO.md
|
@ -412,4 +412,4 @@ touch /tmp/somefile
|
|||
# batch zone edditing
|
||||
# inherit registers from parent?
|
||||
|
||||
# Bill metric disk 5 GB: unialber
|
||||
# Bill metric disk 5 GB: unialber: include not include 5, unialbert recheck period
|
||||
|
|
|
@ -80,7 +80,10 @@ class OperationsMiddleware(object):
|
|||
type(self).thread_locals.transaction.__enter__()
|
||||
|
||||
def leave_transaction_management(self, exception=None):
|
||||
type(self).thread_locals.transaction.__exit__(exception, None, None)
|
||||
locals = type(self).thread_locals
|
||||
if hasattr(locals, 'transaction'):
|
||||
# Don't fucking know why sometimes thread_locals does not contain a transaction
|
||||
locals.transaction.__exit__(exception, None, None)
|
||||
|
||||
def process_request(self, request):
|
||||
""" Store request on a thread local variable """
|
||||
|
|
|
@ -51,7 +51,7 @@ class OrderAdmin(AccountAdminMixin, ExtendedModelAdmin):
|
|||
'id', 'service_link', 'account_link', 'content_object_link',
|
||||
'display_registered_on', 'display_billed_until', 'display_cancelled_on', 'display_metric'
|
||||
)
|
||||
list_filter = (ActiveOrderListFilter, IgnoreOrderListFilter, 'service', BilledOrderListFilter)
|
||||
list_filter = (ActiveOrderListFilter, IgnoreOrderListFilter, BilledOrderListFilter, 'service')
|
||||
default_changelist_filters = (
|
||||
('ignore', '0'),
|
||||
)
|
||||
|
|
|
@ -497,20 +497,25 @@ class ServiceHandler(plugins.Plugin, metaclass=plugins.PluginMount):
|
|||
# Recharge
|
||||
if self.payment_style == self.PREPAY and order.billed_on:
|
||||
rini = order.billed_on
|
||||
charged = None
|
||||
cmetric = None
|
||||
new_metric, new_price = 0, 0
|
||||
for cini, cend, metric in order.get_metric(rini, bp, changes=True):
|
||||
if charged is None:
|
||||
charged = metric
|
||||
size = self.get_price_size(cini, cend)
|
||||
new_price += self.get_price(account, metric) * size
|
||||
new_metric += metric
|
||||
size = self.get_price_size(rini, bp)
|
||||
old_price = self.get_price(account, charged) * size
|
||||
if new_price > old_price:
|
||||
metric = new_metric - charged
|
||||
price = new_price - old_price
|
||||
lines.append(self.generate_line(order, price, rini, bp, metric=metric, computed=True))
|
||||
for cini, cend, metric in order.get_metric(rini, min(bp, order.billed_until), changes=True):
|
||||
if cmetric is None:
|
||||
cmetric = metric
|
||||
cprice = self.get_price(account, cmetric)
|
||||
if metric > cmetric:
|
||||
size = self.get_price_size(cini, cend)
|
||||
rprice = self.get_price(account, metric)
|
||||
if rprice > cprice:
|
||||
price = (rprice-cprice) * size
|
||||
prepay_discount = cprice*size
|
||||
discounts = ()
|
||||
if prepay_discount:
|
||||
discounts = (
|
||||
('prepay', -prepay_discount),
|
||||
)
|
||||
lines.append(self.generate_line(order, price, cini, cend,
|
||||
metric=metric, computed=True, discounts=discounts))
|
||||
if order.billed_until and order.cancelled_on and order.cancelled_on >= order.billed_until:
|
||||
continue
|
||||
if self.billing_period != self.NEVER:
|
||||
|
|
Loading…
Reference in a new issue