Merge pull request #1061 from frappe/mergify/bp/main-hotfix/pr-1059
fixes (backport #1059)
This commit is contained in:
commit
b8dde8c41c
@ -139,12 +139,12 @@ class CRMDeal(Document):
|
|||||||
if sla:
|
if sla:
|
||||||
sla.apply(self)
|
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:
|
if self.status == "Won" and not self.closed_date:
|
||||||
self.close_date = frappe.utils.nowdate()
|
self.closed_date = frappe.utils.nowdate()
|
||||||
|
|
||||||
def update_default_probability(self):
|
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
|
self.probability = frappe.db.get_value("CRM Deal Status", self.status, "probability") or 0
|
||||||
|
|
||||||
def validate_forcasting_fields(self):
|
def validate_forcasting_fields(self):
|
||||||
self.update_close_date()
|
self.update_closed_date()
|
||||||
self.update_default_probability()
|
self.update_default_probability()
|
||||||
if frappe.db.get_single_value("FCRM Settings", "enable_forecasting"):
|
if frappe.db.get_single_value("FCRM Settings", "enable_forecasting"):
|
||||||
if not self.deal_value or self.deal_value == 0:
|
if not self.expected_deal_value or self.expected_deal_value == 0:
|
||||||
frappe.throw(_("Deal Value is required."), frappe.MandatoryError)
|
frappe.throw(_("Expected Deal Value is required."), frappe.MandatoryError)
|
||||||
if not self.close_date:
|
if not self.expected_closure_date:
|
||||||
frappe.throw(_("Close Date is required."), frappe.MandatoryError)
|
frappe.throw(_("Expected Closure Date is required."), frappe.MandatoryError)
|
||||||
|
|
||||||
def validate_lost_reason(self):
|
def validate_lost_reason(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -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}"
|
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:
|
frappe.log_error(
|
||||||
data = response.json()
|
f"Failed to fetch exchange rate from {from_currency} to {to_currency} on {date}",
|
||||||
rate = data["rates"].get(to_currency)
|
title="Exchange Rate Fetch Error",
|
||||||
return rate
|
)
|
||||||
else:
|
return 1.0 # Default exchange rate if API call fails or no rate found
|
||||||
frappe.throw(_("Failed to fetch historical exchange rate from external API. Please try again later."))
|
|
||||||
return None
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { reactive } from 'vue'
|
|||||||
|
|
||||||
const documentsCache = {}
|
const documentsCache = {}
|
||||||
const controllersCache = {}
|
const controllersCache = {}
|
||||||
|
const assigneesCache = {}
|
||||||
|
|
||||||
export function useDocument(doctype, docname) {
|
export function useDocument(doctype, docname) {
|
||||||
const { setupScript } = getScript(doctype)
|
const { setupScript } = getScript(doctype)
|
||||||
@ -46,16 +47,20 @@ export function useDocument(doctype, docname) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const assignees = createResource({
|
assigneesCache[doctype] = assigneesCache[doctype] || {}
|
||||||
url: 'crm.api.doc.get_assigned_users',
|
|
||||||
cache: `assignees:${doctype}:${docname}`,
|
if (!assigneesCache[doctype][docname || '']) {
|
||||||
auto: docname ? true : false,
|
assigneesCache[doctype][docname || ''] = createResource({
|
||||||
params: {
|
url: 'crm.api.doc.get_assigned_users',
|
||||||
doctype: doctype,
|
cache: `assignees:${doctype}:${docname}`,
|
||||||
name: docname,
|
auto: docname ? true : false,
|
||||||
},
|
params: {
|
||||||
transform: (data) => parseAssignees(data),
|
doctype: doctype,
|
||||||
})
|
name: docname,
|
||||||
|
},
|
||||||
|
transform: (data) => parseAssignees(data),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async function setupFormScript() {
|
async function setupFormScript() {
|
||||||
if (
|
if (
|
||||||
@ -224,7 +229,7 @@ export function useDocument(doctype, docname) {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
document: documentsCache[doctype][docname || ''],
|
document: documentsCache[doctype][docname || ''],
|
||||||
assignees,
|
assignees: assigneesCache[doctype][docname || ''],
|
||||||
getControllers,
|
getControllers,
|
||||||
triggerOnLoad,
|
triggerOnLoad,
|
||||||
triggerOnBeforeCreate,
|
triggerOnBeforeCreate,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user