Skip to content

Commit a3c4ce2

Browse files
committed
[IMP]pos_order_to_sale_order: Allow add the commitment date.
1 parent 9d3b8e6 commit a3c4ce2

14 files changed

+126
-30
lines changed

pos_order_to_sale_order/README.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ Contributors
117117

118118
* Sylvain LE GAL (https://www.twitter.com/legalsylvain)
119119

120+
* `Binhex <https://binhex.cloud>`_:
121+
122+
* Adasat Torres de León <[email protected]>
123+
120124
Maintainers
121125
~~~~~~~~~~~
122126

pos_order_to_sale_order/__manifest__.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
{
66
"name": "PoS Order To Sale Order",
7-
"version": "16.0.1.0.9",
7+
"version": "16.0.1.1.9",
88
"author": "GRAP,Odoo Community Association (OCA)",
99
"category": "Point Of Sale",
1010
"license": "AGPL-3",
@@ -15,11 +15,9 @@
1515
"data": ["views/view_res_config_settings.xml"],
1616
"assets": {
1717
"point_of_sale.assets": [
18-
"pos_order_to_sale_order/static/src/css/pos.css",
19-
"pos_order_to_sale_order/static/src/js/CreateOrderButton.js",
20-
"pos_order_to_sale_order/static/src/js/CreateOrderPopup.js",
21-
"pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml",
22-
"pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml",
18+
"pos_order_to_sale_order/static/src/css/**.css",
19+
"pos_order_to_sale_order/static/src/xml/**.xml",
20+
"pos_order_to_sale_order/static/src/js/**.js",
2321
],
2422
"web.assets_tests": [
2523
"pos_order_to_sale_order/static/tests/**/*.js",

pos_order_to_sale_order/models/pos_config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ class PosConfig(models.Model):
4747
" Only invoice payment process will be possible.",
4848
)
4949

50+
iface_sale_order_allow_commitment_date = fields.Boolean(
51+
string="Allow Add Commitment Date",
52+
default=True,
53+
help="If checked, the cashier will have the possibility to add"
54+
" a commitment date on the sale order.",
55+
)
56+
5057
@api.depends(
5158
"iface_create_draft_sale_order",
5259
"iface_create_confirmed_sale_order",

pos_order_to_sale_order/models/res_config_settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ class ResConfigSettings(models.TransientModel):
2323
pos_iface_create_invoiced_sale_order = fields.Boolean(
2424
related="pos_config_id.iface_create_invoiced_sale_order", readonly=False
2525
)
26+
27+
iface_sale_order_allow_commitment_date = fields.Boolean(
28+
related="pos_config_id.iface_sale_order_allow_commitment_date", readonly=False
29+
)

pos_order_to_sale_order/models/sale_order.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
44

5+
from datetime import datetime
6+
57
from odoo import Command, _, api, models
68

79

@@ -17,13 +19,20 @@ def _prepare_from_pos(self, order_data):
1719
Command.create(SaleOrderLine._prepare_from_pos(sequence, line_data[2]))
1820
for sequence, line_data in enumerate(order_data["lines"], start=1)
1921
]
22+
if order_data.get("commitment_date", False):
23+
commitment_date = datetime.strptime(
24+
order_data["commitment_date"], "%Y-%m-%dT%H:%M:%S.%fZ"
25+
)
2026
return {
2127
"partner_id": order_data["partner_id"],
2228
"origin": _("Point of Sale %s") % (session.name),
2329
"client_order_ref": order_data["name"],
2430
"user_id": order_data["user_id"],
2531
"pricelist_id": order_data["pricelist_id"],
2632
"fiscal_position_id": order_data["fiscal_position_id"],
33+
"commitment_date": (
34+
commitment_date if order_data.get("commitment_date") else False
35+
),
2736
"order_line": order_lines,
2837
}
2938

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
* Sylvain LE GAL (https://www.twitter.com/legalsylvain)
2+
3+
* `Binhex <https://binhex.cloud>`_:
4+
5+
* Adasat Torres de León <[email protected]>

pos_order_to_sale_order/static/description/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,10 @@ <h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
464464
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
465465
<ul class="simple">
466466
<li>Sylvain LE GAL (<a class="reference external" href="https://www.twitter.com/legalsylvain">https://www.twitter.com/legalsylvain</a>)</li>
467+
<li><a class="reference external" href="https://binhex.cloud">Binhex</a>:<ul>
468+
<li>Adasat Torres de León &lt;<a class="reference external" href="mailto:a.torres&#64;binhex.cloud">a.torres&#64;binhex.cloud</a>&gt;</li>
469+
</ul>
470+
</li>
467471
</ul>
468472
</div>
469473
<div class="section" id="maintainers">

pos_order_to_sale_order/static/src/js/CreateOrderPopup.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,20 @@ odoo.define("point_of_sale.CreateOrderPopup", function (require) {
44
const AbstractAwaitablePopup = require("point_of_sale.AbstractAwaitablePopup");
55
const Registries = require("point_of_sale.Registries");
66
const framework = require("web.framework");
7-
87
class CreateOrderPopup extends AbstractAwaitablePopup {
98
setup() {
109
super.setup();
1110
this.createOrderClicked = false;
1211
}
1312

13+
get currentOrder() {
14+
return this.env.pos.get_order();
15+
}
16+
17+
async updateCommitmentDate(ev) {
18+
await this.currentOrder.set_commitment_date(ev.target.value);
19+
}
20+
1421
async createDraftSaleOrder() {
1522
await this._actionCreateSaleOrder("draft");
1623
}
@@ -30,24 +37,21 @@ odoo.define("point_of_sale.CreateOrderPopup", function (require) {
3037
async _actionCreateSaleOrder(order_state) {
3138
// Create Sale Order
3239
await this._createSaleOrder(order_state);
33-
3440
// Delete current order
35-
const current_order = this.env.pos.get_order();
36-
this.env.pos.removeOrder(current_order);
41+
this.env.pos.removeOrder(this.currentOrder);
3742
this.env.pos.add_new_order();
3843

3944
// Close popup
4045
return await super.confirm();
4146
}
4247

4348
async _createSaleOrder(order_state) {
44-
const current_order = this.env.pos.get_order();
4549
framework.blockUI();
4650
return await this.env.services
4751
.rpc({
4852
model: "sale.order",
4953
method: "create_order_from_pos",
50-
args: [current_order.export_as_JSON(), order_state],
54+
args: [this.currentOrder.export_as_JSON(), order_state],
5155
})
5256
.catch(function (error) {
5357
throw error;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/** @odoo-module **/
2+
3+
import {Order} from "point_of_sale.models";
4+
import Registries from "point_of_sale.Registries";
5+
6+
const PosOrderToSaleOrderCommitmentDate = (OriginalOrder) =>
7+
class extends OriginalOrder {
8+
constructor() {
9+
super(...arguments);
10+
this.commitment_date = false;
11+
}
12+
get_commitment_date() {
13+
return this.commitment_date;
14+
}
15+
set_commitment_date(commitment_date) {
16+
this.commitment_date = new Date(commitment_date).toISOString();
17+
}
18+
export_as_JSON() {
19+
const result = super.export_as_JSON(...arguments);
20+
result.commitment_date = this.get_commitment_date();
21+
return result;
22+
}
23+
init_from_JSON(json) {
24+
super.init_from_JSON(...arguments);
25+
this.set_commitment_date(json.commitment_date || false);
26+
}
27+
};
28+
29+
Registries.Model.extend(Order, PosOrderToSaleOrderCommitmentDate);
30+
31+
export default PosOrderToSaleOrderCommitmentDate;

pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22
<templates id="template" xml:space="preserve">
3-
43
<t t-name="CreateOrderPopup" owl="1">
54
<div class="popup popup-create-sale-order">
6-
75
<header>
86
<div class="title">Create Order</div>
97
</header>
10-
118
<main class="body">
12-
139
<table>
1410
<tbody>
11+
<tr
12+
t-if="env.pos.config.iface_sale_order_allow_commitment_date"
13+
>
14+
<td>
15+
<div class="row">
16+
<label
17+
class="col-sm-2 col-form-label"
18+
for="commitment_date"
19+
>
20+
Commitment Date
21+
</label>
22+
<input
23+
class="input col-sm-10"
24+
type="datetime-local"
25+
t-on-change="updateCommitmentDate"
26+
name="commitment_date"
27+
/>
28+
</div>
29+
</td>
30+
</tr>
1531
<tr t-if="env.pos.config.iface_create_draft_sale_order">
1632
<td>
1733
<div
@@ -25,7 +41,6 @@
2541
</div>
2642
</td>
2743
</tr>
28-
2944
<tr t-if="env.pos.config.iface_create_confirmed_sale_order">
3045
<td>
3146
<div
@@ -39,7 +54,6 @@
3954
</div>
4055
</td>
4156
</tr>
42-
4357
<tr t-if="env.pos.config.iface_create_delivered_sale_order">
4458
<td>
4559
<div
@@ -54,7 +68,6 @@
5468
</div>
5569
</td>
5670
</tr>
57-
5871
<tr t-if="env.pos.config.iface_create_invoiced_sale_order">
5972
<td>
6073
<div
@@ -69,18 +82,13 @@
6982
<span>Create Invoiced Sale Order</span>
7083
</div>
7184
</td>
72-
7385
</tr>
7486
</tbody>
7587
</table>
76-
7788
</main>
78-
7989
<footer class="footer">
8090
<div class="button" t-on-click="cancel">Discard</div>
8191
</footer>
82-
8392
</div>
8493
</t>
85-
8694
</templates>

pos_order_to_sale_order/static/tests/tours/PosOrderToSaleOrderTour.esm.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ ProductScreen.do.clickPartnerButton();
2828
ProductScreen.do.clickCustomer("Addison Olson");
2929

3030
PosOrderToSaleOrder.do.clickCreateOrderButton();
31+
PosOrderToSaleOrder.do.addCommitmentDate();
3132
PosOrderToSaleOrder.do.clickCreateInvoicedOrderButton();
3233

3334
ProductScreen.check.isShown();

pos_order_to_sale_order/static/tests/tours/helpers/PosOrderToSaleOrderMethods.esm.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,19 @@ class DoExt extends Do {
3232
},
3333
];
3434
}
35+
addCommitmentDate() {
36+
return [
37+
{
38+
content: "Add Commitment Date",
39+
trigger: ".popup-create-sale-order input[name='commitment_date']",
40+
run: () => {
41+
this.trigger("input", {
42+
target: {value: "2024-01-01T16:00:00"},
43+
});
44+
},
45+
},
46+
];
47+
}
3548
}
3649

3750
const methods = createTourMethods("PosOrderToSaleOrder", DoExt);

pos_order_to_sale_order/tests/test_module.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ def test_pos_order_to_sale_order(self):
6262
order.order_line[1].name,
6363
"'Product Note' must not contains in sale order line description",
6464
)
65+
self.assertTrue(
66+
order.commitment_date,
67+
)
68+
self.assertEqual(
69+
order.commitment_date.strftime("%Y-%m-%d %H:%M:%S"),
70+
"2024-01-01 16:00:00",
71+
)

pos_order_to_sale_order/views/view_res_config_settings.xml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<odoo>
3-
43
<record id="view_res_config_settings_form" model="ir.ui.view">
54
<field name="model">res.config.settings</field>
65
<field name="inherit_id" ref="point_of_sale.res_config_settings_view_form" />
76
<field name="arch" type="xml">
8-
97
<xpath expr="//div[@id='pos_technical_section']" position="after">
10-
118
<h2 name="create_sale_order">Sale Order Creation</h2>
129
<div class="row mt16 o_settings_container">
1310
<div class="col-12 col-lg-6 o_setting_box">
@@ -18,7 +15,6 @@
1815
<label for="pos_iface_create_draft_sale_order" />
1916
</div>
2017
</div>
21-
2218
<div class="col-12 col-lg-6 o_setting_box">
2319
<div class="o_setting_left_pane">
2420
<field name="pos_iface_create_confirmed_sale_order" />
@@ -27,7 +23,6 @@
2723
<label for="pos_iface_create_confirmed_sale_order" />
2824
</div>
2925
</div>
30-
3126
<div class="col-12 col-lg-6 o_setting_box">
3227
<div class="o_setting_left_pane">
3328
<field name="pos_iface_create_delivered_sale_order" />
@@ -36,7 +31,6 @@
3631
<label for="pos_iface_create_delivered_sale_order" />
3732
</div>
3833
</div>
39-
4034
<div class="col-12 col-lg-6 o_setting_box">
4135
<div class="o_setting_left_pane">
4236
<field name="pos_iface_create_invoiced_sale_order" />
@@ -45,6 +39,14 @@
4539
<label for="pos_iface_create_invoiced_sale_order" />
4640
</div>
4741
</div>
42+
<div class="col-12 col-lg-6 o_setting_box">
43+
<div class="o_setting_left_pane">
44+
<field name="iface_sale_order_allow_commitment_date" />
45+
</div>
46+
<div class="o_setting_right_pane">
47+
<label for="iface_sale_order_allow_commitment_date" />
48+
</div>
49+
</div>
4850
</div>
4951
</xpath>
5052
</field>

0 commit comments

Comments
 (0)