diff --git a/crm/api/dashboard.py b/crm/api/dashboard.py index 4bed4218..0b51b6a2 100644 --- a/crm/api/dashboard.py +++ b/crm/api/dashboard.py @@ -1008,7 +1008,7 @@ def get_deals_by_territory(from_date="", to_date="", user=""): WHERE DATE(d.creation) BETWEEN %(from)s AND %(to)s {deal_conds} GROUP BY d.territory - ORDER BY value DESC + ORDER BY deals DESC, value DESC """, {"from": from_date, "to": to_date}, as_dict=True, @@ -1065,7 +1065,7 @@ def get_deals_by_salesperson(from_date="", to_date="", user=""): WHERE DATE(d.creation) BETWEEN %(from)s AND %(to)s {deal_conds} GROUP BY d.deal_owner - ORDER BY value DESC + ORDER BY deals DESC, value DESC """, {"from": from_date, "to": to_date}, as_dict=True, diff --git a/crm/fcrm/doctype/crm_dashboard/crm_dashboard.py b/crm/fcrm/doctype/crm_dashboard/crm_dashboard.py index 0f6ffaa3..f9a04395 100644 --- a/crm/fcrm/doctype/crm_dashboard/crm_dashboard.py +++ b/crm/fcrm/doctype/crm_dashboard/crm_dashboard.py @@ -26,8 +26,9 @@ def create_default_manager_dashboard(force=False): doc.title = "Manager Dashboard" doc.layout = default_manager_dashboard_layout() doc.insert(ignore_permissions=True) - elif force: + else: doc = frappe.get_doc("CRM Dashboard", "Manager Dashboard") - doc.layout = default_manager_dashboard_layout() - doc.save(ignore_permissions=True) + if force: + doc.layout = default_manager_dashboard_layout() + doc.save(ignore_permissions=True) return doc.layout diff --git a/crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py b/crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py index 84351670..fde6fb72 100644 --- a/crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py +++ b/crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py @@ -135,7 +135,7 @@ def get_quotation_url(crm_deal, organization): "party_name": crm_deal, "company": erpnext_crm_settings.erpnext_company, "contact_person": contact, - "customer_address": address + "customer_address": address, } else: site_url = erpnext_crm_settings.get("erpnext_site_url") @@ -147,14 +147,11 @@ def get_quotation_url(crm_deal, organization): "party_name": prospect, "company": erpnext_crm_settings.erpnext_company, "contact_person": contact, - "customer_address": address + "customer_address": address, } - + # Filter out None values and build query string - query_string = "&".join( - f"{key}={value}" for key, value in params.items() - if value is not None - ) + query_string = "&".join(f"{key}={value}" for key, value in params.items() if value is not None) return f"{base_url}?{query_string}" diff --git a/crm/fcrm/doctype/helpdesk_crm_settings/__init__.py b/crm/fcrm/doctype/helpdesk_crm_settings/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.js b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.js new file mode 100644 index 00000000..b31a6f24 --- /dev/null +++ b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Helpdesk CRM Settings", { +// refresh(frm) { + +// }, +// }); diff --git a/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.json b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.json new file mode 100644 index 00000000..220666ab --- /dev/null +++ b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.json @@ -0,0 +1,102 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-08-18 17:25:49.638398", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "enabled", + "column_break_idaw", + "is_helpdesk_in_different_site", + "helpdesk_site_url", + "helpdesk_site_apis_section", + "api_key", + "column_break_tqsm", + "api_secret" + ], + "fields": [ + { + "default": "0", + "fieldname": "enabled", + "fieldtype": "Check", + "label": "Enabled" + }, + { + "fieldname": "column_break_idaw", + "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "enabled", + "fieldname": "is_helpdesk_in_different_site", + "fieldtype": "Check", + "label": "Is Helpdesk installed on a different site?" + }, + { + "depends_on": "eval:doc.enabled && doc.is_helpdesk_in_different_site", + "fieldname": "helpdesk_site_url", + "fieldtype": "Data", + "label": "Helpdesk Site URL", + "mandatory_depends_on": "is_helpdesk_in_different_site" + }, + { + "depends_on": "enabled", + "fieldname": "helpdesk_site_apis_section", + "fieldtype": "Section Break", + "label": "Helpdesk Site API's" + }, + { + "depends_on": "eval:doc.enabled && doc.is_helpdesk_in_different_site", + "fieldname": "api_key", + "fieldtype": "Data", + "label": "API Key", + "mandatory_depends_on": "is_helpdesk_in_different_site" + }, + { + "fieldname": "column_break_tqsm", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:doc.enabled && doc.is_helpdesk_in_different_site", + "fieldname": "api_secret", + "fieldtype": "Password", + "label": "API Secret", + "mandatory_depends_on": "is_helpdesk_in_different_site" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "issingle": 1, + "links": [], + "modified": "2025-08-18 17:33:38.616328", + "modified_by": "Administrator", + "module": "FCRM", + "name": "Helpdesk CRM Settings", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "Sales Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} diff --git a/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.py b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.py new file mode 100644 index 00000000..efc6b999 --- /dev/null +++ b/crm/fcrm/doctype/helpdesk_crm_settings/helpdesk_crm_settings.py @@ -0,0 +1,178 @@ +# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.model.document import Document + + +class HelpdeskCRMSettings(Document): + def validate(self): + if self.enabled: + self.validate_if_helpdesk_installed() + self.create_helpdesk_script() + + def validate_if_helpdesk_installed(self): + if not self.is_helpdesk_in_different_site: + if "helpdesk" not in frappe.get_installed_apps(): + frappe.throw(_("Helpdesk is not installed in the current site")) + + def create_helpdesk_script(self): + if not frappe.db.exists("CRM Form Script", "Helpdesk Integration Script"): + script = get_helpdesk_script() + frappe.get_doc( + { + "doctype": "CRM Form Script", + "name": "Helpdesk Integration Script", + "dt": "CRM Deal", + "view": "Form", + "script": script, + "enabled": 1, + "is_standard": 1, + } + ).insert() + + +@frappe.whitelist() +def create_customer_in_helpdesk(name, email): + helpdesk_crm_settings = frappe.get_single("Helpdesk CRM Settings") + if not helpdesk_crm_settings.enabled: + frappe.throw(_("Helpdesk is not integrated with the CRM")) + + if not helpdesk_crm_settings.is_helpdesk_in_different_site: + # from helpdesk.integrations.crm.api import create_customer + return create_customer(name, email) + + +def get_helpdesk_script(): + return """class CRMDeal { + onLoad() { + this.actions.push( + { + group: "Helpdesk", + hideLabel: true, + items: [ + { + label: "Create customer in Helpdesk", + onClick: () => { + call('crm.fcrm.doctype.helpdesk_crm_settings.helpdesk_crm_settings.create_customer_in_helpdesk', { + name: this.doc.organization, + email: this.doc.email + }).then((a) => { + toast.success("Customer created successfully, " + a.customer) + }) + } + } + ] + } + ) + } +}""" + +# Helpdesk methods TODO: move to helpdesk.integrations.crm.api +def create_customer(name, email): + customer = frappe.db.exists("HD Customer", name) + if not customer: + customer = frappe.get_doc( + { + "doctype": "HD Customer", + "customer_name": name, + } + ) + customer.insert(ignore_permissions=True, ignore_if_duplicate=True) + else: + customer = frappe.get_doc("HD Customer", customer) + + contact = frappe.db.exists("Contact", {"email_id": email}) + if contact: + contact = frappe.get_doc("Contact", contact) + contact.append( + "links", {"link_doctype": "HD Customer", "link_name": customer.name} + ) + contact.save(ignore_permissions=True) + else: + contact = frappe.get_doc( + { + "doctype": "Contact", + "first_name": email.split("@")[0], + "email_ids": [{"email_id": email, "is_primary": 1}], + "links": [{"link_doctype": "HD Customer", "link_name": customer.name}], + } + ) + contact.insert(ignore_permissions=True) + + if not frappe.db.exists("User", contact.email_id): + invite_user(contact.name) + else: + base_url = frappe.utils.get_url() + "/helpdesk" + frappe.sendmail( + recipients=[contact.email_id], + subject="Welcome existing user to Helpdesk", + message=f""" +

Hello,

+ + """, + now=True, + ) + + return {"customer": customer.name, "contact": contact.name} + + +def invite_user(contact: str): + contact = frappe.get_doc("Contact", contact) + contact.check_permission() + + if not contact.email_id: + frappe.throw(_("Please set Email Address")) + + user = frappe.get_doc( + { + "doctype": "User", + "first_name": contact.first_name, + "last_name": contact.last_name, + "email": contact.email_id, + "user_type": "Website User", + "send_welcome_email": 0 + } + ).insert() + + contact.user = user.name + contact.save(ignore_permissions=True) + + send_welcome_mail_to_user(user) + return user.name + + +def send_welcome_mail_to_user(user): + from frappe.utils import get_url + from frappe.utils.user import get_user_fullname + + link = user.reset_password() + + frappe.cache.hset("redirect_after_login", user.name, "/helpdesk") + + site_url = get_url() + subject = _("Welcome to Helpdesk") + + created_by = get_user_fullname(frappe.session["user"]) + if created_by == "Guest": + created_by = "Administrator" + + args = { + "first_name": user.first_name or user.last_name or "user", + "last_name": user.last_name, + "user": user.name, + "title": subject, + "login_url": get_url(), + "created_by": created_by, + "site_url": site_url, + "link": link + } + + frappe.sendmail( + recipients=[user.email], + subject=subject, + template="helpdesk_invitation", + args=args, + now=True, + ) diff --git a/crm/fcrm/doctype/helpdesk_crm_settings/test_helpdesk_crm_settings.py b/crm/fcrm/doctype/helpdesk_crm_settings/test_helpdesk_crm_settings.py new file mode 100644 index 00000000..c60d55dc --- /dev/null +++ b/crm/fcrm/doctype/helpdesk_crm_settings/test_helpdesk_crm_settings.py @@ -0,0 +1,21 @@ +# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +# import frappe +from frappe.tests import IntegrationTestCase + +# On IntegrationTestCase, the doctype test records and all +# link-field test record dependencies are recursively loaded +# Use these module variables to add/remove to/from that list +EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] +IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] + + + +class IntegrationTestHelpdeskCRMSettings(IntegrationTestCase): + """ + Integration tests for HelpdeskCRMSettings. + Use this class for testing interactions between multiple components. + """ + + pass diff --git a/crm/locale/de.po b/crm/locale/de.po index 952f891c..8e78aa61 100644 --- a/crm/locale/de.po +++ b/crm/locale/de.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n" -"PO-Revision-Date: 2025-08-04 08:34\n" +"PO-Revision-Date: 2025-08-09 10:05\n" "Last-Translator: shariq@frappe.io\n" "Language-Team: German\n" "MIME-Version: 1.0\n" @@ -621,16 +621,16 @@ msgstr "Zwischen" #: frontend/src/components/Settings/General/BrandSettings.vue:40 msgid "Brand name" -msgstr "" +msgstr "Markenname" #: frontend/src/components/Settings/General/BrandSettings.vue:9 msgid "Brand settings" -msgstr "" +msgstr "Markeneinstellungen" #. Label of the branding_tab (Tab Break) field in DocType 'FCRM Settings' #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json msgid "Branding" -msgstr "" +msgstr "Firmenlogo" #: frontend/src/components/Modals/EditValueModal.vue:2 msgid "Bulk Edit" @@ -1295,7 +1295,7 @@ msgstr "Interessent erstellen" #: frontend/src/components/Layouts/AppSidebar.vue:344 msgid "Create your first lead" -msgstr "" +msgstr "Erstellen Sie Ihren ersten Interessenten" #: frontend/src/components/Layouts/AppSidebar.vue:414 msgid "Create your first note" @@ -1303,7 +1303,7 @@ msgstr "" #: frontend/src/components/Layouts/AppSidebar.vue:394 msgid "Create your first task" -msgstr "" +msgstr "Erstellen Sie Ihre erste Aufgabe" #. Label of the currency (Link) field in DocType 'CRM Deal' #. Label of the currency (Link) field in DocType 'CRM Organization' @@ -1334,7 +1334,7 @@ msgstr "" #: frontend/src/components/Layouts/AppSidebar.vue:536 msgid "Custom branding" -msgstr "" +msgstr "Benutzerdefiniertes Branding" #: frontend/src/components/Layouts/AppSidebar.vue:585 msgid "Custom fields" @@ -1568,7 +1568,7 @@ msgstr "Ansicht löschen" #: frontend/src/components/DeleteLinkedDocModal.vue:65 msgid "Delete all" -msgstr "" +msgstr "Alles löschen" #: frontend/src/components/Activities/AttachmentArea.vue:62 #: frontend/src/components/Activities/AttachmentArea.vue:138 @@ -1581,15 +1581,15 @@ msgstr "Kontakt löschen" #: frontend/src/components/DeleteLinkedDocModal.vue:229 msgid "Delete linked item" -msgstr "" +msgstr "Verknüpftes Element löschen" #: frontend/src/components/DeleteLinkedDocModal.vue:11 msgid "Delete or unlink linked documents" -msgstr "" +msgstr "Verknüpfte Dokumente löschen oder ihre Verknüpfung aufheben" #: frontend/src/components/DeleteLinkedDocModal.vue:23 msgid "Delete or unlink these linked documents before deleting this document" -msgstr "" +msgstr "Verknüpfte Dokumente löschen oder ihre Verknüpfung aufheben bevor dieses Dokument gelöscht wird" #: frontend/src/pages/MobileOrganization.vue:263 msgid "Delete organization" @@ -1597,11 +1597,11 @@ msgstr "Organisation löschen" #: frontend/src/components/DeleteLinkedDocModal.vue:66 msgid "Delete {0} item(s)" -msgstr "" +msgstr "{0} Element(e) löschen" #: frontend/src/components/BulkDeleteLinkedDocModal.vue:28 msgid "Delete {0} items" -msgstr "" +msgstr "{0} Element(e) löschen" #. Label of the description (Text Editor) field in DocType 'CRM Holiday' #. Label of the description (Text Editor) field in DocType 'CRM Lost Reason' @@ -1676,7 +1676,7 @@ msgstr "Dokumententyp" #: frontend/src/data/document.js:28 msgid "Document does not exist" -msgstr "" +msgstr "Dokument existiert nicht" #: crm/api/activities.py:19 msgid "Document not found" @@ -1684,7 +1684,7 @@ msgstr "Dokument nicht gefunden" #: frontend/src/data/document.js:42 msgid "Document updated successfully" -msgstr "" +msgstr "Dokument erfolgreich aktualisiert" #: frontend/src/components/Modals/AboutModal.vue:62 msgid "Documentation" @@ -1698,7 +1698,7 @@ msgstr "Erledigt" #: frontend/src/components/Dashboard/AddChartModal.vue:33 #: frontend/src/components/Dashboard/AddChartModal.vue:71 msgid "Donut chart" -msgstr "" +msgstr "Donut-Diagramm" #: frontend/src/components/Activities/AudioPlayer.vue:166 #: frontend/src/components/ViewControls.vue:254 @@ -1737,7 +1737,7 @@ msgstr "Ansicht duplizieren" #: frontend/src/components/Settings/EmailTemplate/NewEmailTemplate.vue:10 msgid "Duplicate template" -msgstr "" +msgstr "Vorlage duplizieren" #. Label of the duration (Duration) field in DocType 'CRM Call Log' #. Label of the duration (Duration) field in DocType 'CRM Status Change Log' @@ -1778,11 +1778,11 @@ msgstr "ERPNext ist nicht mit dem CRM integriert" #: frontend/src/components/Settings/ERPNextSettings.vue:4 msgid "ERPNext settings" -msgstr "" +msgstr "ERPNext-Einstellungen" #: frontend/src/components/Settings/ERPNextSettings.vue:5 msgid "ERPNext settings updated" -msgstr "" +msgstr "ERPNext-Einstellungen aktualisiert" #: frontend/src/components/FieldLayout/Field.vue:91 #: frontend/src/components/FieldLayoutEditor.vue:319 @@ -1803,7 +1803,7 @@ msgstr "Layout der Datenfelder bearbeiten" #: frontend/src/components/Settings/EmailEdit.vue:6 msgid "Edit Email" -msgstr "" +msgstr "E-Mail bearbeiten" #: frontend/src/components/Modals/SidePanelModal.vue:7 msgid "Edit Field Layout" @@ -1861,11 +1861,11 @@ msgstr "E-Mail" #: frontend/src/components/Settings/Settings.vue:107 msgid "Email Accounts" -msgstr "" +msgstr "E-Mail Konten" #: frontend/src/components/Settings/emailConfig.js:168 msgid "Email ID is required" -msgstr "" +msgstr "E-Mail ID ist erforderlich" #. Label of the email_sent_at (Datetime) field in DocType 'CRM Invitation' #: crm/fcrm/doctype/crm_invitation/crm_invitation.json @@ -1879,19 +1879,19 @@ msgstr "E-Mail-Vorlagen" #: frontend/src/components/Settings/EmailAdd.vue:141 msgid "Email account created successfully" -msgstr "" +msgstr "E-Mail-Konto erfolgreich erstellt" #: frontend/src/components/Settings/EmailEdit.vue:208 msgid "Email account updated successfully" -msgstr "" +msgstr "E-Mail-Konto erfolgreich aktualisiert" #: frontend/src/components/Settings/EmailAccountList.vue:7 msgid "Email accounts" -msgstr "" +msgstr "E-Mail-Konten" #: frontend/src/components/Layouts/AppSidebar.vue:573 msgid "Email communication" -msgstr "" +msgstr "E-Mail-Kommunikation" #: frontend/src/components/EmailEditor.vue:206 msgid "Email from Lead" @@ -1899,11 +1899,11 @@ msgstr "" #: frontend/src/components/Layouts/AppSidebar.vue:552 msgid "Email template" -msgstr "" +msgstr "E-Mail-Vorlage" #: frontend/src/components/Settings/EmailTemplate/EmailTemplates.vue:7 msgid "Email templates" -msgstr "" +msgstr "E-Mail-Vorlagen" #: frontend/src/pages/Deal.vue:545 frontend/src/pages/Lead.vue:411 #: frontend/src/pages/MobileDeal.vue:437 frontend/src/pages/MobileLead.vue:344 @@ -1929,7 +1929,7 @@ msgstr "ermöglichen" #. Label of the enable_forecasting (Check) field in DocType 'FCRM Settings' #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json msgid "Enable Forecasting" -msgstr "" +msgstr "Vorhersage aktivieren" #: frontend/src/components/Settings/emailConfig.js:28 msgid "Enable Incoming" @@ -1941,7 +1941,7 @@ msgstr "Ausgehend aktivieren" #: frontend/src/components/Settings/General/GeneralSettings.vue:19 msgid "Enable forecasting" -msgstr "" +msgstr "Vorhersage aktivieren" #. Label of the enabled (Check) field in DocType 'CRM Exotel Settings' #. Label of the enabled (Check) field in DocType 'CRM Form Script' @@ -2185,7 +2185,7 @@ msgstr "" #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: frontend/src/components/Settings/General/BrandSettings.vue:81 msgid "Favicon" -msgstr "" +msgstr "Favicon" #: frontend/src/components/Modals/EditValueModal.vue:5 msgid "Field" @@ -2485,7 +2485,7 @@ msgstr "" #: frontend/src/components/Settings/emailConfig.js:47 msgid "If enabled, all replies to your company (eg: replies@yourcomany.com) will come to this account. Note: Only one account can be default incoming." -msgstr "" +msgstr "Falls aktiviert, werden alle Antworten an Ihr Unternehmen (z.B. replies@yourcomany.com) an dieses Konto gesendet. Hinweis: Es kann nur ein Konto als Standard-Eingang festgelegt werden." #: frontend/src/components/Settings/emailConfig.js:39 msgid "If enabled, outgoing emails can be sent from this account." @@ -3299,7 +3299,7 @@ msgstr "Nächste Woche" #: frontend/src/components/Filter.vue:672 msgid "Next Year" -msgstr "" +msgstr "Nächstes Jahr" #: frontend/src/components/Controls/Grid.vue:27 msgid "No" diff --git a/crm/locale/fa.po b/crm/locale/fa.po index 2a15c1c7..7ba04f47 100644 --- a/crm/locale/fa.po +++ b/crm/locale/fa.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n" -"PO-Revision-Date: 2025-08-04 08:34\n" +"PO-Revision-Date: 2025-08-12 11:22\n" "Last-Translator: shariq@frappe.io\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -166,7 +166,7 @@ msgstr "" #: crm/fcrm/doctype/crm_invitation/crm_invitation.js:7 msgid "Accept Invitation" -msgstr "" +msgstr "پذیرش دعوت نامه" #. Option for the 'Status' (Select) field in DocType 'CRM Invitation' #: crm/fcrm/doctype/crm_invitation/crm_invitation.json @@ -176,7 +176,7 @@ msgstr "پذیرفته شده" #. Label of the accepted_at (Datetime) field in DocType 'CRM Invitation' #: crm/fcrm/doctype/crm_invitation/crm_invitation.json msgid "Accepted At" -msgstr "" +msgstr "پذیرفته شده در" #. Label of the access_key (Data) field in DocType 'FCRM Settings' #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json @@ -189,7 +189,7 @@ msgstr "کلید دسترسی برای ارائه‌دهنده خدمات لاز #: frontend/src/components/Settings/General/CurrencySettings.vue:97 msgid "Access key" -msgstr "" +msgstr "کلید دسترسی" #: frontend/src/components/Settings/General/CurrencySettings.vue:101 msgid "Access key for Exchangerate Host. Required for fetching exchange rates." @@ -245,7 +245,7 @@ msgstr "" #: frontend/src/components/Kanban/KanbanSettings.vue:84 #: frontend/src/components/SidePanelLayoutEditor.vue:98 msgid "Add Field" -msgstr "" +msgstr "افزودن فیلد" #: frontend/src/components/Filter.vue:138 msgid "Add Filter" @@ -258,15 +258,15 @@ msgstr "افزودن ردیف" #: frontend/src/components/FieldLayoutEditor.vue:200 #: frontend/src/components/SidePanelLayoutEditor.vue:130 msgid "Add Section" -msgstr "" +msgstr "افزودن بخش" #: frontend/src/components/SortBy.vue:148 msgid "Add Sort" -msgstr "" +msgstr "افزودن مرتب‌سازی" #: frontend/src/components/FieldLayoutEditor.vue:62 msgid "Add Tab" -msgstr "" +msgstr "افزودن تب" #. Label of the add_weekly_holidays_section (Section Break) field in DocType #. 'CRM Holiday List' @@ -405,7 +405,7 @@ msgstr "درآمد سالانه" #: frontend/src/components/Modals/DealModal.vue:201 #: frontend/src/components/Modals/LeadModal.vue:142 msgid "Annual Revenue should be a number" -msgstr "" +msgstr "درآمد سالانه باید یک عدد باشد" #: frontend/src/components/Settings/General/BrandSettings.vue:69 msgid "Appears in the left sidebar. Recommended size is 32x32 px in PNG or SVG" @@ -1033,12 +1033,12 @@ msgstr "ستون ها" #: frontend/src/components/CommunicationArea.vue:19 #: frontend/src/components/Layouts/AppSidebar.vue:574 msgid "Comment" -msgstr "اظهار نظر" +msgstr "دیدگاه" #: frontend/src/pages/Deal.vue:550 frontend/src/pages/Lead.vue:416 #: frontend/src/pages/MobileDeal.vue:442 frontend/src/pages/MobileLead.vue:349 msgid "Comments" -msgstr "نظرات" +msgstr "دیدگاه‌ها" #: crm/api/dashboard.py:884 msgid "Common reasons for losing deals" @@ -1142,7 +1142,7 @@ msgstr "مخاطب قبلاً اضافه شده است" #: crm/fcrm/doctype/crm_lead/crm_lead.py:211 msgid "Contact already exists with {0}" -msgstr "" +msgstr "مخاطب از قبل با {0} وجود دارد" #: frontend/src/pages/Contact.vue:282 frontend/src/pages/MobileContact.vue:255 msgid "Contact image updated" @@ -2565,7 +2565,7 @@ msgstr "" #: frontend/src/components/Layouts/AppSidebar.vue:593 msgid "Integration" -msgstr "" +msgstr "یکپارچه سازی" #: crm/integrations/exotel/handler.py:73 msgid "Integration Not Enabled" @@ -4194,7 +4194,7 @@ msgstr "" #: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_lead/crm_lead.json msgid "SLA Status" -msgstr "" +msgstr "وضعیت SLA" #: frontend/src/components/EmailEditor.vue:82 msgid "SUBJECT" @@ -4498,7 +4498,7 @@ msgstr "" #: frontend/src/components/FieldLayoutEditor.vue:355 msgid "Show label" -msgstr "" +msgstr "نمایش برچسب" #: frontend/src/components/Controls/GridRowFieldsModal.vue:20 #: frontend/src/components/Modals/DataFieldsModal.vue:20 @@ -4648,7 +4648,7 @@ msgstr "" #: frontend/src/components/FilesUploader/FilesUploader.vue:49 msgid "Switch camera" -msgstr "" +msgstr "تغییر دوربین" #: frontend/src/pages/Welcome.vue:32 msgid "Sync your contacts,email and calenders" @@ -4678,7 +4678,7 @@ msgstr "" #: frontend/src/components/Telephony/ExotelCallUI.vue:151 msgid "Take a note..." -msgstr "" +msgstr "یادداشت کنید..." #. Option for the 'Type' (Select) field in DocType 'CRM Notification' #: crm/fcrm/doctype/crm_notification/crm_notification.json @@ -4762,7 +4762,7 @@ msgstr "نام منطقه" #: crm/fcrm/doctype/crm_service_level_agreement/crm_service_level_agreement.py:46 msgid "The Condition '{0}' is invalid: {1}" -msgstr "" +msgstr "شرط '{0}' نامعتبر است: {1}" #. Description of the 'Exchange Rate' (Float) field in DocType 'CRM Deal' #: crm/fcrm/doctype/crm_deal/crm_deal.json @@ -4939,7 +4939,7 @@ msgstr "سه‌شنبه" #. Label of the twiml_sid (Data) field in DocType 'CRM Twilio Settings' #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.json msgid "TwiML SID" -msgstr "" +msgstr "TwiML SID" #. Option for the 'Telephony Medium' (Select) field in DocType 'CRM Call Log' #. Label of the twilio (Check) field in DocType 'CRM Telephony Agent' @@ -4951,7 +4951,7 @@ msgstr "" #: frontend/src/components/Settings/TelephonySettings.vue:40 #: frontend/src/components/Settings/TelephonySettings.vue:50 msgid "Twilio" -msgstr "" +msgstr "Twilio" #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:59 #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:60 @@ -4965,7 +4965,7 @@ msgstr "" #: frontend/src/components/Settings/TelephonySettings.vue:289 msgid "Twilio is not enabled" -msgstr "" +msgstr "Twilio فعال نیست" #: frontend/src/components/Settings/TelephonySettings.vue:125 msgid "Twilio settings updated successfully" @@ -5377,7 +5377,7 @@ msgstr "group_by" #: frontend/src/components/Activities/CallArea.vue:16 msgid "has made a call" -msgstr "" +msgstr "تماس گرفته است" #: frontend/src/components/Activities/CallArea.vue:15 msgid "has reached out" diff --git a/crm/locale/it.po b/crm/locale/it.po index e2df9406..aa3f95fc 100644 --- a/crm/locale/it.po +++ b/crm/locale/it.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n" -"PO-Revision-Date: 2025-08-08 10:07\n" +"PO-Revision-Date: 2025-08-11 10:38\n" "Last-Translator: shariq@frappe.io\n" "Language-Team: Italian\n" "MIME-Version: 1.0\n" @@ -208,7 +208,7 @@ msgstr "SID dell'Account" #: frontend/src/components/Settings/emailConfig.js:165 msgid "Account name is required" -msgstr "Il nome dell'account è obbligatorio" +msgstr "Il nome dell'Account è obbligatorio" #: frontend/src/components/CustomActions.vue:73 #: frontend/src/components/ViewControls.vue:683 @@ -377,7 +377,7 @@ msgstr "" #: frontend/src/data/document.js:63 msgid "An error occurred while updating the document" -msgstr "" +msgstr "Si è verificato un errore durante l'aggiornamento del documento" #. Description of the 'Favicon' (Attach) field in DocType 'FCRM Settings' #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json @@ -472,7 +472,7 @@ msgstr "" #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:193 msgid "Ask your manager to set up the Exchange Rate Provider, as default provider does not support currency conversion for {0} to {1}." -msgstr "" +msgstr "Chiedi al tuo manager di configurare un fornitore di tassi di cambio, poiché quello predefinito non supporta la conversione da {0} a {1}." #: frontend/src/components/ListBulkActions.vue:184 #: frontend/src/components/Modals/AssignmentModal.vue:5 @@ -726,7 +726,7 @@ msgstr "" #. Name of a DocType #: crm/fcrm/doctype/crm_lead/crm_lead.json msgid "CRM Lead" -msgstr "" +msgstr "Offerta CRM" #. Name of a DocType #: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json @@ -791,7 +791,7 @@ msgstr "" #. Name of a DocType #: crm/fcrm/doctype/crm_task/crm_task.json msgid "CRM Task" -msgstr "" +msgstr "Attività CRM" #. Name of a DocType #: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json @@ -824,7 +824,7 @@ msgstr "" #: frontend/src/components/ViewControls.vue:272 msgid "CSV" -msgstr "" +msgstr "CSV" #: frontend/src/components/Modals/CallLogDetailModal.vue:8 msgid "Call Details" @@ -966,7 +966,7 @@ msgstr "" #: frontend/src/components/Controls/Link.vue:62 msgid "Clear" -msgstr "" +msgstr "Pulisci" #: frontend/src/components/ListBulkActions.vue:134 #: frontend/src/components/ListBulkActions.vue:142 @@ -1086,7 +1086,7 @@ msgstr "" #: frontend/src/components/Settings/General/CurrencySettings.vue:70 msgid "Configure the exchange rate provider for your CRM" -msgstr "" +msgstr "Configura un exchange rate provider per il tuo CRM" #: frontend/src/composables/frappecloud.js:29 msgid "Confirm" @@ -1099,7 +1099,7 @@ msgstr "" #: frontend/src/components/Modals/ChangePasswordModal.vue:18 msgid "Confirm Password" -msgstr "Conferma Password" +msgstr "Ripeti Password" #: frontend/src/components/Settings/Users.vue:225 #: frontend/src/components/Settings/Users.vue:228 @@ -1118,7 +1118,7 @@ msgstr "" #: frontend/src/components/Modals/ConvertToDealModal.vue:65 #: frontend/src/pages/MobileLead.vue:147 msgid "Contact" -msgstr "" +msgstr "Contatto" #: crm/fcrm/doctype/crm_lead/crm_lead.py:212 msgid "Contact Already Exists" @@ -1228,7 +1228,7 @@ msgstr "Copiato negli appunti" #: crm/api/dashboard.py:607 crm/api/dashboard.py:736 crm/api/dashboard.py:794 #: crm/api/dashboard.py:891 msgid "Count" -msgstr "" +msgstr "Q.tà" #: frontend/src/components/Modals/AddressModal.vue:99 #: frontend/src/components/Modals/CallLogModal.vue:102 @@ -1667,7 +1667,7 @@ msgstr "" #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json msgid "DocType" -msgstr "Tipo di documento" +msgstr "Tipo Documento" #. Label of the dt (Link) field in DocType 'CRM Fields Layout' #: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json @@ -1676,7 +1676,7 @@ msgstr "Tipo Documento" #: frontend/src/data/document.js:28 msgid "Document does not exist" -msgstr "" +msgstr "Il Documento non esiste" #: crm/api/activities.py:19 msgid "Document not found" @@ -1749,7 +1749,7 @@ msgstr "" #: frontend/src/components/Layouts/AppSidebar.vue:599 #: frontend/src/components/Settings/Settings.vue:135 msgid "ERPNext" -msgstr "" +msgstr "ERPNext" #. Name of a DocType #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json @@ -1791,7 +1791,7 @@ msgstr "" #: frontend/src/components/ViewControls.vue:1131 #: frontend/src/pages/Dashboard.vue:19 msgid "Edit" -msgstr "" +msgstr "Modifica" #: frontend/src/components/Modals/CallLogModal.vue:98 msgid "Edit Call Log" @@ -1973,7 +1973,7 @@ msgstr "" #: frontend/src/components/Settings/General/CurrencySettings.vue:122 msgid "Enter access key" -msgstr "" +msgstr "Inserisci la chiave di accesso" #: frontend/src/components/FieldLayout/Field.vue:334 msgid "Enter {0}" @@ -1996,7 +1996,7 @@ msgstr "" #: frontend/src/pages/Deal.vue:739 frontend/src/pages/Lead.vue:486 #: frontend/src/pages/MobileDeal.vue:614 frontend/src/pages/MobileLead.vue:415 msgid "Error updating field" -msgstr "" +msgstr "Aggiornamento campo non riuscito" #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:261 msgid "Error while creating customer in ERPNext, check error log for more details" @@ -2080,7 +2080,7 @@ msgstr "" #: crm/fcrm/doctype/crm_deal/crm_deal.py:161 msgid "Expected Closure Date is required." -msgstr "" +msgstr "Data Chiusura Prevista obbligatoria." #. Label of the expected_deal_value (Currency) field in DocType 'CRM Deal' #: crm/fcrm/doctype/crm_deal/crm_deal.json @@ -2099,7 +2099,7 @@ msgstr "" #: frontend/src/components/ViewControls.vue:203 #: frontend/src/components/ViewControls.vue:251 msgid "Export" -msgstr "Esportare" +msgstr "Esporta" #: frontend/src/components/ViewControls.vue:282 msgid "Export All {0} Record(s)" @@ -2150,7 +2150,7 @@ msgstr "" #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:205 msgid "Failed to fetch exchange rate from {0} to {1} on {2}. Please check your internet connection or try again later." -msgstr "" +msgstr "Impossibile recuperare il tasso di cambio da {0} a {1} in data {2}. Controlla la tua connessione internet o riprova più tardi." #: frontend/src/data/script.js:106 msgid "Failed to load form controller: {0}" @@ -2227,7 +2227,7 @@ msgstr "Filtri" #: frontend/src/components/SortBy.vue:6 frontend/src/components/SortBy.vue:106 #: frontend/src/components/SortBy.vue:140 msgid "First Name" -msgstr "Nome di battesimo" +msgstr "Nome" #: frontend/src/components/Modals/LeadModal.vue:135 msgid "First Name is mandatory" @@ -2296,7 +2296,7 @@ msgstr "" #. Name of a Workspace #: crm/fcrm/workspace/frappe_crm/frappe_crm.json msgid "Frappe CRM" -msgstr "" +msgstr "CRM Frappe" #: frontend/src/components/Layouts/AppSidebar.vue:603 msgid "Frappe CRM mobile" @@ -2359,7 +2359,7 @@ msgstr "" #: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_lead/crm_lead.json msgid "Gender" -msgstr "" +msgstr "Genere" #: frontend/src/components/Settings/General/GeneralSettings.vue:5 #: frontend/src/components/Settings/Settings.vue:89 @@ -2414,7 +2414,7 @@ msgstr "Nascosto" #: frontend/src/components/Activities/Activities.vue:230 msgid "Hide" -msgstr "" +msgstr "Nascosto" #: frontend/src/components/Controls/Password.vue:19 msgid "Hide Password" @@ -2652,7 +2652,7 @@ msgstr "" #. Label of the is_default (Check) field in DocType 'CRM View Settings' #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json msgid "Is Default" -msgstr "È predefinito" +msgstr "È Predefinito" #. Label of the is_erpnext_in_different_site (Check) field in DocType 'ERPNext #. CRM Settings' @@ -2690,7 +2690,7 @@ msgstr "" #. Label of the json (JSON) field in DocType 'CRM Global Settings' #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json msgid "JSON" -msgstr "" +msgstr "JSON" #. Label of the job_title (Data) field in DocType 'CRM Deal' #. Label of the job_title (Data) field in DocType 'CRM Lead' @@ -2711,7 +2711,7 @@ msgstr "" #: frontend/src/components/ViewControls.vue:384 #: frontend/src/components/ViewControls.vue:600 frontend/src/utils/view.js:20 msgid "Kanban" -msgstr "" +msgstr "Kanban" #. Label of the kanban_columns (Code) field in DocType 'CRM View Settings' #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json @@ -2859,7 +2859,7 @@ msgstr "" #: frontend/src/components/FilesUploader/FilesUploaderArea.vue:43 msgid "Library" -msgstr "" +msgstr "Libreria" #: frontend/src/components/Filter.vue:274 #: frontend/src/components/Filter.vue:285 @@ -2974,7 +2974,7 @@ msgstr "" #. Option for the 'Priority' (Select) field in DocType 'CRM Task' #: crm/fcrm/doctype/crm_task/crm_task.json msgid "Low" -msgstr "" +msgstr "Bassa" #: frontend/src/pages/Contact.vue:94 frontend/src/pages/MobileContact.vue:73 msgid "Make Call" @@ -3091,7 +3091,7 @@ msgstr "" #: crm/fcrm/doctype/crm_contacts/crm_contacts.json #: crm/fcrm/doctype/crm_lead/crm_lead.json msgid "Mobile No" -msgstr "" +msgstr "Cellulare" #: frontend/src/components/Modals/DealModal.vue:209 #: frontend/src/components/Modals/LeadModal.vue:150 @@ -3119,7 +3119,7 @@ msgstr "" #: frontend/src/pages/MobileOrganization.vue:470 #: frontend/src/pages/Organization.vue:479 msgid "Mobile no" -msgstr "" +msgstr "Cellulare" #. Option for the 'Weekly Off' (Select) field in DocType 'CRM Holiday List' #. Option for the 'Workday' (Select) field in DocType 'CRM Service Day' @@ -3218,7 +3218,7 @@ msgstr "" #: frontend/src/components/Activities/ActivityHeader.vue:17 #: frontend/src/components/Activities/ActivityHeader.vue:127 msgid "New Email" -msgstr "" +msgstr "Nuova E-mail" #: frontend/src/components/Activities/ActivityHeader.vue:73 msgid "New Message" @@ -3236,7 +3236,7 @@ msgstr "" #: frontend/src/components/Modals/ChangePasswordModal.vue:6 msgid "New Password" -msgstr "" +msgstr "Nuova Password" #: frontend/src/components/FieldLayoutEditor.vue:203 #: frontend/src/components/SidePanelLayoutEditor.vue:133 @@ -3675,7 +3675,7 @@ msgstr "" #: frontend/src/components/Settings/emailConfig.js:64 msgid "Password" -msgstr "" +msgstr "Password" #: crm/api/demo.py:21 crm/api/demo.py:29 msgid "Password cannot be reset by Demo User {}" @@ -3729,7 +3729,7 @@ msgstr "" #: frontend/src/pages/MobileOrganization.vue:498 #: frontend/src/pages/Organization.vue:507 msgid "Phone" -msgstr "" +msgstr "Telefono" #. Label of the phone_nos (Table) field in DocType 'CRM Telephony Agent' #: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json @@ -4002,7 +4002,7 @@ msgstr "Nome di Riferimento" #: frontend/src/components/ViewControls.vue:160 #: frontend/src/pages/Dashboard.vue:10 msgid "Refresh" -msgstr "" +msgstr "Ricarica" #: frontend/src/components/Telephony/TwilioCallUI.vue:104 msgid "Reject" @@ -4228,7 +4228,7 @@ msgstr "" #: crm/fcrm/doctype/fcrm_note/fcrm_note.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json msgid "Sales Manager" -msgstr "" +msgstr "Responsabile Vendite" #. Name of a role #. Option for the 'Role' (Select) field in DocType 'CRM Invitation' @@ -4302,7 +4302,7 @@ msgstr "" #: frontend/src/components/ViewControls.vue:123 #: frontend/src/pages/Dashboard.vue:45 msgid "Save" -msgstr "" +msgstr "Salva" #: frontend/src/components/Modals/ViewModal.vue:13 #: frontend/src/components/ViewControls.vue:57 @@ -4486,7 +4486,7 @@ msgstr "" #: frontend/src/components/Activities/Activities.vue:230 msgid "Show" -msgstr "" +msgstr "Mostra" #: frontend/src/components/Controls/Password.vue:19 msgid "Show Password" @@ -4515,7 +4515,7 @@ msgstr "" #. Option for the 'Type' (Select) field in DocType 'CRM Global Settings' #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json msgid "Sidebar Items" -msgstr "" +msgstr "Elementi della Barra Laterale" #. Description of the 'Condition' (Code) field in DocType 'CRM Service Level #. Agreement' @@ -4534,7 +4534,7 @@ msgstr "" #: crm/fcrm/doctype/crm_lead/crm_lead.json #: frontend/src/components/Modals/EditValueModal.vue:10 msgid "Source" -msgstr "" +msgstr "Sorgente" #. Label of the source_name (Data) field in DocType 'CRM Lead Source' #: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json @@ -4670,7 +4670,7 @@ msgstr "" #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json msgid "System Manager" -msgstr "" +msgstr "Amministratore di Sistema" #: frontend/src/components/EmailEditor.vue:22 msgid "TO" @@ -5564,7 +5564,7 @@ msgstr "" #: frontend/src/utils/index.js:130 msgid "{0} M" -msgstr "" +msgstr "{0} mesi" #: crm/api/todo.py:50 msgid "{0} assigned a {1} {2} to you" @@ -5572,7 +5572,7 @@ msgstr "" #: frontend/src/utils/index.js:126 msgid "{0} d" -msgstr "" +msgstr "{0} giorni" #: frontend/src/utils/index.js:181 msgid "{0} days ago" @@ -5616,7 +5616,7 @@ msgstr "" #: frontend/src/utils/index.js:128 msgid "{0} w" -msgstr "" +msgstr "{0} settimane" #: frontend/src/utils/index.js:185 msgid "{0} weeks ago" @@ -5624,7 +5624,7 @@ msgstr "" #: frontend/src/utils/index.js:132 msgid "{0} y" -msgstr "" +msgstr "{0} anni" #: frontend/src/utils/index.js:193 msgid "{0} years ago" diff --git a/crm/locale/main.pot b/crm/locale/main.pot index 573b1c77..35d0cdf1 100644 --- a/crm/locale/main.pot +++ b/crm/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Frappe CRM VERSION\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n" -"POT-Creation-Date: 2025-08-10 09:37+0000\n" -"PO-Revision-Date: 2025-08-10 09:37+0000\n" +"POT-Creation-Date: 2025-08-17 09:36+0000\n" +"PO-Revision-Date: 2025-08-17 09:36+0000\n" "Last-Translator: shariq@frappe.io\n" "Language-Team: shariq@frappe.io\n" "MIME-Version: 1.0\n" diff --git a/crm/templates/emails/helpdesk_invitation.html b/crm/templates/emails/helpdesk_invitation.html new file mode 100644 index 00000000..77fb852a --- /dev/null +++ b/crm/templates/emails/helpdesk_invitation.html @@ -0,0 +1,24 @@ +

+ {{_("Hello")}} {{ first_name }}{% if last_name %} {{ last_name}}{% endif %}, +

+{% set site_link = "" + site_url + "" %} +

{{_("A new account has been created for you at {0}").format(site_link)}}.

+

{{_("Your login id is")}}: {{ user }} +

{{_("Click on the link below to complete your registration and set a new password")}}.

+ +

+ {{ _("Complete Registration") }} +

+ +{% if created_by != "Administrator" %} +
+

+ {{_("Thanks")}},
+ {{ created_by }} +

+{% endif %} +
+

+ {{_("You can also copy-paste following link in your browser")}}
+ {{ link }} +

diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 8b1b706a..094bac87 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -142,6 +142,8 @@ declare module 'vue' { GroupBy: typeof import('./src/components/GroupBy.vue')['default'] GroupByIcon: typeof import('./src/components/Icons/GroupByIcon.vue')['default'] HeartIcon: typeof import('./src/components/Icons/HeartIcon.vue')['default'] + HelpdeskIcon: typeof import('./src/components/Icons/HelpdeskIcon.vue')['default'] + HelpdeskSettings: typeof import('./src/components/Settings/HelpdeskSettings.vue')['default'] HelpIcon: typeof import('./src/components/Icons/HelpIcon.vue')['default'] HomeActions: typeof import('./src/components/Settings/General/HomeActions.vue')['default'] Icon: typeof import('./src/components/Icon.vue')['default'] @@ -171,9 +173,6 @@ declare module 'vue' { LostReasonModal: typeof import('./src/components/Modals/LostReasonModal.vue')['default'] LucideCalendar: typeof import('~icons/lucide/calendar')['default'] LucideChevronRight: typeof import('~icons/lucide/chevron-right')['default'] - LucidePenLine: typeof import('~icons/lucide/pen-line')['default'] - LucideRefreshCcw: typeof import('~icons/lucide/refresh-ccw')['default'] - LucideX: typeof import('~icons/lucide/x')['default'] MarkAsDoneIcon: typeof import('./src/components/Icons/MarkAsDoneIcon.vue')['default'] MaximizeIcon: typeof import('./src/components/Icons/MaximizeIcon.vue')['default'] MenuIcon: typeof import('./src/components/Icons/MenuIcon.vue')['default'] @@ -188,7 +187,6 @@ declare module 'vue' { MultiSelectEmailInput: typeof import('./src/components/Controls/MultiSelectEmailInput.vue')['default'] MultiSelectUserInput: typeof import('./src/components/Controls/MultiSelectUserInput.vue')['default'] MuteIcon: typeof import('./src/components/Icons/MuteIcon.vue')['default'] - NestedPopover: typeof import('./src/components/NestedPopover.vue')['default'] NewEmailTemplate: typeof import('./src/components/Settings/EmailTemplate/NewEmailTemplate.vue')['default'] NoteArea: typeof import('./src/components/Activities/NoteArea.vue')['default'] NoteIcon: typeof import('./src/components/Icons/NoteIcon.vue')['default'] diff --git a/frontend/package.json b/frontend/package.json index ec932138..b6e12e74 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,7 @@ "@tiptap/extension-paragraph": "^2.12.0", "@twilio/voice-sdk": "^2.10.2", "@vueuse/integrations": "^10.3.0", - "frappe-ui": "^0.1.171", + "frappe-ui": "^0.1.189", "gemoji": "^8.1.0", "lodash": "^4.17.21", "mime": "^4.0.1", diff --git a/frontend/src/components/Activities/Activities.vue b/frontend/src/components/Activities/Activities.vue index 2c8d0341..05c0e317 100644 --- a/frontend/src/components/Activities/Activities.vue +++ b/frontend/src/components/Activities/Activities.vue @@ -238,12 +238,9 @@ + />
- - {{ __('New Email') }} - + /> + /> - - {{ __('New Note') }} - + /> + /> + />
+
diff --git a/frontend/src/components/Activities/AttachmentArea.vue b/frontend/src/components/Activities/AttachmentArea.vue index 7627b5e2..d5ada2aa 100644 --- a/frontend/src/components/Activities/AttachmentArea.vue +++ b/frontend/src/components/Activities/AttachmentArea.vue @@ -38,42 +38,31 @@
- -
- -
-
- -
- -
-
+ + +
diff --git a/frontend/src/components/Activities/AudioPlayer.vue b/frontend/src/components/Activities/AudioPlayer.vue index 71b28b1c..ebb62b94 100644 --- a/frontend/src/components/Activities/AudioPlayer.vue +++ b/frontend/src/components/Activities/AudioPlayer.vue @@ -1,12 +1,12 @@ \ No newline at end of file diff --git a/frontend/src/components/Settings/InviteUserPage.vue b/frontend/src/components/Settings/InviteUserPage.vue index 6402f416..3881cb60 100644 --- a/frontend/src/components/Settings/InviteUserPage.vue +++ b/frontend/src/components/Settings/InviteUserPage.vue @@ -80,19 +80,16 @@
- -
-
-
+
diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index ed5d4a15..4b1f9b90 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -43,6 +43,7 @@