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.
		
		
		
		
		
			
		
			
				
					
					
						
							144 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							144 lines
						
					
					
						
							6.5 KiB
						
					
					
				| """Pets""" | |
| # -*- coding: utf-8 -*- | |
| ############################################################################# | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Gayathri v (odoo@cybrosys.com) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################# | |
| from datetime import timedelta, date | |
| from odoo import api, fields, models, _ | |
| from odoo.exceptions import UserError | |
| 
 | |
| 
 | |
| class Product(models.Model): | |
|     """Inheriting pets as product""" | |
|     _inherit = 'product.product' | |
| 
 | |
|     is_pet = fields.Boolean(string='Is Pet', | |
|                             help='This is used to identify the pet') | |
|     image_1920 = fields.Image(string="Image", help='This is the image of pet', | |
|                               compute='_compute_image_1920', | |
|                               inverse='_set_image_1920') | |
|     age = fields.Float(compute='_compute_age', string='Age', | |
|                        help='Age of the pet') | |
|     sex = fields.Selection([ | |
|         ('male', 'Male'), | |
|         ('female', 'Female'), | |
|         ('other', 'Other') | |
|     ], string='Sex', help='Sex of the pet') | |
|     dob = fields.Date(string='Date Of Birth', help='Date of birth of pet') | |
|     pet_type_id = fields.Many2one('pet.type', string='Pet Type', | |
|                                   help='Type of the pet') | |
|     color = fields.Char(string='Color', help='Color of the pet') | |
|     stay = fields.Char(string='Stay', help='Stay of the pet') | |
|     pet_seq = fields.Char(string='Pet No.', required=True, | |
|                           copy=False, | |
|                           readonly=True, | |
|                           index=True, | |
|                           default=lambda self: 'New') | |
|     photo_one = fields.Binary(string='Image', help='Additional photo of pet') | |
|     photo_two = fields.Binary(string='Image', help='Additional photo of pet') | |
|     photo_three = fields.Binary(string='Image', help='Additional photo of pet') | |
|     notes = fields.Text(string='Note', help="Additional notes") | |
|     veterinarian_id = fields.Many2one('hr.employee', | |
|                                       domain="[('is_veterinarian', '=', True)]", | |
|                                       string='Veterinarian', | |
|                                       help='Veterinarian of the pet') | |
|     is_contact = fields.Boolean(string='Contact if your pet has any hesitation', | |
|                                 help='To know the pets hesitation') | |
|     is_allergy = fields.Boolean( | |
|         string='Has your pet ever had any allergic reaction to a medicine?', | |
|         help='To know pets allergic reaction') | |
|     is_reaction = fields.Boolean( | |
|         string='Has your pet ever had a reaction to a vaccine?', | |
|         help='To know the reaction to the vaccine.') | |
|     previous_reactions = fields.Text( | |
|         string='Has Your pet had any previous medical or surgical problems?', | |
|         help='To know the pets surgical problems') | |
|     pet_place = fields.Char(string='Where did your pet come from', | |
|                             default='Pet Store', | |
|                             help='Where did your pet come from') | |
|     pet_food = fields.Char(string='what do you feed your pet', | |
|                            help='What do you feed your pet') | |
|     is_pet_service = fields.Boolean(string='Is pet Service', | |
|                                     help="pet as service") | |
|     pet_vaccines_ids = fields.One2many('pet.vaccines', | |
|                                        'pet_vaccine_id', | |
|                                        string='Pet Vaccines', | |
|                                        help='Pet vaccines') | |
|     vaccine = fields.Binary(string='Image', help='To upload the vaccine info') | |
|     customer_id = fields.Many2one('res.partner', string='Customer', | |
|                                   help='Customer of thr pet', | |
|                                   domain="[('type', '!=', 'private')]") | |
|     responsible_id = fields.Many2one('res.users', string='Scheduler User', | |
|                                      default=lambda self: self.env.user, | |
|                                      required=True, | |
|                                      help='Responsible for the pet') | |
|     partner_id = fields.Many2one('res.partner', string='Partner', | |
|                                  required=True) | |
|     is_sale_order = fields.Boolean(string='Sale Order', default=False) | |
|     month = fields.Integer(string='Month', help='If the pet is below one year', | |
|                            compute="_compute_age") | |
| 
 | |
|     @api.depends('dob') | |
|     def _compute_age(self): | |
|         """Computes pets age according to their dob""" | |
|         for rec in self: | |
|             if rec.dob: | |
|                 rec.age = (date.today() - rec.dob) // timedelta(days=365.2425) | |
|                 rec.month = (date.today() - rec.dob) // timedelta(days=30) | |
|             else: | |
|                 rec.age = False | |
|                 rec.month = False | |
| 
 | |
|     def create_sale_order(self): | |
|         """Creating sale order if there is exist""" | |
|         onhand = self.env['stock.quant'].search([ | |
|             ('product_id', '=', self.id)]) | |
|         if len(onhand) != 0: | |
|             sale = self.env['sale.order'].create({ | |
|                 'partner_id': self.partner_id.id, | |
|             }) | |
|             sale.order_line = [(5, 0, 0)] | |
|             vals = { | |
|                 'order_id': sale.id, | |
|                 'product_id': self.id, | |
|                 'product_template_id': self.product_tmpl_id.id, | |
|                 'name': self.product_tmpl_id.name, | |
|             } | |
|             sale.order_line = [(0, 0, vals)] | |
|         else: | |
|             raise UserError( | |
|                 _("There is no pets to sell(Available quantity is Zero)")) | |
|         return { | |
|             'type': 'ir.actions.act_window', | |
|             'target': 'current', | |
|             'name': _('Create Sale'), | |
|             'res_id': sale.id, | |
|             'view_mode': 'form', | |
|             'res_model': 'sale.order', | |
|         } | |
| 
 | |
|     @api.model | |
|     def create(self, vals): | |
|         """To create the sequence""" | |
|         if vals.get('pet_seq', 'New') == 'New': | |
|             vals['pet_seq'] = self.env['ir.sequence'].next_by_code( | |
|                 'pet.sequence') or 'New' | |
|         result = super().create(vals) | |
|         return result
 | |
| 
 |