Update serial no maintenance status based on warranty/amc expiry date

This commit is contained in:
Nabin Hait 2014-03-26 10:23:14 +05:30
parent 6fa0f25e7c
commit 1d630ccaa5

View File

@ -4,8 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe.utils import cint, getdate, cstr, flt, add_days from frappe.utils import cint, cstr, flt, add_days, nowdate
import datetime
from frappe import _, ValidationError from frappe import _, ValidationError
from erpnext.controllers.stock_controller import StockController from erpnext.controllers.stock_controller import StockController
@ -32,22 +31,26 @@ class DocType(StockController):
frappe.throw(_("New Serial No cannot have Warehouse. Warehouse must be \ frappe.throw(_("New Serial No cannot have Warehouse. Warehouse must be \
set by Stock Entry or Purchase Receipt"), SerialNoCannotCreateDirectError) set by Stock Entry or Purchase Receipt"), SerialNoCannotCreateDirectError)
self.validate_warranty_status() self.set_maintenance_status()
self.validate_amc_status()
self.validate_warehouse() self.validate_warehouse()
self.validate_item() self.validate_item()
self.on_stock_ledger_entry() self.on_stock_ledger_entry()
def validate_amc_status(self): def set_maintenance_status(self):
if (self.doc.maintenance_status == 'Out of AMC' and self.doc.amc_expiry_date and getdate(self.doc.amc_expiry_date) >= datetime.date.today()) or (self.doc.maintenance_status == 'Under AMC' and (not self.doc.amc_expiry_date or getdate(self.doc.amc_expiry_date) < datetime.date.today())): if not self.doc.warranty_expiry_date and not self.doc.amc_expiry_date:
frappe.throw(self.doc.name + ": " + self.doc.maintenance_status = None
_("AMC expiry date and maintenance status mismatched"))
def validate_warranty_status(self): if self.doc.warranty_expiry_date and self.doc.warranty_expiry_date < nowdate():
if (self.doc.maintenance_status == 'Out of Warranty' and self.doc.warranty_expiry_date and getdate(self.doc.warranty_expiry_date) >= datetime.date.today()) or (self.doc.maintenance_status == 'Under Warranty' and (not self.doc.warranty_expiry_date or getdate(self.doc.warranty_expiry_date) < datetime.date.today())): self.doc.maintenance_status = "Out of Warranty"
frappe.throw(self.doc.name + ": " +
_("Warranty expiry date and maintenance status mismatched"))
if self.doc.amc_expiry_date and self.doc.amc_expiry_date < nowdate():
self.doc.maintenance_status = "Out of AMC"
if self.doc.amc_expiry_date and self.doc.amc_expiry_date >= nowdate():
self.doc.maintenance_status = "Under AMC"
if self.doc.warranty_expiry_date and self.doc.warranty_expiry_date >= nowdate():
self.doc.maintenance_status = "Under Warranty"
def validate_warehouse(self): def validate_warehouse(self):
if not self.doc.fields.get("__islocal"): if not self.doc.fields.get("__islocal"):
@ -190,6 +193,7 @@ class DocType(StockController):
self.set_status(last_sle.get("last_sle")) self.set_status(last_sle.get("last_sle"))
self.set_purchase_details(last_sle.get("purchase_sle")) self.set_purchase_details(last_sle.get("purchase_sle"))
self.set_sales_details(last_sle.get("delivery_sle")) self.set_sales_details(last_sle.get("delivery_sle"))
self.set_maintenance_status()
def on_communication(self): def on_communication(self):
return return