예제 #1
0
 def __new_charge_with_consumptions(self, amount, description, ap_consumptions,
                                    consumption, date, invoice):
     ops = []
     db_ap_consumptions = []
     declared = sum(ap_consumptions.values())
     if declared > consumption:
         raise NameError(_('Ceva e ciudat cu consumul declarat! E mai mare decat cel de pe document! Declarat de locatari=') + str(declared))
     per_unit = amount / consumption
     logger.info('Declared consumption is %f, price per unit is %f' % 
                 (declared, per_unit))
     for k, v in ap_consumptions.items():
         ap = apartment_by_pk(k)
         total_ap = Decimal(v) / declared * amount
         loss = total_ap - v * per_unit
         logger.info('Consumption for %s is %f, total to pay %f, lost %f' % 
                     (ap, v, total_ap, loss))
         ops.append((ap.account, total_ap, loss))
         db_ap_consumptions.append(apartment_consumption(v, ap))
         
     doc = self.account.new_multi_transfer(description, self.billed.default_account,
                                     ops, date, self.charge_type(),
                                     invoice=invoice)
     
     svc_consumption = service_consumption(consumption, self, doc)
     
     svc_consumption.save()
     for ap_consumption in db_ap_consumptions:
         ap_consumption.doc = doc
         ap_consumption.save()
예제 #2
0
 def __new_charge_without_quotas(self, ap_sums, description, date, invoice):
     ops = []
     for k, v in ap_sums.items():
         ap = apartment_by_pk(k)
         ops.append((ap.account, v))
     self.account.new_multi_transfer(description, self.billed.default_account, ops,
                                     date, self.charge_type(),
                                     invoice=invoice)
예제 #3
0
 def set_manual_quota(self, ap_quotas):            
     logger.info('Setting quota %s (%s) on %s', self.quota_type, ap_quotas,
                  self)
     if self.quota_type != 'manual':
         logger.error('Quota type %s is invalid', self.quota_type)
         raise NameError(_(u'Tipul de cotă este invalid'))
     
     for k, v in ap_quotas.items():
         a = apartment_by_pk(k)
         Quota.set_quota(self.account, a.account, v)