1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
odoo.define('l10n_fr_pos_cert.pos', function (require) {
"use strict";
const { Gui } = require('point_of_sale.Gui');
var models = require('point_of_sale.models');
var rpc = require('web.rpc');
var session = require('web.session');
var core = require('web.core');
var utils = require('web.utils');
var _t = core._t;
var round_di = utils.round_decimals;
var _super_posmodel = models.PosModel.prototype;
models.PosModel = models.PosModel.extend({
is_french_country: function(){
var french_countries = ['FR', 'MF', 'MQ', 'NC', 'PF', 'RE', 'GF', 'GP', 'TF'];
if (!this.company.country) {
Gui.showPopup("ErrorPopup", {
'title': _t("Missing Country"),
'body': _.str.sprintf(_t('The company %s doesn\'t have a country set.'), this.company.name),
});
return false;
}
return _.contains(french_countries, this.company.country.code);
},
delete_current_order: function () {
if (this.is_french_country() && this.get_order().get_orderlines().length) {
Gui.showPopup("ErrorPopup", {
'title': _t("Fiscal Data Module error"),
'body': _t("Deleting of orders is not allowed."),
});
} else {
_super_posmodel.delete_current_order.apply(this, arguments);
}
},
disallowLineQuantityChange() {
let result = _super_posmodel.disallowLineQuantityChange.bind(this)();
return this.is_french_country() || result;
}
});
var _super_order = models.Order.prototype;
models.Order = models.Order.extend({
initialize: function() {
_super_order.initialize.apply(this,arguments);
this.l10n_fr_hash = this.l10n_fr_hash || false;
this.save_to_db();
},
export_for_printing: function() {
var result = _super_order.export_for_printing.apply(this,arguments);
result.l10n_fr_hash = this.get_l10n_fr_hash();
return result;
},
set_l10n_fr_hash: function (l10n_fr_hash){
this.l10n_fr_hash = l10n_fr_hash;
},
get_l10n_fr_hash: function() {
return this.l10n_fr_hash;
},
wait_for_push_order: function() {
var result = _super_order.wait_for_push_order.apply(this,arguments);
result = Boolean(result || this.pos.is_french_country());
return result;
}
});
var orderline_super = models.Orderline.prototype;
models.Orderline = models.Orderline.extend({
can_be_merged_with: function(orderline) {
let order = this.pos.get_order();
let lastId = order.orderlines.last().cid;
if(this.pos.is_french_country() && (order.orderlines._byId[lastId].product.id !== orderline.product.id || order.orderlines._byId[lastId].quantity < 0)) {
return false;
} else {
return orderline_super.can_be_merged_with.apply(this, arguments);
}
}
});
});
|