Merge pull request #17046 from nabinhait/deferred_revenue
Refactor: deferred revenue booking logic
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 8fbdb54..e510e38 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
from erpnext.hooks import regional_overrides
from frappe.utils import getdate
-__version__ = '11.1.16'
+__version__ = '11.1.17'
def get_default_company(user=None):
'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
index dafa330..fc0654e 100644
--- a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
+++ b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
@@ -80,7 +80,7 @@
for d in entries:
row = self.append('payment_entries', {})
- amount = d.get('debit', 0) - d.get('credit', 0)
+ amount = flt(d.get('debit', 0)) - flt(d.get('credit', 0))
formatted_amount = fmt_money(abs(amount), 2, d.account_currency)
d.amount = formatted_amount + " " + (_("Dr") if amount > 0 else _("Cr"))
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 7c48b5c..92342f4 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -52,11 +52,6 @@
self.update_loan()
self.update_inter_company_jv()
- def before_print(self):
- self.gl_entries = frappe.get_list("GL Entry",filters={"voucher_type": "Journal Entry",
- "voucher_no": self.name} ,
- fields=["account", "party_type", "party", "debit", "credit", "remarks"]
- )
def get_title(self):
return self.pay_to_recd_from or self.accounts[0].account
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index f356ef8..9100410 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -70,11 +70,6 @@
self.update_advance_paid()
self.update_expense_claim()
- def before_print(self):
- self.gl_entries = frappe.get_list("GL Entry",filters={"voucher_type": "Payment Entry",
- "voucher_no": self.name} ,
- fields=["account", "party_type", "party", "debit", "credit", "remarks"]
- )
def on_cancel(self):
self.setup_party_account_field()
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 53eb731..450f2d0 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -55,11 +55,6 @@
if not self.on_hold:
self.release_date = ''
- def before_print(self):
- self.gl_entries = frappe.get_list("GL Entry",filters={"voucher_type": "Purchase Invoice",
- "voucher_no": self.name} ,
- fields=["account", "party_type", "party", "debit", "credit"]
- )
def invoice_is_blocked(self):
return self.on_hold and (not self.release_date or self.release_date > getdate(nowdate()))
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 61e1224..489343c 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -205,11 +205,6 @@
def before_cancel(self):
self.update_time_sheet(None)
- def before_print(self):
- self.gl_entries = frappe.get_list("GL Entry",filters={"voucher_type": "Sales Invoice",
- "voucher_no": self.name} ,
- fields=["account", "party_type", "party", "debit", "credit"]
- )
def on_cancel(self):
self.check_close_sales_order("sales_order")
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
index ffd1994..244aa8a 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
@@ -146,6 +146,7 @@
row += [partywise_advance_amount.get(party, 0)]
+ paid_amt = 0
if party_dict.paid_amt > 0:
paid_amt = flt(party_dict.paid_amt - partywise_advance_amount.get(party, 0))
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 34bbe7b..86b1ab6 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -116,6 +116,12 @@
self.validate_non_invoice_documents_schedule()
def before_print(self):
+ if self.doctype in ['Journal Entry', 'Payment Entry', 'Sales Invoice', 'Purchase Invoice']:
+ self.gl_entries = frappe.get_list("GL Entry", filters={
+ "voucher_type": self.doctype,
+ "voucher_no": self.name
+ }, fields=["account", "party_type", "party", "debit", "credit", "remarks"])
+
if self.doctype in ['Purchase Order', 'Sales Order', 'Sales Invoice', 'Purchase Invoice',
'Supplier Quotation', 'Purchase Receipt', 'Delivery Note', 'Quotation']:
if self.get("group_same_items"):
diff --git a/erpnext/regional/italy/utils.py b/erpnext/regional/italy/utils.py
index b299a6f..435faea 100644
--- a/erpnext/regional/italy/utils.py
+++ b/erpnext/regional/italy/utils.py
@@ -207,19 +207,25 @@
else:
doc.company_fiscal_regime = company_fiscal_regime
+ doc.company_tax_id = frappe.get_cached_value("Company", doc.company, 'tax_id')
+ doc.company_fiscal_code = frappe.get_cached_value("Company", doc.company, 'fiscal_code')
if not doc.company_tax_id and not doc.company_fiscal_code:
frappe.throw(_("Please set either the Tax ID or Fiscal Code on Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
#Validate customer details
- customer_type, is_public_administration = frappe.db.get_value("Customer", doc.customer, ["customer_type", "is_public_administration"])
- if customer_type == _("Individual"):
+ customer = frappe.get_doc("Customer", doc.customer)
+
+ if customer.customer_type == _("Individual"):
+ doc.customer_fiscal_code = customer.fiscal_code
if not doc.customer_fiscal_code:
frappe.throw(_("Please set Fiscal Code for the customer '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))
else:
- if is_public_administration:
+ if customer.is_public_administration:
+ doc.customer_fiscal_code = customer.fiscal_code
if not doc.customer_fiscal_code:
frappe.throw(_("Please set Fiscal Code for the public administration '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))
else:
+ doc.tax_id = customer.tax_id
if not doc.tax_id:
frappe.throw(_("Please set Tax ID for the customer '%s'" % doc.customer), title=_("E-Invoicing Information Missing"))