Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions audit_management/audit_management/doctype/my_audits/my_audits.js
Original file line number Diff line number Diff line change
Expand Up @@ -1257,12 +1257,17 @@ frappe.ui.form.on("My Audits", {
// Rollback Logic
d.$wrapper.find('.rollback-btn').on('click', function() {
let stagename = $(this).data('stage');
frappe.confirm(`Are you sure you want to rollback <b>${stagename}</b> stage? This will revoke the user's access and reset the stage status.`, () => {
// Find the row object corresponding to the stage to get its unique name
let row = audit_table.find(r => (r.stage_name || r.stagename) === stagename);
let row_name = row ? row.name : null;

frappe.confirm(`Are you sure you want to rollback <b>${stagename}</b> stage?`, () => {
frappe.call({
method: "audit_management.audit_management.doctype.my_audits.my_audits.rollback_stage",
args: {
docname: frm.doc.name,
stagename: stagename
stagename: stagename,
row_name: row_name
},
callback: function(r) {
if (r.message) {
Expand All @@ -1273,7 +1278,7 @@ frappe.ui.form.on("My Audits", {
},
error: function(err) {
console.error("Rollback Stage Error:", err);
frappe.msgprint(__("An error occurred while rolling back the stage. Please check your network connection or contact IT support."));
frappe.msgprint(__("An error occurred while rolling back the stage."));
}
});
});
Expand Down
24 changes: 16 additions & 8 deletions audit_management/audit_management/doctype/my_audits/my_audits.py
Original file line number Diff line number Diff line change
Expand Up @@ -1066,17 +1066,21 @@ def get_full_name(user_id):


@frappe.whitelist()
def rollback_stage(docname, stagename):
"""Resets a stage status to empty and removes document share for that user. Only allowed for Pending stages."""
def rollback_stage(docname, stagename, row_name=None):
"""Resets a stage status to empty and removes document share for that user. Matches by row_name or stagename."""
doc = frappe.get_doc("My Audits", docname)
found = False

for row in doc.audit_stages:
frappe.log_error(f"Checking row: {row.stage_name} against {stagename}", "Rollback Debug")
if row.stage_name == stagename:
# Match by row_name if provided, otherwise fallback to stage_name
is_match = (row.name == row_name) if row_name else (row.stage_name == stagename)

if is_match:
frappe.log_error(title="Rollback Debug", message=f"Rollback Stage: {stagename}\nRow Name: {row.name}\nRow Stage Name: '{row.stage_name}'\nRow Status Before: '{row.status}'")

if row.status not in ["Pending", "No Response"]:
frappe.log_error(f"Status check failed for {stagename}: {row.status}", "Rollback Debug")
frappe.throw(_("Only Pending or No Response stages can be rolled back. {0} is currently {1}.").format(stagename, row.status))
frappe.log_error(title="Rollback Debug", message=f"Status check failed for {row.name}: {row.status}")
frappe.throw(_("Only Pending or No Response stages can be rolled back. {0} is currently {1}.").format(row.stage_name, row.status))

# 1. Revoke access first
if row.user_id:
Expand All @@ -1092,7 +1096,8 @@ def rollback_stage(docname, stagename):
row.response = None
row.attachment = None
row.response_time = None
frappe.log_error(f"Row updated: {stagename}", "Rollback Debug")

frappe.log_error(title="Rollback Debug After", message=f"Row Name: {row.name}\nRow Status After: '{row.status}'")

found = True
break
Expand All @@ -1101,7 +1106,10 @@ def rollback_stage(docname, stagename):
doc.query_status = f"Rollback: {stagename}"
doc.save(ignore_permissions=True)
doc.reload()
frappe.log_error(f"Document saved and reloaded after rollback: {stagename}", "Rollback Debug")

for row in doc.audit_stages:
if row.name == row_name or row.stage_name == stagename:
frappe.log_error(title="Rollback Final DB Check", message=f"Final DB Status: '{row.status}'")
return True
return False

Expand Down
Loading