# -*- coding: utf-8 -*- from odoo import models, fields, api, _ class GarmentReworkOrder(models.Model): _name = 'garment.rework.order' _inherit = ['mail.thread', 'mail.activity.mixin'] _description = 'Garment Quality Rework Order' _order = 'name desc' name = fields.Char(string='Rework Order No', required=True, default=lambda self: _('New'), copy=False, tracking=True) inspection_id = fields.Many2one('garment.quality.inspection', string='Originating QC Inspection', required=True, tracking=True) production_plan_id = fields.Many2one('garment.production.plan', string='Production Plan', tracking=True) style_id = fields.Many2one('garment.style', string='Style', tracking=True) color_id = fields.Many2one('garment.color', string='Color') size_id = fields.Many2one('garment.size', string='Size') bundle_id = fields.Many2one('garment.bundle', string='Bundle Ref') # Quantities rework_qty = fields.Integer(string='Rework Quantity (Pcs)', required=True, default=1, tracking=True) passed_rework_qty = fields.Integer(string='Passed After Rework', default=0) scrapped_rework_qty = fields.Integer(string='Unrepairable / Scrapped', default=0) # Assignment assigned_dept = fields.Selection([ ('sewing', 'Sewing Floor Alteration'), ('cutting', 'Cutting Panel Replacement'), ('finishing', 'Spot Cleaning / Ironing'), ('jobwork', 'Job Worker Re-processing'), ], string='Responsible Section', default='sewing', required=True, tracking=True) assigned_operator_id = fields.Many2one('res.users', string='Assigned Operator / Tailor', tracking=True) date_assigned = fields.Date(string='Date Assigned', default=fields.Date.today) date_completed = fields.Date(string='Date Completed') rework_cost = fields.Float(string='Estimated Rework Cost (INR)', default=15.0) defect_description = fields.Text(string='Defect Description & Alteration Instructions', required=True) state = fields.Selection([ ('assigned', 'Assigned for Rework'), ('in_rework', 'In Rework / Alteration'), ('ready_recheck', 'Ready for QA Re-check'), ('passed', 'Passed QA Re-check (Restored)'), ('scrapped', 'Irreparable / Scrapped'), ], string='Status', default='assigned', tracking=True, required=True) @api.model_create_multi def create(self, vals_list): for vals in vals_list: if vals.get('name', _('New')) == _('New'): vals['name'] = self.env['ir.sequence'].next_by_code('garment.rework.order') or _('RWK/%s') % fields.Date.today().strftime('%Y%m%d') return super(GarmentReworkOrder, self).create(vals_list) def action_start_rework(self): self.write({'state': 'in_rework'}) def action_ready_recheck(self): self.write({'state': 'ready_recheck'}) def action_pass_recheck(self): self.write({ 'state': 'passed', 'passed_rework_qty': self.rework_qty, 'date_completed': fields.Date.today(), }) def action_scrap_rework(self): self.write({ 'state': 'scrapped', 'scrapped_rework_qty': self.rework_qty, 'date_completed': fields.Date.today(), })