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`)
|
||||
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()),
|
||||
(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()),
|
||||
(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()),
|
||||
(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()),
|
||||
(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`)
|
||||
VALUES
|
||||
|
@ -4061,3 +4063,8 @@ INSERT IGNORE INTO vn.osrmConfig (id,url,tolerance)
|
|||
INSERT IGNORE INTO vn.inventoryConfig
|
||||
SET id = 1,
|
||||
supplierFk = 4;
|
||||
|
||||
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);
|
||||
|
||||
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];
|
||||
|
||||
expect(firstAgencyTerm.routeFk).toEqual(1);
|
||||
expect(agencyTerms.length).toEqual(5);
|
||||
expect(agencyTerms.length).toEqual(7);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -49,7 +49,7 @@ describe('AgencyTerm filter()', () => {
|
|||
|
||||
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() => {
|
||||
|
@ -72,7 +72,7 @@ describe('AgencyTerm filter()', () => {
|
|||
|
||||
const results = await models.AgencyTerm.filter(ctx, options);
|
||||
|
||||
expect(results.length).toBe(5);
|
||||
expect(results.length).toBe(7);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -90,7 +90,7 @@ describe('AgencyTerm filter()', () => {
|
|||
|
||||
let result = await app.models.AgencyTerm.filter(ctx);
|
||||
|
||||
expect(result.length).toEqual(1);
|
||||
expect(result.length).toEqual(2);
|
||||
expect(result[0].routeFk).toEqual(1);
|
||||
});
|
||||
|
||||
|
@ -103,7 +103,7 @@ describe('AgencyTerm filter()', () => {
|
|||
|
||||
let result = await app.models.AgencyTerm.filter(ctx);
|
||||
|
||||
expect(result.length).toEqual(1);
|
||||
expect(result.length).toEqual(2);
|
||||
expect(result[0].routeFk).toEqual(2);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,109 +0,0 @@
|
|||
const app = require('vn-loopback/server/server');
|
||||
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) => {
|
||||
let conn = Self.dataSource.connector;
|
||||
const userId = ctx.req.accessToken.userId;
|
||||
const models = Self.app.models;
|
||||
|
||||
let where = buildFilter(ctx.args, (param, value) => {
|
||||
switch (param) {
|
||||
|
@ -110,6 +112,13 @@ module.exports = Self => {
|
|||
|
||||
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
|
||||
if (!filter.where) filter.where = {};
|
||||
filter.where[`workerFk`] = userId;
|
||||
}
|
||||
let stmts = [];
|
||||
let stmt;
|
||||
|
||||
|
|
|
@ -8,14 +8,32 @@ describe('Route filter()', () => {
|
|||
it('should return the routes matching "search"', async() => {
|
||||
const ctx = {
|
||||
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);
|
||||
|
||||
expect(result.length).toEqual(1);
|
||||
expect(result[0].id).toEqual(1);
|
||||
expect(result.length).toEqual(3);
|
||||
});
|
||||
|
||||
it('should return results matching "from" and "to"', async() => {
|
||||
|
@ -32,12 +50,16 @@ describe('Route filter()', () => {
|
|||
args: {
|
||||
from: from,
|
||||
to: to
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const results = await models.Route.filter(ctx, options);
|
||||
|
||||
expect(results.length).toBe(7);
|
||||
expect(results.length).toBe(9);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -50,6 +72,11 @@ describe('Route filter()', () => {
|
|||
const ctx = {
|
||||
args: {
|
||||
m3: 0.1,
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -62,6 +89,11 @@ describe('Route filter()', () => {
|
|||
const ctx = {
|
||||
args: {
|
||||
description: 'third route',
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -74,24 +106,33 @@ describe('Route filter()', () => {
|
|||
const ctx = {
|
||||
args: {
|
||||
workerFk: 56,
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
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() => {
|
||||
const ctx = {
|
||||
args: {
|
||||
warehouseFk: 1,
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let result = await app.models.Route.filter(ctx);
|
||||
|
||||
expect(result.length).toEqual(7);
|
||||
expect(result.length).toEqual(9);
|
||||
|
||||
ctx.args.warehouseFk = 2;
|
||||
|
||||
|
@ -104,9 +145,13 @@ describe('Route filter()', () => {
|
|||
const ctx = {
|
||||
args: {
|
||||
vehicleFk: 2,
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const result = await app.models.Route.filter(ctx);
|
||||
|
||||
expect(result.length).toEqual(1);
|
||||
|
@ -116,6 +161,11 @@ describe('Route filter()', () => {
|
|||
const ctx = {
|
||||
args: {
|
||||
agencyModeFk: 7,
|
||||
},
|
||||
req: {
|
||||
accessToken: {
|
||||
userId: 9
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ describe('route summary()', () => {
|
|||
});
|
||||
|
||||
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();
|
||||
|
||||
expect(worker.name).toEqual('delivery');
|
||||
|
|
Loading…
Reference in New Issue
comentaliu a Sergio quan vajes a pujarho per si li pot donar algun problema