diff --git a/pos_book_order/__manifest__.py b/pos_book_order/__manifest__.py index 10db4fcd7..4863b6e18 100644 --- a/pos_book_order/__manifest__.py +++ b/pos_book_order/__manifest__.py @@ -47,6 +47,7 @@ 'pos_book_order/static/src/xml/OrderReceipt.xml', 'pos_book_order/static/src/js/BookOrderPopup.js', 'pos_book_order/static/src/js/BookOrderButton.js', + 'pos_book_order/static/src/js/TicketScreen.js', 'pos_book_order/static/src/js/BookedOrdersButton.js', 'pos_book_order/static/src/js/BookedOrdersScreen.js', 'pos_book_order/static/src/js/models.js', diff --git a/pos_book_order/doc/RELEASE_NOTES.md b/pos_book_order/doc/RELEASE_NOTES.md index 980ae70b4..d62653e5f 100644 --- a/pos_book_order/doc/RELEASE_NOTES.md +++ b/pos_book_order/doc/RELEASE_NOTES.md @@ -1,7 +1,7 @@ ## Module #### 11.01.2024 -#### Version 17.0.1.0.0 +#### Version 17.0.1.0.1 ##### ADD - Initial Commit for POS Booking Order diff --git a/pos_book_order/models/book_order.py b/pos_book_order/models/book_order.py index 29f2851f5..f5cb1fe66 100644 --- a/pos_book_order/models/book_order.py +++ b/pos_book_order/models/book_order.py @@ -86,6 +86,8 @@ class BookOrder(models.Model): help="Fiscal position account " "for order", string='Fiscal Position') + pos_order_uid = fields.Char(help="Related Pos order", + string='Related Pos order') pickup_date = fields.Datetime(string='Pickup Date', readonly=True, help="Picking date of the order") deliver_date = fields.Datetime(string='Deliver Date', readonly=True, @@ -127,10 +129,12 @@ class BookOrder(models.Model): self.write({ 'state': 'confirmed', }) + return self.pos_order_uid + @api.model def create_booked_order(self, partner, phone, address, date, price_list, - product, note, pickup_date, delivery_date): + product, note, pickup_date, delivery_date,pos_order): """ It creates a booked order based on the value in the booking popup in PoS ui. partner(int): id of partner @@ -149,6 +153,7 @@ class BookOrder(models.Model): 'delivery_address': address, 'pricelist_id': price_list if price_list else False, 'date_quotation': fields.Date.today(), + 'pos_order_uid':pos_order, 'book_line_ids': [Command.create({ 'product_id': product['product_id'][i], 'qty': product['qty'][i], @@ -160,6 +165,7 @@ class BookOrder(models.Model): order.write({'pickup_date': pickup_date + ' 00:00:00'}) if delivery_date: order.write({'deliver_date': delivery_date + ' 00:00:00'}) + return order.name @api.model def all_orders(self): diff --git a/pos_book_order/static/src/js/BookOrderButton.js b/pos_book_order/static/src/js/BookOrderButton.js index 8b7650984..978765b9c 100644 --- a/pos_book_order/static/src/js/BookOrderButton.js +++ b/pos_book_order/static/src/js/BookOrderButton.js @@ -1,8 +1,4 @@ /** @odoo-module **/ -/* - * This file is used to register the a new button for booking orders with selected partner and products. - */ - /** @odoo-module **/ import { _t } from "@web/core/l10n/translation"; import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen"; @@ -13,10 +9,8 @@ import { BookOrderPopup } from "./BookOrderPopup"; import { ErrorPopup } from "@point_of_sale/app/errors/popups/error_popup"; - export class BookOrderButton extends Component { static template = "pos_book_order.BookOrderButton"; - setup() { this.pos = usePos(); this.popup = useService("popup"); diff --git a/pos_book_order/static/src/js/BookOrderPopup.js b/pos_book_order/static/src/js/BookOrderPopup.js index 5762020dd..cb94f5b3f 100644 --- a/pos_book_order/static/src/js/BookOrderPopup.js +++ b/pos_book_order/static/src/js/BookOrderPopup.js @@ -42,11 +42,9 @@ export class BookOrderPopup extends AbstractAwaitablePopup { this.Method_pickup.el.style.display='none' this.Method_deliver.el.style.display='block' } - console.log(this.delivery.el.checked) - console.log(this.pickup.el.checked) } - async confirm() { + async confirm() { // on clicking confirm button of popup a new book order with draft stage will created from the backend var pickup_date = this.pickup_date.el.value; var delivery_date = this.delivery_date.el.value; @@ -56,6 +54,7 @@ export class BookOrderPopup extends AbstractAwaitablePopup { var phone = this.order.partner.phone; var date = this.order.date_order; var line = this.order.orderlines; + var pos_order = this.order.uid; if(this.order.pricelist){ var price_list = this.order.pricelist.id; } @@ -72,9 +71,20 @@ export class BookOrderPopup extends AbstractAwaitablePopup { product['qty'].push(line[i].quantity) product['price'].push(line[i].price) }; - await this.orm.call( - "book.order", "create_booked_order", [partner, phone, address, date, price_list,product, order_note, pickup_date, delivery_date], {} - ) + var self = this + await this.orm.call( + "book.order", "create_booked_order", [partner, phone, address, date, price_list,product, order_note, pickup_date, delivery_date,pos_order], {} + ).then(function(book_order) { + self.order.booking_ref_id=book_order + }) + await this.orm.call( + "book.order", "all_orders", [], {} + ).then(function(result) { + self.pos.showScreen('BookedOrdersScreen', { + data: result, + new_order:true + }); + }) this.cancel(); } diff --git a/pos_book_order/static/src/js/BookedOrdersButton.js b/pos_book_order/static/src/js/BookedOrdersButton.js index 80bbae63b..117140d0c 100644 --- a/pos_book_order/static/src/js/BookedOrdersButton.js +++ b/pos_book_order/static/src/js/BookedOrdersButton.js @@ -20,7 +20,8 @@ static template = 'pos_book_order.BookedOrdersButton'; "book.order", "all_orders", [], {} ).then(function(result) { self.pos.showScreen('BookedOrdersScreen', { - data: result + data: result, + new_order:false }); }) } diff --git a/pos_book_order/static/src/js/BookedOrdersScreen.js b/pos_book_order/static/src/js/BookedOrdersScreen.js index acf888e28..0cbb7c757 100644 --- a/pos_book_order/static/src/js/BookedOrdersScreen.js +++ b/pos_book_order/static/src/js/BookedOrdersScreen.js @@ -15,29 +15,25 @@ class BookedOrdersScreen extends TicketScreen { this.orm = useService("orm"); } back() { - // on clicking the back button it will redirected Product screen this.pos.showScreen('ProductScreen'); } - async _Confirm(ev) { - // On clicking confirm button on each order a order will create with corresponding partner and products,user can do the payment - var self = this - var data = ev - await this.orm.call('book.order', 'action_confirm',[data.id],{}) - var order=this.pos.add_new_order(); - for (var i of data.products) { - var product = self.pos.db.get_product_by_id(i['id']) - var qty = i['qty'] - order.add_product(product, { - quantity: qty, - price: i['price'] - }) - } - var partner_id = data.partner_id - order.set_partner(this.pos.db.get_partner_by_id(partner_id)); - this.pos.selectedOrder.is_booked = true - this.pos.selectedOrder.booked_data = data - this.pos.selectedOrder.booking_ref_id = data.id - this.pos.showScreen('ProductScreen'); + orderDone() { + // on clicking the back button it will redirected Product screen + this.pos.add_new_order() + this.pos.showScreen('ProductScreen'); } + async _Confirm(ev) { + // On clicking confirm button on each order a order will create with corresponding partner and products,user can do the payment + var self = this + var data = ev + var uid = await this.orm.call('book.order', 'action_confirm',[data.id],{}) + var order = this.pos.orders.find((order) => order.uid == uid); + var partner_id = data.partner_id + this.pos.selectedOrder=order + this.pos.selectedOrder.is_booked = true + this.pos.selectedOrder.booked_data = data + this.pos.selectedOrder.booking_ref_id = data.id + this.pos.showScreen('ProductScreen'); +} } registry.category("pos_screens").add("BookedOrdersScreen", BookedOrdersScreen); diff --git a/pos_book_order/static/src/js/TicketScreen.js b/pos_book_order/static/src/js/TicketScreen.js new file mode 100644 index 000000000..6eb5e9de3 --- /dev/null +++ b/pos_book_order/static/src/js/TicketScreen.js @@ -0,0 +1,57 @@ +/** @odoo-module **/ + +import { TicketScreen } from "@point_of_sale/app/screens/ticket_screen/ticket_screen"; +import { patch } from "@web/core/utils/patch"; +import { ConfirmPopup } from "@point_of_sale/app/utils/confirm_popup/confirm_popup"; +import { _t } from "@web/core/l10n/translation"; + +patch(TicketScreen.prototype, { + async onClickOrder(clickedOrder) { + if (clickedOrder.booking_ref_id){ + const { confirmed } = await this.popup.add(ConfirmPopup, { + title: _t("Confirm Booking"), + body: _t( + "You have to confirm the booking to choose this order" + ), + }); + if (confirmed) { + var self = this + await this.orm.call( + "book.order", "all_orders", [], {} + ).then(function(result) { + self.pos.showScreen('BookedOrdersScreen', { + data: result, + new_order:false + }); + }) + } + } + else{ + return super.onClickOrder(clickedOrder); + } + }, + async _setOrder(clickedOrder) { + if (clickedOrder.booking_ref_id){ + const { confirmed } = await this.popup.add(ConfirmPopup, { + title: _t("Confirm Booking"), + body: _t( + "You have to confirm the booking to choose this order" + ), + }); + if (confirmed) { + var self = this + await this.orm.call( + "book.order", "all_orders", [], {} + ).then(function(result) { + self.pos.showScreen('BookedOrdersScreen', { + data: result, + new_order:false + }); + }) + } + } + else{ + return super._setOrder(clickedOrder); + } + } +}); diff --git a/pos_book_order/static/src/js/models.js b/pos_book_order/static/src/js/models.js index 7877dc118..3eb874c15 100644 --- a/pos_book_order/static/src/js/models.js +++ b/pos_book_order/static/src/js/models.js @@ -27,7 +27,7 @@ patch(Order.prototype, { super.init_from_JSON(...arguments); // this function is overrided for assigning json value to this super.init_from_JSON(...arguments); - this.booking_ref_id= json.booking_ref_id; + this.booking_ref_id= json.booking_ref_id; this.is_booked = json.is_booked; this.booked_data = json.booked_data }, diff --git a/pos_book_order/static/src/xml/BookedOrdersScreen.xml b/pos_book_order/static/src/xml/BookedOrdersScreen.xml index 42832d672..f8e56d39f 100644 --- a/pos_book_order/static/src/xml/BookedOrdersScreen.xml +++ b/pos_book_order/static/src/xml/BookedOrdersScreen.xml @@ -5,10 +5,15 @@
-
+
Back
+
+ + New Order +
@@ -114,7 +119,6 @@ -