You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.9 KiB
154 lines
5.9 KiB
odoo.define('web_widget_digitized_signature.web_digital_sign', function(require) {
|
|
"use strict";
|
|
|
|
var core = require('web.core');
|
|
var BasicFields= require('web.basic_fields');
|
|
var FormController = require('web.FormController');
|
|
var Registry = require('web.field_registry');
|
|
var utils = require('web.utils');
|
|
var session = require('web.session');
|
|
var field_utils = require('web.field_utils');
|
|
|
|
var _t = core._t;
|
|
var QWeb = core.qweb;
|
|
|
|
var FieldSignature = BasicFields.FieldBinaryImage.extend({
|
|
template: 'FieldSignature',
|
|
events: _.extend({}, BasicFields.FieldBinaryImage.prototype.events, {
|
|
'click .save_sign': '_on_save_sign',
|
|
'click #sign_clean': '_on_clear_sign'
|
|
}),
|
|
jsLibs: ['/web_widget_digitized_signature/static/lib/jSignature/jSignatureCustom.js'],
|
|
placeholder: "/web/static/src/img/placeholder.png",
|
|
init: function() {
|
|
this._super.apply(this, arguments);
|
|
this.sign_options = {
|
|
'decor-color': '#D1D0CE',
|
|
'color': '#000',
|
|
'background-color': '#fff',
|
|
'height': '150',
|
|
'width': '550'
|
|
};
|
|
this.empty_sign = [];
|
|
},
|
|
start: function() {
|
|
var self = this;
|
|
this.$(".signature").jSignature("init", this.sign_options);
|
|
this.$(".signature").attr({
|
|
"tabindex": "0",
|
|
'height': "100"
|
|
});
|
|
this.empty_sign = this.$(".signature").jSignature("getData", 'image');
|
|
self._render();
|
|
},
|
|
_on_clear_sign: function() {
|
|
this.$(".signature > canvas").remove();
|
|
this.$('> img').remove();
|
|
this.$(".signature").attr("tabindex", "0");
|
|
var sign_options = {
|
|
'decor-color': '#D1D0CE',
|
|
'color': '#000',
|
|
'background-color': '#fff',
|
|
'height': '150',
|
|
'width': '550',
|
|
'clear': true
|
|
};
|
|
this.$(".signature").jSignature(sign_options);
|
|
this.$(".signature").focus();
|
|
this._setValue(false);
|
|
},
|
|
_on_save_sign: function(value_) {
|
|
var self = this;
|
|
this.$('> img').remove();
|
|
var signature = this.$(".signature").jSignature("getData", 'image');
|
|
var is_empty = signature ?
|
|
self.empty_sign[1] === signature[1] :
|
|
false;
|
|
if (!is_empty && typeof signature !== "undefined" && signature[1]) {
|
|
this._setValue(signature[1]);
|
|
}
|
|
},
|
|
_render: function() {
|
|
var self = this;
|
|
var url = this.placeholder;
|
|
if (this.value && !utils.is_bin_size(this.value)) {
|
|
url = 'data:image/png;base64,' + this.value;
|
|
} else if (this.value) {
|
|
url = session.url('/web/image', {
|
|
model: this.model,
|
|
id: JSON.stringify(this.res_id),
|
|
field: this.nodeOptions.preview_image || this.name,
|
|
unique: field_utils.format.datetime(this.recordData.__last_update).replace(/[^0-9]/g, ''),
|
|
});
|
|
} else {
|
|
url = this.placeholder;
|
|
}
|
|
if (this.mode === "readonly") {
|
|
var $img = $(QWeb.render("FieldBinaryImage-img", {
|
|
widget: self,
|
|
url: url
|
|
}));
|
|
this.$('> img').remove();
|
|
this.$(".signature").hide();
|
|
this.$el.prepend($img);
|
|
$img.on('error', function() {
|
|
self.on_clear();
|
|
$img.attr('src', self.placeholder);
|
|
self.do_warn(_t("Image"), _t("Could not display the selected image."));
|
|
});
|
|
} else if (this.mode === "edit") {
|
|
this.$('> img').remove();
|
|
if (this.value) {
|
|
var field_name = this.nodeOptions.preview_image ?
|
|
this.nodeOptions.preview_image :
|
|
this.name;
|
|
self._rpc({
|
|
model: this.model,
|
|
method: 'read',
|
|
args: [this.res_id, [field_name]]
|
|
}).done(function(data) {
|
|
if (data) {
|
|
var field_desc = _.values(_.pick(data[0], field_name));
|
|
self.$(".signature").jSignature("clear");
|
|
self.$(".signature").jSignature("setData", 'data:image/png;base64,' + field_desc[0]);
|
|
}
|
|
});
|
|
} else {
|
|
this.$('> img').remove();
|
|
this.$('.signature > canvas').remove();
|
|
var sign_options = {
|
|
'decor-color': '#D1D0CE',
|
|
'color': '#000',
|
|
'background-color': '#fff',
|
|
'height': '150',
|
|
'width': '550'
|
|
};
|
|
this.$(".signature").jSignature("init", sign_options);
|
|
}
|
|
} else if (this.mode === 'create') {
|
|
this.$('> img').remove();
|
|
this.$('> canvas').remove();
|
|
if (!this.value) {
|
|
this.$(".signature").empty().jSignature("init", {
|
|
'decor-color': '#D1D0CE',
|
|
'color': '#000',
|
|
'background-color': '#fff',
|
|
'height': '150',
|
|
'width': '550'
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
FormController.include({
|
|
saveRecord: function() {
|
|
this.$('.save_sign').click();
|
|
return this._super.apply(this, arguments);
|
|
}
|
|
});
|
|
|
|
Registry.add('signature', FieldSignature);
|
|
|
|
|
|
});
|