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()
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)
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)