diff options
| author | Indoteknik . <andrifebriyadiputra@gmail.com> | 2025-05-07 16:55:43 +0700 |
|---|---|---|
| committer | Indoteknik . <andrifebriyadiputra@gmail.com> | 2025-05-07 16:55:43 +0700 |
| commit | 8923005630ca26e9863f71c031a28183eb590727 (patch) | |
| tree | 1db388ff37ebd1ce6e13dc856e3713c0a22ab110 | |
| parent | d3df18ba29101fbce6a249915436d741a70ad810 (diff) | |
(andri) setiap melakukan edit product, history perubahan akan tercatat di log note
| -rwxr-xr-x | indoteknik_custom/models/product_template.py | 75 |
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" |
