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))
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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 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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #10
0
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)
Beispiel #11
0
 def on_trash(self):
     remove_all("PreparedReport", self.name, from_delete=True)
Beispiel #12
0
	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)
Beispiel #14
0
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)
Beispiel #15
0
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'
Beispiel #16
0
        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)
Beispiel #17
0
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)
Beispiel #18
0
			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)