diff --git a/quality_control/models/quality.py b/quality_control/models/quality.py index 1ab0e862..dbf4f0b4 100644 --- a/quality_control/models/quality.py +++ b/quality_control/models/quality.py @@ -141,7 +141,7 @@ class QualityCheck(models.Model): # # 出厂检验报告编号 # report_number = fields.Char('出厂检验报告编号', compute='_compute_report_number', readonly=True) # 总数量,值为调拨单_产品明细_数量 - total_qty = fields.Char('总数量', compute='_compute_total_qty') + total_qty = fields.Char('总数量', compute='_compute_total_qty', store=True) column_nums = fields.Integer('测量值列数', default=1) @@ -153,9 +153,9 @@ class QualityCheck(models.Model): for move in record.picking_id.move_ids_without_package: if move.product_id == record.product_id: total_qty = int(move.product_uom_qty) - record.total_qty = total_qty if total_qty > 0 else '' + record.total_qty = total_qty if total_qty > 0 else 0 else: - record.total_qty = '' + record.total_qty = 0 # 检验数 check_qty = fields.Integer('检验数', default=lambda self: self._get_default_check_qty()) diff --git a/quality_control/wizard/quality_check_wizard.py b/quality_control/wizard/quality_check_wizard.py index f4297f47..4da51f4b 100644 --- a/quality_control/wizard/quality_check_wizard.py +++ b/quality_control/wizard/quality_check_wizard.py @@ -23,8 +23,8 @@ class QualityCheckWizard(models.TransientModel): lot_name = fields.Char(related='current_check_id.lot_name') lot_line_id = fields.Many2one(related='current_check_id.lot_line_id') qty_line = fields.Float(related='current_check_id.qty_line') - qty_to_test = fields.Float(related='current_check_id.qty_to_test') - qty_tested = fields.Float(related='current_check_id.qty_tested', readonly=False) + qty_to_test = fields.Float(related='current_check_id.qty_to_test', string='待检') + qty_tested = fields.Float(related='current_check_id.qty_tested', string='已检', readonly=False) measure = fields.Float(related='current_check_id.measure', readonly=False) measure_on = fields.Selection(related='current_check_id.measure_on') quality_state = fields.Selection(related='current_check_id.quality_state') diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py index d05d2eaa..19c845b3 100644 --- a/sf_quality/models/quality.py +++ b/sf_quality/models/quality.py @@ -5,6 +5,7 @@ from odoo import fields, models, api from odoo.exceptions import ValidationError from datetime import datetime from odoo.addons.sf_base.commons.common import Common +from odoo.tools import float_round class QualityCheck(models.Model): @@ -145,39 +146,55 @@ class QualityCheck(models.Model): return super(QualityCheck, self).create(vals_list) - @api.depends('move_line_id.qty_done', 'workorder_id.qty_produced') - def _compute_qty_line(self): - super(QualityCheck, self)._compute_qty_line() + @api.depends('total_qty','testing_percentage_within_lot', 'is_lot_tested_fractionally') + def _compute_workorder_qty_to_test(self): + for qc in self: + if qc.is_lot_tested_fractionally: + rounding = qc.product_id.uom_id.rounding if qc.product_id.uom_id else 0.01 + qc.workorder_qty_to_test = float_round(float(qc.total_qty) * qc.testing_percentage_within_lot / 100, + precision_rounding=rounding, rounding_method="UP") + else: + qc.workorder_qty_to_test = qc.total_qty + + @api.depends('picking_id', 'workorder_id') + def _compute_total_qty(self): + super(QualityCheck, self)._compute_total_qty() for qc in self: - if not qc.move_line_id and qc.workorder_id: - qc.qty_line = qc.workorder_id.production_id.product_qty + if not qc.picking_id and qc.workorder_id: + qc.total_qty = qc.workorder_id.production_id.product_qty - qty_line = fields.Float('数量', store=True) - qty_test_failed = fields.Float('不合格数') - qty_to_test = fields.Float('应检', store=True) - qty_tested = fields.Float('已检') + @api.depends('workorder_qty_to_test') + def _compute_workorder_qty_tested(self): + for qc in self: + qc.workorder_qty_tested = qc.workorder_qty_to_test - @api.onchange('qty_line', 'qty_test_failed', 'qty_to_test', 'qty_tested') + + workorder_qty_to_test = fields.Float('应检', compute='_compute_workorder_qty_to_test', store=True) + workorder_qty_tested = fields.Float('已检', compute='_compute_workorder_qty_tested', store=True) + workorder_qty_test_failed = fields.Float('不合格数') + + + @api.onchange('total_qty', 'workorder_qty_test_failed', 'workorder_qty_to_test', 'workorder_qty_tested') def _onchage_qty(self): for record in self: - if record.qty_line and record.qty_to_test and record.qty_to_test > record.qty_line: - record.qty_to_test = record.qty_line + if record.total_qty and record.workorder_qty_to_test and record.workorder_qty_to_test > float(record.total_qty): + record.workorder_qty_to_test = float(record.total_qty) return { 'warning': { 'title': '警告', 'message': '待检数量不能超过总数量' } } - if record.qty_to_test and record.qty_tested and record.qty_tested > record.qty_to_test: - record.qty_tested = record.qty_to_test + if record.workorder_qty_to_test and record.workorder_qty_tested and record.workorder_qty_tested > record.workorder_qty_to_test: + record.workorder_qty_tested = record.workorder_qty_to_test return { 'warning': { 'title': '警告', 'message': '已检数量不能超过待检数量' } } - if record.qty_tested and record.qty_test_failed and record.qty_test_failed > record.qty_tested: - record.qty_test_failed = record.qty_tested + if record.workorder_qty_tested and record.workorder_qty_test_failed and record.workorder_qty_test_failed > record.workorder_qty_tested: + record.workorder_qty_test_failed = record.workorder_qty_tested return { 'warning': { 'title': '警告', diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml index 655cc498..69e1875f 100644 --- a/sf_quality/views/quality_check_view.xml +++ b/sf_quality/views/quality_check_view.xml @@ -88,34 +88,41 @@