73 lines
3.3 KiB
Python
73 lines
3.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo import _, api, Command, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class SignRequestShare(models.TransientModel):
|
|
_name = 'sign.request.share'
|
|
_description = 'Sign request share wizard'
|
|
|
|
template_id = fields.Many2one('sign.template', required=True)
|
|
sign_request_id = fields.Many2one('sign.request')
|
|
|
|
is_shared = fields.Boolean(required=True) # Default sharing status for the sign request
|
|
share_link = fields.Char(related="sign_request_id.share_link")
|
|
validity = fields.Date(related="sign_request_id.validity", readonly=False)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
for vals in vals_list:
|
|
if not vals.get("sign_request_id"):
|
|
template_id = self.env["sign.template"].browse(int(vals.get("template_id")))
|
|
if template_id:
|
|
if len(template_id.sign_item_ids.mapped('responsible_id')) > 1:
|
|
raise ValidationError(_("You cannot share this document by link, because it has fields to be filled by different roles. Use Send button instead."))
|
|
|
|
# Creating the sign request on `create` is required in order to be able to generate
|
|
# a `share_link` when the sign request doesn't already exist
|
|
vals["sign_request_id"] = self.env["sign.request"].create({
|
|
'template_id': template_id.id,
|
|
'request_item_ids': [Command.create({'role_id': template_id.sign_item_ids.responsible_id.id or self.env.ref('sign.sign_item_role_default').id})],
|
|
'reference': "%s" % (template_id.name),
|
|
'state': 'shared',
|
|
'validity': fields.Date.today() + relativedelta(days=template_id.signature_request_validity) if template_id.signature_request_validity else None
|
|
}).id
|
|
|
|
vals['is_shared'] = True
|
|
return super().create(vals_list)
|
|
|
|
def action_copy_and_close(self):
|
|
self.ensure_one()
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'sign_share_and_close_action',
|
|
'params': {
|
|
'share_link': self.share_link,
|
|
}
|
|
}
|
|
|
|
def action_stop_sharing(self):
|
|
self.ensure_one()
|
|
self.sign_request_id.unlink()
|
|
self.is_shared = False
|
|
return {'type': 'ir.actions.act_window_close'}
|
|
|
|
def action_close_request(self):
|
|
self.ensure_one()
|
|
if not self.is_shared and self.sign_request_id:
|
|
# Cleaning up is needed when the wizard is closed and the sign request didn't exist
|
|
# beforehand. This is linked to the behaviour of `create` where we create the sign
|
|
# request if it doesn't exist already.
|
|
self.sign_request_id.unlink()
|
|
return {'type': 'ir.actions.act_window_close'}
|
|
|
|
@api.constrains('validity')
|
|
def _check_validity_not_passed(self):
|
|
for record in self:
|
|
if record.validity and record.validity < fields.Date.today():
|
|
raise ValidationError(_(
|
|
"The sign request validity cannot be set in the past."
|
|
))
|