Add configurable frequency in Selling Settings for update of project … (#14670)
* Add configurable frequency in Selling Settings for update of project and company * remove redundant code * remove redundant code, only trigger calculation if order/invoice is present * removed dangling commas as per common convention in hooks * fix:handling multiple documents * Update selling_settings.json
This commit is contained in:
parent
d0c6184e24
commit
7aabef2026
@ -147,8 +147,9 @@ class SalesInvoice(SellingController):
|
||||
|
||||
self.update_time_sheet(self.name)
|
||||
|
||||
update_company_current_month_sales(self.company)
|
||||
self.update_project()
|
||||
if frappe.db.get_single_value('Selling Settings', 'sales_update_frequency') == "Each Transaction":
|
||||
update_company_current_month_sales(self.company)
|
||||
self.update_project()
|
||||
update_linked_invoice(self.doctype, self.name, self.inter_company_invoice_reference)
|
||||
|
||||
def validate_pos_paid_amount(self):
|
||||
@ -187,8 +188,9 @@ class SalesInvoice(SellingController):
|
||||
self.make_gl_entries_on_cancel()
|
||||
frappe.db.set(self, 'status', 'Cancelled')
|
||||
|
||||
update_company_current_month_sales(self.company)
|
||||
self.update_project()
|
||||
if frappe.db.get_single_value('Selling Settings', 'sales_update_frequency') == "Each Transaction":
|
||||
update_company_current_month_sales(self.company)
|
||||
self.update_project()
|
||||
|
||||
unlink_inter_company_invoice(self.doctype, self.name, self.inter_company_invoice_reference)
|
||||
|
||||
|
@ -235,7 +235,8 @@ scheduler_events = {
|
||||
"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.update_latest_price_in_all_boms",
|
||||
"erpnext.assets.doctype.asset.asset.update_maintenance_status",
|
||||
"erpnext.assets.doctype.asset.asset.make_post_gl_entry",
|
||||
"erpnext.crm.doctype.contract.contract.update_status_for_contracts"
|
||||
"erpnext.crm.doctype.contract.contract.update_status_for_contracts",
|
||||
"erpnext.projects.doctype.project.project.update_project_sales_billing"
|
||||
],
|
||||
"monthly": [
|
||||
"erpnext.accounts.doctype.sales_invoice.sales_invoice.booked_deferred_revenue",
|
||||
|
@ -412,6 +412,35 @@ def create_project_update(project):
|
||||
)
|
||||
return data
|
||||
|
||||
def update_project_sales_billing():
|
||||
sales_update_frequency = frappe.db.get_single_value("Selling Settings", "sales_update_frequency")
|
||||
if sales_update_frequency == "Each Transaction":
|
||||
return
|
||||
elif (sales_update_frequency == "Monthly" and frappe.utils.now_datetime().day != 1):
|
||||
return
|
||||
|
||||
#Else simply fallback to Daily
|
||||
exists_query = '(SELECT 1 from `tab{doctype}` where docstatus = 1 and project = `tabProject`.name)'
|
||||
project_map = {}
|
||||
for project_details in frappe.db.sql('''
|
||||
SELECT name, 1 as order_exists, null as invoice_exists from `tabProject` where
|
||||
exists {order_exists}
|
||||
union
|
||||
SELECT name, null as order_exists, 1 as invoice_exists from `tabProject` where
|
||||
exists {invoice_exists}
|
||||
'''.format(
|
||||
order_exists=exists_query.format(doctype="Sales Order"),
|
||||
invoice_exists=exists_query.format(doctype="Sales Invoice"),
|
||||
), as_dict=True):
|
||||
project = project_map.setdefault(project_details.name, frappe.get_doc('Project', project_details.name))
|
||||
if project_details.order_exists:
|
||||
project.update_sales_amount()
|
||||
if project_details.invoice_exists:
|
||||
project.update_billed_amount()
|
||||
|
||||
for project in project_map.values():
|
||||
project.save()
|
||||
|
||||
@frappe.whitelist()
|
||||
def create_kanban_board_if_not_exists(project):
|
||||
from frappe.desk.doctype.kanban_board.kanban_board import quick_kanban_board
|
||||
@ -419,4 +448,4 @@ def create_kanban_board_if_not_exists(project):
|
||||
if not frappe.db.exists('Kanban Board', project):
|
||||
quick_kanban_board('Task', project, 'status')
|
||||
|
||||
return True
|
||||
return True
|
||||
|
@ -193,13 +193,14 @@ class SalesOrder(SellingController):
|
||||
self.update_blanket_order()
|
||||
|
||||
def update_project(self):
|
||||
project_list = []
|
||||
if frappe.db.get_single_value('Selling Settings', 'sales_update_frequency') != "Each Transaction":
|
||||
return
|
||||
|
||||
if self.project:
|
||||
project = frappe.get_doc("Project", self.project)
|
||||
project.flags.dont_sync_tasks = True
|
||||
project.update_sales_amount()
|
||||
project.save()
|
||||
project_list.append(self.project)
|
||||
|
||||
def check_credit_limit(self):
|
||||
# if bypass credit limit check is set to true (1) at sales order level,
|
||||
|
@ -15,6 +15,7 @@
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -47,6 +48,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -78,6 +80,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -110,6 +113,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -142,6 +146,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -173,6 +178,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -206,6 +212,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -237,6 +244,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -266,6 +274,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -297,6 +306,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -328,6 +338,42 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Each Transaction",
|
||||
"description": "How often should project and company be updated based on Sales Transactions.",
|
||||
"fieldname": "sales_update_frequency",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Sales Update Frequency",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Each Transaction\nDaily\nMonthly",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -358,6 +404,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -388,6 +435,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -419,6 +467,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -450,6 +499,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -481,6 +531,7 @@
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
@ -522,7 +573,7 @@
|
||||
"issingle": 1,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2018-02-23 16:23:27.768602",
|
||||
"modified": "2018-06-25 12:56:16.332039",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Selling Settings",
|
||||
@ -530,7 +581,6 @@
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 0,
|
||||
@ -556,5 +606,6 @@
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 0,
|
||||
"track_seen": 0
|
||||
}
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ def set_default_settings(args):
|
||||
selling_settings.so_required = "No"
|
||||
selling_settings.dn_required = "No"
|
||||
selling_settings.allow_multiple_items = 1
|
||||
selling_settings.sales_update_frequency = "Each Transaction"
|
||||
selling_settings.save()
|
||||
|
||||
buying_settings = frappe.get_doc("Buying Settings")
|
||||
|
Loading…
x
Reference in New Issue
Block a user