Merge pull request #27735 from GangaManoj/fix-so-cancellation-message
fix: Sales Order cancellation message
This commit is contained in:
commit
ce06aaa0ae
@ -3,7 +3,39 @@
|
|||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
from frappe.utils.data import today
|
||||||
|
|
||||||
# test_records = frappe.get_test_records('Maintenance Visit')
|
# test_records = frappe.get_test_records('Maintenance Visit')
|
||||||
|
|
||||||
class TestMaintenanceVisit(unittest.TestCase):
|
class TestMaintenanceVisit(unittest.TestCase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def make_maintenance_visit():
|
||||||
|
mv = frappe.new_doc("Maintenance Visit")
|
||||||
|
mv.company = "_Test Company"
|
||||||
|
mv.customer = "_Test Customer"
|
||||||
|
mv.mntc_date = today()
|
||||||
|
mv.completion_status = "Partially Completed"
|
||||||
|
|
||||||
|
sales_person = make_sales_person("Dwight Schrute")
|
||||||
|
|
||||||
|
mv.append("purposes", {
|
||||||
|
"item_code": "_Test Item",
|
||||||
|
"sales_person": "Sales Team",
|
||||||
|
"description": "Test Item",
|
||||||
|
"work_done": "Test Work Done",
|
||||||
|
"service_person": sales_person.name
|
||||||
|
})
|
||||||
|
mv.insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
return mv
|
||||||
|
|
||||||
|
def make_sales_person(name):
|
||||||
|
sales_person = frappe.get_doc({
|
||||||
|
'doctype': "Sales Person",
|
||||||
|
'sales_person_name': name
|
||||||
|
})
|
||||||
|
sales_person.insert(ignore_if_duplicate = True)
|
||||||
|
|
||||||
|
return sales_person
|
||||||
|
@ -223,60 +223,15 @@ class SalesOrder(SellingController):
|
|||||||
check_credit_limit(self.customer, self.company)
|
check_credit_limit(self.customer, self.company)
|
||||||
|
|
||||||
def check_nextdoc_docstatus(self):
|
def check_nextdoc_docstatus(self):
|
||||||
# Checks Delivery Note
|
linked_invoices = frappe.db.sql_list("""select distinct t1.name
|
||||||
submit_dn = frappe.db.sql_list("""
|
|
||||||
select t1.name
|
|
||||||
from `tabDelivery Note` t1,`tabDelivery Note Item` t2
|
|
||||||
where t1.name = t2.parent and t2.against_sales_order = %s and t1.docstatus = 1""", self.name)
|
|
||||||
|
|
||||||
if submit_dn:
|
|
||||||
submit_dn = [get_link_to_form("Delivery Note", dn) for dn in submit_dn]
|
|
||||||
frappe.throw(_("Delivery Notes {0} must be cancelled before cancelling this Sales Order")
|
|
||||||
.format(", ".join(submit_dn)))
|
|
||||||
|
|
||||||
# Checks Sales Invoice
|
|
||||||
submit_rv = frappe.db.sql_list("""select t1.name
|
|
||||||
from `tabSales Invoice` t1,`tabSales Invoice Item` t2
|
from `tabSales Invoice` t1,`tabSales Invoice Item` t2
|
||||||
where t1.name = t2.parent and t2.sales_order = %s and t1.docstatus < 2""",
|
where t1.name = t2.parent and t2.sales_order = %s and t1.docstatus = 0""",
|
||||||
self.name)
|
self.name)
|
||||||
|
|
||||||
if submit_rv:
|
if linked_invoices:
|
||||||
submit_rv = [get_link_to_form("Sales Invoice", si) for si in submit_rv]
|
linked_invoices = [get_link_to_form("Sales Invoice", si) for si in linked_invoices]
|
||||||
frappe.throw(_("Sales Invoice {0} must be cancelled before cancelling this Sales Order")
|
frappe.throw(_("Sales Invoice {0} must be deleted before cancelling this Sales Order")
|
||||||
.format(", ".join(submit_rv)))
|
.format(", ".join(linked_invoices)))
|
||||||
|
|
||||||
#check maintenance schedule
|
|
||||||
submit_ms = frappe.db.sql_list("""
|
|
||||||
select t1.name
|
|
||||||
from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2
|
|
||||||
where t2.parent=t1.name and t2.sales_order = %s and t1.docstatus = 1""", self.name)
|
|
||||||
|
|
||||||
if submit_ms:
|
|
||||||
submit_ms = [get_link_to_form("Maintenance Schedule", ms) for ms in submit_ms]
|
|
||||||
frappe.throw(_("Maintenance Schedule {0} must be cancelled before cancelling this Sales Order")
|
|
||||||
.format(", ".join(submit_ms)))
|
|
||||||
|
|
||||||
# check maintenance visit
|
|
||||||
submit_mv = frappe.db.sql_list("""
|
|
||||||
select t1.name
|
|
||||||
from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2
|
|
||||||
where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1""",self.name)
|
|
||||||
|
|
||||||
if submit_mv:
|
|
||||||
submit_mv = [get_link_to_form("Maintenance Visit", mv) for mv in submit_mv]
|
|
||||||
frappe.throw(_("Maintenance Visit {0} must be cancelled before cancelling this Sales Order")
|
|
||||||
.format(", ".join(submit_mv)))
|
|
||||||
|
|
||||||
# check work order
|
|
||||||
pro_order = frappe.db.sql_list("""
|
|
||||||
select name
|
|
||||||
from `tabWork Order`
|
|
||||||
where sales_order = %s and docstatus = 1""", self.name)
|
|
||||||
|
|
||||||
if pro_order:
|
|
||||||
pro_order = [get_link_to_form("Work Order", po) for po in pro_order]
|
|
||||||
frappe.throw(_("Work Order {0} must be cancelled before cancelling this Sales Order")
|
|
||||||
.format(", ".join(pro_order)))
|
|
||||||
|
|
||||||
def check_modified_date(self):
|
def check_modified_date(self):
|
||||||
mod_db = frappe.db.get_value("Sales Order", self.name, "modified")
|
mod_db = frappe.db.get_value("Sales Order", self.name, "modified")
|
||||||
|
@ -10,6 +10,12 @@ from frappe.core.doctype.user_permission.test_user_permission import create_user
|
|||||||
from frappe.utils import add_days, flt, getdate, nowdate
|
from frappe.utils import add_days, flt, getdate, nowdate
|
||||||
|
|
||||||
from erpnext.controllers.accounts_controller import update_child_qty_rate
|
from erpnext.controllers.accounts_controller import update_child_qty_rate
|
||||||
|
from erpnext.maintenance.doctype.maintenance_schedule.test_maintenance_schedule import (
|
||||||
|
make_maintenance_schedule,
|
||||||
|
)
|
||||||
|
from erpnext.maintenance.doctype.maintenance_visit.test_maintenance_visit import (
|
||||||
|
make_maintenance_visit,
|
||||||
|
)
|
||||||
from erpnext.manufacturing.doctype.blanket_order.test_blanket_order import make_blanket_order
|
from erpnext.manufacturing.doctype.blanket_order.test_blanket_order import make_blanket_order
|
||||||
from erpnext.selling.doctype.product_bundle.test_product_bundle import make_product_bundle
|
from erpnext.selling.doctype.product_bundle.test_product_bundle import make_product_bundle
|
||||||
from erpnext.selling.doctype.sales_order.sales_order import (
|
from erpnext.selling.doctype.sales_order.sales_order import (
|
||||||
@ -1278,6 +1284,72 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(frappe.ValidationError, so.cancel)
|
self.assertRaises(frappe.ValidationError, so.cancel)
|
||||||
|
|
||||||
|
def test_so_cancellation_after_si_submission(self):
|
||||||
|
"""
|
||||||
|
Test to check if Sales Order gets cancelled when linked Sales Invoice has been Submitted
|
||||||
|
Expected result: Sales Order should not get cancelled
|
||||||
|
"""
|
||||||
|
so = make_sales_order()
|
||||||
|
so.submit()
|
||||||
|
si = make_sales_invoice(so.name)
|
||||||
|
si.submit()
|
||||||
|
|
||||||
|
so.load_from_db()
|
||||||
|
self.assertRaises(frappe.LinkExistsError, so.cancel)
|
||||||
|
|
||||||
|
def test_so_cancellation_after_dn_submission(self):
|
||||||
|
"""
|
||||||
|
Test to check if Sales Order gets cancelled when linked Delivery Note has been Submitted
|
||||||
|
Expected result: Sales Order should not get cancelled
|
||||||
|
"""
|
||||||
|
so = make_sales_order()
|
||||||
|
so.submit()
|
||||||
|
dn = make_delivery_note(so.name)
|
||||||
|
dn.submit()
|
||||||
|
|
||||||
|
so.load_from_db()
|
||||||
|
self.assertRaises(frappe.LinkExistsError, so.cancel)
|
||||||
|
|
||||||
|
def test_so_cancellation_after_maintenance_schedule_submission(self):
|
||||||
|
"""
|
||||||
|
Expected result: Sales Order should not get cancelled
|
||||||
|
"""
|
||||||
|
so = make_sales_order()
|
||||||
|
so.submit()
|
||||||
|
ms = make_maintenance_schedule()
|
||||||
|
ms.items[0].sales_order = so.name
|
||||||
|
ms.submit()
|
||||||
|
|
||||||
|
so.load_from_db()
|
||||||
|
self.assertRaises(frappe.LinkExistsError, so.cancel)
|
||||||
|
|
||||||
|
def test_so_cancellation_after_maintenance_visit_submission(self):
|
||||||
|
"""
|
||||||
|
Expected result: Sales Order should not get cancelled
|
||||||
|
"""
|
||||||
|
so = make_sales_order()
|
||||||
|
so.submit()
|
||||||
|
mv = make_maintenance_visit()
|
||||||
|
mv.purposes[0].prevdoc_doctype = "Sales Order"
|
||||||
|
mv.purposes[0].prevdoc_docname = so.name
|
||||||
|
mv.submit()
|
||||||
|
|
||||||
|
so.load_from_db()
|
||||||
|
self.assertRaises(frappe.LinkExistsError, so.cancel)
|
||||||
|
|
||||||
|
def test_so_cancellation_after_work_order_submission(self):
|
||||||
|
"""
|
||||||
|
Expected result: Sales Order should not get cancelled
|
||||||
|
"""
|
||||||
|
from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
|
||||||
|
|
||||||
|
so = make_sales_order(item_code="_Test FG Item", qty=10)
|
||||||
|
so.submit()
|
||||||
|
make_wo_order_test_record(sales_order=so.name)
|
||||||
|
|
||||||
|
so.load_from_db()
|
||||||
|
self.assertRaises(frappe.LinkExistsError, so.cancel)
|
||||||
|
|
||||||
def test_payment_terms_are_fetched_when_creating_sales_invoice(self):
|
def test_payment_terms_are_fetched_when_creating_sales_invoice(self):
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import (
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import (
|
||||||
create_payment_terms_template,
|
create_payment_terms_template,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user