You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
5.4 KiB
101 lines
5.4 KiB
# -*- coding: utf-8 -*-
|
|
#############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
|
# Author: SREERAG PM (<https://www.cybrosys.com>)
|
|
#
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#############################################################################
|
|
from odoo import api, models, fields
|
|
|
|
|
|
class SubscriptionPackageProductLine(models.Model):
|
|
"""Subscription Package Product Line Model"""
|
|
_name = 'subscription.package.product.line'
|
|
_description = 'Subscription Package Product Lines'
|
|
|
|
subscription_id = fields.Many2one('subscription.package', store=True,
|
|
string='Subscription',
|
|
help='Choose Subscription Package')
|
|
company_id = fields.Many2one('res.company', string='Company', store=True,
|
|
related='subscription_id.company_id')
|
|
create_date = fields.Datetime(string='Create date', store=True,
|
|
default=fields.Datetime.now,
|
|
help='Add Create Date')
|
|
user_id = fields.Many2one('res.users', string='Salesperson', store=True,
|
|
related='subscription_id.user_id',
|
|
help='Add Salesperson')
|
|
product_id = fields.Many2one('product.product', string='Product',
|
|
store=True, ondelete='restrict',
|
|
domain=[('is_subscription', '=', True)],
|
|
help='Choose Product')
|
|
product_qty = fields.Float(string='Quantity', store=True, default=1.0,
|
|
help='Add Product Quantity')
|
|
product_uom_id = fields.Many2one('uom.uom', string='UoM', store=True,
|
|
related='product_id.uom_id',
|
|
ondelete='restrict',
|
|
help='Add Product UOM')
|
|
uom_catg_id = fields.Many2one('uom.category', string='UoM Category',
|
|
store=True,
|
|
related='product_id.uom_id.category_id',
|
|
help='Choose Product Uom quantity')
|
|
unit_price = fields.Float(string='Unit Price', store=True, readonly=False,
|
|
related='product_id.list_price',
|
|
help='Add Product Unit Price')
|
|
discount = fields.Float(string="Discount (%)", help='Add Discount')
|
|
tax_ids = fields.Many2many('account.tax', string="Taxes",
|
|
ondelete='restrict',
|
|
related='product_id.taxes_id', readonly=False,
|
|
help='Add Taxes')
|
|
price_total = fields.Monetary(store=True, readonly=True,
|
|
help='Add Product Price Total')
|
|
price_tax = fields.Monetary(store=True, readonly=True, string='Price Tax',
|
|
help='Add Price Tax')
|
|
currency_id = fields.Many2one('res.currency', string='Currency',
|
|
store=True, help='Add Subscription Currency',
|
|
related='subscription_id.currency_id')
|
|
total_amount = fields.Monetary(string='Subtotal', store=True,
|
|
help='Add Total Amount',
|
|
compute='_compute_total_amount')
|
|
sequence = fields.Integer('Sequence', help="Determine the display order",
|
|
index=True)
|
|
res_partner_id = fields.Many2one('res.partner', string='Partner',
|
|
store=True, help='Choose the Partner',
|
|
related='subscription_id.partner_id')
|
|
|
|
@api.depends('product_qty', 'unit_price', 'discount', 'tax_ids',
|
|
'currency_id')
|
|
def _compute_total_amount(self):
|
|
""" Calculate subtotal amount of product line """
|
|
for line in self:
|
|
price = line.unit_price * (1 - (line.discount or 0.0) / 100.0)
|
|
taxes = line.tax_ids._origin.compute_all(price,
|
|
line.subscription_id._origin.currency_id,
|
|
line.product_qty,
|
|
product=line.product_id,
|
|
partner=line.subscription_id._origin.partner_id)
|
|
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':
|
|
return True
|
|
return super(SubscriptionPackageProductLine,
|
|
self)._valid_field_parameter(field, name)
|
|
|