fix: refs #7917 fix route filter freeLancer #3327

Merged
carlossa merged 33 commits from 7917-freelancerRoute2 into dev 2025-01-29 10:37:05 +00:00
7 changed files with 102 additions and 126 deletions

View File

@ -752,13 +752,15 @@ INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1');
INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`, `dated`) INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`, `dated`)
VALUES VALUES
(1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1, util.VN_CURDATE()), (1, '1899-12-30 12:15:00', 133, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1, util.VN_CURDATE()),
(2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9, util.VN_CURDATE()), (2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9, util.VN_CURDATE()),
(3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 10, util.VN_CURDATE()), (3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 10, util.VN_CURDATE()),
carlossa marked this conversation as resolved Outdated
Outdated
Review

Poner fechas relativas

Poner fechas relativas
(4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 12, util.VN_CURDATE()), (4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 12, util.VN_CURDATE()),
carlossa marked this conversation as resolved Outdated
Outdated
Review

Poner fechas relativas

Poner fechas relativas
(5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 13, util.VN_CURDATE()), (5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 13, util.VN_CURDATE()),
(6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3, util.VN_CURDATE()), (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3, util.VN_CURDATE()),
(7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5, util.VN_CURDATE()); (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5, util.VN_CURDATE()),
(8, NULL, 133, util.VN_CURDATE(), 1, 1, 'eighth route', 1.8, 10.0, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1, util.VN_CURDATE()),
(9, NULL, 133, util.VN_CURDATE(), 1, 2, 'ninth route', 0.2, 20.0, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9, util.VN_CURDATE());
INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`, `problem`, `risk`) INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`, `problem`, `risk`)
VALUES VALUES
@ -4061,3 +4063,8 @@ INSERT IGNORE INTO vn.osrmConfig (id,url,tolerance)
INSERT IGNORE INTO vn.inventoryConfig INSERT IGNORE INTO vn.inventoryConfig
SET id = 1, SET id = 1,
supplierFk = 4; supplierFk = 4;
carlossa marked this conversation as resolved Outdated
Outdated
Review

Poner en route

Poner en `route`
UPDATE vn.worker
SET isFreelance=1
WHERE firstName='deliveryFreelancer';

View File

@ -0,0 +1,19 @@
INSERT INTO account.`role` (name,description,hasLogin)
VALUES ('deliveryFreelancer','Repartidor autónomo',1);
carlossa marked this conversation as resolved Outdated
Outdated
Review

No poner las fechas

No poner las fechas
INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
VALUES
('Route', 'getTickets', 'READ', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('AgencyTerm', 'filter', 'READ', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('Route', 'summary', 'READ', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('Route', 'getRouteByAgency', 'WRITE', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('Route','filter','READ','ALLOW','ROLE','deliveryFreelancer'),
('UserConfig','getUserConfig','*','ALLOW','ROLE','deliveryFreelancer'),
('Route', 'getTickets', 'READ', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('Route','guessPriority','WRITE','ALLOW','ROLE','deliveryFreelancer'),
('Route','getDeliveryPoint','READ','ALLOW','ROLE','deliveryFreelancer'),
('Route', 'findById', 'READ', 'ALLOW', 'ROLE', 'deliveryFreelancer'),
('Route','sendSms','WRITE','ALLOW','ROLE','deliveryFreelancer'),
('Ticket','updateAttributes','WRITE','ALLOW','ROLE','deliveryFreelancer'),
('Client','findById','READ','ALLOW','ROLE','deliveryFreelancer');
;

View File

@ -18,7 +18,7 @@ describe('AgencyTerm filter()', () => {
const firstAgencyTerm = agencyTerms[0]; const firstAgencyTerm = agencyTerms[0];
expect(firstAgencyTerm.routeFk).toEqual(1); expect(firstAgencyTerm.routeFk).toEqual(1);
expect(agencyTerms.length).toEqual(5); expect(agencyTerms.length).toEqual(7);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
@ -49,7 +49,7 @@ describe('AgencyTerm filter()', () => {
let result = await app.models.AgencyTerm.filter(ctx); let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(2); expect(result.length).toEqual(4);
}); });
it('should return results matching "from" and "to"', async() => { it('should return results matching "from" and "to"', async() => {
@ -72,7 +72,7 @@ describe('AgencyTerm filter()', () => {
const results = await models.AgencyTerm.filter(ctx, options); const results = await models.AgencyTerm.filter(ctx, options);
expect(results.length).toBe(5); expect(results.length).toBe(7);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
@ -90,7 +90,7 @@ describe('AgencyTerm filter()', () => {
let result = await app.models.AgencyTerm.filter(ctx); let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(1); expect(result.length).toEqual(2);
expect(result[0].routeFk).toEqual(1); expect(result[0].routeFk).toEqual(1);
}); });
@ -103,7 +103,7 @@ describe('AgencyTerm filter()', () => {
let result = await app.models.AgencyTerm.filter(ctx); let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(1); expect(result.length).toEqual(2);
expect(result[0].routeFk).toEqual(2); expect(result[0].routeFk).toEqual(2);
}); });
}); });

View File

@ -1,109 +0,0 @@
const app = require('vn-loopback/server/server');
carlossa marked this conversation as resolved Outdated
Outdated
Review

Poner redmine para hacerle test

Poner redmine para hacerle test
const models = require('vn-loopback/server/server').models;
describe('AgencyTerm filter()', () => {
const authUserId = 9;
const today = Date.vnNew();
today.setHours(2, 0, 0, 0);
it('should return all results matching the filter', async() => {
const tx = await models.AgencyTerm.beginTransaction({});
try {
const options = {transaction: tx};
const filter = {};
const ctx = {req: {accessToken: {userId: authUserId}}};
const agencyTerms = await models.AgencyTerm.filter(ctx, filter, options);
const firstAgencyTerm = agencyTerms[0];
expect(firstAgencyTerm.routeFk).toEqual(1);
expect(agencyTerms.length).toEqual(5);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should return results matching "search" searching by integer', async() => {
let ctx = {
args: {
search: 1,
}
};
let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].routeFk).toEqual(1);
});
it('should return results matching "search" searching by string', async() => {
let ctx = {
args: {
search: 'Plants SL',
}
};
let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(2);
});
it('should return results matching "from" and "to"', async() => {
const tx = await models.Buy.beginTransaction({});
const options = {transaction: tx};
try {
const from = Date.vnNew();
from.setHours(0, 0, 0, 0);
const to = Date.vnNew();
to.setHours(23, 59, 59, 999);
const ctx = {
args: {
from: from,
to: to
}
};
const results = await models.AgencyTerm.filter(ctx, options);
expect(results.length).toBe(5);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should return results matching "agencyModeFk"', async() => {
let ctx = {
args: {
agencyModeFk: 1,
}
};
let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].routeFk).toEqual(1);
});
it('should return results matching "agencyFk"', async() => {
let ctx = {
args: {
agencyFk: 2,
}
};
let result = await app.models.AgencyTerm.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].routeFk).toEqual(2);
});
});

View File

@ -87,6 +87,8 @@ module.exports = Self => {
Self.filter = async(ctx, filter) => { Self.filter = async(ctx, filter) => {
let conn = Self.dataSource.connector; let conn = Self.dataSource.connector;
const userId = ctx.req.accessToken.userId;
const models = Self.app.models;
let where = buildFilter(ctx.args, (param, value) => { let where = buildFilter(ctx.args, (param, value) => {
switch (param) { switch (param) {
@ -110,6 +112,13 @@ module.exports = Self => {
filter = mergeFilters(filter, {where}); filter = mergeFilters(filter, {where});
const worker = await models.Worker.findById(userId, {fields: ['isFreelance']});
const getMyRoute = await models.ACL.checkAccessAcl(ctx, 'Route', 'getRouteByAgency', 'WRITE');
if (userId && getMyRoute && worker.isFreelance) {
carlossa marked this conversation as resolved
Review

comentaliu a Sergio quan vajes a pujarho per si li pot donar algun problema

comentaliu a Sergio quan vajes a pujarho per si li pot donar algun problema
if (!filter.where) filter.where = {};
filter.where[`workerFk`] = userId;
}
let stmts = []; let stmts = [];
let stmt; let stmt;

View File

@ -8,14 +8,32 @@ describe('Route filter()', () => {
it('should return the routes matching "search"', async() => { it('should return the routes matching "search"', async() => {
const ctx = { const ctx = {
args: { args: {
search: 1, search: 5,
},
req: {
accessToken: {
userId: 9
}
}
};
const result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(1);
expect(result[0].id).toEqual(5);
});
it('should return all results matching the filter', async() => {
const ctx = {
req: {
accessToken: {
userId: 133
}
} }
}; };
const result = await app.models.Route.filter(ctx); const result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(1); expect(result.length).toEqual(3);
expect(result[0].id).toEqual(1);
}); });
it('should return results matching "from" and "to"', async() => { it('should return results matching "from" and "to"', async() => {
@ -32,12 +50,16 @@ describe('Route filter()', () => {
args: { args: {
from: from, from: from,
to: to to: to
},
req: {
accessToken: {
userId: 9
}
} }
}; };
const results = await models.Route.filter(ctx, options); const results = await models.Route.filter(ctx, options);
expect(results.length).toBe(7); expect(results.length).toBe(9);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
@ -50,6 +72,11 @@ describe('Route filter()', () => {
const ctx = { const ctx = {
args: { args: {
m3: 0.1, m3: 0.1,
},
req: {
accessToken: {
userId: 9
}
} }
}; };
@ -62,6 +89,11 @@ describe('Route filter()', () => {
const ctx = { const ctx = {
args: { args: {
description: 'third route', description: 'third route',
},
req: {
accessToken: {
userId: 9
}
} }
}; };
@ -74,24 +106,33 @@ describe('Route filter()', () => {
const ctx = { const ctx = {
args: { args: {
workerFk: 56, workerFk: 56,
},
req: {
accessToken: {
userId: 9
}
} }
}; };
const result = await app.models.Route.filter(ctx); const result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(5); expect(result.length).toEqual(4);
}); });
it('should return the routes matching "warehouseFk"', async() => { it('should return the routes matching "warehouseFk"', async() => {
const ctx = { const ctx = {
args: { args: {
warehouseFk: 1, warehouseFk: 1,
},
req: {
accessToken: {
userId: 9
}
} }
}; };
let result = await app.models.Route.filter(ctx); let result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(7); expect(result.length).toEqual(9);
ctx.args.warehouseFk = 2; ctx.args.warehouseFk = 2;
@ -104,9 +145,13 @@ describe('Route filter()', () => {
const ctx = { const ctx = {
args: { args: {
vehicleFk: 2, vehicleFk: 2,
},
req: {
accessToken: {
userId: 9
}
} }
}; };
const result = await app.models.Route.filter(ctx); const result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(1); expect(result.length).toEqual(1);
@ -116,6 +161,11 @@ describe('Route filter()', () => {
const ctx = { const ctx = {
args: { args: {
agencyModeFk: 7, agencyModeFk: 7,
},
req: {
accessToken: {
userId: 9
}
} }
}; };

View File

@ -22,7 +22,7 @@ describe('route summary()', () => {
}); });
it(`should return a summary object containing it's worker`, async() => { it(`should return a summary object containing it's worker`, async() => {
const result = await app.models.Route.summary(1); const result = await app.models.Route.summary(2);
const worker = result.route.worker().user(); const worker = result.route.worker().user();
expect(worker.name).toEqual('delivery'); expect(worker.name).toEqual('delivery');