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
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;
|
|
},
|
|
});
|
|
|
|
});
|