diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 6b7c9a27b71..220dff203f7 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -37,7 +37,7 @@ class PurchaseOrder(BuyingController): if not self.status: self.status = "Draft" - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index 5f9a46d9366..2beb5590eeb 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -18,7 +18,7 @@ class SupplierQuotation(BuyingController): if not self.status: self.status = "Draft" - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 0109b6891da..2f83cb9a71c 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -3,10 +3,14 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt +from frappe.utils import flt, comma_or from frappe import msgprint, _, throw from frappe.model.document import Document +def validate_status(status, options): + if status not in options: + frappe.throw(_("Status must be one of {0}").format(comma_or(options))) + status_map = { "Lead": [ ["Converted", "has_customer"], @@ -30,6 +34,16 @@ status_map = { ["Stopped", "eval:self.status=='Stopped'"], ["Cancelled", "eval:self.docstatus==2"], ], + "Delivery Note": [ + ["Draft", None], + ["Submitted", "eval:self.docstatus==1"], + ["Cancelled", "eval:self.docstatus==2"], + ], + "Purchase Receipt": [ + ["Draft", None], + ["Submitted", "eval:self.docstatus==1"], + ["Cancelled", "eval:self.docstatus==2"], + ] } class StatusUpdater(Document): diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py index 61a16621b86..7d6c8ad3778 100644 --- a/erpnext/hr/doctype/attendance/attendance.py +++ b/erpnext/hr/doctype/attendance/attendance.py @@ -40,7 +40,7 @@ class Attendance(Document): frappe.throw(_("Employee {0} is not active or does not exist").format(self.employee)) def validate(self): - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status from erpnext.accounts.utils import validate_fiscal_year validate_status(self.status, ["Present", "Absent", "Half Day"]) validate_fiscal_year(self.att_date, self.fiscal_year, _("Attendance Date"), self) diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index 72a26864ec3..cb0ce118b31 100644 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -32,7 +32,7 @@ class Employee(Document): self.employee = self.name def validate(self): - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Active", "Left"]) self.employee = self.name diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 62eb400f05f..6cd2ad2fb0b 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -26,7 +26,7 @@ class ProductionOrder(Document): if self.docstatus == 0: self.status = "Draft" - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "In Process", "Completed", "Cancelled"]) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 398e1e130b6..feffc4feb09 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -97,7 +97,7 @@ class SalesOrder(SellingController): if not self.status: self.status = "Draft" - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 9127e240c12..831e53763dc 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -91,10 +91,7 @@ class DeliveryNote(SellingController): def validate(self): super(DeliveryNote, self).validate() - - from erpnext.utilities import validate_status - validate_status(self.status, ["Draft", "Submitted", "Cancelled"]) - + self.set_status() self.so_required() self.validate_proj_cust() self.check_stop_sales_order("against_sales_order") @@ -108,7 +105,6 @@ class DeliveryNote(SellingController): self.update_current_stock() - if not self.status: self.status = 'Draft' if not self.installation_status: self.installation_status = 'Not Installed' def validate_with_previous_doc(self): diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 5b61a6cce09..c1be1fd9bf6 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -67,7 +67,7 @@ class MaterialRequest(BuyingController): if not self.status: self.status = "Draft" - from erpnext.utilities import validate_status + from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) self.validate_value("material_request_type", "in", ["Purchase", "Material Transfer", "Material Issue"]) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 9813251b7d4..44fc0cc34af 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -42,13 +42,7 @@ class PurchaseReceipt(BuyingController): super(PurchaseReceipt, self).validate() self.po_required() - - if not self.status: - self.status = "Draft" - - from erpnext.utilities import validate_status - validate_status(self.status, ["Draft", "Submitted", "Cancelled"]) - + self.set_status() self.validate_with_previous_doc() self.validate_rejected_warehouse() self.validate_accepted_rejected_qty() diff --git a/erpnext/utilities/__init__.py b/erpnext/utilities/__init__.py index fd4e84135ba..e69de29bb2d 100644 --- a/erpnext/utilities/__init__.py +++ b/erpnext/utilities/__init__.py @@ -1,24 +0,0 @@ -# ERPNext - web based ERP (http://erpnext.com) -# Copyright (C) 2012 Frappe Technologies Pvt Ltd -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.utils import cint, comma_or - -def validate_status(status, options): - if status not in options: - frappe.throw(_("Status must be one of {0}").format(comma_or(options))) diff --git a/erpnext/utilities/doctype/contact/contact.py b/erpnext/utilities/doctype/contact/contact.py index c99eaa05671..4158d75193d 100644 --- a/erpnext/utilities/doctype/contact/contact.py +++ b/erpnext/utilities/doctype/contact/contact.py @@ -8,7 +8,6 @@ from frappe.utils import cstr, extract_email_id from erpnext.controllers.status_updater import StatusUpdater class Contact(StatusUpdater): - def autoname(self): # concat first and last name self.name = " ".join(filter(None,