Browse Source

May 16: [FIX] Bug Fixed 'pos_book_order'

pull/317/head
RisvanaCybro 12 months ago
parent
commit
86e45aab7c
  1. 1
      pos_book_order/__manifest__.py
  2. 2
      pos_book_order/doc/RELEASE_NOTES.md
  3. 8
      pos_book_order/models/book_order.py
  4. 6
      pos_book_order/static/src/js/BookOrderButton.js
  5. 22
      pos_book_order/static/src/js/BookOrderPopup.js
  6. 3
      pos_book_order/static/src/js/BookedOrdersButton.js
  7. 38
      pos_book_order/static/src/js/BookedOrdersScreen.js
  8. 57
      pos_book_order/static/src/js/TicketScreen.js
  9. 2
      pos_book_order/static/src/js/models.js
  10. 8
      pos_book_order/static/src/xml/BookedOrdersScreen.xml

1
pos_book_order/__manifest__.py

@ -47,6 +47,7 @@
'pos_book_order/static/src/xml/OrderReceipt.xml', 'pos_book_order/static/src/xml/OrderReceipt.xml',
'pos_book_order/static/src/js/BookOrderPopup.js', 'pos_book_order/static/src/js/BookOrderPopup.js',
'pos_book_order/static/src/js/BookOrderButton.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/BookedOrdersButton.js',
'pos_book_order/static/src/js/BookedOrdersScreen.js', 'pos_book_order/static/src/js/BookedOrdersScreen.js',
'pos_book_order/static/src/js/models.js', 'pos_book_order/static/src/js/models.js',

2
pos_book_order/doc/RELEASE_NOTES.md

@ -1,7 +1,7 @@
## Module <pos_book_order> ## Module <pos_book_order>
#### 11.01.2024 #### 11.01.2024
#### Version 17.0.1.0.0 #### Version 17.0.1.0.1
##### ADD ##### ADD
- Initial Commit for POS Booking Order - Initial Commit for POS Booking Order

8
pos_book_order/models/book_order.py

@ -86,6 +86,8 @@ class BookOrder(models.Model):
help="Fiscal position account " help="Fiscal position account "
"for order", "for order",
string='Fiscal Position') 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, pickup_date = fields.Datetime(string='Pickup Date', readonly=True,
help="Picking date of the order") help="Picking date of the order")
deliver_date = fields.Datetime(string='Deliver Date', readonly=True, deliver_date = fields.Datetime(string='Deliver Date', readonly=True,
@ -127,10 +129,12 @@ class BookOrder(models.Model):
self.write({ self.write({
'state': 'confirmed', 'state': 'confirmed',
}) })
return self.pos_order_uid
@api.model @api.model
def create_booked_order(self, partner, phone, address, date, price_list, 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 """ It creates a booked order based on the value in the booking popup
in PoS ui. in PoS ui.
partner(int): id of partner partner(int): id of partner
@ -149,6 +153,7 @@ class BookOrder(models.Model):
'delivery_address': address, 'delivery_address': address,
'pricelist_id': price_list if price_list else False, 'pricelist_id': price_list if price_list else False,
'date_quotation': fields.Date.today(), 'date_quotation': fields.Date.today(),
'pos_order_uid':pos_order,
'book_line_ids': [Command.create({ 'book_line_ids': [Command.create({
'product_id': product['product_id'][i], 'product_id': product['product_id'][i],
'qty': product['qty'][i], 'qty': product['qty'][i],
@ -160,6 +165,7 @@ class BookOrder(models.Model):
order.write({'pickup_date': pickup_date + ' 00:00:00'}) order.write({'pickup_date': pickup_date + ' 00:00:00'})
if delivery_date: if delivery_date:
order.write({'deliver_date': delivery_date + ' 00:00:00'}) order.write({'deliver_date': delivery_date + ' 00:00:00'})
return order.name
@api.model @api.model
def all_orders(self): def all_orders(self):

6
pos_book_order/static/src/js/BookOrderButton.js

@ -1,8 +1,4 @@
/** @odoo-module **/ /** @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 { _t } from "@web/core/l10n/translation";
import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen"; 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"; import { ErrorPopup } from "@point_of_sale/app/errors/popups/error_popup";
export class BookOrderButton extends Component { export class BookOrderButton extends Component {
static template = "pos_book_order.BookOrderButton"; static template = "pos_book_order.BookOrderButton";
setup() { setup() {
this.pos = usePos(); this.pos = usePos();
this.popup = useService("popup"); this.popup = useService("popup");

22
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_pickup.el.style.display='none'
this.Method_deliver.el.style.display='block' 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 // 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 pickup_date = this.pickup_date.el.value;
var delivery_date = this.delivery_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 phone = this.order.partner.phone;
var date = this.order.date_order; var date = this.order.date_order;
var line = this.order.orderlines; var line = this.order.orderlines;
var pos_order = this.order.uid;
if(this.order.pricelist){ if(this.order.pricelist){
var price_list = this.order.pricelist.id; var price_list = this.order.pricelist.id;
} }
@ -72,9 +71,20 @@ export class BookOrderPopup extends AbstractAwaitablePopup {
product['qty'].push(line[i].quantity) product['qty'].push(line[i].quantity)
product['price'].push(line[i].price) product['price'].push(line[i].price)
}; };
await this.orm.call( var self = this
"book.order", "create_booked_order", [partner, phone, address, date, price_list,product, order_note, pickup_date, delivery_date], {} 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(); this.cancel();
} }

3
pos_book_order/static/src/js/BookedOrdersButton.js

@ -20,7 +20,8 @@ static template = 'pos_book_order.BookedOrdersButton';
"book.order", "all_orders", [], {} "book.order", "all_orders", [], {}
).then(function(result) { ).then(function(result) {
self.pos.showScreen('BookedOrdersScreen', { self.pos.showScreen('BookedOrdersScreen', {
data: result data: result,
new_order:false
}); });
}) })
} }

38
pos_book_order/static/src/js/BookedOrdersScreen.js

@ -15,29 +15,25 @@ class BookedOrdersScreen extends TicketScreen {
this.orm = useService("orm"); this.orm = useService("orm");
} }
back() { back() {
// on clicking the back button it will redirected Product screen
this.pos.showScreen('ProductScreen'); this.pos.showScreen('ProductScreen');
} }
async _Confirm(ev) { orderDone() {
// On clicking confirm button on each order a order will create with corresponding partner and products,user can do the payment // on clicking the back button it will redirected Product screen
var self = this this.pos.add_new_order()
var data = ev this.pos.showScreen('ProductScreen');
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');
} }
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); registry.category("pos_screens").add("BookedOrdersScreen", BookedOrdersScreen);

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

2
pos_book_order/static/src/js/models.js

@ -27,7 +27,7 @@ patch(Order.prototype, {
super.init_from_JSON(...arguments); super.init_from_JSON(...arguments);
// this function is overrided for assigning json value to this // this function is overrided for assigning json value to this
super.init_from_JSON(...arguments); 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.is_booked = json.is_booked;
this.booked_data = json.booked_data this.booked_data = json.booked_data
}, },

8
pos_book_order/static/src/xml/BookedOrdersScreen.xml

@ -5,10 +5,15 @@
<div class="partnerlist-screen screen"> <div class="partnerlist-screen screen">
<div class="screen-content"> <div class="screen-content">
<div class="top-content"> <div class="top-content">
<div class="button back" t-on-click="back"> <div class="button back" t-on-click="back" t-if="!props.new_order">
<i class="fa fa-angle-double-left"/> <i class="fa fa-angle-double-left"/>
Back Back
</div> </div>
<div class="button back" t-if="props.new_order" t-on-click="orderDone">
<i class="oi oi-chevron-right" role="img"
aria-label="New Order" title="New Order"/>
New Order
</div>
</div> </div>
<table class="partner-list table table-striped w-100"> <table class="partner-list table table-striped w-100">
<thead> <thead>
@ -114,7 +119,6 @@
</div> </div>
</td> </td>
</tr> </tr>
</t> </t>
<t t-if="props.data.length==0"> <t t-if="props.data.length==0">
<div class="empty-order-list" <div class="empty-order-list"

Loading…
Cancel
Save