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
+