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.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							91 lines
						
					
					
						
							3.8 KiB
						
					
					
				
								# -*- coding: utf-8 -*-
							 | 
						|
								################################################################################
							 | 
						|
								#
							 | 
						|
								#    Cybrosys Technologies Pvt. Ltd.
							 | 
						|
								#
							 | 
						|
								#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
							 | 
						|
								#    Author: Ayana KP (odoo@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, fields, models
							 | 
						|
								from odoo.addons.base.models.decimal_precision import dp
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class RecurringAgreementLine(models.Model):
							 | 
						|
								    """Model generating purchase recurring agreement line"""
							 | 
						|
								    _name = 'recurring.agreement.line'
							 | 
						|
								    _description = 'Recurring Agreement Line'
							 | 
						|
								
							 | 
						|
								    active_chk = fields.Boolean(
							 | 
						|
								        string='Active', default=True,
							 | 
						|
								        help='Unchecking this field, this quota is not generated')
							 | 
						|
								    recurring_agreement_id = fields.Many2one(
							 | 
						|
								        'purchase.recurring.agreement',
							 | 
						|
								        string='Agreement Reference',
							 | 
						|
								        help="The Corresponding Purchase Order Agreement",
							 | 
						|
								        ondelete='cascade')
							 | 
						|
								    product_id = fields.Many2one('product.product', string='Product',
							 | 
						|
								                                 ondelete='restrict',
							 | 
						|
								                                 required=True)
							 | 
						|
								    uom_id = fields.Many2one(related='product_id.product_tmpl_id.uom_id',
							 | 
						|
								                             help="UOM of the product", string="Uom")
							 | 
						|
								
							 | 
						|
								    name = fields.Char(
							 | 
						|
								        related="product_id.name", string='Description',
							 | 
						|
								        help="Description of the Product")
							 | 
						|
								    additional_description = fields.Char(
							 | 
						|
								        string='Description', size=30,
							 | 
						|
								        help='Additional description that will be added to the product '
							 | 
						|
								             'description on orders.')
							 | 
						|
								    quantity = fields.Float(
							 | 
						|
								        string='Quantity', required=True, help='Quantity of the Product',
							 | 
						|
								        default=1.0)
							 | 
						|
								    ordering_interval = fields.Integer(
							 | 
						|
								        string='Interval', required=True, default=1,
							 | 
						|
								        help="Interval in time units for making an order of this product")
							 | 
						|
								    ordering_unit = fields.Selection(
							 | 
						|
								        selection=[('days', 'Days'),
							 | 
						|
								                   ('weeks', 'Weeks'),
							 | 
						|
								                   ('months', 'Months'),
							 | 
						|
								                   ('years', 'Years')],
							 | 
						|
								        string='Interval Unit', required=True,
							 | 
						|
								        help="It indicated the Recurring Time Unit", default='months')
							 | 
						|
								    last_order_date = fields.Datetime(
							 | 
						|
								        string='Last Order', help='Date of the last Purchase order generated')
							 | 
						|
								    specific_price = fields.Float(
							 | 
						|
								        string='Specific Price',
							 | 
						|
								        digits_compute=dp.get_precision('Purchase Price'),
							 | 
						|
								        help='Specific price for this product. Keep empty to use the list '
							 | 
						|
								             'price while generating order')
							 | 
						|
								    list_price = fields.Float(
							 | 
						|
								        related='product_id.list_price', string="List Price", readonly=True,
							 | 
						|
								        help='Price of product in purchase order lines')
							 | 
						|
								
							 | 
						|
								    _sql_constraints = [
							 | 
						|
								        ('line_qty_zero', 'CHECK (quantity > 0)',
							 | 
						|
								         'All product quantities must be greater than 0.\n'),
							 | 
						|
								        ('line_interval_zero', 'CHECK (ordering_interval > 0)',
							 | 
						|
								         'All ordering intervals must be greater than 0.\n'),
							 | 
						|
								    ]
							 | 
						|
								
							 | 
						|
								    @api.onchange('product_id')
							 | 
						|
								    def onchange_product_id(self, product_id=False):
							 | 
						|
								        """For getting product name"""
							 | 
						|
								        result = {}
							 | 
						|
								        if product_id:
							 | 
						|
								            product = self.env['product.product'].browse(product_id)
							 | 
						|
								            if product:
							 | 
						|
								                result['value'] = {'name': product['name']}
							 | 
						|
								        return result
							 | 
						|
								
							 |