fix: Multiple subscription fixes (#39005)

fix: Multiple subscription fixes (#39005)

(cherry picked from commit 3b4b2275de7a49ba48b09f7229bee45f1e890ac9)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
This commit is contained in:
mergify[bot] 2023-12-29 12:52:41 +05:30 committed by GitHub
parent 2e919344df
commit 5158884dc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 10 deletions

View File

@ -148,13 +148,13 @@
{ {
"fieldname": "additional_discount_percentage", "fieldname": "additional_discount_percentage",
"fieldtype": "Percent", "fieldtype": "Percent",
"label": "Additional DIscount Percentage" "label": "Additional Discount Percentage"
}, },
{ {
"collapsible": 1, "collapsible": 1,
"fieldname": "additional_discount_amount", "fieldname": "additional_discount_amount",
"fieldtype": "Currency", "fieldtype": "Currency",
"label": "Additional DIscount Amount" "label": "Additional Discount Amount"
}, },
{ {
"collapsible": 1, "collapsible": 1,
@ -267,7 +267,7 @@
"link_fieldname": "subscription" "link_fieldname": "subscription"
} }
], ],
"modified": "2023-09-18 17:48:21.900252", "modified": "2023-12-28 17:20:42.687789",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Subscription", "name": "Subscription",

View File

@ -356,18 +356,20 @@ class Subscription(Document):
self, self,
from_date: Optional[Union[str, datetime.date]] = None, from_date: Optional[Union[str, datetime.date]] = None,
to_date: Optional[Union[str, datetime.date]] = None, to_date: Optional[Union[str, datetime.date]] = None,
posting_date: Optional[Union[str, datetime.date]] = None,
) -> Document: ) -> Document:
""" """
Creates a `Invoice` for the `Subscription`, updates `self.invoices` and Creates a `Invoice` for the `Subscription`, updates `self.invoices` and
saves the `Subscription`. saves the `Subscription`.
Backwards compatibility Backwards compatibility
""" """
return self.create_invoice(from_date=from_date, to_date=to_date) return self.create_invoice(from_date=from_date, to_date=to_date, posting_date=posting_date)
def create_invoice( def create_invoice(
self, self,
from_date: Optional[Union[str, datetime.date]] = None, from_date: Optional[Union[str, datetime.date]] = None,
to_date: Optional[Union[str, datetime.date]] = None, to_date: Optional[Union[str, datetime.date]] = None,
posting_date: Optional[Union[str, datetime.date]] = None,
) -> Document: ) -> Document:
""" """
Creates a `Invoice`, submits it and returns it Creates a `Invoice`, submits it and returns it
@ -385,11 +387,13 @@ class Subscription(Document):
invoice = frappe.new_doc(self.invoice_document_type) invoice = frappe.new_doc(self.invoice_document_type)
invoice.company = company invoice.company = company
invoice.set_posting_time = 1 invoice.set_posting_time = 1
invoice.posting_date = (
self.current_invoice_start if self.generate_invoice_at == "Beginning of the current subscription period":
if self.generate_invoice_at == "Beginning of the current subscription period" invoice.posting_date = self.current_invoice_start
else self.current_invoice_end elif self.generate_invoice_at == "Days before the current subscription period":
) invoice.posting_date = posting_date or self.current_invoice_start
else:
invoice.posting_date = self.current_invoice_end
invoice.cost_center = self.cost_center invoice.cost_center = self.cost_center
@ -413,6 +417,7 @@ class Subscription(Document):
# Subscription is better suited for service items. I won't update `update_stock` # Subscription is better suited for service items. I won't update `update_stock`
# for that reason # for that reason
items_list = self.get_items_from_plans(self.plans, is_prorate()) items_list = self.get_items_from_plans(self.plans, is_prorate())
for item in items_list: for item in items_list:
item["cost_center"] = self.cost_center item["cost_center"] = self.cost_center
invoice.append("items", item) invoice.append("items", item)
@ -556,7 +561,7 @@ class Subscription(Document):
if not self.is_current_invoice_generated( if not self.is_current_invoice_generated(
self.current_invoice_start, self.current_invoice_end self.current_invoice_start, self.current_invoice_end
) and self.can_generate_new_invoice(posting_date): ) and self.can_generate_new_invoice(posting_date):
self.generate_invoice() self.generate_invoice(posting_date=posting_date)
self.update_subscription_period(add_days(self.current_invoice_end, 1)) self.update_subscription_period(add_days(self.current_invoice_end, 1))
if self.cancel_at_period_end and ( if self.cancel_at_period_end and (

View File

@ -225,6 +225,11 @@ class AccountsController(TransactionBase):
apply_pricing_rule_on_transaction(self) apply_pricing_rule_on_transaction(self)
self.set_total_in_words() self.set_total_in_words()
self.set_default_letter_head()
def set_default_letter_head(self):
if hasattr(self, "letter_head") and not self.letter_head:
self.letter_head = frappe.db.get_value("Company", self.company, "default_letter_head")
def init_internal_values(self): def init_internal_values(self):
# init all the internal values as 0 on sa # init all the internal values as 0 on sa