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.
102 lines
4.2 KiB
102 lines
4.2 KiB
/* License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). */
|
|
|
|
|
|
odoo.define("pos_mail_receipt.screens", function (require) {
|
|
"use strict";
|
|
|
|
var screens = require('point_of_sale.screens');
|
|
var rpc = require('web.rpc');
|
|
var core = require('web.core');
|
|
var _t = core._t;
|
|
|
|
var ReceiptScreenWidget = screens.ReceiptScreenWidget.include({
|
|
renderElement: function() {
|
|
this._super();
|
|
var self = this;
|
|
this.$('.button.email').click(function(){
|
|
if (!self._locked) {
|
|
self.email();
|
|
}
|
|
});
|
|
},
|
|
click_next: function() {
|
|
this._super();
|
|
this.$('.button.email').removeClass("highlight");
|
|
},
|
|
email: function() {
|
|
var self = this;
|
|
var email = false;
|
|
var body_from_ui = this.$('.pos-receipt-container').html()
|
|
if( this.pos.get_order().get_client() && this.pos.get_order().get_client().email ) {
|
|
self._send_email_server(this.pos.get_order().name, {"email": this.pos.get_order().get_client().email, "body_from_ui": body_from_ui});
|
|
} else {
|
|
this.gui.show_popup('textinput', {
|
|
'title':_t('E-mail address to use'),
|
|
'value': '',
|
|
'confirm': function(value) {
|
|
self._send_email_server(self.pos.get_order().name, {"email": value, "body_from_ui": body_from_ui});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
// ask the server to send the ticket as e-mail
|
|
// available options:
|
|
// - timeout: timeout for the rpc call in ms
|
|
// - email: email to use instead of the partner's
|
|
// returns a deferred
|
|
_send_email_server: async function (order, options) {
|
|
var self = this;
|
|
options = options || {};
|
|
var timeout = typeof options.timeout === 'number' ? options.timeout : 7500;
|
|
this.$('.button.email').addClass("highlight");
|
|
while (self.pos.get("synch").state == "connecting") {
|
|
await sleep(1000);
|
|
}
|
|
|
|
return rpc.query({
|
|
model: 'pos.order',
|
|
method: 'send_mail_receipt',
|
|
args: [order, options["email"], options["body_from_ui"]],
|
|
}, {
|
|
timeout: timeout,
|
|
})
|
|
.then(function (result) {
|
|
return true
|
|
}).fail(function (type, error){
|
|
var connection_problem = true;
|
|
for (var i = 0; i < self.pos.db.get_orders().length; i++) {
|
|
if (order == self.pos.db.get_orders()[i].data.name) {
|
|
self.pos.db.get_orders()[i].data["email"] = options["email"] || false;
|
|
self.pos.db.get_orders()[i].data["body_from_ui"] = options["body_from_ui"] || false;
|
|
connection_problem = false;
|
|
}
|
|
}
|
|
if(error.code === 200 ){
|
|
// Business Logic Error, not a connection problem
|
|
//if warning do not need to display traceback!!
|
|
if (error.data.exception_type == 'warning') {
|
|
delete error.data.debug;
|
|
}
|
|
|
|
self.gui.show_popup('error-traceback',{
|
|
'title': error.data.message,
|
|
'body': error.data.debug
|
|
});
|
|
self.$('.button.email').removeClass("highlight");
|
|
}
|
|
if(connection_problem){
|
|
self.gui.show_popup('error',{
|
|
'title': _t('The e-mail could not be sent'),
|
|
'body': _t('The e-mail could not be sent to ') + options["email"] + _t('. Check your internet connection and try again.'),
|
|
});
|
|
self.$('.button.email').removeClass("highlight");
|
|
}
|
|
});
|
|
},
|
|
});
|
|
|
|
});
|
|
|
|
function sleep(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|