[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:
Rémy Voet (ryv)
2021-07-02 10:27:23 +00:00
committed by William Henrotin
parent beec2f9ccf
commit c19ac9e30a
+20 -1
View File
@@ -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'