summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <andrifebriyadiputra@gmail.com>2025-05-07 16:55:43 +0700
committerIndoteknik . <andrifebriyadiputra@gmail.com>2025-05-07 16:55:43 +0700
commit8923005630ca26e9863f71c031a28183eb590727 (patch)
tree1db388ff37ebd1ce6e13dc856e3713c0a22ab110
parentd3df18ba29101fbce6a249915436d741a70ad810 (diff)
(andri) setiap melakukan edit product, history perubahan akan tercatat di log note
-rwxr-xr-xindoteknik_custom/models/product_template.py75
1 files changed, 70 insertions, 5 deletions
diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py
index a09570f4..8e475f95 100755
--- a/indoteknik_custom/models/product_template.py
+++ b/indoteknik_custom/models/product_template.py
@@ -388,12 +388,77 @@ class ProductTemplate(models.Model):
self.env['token.storage'].create([values])
return values
+ # simpan data lama
+ def _collect_old_values(self, vals):
+ return {
+ record.id: {
+ field_name: record[field_name]
+ for field_name in vals.keys()
+ if field_name in record._fields
+ }
+ for record in self
+ }
+
+ # log perubahan field
+ def _log_field_changes(self, vals, old_values):
+ exclude_fields = ['solr_flag', 'desc_update_solr', 'last_update_solr', 'is_edited']
+
+ for record in self:
+ changes = []
+ for field_name in vals:
+ if field_name not in record._fields or field_name in exclude_fields:
+ continue
+
+ field = record._fields[field_name]
+ field_label = field.string or field_name
+ old_value = old_values.get(record.id, {}).get(field_name)
+ new_value = record[field_name] # nilai setelah write
+
+ def stringify(val):
+ if val in [None, False]:
+ return 'None'
+ if isinstance(field, fields.Selection):
+ return dict(field.selection).get(val, str(val))
+ if isinstance(field, fields.Boolean):
+ return 'Yes' if val else 'No'
+ if isinstance(field, fields.Many2one):
+ return val.name if hasattr(val, 'name') else str(val)
+ if isinstance(field, fields.Many2many):
+ records = val if isinstance(val, models.Model) else val
+ names = []
+ if records:
+ for attr in ['name', 'x_name', 'display_name']:
+ if hasattr(records[0], attr):
+ names = records.mapped(attr)
+ break
+ if not names:
+ names = [str(r.id) for r in records]
+ return ", ".join(names) if names else 'None'
+ return str(val)
+
+ old_val_str = stringify(old_value)
+ new_val_str = stringify(new_value)
+
+ if old_val_str != new_val_str:
+ changes.append(f"<li><b>{field_label}</b>: '{old_val_str}' → '{new_val_str}'</li>")
+
+ if changes:
+ message = "<b>Updated:</b><ul>%s</ul>" % "".join(changes)
+ record.message_post(body=message)
+
+ # simpan data lama dan log perubahan field
def write(self, vals):
- # for rec in self:
- # if rec.id == 224484:
- # raise UserError('Tidak dapat mengubah produk sementara')
-
- return super(ProductTemplate, self).write(vals)
+ old_values = self._collect_old_values(vals)
+ result = super().write(vals)
+ self._log_field_changes(vals, old_values)
+ return result
+
+ # def write(self, vals):
+ # # for rec in self:
+ # # if rec.id == 224484:
+ # # raise UserError('Tidak dapat mengubah produk sementara')
+ # self._log_field_changes(vals)
+ # return super(ProductTemplate, self).write(vals)
class ProductProduct(models.Model):
_inherit = "product.product"