fix: update Maintenance Schedule status on Maintenance Visit submit
This commit is contained in:
parent
4d56f725fe
commit
cd293a5173
@ -131,12 +131,11 @@ class MaintenanceSchedule(TransactionBase):
|
|||||||
).format(self.owner, "<br>" + "<br>".join(no_email_sp))
|
).format(self.owner, "<br>" + "<br>".join(no_email_sp))
|
||||||
)
|
)
|
||||||
|
|
||||||
scheduled_date = frappe.db.sql(
|
scheduled_date = frappe.db.get_all(
|
||||||
"""select scheduled_date from
|
"Maintenance Schedule Detail",
|
||||||
`tabMaintenance Schedule Detail` where item_code=%s and
|
{"parent": self.name, "item_code": d.item_code},
|
||||||
parent=%s""",
|
["scheduled_date"],
|
||||||
(d.item_code, self.name),
|
as_list=False,
|
||||||
as_dict=1,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
for key in scheduled_date:
|
for key in scheduled_date:
|
||||||
@ -450,15 +449,23 @@ def get_serial_nos_from_schedule(item_code, schedule=None):
|
|||||||
def make_maintenance_visit(source_name, target_doc=None, item_name=None, s_id=None):
|
def make_maintenance_visit(source_name, target_doc=None, item_name=None, s_id=None):
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
|
|
||||||
|
def condition(doc):
|
||||||
|
if s_id:
|
||||||
|
return doc.name == s_id
|
||||||
|
elif item_name:
|
||||||
|
return doc.item_name == item_name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def update_status_and_detail(source, target, parent):
|
def update_status_and_detail(source, target, parent):
|
||||||
target.maintenance_type = "Scheduled"
|
target.maintenance_type = "Scheduled"
|
||||||
target.maintenance_schedule_detail = s_id
|
|
||||||
|
|
||||||
def update_serial(source, target, parent):
|
def update_serial(source, target, parent):
|
||||||
if source.serial_and_batch_bundle:
|
if source.item_reference:
|
||||||
serial_nos = frappe.get_doc(
|
if sbb := frappe.db.get_value(
|
||||||
"Serial and Batch Bundle", source.serial_and_batch_bundle
|
"Maintenance Schedule Item", source.item_reference, "serial_and_batch_bundle"
|
||||||
).get_serial_nos()
|
):
|
||||||
|
serial_nos = frappe.get_doc("Serial and Batch Bundle", sbb).get_serial_nos()
|
||||||
|
|
||||||
if len(serial_nos) == 1:
|
if len(serial_nos) == 1:
|
||||||
target.serial_no = serial_nos[0]
|
target.serial_no = serial_nos[0]
|
||||||
@ -475,10 +482,13 @@ def make_maintenance_visit(source_name, target_doc=None, item_name=None, s_id=No
|
|||||||
"validation": {"docstatus": ["=", 1]},
|
"validation": {"docstatus": ["=", 1]},
|
||||||
"postprocess": update_status_and_detail,
|
"postprocess": update_status_and_detail,
|
||||||
},
|
},
|
||||||
"Maintenance Schedule Item": {
|
"Maintenance Schedule Detail": {
|
||||||
"doctype": "Maintenance Visit Purpose",
|
"doctype": "Maintenance Visit Purpose",
|
||||||
"condition": lambda doc: doc.item_name == item_name if item_name else True,
|
"condition": condition,
|
||||||
"field_map": {"sales_person": "service_person"},
|
"field_map": {
|
||||||
|
"sales_person": "service_person",
|
||||||
|
"name": "maintenance_schedule_detail",
|
||||||
|
},
|
||||||
"postprocess": update_serial,
|
"postprocess": update_serial,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -56,7 +56,8 @@ class MaintenanceVisit(TransactionBase):
|
|||||||
frappe.throw(_("Add Items in the Purpose Table"), title=_("Purposes Required"))
|
frappe.throw(_("Add Items in the Purpose Table"), title=_("Purposes Required"))
|
||||||
|
|
||||||
def validate_maintenance_date(self):
|
def validate_maintenance_date(self):
|
||||||
if self.maintenance_type == "Scheduled" and self.maintenance_schedule_detail:
|
if self.maintenance_type == "Scheduled":
|
||||||
|
if self.maintenance_schedule_detail:
|
||||||
item_ref = frappe.db.get_value(
|
item_ref = frappe.db.get_value(
|
||||||
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "item_reference"
|
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "item_reference"
|
||||||
)
|
)
|
||||||
@ -70,6 +71,24 @@ class MaintenanceVisit(TransactionBase):
|
|||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Date must be between {0} and {1}").format(format_date(start_date), format_date(end_date))
|
_("Date must be between {0} and {1}").format(format_date(start_date), format_date(end_date))
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
for purpose in self.purposes:
|
||||||
|
if purpose.maintenance_schedule_detail:
|
||||||
|
item_ref = frappe.db.get_value(
|
||||||
|
"Maintenance Schedule Detail", purpose.maintenance_schedule_detail, "item_reference"
|
||||||
|
)
|
||||||
|
if item_ref:
|
||||||
|
start_date, end_date = frappe.db.get_value(
|
||||||
|
"Maintenance Schedule Item", item_ref, ["start_date", "end_date"]
|
||||||
|
)
|
||||||
|
if get_datetime(self.mntc_date) < get_datetime(start_date) or get_datetime(
|
||||||
|
self.mntc_date
|
||||||
|
) > get_datetime(end_date):
|
||||||
|
frappe.throw(
|
||||||
|
_("Date must be between {0} and {1}").format(
|
||||||
|
format_date(start_date), format_date(end_date)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_serial_no()
|
self.validate_serial_no()
|
||||||
@ -82,6 +101,7 @@ class MaintenanceVisit(TransactionBase):
|
|||||||
if not cancel:
|
if not cancel:
|
||||||
status = self.completion_status
|
status = self.completion_status
|
||||||
actual_date = self.mntc_date
|
actual_date = self.mntc_date
|
||||||
|
|
||||||
if self.maintenance_schedule_detail:
|
if self.maintenance_schedule_detail:
|
||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "completion_status", status
|
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "completion_status", status
|
||||||
@ -89,6 +109,21 @@ class MaintenanceVisit(TransactionBase):
|
|||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "actual_date", actual_date
|
"Maintenance Schedule Detail", self.maintenance_schedule_detail, "actual_date", actual_date
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
for purpose in self.purposes:
|
||||||
|
if purpose.maintenance_schedule_detail:
|
||||||
|
frappe.db.set_value(
|
||||||
|
"Maintenance Schedule Detail",
|
||||||
|
purpose.maintenance_schedule_detail,
|
||||||
|
"completion_status",
|
||||||
|
status,
|
||||||
|
)
|
||||||
|
frappe.db.set_value(
|
||||||
|
"Maintenance Schedule Detail",
|
||||||
|
purpose.maintenance_schedule_detail,
|
||||||
|
"actual_date",
|
||||||
|
actual_date,
|
||||||
|
)
|
||||||
|
|
||||||
def update_customer_issue(self, flag):
|
def update_customer_issue(self, flag):
|
||||||
if not self.maintenance_schedule:
|
if not self.maintenance_schedule:
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
"work_details",
|
"work_details",
|
||||||
"work_done",
|
"work_done",
|
||||||
"prevdoc_doctype",
|
"prevdoc_doctype",
|
||||||
"prevdoc_docname"
|
"prevdoc_docname",
|
||||||
|
"maintenance_schedule_detail"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@ -49,6 +50,8 @@
|
|||||||
"options": "Serial No"
|
"options": "Serial No"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"fetch_from": "item_code.description",
|
||||||
|
"fetch_if_empty": 1,
|
||||||
"fieldname": "description",
|
"fieldname": "description",
|
||||||
"fieldtype": "Text Editor",
|
"fieldtype": "Text Editor",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -56,7 +59,6 @@
|
|||||||
"oldfieldname": "description",
|
"oldfieldname": "description",
|
||||||
"oldfieldtype": "Small Text",
|
"oldfieldtype": "Small Text",
|
||||||
"print_width": "300px",
|
"print_width": "300px",
|
||||||
"reqd": 1,
|
|
||||||
"width": "300px"
|
"width": "300px"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -103,12 +105,19 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "section_break_6",
|
"fieldname": "section_break_6",
|
||||||
"fieldtype": "Section Break"
|
"fieldtype": "Section Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "maintenance_schedule_detail",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 1,
|
||||||
|
"label": "Maintenance Schedule Detail",
|
||||||
|
"options": "Maintenance Schedule Detail"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-02-27 11:09:33.114458",
|
"modified": "2024-01-05 21:46:53.239830",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Maintenance",
|
"module": "Maintenance",
|
||||||
"name": "Maintenance Visit Purpose",
|
"name": "Maintenance Visit Purpose",
|
||||||
|
@ -14,9 +14,10 @@ class MaintenanceVisitPurpose(Document):
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from frappe.types import DF
|
from frappe.types import DF
|
||||||
|
|
||||||
description: DF.TextEditor
|
description: DF.TextEditor | None
|
||||||
item_code: DF.Link | None
|
item_code: DF.Link | None
|
||||||
item_name: DF.Data | None
|
item_name: DF.Data | None
|
||||||
|
maintenance_schedule_detail: DF.Data | None
|
||||||
parent: DF.Data
|
parent: DF.Data
|
||||||
parentfield: DF.Data
|
parentfield: DF.Data
|
||||||
parenttype: DF.Data
|
parenttype: DF.Data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user