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)
 | |
| 
 |