summaryrefslogtreecommitdiff
path: root/fixco_custom/models/barcoding_product.py
diff options
context:
space:
mode:
Diffstat (limited to 'fixco_custom/models/barcoding_product.py')
-rw-r--r--fixco_custom/models/barcoding_product.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/fixco_custom/models/barcoding_product.py b/fixco_custom/models/barcoding_product.py
new file mode 100644
index 0000000..335b481
--- /dev/null
+++ b/fixco_custom/models/barcoding_product.py
@@ -0,0 +1,78 @@
+from odoo import models, api, fields
+from odoo.exceptions import AccessError, UserError, ValidationError
+from datetime import timedelta, date, datetime
+import logging
+
+_logger = logging.getLogger(__name__)
+
+class BarcodingProduct(models.Model):
+ _name = "barcoding.product"
+ _description = "Barcoding Product"
+
+ barcoding_product_line = fields.One2many('barcoding.product.line', 'barcoding_product_id', string='Barcoding Product Lines', auto_join=True)
+ product_id = fields.Many2one('product.product', string="Product", tracking=3)
+ quantity = fields.Float(string="Quantity", tracking=3)
+ type = fields.Selection([('print', 'Print Barcode'), ('barcoding', 'Add Barcode To Product'), ('barcoding_box', 'Add Barcode Box To Product'), ('multiparts', 'Multiparts Product')], string='Type', default='print')
+ barcode = fields.Char(string="Barcode")
+ qty_pcs_box = fields.Char(string="Quantity Pcs Box")
+
+ def check_duplicate_barcode(self):
+ if self.type in ['barcoding_box', 'barcoding']:
+ barcode_product = self.env['product.product'].search([('barcode', '=', self.barcode)])
+
+ if barcode_product:
+ raise UserError('Barcode sudah digunakan {}'.format(barcode_product.display_name))
+
+ barcode_box = self.env['product.product'].search([('barcode_box', '=', self.barcode)])
+
+ if barcode_box:
+ raise UserError('Barcode box sudah digunakan {}'.format(barcode_box.display_name))
+
+ @api.constrains('barcode')
+ def _send_barcode_to_product(self):
+ for record in self:
+ record.check_duplicate_barcode()
+ if record.type == 'barcoding_box':
+ record.product_id.barcode_box = record.barcode
+ record.product_id.qty_pcs_box = record.qty_pcs_box
+ else:
+ record.product_id.barcode = record.barcode
+
+ @api.onchange('product_id', 'quantity')
+ def _onchange_product_or_quantity(self):
+ if self.product_id and self.quantity > 0:
+ self.barcoding_product_line = [(5, 0, 0)]
+
+ lines = []
+ for i in range(int(self.quantity)):
+ lines.append((0, 0, {
+ 'product_id': self.product_id.id,
+ 'barcoding_product_id': self.id,
+ 'sequence_with_total': f"{i+1}/{int(self.quantity)}"
+ }))
+ self.barcoding_product_line = lines
+
+ def write(self, vals):
+ res = super().write(vals)
+ if 'quantity' in vals and self.type == 'multiparts':
+ self._update_sequence_with_total()
+ return res
+
+ def _update_sequence_with_total(self):
+ for rec in self:
+ total = int(rec.quantity)
+ for index, line in enumerate(rec.barcoding_product_line, start=1):
+ line.sequence_with_total = f"{index}/{total}"
+
+
+class BarcodingProductLine(models.Model):
+ _name = 'barcoding.product.line'
+ _description = 'Barcoding Product Line'
+ _order = 'barcoding_product_id, id'
+
+ barcoding_product_id = fields.Many2one('barcoding.product', string='Barcoding Product Ref', required=True, ondelete='cascade', index=True, copy=False)
+ product_id = fields.Many2one('product.product', string="Product")
+ qr_code_variant = fields.Binary("QR Code Variant", related='product_id.qr_code_variant')
+ sequence_with_total = fields.Char(
+ string="Sequence"
+ ) \ No newline at end of file