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.
 
 
 
 

161 lines
5.7 KiB

/** ***************************************************************************
Copyright (C) 2017 - Today: GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
******************************************************************************/
odoo.define('pos_order_to_sale_order.screens', function (require) {
"use strict";
var screens = require('point_of_sale.screens');
var gui = require('point_of_sale.gui');
var core = require('web.core');
var framework = require('web.framework');
var rpc = require('web.rpc');
var _t = core._t;
/** **********************************************************************
New Widget CreateSaleOrderButtonWidget:
* On click, display a new screen to select the action to do
*/
var CreateSaleOrderButtonWidget = screens.ActionButtonWidget.extend({
template: 'CreateSaleOrderButtonWidget',
button_click: function () {
if (this.pos.get_order().get_client()) {
this.gui.show_screen('create_sale_order');
} else {
this.gui.show_popup('error', {
'title': _t('No customer defined'),
'body': _t(
'You should select a customer in order to create' +
' a Sale Order.'),
});
}
},
is_visible: function () {
return this.pos.get_order().orderlines.length > 0;
},
});
screens.define_action_button({
'name': 'create_sale_order',
'widget': CreateSaleOrderButtonWidget,
'condition': function () {
return this.pos.config.iface_create_sale_order;
},
});
screens.OrderWidget.include({
update_summary: function () {
this._super();
if (this.getParent().action_buttons &&
this.getParent().action_buttons.create_sale_order) {
this.getParent().action_buttons.create_sale_order.renderElement();
}
},
});
/** **********************************************************************
New ScreenWidget CreateSaleOrderScreenWidget:
* On show, display all buttons, depending on the pos configuration
*/
var CreateSaleOrderScreenWidget = screens.ScreenWidget.extend({
template: 'CreateSaleOrderScreenWidget',
auto_back: true,
show: function(){
var self = this;
this._super();
this.renderElement();
this.$('.back').click(function(){
self.gui.back();
});
if (!this.pos.config.iface_create_draft_sale_order) {
this.$('#button-create-draft-order').addClass('oe_hidden');
}
if (!this.pos.config.iface_create_confirmed_sale_order) {
this.$('#button-create-confirmed-order').addClass('oe_hidden');
}
if (!this.pos.config.iface_create_delivered_sale_order) {
this.$('#button-create-delivered-order').addClass('oe_hidden');
}
this.$('.paymentmethod').click(function(event){
self.click_sale_order_button(event.currentTarget.attributes.action.nodeValue);
});
},
click_sale_order_button: function(action) {
var self = this;
this.gui.show_popup('confirm', {
'title': _t(
'Create Sale Order and discard the current' +
' PoS Order?'),
'body': _t(
"This operation will permanently discard the current PoS" +
" Order and create a Sale Order, based on the" +
" current order lines."),
confirm: function(){
framework.blockUI();
rpc.query({
model: 'sale.order',
method: 'create_order_from_pos',
args: [self.pos.get('selectedOrder').export_as_JSON(), action],
}).then(function (result) {
self.hook_create_sale_order_success(result);
}).fail(function (error, event) {
self.hook_create_sale_order_error(error, event);
});
},
});
},
/**
* Overloadable function to make custom action after Sale order
* Creation succeeded
*/
hook_create_sale_order_success: function (result) {
framework.unblockUI();
this.pos.get('selectedOrder').destroy();
},
/**
* Overloadable function to make custom action after Sale order
* Creation failed
*/
hook_create_sale_order_error: function (error, event) {
framework.unblockUI();
event.preventDefault();
if (error.code === 200) {
// Business Logic Error, not a connection problem
this.gui.show_popup('error-traceback', {
'title': error.data.message,
'body': error.data.debug,
});
} else {
// Connexion problem
this.gui.show_popup('error', {
'title': _t('The order could not be sent'),
'body': _t('Check your internet connection and try again.'),
});
}
},
});
gui.define_screen({
'name': 'create_sale_order',
'widget': CreateSaleOrderScreenWidget,
'condition': function () {
return this.pos.config.iface_create_sale_order;
},
});
});