summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-05-14 10:21:06 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-05-14 10:21:06 +0700
commit509a771b8ba6122cc308323dbe90ff4a35e4fc72 (patch)
tree64dae25d06eb556d2004ee5a068fcb74f9dbe218
parent2469ee37cfe854f0419a8c3fbabed5bc32bcaa6e (diff)
add multiparts product to barcoding product
-rw-r--r--indoteknik_custom/models/barcoding_product.py34
-rw-r--r--indoteknik_custom/views/barcoding_product.xml5
2 files changed, 30 insertions, 9 deletions
diff --git a/indoteknik_custom/models/barcoding_product.py b/indoteknik_custom/models/barcoding_product.py
index 204c6128..5f4e80ea 100644
--- a/indoteknik_custom/models/barcoding_product.py
+++ b/indoteknik_custom/models/barcoding_product.py
@@ -12,7 +12,7 @@ class BarcodingProduct(models.Model):
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')], string='Type', default='print')
+ 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")
@@ -40,16 +40,33 @@ class BarcodingProduct(models.Model):
@api.onchange('product_id', 'quantity')
def _onchange_product_or_quantity(self):
- """Update barcoding_product_line based on product_id and quantity"""
if self.product_id and self.quantity > 0:
# Clear existing lines
self.barcoding_product_line = [(5, 0, 0)]
# Add a new line with the current product and quantity
- self.barcoding_product_line = [(0, 0, {
- 'product_id': self.product_id.id,
- 'barcoding_product_id': self.id,
- }) for _ in range(int(self.quantity))]
+ 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):
+ """Override write to update sequence_with_total when quantity changes"""
+ 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):
+ """Update sequence_with_total for all lines"""
+ 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):
@@ -59,4 +76,7 @@ class BarcodingProductLine(models.Model):
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') \ No newline at end of file
+ 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
diff --git a/indoteknik_custom/views/barcoding_product.xml b/indoteknik_custom/views/barcoding_product.xml
index 55876580..b259f1e8 100644
--- a/indoteknik_custom/views/barcoding_product.xml
+++ b/indoteknik_custom/views/barcoding_product.xml
@@ -20,6 +20,7 @@
<tree>
<field name="product_id"/>
<field name="qr_code_variant" widget="image"/>
+ <field name="sequence_with_total" attrs="{'invisible': [['parent.type', 'not in', ('multiparts')]]}"/>
</tree>
</field>
</record>
@@ -35,8 +36,8 @@
<field name="product_id" required="1"/>
<field name="type" required="1"/>
<field name="quantity" attrs="{'invisible': [['type', 'in', ('barcoding','barcoding_box')]], 'required': [['type', 'not in', ('barcoding')]]}"/>
- <field name="barcode" attrs="{'invisible': [['type', 'in', ('print')]], 'required': [['type', 'not in', ('print')]]}"/>
- <field name="qty_pcs_box" attrs="{'invisible': [['type', 'in', ('print','barcoding')]], 'required': [['type', 'not in', ('print', 'barcoding')]]}"/>
+ <field name="barcode" attrs="{'invisible': [['type', 'in', ('print','multiparts')]], 'required': [['type', 'not in', ('print','multiparts')]]}"/>
+ <field name="qty_pcs_box" attrs="{'invisible': [['type', 'in', ('print','barcoding','multiparts')]], 'required': [['type', 'not in', ('print','barcoding','multiparts')]]}"/>
</group>
</group>
<notebook>