def remove_tracking_details(self, del_request): frappe.db.set_value(self.doctype, self.name, "awb_number", "NA") for pkg in (self.shipment_package_details): if pkg.tracking_id: frappe.db.set_value("Shipment Package Details", pkg.name, "tracking_id", "") remove_all(self.doctype, self.name)
def delete_shipment(self): if self.status == "Booked": try: start_delete_shipment(self) except: frappe.msgprint( ('Some ERROR guess AWB not found on Fedex for AWB# {}' ).format(self.awb_number)) frappe.db.set_value("Carrier Tracking", self.name, "docstatus", 0) frappe.db.set_value("Carrier Tracking", self.name, "awb_number", "NA") frappe.db.set_value("Carrier Tracking", self.name, "status_code", "") frappe.db.set_value("Carrier Tracking", self.name, "published", 0) frappe.db.set_value("Carrier Tracking", self.name, "route", "") frappe.db.set_value("Carrier Tracking", self.name, "status", "Not Booked") if self.document == 'Sales Invoice': self.push_data_to_sales_invoice() shp_pkg_dt = frappe.db.sql( """SELECT name FROM `tabShipment Package Details` WHERE parent = '%s'""" % (self.name), as_list=1) for shp in shp_pkg_dt: frappe.db.set_value("Shipment Package Details", shp[0], "docstatus", 0) frappe.db.set_value("Shipment Package Details", shp[0], "tracking_id", "") remove_all(self.doctype, self.name) else: frappe.throw( ("Only Booked Shipments Can be Deleted, {} is in {} Stage" ).format(self.name, self.status))
def create_flyer_pdf(name): block = frappe.get_doc("Block", name) # create html html = frappe.get_print("Block", name, print_format=block.flyer_print_format) # create pdf pdf = frappe.utils.pdf.get_pdf(html) # clear attached files remove_all("Block", name) # save and attach pdf file_name = "{0}.pdf".format(name.replace(" ", "_").replace("/", "_")) save_file(file_name, pdf, "Block", name, is_private=0) return
def build_long_fiscal_year_print(fiscal_year): fiscal_year = frappe.get_doc("Fiscal Year", fiscal_year) # clear attached files remove_all("Fiscal Year", fiscal_year.name) for c in fiscal_year.companies: # create html if not c.print_format: frappe.log_error( _("Please specify a print format for company {0}", _("Print Fiscal Year") ) ) html = frappe.get_print("Fiscal Year", fiscal_year.name, print_format=c.print_format) # create pdf pdf = frappe.utils.pdf.get_pdf(html) # save and attach pdf file_name = ("{0}_{1}.pdf".format(fiscal_year.name, c.company)).replace(" ", "_").replace("/", "_") save_file(file_name, pdf, "Fiscal Year", fiscal_year.name, is_private=1) return
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False, ignore_missing=True): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, string_types) or isinstance(name, integer_types): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): if not ignore_missing: raise frappe.DoesNotExistError else: return False # delete passwords delete_all_passwords_for(doctype, name) doc = None if doctype == "DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: doc = frappe.get_doc(doctype, name) update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql( "delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) frappe.db.sql( "delete from `tabCustom DocPerm` where parent=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") doc.flags.in_delete = True doc.run_method('on_change') frappe.enqueue( 'frappe.model.delete_doc.delete_dynamic_links', doctype=doc.doctype, name=doc.name, is_async=False if frappe.flags.in_test else True) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) doc.run_method("after_delete") # delete attachments remove_all(doctype, name, from_delete=True) # delete global search entry delete_for_document(doc) if doc and not for_reload: add_to_deleted_document(doc) if not frappe.flags.in_patch: try: doc.notify_update() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, basestring): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): return # delete attachments remove_all(doctype, name) doc = None if doctype=="DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: if ignore_permissions: if not flags: flags = {} flags["ignore_permissions"] = ignore_permissions if flags: doc.flags.update(flags) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") dynamic_linked_doctypes = [df.parent for df in get_dynamic_link_map().get(doc.doctype, [])] if "ToDo" in dynamic_linked_doctypes: delete_linked_todos(doc) if "Communication" in dynamic_linked_doctypes: delete_linked_communications(doc) if "DocShare" in dynamic_linked_doctypes: delete_shared(doc) if "Email Unsubscribe" in dynamic_linked_doctypes: delete_email_subscribe(doc) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) doc.run_method("after_delete") if doc: try: doc.notify_update() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False, ignore_missing=True, delete_permanently=False): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, str) or isinstance(name, int): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): if not ignore_missing: raise frappe.DoesNotExistError else: return False # delete passwords delete_all_passwords_for(doctype, name) doc = None if doctype=="DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: doc = frappe.get_doc(doctype, name) update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) frappe.db.delete("Custom Field", {"dt": name}) frappe.db.delete("Client Script", {"dt": name}) frappe.db.delete("Property Setter", {"doc_type": name}) frappe.db.delete("Report", {"ref_doctype": name}) frappe.db.delete("Custom DocPerm", {"parent": name}) frappe.db.delete("__global_search", {"doctype": name}) delete_from_table(doctype, name, ignore_doctypes, None) if frappe.conf.developer_mode and not doc.custom and not ( for_reload or frappe.flags.in_migrate or frappe.flags.in_install or frappe.flags.in_uninstall ): try: delete_controllers(name, doc.module) except (FileNotFoundError, OSError, KeyError): # in case a doctype doesnt have any controller code nor any app and module pass else: doc = frappe.get_doc(doctype, name) if not for_reload: update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") doc.flags.in_delete = True doc.run_method('on_change') # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) doc.run_method("after_delete") # delete attachments remove_all(doctype, name, from_delete=True, delete_permanently=delete_permanently) if not for_reload: # Enqueued at the end, because it gets committed # All the linked docs should be checked beforehand frappe.enqueue('frappe.model.delete_doc.delete_dynamic_links', doctype=doc.doctype, name=doc.name, is_async=False if frappe.flags.in_test else True) # delete global search entry delete_for_document(doc) # delete tag link entry delete_tags_for_document(doc) if for_reload: delete_permanently = True if not delete_permanently: add_to_deleted_document(doc) if doc and not for_reload: if not frappe.flags.in_patch: try: doc.notify_update() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
def on_trash(self): remove_all("Prepared Report", self.name)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, basestring): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): return # delete attachments remove_all(doctype, name) # delete passwords delete_all_passwords_for(doctype, name) doc = None if doctype=="DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: doc = frappe.get_doc(doctype, name) update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") doc.run_method('on_change') dynamic_linked_doctypes = [df.parent for df in get_dynamic_link_map().get(doc.doctype, [])] if "ToDo" in dynamic_linked_doctypes: delete_linked_todos(doc) if "Communication" in dynamic_linked_doctypes: delete_linked_communications(doc) if "DocShare" in dynamic_linked_doctypes: delete_shared(doc) if "Email Unsubscribe" in dynamic_linked_doctypes: delete_email_subscribe(doc) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) doc.run_method("after_delete") if doc and not frappe.flags.in_patch: try: doc.notify_update() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
def on_trash(self): remove_all("PreparedReport", self.name, from_delete=True)
def remove_all_docs(document): """This function attaches drawings to the purchase order based on the items being ordered""" document = json.loads(document) document2 = frappe._dict(document) remove_all(document2.doctype, document2.name)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False, ignore_missing=True): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, string_types): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): if not ignore_missing: raise frappe.DoesNotExistError else: return False # delete passwords delete_all_passwords_for(doctype, name) doc = None if doctype=="DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: doc = frappe.get_doc(doctype, name) update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) frappe.db.sql("delete from `tabCustom DocPerm` where parent=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: update_flags(doc, flags, ignore_permissions) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") doc.flags.in_delete = True doc.run_method('on_change') frappe.enqueue('frappe.model.delete_doc.delete_dynamic_links', doctype=doc.doctype, name=doc.name, async=False if frappe.flags.in_test else True) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) doc.run_method("after_delete") # delete attachments remove_all(doctype, name, from_delete=True) # delete global search entry delete_for_document(doc) if doc and not for_reload: add_to_deleted_document(doc) if not frappe.flags.in_patch: try: doc.notify_update() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, basestring): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): return # delete attachments remove_all(doctype, name) if doctype=="DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: check_permission_and_not_submitted(doc, ignore_permissions) doc.run_method("on_trash") delete_linked_todos(doc) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name) return 'okay'
for t in doc.meta.get_table_fields(): if t.options not in ignore_doctypes: frappe.db.sql( "delete from `tab%s` where parent = %s" % (t.options, '%s'), (name, )) except Exception, e: if e.args[0] == 1451: frappe.throw( _("Cannot delete {0} {1} is it is referenced in another record" ).format(doctype, name)) raise # delete attachments remove_all(doctype, name) # delete restrictions frappe.defaults.clear_default(parenttype="Restriction", key=doctype, value=name) return 'okay' def check_permission_and_not_submitted(doc, ignore_permissions=False): # permission if not ignore_permissions and frappe.session.user != "Administrator" and not doc.has_permission( "delete"): frappe.msgprint(_("User not allowed to delete."), raise_exception=True)
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False, flags=None, ignore_on_trash=False): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ if not ignore_doctypes: ignore_doctypes = [] # get from form if not doctype: doctype = frappe.form_dict.get('dt') name = frappe.form_dict.get('dn') names = name if isinstance(name, basestring): names = [name] for name in names or []: # already deleted..? if not frappe.db.exists(doctype, name): return # delete attachments remove_all(doctype, name) doc = None if doctype == "DocType": if for_reload: try: doc = frappe.get_doc(doctype, name) except frappe.DoesNotExistError: pass else: doc.run_method("before_reload") else: frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql( "delete from `tabProperty Setter` where doc_type = %s", name) frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name) delete_from_table(doctype, name, ignore_doctypes, None) else: doc = frappe.get_doc(doctype, name) if not for_reload: if ignore_permissions: if not flags: flags = {} flags["ignore_permissions"] = ignore_permissions if flags: doc.flags.update(flags) check_permission_and_not_submitted(doc) if not ignore_on_trash: doc.run_method("on_trash") delete_linked_todos(doc) delete_linked_comments(doc) delete_linked_communications(doc) delete_shared(doc) # check if links exist if not force: check_if_doc_is_linked(doc) check_if_doc_is_dynamically_linked(doc) update_naming_series(doc) delete_from_table(doctype, name, ignore_doctypes, doc) if doc: try: doc.notify_modified() insert_feed(doc) except ImportError: pass # delete user_permissions frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
frappe.db.sql("delete from `tabSingles` where doctype=%s", name) else: frappe.db.sql("delete from `tab%s` where name=%s" % (doctype, "%s"), (name,)) for t in doc.meta.get_table_fields(): if t.options not in ignore_doctypes: frappe.db.sql("delete from `tab%s` where parent = %s" % (t.options, '%s'), (name,)) except Exception, e: if e.args[0]==1451: frappe.throw(_("Cannot delete {0} {1} is it is referenced in another record").format(doctype, name)) raise # delete attachments remove_all(doctype, name) # delete restrictions frappe.defaults.clear_default(parenttype="Restriction", key=doctype, value=name) return 'okay' def check_permission_and_not_submitted(doc, ignore_permissions=False): # permission if not ignore_permissions and frappe.session.user!="Administrator" and not doc.has_permission("delete"): frappe.msgprint(_("User not allowed to delete."), raise_exception=True) # check if submitted if doc.docstatus == 1: frappe.msgprint(_("Submitted Record cannot be deleted")+": "+doc.name+"("+doc.doctype+")", raise_exception=True)