fix: store deal status type in status log

This commit is contained in:
Shariq Ansari 2025-07-13 12:43:03 +05:30
parent de85ccfc51
commit e59547da30
2 changed files with 51 additions and 18 deletions

View File

@ -13,6 +13,8 @@
"column_break_mwmz", "column_break_mwmz",
"duration", "duration",
"last_status_change_log", "last_status_change_log",
"from_type",
"to_type",
"log_owner" "log_owner"
], ],
"fields": [ "fields": [
@ -61,18 +63,31 @@
"fieldtype": "Link", "fieldtype": "Link",
"label": "Owner", "label": "Owner",
"options": "User" "options": "User"
},
{
"fieldname": "from_type",
"fieldtype": "Data",
"in_list_view": 1,
"label": "From Type"
},
{
"fieldname": "to_type",
"fieldtype": "Data",
"in_list_view": 1,
"label": "To Type"
} }
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2024-01-06 13:26:40.597277", "modified": "2025-07-13 12:37:41.278584",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "FCRM", "module": "FCRM",
"name": "CRM Status Change Log", "name": "CRM Status Change Log",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"row_format": "Dynamic",
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [] "states": []
} }

View File

@ -1,15 +1,17 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors # Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt # For license information, please see license.txt
import frappe
from datetime import datetime from datetime import datetime
from frappe.utils import add_to_date, get_datetime
import frappe
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import add_to_date, get_datetime
class CRMStatusChangeLog(Document): class CRMStatusChangeLog(Document):
pass pass
def get_duration(from_date, to_date): def get_duration(from_date, to_date):
if not isinstance(from_date, datetime): if not isinstance(from_date, datetime):
from_date = get_datetime(from_date) from_date = get_datetime(from_date)
@ -18,28 +20,44 @@ def get_duration(from_date, to_date):
duration = to_date - from_date duration = to_date - from_date
return duration.total_seconds() return duration.total_seconds()
def add_status_change_log(doc): def add_status_change_log(doc):
if not doc.is_new(): if not doc.is_new():
previous_status = doc.get_doc_before_save().status if doc.get_doc_before_save() else None previous_status = doc.get_doc_before_save().status if doc.get_doc_before_save() else None
previous_status_type = (
frappe.db.get_value("CRM Deal Status", previous_status, "type") if previous_status else None
)
if not doc.status_change_log and previous_status: if not doc.status_change_log and previous_status:
now_minus_one_minute = add_to_date(datetime.now(), minutes=-1) now_minus_one_minute = add_to_date(datetime.now(), minutes=-1)
doc.append("status_change_log", { doc.append(
"from": previous_status, "status_change_log",
"to": "", {
"from_date": now_minus_one_minute, "from": previous_status,
"to_date": "", "from_type": previous_status_type,
"log_owner": frappe.session.user, "to": "",
}) "to_type": "",
"from_date": now_minus_one_minute,
"to_date": "",
"log_owner": frappe.session.user,
},
)
to_status_type = frappe.db.get_value("CRM Deal Status", doc.status, "type")
last_status_change = doc.status_change_log[-1] last_status_change = doc.status_change_log[-1]
last_status_change.to = doc.status last_status_change.to = doc.status
last_status_change.to_type = to_status_type
last_status_change.to_date = datetime.now() last_status_change.to_date = datetime.now()
last_status_change.log_owner = frappe.session.user last_status_change.log_owner = frappe.session.user
last_status_change.duration = get_duration(last_status_change.from_date, last_status_change.to_date) last_status_change.duration = get_duration(last_status_change.from_date, last_status_change.to_date)
doc.append("status_change_log", { doc.append(
"from": doc.status, "status_change_log",
"to": "", {
"from_date": datetime.now(), "from": doc.status,
"to_date": "", "from_type": to_status_type,
"log_owner": frappe.session.user, "to": "",
}) "to_type": "",
"from_date": datetime.now(),
"to_date": "",
"log_owner": frappe.session.user,
},
)