first commit
This commit is contained in:
commit
a13e7af0f6
1
__init__.py
Normal file
1
__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from . import models
|
||||||
18
__manifest__.py
Normal file
18
__manifest__.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
'name': 'Sale Order Tracking',
|
||||||
|
'version': '18.0.1.0.0',
|
||||||
|
'category': 'Sales',
|
||||||
|
'summary': 'Track changes in Sale Orders and Lines',
|
||||||
|
'description': """
|
||||||
|
This module tracks:
|
||||||
|
1. Customer changes in Sale Order.
|
||||||
|
2. Product and Quantity changes in Sale Order Lines.
|
||||||
|
3. Addition and Removal of Sale Order Lines.
|
||||||
|
""",
|
||||||
|
'author': 'Antigravity',
|
||||||
|
'depends': ['sale_management'],
|
||||||
|
'data': [],
|
||||||
|
'installable': True,
|
||||||
|
'application': False,
|
||||||
|
'license': 'LGPL-3',
|
||||||
|
}
|
||||||
BIN
__pycache__/__init__.cpython-312.pyc
Normal file
BIN
__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
2
models/__init__.py
Normal file
2
models/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
from . import sale_order
|
||||||
|
from . import sale_order_line
|
||||||
BIN
models/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
models/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
BIN
models/__pycache__/sale_order.cpython-312.pyc
Normal file
BIN
models/__pycache__/sale_order.cpython-312.pyc
Normal file
Binary file not shown.
BIN
models/__pycache__/sale_order_line.cpython-312.pyc
Normal file
BIN
models/__pycache__/sale_order_line.cpython-312.pyc
Normal file
Binary file not shown.
6
models/sale_order.py
Normal file
6
models/sale_order.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
class SaleOrder(models.Model):
|
||||||
|
_inherit = 'sale.order'
|
||||||
|
|
||||||
|
partner_id = fields.Many2one(tracking=True)
|
||||||
58
models/sale_order_line.py
Normal file
58
models/sale_order_line.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
class SaleOrderLine(models.Model):
|
||||||
|
_inherit = 'sale.order.line'
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
lines = super(SaleOrderLine, self).create(vals_list)
|
||||||
|
for line in lines:
|
||||||
|
if line.order_id:
|
||||||
|
# Log creation
|
||||||
|
msg = f"Line added: {line.product_id.display_name} (Qty: {line.product_uom_qty})"
|
||||||
|
line.order_id.message_post(body=msg)
|
||||||
|
return lines
|
||||||
|
|
||||||
|
def write(self, vals):
|
||||||
|
# Capture old values for tracking
|
||||||
|
changes = {}
|
||||||
|
track_fields = ['product_id', 'product_uom_qty']
|
||||||
|
|
||||||
|
# Only track if relevant fields are being modified
|
||||||
|
if any(f in vals for f in track_fields):
|
||||||
|
for line in self:
|
||||||
|
changes[line.id] = {
|
||||||
|
'product_id': line.product_id,
|
||||||
|
'product_uom_qty': line.product_uom_qty,
|
||||||
|
}
|
||||||
|
|
||||||
|
result = super(SaleOrderLine, self).write(vals)
|
||||||
|
|
||||||
|
for line in self:
|
||||||
|
if line.id in changes:
|
||||||
|
old_data = changes[line.id]
|
||||||
|
|
||||||
|
# Track Product Change
|
||||||
|
if 'product_id' in vals:
|
||||||
|
new_product = line.product_id
|
||||||
|
old_product = old_data['product_id']
|
||||||
|
if old_product != new_product:
|
||||||
|
msg = f"Product changed on line: {old_product.display_name or 'None'} -> {new_product.display_name or 'None'}"
|
||||||
|
line.order_id.message_post(body=msg)
|
||||||
|
|
||||||
|
# Track Quantity Change
|
||||||
|
if 'product_uom_qty' in vals:
|
||||||
|
new_qty = line.product_uom_qty
|
||||||
|
old_qty = old_data['product_uom_qty']
|
||||||
|
if old_qty != new_qty:
|
||||||
|
msg = f"Quantity changed for {line.product_id.display_name}: {old_qty} -> {new_qty}"
|
||||||
|
line.order_id.message_post(body=msg)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def unlink(self):
|
||||||
|
for line in self:
|
||||||
|
if line.order_id and line.product_id:
|
||||||
|
msg = f"Line removed: {line.product_id.display_name} (Qty: {line.product_uom_qty})"
|
||||||
|
line.order_id.message_post(body=msg)
|
||||||
|
return super(SaleOrderLine, self).unlink()
|
||||||
Loading…
Reference in New Issue
Block a user