[FIX] point_of_sale: limited load new partners
When you create or update a partner from the POS, it will call the server to get the new modifications on partners. When you put a limit to 0 and so no background loading. You don't get any partners and when you create or update one, it will try to load all of your partners because the last write_date is unknown. Which is not the intended behaviour. If you have set a limit different than 0, you will not get all of them (because you already have some records but it can take a larger batch than the one defined. So we are now trying to correctly handle the load of new partners. closes odoo/odoo#111912 X-original-commit: a5af7b235c8a786e972698ab709fd74f4c1bf515 Signed-off-by: Masereel Pierre <pim@odoo.com>
This commit is contained in:
@@ -339,35 +339,42 @@ export class PosGlobalState extends PosModel {
|
||||
|
||||
// reload the list of partner, returns as a promise that resolves if there were
|
||||
// updated partners, and fails if not
|
||||
load_new_partners() {
|
||||
return new Promise((resolve, reject) => {
|
||||
var domain = this.prepare_new_partners_domain();
|
||||
this.env.services
|
||||
.rpc(
|
||||
{
|
||||
model: "pos.session",
|
||||
method: "get_pos_ui_res_partner_by_params",
|
||||
args: [[odoo.pos_session_id], { domain }],
|
||||
},
|
||||
{
|
||||
timeout: 3000,
|
||||
shadow: true,
|
||||
}
|
||||
)
|
||||
.then(
|
||||
(partners) => {
|
||||
if (this.addPartners(partners)) {
|
||||
// check if the partners we got were real updates
|
||||
resolve();
|
||||
} else {
|
||||
reject("Failed in updating partners.");
|
||||
}
|
||||
},
|
||||
function (type, err) {
|
||||
reject();
|
||||
}
|
||||
);
|
||||
});
|
||||
async load_new_partners() {
|
||||
let search_params = { domain: this.prepare_new_partners_domain() };
|
||||
if (this.env.pos.config.limited_partners_loading) {
|
||||
search_params['order'] = 'write_date desc';
|
||||
if (this.env.pos.config.partner_load_background) {
|
||||
search_params['limit'] = this.env.pos.config.limited_partners_amount || 1;
|
||||
}
|
||||
else {
|
||||
search_params['limit'] = 1;
|
||||
}
|
||||
}
|
||||
const partners = await this.env.services
|
||||
.rpc(
|
||||
{
|
||||
model: 'pos.session',
|
||||
method: 'get_pos_ui_res_partner_by_params',
|
||||
args: [[odoo.pos_session_id], search_params],
|
||||
},
|
||||
{
|
||||
timeout: 3000,
|
||||
shadow: true,
|
||||
}
|
||||
)
|
||||
if (this.env.pos.config.partner_load_background) {
|
||||
this.loadPartnersBackground(
|
||||
search_params['domain'],
|
||||
this.env.pos.config.limited_partners_amount || 1,
|
||||
'write_date desc'
|
||||
);
|
||||
}
|
||||
if (this.addPartners(partners)) {
|
||||
return true
|
||||
}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
setSelectedCategoryId(categoryId) {
|
||||
@@ -540,7 +547,7 @@ export class PosGlobalState extends PosModel {
|
||||
page += 1;
|
||||
} while (products.length == this.config.limited_products_amount);
|
||||
}
|
||||
async loadPartnersBackground() {
|
||||
async loadPartnersBackground(domain=[], offset=0, order=false) {
|
||||
// Start at the first page since the first set of loaded partners are not actually in the
|
||||
// same order as this background loading procedure.
|
||||
let i = 0;
|
||||
@@ -553,8 +560,10 @@ export class PosGlobalState extends PosModel {
|
||||
args: [
|
||||
[odoo.pos_session_id],
|
||||
{
|
||||
domain: domain,
|
||||
limit: this.config.limited_partners_amount,
|
||||
offset: this.config.limited_partners_amount * i,
|
||||
offset: offset + this.config.limited_partners_amount * i,
|
||||
order: order,
|
||||
},
|
||||
],
|
||||
context: this.env.session.user_context,
|
||||
|
||||
Reference in New Issue
Block a user