Portofolio auto-sync: otomatis update saat transaksi berubah + tombol Rekalkulasi
- saat.transaksi.create/write/unlink memicu rekalkulasi portofolio otomatis (buka menu Portofolio selalu data segar, tanpa klik manual) - Tambah tombol 'Rekalkulasi' di form portofolio sbg cadangan (action_recalc_click) - Perbaiki help teks portofolio yg sebelumnya menyesatkan
This commit is contained in:
@@ -75,6 +75,19 @@ class SaatPortofolio(models.Model):
|
||||
'count': len(portfolios),
|
||||
}
|
||||
|
||||
def action_recalc_click(self):
|
||||
"""Tombol 'Rekalkulasi' untuk UI web: hitung ulang lalu muat ulang view list."""
|
||||
result = self.env['saat.portofolio'].action_recalculate()
|
||||
# kembalikan action window portofolio agar view ter-refresh
|
||||
action = {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Portofolio',
|
||||
'res_model': 'saat.portofolio',
|
||||
'view_mode': 'list,form',
|
||||
'target': 'current',
|
||||
}
|
||||
return action
|
||||
|
||||
# --- computed store fields ---
|
||||
@api.depends('total_beli_lembar', 'total_jual_lembar')
|
||||
def _compute_sisa(self):
|
||||
|
||||
@@ -49,3 +49,24 @@ class SaatTransaksi(models.Model):
|
||||
raise models.ValidationError("Volume harus lebih dari 0.")
|
||||
if r.harga < 0:
|
||||
raise models.ValidationError("Harga tidak boleh negatif.")
|
||||
|
||||
# --- auto-sync portofolio: setiap transaksi berubah, portofolio diperbarui ---
|
||||
def _resync_portofolio(self):
|
||||
"""Rekalkulasi portofolio dari seluruh transaksi (idempoten)."""
|
||||
self.env['saat.portofolio'].action_recalculate()
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
res = super().create(vals_list)
|
||||
res._resync_portofolio()
|
||||
return res
|
||||
|
||||
def write(self, vals):
|
||||
res = super().write(vals)
|
||||
self._resync_portofolio()
|
||||
return res
|
||||
|
||||
def unlink(self):
|
||||
res = super().unlink()
|
||||
self._resync_portofolio()
|
||||
return res
|
||||
|
||||
Reference in New Issue
Block a user