diff --git a/addons/portal/static/src/js/portal_signature.js b/addons/portal/static/src/js/portal_signature.js index eb58234907c..b0c4690a76b 100644 --- a/addons/portal/static/src/js/portal_signature.js +++ b/addons/portal/static/src/js/portal_signature.js @@ -40,6 +40,7 @@ odoo.define('portal.signature_form', function (require){ 'decor-color': '#D1D0CE', 'color': '#000', 'background-color': '#fff', + 'height': '142px', }); this.empty_sign = this.$("#o_portal_signature").jSignature('getData', 'image'); }, @@ -60,7 +61,7 @@ odoo.define('portal.signature_form', function (require){ var signature = self.$("#o_portal_signature").jSignature('getData', 'image'); var is_empty = signature ? this.empty_sign[1] === signature[1] : true; - this.$('#o_portal_sign_name').toggleClass('has-error', !partner_name); + this.$('#o_portal_sign_name').parent().toggleClass('has-error', !partner_name); this.$('#o_portal_sign_draw').toggleClass('panel-danger', is_empty).toggleClass('panel-default', !is_empty); if (is_empty || ! partner_name) { return false; @@ -85,8 +86,8 @@ odoo.define('portal.signature_form', function (require){ } else if (data.success) { $confirm_btn.remove(); - var $prout = qweb.render("portal.portal_signature_success", {widget: data}); - self.$('#o_portal_sign_draw').parent().replaceWith($prout); + var $success = qweb.render("portal.portal_signature_success", {widget: data}); + self.$('#o_portal_sign_draw').parent().replaceWith($success); } }); }, diff --git a/addons/portal/static/src/xml/portal_signature.xml b/addons/portal/static/src/xml/portal_signature.xml index a82d7ec89aa..4b0ca5344d1 100644 --- a/addons/portal/static/src/xml/portal_signature.xml +++ b/addons/portal/static/src/xml/portal_signature.xml @@ -15,16 +15,16 @@
-
- +
+
- \ No newline at end of file + diff --git a/addons/portal/views/portal_templates.xml b/addons/portal/views/portal_templates.xml index 80b864183fd..7cb351818fc 100644 --- a/addons/portal/views/portal_templates.xml +++ b/addons/portal/views/portal_templates.xml @@ -368,6 +368,7 @@ t-att-data-res-model="object._name" t-att-data-res-id="object.id" t-att-data-call-url="callUrl" + t-att-data-sign-label="signLabel" t-att-data-access-token="accessToken"/> diff --git a/addons/sale/controllers/portal.py b/addons/sale/controllers/portal.py index 1f6880c5ada..d78746014c4 100644 --- a/addons/sale/controllers/portal.py +++ b/addons/sale/controllers/portal.py @@ -204,18 +204,16 @@ class CustomerPortal(CustomerPortal): def portal_quote_accept(self, res_id, access_token=None, partner_name=None, signature=None): if request.env['ir.config_parameter'].sudo().get_param( 'sale.sale_portal_confirmation_options', default='none') not in ('pay', 'sign'): - return False + return {'error': _('Operation not allowed')} + if not signature: + return {'error': _('Signature is missing.')} try: order_sudo = self._order_check_access(res_id, access_token=access_token) except AccessError: - return { - 'error': _('Invalid order') - } - + return {'error': _('Invalid order')} if order_sudo.state != 'sent': - return { - 'error': _('Order is not in a state requiring customer validation.') - } + return {'error': _('Order is not in a state requiring customer validation.')} + order_sudo.action_confirm() _message_post_helper( diff --git a/addons/sale/views/sale_portal_templates.xml b/addons/sale/views/sale_portal_templates.xml index 1fbe7a3cdd2..d38b93cb821 100644 --- a/addons/sale/views/sale_portal_templates.xml +++ b/addons/sale/views/sale_portal_templates.xml @@ -317,11 +317,12 @@
-

Accept order

+

Accept & Sign

+