mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-19 11:27:55 +00:00
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
This commit is contained in:
@@ -15,6 +15,14 @@ class UOMMustBeIntegerError(frappe.ValidationError):
|
||||
|
||||
|
||||
class TransactionBase(StatusUpdater):
|
||||
def on_change(self):
|
||||
# `on_change` also fires for `db_set()`, so only run during an actual insert/save.
|
||||
is_real_save = self.flags.in_insert or (self.doctype, self.name) in frappe.flags.currently_saving
|
||||
if not is_real_save:
|
||||
return
|
||||
|
||||
self.copy_terms_and_conditions_attachments()
|
||||
|
||||
def validate_posting_time(self):
|
||||
# set Edit Posting Date and Time to 1 while data import
|
||||
if frappe.flags.in_import and self.posting_date:
|
||||
@@ -33,6 +41,56 @@ class TransactionBase(StatusUpdater):
|
||||
def validate_uom_is_integer(self, uom_field, qty_fields, child_dt=None):
|
||||
validate_uom_is_integer(self, uom_field, qty_fields, child_dt)
|
||||
|
||||
def copy_terms_and_conditions_attachments(self):
|
||||
if (
|
||||
not self.name
|
||||
or not self.meta.has_field("tc_name")
|
||||
or not self.tc_name
|
||||
or not self.has_value_changed("tc_name")
|
||||
):
|
||||
return
|
||||
|
||||
copy_attachments_to_transaction = frappe.db.get_value(
|
||||
"Terms and Conditions", self.tc_name, "copy_attachments_to_transaction"
|
||||
)
|
||||
if not cint(copy_attachments_to_transaction):
|
||||
return
|
||||
|
||||
source_attachments = frappe.get_all(
|
||||
"File",
|
||||
filters={
|
||||
"attached_to_doctype": "Terms and Conditions",
|
||||
"attached_to_name": self.tc_name,
|
||||
},
|
||||
fields=["name", "file_url"],
|
||||
)
|
||||
if not source_attachments:
|
||||
return
|
||||
|
||||
existing_file_urls = {
|
||||
attachment.file_url
|
||||
for attachment in frappe.get_all(
|
||||
"File",
|
||||
filters={
|
||||
"attached_to_doctype": self.doctype,
|
||||
"attached_to_name": self.name,
|
||||
},
|
||||
fields=["file_url"],
|
||||
)
|
||||
if attachment.file_url
|
||||
}
|
||||
|
||||
for source_attachment in source_attachments:
|
||||
if not source_attachment.file_url or source_attachment.file_url in existing_file_urls:
|
||||
continue
|
||||
|
||||
# Reuse the existing file metadata so the same on-disk blob is shared.
|
||||
new_attachment = frappe.get_doc("File", source_attachment.name).create_attachment_copy(
|
||||
attached_to_doctype=self.doctype,
|
||||
attached_to_name=self.name,
|
||||
)
|
||||
existing_file_urls.add(new_attachment.file_url)
|
||||
|
||||
def validate_with_previous_doc(self, ref):
|
||||
self.exclude_fields = ["conversion_factor", "uom"] if self.get("is_return") else []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user