From 31ae5e7688fa766a3c11911584f3274a7de984dd Mon Sep 17 00:00:00 2001 From: Corentin Forler <8860073-cforler_dokos@users.noreply.gitlab.com> Date: Thu, 7 Mar 2024 14:12:51 +0100 Subject: [PATCH] refactor(venue): Add get_uom_infos method --- .../doctype/venue_settings/venue_settings.py | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/erpnext/venue/doctype/venue_settings/venue_settings.py b/erpnext/venue/doctype/venue_settings/venue_settings.py index 1720ba35dea..29468d80fde 100644 --- a/erpnext/venue/doctype/venue_settings/venue_settings.py +++ b/erpnext/venue/doctype/venue_settings/venue_settings.py @@ -1,11 +1,23 @@ # Copyright (c) 2020, Dokos SAS and contributors # For license information, please see license.txt +from dataclasses import dataclass +from typing import Literal + import frappe from frappe import _ from frappe.model.document import Document from frappe.utils import cint +@dataclass +class venue_uom_info_t: + selector: Literal["long", "short"] + target_type: Literal["Minute", "Day", "Week", "Month", "Year"] + value: int | float + from_uom: str + to_uom: str + + class VenueSettings(Document): # begin: auto-generated types # This code is auto-generated. Do not modify anything in this block. @@ -77,15 +89,19 @@ class VenueSettings(Document): conversion.value = value conversion.save(ignore_permissions=True) - def venue_configure_long_uom_conversions(self): - uom_mapping = { - "Month": self.month_uom, - "Week": self.week_uom, - "Day": self.day_uom, + def get_uom_aliases(self): + return { "Minute": self.minute_uom, + "Day": self.day_uom, + "Week": self.week_uom, + "Month": self.month_uom, + "Year": None, } + + def venue_configure_long_uom_conversions(self): + uom_aliases = self.get_uom_aliases() for row in self.venue_long_uoms: - to_uom = uom_mapping[row.target_type] + to_uom = uom_aliases[row.target_type] if to_uom: self.venue_upsert_uom_conversion(row.from_uom, to_uom, row.value) @@ -102,6 +118,31 @@ class VenueSettings(Document): return category + def get_uom_infos(self) -> dict[str, venue_uom_info_t]: + uom_aliases = self.get_uom_aliases() + uom_infos = {} + for long_uom in self.venue_long_uoms: + base_uom = uom_aliases[long_uom.target_type] + if not base_uom: + continue + uom_infos[long_uom.from_uom] = venue_uom_info_t( + selector="long", + target_type=long_uom.target_type, + value=long_uom.value, + from_uom=long_uom.from_uom, + to_uom=base_uom, + ) + for target_type in ("Month", "Week", "Day", "Minute", "Year"): + if uom := getattr(self, f"{target_type.lower()}_uom", None): + uom_infos[uom] = venue_uom_info_t( + selector="short", + target_type=target_type, + value=1, + from_uom=uom, + to_uom=uom, + ) + return uom_infos + @frappe.whitelist() def create_role_profile_fields(): -- GitLab