From 36bd74ab2b5fe2d84daa2266714e3b6fc09a57f9 Mon Sep 17 00:00:00 2001 From: HenningWendtland <156231187+HenningWendtland@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:44:12 +0200 Subject: [PATCH 1/6] feat: display virtual field "current rate" --- .../simple_subscription.json | 21 ++++++-- .../simple_subscription_item.json | 52 +++++++++++++++---- .../simple_subscription_item.py | 48 ++++++++++++++++- 3 files changed, 105 insertions(+), 16 deletions(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription/simple_subscription.json b/simple_subscription/simple_subscription/doctype/simple_subscription/simple_subscription.json index db7baab..7fb27ab 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription/simple_subscription.json +++ b/simple_subscription/simple_subscription/doctype/simple_subscription/simple_subscription.json @@ -9,6 +9,7 @@ "company", "customer", "customer_name", + "currency", "column_break_3", "start_date", "period_type", @@ -27,7 +28,8 @@ "fieldtype": "Link", "in_standard_filter": 1, "label": "Customer", - "options": "Customer" + "options": "Customer", + "reqd": 1 }, { "fieldname": "items", @@ -90,13 +92,15 @@ "description": "Invoices will be generated for periods starting on or after this date.", "fieldname": "start_date", "fieldtype": "Date", - "label": "Start Date" + "label": "Start Date", + "reqd": 1 }, { "fieldname": "company", "fieldtype": "Link", "label": "Company", - "options": "Company" + "options": "Company", + "reqd": 1 }, { "default": "after end of period", @@ -111,6 +115,15 @@ "fieldtype": "Select", "label": "Billing Period is based on", "options": "calendar months\nstart date" + }, + { + "fetch_from": "company.default_currency", + "fetch_if_empty": 1, + "fieldname": "currency", + "fieldtype": "Link", + "label": "Currency", + "options": "Currency", + "reqd": 1 } ], "is_submittable": 1, @@ -120,7 +133,7 @@ "link_fieldname": "simple_subscription" } ], - "modified": "2024-08-20 20:19:15.055024", + "modified": "2024-09-12 12:54:00.717315", "modified_by": "Administrator", "module": "Simple Subscription", "name": "Simple Subscription", diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.json b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.json index a1b9035..28774ec 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.json +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.json @@ -7,32 +7,64 @@ "engine": "InnoDB", "field_order": [ "item", - "qty" + "item_name", + "qty", + "current_rate", + "current_description" ], "fields": [ { - "fieldname": "item", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Item", - "options": "Item" - }, - { + "columns": 2, "fieldname": "qty", "fieldtype": "Float", "in_list_view": 1, "label": "Qty" + }, + { + "columns": 2, + "fieldname": "current_rate", + "fieldtype": "Currency", + "in_list_view": 1, + "in_standard_filter": 1, + "is_virtual": 1, + "label": "Current Rate", + "options": "currency" + }, + { + "fieldname": "current_description", + "fieldtype": "Text Editor", + "is_virtual": 1, + "label": "Current Description", + "read_only": 1 + }, + { + "columns": 4, + "fieldname": "item_name", + "fieldtype": "Data", + "is_virtual": 1, + "label": "Item Name", + "read_only": 1 + }, + { + "columns": 2, + "fieldname": "item", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item", + "options": "Item", + "reqd": 1 } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-02-04 16:18:56.506335", + "modified": "2024-09-12 18:37:52.687442", "modified_by": "Administrator", "module": "Simple Subscription", "name": "Simple Subscription Item", "owner": "Administrator", "permissions": [], "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "states": [] } \ No newline at end of file diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 09567d7..8325384 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -1,8 +1,52 @@ # Copyright (c) 2022, ALYF GmbH and contributors # For license information, please see license.txt -# import frappe +import frappe from frappe.model.document import Document +from erpnext.stock.get_item_details import get_item_details +from erpnext.accounts.party import get_party_details +from frappe.utils import today + class SimpleSubscriptionItem(Document): - pass + @property + def current_rate(self): + parent = frappe.get_doc("Simple Subscription", self.parent) + + party_details = get_party_details( + party=parent.customer, + account=None, + party_type="Customer", + company=parent.company, + posting_date=today(), + currency=parent.currency, + doctype="Sales Invoice", + fetch_payment_terms_template=False, + ) + + item_details = get_item_details( + { + "item_code": self.item, + "company": parent.company, + "doctype": "Sales Invoice", + "currency": parent.currency, + "price_list_currency": parent.currency, + "qty": self.qty, + "plc_conversion_rate": 1, + "conversion_rate": 1, + "customer": parent.customer, + "transaction_date": today(), + "price_list": party_details.selling_price_list, + } + ) + return item_details.price_list_rate - (item_details.discount_amount or 0) + + @property + def current_description(self): + item = frappe.get_doc("Item", self.item) + return item.description + + @property + def item_name(self): + item = frappe.get_doc("Item", self.item) + return item.item_name From 9f0c110af1bf7e0affadb298b93c5c4ca4c15285 Mon Sep 17 00:00:00 2001 From: Henning Wendtland <156231187+HenningWendtland@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:26:54 +0200 Subject: [PATCH 2/6] Update simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> --- .../simple_subscription_item/simple_subscription_item.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 8325384..8b5c1cd 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -43,8 +43,7 @@ def current_rate(self): @property def current_description(self): - item = frappe.get_doc("Item", self.item) - return item.description + return frappe.db.get_value("Item", self.item, "description") @property def item_name(self): From 392126357d885949c5bf0ec37441894840c36326 Mon Sep 17 00:00:00 2001 From: Henning Wendtland <156231187+HenningWendtland@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:27:45 +0200 Subject: [PATCH 3/6] Update simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> --- .../simple_subscription_item/simple_subscription_item.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 8b5c1cd..47da803 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -47,5 +47,4 @@ def current_description(self): @property def item_name(self): - item = frappe.get_doc("Item", self.item) - return item.item_name + return frappe.db.get_value("Item", self.item, "item_name") From 01689c2c6e9cb1a77c9047c97abe75a05b0cf45f Mon Sep 17 00:00:00 2001 From: Henning Wendtland <156231187+HenningWendtland@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:37:35 +0200 Subject: [PATCH 4/6] Update simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> --- .../simple_subscription_item.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 47da803..530f6fd 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -12,6 +12,9 @@ class SimpleSubscriptionItem(Document): @property def current_rate(self): parent = frappe.get_doc("Simple Subscription", self.parent) + currency = parent.currency or frappe.get_cached_value( + "Company", parent.company, "default_currency" + ) party_details = get_party_details( party=parent.customer, @@ -19,24 +22,28 @@ def current_rate(self): party_type="Customer", company=parent.company, posting_date=today(), - currency=parent.currency, + currency=currency, doctype="Sales Invoice", fetch_payment_terms_template=False, ) + price_list = party_details.selling_price_list or frappe.db.get_value( + "Price List", {"selling": 1, "currency": currency, "enabled": 1} + ) + item_details = get_item_details( { "item_code": self.item, "company": parent.company, "doctype": "Sales Invoice", - "currency": parent.currency, - "price_list_currency": parent.currency, + "currency": currency, + "price_list_currency": currency, "qty": self.qty, "plc_conversion_rate": 1, "conversion_rate": 1, "customer": parent.customer, "transaction_date": today(), - "price_list": party_details.selling_price_list, + "price_list": price_list, } ) return item_details.price_list_rate - (item_details.discount_amount or 0) From 0c477ae55270ac94cea11a7c088707d38f1af484 Mon Sep 17 00:00:00 2001 From: HenningWendtland <156231187+HenningWendtland@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:58:41 +0200 Subject: [PATCH 5/6] fix: add default price list --- .../simple_subscription_item/simple_subscription_item.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 530f6fd..39b23e2 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -27,7 +27,8 @@ def current_rate(self): fetch_payment_terms_template=False, ) - price_list = party_details.selling_price_list or frappe.db.get_value( + price_list = party_details.selling_price_list or frappe.db.get_single_value( + "Selling Settings", "selling_price_list") or frappe.db.get_value( "Price List", {"selling": 1, "currency": currency, "enabled": 1} ) From 626734af0eea31b2ccac72d107325742d7350979 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:20:56 +0200 Subject: [PATCH 6/6] style: format python file --- .../simple_subscription_item/simple_subscription_item.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py index 39b23e2..916f45e 100644 --- a/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py +++ b/simple_subscription/simple_subscription/doctype/simple_subscription_item/simple_subscription_item.py @@ -27,9 +27,12 @@ def current_rate(self): fetch_payment_terms_template=False, ) - price_list = party_details.selling_price_list or frappe.db.get_single_value( - "Selling Settings", "selling_price_list") or frappe.db.get_value( - "Price List", {"selling": 1, "currency": currency, "enabled": 1} + price_list = ( + party_details.selling_price_list + or frappe.db.get_single_value("Selling Settings", "selling_price_list") + or frappe.db.get_value( + "Price List", {"selling": 1, "currency": currency, "enabled": 1} + ) ) item_details = get_item_details(