fix: Role to override maintain same rate check in transactions (#25193)

* feat: configurable action if the same purchase/selling rate is not maintained

* fix: Role to override maintain same rate check in transactions

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
This commit is contained in:
Deepesh Garg 2021-04-14 10:43:45 +05:30 committed by GitHub
parent ca412d37c8
commit b717420842
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 11 deletions

View File

@ -13,6 +13,8 @@
"po_required", "po_required",
"pr_required", "pr_required",
"maintain_same_rate", "maintain_same_rate",
"maintain_same_rate_action",
"role_to_override_stop_action",
"allow_multiple_items", "allow_multiple_items",
"subcontract", "subcontract",
"backflush_raw_materials_of_subcontract_based_on", "backflush_raw_materials_of_subcontract_based_on",
@ -89,6 +91,23 @@
{ {
"fieldname": "column_break_11", "fieldname": "column_break_11",
"fieldtype": "Column Break" "fieldtype": "Column Break"
},
{
"default": "Stop",
"depends_on": "maintain_same_rate",
"description": "Configure the action to stop the transaction or just warn if the same rate is not maintained.",
"fieldname": "maintain_same_rate_action",
"fieldtype": "Select",
"label": "Action If Same Rate is Not Maintained",
"mandatory_depends_on": "maintain_same_rate",
"options": "Stop\nWarn"
},
{
"depends_on": "eval:doc.maintain_same_rate_action == 'Stop'",
"fieldname": "role_to_override_stop_action",
"fieldtype": "Link",
"label": "Role Allowed to Override Stop Action",
"options": "Role"
} }
], ],
"icon": "fa fa-cog", "icon": "fa fa-cog",
@ -96,7 +115,7 @@
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"issingle": 1, "issingle": 1,
"links": [], "links": [],
"modified": "2021-03-02 17:34:04.190677", "modified": "2021-04-04 20:01:44.087066",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Buying", "module": "Buying",
"name": "Buying Settings", "name": "Buying Settings",

View File

@ -18,6 +18,8 @@
"dn_required", "dn_required",
"sales_update_frequency", "sales_update_frequency",
"maintain_same_sales_rate", "maintain_same_sales_rate",
"maintain_same_rate_action",
"role_to_override_stop_action",
"editable_price_list_rate", "editable_price_list_rate",
"allow_multiple_items", "allow_multiple_items",
"allow_against_multiple_purchase_orders", "allow_against_multiple_purchase_orders",
@ -133,6 +135,23 @@
"fieldname": "hide_tax_id", "fieldname": "hide_tax_id",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Hide Customer's Tax ID from Sales Transactions" "label": "Hide Customer's Tax ID from Sales Transactions"
},
{
"default": "Stop",
"depends_on": "maintain_same_sales_rate",
"description": "Configure the action to stop the transaction or just warn if the same rate is not maintained.",
"fieldname": "maintain_same_rate_action",
"fieldtype": "Select",
"label": "Action If Same Rate is Not Maintained",
"mandatory_depends_on": "maintain_same_sales_rate",
"options": "Stop\nWarn"
},
{
"depends_on": "eval: doc.maintain_same_rate_action == 'Stop'",
"fieldname": "role_to_override_stop_action",
"fieldtype": "Link",
"label": "Role Allowed to Override Stop Action",
"options": "Role"
} }
], ],
"icon": "fa fa-cog", "icon": "fa fa-cog",
@ -140,7 +159,7 @@
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"issingle": 1, "issingle": 1,
"links": [], "links": [],
"modified": "2021-03-02 17:35:53.603607", "modified": "2021-04-04 20:18:12.814624",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Selling", "module": "Selling",
"name": "Selling Settings", "name": "Selling Settings",

View File

@ -120,11 +120,11 @@ class TransactionBase(StatusUpdater):
buying_doctypes = ["Purchase Order", "Purchase Invoice", "Purchase Receipt"] buying_doctypes = ["Purchase Order", "Purchase Invoice", "Purchase Receipt"]
if self.doctype in buying_doctypes: if self.doctype in buying_doctypes:
to_disable = "Maintain same rate throughout Purchase cycle" action = frappe.db.get_single_value("Buying Settings", "maintain_same_rate_action")
settings_page = "Buying Settings" settings_doc = "Buying Settings"
else: else:
to_disable = "Maintain same rate throughout Sales cycle" action = frappe.db.get_single_value("Selling Settings", "maintain_same_rate_action")
settings_page = "Selling Settings" settings_doc = "Selling Settings"
for ref_dt, ref_dn_field, ref_link_field in ref_details: for ref_dt, ref_dn_field, ref_link_field in ref_details:
for d in self.get("items"): for d in self.get("items"):
@ -132,11 +132,16 @@ class TransactionBase(StatusUpdater):
ref_rate = frappe.db.get_value(ref_dt + " Item", d.get(ref_link_field), "rate") ref_rate = frappe.db.get_value(ref_dt + " Item", d.get(ref_link_field), "rate")
if abs(flt(d.rate - ref_rate, d.precision("rate"))) >= .01: if abs(flt(d.rate - ref_rate, d.precision("rate"))) >= .01:
frappe.msgprint(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ") if action == "Stop":
.format(d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate)) role_allowed_to_override = frappe.db.get_single_value(settings_doc, 'role_to_override_stop_action')
frappe.throw(_("To allow different rates, disable the {0} checkbox in {1}.")
.format(frappe.bold(_(to_disable)), if role_allowed_to_override not in frappe.get_roles():
get_link_to_form(settings_page, settings_page, frappe.bold(settings_page)))) frappe.throw(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4})").format(
d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate))
else:
frappe.msgprint(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4})").format(
d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate), title=_("Warning"), indicator="orange")
def get_link_filters(self, for_doctype): def get_link_filters(self, for_doctype):
if hasattr(self, "prev_link_mapper") and self.prev_link_mapper.get(for_doctype): if hasattr(self, "prev_link_mapper") and self.prev_link_mapper.get(for_doctype):