fix: refs #7917 fix methods, tests, acls #3085
|
@ -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
|
||||
('AgencyTerm', 'filter', 'READ', 'ALLOW', 'ROLE', 'supplier'),
|
||||
('Route', 'summary', 'READ', 'ALLOW', 'ROLE', 'supplier');
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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
jgallego
commented
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 = [];
|
||||
|
|
|
@ -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
jgallego
commented
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,
|
||||
}
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
const {ParameterizedSQL} = require('loopback-connector');
|
||||
|
||||
module.exports = Self => {
|
||||
Self.remoteMethod('getTickets', {
|
||||
Self.remoteMethodCtx('getTickets', {
|
||||
jgallego
commented
els test de back han de verificar les 3 opcions, 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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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
jgallego
commented
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
jgallego
commented
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;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
confirmar con jbreso que rol tienen los autonomos que van a usar esto
Lo van a ver usuarios delivery