def calculate_item_values(self): def _set_base(item, print_field, base_field): """set values in base currency""" item.fields[base_field] = flt((flt(item.fields[print_field], self.precision.item[print_field]) * self.doc.conversion_rate), self.precision.item[base_field]) for item in self.item_doclist: round_floats_in_doc(item, self.precision.item) if item.discount == 100: if not item.import_ref_rate: item.import_ref_rate = item.import_rate item.import_rate = 0 else: if item.import_ref_rate: item.import_rate = flt(item.import_ref_rate * (1.0 - (item.discount_rate / 100.0)), self.precision.item.import_rate) else: # assume that print rate and discount are specified item.import_ref_rate = flt(item.import_rate / (1.0 - (item.discount_rate / 100.0)), self.precision.item.import_ref_rate) item.import_amount = flt(item.import_rate * item.qty, self.precision.item.import_amount) _set_base(item, "import_ref_rate", "purchase_ref_rate") _set_base(item, "import_rate", "rate") _set_base(item, "import_amount", "amount")
def initialize_taxes(self): for tax in self.tax_doclist: # initialize totals to 0 tax.tax_amount = tax.total = 0.0 # temporary fields tax.tax_amount_for_current_item = tax.grand_total_for_current_item = 0.0 tax.item_wise_tax_detail = {} self.validate_on_previous_row(tax) round_floats_in_doc(tax, self.precision.tax)
def initialize_taxes(self): for tax in self.tax_doclist: # initialize totals to 0 tax.tax_amount = tax.total = tax.total_print = 0 tax.grand_total_for_current_item = tax.tax_amount_for_current_item = 0 # for actual type, user can mention actual tax amount in tax.tax_amount_print if tax.charge_type != "Actual" or tax.rate: tax.tax_amount_print = 0 self.validate_on_previous_row(tax) self.validate_included_tax(tax) # round relevant values round_floats_in_doc(tax, self.precision.tax)
def calculate_item_values(self): def _set_base(item, print_field, base_field): """set values in base currency""" item.fields[base_field] = flt((flt( item.fields[print_field], self.precision.item[print_field]) * self.doc.conversion_rate), self.precision.item[base_field]) for item in self.item_doclist: round_floats_in_doc(item, self.precision.item) # hack! - cleaned up in _cleanup() if self.doc.doctype != "Purchase Invoice": item.rate = item.purchase_rate self.precision.item.rate = self.precision.item.purchase_rate item.discount = item.discount_rate self.precision.item.discount = self.precision.item.discount_rate if item.discount == 100: if not item.import_ref_rate: item.import_ref_rate = item.import_rate item.import_rate = 0 else: if item.import_ref_rate: item.import_rate = flt( item.import_ref_rate * (1.0 - (item.discount_rate / 100.0)), self.precision.item.import_rate) else: # assume that print rate and discount are specified item.import_ref_rate = flt( item.import_rate / (1.0 - (item.discount_rate / 100.0)), self.precision.item.import_ref_rate) item.import_amount = flt(item.import_rate * item.qty, self.precision.item.import_amount) _set_base(item, "import_ref_rate", "purchase_ref_rate") _set_base(item, "import_rate", "rate") _set_base(item, "import_amount", "amount")
def calculate_item_values(self): def _set_base(item, print_field, base_field): """set values in base currency""" item.fields[base_field] = flt((flt(item.fields[print_field], self.precision.item[print_field]) * \ self.doc.fields.get(self.fmap.exchange_rate)), self.precision.item[base_field]) for item in self.item_doclist: round_floats_in_doc(item, self.precision.item) if item.fields.get(self.fmap.discount) == 100: if not item.fields.get(self.fmap.print_ref_rate): item.fields[self.fmap.print_ref_rate] = \ item.fields.get(self.fmap.print_rate) item.fields[self.fmap.print_rate] = 0 else: if item.fields.get(self.fmap.print_ref_rate): item.fields[self.fmap.print_rate] = \ flt(item.fields.get(self.fmap.print_ref_rate) * (1.0 - (item.fields.get(self.fmap.discount) / 100.0)), self.precision.item[self.fmap.print_rate]) else: # assume that print rate and discount are specified item.fields[self.fmap.print_ref_rate] = \ flt(item.fields.get(self.fmap.print_rate) / (1.0 - (item.fields.get(self.fmap.discount) / 100.0)), self.precision.item[self.fmap.print_ref_rate]) item.fields[self.fmap.print_amount] = \ flt(item.fields.get(self.fmap.print_rate) * \ item.fields.get("qty"), self.precision.item[self.fmap.print_amount]) _set_base(item, self.fmap.print_ref_rate, self.fmap.ref_rate) _set_base(item, self.fmap.print_rate, self.fmap.rate) _set_base(item, self.fmap.print_amount, "amount")