Browse Source

Apr 29: [FIX] Bug Fixed 'product_return_pos'

pull/164/merge
RisvanaCybro 1 year ago
parent
commit
f69b0ba068
  1. 2
      product_return_pos/__manifest__.py
  2. 4
      product_return_pos/doc/RELEASE_NOTES.md
  3. 17
      product_return_pos/static/src/js/models.js
  4. 151
      product_return_pos/static/src/js/order_list_screen.js
  5. 3
      product_return_pos/static/src/js/pos_return.js
  6. 2
      product_return_pos/static/src/js/return.js
  7. 8
      product_return_pos/static/src/xml/pos_return.xml

2
product_return_pos/__manifest__.py

@ -21,7 +21,7 @@
#############################################################################
{
'name': 'Product Return In POS',
'version': '14.0.1.0.0',
'version': '14.0.1.0.1',
'category': 'Point of Sale',
'summary': 'POS Order Return',
'author': 'Cybrosys Techno Solutions',

4
product_return_pos/doc/RELEASE_NOTES.md

@ -5,4 +5,8 @@
##### ADD
- Initial Commit.
#### 23.04.2024
#### Version 14.0.1.0.1
#### UPDATE
- Add current datetime and pagination in return page.

17
product_return_pos/static/src/js/models.js

@ -18,7 +18,9 @@ models.load_models({
fields: ['name', 'partner_id','date_order','amount_total', 'amount_tax',
'pos_reference','lines','state','session_id','company_id','return_ref','return_status'],
loaded: function(self, orders){
orders.forEach(function(order) {
order.date_order = moment.utc(order.date_order).local().format('YYYY-MM-DD HH:mm:ss');
});
self.orders = orders;
}
},
@ -34,13 +36,6 @@ models.load_models({
}
});
var _super_orderline = models.Orderline;
models.Orderline = models.Orderline.extend({
@ -63,7 +58,6 @@ models.Order = models.Order.extend({
add_product: function (product, options) {
var order = this.pos.get_order();
_super.prototype.add_product.call(this, product, options);
if (options !== undefined) {
@ -170,9 +164,4 @@ models.PosModel.extend({
});
},
});
});

151
product_return_pos/static/src/js/order_list_screen.js

@ -3,51 +3,67 @@ odoo.define('product_return_pos.order_list_screen',function(require) {
var models = require('point_of_sale.models');
var gui = require('point_of_sale.Gui');
var core = require('web.core');
var QWeb = core.qweb;
var rpc = require('web.rpc');
var _t = require('web.core')._t;
var session = require('web.session');
const ControlButtonsMixin = require('point_of_sale.ControlButtonsMixin');
const NumberBuffer = require('point_of_sale.NumberBuffer');
const { onChangeOrder, useBarcodeReader } = require('point_of_sale.custom_hooks');
const { useState , useRef} = owl.hooks;
const PosComponent = require('point_of_sale.PosComponent');
const Registries = require('point_of_sale.Registries');
const ProductScreen = require('point_of_sale.ProductScreen');
const { useListener } = require('web.custom_hooks');
const OrderManagementScreen = require('point_of_sale.OrderManagementScreen');
const AbstractAwaitablePopup = require('point_of_sale.AbstractAwaitablePopup');
const IndependentToOrderScreen = require('point_of_sale.IndependentToOrderScreen');
const { posbus } = require('point_of_sale.utils');
const { Gui } = require('point_of_sale.Gui');
const ControlButtonsMixin = require('point_of_sale.ControlButtonsMixin');
const NumberBuffer = require('point_of_sale.NumberBuffer');
const { onChangeOrder, useBarcodeReader } = require('point_of_sale.custom_hooks');
const { useState , useRef} = owl.hooks;
const PosComponent = require('point_of_sale.PosComponent');
const Registries = require('point_of_sale.Registries');
const ProductScreen = require('point_of_sale.ProductScreen');
const { useListener } = require('web.custom_hooks');
const OrderManagementScreen = require('point_of_sale.OrderManagementScreen');
const AbstractAwaitablePopup = require('point_of_sale.AbstractAwaitablePopup');
const IndependentToOrderScreen = require('point_of_sale.IndependentToOrderScreen');
const { posbus } = require('point_of_sale.utils');
const { Gui } = require('point_of_sale.Gui');
class OrderListScreenWidget extends IndependentToOrderScreen {
constructor() {
super(...arguments);
useListener('filter-selected', this._onFilterSelected);
super(...arguments);
useListener('filter-selected', this._onFilterSelected);
useListener('search', this._onSearch);
this.searchDetails = {};
this.filter = null;
this._initializeSearchFieldConstants();
this.state = useState({
pagedOrders: [],
});
this.ordersPerPage = 12;
this.currentPage = 1;
this.orders = this.env.pos.orders;
}
useListener('search', this._onSearch);
this.searchDetails = {};
this.filter = null;
this._initializeSearchFieldConstants();
mounted() {
this.updatePagedOrders();
this.render();
}
updatePagedOrders(orders=this.orders) {
const startIndex = (this.currentPage - 1) * this.ordersPerPage;
const endIndex = startIndex + this.ordersPerPage;
this.currentOrders = orders;
this.state.pagedOrders = [...orders.slice(startIndex, endIndex)];
}
}
button_prev() {
if (this.currentPage > 1) {
this.currentPage -= 1;
this.updatePagedOrders();
}
}
mounted() {
var self = this;
this.render();
var orders = this.env.pos.orders;
var search_timeout = null;
button_next() {
const maxPage = Math.ceil(this.currentOrders.length / this.ordersPerPage);
if (this.currentPage < maxPage) {
this.currentPage += 1;
this.updatePagedOrders();
}
}
back() {
@ -62,35 +78,14 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
this.return_order(order);
}
get ordersList() {
const filterCheck = (order) => {
return true;
};
const { fieldValue, searchTerm } = this.searchDetails;
const fieldAccessor = this._searchFields[fieldValue];
const searchCheck = (order) => {
if (!fieldAccessor) return true;
const fieldValue = fieldAccessor(order);
if (fieldValue === null) return true;
if (!searchTerm) return true;
return fieldValue && fieldValue.toString().toLowerCase().includes(searchTerm.toLowerCase());
};
const predicate = (order) => {
return searchCheck(order);
};
return this.orderList.filter(predicate);
}
_onFilterSelected(event) {
this.filter = event.detail.filter;
this.render();
}
this.filter = event.detail.filter;
this.render();
}
get orderList() {
return this.env.pos.orders;
}
return this.env.pos.orders;
}
get _searchFields() {
var fields = {
@ -103,10 +98,30 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
}
_onSearch(event) {
const searchDetails = event.detail;
Object.assign(this.searchDetails, searchDetails);
this.render();
this.currentPage = 1;
const searchDetails = event.detail;
const { fieldValue, searchTerm } = searchDetails;
if (fieldValue === 'Receipt Number') {
const filteredOrders = this.orders.filter(order => {
return order.pos_reference && order.pos_reference.includes(searchTerm);
});
this.updatePagedOrders(filteredOrders);
} else {
const fieldAccessor = this._searchFields[fieldValue];
const searchCheck = (order) => {
if (!fieldAccessor) return true;
const fieldValue = fieldAccessor(order);
if (fieldValue === null) return true;
if (!searchTerm) return true;
return fieldValue && fieldValue.toString().toLowerCase().includes(searchTerm.toLowerCase());
};
const predicate = (order) => {
return searchCheck(order);
};
this.updatePagedOrders(this.orders.filter(predicate));
}
this.render();
}
get searchBarConfig() {
return {
@ -114,6 +129,7 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
filter: { show: true, options: this.filterOptions },
};
}
get filterOptions() {
return ['All Orders'];
}
@ -125,7 +141,6 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
ReceiptScreen: 'Receipt',
};
}
_initializeSearchFieldConstants() {
this.constants = {};
Object.assign(this.constants, {
@ -134,8 +149,6 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
});
}
render_list(orders){
var contents = this.el.querySelector('.order-list-contents');
contents.innerHTML = "";
@ -149,7 +162,6 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
}
}
return_order(order_id){
var self = this;
var client = ''
@ -162,24 +174,17 @@ class OrderListScreenWidget extends IndependentToOrderScreen {
'body': "This is a fully returned order",});
}
else if (order_id && order_id.return_ref) {
Gui.showPopup('ErrorPopup',{
'title': "ERROR",
'body': "This is a returned order",});
}
else{
Gui.showPopup('ReturnWidget',{ref: order_id.pos_reference,client:client});
}
}
}
OrderListScreenWidget.template = 'OrderListScreenWidget';
OrderListScreenWidget.template = 'OrderListScreenWidget';
Registries.Component.add(OrderListScreenWidget);
return OrderListScreenWidget;
});

3
product_return_pos/static/src/js/pos_return.js

@ -152,7 +152,4 @@ class ReturnWidget extends AbstractAwaitablePopup {
Registries.Component.add(ReturnWidget);
return ReturnWidget;
});

2
product_return_pos/static/src/js/return.js

@ -51,6 +51,4 @@ ProductScreen.addControlButton({
Registries.Component.add(ReturnButton);
return ReturnButton;
});

8
product_return_pos/static/src/xml/pos_return.xml

@ -26,6 +26,9 @@
<div class="ticket-screen screen">
<div class="screen-content">
<section class="top-content">
<td class='button prev' t-on-click="button_prev">
<i class='fa fa-angle-double-left'></i>
</td>
<span class='button back' t-on-click="back">
<i class='fa fa-angle-double-left'></i>
Cancel
@ -37,6 +40,9 @@
<i class="fa fa-refresh"></i>
Refresh
</span>
<td class='button next' t-on-click="button_next">
<i class='fa fa-angle-double-right'></i>
</td>
</section>
<div class="orders">
@ -46,7 +52,7 @@
<div class="col start">Customer</div>
<div class="col start">Return Ref</div>
</div>
<t t-foreach="ordersList" t-as="order" t-key="order.cid">
<t t-foreach="state.pagedOrders" t-as="order" t-key="order.cid">
<div class="order-row pointer" t-on-click="return_click(order)">
<div class="col start wide">
<t t-esc="order.date_order"></t>

Loading…
Cancel
Save