mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 17:04:47 +00:00
[fix] Update monthly sales value on Company (#10417)
* [fix] Update monthly sales value on cancellation of invoice, also update modified datestamp * Company monthly sales: patches and test cases
This commit is contained in:
committed by
Makarand Bauskar
parent
f35710db15
commit
64c32dcd59
@@ -19,6 +19,7 @@ from erpnext.accounts.doctype.asset.depreciation \
|
|||||||
import get_disposal_account_and_cost_center, get_gl_entries_on_asset_disposal
|
import get_disposal_account_and_cost_center, get_gl_entries_on_asset_disposal
|
||||||
from erpnext.stock.doctype.batch.batch import set_batch_nos
|
from erpnext.stock.doctype.batch.batch import set_batch_nos
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos, get_delivery_note_serial_no
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos, get_delivery_note_serial_no
|
||||||
|
from erpnext.setup.doctype.company.company import update_company_current_month_sales
|
||||||
|
|
||||||
form_grid_templates = {
|
form_grid_templates = {
|
||||||
"items": "templates/form_grid/item_grid.html"
|
"items": "templates/form_grid/item_grid.html"
|
||||||
@@ -140,7 +141,7 @@ class SalesInvoice(SellingController):
|
|||||||
|
|
||||||
self.update_time_sheet(self.name)
|
self.update_time_sheet(self.name)
|
||||||
|
|
||||||
frappe.enqueue('erpnext.setup.doctype.company.company.update_company_current_month_sales', company=self.company)
|
self.update_current_month_sales()
|
||||||
|
|
||||||
def validate_pos_paid_amount(self):
|
def validate_pos_paid_amount(self):
|
||||||
if len(self.payments) == 0 and self.is_pos:
|
if len(self.payments) == 0 and self.is_pos:
|
||||||
@@ -178,6 +179,15 @@ class SalesInvoice(SellingController):
|
|||||||
self.make_gl_entries_on_cancel()
|
self.make_gl_entries_on_cancel()
|
||||||
frappe.db.set(self, 'status', 'Cancelled')
|
frappe.db.set(self, 'status', 'Cancelled')
|
||||||
|
|
||||||
|
self.update_current_month_sales()
|
||||||
|
|
||||||
|
def update_current_month_sales(self):
|
||||||
|
if frappe.flags.in_test:
|
||||||
|
update_company_current_month_sales(self.company)
|
||||||
|
else:
|
||||||
|
frappe.enqueue('erpnext.setup.doctype.company.company.update_company_current_month_sales',
|
||||||
|
company=self.company)
|
||||||
|
|
||||||
def update_status_updater_args(self):
|
def update_status_updater_args(self):
|
||||||
if cint(self.update_stock):
|
if cint(self.update_stock):
|
||||||
self.status_updater.extend([{
|
self.status_updater.extend([{
|
||||||
|
|||||||
@@ -1272,6 +1272,17 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
si.insert()
|
si.insert()
|
||||||
return si
|
return si
|
||||||
|
|
||||||
|
def test_company_monthly_sales(self):
|
||||||
|
existing_current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales")
|
||||||
|
|
||||||
|
si = create_sales_invoice()
|
||||||
|
current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales")
|
||||||
|
self.assertEqual(current_month_sales, existing_current_month_sales + si.base_grand_total)
|
||||||
|
|
||||||
|
si.cancel()
|
||||||
|
current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales")
|
||||||
|
self.assertEqual(current_month_sales, existing_current_month_sales)
|
||||||
|
|
||||||
def create_sales_invoice(**args):
|
def create_sales_invoice(**args):
|
||||||
si = frappe.new_doc("Sales Invoice")
|
si = frappe.new_doc("Sales Invoice")
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
|||||||
@@ -421,7 +421,7 @@ erpnext.patches.v8_1.removed_report_support_hours
|
|||||||
erpnext.patches.v8_1.add_indexes_in_transaction_doctypes
|
erpnext.patches.v8_1.add_indexes_in_transaction_doctypes
|
||||||
erpnext.patches.v8_3.set_restrict_to_domain_for_module_def
|
erpnext.patches.v8_3.set_restrict_to_domain_for_module_def
|
||||||
erpnext.patches.v8_1.update_expense_claim_status
|
erpnext.patches.v8_1.update_expense_claim_status
|
||||||
erpnext.patches.v8_3.update_company_total_sales
|
erpnext.patches.v8_3.update_company_total_sales #2017-08-16
|
||||||
erpnext.patches.v8_4.make_scorecard_records
|
erpnext.patches.v8_4.make_scorecard_records
|
||||||
erpnext.patches.v8_1.set_delivery_date_in_so_item #2017-07-28
|
erpnext.patches.v8_1.set_delivery_date_in_so_item #2017-07-28
|
||||||
erpnext.patches.v8_5.fix_tax_breakup_for_non_invoice_docs
|
erpnext.patches.v8_5.fix_tax_breakup_for_non_invoice_docs
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||||||
import frappe, os
|
import frappe, os
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
from frappe.utils import cint
|
from frappe.utils import cint, today, formatdate
|
||||||
import frappe.defaults
|
import frappe.defaults
|
||||||
|
|
||||||
|
|
||||||
@@ -312,39 +312,35 @@ def get_name_with_abbr(name, company):
|
|||||||
return " - ".join(parts)
|
return " - ".join(parts)
|
||||||
|
|
||||||
def update_company_current_month_sales(company):
|
def update_company_current_month_sales(company):
|
||||||
from frappe.utils import today, formatdate
|
|
||||||
current_month_year = formatdate(today(), "MM-yyyy")
|
current_month_year = formatdate(today(), "MM-yyyy")
|
||||||
|
|
||||||
results = frappe.db.sql(('''
|
results = frappe.db.sql('''
|
||||||
select
|
select
|
||||||
sum(base_grand_total) as total, date_format(posting_date, '%m-%Y') as month_year
|
sum(base_grand_total) as total, date_format(posting_date, '%m-%Y') as month_year
|
||||||
from
|
from
|
||||||
`tabSales Invoice`
|
`tabSales Invoice`
|
||||||
where
|
where
|
||||||
date_format(posting_date, '%m-%Y')="{0}" and
|
date_format(posting_date, '%m-%Y')="{0}"
|
||||||
company = "{1}"
|
and docstatus = 1
|
||||||
|
and company = "{1}"
|
||||||
group by
|
group by
|
||||||
month_year;
|
month_year
|
||||||
''').format(current_month_year, frappe.db.escape(company)), as_dict = True)
|
'''.format(current_month_year, frappe.db.escape(company)), as_dict = True)
|
||||||
|
|
||||||
monthly_total = results[0]['total'] if len(results) > 0 else 0
|
monthly_total = results[0]['total'] if len(results) > 0 else 0
|
||||||
|
|
||||||
frappe.db.sql(('''
|
frappe.db.set_value("Company", company, "total_monthly_sales", monthly_total)
|
||||||
update tabCompany set total_monthly_sales = %s where name=%s
|
|
||||||
'''), (monthly_total, frappe.db.escape(company)))
|
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
|
|
||||||
|
|
||||||
def update_company_monthly_sales(company):
|
def update_company_monthly_sales(company):
|
||||||
'''Cache past year monthly sales of every company based on sales invoices'''
|
'''Cache past year monthly sales of every company based on sales invoices'''
|
||||||
from frappe.utils.goal import get_monthly_results
|
from frappe.utils.goal import get_monthly_results
|
||||||
import json
|
import json
|
||||||
filter_str = "company = '{0}' and status != 'Draft'".format(frappe.db.escape(company))
|
filter_str = "company = '{0}' and status != 'Draft' and docstatus=1".format(frappe.db.escape(company))
|
||||||
month_to_value_dict = get_monthly_results("Sales Invoice", "base_grand_total", "posting_date", filter_str, "sum")
|
month_to_value_dict = get_monthly_results("Sales Invoice", "base_grand_total",
|
||||||
|
"posting_date", filter_str, "sum")
|
||||||
|
|
||||||
frappe.db.sql(('''
|
frappe.db.set_value("Company", company, "sales_monthly_history", json.dumps(month_to_value_dict))
|
||||||
update tabCompany set sales_monthly_history = %s where name=%s
|
|
||||||
'''), (json.dumps(month_to_value_dict), frappe.db.escape(company)))
|
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
|
|
||||||
def cache_companies_monthly_sales_history():
|
def cache_companies_monthly_sales_history():
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ def delete_company_transactions(company_name):
|
|||||||
"Purchase Taxes and Charges Template", "POS Profile", 'BOM'):
|
"Purchase Taxes and Charges Template", "POS Profile", 'BOM'):
|
||||||
delete_for_doctype(doctype, company_name)
|
delete_for_doctype(doctype, company_name)
|
||||||
|
|
||||||
|
# reset company values
|
||||||
|
doc.total_monthly_sales = 0
|
||||||
|
doc.sales_monthly_history = None
|
||||||
|
doc.save()
|
||||||
# Clear notification counts
|
# Clear notification counts
|
||||||
clear_notifications()
|
clear_notifications()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user