fix: refs #7917 fix route filter freeLancer #3327
|
@ -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
|
|||||||
(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
alexm
commented
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
alexm
commented
Poner en Poner en `route`
|
|||||||
|
UPDATE vn.worker
|
||||||
|
SET isFreelance=1
|
||||||
|
WHERE firstName='deliveryFreelancer';
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
INSERT INTO account.`role` (name,description,hasLogin)
|
||||||
|
VALUES ('deliveryFreelancer','Repartidor autónomo',1);
|
||||||
carlossa marked this conversation as resolved
Outdated
alexm
commented
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');
|
||||||
|
;
|
|
@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
const app = require('vn-loopback/server/server');
|
|
||||||
carlossa marked this conversation as resolved
Outdated
alexm
commented
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);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -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
alexm
commented
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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
|
|
Loading…
Reference in New Issue
Poner fechas relativas