fix: refs #7917 fix methods, tests, acls #3085

Closed
carlossa wants to merge 35 commits from 7917-freelancerRoute into dev
10 changed files with 54 additions and 26 deletions
Showing only changes of commit 273068e595 - Show all commits

View File

@ -0,0 +1,6 @@
INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
VALUES
('Route', 'getTickets', 'READ', 'ALLOW', 'ROLE', 'supplier'),
carlossa marked this conversation as resolved Outdated

confirmar con jbreso que rol tienen los autonomos que van a usar esto

confirmar con jbreso que rol tienen los autonomos que van a usar esto

Lo van a ver usuarios delivery

Lo van a ver usuarios delivery
('AgencyTerm', 'filter', 'READ', 'ALLOW', 'ROLE', 'supplier'),
('Route', 'summary', 'READ', 'ALLOW', 'ROLE', 'supplier');

View File

@ -173,9 +173,7 @@ module.exports = Self => {
}
});
filter = mergeFilters(ctx.args.filter, {where});
const userId = ctx.req.accessToken.userId;
const client = await Self.app.models.Client.findById(userId, myOptions);
const supplier = await Self.app.models.Supplier.findOne({where: {nif: client.fi}}, myOptions);
const supplier = await Self.app.models.Supplier.isSupplier(ctx);
if (supplier) {
if (!filter.where) filter.where = {};
filter.where[`e.supplierFk`] = supplier.id;

View File

@ -74,6 +74,12 @@ module.exports = Self => {
filter = mergeFilters(filter, {where});
const supplier = await Self.app.models.Supplier.isSupplier(ctx, myOptions);
carlossa marked this conversation as resolved Outdated

crear acl getRouteByAgency, comprobar los acl de mas a menos permisivo.

esta part de la tarea no la veig implementada

`crear acl getRouteByAgency, comprobar los acl de mas a menos permisivo.` esta part de la tarea no la veig implementada
if (supplier) {
if (!filter.where) filter.where = {};
filter.where[`a.supplierFk`] = supplier.id;
}
const date = Date.vnNew();
date.setHours(0, 0, 0, 0);
const stmts = [];

View File

@ -30,6 +30,7 @@ describe('AgencyTerm filter()', () => {
it('should return results matching "search" searching by integer', async() => {
let ctx = {
args: {
ctx: {req: {accessToken: {userId: authUserId}}},
carlossa marked this conversation as resolved Outdated

posau comú en la par superior, en el beforeall hi ha exemples

posau comú en la par superior, en el beforeall hi ha exemples
search: 1,
}
};
@ -43,6 +44,7 @@ describe('AgencyTerm filter()', () => {
it('should return results matching "search" searching by string', async() => {
let ctx = {
args: {
ctx: {req: {accessToken: {userId: authUserId}}},
search: 'Plants SL',
}
};
@ -65,6 +67,7 @@ describe('AgencyTerm filter()', () => {
const ctx = {
args: {
ctx: {req: {accessToken: {userId: authUserId}}},
from: from,
to: to
}
@ -84,6 +87,7 @@ describe('AgencyTerm filter()', () => {
it('should return results matching "agencyModeFk"', async() => {
let ctx = {
args: {
ctx: {req: {accessToken: {userId: authUserId}}},
agencyModeFk: 1,
}
};
@ -97,6 +101,7 @@ describe('AgencyTerm filter()', () => {
it('should return results matching "agencyFk"', async() => {
let ctx = {
args: {
ctx: {req: {accessToken: {userId: authUserId}}},
agencyFk: 2,
}
};

View File

@ -2,7 +2,7 @@
const {ParameterizedSQL} = require('loopback-connector');
module.exports = Self => {
Self.remoteMethod('getTickets', {
Self.remoteMethodCtx('getTickets', {
Review

els test de back han de verificar les 3 opcions,
un supplier no treballador sols veu lo seu
un treballador veu tot
uno que no es res, no veu res

els test de back han de verificar les 3 opcions, un supplier no treballador sols veu lo seu un treballador veu tot uno que no es res, no veu res
description: 'Find all instances of the model matched by filter from the data source.',
accessType: 'READ',
accepts: [
@ -23,7 +23,7 @@ module.exports = Self => {
}
});
Self.getTickets = async(filter, options) => {
Self.getTickets = async(ctx, filter, options) => {
const conn = Self.dataSource.connector;
const myOptions = {};
@ -77,7 +77,9 @@ module.exports = Self => {
LEFT JOIN ticketObservation tob2 ON tob2.ticketFk = t.id
AND tob2.observationTypeFk = ot2.id
LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN agency ag ON am.agencyFk = ag.id
LEFT JOIN supplierAgencyTerm sat ON sat.agencyFk = ag.id
LEFT JOIN account.user u ON u.id = r.workerFk
LEFT JOIN vehicle v ON v.id = r.vehicleFk
LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk`
@ -85,6 +87,10 @@ module.exports = Self => {
if (!filter.where) filter.where = {};
const supplier = await Self.app.models.Supplier.isSupplier(ctx, myOptions);
if (supplier)
filter.where['sat.supplierFk'] = supplier.id;
const where = filter.where;
where['r.id'] = filter.id;

View File

@ -3,7 +3,7 @@ const app = require('vn-loopback/server/server');
describe('route getTickets()', () => {
it('should return the tickets for a given route', async() => {
const filter = {id: 2};
let result = await app.models.Route.getTickets(filter);
let result = await app.models.Route.getTickets(ctx, filter);
expect(result.length).toEqual(1);
});

View File

@ -2,34 +2,34 @@ const app = require('vn-loopback/server/server');
describe('route summary()', () => {
it('should return a summary object containing data from one route', async() => {
const result = await app.models.Route.summary(1);
const result = await app.models.Route.summary(ctx, 1);
expect(result.route.id).toEqual(1);
});
it(`should return a summary object containing it's agency`, async() => {
const result = await app.models.Route.summary(1);
const result = await app.models.Route.summary(ctx, 1);
const agency = result.route.agencyMode();
expect(agency.name).toEqual('inhouse pickup');
});
it(`should return a summary object containing it's vehicle`, async() => {
const result = await app.models.Route.summary(1);
const result = await app.models.Route.summary(ctx, 1);
const vehicle = result.route.vehicle();
expect(vehicle.numberPlate).toEqual('3333-BAT');
});
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(ctx, 1);
const worker = result.route.worker().user();
expect(worker.name).toEqual('delivery');
});
it(`should return a summary object containing data from the tickets`, async() => {
const result = await app.models.Route.summary(2);
const result = await app.models.Route.summary(ctx, 2);
expect(result.tickets.length).toEqual(1);
});

View File

@ -1,5 +1,5 @@
module.exports = Self => {
Self.remoteMethod('summary', {
Self.remoteMethodCtx('summary', {
description: 'Returns the information of a route showed in the route summary',
accessType: 'READ',
accepts: [{
@ -19,7 +19,7 @@ module.exports = Self => {
}
});
Self.summary = async id => {
Self.summary = async(ctx, id) => {
let summary = {};
let filter = {
@ -53,7 +53,7 @@ module.exports = Self => {
};
summary.route = await Self.app.models.Route.findOne(filter);
summary.tickets = await Self.app.models.Route.getTickets({id: id, order: 'priority ASC'});
summary.tickets = await Self.app.models.Route.getTickets(ctx, {id, order: 'priority ASC'});
return summary;
};

View File

@ -162,4 +162,11 @@ module.exports = Self => {
if ((nameChanged) && !isAlpha(name))
throw new UserError('The social name has an invalid format');
});
Self.isSupplier = async(ctx, options = {}) => {
carlossa marked this conversation as resolved Outdated

aci es mes sencill que pases el userId directament

aci es mes sencill que pases el userId directament
const userId = ctx.req.accessToken.userId;
carlossa marked this conversation as resolved Outdated

ací es on dia que no cal pasar ctx, sino userId

ací es on dia que no cal pasar ctx, sino userId
const client = await Self.app.models.Client.findById(userId, options);
const supplier = await Self.app.models.Supplier.findOne({where: {nif: client.fi}}, options);
return supplier;
};
};

View File

@ -35,19 +35,19 @@
},
"relations": {
"supplierAgencyTerm": {
"type": "hasOne",
"model": "SupplierAgencyTerm",
"foreignKey": "agencyFk"
"type": "hasOne",
"model": "SupplierAgencyTerm",
"foreignKey": "agencyFk"
},
"warehouse": {
"type": "belongsTo",
"model": "Warehouse",
"foreignKey": "warehouseFk"
},
"type": "belongsTo",
"model": "Warehouse",
"foreignKey": "warehouseFk"
},
"workCenter": {
"type": "belongsTo",
"model": "WorkCenter",
"foreignKey": "workCenterFk"
}
"type": "belongsTo",
"model": "WorkCenter",
"foreignKey": "workCenterFk"
}
}
}