[FIX] purchase: fix forbidden access of partner
Issue: For purchase user, which doesn't have the "Contact Creation" can't create a purchase, get a AccessError. The fields `receipt_reminder_email` and `reminder_date_before_receipt` should be writable also for purchase user which doesn't have access to write and create `res.partner`. close odoo/odoo#64135 closes odoo/odoo#73131 X-original-commit: f29b1e81e6adf8532ecf90f9ecb675ec56eb4c61 Signed-off-by: William Henrotin <Whenrow@users.noreply.github.com>
This commit is contained in:
committed by
William Henrotin
parent
beec2f9ccf
commit
c19ac9e30a
@@ -202,6 +202,13 @@ class PurchaseOrder(models.Model):
|
||||
if self.date_planned:
|
||||
self.order_line.filtered(lambda line: not line.display_type).date_planned = self.date_planned
|
||||
|
||||
def write(self, vals):
|
||||
vals, partner_vals = self._write_partner_values(vals)
|
||||
res = super().write(vals)
|
||||
if partner_vals:
|
||||
self.partner_id.sudo().write(partner_vals) # Because the purchase user doesn't have write on `res.partner`
|
||||
return res
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
company_id = vals.get('company_id', self.default_get(['company_id'])['company_id'])
|
||||
@@ -212,7 +219,11 @@ class PurchaseOrder(models.Model):
|
||||
if 'date_order' in vals:
|
||||
seq_date = fields.Datetime.context_timestamp(self, fields.Datetime.to_datetime(vals['date_order']))
|
||||
vals['name'] = self_comp.env['ir.sequence'].next_by_code('purchase.order', sequence_date=seq_date) or '/'
|
||||
return super(PurchaseOrder, self_comp).create(vals)
|
||||
vals, partner_vals = self._write_partner_values(vals)
|
||||
res = super(PurchaseOrder, self_comp).create(vals)
|
||||
if partner_vals:
|
||||
res.sudo().write(partner_vals) # Because the purchase user doesn't have write on `res.partner`
|
||||
return res
|
||||
|
||||
@api.ondelete(at_uninstall=False)
|
||||
def _unlink_if_cancelled(self):
|
||||
@@ -841,6 +852,14 @@ class PurchaseOrder(models.Model):
|
||||
new_receipt_date=date.date()
|
||||
)
|
||||
|
||||
def _write_partner_values(self, vals):
|
||||
partner_values = {}
|
||||
if 'receipt_reminder_email' in vals:
|
||||
partner_values['receipt_reminder_email'] = vals.pop('receipt_reminder_email')
|
||||
if 'reminder_date_before_receipt' in vals:
|
||||
partner_values['reminder_date_before_receipt'] = vals.pop('reminder_date_before_receipt')
|
||||
return vals, partner_values
|
||||
|
||||
|
||||
class PurchaseOrderLine(models.Model):
|
||||
_name = 'purchase.order.line'
|
||||
|
||||
Reference in New Issue
Block a user