Merge pull request #1062 from frappe/main-hotfix
This commit is contained in:
commit
f0b58ba28a
@ -139,12 +139,12 @@ class CRMDeal(Document):
|
||||
if sla:
|
||||
sla.apply(self)
|
||||
|
||||
def update_close_date(self):
|
||||
def update_closed_date(self):
|
||||
"""
|
||||
Update the close date based on the "Won" status.
|
||||
Update the closed date based on the "Won" status.
|
||||
"""
|
||||
if self.status == "Won" and not self.close_date:
|
||||
self.close_date = frappe.utils.nowdate()
|
||||
if self.status == "Won" and not self.closed_date:
|
||||
self.closed_date = frappe.utils.nowdate()
|
||||
|
||||
def update_default_probability(self):
|
||||
"""
|
||||
@ -154,13 +154,13 @@ class CRMDeal(Document):
|
||||
self.probability = frappe.db.get_value("CRM Deal Status", self.status, "probability") or 0
|
||||
|
||||
def validate_forcasting_fields(self):
|
||||
self.update_close_date()
|
||||
self.update_closed_date()
|
||||
self.update_default_probability()
|
||||
if frappe.db.get_single_value("FCRM Settings", "enable_forecasting"):
|
||||
if not self.deal_value or self.deal_value == 0:
|
||||
frappe.throw(_("Deal Value is required."), frappe.MandatoryError)
|
||||
if not self.close_date:
|
||||
frappe.throw(_("Close Date is required."), frappe.MandatoryError)
|
||||
if not self.expected_deal_value or self.expected_deal_value == 0:
|
||||
frappe.throw(_("Expected Deal Value is required."), frappe.MandatoryError)
|
||||
if not self.expected_closure_date:
|
||||
frappe.throw(_("Expected Closure Date is required."), frappe.MandatoryError)
|
||||
|
||||
def validate_lost_reason(self):
|
||||
"""
|
||||
|
||||
2609
crm/locale/ar.po
2609
crm/locale/ar.po
File diff suppressed because it is too large
Load Diff
2633
crm/locale/bs.po
2633
crm/locale/bs.po
File diff suppressed because it is too large
Load Diff
5586
crm/locale/cs.po
Normal file
5586
crm/locale/cs.po
Normal file
File diff suppressed because it is too large
Load Diff
2981
crm/locale/de.po
2981
crm/locale/de.po
File diff suppressed because it is too large
Load Diff
2627
crm/locale/eo.po
2627
crm/locale/eo.po
File diff suppressed because it is too large
Load Diff
2617
crm/locale/es.po
2617
crm/locale/es.po
File diff suppressed because it is too large
Load Diff
2765
crm/locale/fa.po
2765
crm/locale/fa.po
File diff suppressed because it is too large
Load Diff
2619
crm/locale/fr.po
2619
crm/locale/fr.po
File diff suppressed because it is too large
Load Diff
3803
crm/locale/hr.po
3803
crm/locale/hr.po
File diff suppressed because it is too large
Load Diff
2615
crm/locale/hu.po
2615
crm/locale/hu.po
File diff suppressed because it is too large
Load Diff
5586
crm/locale/id.po
Normal file
5586
crm/locale/id.po
Normal file
File diff suppressed because it is too large
Load Diff
5586
crm/locale/it.po
Normal file
5586
crm/locale/it.po
Normal file
File diff suppressed because it is too large
Load Diff
@ -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-07-13 09:38+0000\n"
|
||||
"PO-Revision-Date: 2025-07-13 09:38+0000\n"
|
||||
"POT-Creation-Date: 2025-07-20 09:37+0000\n"
|
||||
"PO-Revision-Date: 2025-07-20 09:37+0000\n"
|
||||
"Last-Translator: shariq@frappe.io\n"
|
||||
"Language-Team: shariq@frappe.io\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -202,6 +202,7 @@ msgstr ""
|
||||
msgid "Activity"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:41
|
||||
#: frontend/src/components/Modals/AddExistingUserModal.vue:53
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
@ -254,6 +255,10 @@ msgstr ""
|
||||
msgid "Add Weekly Holidays"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:4
|
||||
msgid "Add chart"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/FieldLayoutEditor.vue:426
|
||||
msgid "Add column"
|
||||
msgstr ""
|
||||
@ -497,20 +502,69 @@ msgstr ""
|
||||
msgid "Auth Token"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:257
|
||||
#: crm/api/dashboard.py:238
|
||||
msgid "Average deal value of non won/lost deals"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:411
|
||||
msgid "Average deal value of ongoing & won deals"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:311
|
||||
#: crm/api/dashboard.py:354
|
||||
msgid "Average deal value of won deals"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:518
|
||||
msgid "Average time taken from deal creation to deal closure"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:464
|
||||
msgid "Average time taken from lead creation to deal closure"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:255
|
||||
msgid "Avg Deal Value"
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:81
|
||||
msgid "Avg deal value"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:309
|
||||
msgid "Avg Time to Close"
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:78
|
||||
msgid "Avg ongoing deal value"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:87
|
||||
msgid "Avg time to close a deal"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:83
|
||||
msgid "Avg time to close a lead"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:80
|
||||
msgid "Avg won deal value"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:410
|
||||
msgid "Avg. deal value"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:237
|
||||
msgid "Avg. ongoing deal value"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:517
|
||||
msgid "Avg. time to close a deal"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:463
|
||||
msgid "Avg. time to close a lead"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:353
|
||||
msgid "Avg. won deal value"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:26
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:70
|
||||
msgid "Axis chart"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Activities/EmailArea.vue:72
|
||||
@ -581,7 +635,9 @@ msgstr ""
|
||||
msgid "CRM Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:511
|
||||
#. Name of a DocType
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: frontend/src/pages/Dashboard.vue:318
|
||||
msgid "CRM Dashboard"
|
||||
msgstr ""
|
||||
|
||||
@ -795,12 +851,14 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BulkDeleteLinkedDocModal.vue:81
|
||||
#: frontend/src/components/ColumnSettings.vue:132
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:40
|
||||
#: frontend/src/components/DeleteLinkedDocModal.vue:114
|
||||
#: frontend/src/components/Modals/AssignmentModal.vue:9
|
||||
#: frontend/src/components/Modals/LostReasonModal.vue:43
|
||||
#: frontend/src/components/Telephony/TwilioCallUI.vue:77
|
||||
#: frontend/src/components/ViewControls.vue:56
|
||||
#: frontend/src/components/ViewControls.vue:156
|
||||
#: frontend/src/pages/Dashboard.vue:41
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@ -853,6 +911,14 @@ msgstr ""
|
||||
msgid "Change image"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:28
|
||||
msgid "Chart"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:12
|
||||
msgid "Chart Type"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/ConvertToDealModal.vue:43
|
||||
#: frontend/src/components/Modals/ConvertToDealModal.vue:69
|
||||
#: frontend/src/pages/MobileLead.vue:125 frontend/src/pages/MobileLead.vue:152
|
||||
@ -898,18 +964,13 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the close_date (Date) field in DocType 'CRM Deal'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
msgid "Close Date"
|
||||
msgstr ""
|
||||
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.py:163
|
||||
msgid "Close Date is required."
|
||||
msgstr ""
|
||||
|
||||
#. Label of the closed_on (Datetime) field in DocType 'CRM Deal'
|
||||
#. Label of the closed_date (Date) field in DocType 'CRM Deal'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
msgid "Closed On"
|
||||
msgid "Closed Date"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Layouts/AppSidebar.vue:107
|
||||
@ -956,7 +1017,7 @@ msgstr ""
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:422
|
||||
#: crm/api/dashboard.py:884
|
||||
msgid "Common reasons for losing deals"
|
||||
msgstr ""
|
||||
|
||||
@ -1137,8 +1198,8 @@ msgstr ""
|
||||
msgid "Copied to clipboard"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:278 frontend/src/pages/Dashboard.vue:311
|
||||
#: frontend/src/pages/Dashboard.vue:429
|
||||
#: crm/api/dashboard.py:607 crm/api/dashboard.py:736 crm/api/dashboard.py:794
|
||||
#: crm/api/dashboard.py:891
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
@ -1233,16 +1294,11 @@ msgstr ""
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the currency_exchange (Link) field in DocType 'CRM Organization'
|
||||
#: crm/fcrm/doctype/crm_organization/crm_organization.json
|
||||
msgid "Currency Exchange"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Settings/General/GeneralSettings.vue:151
|
||||
msgid "Currency set as {0} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:481
|
||||
#: crm/api/dashboard.py:839
|
||||
msgid "Current pipeline distribution"
|
||||
msgstr ""
|
||||
|
||||
@ -1278,7 +1334,7 @@ msgstr ""
|
||||
msgid "Customize quick filters"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:270
|
||||
#: crm/api/dashboard.py:599
|
||||
msgid "Daily performance of leads, deals, and wins"
|
||||
msgstr ""
|
||||
|
||||
@ -1295,8 +1351,7 @@ msgid "Data Fields"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the date (Date) field in DocType 'CRM Holiday'
|
||||
#: crm/fcrm/doctype/crm_holiday/crm_holiday.json
|
||||
#: frontend/src/pages/Dashboard.vue:272
|
||||
#: crm/api/dashboard.py:601 crm/fcrm/doctype/crm_holiday/crm_holiday.json
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
@ -1327,8 +1382,7 @@ msgid "Deal Statuses"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the deal_value (Currency) field in DocType 'CRM Deal'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json frontend/src/pages/Dashboard.vue:352
|
||||
#: frontend/src/pages/Dashboard.vue:392
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
msgid "Deal Value"
|
||||
msgstr ""
|
||||
|
||||
@ -1336,6 +1390,10 @@ msgstr ""
|
||||
msgid "Deal Value is required."
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:977
|
||||
msgid "Deal generation channel analysis"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Contact.vue:533 frontend/src/pages/MobileContact.vue:531
|
||||
#: frontend/src/pages/MobileOrganization.vue:475
|
||||
#: frontend/src/pages/Organization.vue:484
|
||||
@ -1346,6 +1404,10 @@ msgstr ""
|
||||
msgid "Deal updated"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:1030 crm/api/dashboard.py:1087
|
||||
msgid "Deal value"
|
||||
msgstr ""
|
||||
|
||||
#. Label of a shortcut in the Frappe CRM Workspace
|
||||
#: crm/fcrm/workspace/frappe_crm/frappe_crm.json
|
||||
#: frontend/src/pages/Deal.vue:532 frontend/src/pages/MobileContact.vue:291
|
||||
@ -1354,16 +1416,29 @@ msgstr ""
|
||||
msgid "Deals"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:341
|
||||
msgid "Deals by Salesperson"
|
||||
#: crm/api/dashboard.py:788
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:97
|
||||
msgid "Deals by ongoing & won stage"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:480
|
||||
msgid "Deals by Stage"
|
||||
#: crm/api/dashboard.py:1076
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:100
|
||||
msgid "Deals by salesperson"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:381
|
||||
msgid "Deals by Territory"
|
||||
#: crm/api/dashboard.py:976
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:107
|
||||
msgid "Deals by source"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:838
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:105
|
||||
msgid "Deals by stage"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:1019
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:99
|
||||
msgid "Deals by territory"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Settings/EmailTemplate/EditEmailTemplate.vue:115
|
||||
@ -1598,6 +1673,11 @@ msgstr ""
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:33
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:71
|
||||
msgid "Donut chart"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Activities/AudioPlayer.vue:166
|
||||
#: frontend/src/components/ViewControls.vue:254
|
||||
msgid "Download"
|
||||
@ -1687,6 +1767,7 @@ msgstr ""
|
||||
#: frontend/src/components/FieldLayoutEditor.vue:345
|
||||
#: frontend/src/components/ListBulkActions.vue:170
|
||||
#: frontend/src/components/ViewControls.vue:1131
|
||||
#: frontend/src/pages/Dashboard.vue:19
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
@ -1920,7 +2001,9 @@ msgid "Excel"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the exchange_rate (Float) field in DocType 'CRM Deal'
|
||||
#. Label of the exchange_rate (Float) field in DocType 'CRM Organization'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
#: crm/fcrm/doctype/crm_organization/crm_organization.json
|
||||
msgid "Exchange Rate"
|
||||
msgstr ""
|
||||
|
||||
@ -1965,6 +2048,16 @@ msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the expected_closure_date (Date) field in DocType 'CRM Deal'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
msgid "Expected Closure Date"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the expected_deal_value (Currency) field in DocType 'CRM Deal'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
msgid "Expected Deal Value"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'CRM Invitation'
|
||||
#: crm/fcrm/doctype/crm_invitation/crm_invitation.json
|
||||
msgid "Expired"
|
||||
@ -2145,6 +2238,11 @@ msgstr ""
|
||||
msgid "For"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:666
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:95
|
||||
msgid "Forecasted revenue"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Settings/General/GeneralSettings.vue:128
|
||||
msgid "Forecasting disabled successfully"
|
||||
msgstr ""
|
||||
@ -2192,6 +2290,11 @@ msgstr ""
|
||||
msgid "From Date"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the from_type (Data) field in DocType 'CRM Status Change Log'
|
||||
#: crm/fcrm/doctype/crm_status_change_log/crm_status_change_log.json
|
||||
msgid "From Type"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the from_user (Link) field in DocType 'CRM Notification'
|
||||
#: crm/fcrm/doctype/crm_notification/crm_notification.json
|
||||
msgid "From User"
|
||||
@ -2211,8 +2314,9 @@ msgstr ""
|
||||
msgid "Full Name"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:303
|
||||
msgid "Funnel Conversion"
|
||||
#: crm/api/dashboard.py:728
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:96
|
||||
msgid "Funnel conversion"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the gender (Link) field in DocType 'CRM Contacts'
|
||||
@ -2229,7 +2333,7 @@ msgstr ""
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:382
|
||||
#: crm/api/dashboard.py:1020
|
||||
msgid "Geographic distribution of deals and revenue"
|
||||
msgstr ""
|
||||
|
||||
@ -2457,6 +2561,10 @@ msgstr ""
|
||||
msgid "Invalid Exotel Number"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:73
|
||||
msgid "Invalid chart name"
|
||||
msgstr ""
|
||||
|
||||
#: crm/fcrm/doctype/crm_exotel_settings/crm_exotel_settings.py:25
|
||||
msgid "Invalid credentials"
|
||||
msgstr ""
|
||||
@ -2543,7 +2651,7 @@ msgstr ""
|
||||
#. Description of the 'Enable Forecasting' (Check) field in DocType 'FCRM
|
||||
#. Settings'
|
||||
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
|
||||
msgid "It will make deal's \"Close Date\" & \"Deal Value\" mandatory to get accurate forecasting insights"
|
||||
msgid "It will make deal's \"Expected Closure Date\" & \"Expected Deal Value\" mandatory to get accurate forecasting insights"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the json (JSON) field in DocType 'CRM Global Settings'
|
||||
@ -2645,7 +2753,9 @@ msgstr ""
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the layout (Code) field in DocType 'CRM Dashboard'
|
||||
#. Label of the layout (Code) field in DocType 'CRM Fields Layout'
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
@ -2690,11 +2800,11 @@ msgstr ""
|
||||
msgid "Lead Statuses"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:503
|
||||
#: crm/api/dashboard.py:935
|
||||
msgid "Lead generation channel analysis"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:304
|
||||
#: crm/api/dashboard.py:729
|
||||
msgid "Lead to deal conversion pipeline"
|
||||
msgstr ""
|
||||
|
||||
@ -2708,8 +2818,9 @@ msgstr ""
|
||||
msgid "Leads"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:502
|
||||
msgid "Leads by Source"
|
||||
#: crm/api/dashboard.py:934
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:106
|
||||
msgid "Leads by source"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the lft (Int) field in DocType 'CRM Territory'
|
||||
@ -2786,8 +2897,9 @@ msgstr ""
|
||||
msgid "Logo"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:421
|
||||
msgid "Lost Deal Reasons"
|
||||
#. Option for the 'Type' (Select) field in DocType 'CRM Deal Status'
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
msgid "Lost"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the lost_notes (Text) field in DocType 'CRM Deal'
|
||||
@ -2802,6 +2914,11 @@ msgstr ""
|
||||
msgid "Lost Reason"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:883
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:98
|
||||
msgid "Lost deal reasons"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/LostReasonModal.vue:27
|
||||
msgid "Lost notes"
|
||||
msgstr ""
|
||||
@ -2976,7 +3093,7 @@ msgstr ""
|
||||
msgid "Monday"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:450
|
||||
#: crm/api/dashboard.py:669
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
@ -3000,8 +3117,10 @@ msgstr ""
|
||||
msgid "My Open Deals"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the title (Data) field in DocType 'CRM Dashboard'
|
||||
#. Label of the name1 (Data) field in DocType 'CRM Dropdown Item'
|
||||
#. Label of the brand_name (Data) field in DocType 'FCRM Settings'
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_dropdown_item/crm_dropdown_item.json
|
||||
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
|
||||
#: frontend/src/components/Settings/EmailTemplate/EditEmailTemplate.vue:42
|
||||
@ -3361,8 +3480,17 @@ msgstr ""
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:349 frontend/src/pages/Dashboard.vue:389
|
||||
msgid "Number of Deals"
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:19
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:69
|
||||
msgid "Number chart"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:1027 crm/api/dashboard.py:1084
|
||||
msgid "Number of deals"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:1077
|
||||
msgid "Number of deals and total value per salesperson"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the old_parent (Link) field in DocType 'CRM Territory'
|
||||
@ -3370,6 +3498,21 @@ msgstr ""
|
||||
msgid "Old Parent"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'CRM Deal Status'
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
msgid "On Hold"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'CRM Deal Status'
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
msgid "Ongoing"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:181
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:77
|
||||
msgid "Ongoing deals"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/utils/index.js:451
|
||||
msgid "Only image files are allowed"
|
||||
msgstr ""
|
||||
@ -3379,6 +3522,11 @@ msgstr ""
|
||||
msgid "Only one {0} can be set as primary."
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'CRM Deal Status'
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/NoteModal.vue:18
|
||||
#: frontend/src/components/Modals/TaskModal.vue:25
|
||||
msgid "Open Deal"
|
||||
@ -3529,7 +3677,7 @@ msgstr ""
|
||||
msgid "Pending Invites"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:35
|
||||
#: frontend/src/pages/Dashboard.vue:79
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
@ -3658,6 +3806,8 @@ msgstr ""
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the private (Check) field in DocType 'CRM Dashboard'
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: frontend/src/components/FilesUploader/FilesUploaderArea.vue:89
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
@ -3704,7 +3854,7 @@ msgstr ""
|
||||
msgid "Profile updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:448
|
||||
#: crm/api/dashboard.py:667
|
||||
msgid "Projected vs actual revenue based on deal probability"
|
||||
msgstr ""
|
||||
|
||||
@ -3759,7 +3909,7 @@ msgstr ""
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:424
|
||||
#: crm/api/dashboard.py:886
|
||||
msgid "Reason"
|
||||
msgstr ""
|
||||
|
||||
@ -3810,6 +3960,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/ViewControls.vue:25
|
||||
#: frontend/src/components/ViewControls.vue:160
|
||||
#: frontend/src/pages/Dashboard.vue:10
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
@ -3889,6 +4040,10 @@ msgstr ""
|
||||
msgid "Reset to Default"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:34
|
||||
msgid "Reset to default"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the response_by (Datetime) field in DocType 'CRM Deal'
|
||||
#. Label of the response_by (Datetime) field in DocType 'CRM Lead'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
@ -3925,14 +4080,10 @@ msgstr ""
|
||||
msgid "Retake"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:456
|
||||
#: crm/api/dashboard.py:675
|
||||
msgid "Revenue"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:447
|
||||
msgid "Revenue Forecast"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Settings/EmailTemplate/EditEmailTemplate.vue:84
|
||||
#: frontend/src/components/Settings/EmailTemplate/NewEmailTemplate.vue:84
|
||||
msgid "Rich Text"
|
||||
@ -4013,6 +4164,7 @@ msgstr ""
|
||||
#. Option for the 'Role' (Select) field in DocType 'CRM Invitation'
|
||||
#: crm/fcrm/doctype/crm_call_log/crm_call_log.json
|
||||
#: crm/fcrm/doctype/crm_communication_status/crm_communication_status.json
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
#: crm/fcrm/doctype/crm_exotel_settings/crm_exotel_settings.json
|
||||
@ -4038,14 +4190,11 @@ msgstr ""
|
||||
msgid "Sales Manager"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:269
|
||||
msgid "Sales Trend"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a role
|
||||
#. Option for the 'Role' (Select) field in DocType 'CRM Invitation'
|
||||
#: crm/fcrm/doctype/crm_call_log/crm_call_log.json
|
||||
#: crm/fcrm/doctype/crm_communication_status/crm_communication_status.json
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
|
||||
@ -4069,11 +4218,19 @@ msgstr ""
|
||||
#: frontend/src/components/Settings/Users.vue:186
|
||||
#: frontend/src/components/Settings/Users.vue:268
|
||||
#: frontend/src/components/Settings/Users.vue:271
|
||||
#: frontend/src/pages/Dashboard.vue:62
|
||||
msgid "Sales User"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:344
|
||||
#: crm/api/dashboard.py:598
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:94
|
||||
msgid "Sales trend"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:106
|
||||
msgid "Sales user"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:1079
|
||||
msgid "Salesperson"
|
||||
msgstr ""
|
||||
|
||||
@ -4103,6 +4260,7 @@ msgstr ""
|
||||
#: frontend/src/components/Settings/General/GeneralSettings.vue:145
|
||||
#: frontend/src/components/Telephony/ExotelCallUI.vue:231
|
||||
#: frontend/src/components/ViewControls.vue:123
|
||||
#: frontend/src/pages/Dashboard.vue:45
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@ -4141,7 +4299,7 @@ msgstr ""
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:15
|
||||
#: frontend/src/pages/Dashboard.vue:59
|
||||
msgid "Select Range"
|
||||
msgstr ""
|
||||
|
||||
@ -4336,7 +4494,12 @@ msgstr ""
|
||||
msgid "Source Name"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Dashboard.vue:306
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:68
|
||||
#: frontend/src/components/Dashboard/DashboardItem.vue:16
|
||||
msgid "Spacer"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:731 crm/api/dashboard.py:790
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
@ -4446,6 +4609,7 @@ msgstr ""
|
||||
|
||||
#. Name of a role
|
||||
#. Option for the 'Role' (Select) field in DocType 'CRM Invitation'
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_exotel_settings/crm_exotel_settings.json
|
||||
#: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json
|
||||
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
|
||||
@ -4533,10 +4697,9 @@ msgstr ""
|
||||
#. Label of the territory (Link) field in DocType 'CRM Deal'
|
||||
#. Label of the territory (Link) field in DocType 'CRM Lead'
|
||||
#. Label of the territory (Link) field in DocType 'CRM Organization'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
#: crm/api/dashboard.py:1022 crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
#: crm/fcrm/doctype/crm_lead/crm_lead.json
|
||||
#: crm/fcrm/doctype/crm_organization/crm_organization.json
|
||||
#: frontend/src/pages/Dashboard.vue:384
|
||||
msgid "Territory"
|
||||
msgstr ""
|
||||
|
||||
@ -4559,6 +4722,12 @@ msgstr ""
|
||||
msgid "The rate used to convert the deal’s currency to your crm's base currency (set in CRM Settings). It is set once when the currency is first added and doesn't change automatically."
|
||||
msgstr ""
|
||||
|
||||
#. Description of the 'Exchange Rate' (Float) field in DocType 'CRM
|
||||
#. Organization'
|
||||
#: crm/fcrm/doctype/crm_organization/crm_organization.json
|
||||
msgid "The rate used to convert the organization’s currency to your crm's base currency (set in CRM Settings). It is set once when the currency is first added and doesn't change automatically."
|
||||
msgstr ""
|
||||
|
||||
#: crm/fcrm/doctype/crm_service_level_agreement/crm_service_level_agreement.js:14
|
||||
msgid "There can only be one default priority in Priorities table"
|
||||
msgstr ""
|
||||
@ -4641,6 +4810,11 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the to_type (Data) field in DocType 'CRM Status Change Log'
|
||||
#: crm/fcrm/doctype/crm_status_change_log/crm_status_change_log.json
|
||||
msgid "To Type"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the to_user (Link) field in DocType 'CRM Notification'
|
||||
#: crm/fcrm/doctype/crm_notification/crm_notification.json
|
||||
msgid "To User"
|
||||
@ -4679,19 +4853,11 @@ msgstr ""
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:144
|
||||
msgid "Total Deals"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_holidays (Int) field in DocType 'CRM Holiday List'
|
||||
#: crm/fcrm/doctype/crm_holiday_list/crm_holiday_list.json
|
||||
msgid "Total Holidays"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:86
|
||||
msgid "Total Leads"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the 'Net Total' (Currency) field in DocType 'CRM Deal'
|
||||
#. Description of the 'Net Total' (Currency) field in DocType 'CRM Lead'
|
||||
#: crm/fcrm/doctype/crm_deal/crm_deal.json
|
||||
@ -4699,16 +4865,21 @@ msgstr ""
|
||||
msgid "Total after discount"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:149
|
||||
msgid "Total number of deals"
|
||||
#: crm/api/dashboard.py:123
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:76
|
||||
msgid "Total leads"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:91
|
||||
#: crm/api/dashboard.py:124
|
||||
msgid "Total number of leads"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:207
|
||||
msgid "Total number of won deals"
|
||||
#: crm/api/dashboard.py:182
|
||||
msgid "Total number of non won/lost deals"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:297
|
||||
msgid "Total number of won deals based on its closure date"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Weekly Off' (Select) field in DocType 'CRM Holiday List'
|
||||
@ -4754,12 +4925,14 @@ msgid "Twilio settings updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the type (Select) field in DocType 'CRM Call Log'
|
||||
#. Label of the type (Select) field in DocType 'CRM Deal Status'
|
||||
#. Label of the type (Select) field in DocType 'CRM Dropdown Item'
|
||||
#. Label of the type (Select) field in DocType 'CRM Fields Layout'
|
||||
#. Label of the type (Select) field in DocType 'CRM Global Settings'
|
||||
#. Label of the type (Select) field in DocType 'CRM Notification'
|
||||
#. Label of the type (Select) field in DocType 'CRM View Settings'
|
||||
#: crm/fcrm/doctype/crm_call_log/crm_call_log.json
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
#: crm/fcrm/doctype/crm_dropdown_item/crm_dropdown_item.json
|
||||
#: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json
|
||||
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
|
||||
@ -4885,8 +5058,10 @@ msgstr ""
|
||||
msgid "Upload image"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the user (Link) field in DocType 'CRM Dashboard'
|
||||
#. Label of the user (Link) field in DocType 'CRM Telephony Agent'
|
||||
#. Label of the user (Link) field in DocType 'CRM View Settings'
|
||||
#: crm/fcrm/doctype/crm_dashboard/crm_dashboard.json
|
||||
#: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json
|
||||
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
|
||||
msgid "User"
|
||||
@ -4996,8 +5171,14 @@ msgstr ""
|
||||
msgid "Width can be in number, pixel or rem (eg. 3, 30px, 10rem)"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:202
|
||||
msgid "Won Deals"
|
||||
#. Option for the 'Type' (Select) field in DocType 'CRM Deal Status'
|
||||
#: crm/fcrm/doctype/crm_deal_status/crm_deal_status.json
|
||||
msgid "Won"
|
||||
msgstr ""
|
||||
|
||||
#: crm/api/dashboard.py:296
|
||||
#: frontend/src/components/Dashboard/AddChartModal.vue:79
|
||||
msgid "Won deals"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the workday (Select) field in DocType 'CRM Service Day'
|
||||
|
||||
5586
crm/locale/nl.po
Normal file
5586
crm/locale/nl.po
Normal file
File diff suppressed because it is too large
Load Diff
2695
crm/locale/pl.po
2695
crm/locale/pl.po
File diff suppressed because it is too large
Load Diff
3253
crm/locale/pt.po
3253
crm/locale/pt.po
File diff suppressed because it is too large
Load Diff
5586
crm/locale/pt_BR.po
Normal file
5586
crm/locale/pt_BR.po
Normal file
File diff suppressed because it is too large
Load Diff
2651
crm/locale/ru.po
2651
crm/locale/ru.po
File diff suppressed because it is too large
Load Diff
5586
crm/locale/sr.po
Normal file
5586
crm/locale/sr.po
Normal file
File diff suppressed because it is too large
Load Diff
5586
crm/locale/sr_CS.po
Normal file
5586
crm/locale/sr_CS.po
Normal file
File diff suppressed because it is too large
Load Diff
2675
crm/locale/sv.po
2675
crm/locale/sv.po
File diff suppressed because it is too large
Load Diff
3003
crm/locale/th.po
3003
crm/locale/th.po
File diff suppressed because it is too large
Load Diff
2611
crm/locale/tr.po
2611
crm/locale/tr.po
File diff suppressed because it is too large
Load Diff
5586
crm/locale/vi.po
Normal file
5586
crm/locale/vi.po
Normal file
File diff suppressed because it is too large
Load Diff
3649
crm/locale/zh.po
3649
crm/locale/zh.po
File diff suppressed because it is too large
Load Diff
@ -275,12 +275,16 @@ def get_exchange_rate(from_currency, to_currency, date=None):
|
||||
|
||||
url = f"https://api.frankfurter.app/{date}?from={from_currency}&to={to_currency}"
|
||||
|
||||
response = requests.get(url)
|
||||
for _i in range(3):
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
rate = data["rates"].get(to_currency)
|
||||
if rate:
|
||||
return rate
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
rate = data["rates"].get(to_currency)
|
||||
return rate
|
||||
else:
|
||||
frappe.throw(_("Failed to fetch historical exchange rate from external API. Please try again later."))
|
||||
return None
|
||||
frappe.log_error(
|
||||
f"Failed to fetch exchange rate from {from_currency} to {to_currency} on {date}",
|
||||
title="Exchange Rate Fetch Error",
|
||||
)
|
||||
return 1.0 # Default exchange rate if API call fails or no rate found
|
||||
|
||||
@ -1,3 +1,8 @@
|
||||
files:
|
||||
- source: /crm/locale/main.pot
|
||||
translation: /crm/locale/%two_letters_code%.po
|
||||
pull_request_title: "chore: sync translations from crowdin"
|
||||
pull_request_labels:
|
||||
- translation
|
||||
commit_message: "chore: %language% translations"
|
||||
append_commit_message: false
|
||||
@ -5,6 +5,7 @@ import { reactive } from 'vue'
|
||||
|
||||
const documentsCache = {}
|
||||
const controllersCache = {}
|
||||
const assigneesCache = {}
|
||||
|
||||
export function useDocument(doctype, docname) {
|
||||
const { setupScript } = getScript(doctype)
|
||||
@ -46,16 +47,20 @@ export function useDocument(doctype, docname) {
|
||||
}
|
||||
}
|
||||
|
||||
const assignees = createResource({
|
||||
url: 'crm.api.doc.get_assigned_users',
|
||||
cache: `assignees:${doctype}:${docname}`,
|
||||
auto: docname ? true : false,
|
||||
params: {
|
||||
doctype: doctype,
|
||||
name: docname,
|
||||
},
|
||||
transform: (data) => parseAssignees(data),
|
||||
})
|
||||
assigneesCache[doctype] = assigneesCache[doctype] || {}
|
||||
|
||||
if (!assigneesCache[doctype][docname || '']) {
|
||||
assigneesCache[doctype][docname || ''] = createResource({
|
||||
url: 'crm.api.doc.get_assigned_users',
|
||||
cache: `assignees:${doctype}:${docname}`,
|
||||
auto: docname ? true : false,
|
||||
params: {
|
||||
doctype: doctype,
|
||||
name: docname,
|
||||
},
|
||||
transform: (data) => parseAssignees(data),
|
||||
})
|
||||
}
|
||||
|
||||
async function setupFormScript() {
|
||||
if (
|
||||
@ -224,7 +229,7 @@ export function useDocument(doctype, docname) {
|
||||
|
||||
return {
|
||||
document: documentsCache[doctype][docname || ''],
|
||||
assignees,
|
||||
assignees: assigneesCache[doctype][docname || ''],
|
||||
getControllers,
|
||||
triggerOnLoad,
|
||||
triggerOnBeforeCreate,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user