summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-12-24 14:08:25 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-12-24 14:08:25 +0700
commit1c42785d665f1b4d459e468d9c0428bc6f767954 (patch)
tree66018f0a196315f3e4c116064d1f331c092662d5
parent5dc0eb722ba306ed2e81acad1b6ba7457717af44 (diff)
parent95bcefaef503bcbe787f71ff0aadd2aa2faa47d5 (diff)
Merge branch 'main' of bitbucket.org:altafixco/fixco-addons
merge
-rw-r--r--fixco_custom/models/shipment_group.py6
-rwxr-xr-xfixco_custom/models/stock_picking.py47
-rw-r--r--fixco_custom/views/report_picking_list.xml26
-rw-r--r--fixco_custom/views/shipment_group.xml24
4 files changed, 69 insertions, 34 deletions
diff --git a/fixco_custom/models/shipment_group.py b/fixco_custom/models/shipment_group.py
index a2d90f0..01e0f6b 100644
--- a/fixco_custom/models/shipment_group.py
+++ b/fixco_custom/models/shipment_group.py
@@ -35,6 +35,12 @@ class ShipmentGroup(models.Model):
picking_lines = fields.One2many('picking.line', 'shipment_id', string='Picking Lines', auto_join=True)
related_count = fields.Integer(compute='_compute_related_count', string='Related Count')
receipt = fields.Char(string='Receipt', related='picking_lines.scan_receipt')
+ total_line = fields.Integer(string='Total Line', compute='_compute_total_line')
+
+ @api.depends('picking_lines')
+ def _compute_total_line(self):
+ for rec in self:
+ rec.total_line = len(rec.picking_lines)
def sync_product_to_picking_line(self):
for shipment in self:
diff --git a/fixco_custom/models/stock_picking.py b/fixco_custom/models/stock_picking.py
index 07425d2..6850b1e 100755
--- a/fixco_custom/models/stock_picking.py
+++ b/fixco_custom/models/stock_picking.py
@@ -645,6 +645,7 @@ class CheckProduct(models.Model):
_name = 'check.product'
_description = 'Check Product'
_order = 'picking_id, id'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
picking_id = fields.Many2one(
'stock.picking',
@@ -695,29 +696,41 @@ class CheckProduct(models.Model):
self.quantity = 1
def unlink(self):
- # Get all affected pickings before deletion
- pickings = self.mapped('picking_id')
+ picking_map = {}
+ for line in self:
+ picking_map.setdefault(line.picking_id, []).append({
+ 'product': line.product_id.display_name,
+ 'qty': line.quantity,
+ })
- # Store product_ids that will be deleted
+ pickings = self.mapped('picking_id')
deleted_product_ids = self.mapped('product_id')
- # Perform the deletion
result = super(CheckProduct, self).unlink()
- # After deletion, update moves for affected pickings
for picking in pickings:
- # For products that were completely removed (no remaining check.product lines)
+ if picking in picking_map:
+ product_list = picking_map[picking]
+
+ picking.message_post(
+ body=(
+ "<b>Product Dihapus dari Check Product</b><br/>"
+ "%s"
+ ) % "<br/>".join(
+ "- %s" % product for product in product_list
+ ),
+ subtype_xmlid='mail.mt_note',
+ )
+
remaining_product_ids = picking.check_product_lines.mapped('product_id')
removed_product_ids = deleted_product_ids - remaining_product_ids
- # Set quantity_done to 0 for moves of completely removed products
moves_to_reset = picking.move_ids_without_package.filtered(
lambda move: move.product_id in removed_product_ids
)
for move in moves_to_reset:
move.quantity_done = 0.0
- # Also sync remaining products in case their totals changed
self._sync_check_product_to_moves(picking)
return result
@@ -735,12 +748,26 @@ class CheckProduct(models.Model):
else:
record.status = 'Done'
+
+ @api.model
def create(self, vals):
- # Create the record
record = super(CheckProduct, self).create(vals)
- # Ensure uniqueness after creation
+
+ if record.product_id and record.picking_id:
+ record.picking_id.message_post(
+ body=(
+ "<b>Check Product Berhasil</b><br/>"
+ "Product: %s<br/>"
+ ) % (
+ record.product_id.display_name,
+ ),
+ message_type='comment',
+ subtype_xmlid='mail.mt_note',
+ )
+
if not self.env.context.get('skip_consolidate'):
record.with_context(skip_consolidate=True)._consolidate_duplicate_lines()
+
return record
def write(self, vals):
diff --git a/fixco_custom/views/report_picking_list.xml b/fixco_custom/views/report_picking_list.xml
index bff1fc6..061d7f0 100644
--- a/fixco_custom/views/report_picking_list.xml
+++ b/fixco_custom/views/report_picking_list.xml
@@ -21,13 +21,13 @@
data:image/jpeg;base64,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
</t>
<!-- DUPLICATE WATERMARK IMG -->
-
+
<!-- Barcode Header -->
<div style="text-align: right; margin-bottom: -90px;">
- <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('QR', o.name, 100, 100)"
+ <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('QR', o.name, 100, 100)"
style="width:100px;height:100px;" alt="QR Code"/>
</div>
-
+
<!-- Main Header -->
<div style="text-align: center; margin-bottom: 15px;">
<t t-if="was_printed_map.get(o.id)">
@@ -51,8 +51,8 @@
<div style="font-size: 18px; font-weight: bold; margin-top: 5px;">
Web Service
</div>
- </div>
-
+ </div>
+
<!-- Order Information -->
<div style="display: flex; justify-content: space-between; margin-bottom: 20px; border-bottom: 1px solid #000; padding-bottom: 10px;">
<div>
@@ -68,7 +68,7 @@
<span t-field="o.carrier"/>
</div>
</div>
-
+
<!-- Product Table -->
<table style="width: 100%; border-collapse: collapse; margin-bottom: 30px;">
<thead>
@@ -96,10 +96,10 @@
</div>
</td>
<td style="text-align: center; padding: 8px 5px; vertical-align: top;">
- <t t-esc="move.product_uom_qty if move.product_uom_qty else 0"/>
+ <t t-esc="int(move.product_uom_qty if move.product_uom_qty else 0)"/>
</td>
<td style="text-align: center; padding: 8px 5px; vertical-align: top;">
- <t t-esc="move.reserved_availability if move.reserved_availability > 0 else 0"/>
+ <t t-esc="int(move.reserved_availability if move.reserved_availability > 0 else 0)"/>
</td>
<td style="padding: 8px 5px; vertical-align: top;">
<span t-field="move.location_id.name"/>
@@ -111,11 +111,11 @@
</t>
</tbody>
</table>
-
+
<!-- Footer Information -->
<div style="display: flex; justify-content: space-between; border-top: 1px solid #000; padding-top: 15px;">
<div style="font-weight: bold;">
- Total Qty:
+ Total Qty:
<t t-set="total_qty" t-value="0"/>
<t t-foreach="o.move_ids_without_package" t-as="move">
<t t-set="total_qty" t-value="total_qty + (move.product_uom_qty or 0)"/>
@@ -123,11 +123,11 @@
<t t-esc="total_qty"/>
</div>
<div style="font-weight: bold;">
- Jumlah Barang:
+ Jumlah Barang:
<t t-esc="counter"/>
</div>
</div>
-
+
<!-- Notes Section -->
<div t-if="o.note" style="margin-top: 30px; padding: 10px; border: 1px solid #ddd; background-color: #f9f9f9;">
<strong>Catatan:</strong>
@@ -138,4 +138,4 @@
</t>
</t>
</template>
-</odoo> \ No newline at end of file
+</odoo>
diff --git a/fixco_custom/views/shipment_group.xml b/fixco_custom/views/shipment_group.xml
index 3edc432..4aae314 100644
--- a/fixco_custom/views/shipment_group.xml
+++ b/fixco_custom/views/shipment_group.xml
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree default_order="create_date desc">
<field name="number"/>
+ <field name="total_line" readonly="1"/>
</tree>
</field>
</record>
@@ -16,15 +17,15 @@
<field name="arch" type="xml">
<form>
<header>
- <button name="get_status"
- string="Get Status"
- type="object"
- class="oe_highlight"
+ <button name="get_status"
+ string="Get Status"
+ type="object"
+ class="oe_highlight"
/>
- <button name="sync_product_to_picking_line"
- string="Sync Picking Line"
- type="object"
- class="oe_highlight"
+ <button name="sync_product_to_picking_line"
+ string="Sync Picking Line"
+ type="object"
+ class="oe_highlight"
/>
</header>
<sheet>
@@ -38,6 +39,7 @@
<group>
<group>
<field name="number" readonly="1"/>
+ <field name="total_line" readonly="1"/>
</group>
</group>
<notebook>
@@ -51,7 +53,7 @@
<field name="order_reference" optional="hide"/>
<field name="status"/>
</tree>
- </field>
+ </field>
</page>
<page string="Line">
<field name="shipment_line">
@@ -62,7 +64,7 @@
<field name="order_reference" optional="hide"/>
<field name="picking_id"/>
</tree>
- </field>
+ </field>
</page>
</notebook>
</sheet>
@@ -83,7 +85,7 @@
<field name="receipt"/>
</search>
</field>
- </record>
+ </record>
<record id="shipment_group_action" model="ir.actions.act_window">
<field name="name">Shipment Group</field>