From 9074e3e13dc40e4486b50d08ca38677e00544f6f Mon Sep 17 00:00:00 2001 From: Aradhya Date: Sat, 8 Oct 2022 01:36:40 +0530 Subject: [PATCH] feat: Added unlocked button for locked documents not in queue --- .../doctype/submission_queue/submission_queue.js | 9 ++++++--- .../doctype/submission_queue/submission_queue.py | 15 +++++++++++++++ frappe/model/document.py | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/frappe/core/doctype/submission_queue/submission_queue.js b/frappe/core/doctype/submission_queue/submission_queue.js index df0833c004..573de63fdb 100644 --- a/frappe/core/doctype/submission_queue/submission_queue.js +++ b/frappe/core/doctype/submission_queue/submission_queue.js @@ -1,7 +1,10 @@ // Copyright (c) 2022, Frappe Technologies and contributors // For license information, please see license.txt -frappe.ui.form.on("Submission Queue", { - // refresh: function(frm) { - // } +frappe.ui.form.on('Submission Queue', { + refresh: function(frm) { + frm.add_custom_button(__("Unlock"), () => { + frm.call("unlock_doc") + }) + } }); diff --git a/frappe/core/doctype/submission_queue/submission_queue.py b/frappe/core/doctype/submission_queue/submission_queue.py index f83f7473e6..3d2aae388c 100644 --- a/frappe/core/doctype/submission_queue/submission_queue.py +++ b/frappe/core/doctype/submission_queue/submission_queue.py @@ -6,6 +6,9 @@ from frappe import _ from frappe.desk.doctype.notification_log.notification_log import enqueue_create_notification from frappe.model.document import Document from frappe.utils import now +from rq.exceptions import NoSuchJobError +from rq.job import Job +from frappe.utils.background_jobs import get_redis_conn class SubmissionQueue(Document): @@ -79,6 +82,18 @@ class SubmissionQueue(Document): notify_to = frappe.db.get_value("User", self.enqueued_by, fieldname="email") enqueue_create_notification([notify_to], notification_doc) + @frappe.whitelist() + def unlock_doc(self): + if self.is_locked: + try: + Job(self.job_id, connection=get_redis_conn()) + frappe.msgprint(_("Document already exists in queue!")) + except NoSuchJobError: + self.to_be_queued_doc.unlock() + frappe.msgprint(_("Unlocked document as no such document exists in queue")) + else: + frappe.msgprint(_("Document is already unlocked")) + def queue_submission(doc: Document, action: str): queue = frappe.new_doc("Submission Queue") diff --git a/frappe/model/document.py b/frappe/model/document.py index aa55eac30a..f2980a7972 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -91,6 +91,7 @@ class Document(BaseDocument): self.doctype = None self.name = None self.flags = frappe._dict() + self.is_locked = False if args and args[0]: if isinstance(args[0], str): @@ -1492,12 +1493,14 @@ class Document(BaseDocument): raise frappe.DocumentLockedError file_lock.create_lock(signature) frappe.local.locked_documents.append(self) + self.is_locked = True def unlock(self): """Delete the lock file for this document""" file_lock.delete_lock(self.get_signature()) if self in frappe.local.locked_documents: frappe.local.locked_documents.remove(self) + self.is_locked = False # validation helpers def validate_from_to_dates(self, from_date_field, to_date_field):