diff --git a/landa/fixtures/translation.json b/landa/fixtures/translation.json index 21b18e5a..5ec9ed89 100644 --- a/landa/fixtures/translation.json +++ b/landa/fixtures/translation.json @@ -7662,5 +7662,21 @@ "parenttype": null, "source_text": "Email (Shipping Contact)", "translated_text": "E-Mail (Versandkontakt)" + }, + { + "context": null, + "contributed": 0, + "contribution_docname": null, + "contribution_status": "", + "docstatus": 0, + "doctype": "Translation", + "language": "de", + "modified": "2023-07-18 12:02:48.226796", + "name": "92b45c5c78", + "parent": null, + "parentfield": null, + "parenttype": null, + "source_text": "Contact person successfully added.", + "translated_text": "Kontaktperson erfolgreich hinzugef\u00fcgt." } ] diff --git a/landa/organization_management/doctype/landa_member/landa_member.js b/landa/organization_management/doctype/landa_member/landa_member.js index 7e3aa9a4..82498176 100644 --- a/landa/organization_management/doctype/landa_member/landa_member.js +++ b/landa/organization_management/doctype/landa_member/landa_member.js @@ -12,6 +12,7 @@ frappe.ui.form.on("LANDA Member", { }; }); + frm.make_methods = { "User": () => { frappe.new_doc("User", { @@ -24,6 +25,7 @@ frappe.ui.form.on("LANDA Member", { } }, refresh: function (frm) { + // Automatically add the backlink to LANDA Member when a new Address or // Contact is added. frappe.dynamic_link = { doc: frm.doc, fieldname: "name", doctype: "LANDA Member" }; @@ -54,5 +56,23 @@ frappe.ui.form.on("LANDA Member", { }); }); } + frm.add_custom_button(__("Set as Contact Person"), function() { + if (frm.doc.name) { + console.log(frm.doc.name); + frappe.call({ + method: "landa.organization_management.doctype.landa_member.landa_member.link_contact_person", + args: { + member_name: frm.doc.name + } + }); + }}); + frm.add_custom_button(__('Remove as Contact Person'), function() { + frappe.call({ + method: "landa.organization_management.doctype.landa_member.landa_member.unlink_contact_person", + args: { + member_name: frm.doc.name + } + }); + }); }, }); diff --git a/landa/organization_management/doctype/landa_member/landa_member.py b/landa/organization_management/doctype/landa_member/landa_member.py index 16bac362..1a0a7390 100644 --- a/landa/organization_management/doctype/landa_member/landa_member.py +++ b/landa/organization_management/doctype/landa_member/landa_member.py @@ -66,5 +66,110 @@ def revert_series(self): revert_series_if_last(key, self.name) +def on_update(self): + if self.address: + organization = frappe.get_doc("Organization", self.organization) + organization.address = self.address + organization.save() + + def get_full_name(first_name, last_name): return (first_name or "") + (" " if (last_name and first_name) else "") + (last_name or "") + + +def link_member_contacts_and_addresses_to_organization(member, organization): + for address in frappe.get_all( + "Address", filters={"link_doctype": "LANDA Member", "link_name": member.name} + ): + if not frappe.db.exists( + "Dynamic Link", + { + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Address", + "parent": address.name, + }, + ): + link = frappe.get_doc( + { + "doctype": "Dynamic Link", + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Address", + "parent": address.name, + } + ) + link.insert() + + for contact in frappe.get_all( + "Contact", filters={"link_doctype": "LANDA Member", "link_name": member.name} + ): + if not frappe.db.exists( + "Dynamic Link", + { + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Contact", + "parent": contact.name, + }, + ): + link = frappe.get_doc( + { + "doctype": "Dynamic Link", + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Contact", + "parent": contact.name, + } + ) + link.insert() + + +@frappe.whitelist() +def link_contact_person(member_name): + member = frappe.get_doc("LANDA Member", member_name) + organization = frappe.get_doc("Organization", member.organization) + link_member_contacts_and_addresses_to_organization(member, organization) + frappe.msgprint(_("Contact person successfully added.")) + + +def unlink_member_contacts_and_addresses_from_organization(member, organization): + for address in frappe.get_all( + "Address", filters={"link_doctype": "LANDA Member", "link_name": member.name} + ): + link = frappe.db.exists( + "Dynamic Link", + { + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Address", + "parent": address.name, + }, + ) + if link: + frappe.delete_doc("Dynamic Link", link) + + for contact in frappe.get_all( + "Contact", filters={"link_doctype": "LANDA Member", "link_name": member.name} + ): + link = frappe.db.exists( + "Dynamic Link", + { + "link_doctype": "Organization", + "link_name": organization.name, + "parenttype": "Contact", + "parent": contact.name, + }, + ) + if link: + frappe.delete_doc("Dynamic Link", link) + + +@frappe.whitelist() +def unlink_contact_person(member_name): + member = frappe.get_doc("LANDA Member", member_name) + organization = frappe.get_doc("Organization", member.organization) + + unlink_member_contacts_and_addresses_from_organization(member, organization) + + frappe.msgprint(_("Contact person successfully removed."))