diff --git a/subscription_package/models/subscription_package.py b/subscription_package/models/subscription_package.py index c1b412841..716d5f7c6 100644 --- a/subscription_package/models/subscription_package.py +++ b/subscription_package/models/subscription_package.py @@ -52,6 +52,10 @@ class SubscriptionPackageProductLine(models.Model): unit_price = fields.Float(string='Unit Price', store=True, readonly=False, related='product_id.list_price') discount = fields.Float(string="Discount (%)") + tax_id = fields.Many2many('account.tax', string="Taxes",ondelete='restrict', + related='product_id.taxes_id', readonly=False) + price_total = fields.Monetary(store=True, readonly=True) + price_tax = fields.Monetary(store=True, readonly=True) currency_id = fields.Many2one('res.currency', string='Currency', store=True, related='subscription_id.currency_id') @@ -63,14 +67,24 @@ class SubscriptionPackageProductLine(models.Model): store=True, related='subscription_id.partner_id') - @api.depends('product_qty', 'unit_price', 'discount') + @api.depends('product_qty', 'unit_price', 'discount', 'tax_id', + 'currency_id') def _compute_total_amount(self): """ Calculate subtotal amount of product line """ - for rec in self: - if rec.product_id: - rec.total_amount = rec.unit_price * rec.product_qty - if rec.discount != 0: - rec.total_amount -= rec.total_amount * (rec.discount / 100) + for line in self: + price = line.unit_price * (1 - (line.discount or 0.0) / 100.0) + taxes = line.tax_id._origin.compute_all(price, + line.subscription_id._origin.currency_id, + line.product_qty, + product=line.product_id, + partner=line.subscription_id._origin.partner_id) + print(taxes) + line.write({ + 'price_tax': sum( + t.get('amount', 0.0) for t in taxes.get('taxes', [])), + 'price_total': taxes['total_included'], + 'total_amount': taxes['total_excluded'], + }) def _valid_field_parameter(self, field, name): if name == 'ondelete': @@ -153,9 +167,12 @@ class SubscriptionPackage(models.Model): close_date = fields.Date(string='Closed on') stage_category = fields.Selection(related='stage_id.category', store=True) invoice_mode = fields.Selection(related="plan_id.invoice_mode") - total_recurring_price = fields.Float(string='Recurring Price', + total_recurring_price = fields.Float(string='Untaxed Amount', compute='_compute_total_recurring_price', store=True) + tax_total = fields.Float("Taxes", readonly=True) + total_with_tax = fields.Monetary("Total Recurring Price", readonly=True, + store=True) def _valid_field_parameter(self, field, name): if name == 'ondelete': @@ -251,9 +268,14 @@ class SubscriptionPackage(models.Model): 'Please change category of stage to "In Progress", ' 'only one stage is allowed to have category "Draft"')) else: - rec.write( - {'stage_id': stage_id, - 'date_started': fields.Date.today()}) + if not rec.product_line_ids: + raise UserError("Empty order lines !! Please add the " + "subscription product.") + else: + rec.write( + {'stage_id': stage_id, + 'date_started': fields.Date.today(), + 'start_date': fields.Date.today()}) def button_sale_order(self): """Button to create sale order""" @@ -361,9 +383,8 @@ class SubscriptionPackage(models.Model): It wil close the subscription automatically if renewal limit is exceeded """ pending_subscriptions = self.env['subscription.package'].search( [('stage_category', '=', 'progress')]) - # today_date = fields.Date.today() - today_date = datetime.datetime.strptime('21092023', '%d%m%Y').date() - + today_date = fields.Date.today() + # today_date = datetime.datetime.strptime('05102023', '%d%m%Y').date() pending_subscription = False for pending_subscription in pending_subscriptions: get_dates = self.find_renew_date( @@ -372,6 +393,7 @@ class SubscriptionPackage(models.Model): pending_subscription.plan_id.days_to_end) renew_date = get_dates['renew_date'] end_date = get_dates['end_date'] + # print(renew_date) pending_subscription.close_date = get_dates['close_date'] if today_date == pending_subscription.next_invoice_date: if pending_subscription.plan_id.invoice_mode == 'draft_invoice': @@ -380,21 +402,22 @@ class SubscriptionPackage(models.Model): rec_list = [0, 0, {'product_id': rec.product_id.id, 'quantity': rec.product_qty, 'price_unit': rec.unit_price, - 'discount': rec.discount + 'discount': rec.discount, + 'tax_ids': rec.tax_id }] this_products_line.append(rec_list) - self.env['account.move'].create( - { - 'move_type': 'out_invoice', - 'invoice_date_due': today_date, - 'invoice_payment_term_id': False, - 'invoice_date': today_date, - 'state': 'draft', - 'subscription_id': pending_subscription.id, - 'partner_id': pending_subscription.partner_invoice_id.id, - 'currency_id': pending_subscription.partner_invoice_id.currency_id.id, - 'invoice_line_ids': this_products_line - }) + self.env['account.move'].create( + { + 'move_type': 'out_invoice', + 'invoice_date_due': today_date, + 'invoice_payment_term_id': False, + 'invoice_date': today_date, + 'state': 'draft', + 'subscription_id': pending_subscription.id, + 'partner_id': pending_subscription.partner_invoice_id.id, + 'currency_id': pending_subscription.partner_invoice_id.currency_id.id, + 'invoice_line_ids': this_products_line + }) pending_subscription.write({'to_renew': False, 'start_date': pending_subscription.next_invoice_date}) @@ -431,14 +454,24 @@ class SubscriptionPackage(models.Model): return dict(pending=pending_subscription) - @api.depends('product_line_ids.total_amount') + @api.depends('product_line_ids.total_amount', + 'product_line_ids.price_total', 'product_line_ids.tax_id') def _compute_total_recurring_price(self): """ Calculate recurring price """ for record in self: total_recurring = 0 + total_tax = 0.0 for line in record.product_line_ids: + # print(line.tax_id._origin) + if line.total_amount != line.price_total: + line_tax = line.price_total - line.total_amount + total_tax += line_tax + total_recurring += line.total_amount record['total_recurring_price'] = total_recurring + record['tax_total'] = total_tax + total_with_tax = total_recurring + total_tax + record['total_with_tax'] = total_with_tax def action_renew(self): return self.button_sale_order() diff --git a/subscription_package/static/description/assets/screenshots/SUB1.png b/subscription_package/static/description/assets/screenshots/SUB1.png index 6558e695e..291f0ab5c 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB1.png and b/subscription_package/static/description/assets/screenshots/SUB1.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB10.png b/subscription_package/static/description/assets/screenshots/SUB10.png index c8c6aab41..8e4ca4926 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB10.png and b/subscription_package/static/description/assets/screenshots/SUB10.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB11.png b/subscription_package/static/description/assets/screenshots/SUB11.png index 367157e89..b89f8fc46 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB11.png and b/subscription_package/static/description/assets/screenshots/SUB11.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB12.png b/subscription_package/static/description/assets/screenshots/SUB12.png index ad68c73d1..7346cd900 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB12.png and b/subscription_package/static/description/assets/screenshots/SUB12.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB13.png b/subscription_package/static/description/assets/screenshots/SUB13.png index 88fb09987..1c21a7db0 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB13.png and b/subscription_package/static/description/assets/screenshots/SUB13.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB14.png b/subscription_package/static/description/assets/screenshots/SUB14.png index de41a521b..22aba4ab9 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB14.png and b/subscription_package/static/description/assets/screenshots/SUB14.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB15.png b/subscription_package/static/description/assets/screenshots/SUB15.png index 51337e259..0b5f50d46 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB15.png and b/subscription_package/static/description/assets/screenshots/SUB15.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB2.png b/subscription_package/static/description/assets/screenshots/SUB2.png index 477a46bcb..81fbea86d 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB2.png and b/subscription_package/static/description/assets/screenshots/SUB2.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB3.png b/subscription_package/static/description/assets/screenshots/SUB3.png index e0c619391..da859f6c0 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB3.png and b/subscription_package/static/description/assets/screenshots/SUB3.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB4.png b/subscription_package/static/description/assets/screenshots/SUB4.png index ee003448d..7f990973d 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB4.png and b/subscription_package/static/description/assets/screenshots/SUB4.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB5.png b/subscription_package/static/description/assets/screenshots/SUB5.png index 0bd7f4fcc..06b4cf918 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB5.png and b/subscription_package/static/description/assets/screenshots/SUB5.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB6.png b/subscription_package/static/description/assets/screenshots/SUB6.png index ef7b77860..4314c07ce 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB6.png and b/subscription_package/static/description/assets/screenshots/SUB6.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB7.png b/subscription_package/static/description/assets/screenshots/SUB7.png index e24d7ec0e..879810e42 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB7.png and b/subscription_package/static/description/assets/screenshots/SUB7.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB8.png b/subscription_package/static/description/assets/screenshots/SUB8.png index 2025fddf8..e9075ff42 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB8.png and b/subscription_package/static/description/assets/screenshots/SUB8.png differ diff --git a/subscription_package/static/description/assets/screenshots/SUB9.png b/subscription_package/static/description/assets/screenshots/SUB9.png index 07c5ca91b..996ed35ce 100644 Binary files a/subscription_package/static/description/assets/screenshots/SUB9.png and b/subscription_package/static/description/assets/screenshots/SUB9.png differ diff --git a/subscription_package/static/description/assets/screenshots/hero.gif b/subscription_package/static/description/assets/screenshots/hero.gif index 73f075812..fad70d230 100644 Binary files a/subscription_package/static/description/assets/screenshots/hero.gif and b/subscription_package/static/description/assets/screenshots/hero.gif differ diff --git a/subscription_package/static/description/index.html b/subscription_package/static/description/index.html index ab48b0019..7010f0bac 100644 --- a/subscription_package/static/description/index.html +++ b/subscription_package/static/description/index.html @@ -9,11 +9,11 @@ class="mr-2"> Community -
- Enterprise -
+ + + + + @@ -118,7 +118,7 @@
- Enterprise and Community compatible. + Community compatible.
@@ -293,15 +293,17 @@ Subscriptions to Renew - +
+ +

- Discount in Subscriptions + Discount and Tax in Subscriptions

- +
@@ -309,7 +311,7 @@ Package with Sale Order - +

diff --git a/subscription_package/views/subscription_package.xml b/subscription_package/views/subscription_package.xml index 798639bea..2ee769b93 100644 --- a/subscription_package/views/subscription_package.xml +++ b/subscription_package/views/subscription_package.xml @@ -173,16 +173,30 @@ + + + + - + + + + + +