Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6998-supplierMigration
gitea/salix/pipeline/pr-dev This commit looks good
Details
gitea/salix/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
commit
f37dcddbb4
|
@ -4,15 +4,7 @@ describe('collection getSales()', () => {
|
||||||
const collectionOrTicketFk = 999999;
|
const collectionOrTicketFk = 999999;
|
||||||
const print = true;
|
const print = true;
|
||||||
const source = 'CHECKER';
|
const source = 'CHECKER';
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
beforeAll(() => {
|
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'http://localhost'},
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return a collection with tickets, placements and barcodes settled correctly', async() => {
|
it('should return a collection with tickets, placements and barcodes settled correctly', async() => {
|
||||||
const tx = await models.Collection.beginTransaction({});
|
const tx = await models.Collection.beginTransaction({});
|
||||||
|
|
|
@ -1,15 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('collection getTickets()', () => {
|
describe('collection getTickets()', () => {
|
||||||
let ctx;
|
const ctx = beforeAll.getCtx();
|
||||||
beforeAll(async() => {
|
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get tickets, sales and barcodes from collection', async() => {
|
it('should get tickets, sales and barcodes from collection', async() => {
|
||||||
const tx = await models.Collection.beginTransaction({});
|
const tx = await models.Collection.beginTransaction({});
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('setSaleQuantity()', () => {
|
describe('setSaleQuantity()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should change quantity sale', async() => {
|
it('should change quantity sale', async() => {
|
||||||
const tx = await models.Ticket.beginTransaction({});
|
const tx = await models.Ticket.beginTransaction({});
|
||||||
|
|
|
@ -1,22 +1,7 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('getStarredModules()', () => {
|
describe('getStarredModules()', () => {
|
||||||
const activeCtx = {
|
const ctx = beforeAll.getCtx();
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ctx = {req: activeCtx};
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it(`should return the starred modules for a given user`, async() => {
|
it(`should return the starred modules for a given user`, async() => {
|
||||||
const newStarred = await models.StarredModule.create({workerFk: 9, moduleFk: 'customer', position: 1});
|
const newStarred = await models.StarredModule.create({workerFk: 9, moduleFk: 'customer', position: 1});
|
||||||
|
|
|
@ -1,24 +1,8 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('setPosition()', () => {
|
describe('setPosition()', () => {
|
||||||
const activeCtx = {
|
const ctx = beforeAll.getCtx();
|
||||||
accessToken: {userId: 9},
|
beforeAll.mockLoopBackContext();
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ctx = {
|
|
||||||
req: activeCtx
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should increase the orders module position by replacing it with clients and vice versa', async() => {
|
it('should increase the orders module position by replacing it with clients and vice versa', async() => {
|
||||||
const tx = await models.StarredModule.beginTransaction({});
|
const tx = await models.StarredModule.beginTransaction({});
|
||||||
|
|
|
@ -1,24 +1,7 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('toggleStarredModule()', () => {
|
describe('toggleStarredModule()', () => {
|
||||||
const activeCtx = {
|
const ctx = beforeAll.getCtx();
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ctx = {
|
|
||||||
req: activeCtx
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create a new starred module and then remove it by calling the method again with same args', async() => {
|
it('should create a new starred module and then remove it by calling the method again with same args', async() => {
|
||||||
const starredModule = await models.StarredModule.toggleStarredModule(ctx, 'order');
|
const starredModule = await models.StarredModule.toggleStarredModule(ctx, 'order');
|
||||||
|
@ -26,7 +9,7 @@ describe('toggleStarredModule()', () => {
|
||||||
|
|
||||||
expect(starredModules.length).toEqual(1);
|
expect(starredModules.length).toEqual(1);
|
||||||
expect(starredModule.moduleFk).toEqual('order');
|
expect(starredModule.moduleFk).toEqual('order');
|
||||||
expect(starredModule.workerFk).toEqual(activeCtx.accessToken.userId);
|
expect(starredModule.workerFk).toEqual(ctx.req.accessToken.userId);
|
||||||
expect(starredModule.position).toEqual(starredModules.length);
|
expect(starredModule.position).toEqual(starredModules.length);
|
||||||
|
|
||||||
await models.StarredModule.toggleStarredModule(ctx, 'order');
|
await models.StarredModule.toggleStarredModule(ctx, 'order');
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('userConfig getUserConfig()', () => {
|
describe('userConfig getUserConfig()', () => {
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
it(`should return the configuration data of a given user`, async() => {
|
it(`should return the configuration data of a given user`, async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
|
||||||
const result = await models.UserConfig.getUserConfig(ctx, options);
|
const result = await models.UserConfig.getUserConfig(ctx, options);
|
||||||
|
|
||||||
expect(result.warehouseFk).toEqual(1);
|
expect(result.warehouseFk).toEqual(1);
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('loopback model MailAliasAccount', () => {
|
describe('loopback model MailAliasAccount', () => {
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
it('should add a mail Alias', async() => {
|
it('should add a mail Alias', async() => {
|
||||||
const tx = await models.MailAliasAccount.beginTransaction({});
|
const tx = await models.MailAliasAccount.beginTransaction({});
|
||||||
let error;
|
let error;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx, accessToken: {userId: 9}};
|
const options = {transaction: tx, ctx};
|
||||||
await models.MailAliasAccount.create({mailAlias: 2, account: 5}, options);
|
await models.MailAliasAccount.create({mailAlias: 2, account: 5}, options);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
|
@ -23,7 +24,7 @@ describe('loopback model MailAliasAccount', () => {
|
||||||
let error;
|
let error;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx, accessToken: {userId: 9}};
|
const options = {transaction: tx, ctx};
|
||||||
await models.MailAliasAccount.create({mailAlias: 3, account: 5}, options);
|
await models.MailAliasAccount.create({mailAlias: 3, account: 5}, options);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
"isInventory": {
|
"isInventory": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"isManaged":{
|
"isManaged": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"countryFk": {
|
"countryFk": {
|
||||||
|
@ -36,6 +36,13 @@
|
||||||
"foreignKey": "countryFk"
|
"foreignKey": "countryFk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"relations": {
|
||||||
|
"address": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "Address",
|
||||||
|
"foreignKey": "addressFk"
|
||||||
|
}
|
||||||
|
},
|
||||||
"acls": [
|
"acls": [
|
||||||
{
|
{
|
||||||
"accessType": "READ",
|
"accessType": "READ",
|
||||||
|
@ -44,5 +51,11 @@
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"scope" : {"where": {"isForTicket": {"neq": 0}}}
|
"scope": {
|
||||||
|
"where": {
|
||||||
|
"isForTicket": {
|
||||||
|
"neq": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -10,7 +10,6 @@ async function init() {
|
||||||
host: process.env.DB_HOST,
|
host: process.env.DB_HOST,
|
||||||
port: process.env.DB_PORT
|
port: process.env.DB_PORT
|
||||||
});
|
});
|
||||||
|
|
||||||
const bootOptions = {dataSources};
|
const bootOptions = {dataSources};
|
||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
app.boot(bootOptions,
|
app.boot(bootOptions,
|
||||||
|
@ -33,3 +32,4 @@ module.exports = {
|
||||||
|
|
||||||
if (require.main === module)
|
if (require.main === module)
|
||||||
init();
|
init();
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ async function test() {
|
||||||
'loopback/**/*[sS]pec.js',
|
'loopback/**/*[sS]pec.js',
|
||||||
'modules/*/back/**/*.[sS]pec.js'
|
'modules/*/back/**/*.[sS]pec.js'
|
||||||
],
|
],
|
||||||
helpers: []
|
helpers: [`back/vn-jasmine.js`],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (PARALLEL) {
|
if (PARALLEL) {
|
||||||
|
@ -114,7 +114,6 @@ async function test() {
|
||||||
if (opts.ci)
|
if (opts.ci)
|
||||||
runner.jasmine.DEFAULT_TIMEOUT_INTERVAL = SPEC_TIMEOUT;
|
runner.jasmine.DEFAULT_TIMEOUT_INTERVAL = SPEC_TIMEOUT;
|
||||||
|
|
||||||
// runner.loadConfigFile('back/jasmine.json');
|
|
||||||
runner.loadConfig(config);
|
runner.loadConfig(config);
|
||||||
process.env.SPEC_IS_RUNNING = true;
|
process.env.SPEC_IS_RUNNING = true;
|
||||||
await runner.execute();
|
await runner.execute();
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
const LoopBackContext = require('loopback-context');
|
||||||
|
const getAccessToken = (userId = 9) => {
|
||||||
|
return {accessToken: {userId}};
|
||||||
|
};
|
||||||
|
const DEFAULT_HEADERS = {headers: {origin: 'http://localhost'}};
|
||||||
|
const default_before_all = userId => {
|
||||||
|
return {
|
||||||
|
req: {
|
||||||
|
...getAccessToken(userId),
|
||||||
|
...DEFAULT_HEADERS,
|
||||||
|
...{__: value => value}
|
||||||
|
|
||||||
|
},
|
||||||
|
args: {}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const default_loopback_ctx = userId => {
|
||||||
|
return {
|
||||||
|
...getAccessToken(userId),
|
||||||
|
...default_before_all(userId),
|
||||||
|
http: {
|
||||||
|
...default_before_all(userId)
|
||||||
|
},
|
||||||
|
args: {}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
function vnBeforeAll() {
|
||||||
|
Object.assign(beforeAll, {getCtx: default_before_all, mockLoopBackContext});
|
||||||
|
}
|
||||||
|
|
||||||
|
const mockLoopBackContext = userId => {
|
||||||
|
const activeCtx = default_loopback_ctx(userId);
|
||||||
|
beforeAll(() => {
|
||||||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
active: activeCtx
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return activeCtx;
|
||||||
|
};
|
||||||
|
module.exports = {
|
||||||
|
mockLoopBackContext
|
||||||
|
};
|
||||||
|
|
||||||
|
(function init() {
|
||||||
|
vnBeforeAll();
|
||||||
|
})();
|
|
@ -3232,7 +3232,6 @@ INSERT IGNORE INTO vn.itemType
|
||||||
workerFk = 103,
|
workerFk = 103,
|
||||||
isInventory = TRUE,
|
isInventory = TRUE,
|
||||||
life = 10,
|
life = 10,
|
||||||
density = 250,
|
|
||||||
itemPackingTypeFk = NULL,
|
itemPackingTypeFk = NULL,
|
||||||
temperatureFk = 'warm';
|
temperatureFk = 'warm';
|
||||||
|
|
||||||
|
@ -3912,4 +3911,3 @@ VALUES(1, '');
|
||||||
INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode,
|
INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode,
|
||||||
truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
|
truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
|
||||||
VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, NULL, 'NCC', NULL);
|
VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, NULL, 'NCC', NULL);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `account`.`mailAliasAccount_afterDelete`
|
||||||
|
AFTER DELETE ON `mailAliasAccount`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO userLog
|
||||||
|
SET `action` = 'delete',
|
||||||
|
`changedModel` = 'MailAliasAccount',
|
||||||
|
`changedModelId` = OLD.id,
|
||||||
|
`userFk` = account.myUser_getId();
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `account`.`mailAliasAccount_beforeInsert`
|
||||||
|
BEFORE INSERT ON `mailAliasAccount`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `account`.`mailAliasAccount_beforeUpdate`
|
||||||
|
BEFORE UPDATE ON `mailAliasAccount`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -59,7 +59,7 @@ BEGIN
|
||||||
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
||||||
JOIN vn.component c ON c.id = sc.componentFk
|
JOIN vn.component c ON c.id = sc.componentFk
|
||||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
JOIN vn.componentType ct ON ct.id = c.typeFk
|
||||||
WHERE ct.code = 'FREIGHT'
|
WHERE ct.code = 'freight'
|
||||||
AND r.created BETWEEN vDatedFrom AND vDatedTo
|
AND r.created BETWEEN vDatedFrom AND vDatedTo
|
||||||
GROUP BY r.id
|
GROUP BY r.id
|
||||||
) sub ON sub.routeFk = r.Id_Ruta
|
) sub ON sub.routeFk = r.Id_Ruta
|
||||||
|
|
|
@ -2,7 +2,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||||
SQL SECURITY DEFINER
|
SQL SECURITY DEFINER
|
||||||
VIEW `bi`.`tarifa_componentes_series`
|
VIEW `bi`.`tarifa_componentes_series`
|
||||||
AS SELECT `ct`.`id` AS `tarifa_componentes_series_id`,
|
AS SELECT `ct`.`id` AS `tarifa_componentes_series_id`,
|
||||||
`ct`.`type` AS `Serie`,
|
`ct`.`name` AS `Serie`,
|
||||||
`ct`.`isBase` AS `base`,
|
`ct`.`isBase` AS `base`,
|
||||||
`ct`.`isMargin` AS `margen`
|
`ct`.`isMargin` AS `margen`
|
||||||
FROM `vn`.`componentType` `ct`
|
FROM `vn`.`componentType` `ct`
|
||||||
|
|
|
@ -117,7 +117,7 @@ proc: BEGIN
|
||||||
)sub
|
)sub
|
||||||
GROUP BY sub.itemFk;
|
GROUP BY sub.itemFk;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.itemCalc, tItemRange;
|
DROP TEMPORARY TABLE tmp.itemCalc, tItemRange, tmp.itemList;
|
||||||
CALL cache_calc_end (vCalc);
|
CALL cache_calc_end (vCalc);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -121,7 +121,7 @@ proc: BEGIN
|
||||||
)sub
|
)sub
|
||||||
GROUP BY sub.itemFk;
|
GROUP BY sub.itemFk;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.itemCalc, itemRange;
|
DROP TEMPORARY TABLE tmp.itemCalc, itemRange, tmp.itemList;
|
||||||
CALL cache_calc_end (vCalc);
|
CALL cache_calc_end (vCalc);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -7,7 +7,6 @@ BEGIN
|
||||||
*/
|
*/
|
||||||
DECLARE vRewriteKop INT DEFAULT NULL;
|
DECLARE vRewriteKop INT DEFAULT NULL;
|
||||||
DECLARE vTruncatePutOrder INT DEFAULT NULL;
|
DECLARE vTruncatePutOrder INT DEFAULT NULL;
|
||||||
DECLARE vBarcode CHAR(15) DEFAULT NULL;
|
|
||||||
DECLARE vKop INT;
|
DECLARE vKop INT;
|
||||||
DECLARE vPutOrderFk BIGINT;
|
DECLARE vPutOrderFk BIGINT;
|
||||||
|
|
||||||
|
@ -16,17 +15,6 @@ BEGIN
|
||||||
FROM ekt
|
FROM ekt
|
||||||
WHERE id = vSelf;
|
WHERE id = vSelf;
|
||||||
|
|
||||||
-- Generates the barcode
|
|
||||||
|
|
||||||
SELECT CONCAT(
|
|
||||||
LPAD(IFNULL(auction,0), 3, 0),
|
|
||||||
LPAD(IFNULL(klo, 99), 2, 0),
|
|
||||||
LPAD(DAYOFYEAR(fec), 3, 0),
|
|
||||||
COALESCE(agj, RIGHT(batchNumber,7), id))
|
|
||||||
INTO vBarcode
|
|
||||||
FROM ekt
|
|
||||||
WHERE id = vSelf;
|
|
||||||
|
|
||||||
-- Rewrites the kop parameter
|
-- Rewrites the kop parameter
|
||||||
|
|
||||||
IF vKop IS NULL THEN
|
IF vKop IS NULL THEN
|
||||||
|
@ -46,10 +34,9 @@ BEGIN
|
||||||
|
|
||||||
-- Refresh EKT
|
-- Refresh EKT
|
||||||
|
|
||||||
UPDATE ekt SET
|
UPDATE ekt
|
||||||
barcode = vBarcode
|
SET kop = vKop,
|
||||||
,kop = vKop
|
putOrderFk = vTruncatePutOrder
|
||||||
,putOrderFk = vTruncatePutOrder
|
|
||||||
WHERE id = vSelf;
|
WHERE id = vSelf;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -2,7 +2,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||||
SQL SECURITY DEFINER
|
SQL SECURITY DEFINER
|
||||||
VIEW `edi`.`ektRecent`
|
VIEW `edi`.`ektRecent`
|
||||||
AS SELECT `e`.`id` AS `id`,
|
AS SELECT `e`.`id` AS `id`,
|
||||||
`e`.`barcode` AS `barcode`,
|
|
||||||
`e`.`entryYear` AS `entryYear`,
|
`e`.`entryYear` AS `entryYear`,
|
||||||
`e`.`batchNumber` AS `batchNumber`,
|
`e`.`batchNumber` AS `batchNumber`,
|
||||||
`e`.`deliveryNumber` AS `deliveryNumber`,
|
`e`.`deliveryNumber` AS `deliveryNumber`,
|
||||||
|
|
|
@ -30,6 +30,7 @@ BEGIN
|
||||||
tmp.ticketComponentPrice,
|
tmp.ticketComponentPrice,
|
||||||
tmp.ticketComponent,
|
tmp.ticketComponent,
|
||||||
tmp.ticketLot,
|
tmp.ticketLot,
|
||||||
tmp.zoneGetShipped;
|
tmp.zoneGetShipped,
|
||||||
|
tmp.item;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -6,19 +6,6 @@ BEGIN
|
||||||
* identificando y notificando los asientos descuadrados
|
* identificando y notificando los asientos descuadrados
|
||||||
* y ajustando los saldos en caso necesario.
|
* y ajustando los saldos en caso necesario.
|
||||||
*/
|
*/
|
||||||
INSERT INTO mail (receiver, subject, body)
|
|
||||||
SELECT 'cau@verdnatura.es',
|
|
||||||
'Asientos descuadrados',
|
|
||||||
GROUP_CONCAT(CONCAT(' Asiento: ', ASIEN, ' - Importe:', recon) SEPARATOR ' | \n')
|
|
||||||
FROM (
|
|
||||||
SELECT ASIEN,
|
|
||||||
SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0)) recon
|
|
||||||
FROM XDiario
|
|
||||||
WHERE NOT enlazado
|
|
||||||
GROUP BY ASIEN
|
|
||||||
HAVING ABS(SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0))) > 0.01
|
|
||||||
) sub
|
|
||||||
HAVING COUNT(*);
|
|
||||||
|
|
||||||
UPDATE XDiario xd
|
UPDATE XDiario xd
|
||||||
JOIN (
|
JOIN (
|
||||||
|
|
|
@ -16,9 +16,9 @@ BEGIN
|
||||||
|
|
||||||
SET @order = 0;
|
SET @order = 0;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.newSaleList;
|
DROP TEMPORARY TABLE IF EXISTS tNewSaleList;
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp.newSaleList
|
CREATE TEMPORARY TABLE tNewSaleList
|
||||||
SELECT id as saleFk, @order := @order + 1 as orden
|
SELECT id as saleFk, @order := @order + 1 as orden
|
||||||
FROM vn.sale
|
FROM vn.sale
|
||||||
WHERE ticketFk = vTargetTicketFk
|
WHERE ticketFk = vTargetTicketFk
|
||||||
|
@ -28,7 +28,8 @@ BEGIN
|
||||||
SELECT ns.saleFk, sc.componentFk, sc.value
|
SELECT ns.saleFk, sc.componentFk, sc.value
|
||||||
FROM vn.saleComponent sc
|
FROM vn.saleComponent sc
|
||||||
JOIN tmp.saleList s ON s.saleFk = sc.saleFk
|
JOIN tmp.saleList s ON s.saleFk = sc.saleFk
|
||||||
JOIN tmp.newSaleList ns ON ns.orden = s.orden;
|
JOIN tNewSaleList ns ON ns.orden = s.orden;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tNewSaleList;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -8,7 +8,6 @@ BEGIN
|
||||||
*/
|
*/
|
||||||
DECLARE vTaxRowLimit INT;
|
DECLARE vTaxRowLimit INT;
|
||||||
DECLARE vLines INT;
|
DECLARE vLines INT;
|
||||||
DECLARE vHasDistinctTransactions INT;
|
|
||||||
|
|
||||||
SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig;
|
SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig;
|
||||||
|
|
||||||
|
@ -20,17 +19,5 @@ BEGIN
|
||||||
IF vLines >= vTaxRowLimit THEN
|
IF vLines >= vTaxRowLimit THEN
|
||||||
CALL util.throw (CONCAT('The maximum number of lines is ', vTaxRowLimit));
|
CALL util.throw (CONCAT('The maximum number of lines is ', vTaxRowLimit));
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT COUNT(DISTINCT transactionTypeSageFk) INTO vHasDistinctTransactions
|
|
||||||
FROM invoiceIn ii
|
|
||||||
JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
|
|
||||||
JOIN invoiceInSerial iis ON iis.code = ii.serial
|
|
||||||
WHERE ii.id = vInvoiceInFk
|
|
||||||
AND iis.taxAreaFk = 'CEE'
|
|
||||||
AND transactionTypeSageFk;
|
|
||||||
|
|
||||||
IF vHasDistinctTransactions > 1 THEN
|
|
||||||
CALL util.throw ('This invoice does not allow different types of transactions');
|
|
||||||
END IF;
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -13,6 +13,19 @@ BEGIN
|
||||||
* @param vBookEntry Id de asiento, si es NULL se genera uno nuevo
|
* @param vBookEntry Id de asiento, si es NULL se genera uno nuevo
|
||||||
*/
|
*/
|
||||||
DECLARE vFiscalYear INT;
|
DECLARE vFiscalYear INT;
|
||||||
|
DECLARE vHasDistinctTransactions INT;
|
||||||
|
|
||||||
|
SELECT COUNT(DISTINCT transactionTypeSageFk) INTO vHasDistinctTransactions
|
||||||
|
FROM invoiceIn ii
|
||||||
|
JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
|
||||||
|
JOIN invoiceInSerial iis ON iis.code = ii.serial
|
||||||
|
WHERE ii.id = vSelf
|
||||||
|
AND iis.taxAreaFk = 'CEE'
|
||||||
|
AND transactionTypeSageFk;
|
||||||
|
|
||||||
|
IF vHasDistinctTransactions > 1 THEN
|
||||||
|
CALL util.throw ('This invoice does not allow different types of transactions');
|
||||||
|
END IF;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
|
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
|
|
|
@ -59,5 +59,7 @@ BEGIN
|
||||||
WHERE p.pickingOrder BETWEEN vPickingOrderFrom AND vPickingOrderTo
|
WHERE p.pickingOrder BETWEEN vPickingOrderFrom AND vPickingOrderTo
|
||||||
AND p.sectorFk = vSectorFk
|
AND p.sectorFk = vSectorFk
|
||||||
ORDER BY p.pickingOrder;
|
ORDER BY p.pickingOrder;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.stockMisfit;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -76,5 +76,7 @@ BEGIN
|
||||||
i.quantity amount
|
i.quantity amount
|
||||||
FROM tmp.itemAtp i
|
FROM tmp.itemAtp i
|
||||||
HAVING amount != 0;
|
HAVING amount != 0;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.itemAtp;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -15,14 +15,13 @@ BEGIN
|
||||||
* @param vDated Fecha
|
* @param vDated Fecha
|
||||||
* @param vShowType Mostrar tipos
|
* @param vShowType Mostrar tipos
|
||||||
*/
|
*/
|
||||||
DECLARE vCalcFk INT;
|
DECLARE vAvailableCalcFk INT;
|
||||||
|
DECLARE vVisibleCalcFk INT;
|
||||||
DECLARE vTypeFk INT;
|
DECLARE vTypeFk INT;
|
||||||
DECLARE vPriority INT DEFAULT 1;
|
DECLARE vPriority INT DEFAULT 1;
|
||||||
|
|
||||||
CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vDated);
|
CALL cache.available_refresh(vAvailableCalcFk, FALSE, vWarehouseFk, vDated);
|
||||||
|
CALL cache.visible_refresh(vVisibleCalcFk, FALSE, vWarehouseFk);
|
||||||
-- Añadido temporalmente para que no se cuelgue la db
|
|
||||||
SET vShowType = TRUE;
|
|
||||||
|
|
||||||
WITH itemTags AS (
|
WITH itemTags AS (
|
||||||
SELECT i.id,
|
SELECT i.id,
|
||||||
|
@ -65,21 +64,21 @@ BEGIN
|
||||||
WHEN b.groupingMode = 'packing' THEN b.packing
|
WHEN b.groupingMode = 'packing' THEN b.packing
|
||||||
ELSE 1
|
ELSE 1
|
||||||
END AS minQuantity,
|
END AS minQuantity,
|
||||||
iss.visible located,
|
v.visible located,
|
||||||
b.price2
|
b.price2
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
JOIN cache.available a ON a.item_id = i.id
|
JOIN cache.available a ON a.item_id = i.id
|
||||||
AND a.calc_id = vCalcFk
|
AND a.calc_id = vAvailableCalcFk
|
||||||
|
LEFT JOIN cache.visible v ON v.item_id = i.id
|
||||||
|
AND v.calc_id = vVisibleCalcFk
|
||||||
|
LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
|
||||||
|
AND lb.warehouse_id = vWarehouseFk
|
||||||
LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id
|
LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id
|
||||||
AND ip.itemFk = vSelf
|
AND ip.itemFk = vSelf
|
||||||
LEFT JOIN vn.itemTag it ON it.itemFk = i.id
|
LEFT JOIN vn.itemTag it ON it.itemFk = i.id
|
||||||
AND it.priority = vPriority
|
AND it.priority = vPriority
|
||||||
LEFT JOIN vn.tag t ON t.id = it.tagFk
|
LEFT JOIN vn.tag t ON t.id = it.tagFk
|
||||||
LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
|
|
||||||
AND lb.warehouse_id = vWarehouseFk
|
|
||||||
LEFT JOIN vn.buy b ON b.id = lb.buy_id
|
LEFT JOIN vn.buy b ON b.id = lb.buy_id
|
||||||
LEFT JOIN vn.itemShelvingStock iss ON iss.itemFk = i.id
|
|
||||||
AND iss.warehouseFk = vWarehouseFk
|
|
||||||
JOIN itemTags its
|
JOIN itemTags its
|
||||||
WHERE a.available > 0
|
WHERE a.available > 0
|
||||||
AND (i.typeFk = its.typeFk OR NOT vShowType)
|
AND (i.typeFk = its.typeFk OR NOT vShowType)
|
||||||
|
|
|
@ -104,5 +104,6 @@ BEGIN
|
||||||
) sub;
|
) sub;
|
||||||
DROP TEMPORARY TABLE tmp.whiteTicket;
|
DROP TEMPORARY TABLE tmp.whiteTicket;
|
||||||
DROP TEMPORARY TABLE tmp.sectorTypeTicket;
|
DROP TEMPORARY TABLE tmp.sectorTypeTicket;
|
||||||
|
DROP TEMPORARY TABLE tmp.productionBuffer;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -8,7 +8,7 @@ BEGIN
|
||||||
JOIN vn.component c ON c.id = sc.componentFk
|
JOIN vn.component c ON c.id = sc.componentFk
|
||||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
JOIN vn.componentType ct ON ct.id = c.typeFk
|
||||||
WHERE s.ticketFk = vTicketFk
|
WHERE s.ticketFk = vTicketFk
|
||||||
AND ct.`type` = 'otros';
|
AND ct.code = 'other';
|
||||||
|
|
||||||
UPDATE vn.sale s
|
UPDATE vn.sale s
|
||||||
JOIN (
|
JOIN (
|
||||||
|
|
|
@ -23,6 +23,7 @@ proc: BEGIN
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
IF vParam REGEXP '^[0-9]+$' THEN
|
||||||
-- Se comprueba si es una preparación previa
|
-- Se comprueba si es una preparación previa
|
||||||
SELECT COUNT(*) INTO vIsSaleGroup
|
SELECT COUNT(*) INTO vIsSaleGroup
|
||||||
FROM vn.saleGroup sg
|
FROM vn.saleGroup sg
|
||||||
|
@ -54,8 +55,9 @@ proc: BEGIN
|
||||||
CALL vn.collection_setParking(vParam, vParkingFk);
|
CALL vn.collection_setParking(vParam, vParkingFk);
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
ELSE
|
||||||
-- Por descarte, se considera una matrícula
|
-- Por descarte, se considera una matrícula
|
||||||
CALL vn.shelving_setParking(vParam, vParkingFk);
|
CALL vn.shelving_setParking(vParam, vParkingFk);
|
||||||
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -3,14 +3,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_DelayTruck`(
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE done INT DEFAULT FALSE;
|
DECLARE done INT DEFAULT FALSE;
|
||||||
DECLARE vTicketFk INT;
|
DECLARE vTicketFk INT;
|
||||||
DECLARE cur1 CURSOR FOR SELECT ticketFk FROM tmp.ticket;
|
DECLARE cur1 CURSOR FOR SELECT ticketFk FROM tTicket;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||||
|
|
||||||
CALL vn.productionControl(vWarehouserFk,0) ;
|
CALL vn.productionControl(vWarehouserFk,0) ;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
|
DROP TEMPORARY TABLE IF EXISTS tTicket;
|
||||||
CREATE TEMPORARY TABLE tmp.ticket
|
CREATE TEMPORARY TABLE tTicket
|
||||||
SELECT ticketFk
|
SELECT ticketFk
|
||||||
FROM tmp.productionBuffer
|
FROM tmp.productionBuffer
|
||||||
JOIN alertLevel al ON al.code = 'FREE'
|
JOIN alertLevel al ON al.code = 'FREE'
|
||||||
|
@ -31,5 +31,6 @@ BEGIN
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
CLOSE cur1;
|
CLOSE cur1;
|
||||||
|
DROP TEMPORARY TABLE tTicket, tmp.productionBuffer;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -65,6 +65,8 @@ BEGIN
|
||||||
IF (vZoneFk IS NULL OR vZoneFk = 0) AND vIsRequiredZone THEN
|
IF (vZoneFk IS NULL OR vZoneFk = 0) AND vIsRequiredZone THEN
|
||||||
CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
|
CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.zoneGetShipped;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
INSERT INTO ticket (
|
INSERT INTO ticket (
|
||||||
|
|
|
@ -20,7 +20,8 @@ BEGIN
|
||||||
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
||||||
JOIN saleComponent sc ON sc.saleFk = s.id
|
JOIN saleComponent sc ON sc.saleFk = s.id
|
||||||
JOIN component c ON c.id = sc.componentFk
|
JOIN component c ON c.id = sc.componentFk
|
||||||
JOIN componentType ct ON ct.id = c.typeFk AND ct.id = 1
|
JOIN componentType ct ON ct.id = c.typeFk
|
||||||
|
AND ct.code = 'cost'
|
||||||
WHERE t.shipped BETWEEN vShippedFrom AND vShippedTo
|
WHERE t.shipped BETWEEN vShippedFrom AND vShippedTo
|
||||||
AND ic.merchandise;
|
AND ic.merchandise;
|
||||||
|
|
||||||
|
|
|
@ -213,6 +213,6 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
CLOSE rsTicket;
|
CLOSE rsTicket;
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.time;
|
DROP TEMPORARY TABLE IF EXISTS tmp.time, tmp.zoneGetLanded;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -66,7 +66,7 @@ BEGIN
|
||||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
JOIN vn.componentType ct ON ct.id = c.typeFk
|
||||||
JOIN vn.sale s ON s.id = sc.saleFk
|
JOIN vn.sale s ON s.id = sc.saleFk
|
||||||
JOIN tmp.ticket t ON t.ticketFk = s.ticketFk
|
JOIN tmp.ticket t ON t.ticketFk = s.ticketFk
|
||||||
WHERE ct.code = 'FREIGHT'
|
WHERE ct.code = 'freight'
|
||||||
GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
|
GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
|
||||||
SET tf.freight = sb.freight;
|
SET tf.freight = sb.freight;
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ BEGIN
|
||||||
|
|
||||||
-- Margin
|
-- Margin
|
||||||
UPDATE tmp.ticketFloramondo tf
|
UPDATE tmp.ticketFloramondo tf
|
||||||
JOIN (SELECT SUM(IF(ct.code = 'COST',sc.value, 0)) cost,
|
JOIN (SELECT SUM(IF(ct.code = 'cost',sc.value, 0)) cost,
|
||||||
SUM(IF(ct.isMargin, sc.value, 0)) margin,
|
SUM(IF(ct.isMargin, sc.value, 0)) margin,
|
||||||
t.ticketFk
|
t.ticketFk
|
||||||
FROM vn.saleComponent sc
|
FROM vn.saleComponent sc
|
||||||
|
|
|
@ -44,7 +44,6 @@ BEGIN
|
||||||
WHERE s.ticketFk = vTicketFk;
|
WHERE s.ticketFk = vTicketFk;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.saleGroup
|
CREATE OR REPLACE TEMPORARY TABLE tmp.saleGroup
|
||||||
(PRIMARY KEY (itemPackingTypeFk))
|
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT itemPackingTypeFk, SUM(litros) totalLitros
|
SELECT itemPackingTypeFk, SUM(litros) totalLitros
|
||||||
FROM tmp.sale
|
FROM tmp.sale
|
||||||
|
@ -56,8 +55,7 @@ BEGIN
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT (
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT (
|
||||||
ticketFk INT,
|
ticketFk INT,
|
||||||
itemPackingTypeFk VARCHAR(1),
|
itemPackingTypeFk VARCHAR(1)
|
||||||
PRIMARY KEY (ticketFk)
|
|
||||||
) ENGINE = MEMORY;
|
) ENGINE = MEMORY;
|
||||||
|
|
||||||
CASE vPackingTypesToSplit
|
CASE vPackingTypesToSplit
|
||||||
|
|
|
@ -103,6 +103,7 @@ BEGIN
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
geoCollision,
|
geoCollision,
|
||||||
tmp.zone,
|
tmp.zone,
|
||||||
tmp.zoneNodes;
|
tmp.zoneNodes,
|
||||||
|
tmp.zoneOption;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -19,4 +19,4 @@ FROM (
|
||||||
)
|
)
|
||||||
JOIN `vn`.`componentType` `ct` ON(`ct`.`id` = `c`.`typeFk`)
|
JOIN `vn`.`componentType` `ct` ON(`ct`.`id` = `c`.`typeFk`)
|
||||||
)
|
)
|
||||||
WHERE `ct`.`type` = 'coste'
|
WHERE `ct`.`code` = 'cost'
|
||||||
|
|
|
@ -16,6 +16,6 @@ FROM (
|
||||||
)
|
)
|
||||||
JOIN `vn`.`componentType` `ct` ON(
|
JOIN `vn`.`componentType` `ct` ON(
|
||||||
`ct`.`id` = `c`.`typeFk`
|
`ct`.`id` = `c`.`typeFk`
|
||||||
AND `ct`.`type` = 'agencia'
|
AND `ct`.`code` = 'freight'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,14 +9,9 @@ AS SELECT `it`.`id` AS `tipo_id`,
|
||||||
`it`.`workerFk` AS `Id_Trabajador`,
|
`it`.`workerFk` AS `Id_Trabajador`,
|
||||||
`it`.`life` AS `life`,
|
`it`.`life` AS `life`,
|
||||||
`it`.`isPackaging` AS `isPackaging`,
|
`it`.`isPackaging` AS `isPackaging`,
|
||||||
`it`.`density` AS `density`,
|
|
||||||
`it`.`isInventory` AS `inventory`,
|
`it`.`isInventory` AS `inventory`,
|
||||||
`it`.`created` AS `odbc_date`,
|
`it`.`created` AS `odbc_date`,
|
||||||
`it`.`making` AS `confeccion`,
|
`it`.`making` AS `confeccion`,
|
||||||
`it`.`temperatureFk` AS `Temperatura`,
|
`it`.`temperatureFk` AS `Temperatura`,
|
||||||
`it`.`promo` AS `promo`,
|
`it`.`promo` AS `promo`
|
||||||
`it`.`maneuver` AS `maneuver`,
|
|
||||||
`it`.`target` AS `target`,
|
|
||||||
`it`.`topMargin` AS `top_margin`,
|
|
||||||
`it`.`profit` AS `profit`
|
|
||||||
FROM `vn`.`itemType` `it`
|
FROM `vn`.`itemType` `it`
|
||||||
|
|
|
@ -2,7 +2,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||||
SQL SECURITY DEFINER
|
SQL SECURITY DEFINER
|
||||||
VIEW `vn2008`.`buy_edi`
|
VIEW `vn2008`.`buy_edi`
|
||||||
AS SELECT `t`.`id` AS `id`,
|
AS SELECT `t`.`id` AS `id`,
|
||||||
`t`.`barcode` AS `barcode`,
|
|
||||||
`t`.`entryYear` AS `entry_year`,
|
`t`.`entryYear` AS `entry_year`,
|
||||||
`t`.`deliveryNumber` AS `delivery_number`,
|
`t`.`deliveryNumber` AS `delivery_number`,
|
||||||
`t`.`fec` AS `fec`,
|
`t`.`fec` AS `fec`,
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
USE vn;
|
||||||
|
|
||||||
|
ALTER TABLE vn.roadmap ADD kmStart mediumint(9) DEFAULT NULL NULL;
|
||||||
|
ALTER TABLE vn.roadmap ADD kmEnd mediumint(9) DEFAULT NULL NULL;
|
||||||
|
ALTER TABLE vn.roadmap ADD started DATETIME NULL;
|
||||||
|
ALTER TABLE vn.roadmap ADD finished DATETIME NULL;
|
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
INSERT IGNORE INTO salix.ACL (`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`)
|
||||||
|
VALUES ('Entry','filter','READ','ALLOW','ROLE','supplier');
|
||||||
|
|
||||||
|
INSERT IGNORE INTO salix.ACL (`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`)
|
||||||
|
VALUES ('Entry','getBuys','READ','ALLOW','ROLE','supplier');
|
||||||
|
|
||||||
|
INSERT IGNORE INTO salix.ACL (`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`)
|
||||||
|
VALUES ('Entry','buyLabel','READ','ALLOW','ROLE','supplier');
|
||||||
|
|
||||||
|
INSERT IGNORE INTO `account`.`role` (`name`,`description`,`hasLogin`,`created`,`modified`)
|
||||||
|
VALUES ('supplier','Proveedores',1,'2017-10-10 14:58:58.000','2017-10-10 14:59:20.000');
|
||||||
|
SET @supplierFk =LAST_INSERT_ID();
|
||||||
|
INSERT IGNORE INTO account.roleInherit (`role`,`inheritsFrom`)
|
||||||
|
VALUES (@supplierFk,2);
|
||||||
|
|
||||||
|
UPDATE salix.ACL
|
||||||
|
SET principalId='$authenticated'
|
||||||
|
WHERE id=264;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
ALTER TABLE vn.componentType
|
||||||
|
CHANGE code code varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL AFTER id;
|
||||||
|
ALTER TABLE vn.componentType
|
||||||
|
CHANGE `type` name varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL;
|
||||||
|
UPDATE IGNORE vn.componentType
|
||||||
|
SET code = LOWER(code);
|
||||||
|
UPDATE IGNORE vn.componentType
|
||||||
|
SET code = 'other'
|
||||||
|
WHERE id = 12;
|
|
@ -0,0 +1,6 @@
|
||||||
|
ALTER TABLE vn.itemType
|
||||||
|
CHANGE maneuver maneuver__ double DEFAULT 0.21 NOT NULL COMMENT '@deprecated 2024-07-01 refs #7418',
|
||||||
|
CHANGE target target__ double DEFAULT 0.15 NOT NULL COMMENT '@deprecated 2024-07-01 refs #7418',
|
||||||
|
CHANGE topMargin topMargin__ double DEFAULT 0.3 NOT NULL COMMENT '@deprecated 2024-07-01 refs #7418',
|
||||||
|
CHANGE profit profit__ double DEFAULT 0.02 NOT NULL COMMENT '@deprecated 2024-07-01 refs #7418',
|
||||||
|
CHANGE density density__ double DEFAULT 167 NOT NULL COMMENT '@deprecated 2024-07-01 refs #7418 Almacena el valor por defecto de la densidad en kg/m3 para el calculo de los portes aereos, en articulos se guarda la correcta';
|
|
@ -0,0 +1,4 @@
|
||||||
|
ALTER TABLE account.mailAliasAccount
|
||||||
|
ADD editorFk INT(10) UNSIGNED DEFAULT NULL,
|
||||||
|
ADD CONSTRAINT mailAliasAccount_editorFk FOREIGN KEY (editorFk)
|
||||||
|
REFERENCES account.`user`(id);
|
|
@ -2,18 +2,9 @@ const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('Application execute()/executeProc()/executeFunc()', () => {
|
describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
const userWithoutPrivileges = 1;
|
const userWithoutPrivileges = 1;
|
||||||
const userWithPrivileges = 9;
|
|
||||||
const userWithInheritedPrivileges = 120;
|
const userWithInheritedPrivileges = 120;
|
||||||
let tx;
|
let tx;
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
function getCtx(userId) {
|
|
||||||
return {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(async() => {
|
beforeEach(async() => {
|
||||||
tx = await models.Application.beginTransaction({});
|
tx = await models.Application.beginTransaction({});
|
||||||
|
@ -42,7 +33,7 @@ describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error when execute procedure and not have privileges', async() => {
|
it('should throw error when execute procedure and not have privileges', async() => {
|
||||||
const ctx = getCtx(userWithoutPrivileges);
|
const ctx = {req: {accessToken: {userId: userWithoutPrivileges}}};
|
||||||
|
|
||||||
let error;
|
let error;
|
||||||
try {
|
try {
|
||||||
|
@ -66,7 +57,6 @@ describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should execute procedure and get data', async() => {
|
it('should execute procedure and get data', async() => {
|
||||||
const ctx = getCtx(userWithPrivileges);
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
@ -90,7 +80,6 @@ describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
|
|
||||||
describe('Application executeProc()', () => {
|
describe('Application executeProc()', () => {
|
||||||
it('should execute procedure and get data (executeProc)', async() => {
|
it('should execute procedure and get data (executeProc)', async() => {
|
||||||
const ctx = getCtx(userWithPrivileges);
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
@ -115,7 +104,6 @@ describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
|
|
||||||
describe('Application executeFunc()', () => {
|
describe('Application executeFunc()', () => {
|
||||||
it('should execute function and get data', async() => {
|
it('should execute function and get data', async() => {
|
||||||
const ctx = getCtx(userWithPrivileges);
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
@ -137,7 +125,7 @@ describe('Application execute()/executeProc()/executeFunc()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should execute function and get data with user with inherited privileges', async() => {
|
it('should execute function and get data with user with inherited privileges', async() => {
|
||||||
const ctx = getCtx(userWithInheritedPrivileges);
|
const ctx = {req: {accessToken: {userId: userWithInheritedPrivileges}}};
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,7 @@ module.exports = Self => {
|
||||||
const locale = modelLocale && modelLocale.get(lang);
|
const locale = modelLocale && modelLocale.get(lang);
|
||||||
|
|
||||||
json[modelName] = {
|
json[modelName] = {
|
||||||
|
http: model.sharedClass.http.path,
|
||||||
properties: model.definition.rawProperties,
|
properties: model.definition.rawProperties,
|
||||||
validations: jsonValidations,
|
validations: jsonValidations,
|
||||||
locale
|
locale
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Model crud()', () => {
|
describe('Model crud()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
let insertId;
|
let insertId;
|
||||||
const barcodeModel = app.models.ItemBarcode;
|
const barcodeModel = app.models.ItemBarcode;
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Model rewriteDbError()', () => {
|
describe('Model rewriteDbError()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should extend rewriteDbError properties to any model passed', () => {
|
it('should extend rewriteDbError properties to any model passed', () => {
|
||||||
const exampleModel = models.ItemTag;
|
const exampleModel = models.ItemTag;
|
||||||
|
|
|
@ -2,15 +2,7 @@ const app = require('vn-loopback/server/server');
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('claim filter()', () => {
|
describe('claim filter()', () => {
|
||||||
let ctx;
|
const ctx = beforeAll.getCtx();
|
||||||
beforeEach(() => {
|
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return 1 result filtering by id', async() => {
|
it('should return 1 result filtering by id', async() => {
|
||||||
const tx = await app.models.Claim.beginTransaction({});
|
const tx = await app.models.Claim.beginTransaction({});
|
||||||
|
|
|
@ -1,18 +1,11 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('claim regularizeClaim()', () => {
|
describe('claim regularizeClaim()', () => {
|
||||||
const userId = 18;
|
const userId = 18;
|
||||||
const ctx = {
|
const ctx = beforeAll.mockLoopBackContext(userId);
|
||||||
req: {
|
|
||||||
accessToken: {userId: userId},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ctx.req.__ = (value, params) => {
|
ctx.req.__ = (value, params) => {
|
||||||
return params.nickname;
|
return params.nickname;
|
||||||
};
|
};
|
||||||
|
|
||||||
const chatModel = models.Chat;
|
const chatModel = models.Chat;
|
||||||
const claimId = 1;
|
const claimId = 1;
|
||||||
const ticketId = 1;
|
const ticketId = 1;
|
||||||
|
@ -40,20 +33,6 @@ describe('claim regularizeClaim()', () => {
|
||||||
return await models.ClaimEnd.create(claimEnds, options);
|
return await models.ClaimEnd.create(claimEnds, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeAll(async() => {
|
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should send a chat message with value "Trash" and then change claim state to resolved', async() => {
|
it('should send a chat message with value "Trash" and then change claim state to resolved', async() => {
|
||||||
const tx = await models.Claim.beginTransaction({});
|
const tx = await models.Claim.beginTransaction({});
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,10 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
const i18n = require('i18n');
|
const i18n = require('i18n');
|
||||||
describe('Update Claim', () => {
|
describe('Update Claim', () => {
|
||||||
let url;
|
let url;
|
||||||
let claimStatesMap = {};
|
let claimStatesMap = {};
|
||||||
|
beforeAll.mockLoopBackContext();
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
url = await app.models.Url.getUrl();
|
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
const claimStates = await app.models.ClaimState.find();
|
const claimStates = await app.models.ClaimState.find();
|
||||||
claimStatesMap = claimStates.reduce((acc, state) => ({...acc, [state.code]: state.id}), {});
|
claimStatesMap = claimStates.reduce((acc, state) => ({...acc, [state.code]: state.id}), {});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Update Claim', () => {
|
describe('Update Claim', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const newDate = Date.vnNew();
|
const newDate = Date.vnNew();
|
||||||
const original = {
|
const original = {
|
||||||
ticketFk: 3,
|
ticketFk: 3,
|
||||||
|
|
|
@ -1,23 +1,10 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Client addressesPropagateRe', () => {
|
describe('Client addressesPropagateRe', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
it('should propagate the isEqualizated on both addresses of Mr Wayne' +
|
||||||
active: activeCtx
|
' and set hasToInvoiceByAddress to false', async() => {
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should propagate the isEqualizated on both addresses of Mr Wayne and set hasToInvoiceByAddress to false', async() => {
|
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Address createAddress', () => {
|
describe('Address createAddress', () => {
|
||||||
const clientFk = 1101;
|
const clientFk = 1101;
|
||||||
|
@ -7,20 +6,7 @@ describe('Address createAddress', () => {
|
||||||
const incotermsFk = 'FAS';
|
const incotermsFk = 'FAS';
|
||||||
const customAgentOneId = 1;
|
const customAgentOneId = 1;
|
||||||
|
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should throw a non uee member error if no incoterms is defined', async() => {
|
it('should throw a non uee member error if no incoterms is defined', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Client Create', () => {
|
describe('Client Create', () => {
|
||||||
const newAccount = {
|
const newAccount = {
|
||||||
userName: 'deadpool',
|
userName: 'deadpool',
|
||||||
|
@ -16,20 +14,7 @@ describe('Client Create', () => {
|
||||||
const newAccountWithoutEmail = JSON.parse(JSON.stringify(newAccount));
|
const newAccountWithoutEmail = JSON.parse(JSON.stringify(newAccount));
|
||||||
delete newAccountWithoutEmail.email;
|
delete newAccountWithoutEmail.email;
|
||||||
|
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it(`should not find deadpool as he's not created yet`, async() => {
|
it(`should not find deadpool as he's not created yet`, async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('Client getCard()', () => {
|
describe('Client getCard()', () => {
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
it('should receive a formated card of Bruce Wayne', async() => {
|
it('should receive a formated card of Bruce Wayne', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const id = 1101;
|
const id = 1101;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('client getDebt()', () => {
|
describe('client getDebt()', () => {
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
it('should return the client debt', async() => {
|
it('should return the client debt', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('client sendSms()', () => {
|
describe('client sendSms()', () => {
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
it('should now send a message and log it', async() => {
|
it('should now send a message and log it', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
|
||||||
const id = 1101;
|
const id = 1101;
|
||||||
const destination = 222222222;
|
const destination = 222222222;
|
||||||
const message = 'this is the message created in a test';
|
const message = 'this is the message created in a test';
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('client summary()', () => {
|
describe('client summary()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
it('should return a summary object containing data', async() => {
|
it('should return a summary object containing data', async() => {
|
||||||
const clientId = 1101;
|
const clientId = 1101;
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Address updateAddress', () => {
|
describe('Address updateAddress', () => {
|
||||||
const clientId = 1101;
|
const clientId = 1101;
|
||||||
const addressId = 1;
|
const addressId = 1;
|
||||||
|
@ -14,20 +12,7 @@ describe('Address updateAddress', () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should throw the non uee member error if no incoterms is defined', async() => {
|
it('should throw the non uee member error if no incoterms is defined', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
|
|
|
@ -1,24 +1,10 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('loopback model address', () => {
|
describe('loopback model address', () => {
|
||||||
let createdAddressId;
|
let createdAddressId;
|
||||||
const clientId = 1101;
|
const clientId = 1101;
|
||||||
|
|
||||||
const activeCtx = {
|
beforeAll.mockLoopBackContext();
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeAll(() => {
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async() => {
|
afterAll(async() => {
|
||||||
const client = await models.Client.findById(clientId);
|
const client = await models.Client.findById(clientId);
|
||||||
|
|
|
@ -29,7 +29,8 @@ module.exports = Self => {
|
||||||
http: {
|
http: {
|
||||||
path: '/:id/buy-label',
|
path: '/:id/buy-label',
|
||||||
verb: 'GET'
|
verb: 'GET'
|
||||||
}
|
},
|
||||||
|
accessScopes: ['DEFAULT', 'read:multimedia']
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.buyLabel = (ctx, id) => Self.printReport(ctx, id, 'buy-label');
|
Self.buyLabel = (ctx, id) => Self.printReport(ctx, id, 'buy-label');
|
||||||
|
|
|
@ -112,7 +112,6 @@ module.exports = Self => {
|
||||||
|
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const conn = Self.dataSource.connector;
|
const conn = Self.dataSource.connector;
|
||||||
const where = buildFilter(ctx.args, (param, value) => {
|
const where = buildFilter(ctx.args, (param, value) => {
|
||||||
switch (param) {
|
switch (param) {
|
||||||
|
@ -146,7 +145,12 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
filter = mergeFilters(ctx.args.filter, {where});
|
filter = mergeFilters(ctx.args.filter, {where});
|
||||||
|
const userId = ctx.req.accessToken.userId;
|
||||||
|
const isSupplier = await Self.app.models.Supplier.findById(userId, options);
|
||||||
|
if (isSupplier) {
|
||||||
|
if (!filter.where) filter.where = {};
|
||||||
|
filter.where[`e.supplierFk`] = ctx.req.accessToken.userId;
|
||||||
|
}
|
||||||
const stmts = [];
|
const stmts = [];
|
||||||
let stmt;
|
let stmt;
|
||||||
stmt = new ParameterizedSQL(
|
stmt = new ParameterizedSQL(
|
||||||
|
@ -158,7 +162,7 @@ module.exports = Self => {
|
||||||
e.invoiceNumber,
|
e.invoiceNumber,
|
||||||
e.isBooked,
|
e.isBooked,
|
||||||
e.isExcludedFromAvailable,
|
e.isExcludedFromAvailable,
|
||||||
e.evaNotes AS observation,
|
e.evaNotes observation,
|
||||||
e.isConfirmed,
|
e.isConfirmed,
|
||||||
e.isOrdered,
|
e.isOrdered,
|
||||||
e.isRaid,
|
e.isRaid,
|
||||||
|
@ -170,13 +174,18 @@ module.exports = Self => {
|
||||||
e.gestDocFk,
|
e.gestDocFk,
|
||||||
e.invoiceInFk,
|
e.invoiceInFk,
|
||||||
t.landed,
|
t.landed,
|
||||||
s.name AS supplierName,
|
s.name supplierName,
|
||||||
s.nickname AS supplierAlias,
|
s.nickname supplierAlias,
|
||||||
co.code AS companyCode,
|
co.code companyCode,
|
||||||
cu.code AS currencyCode
|
cu.code currencyCode,
|
||||||
|
t.shipped,
|
||||||
|
t.landed,
|
||||||
|
t.warehouseInFk,
|
||||||
|
w.name warehouseInName
|
||||||
FROM vn.entry e
|
FROM vn.entry e
|
||||||
JOIN vn.supplier s ON s.id = e.supplierFk
|
JOIN vn.supplier s ON s.id = e.supplierFk
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
JOIN vn.travel t ON t.id = e.travelFk
|
||||||
|
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
||||||
JOIN vn.company co ON co.id = e.companyFk
|
JOIN vn.company co ON co.id = e.companyFk
|
||||||
JOIN vn.currency cu ON cu.id = e.currencyFk`
|
JOIN vn.currency cu ON cu.id = e.currencyFk`
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
|
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('getBuys', {
|
Self.remoteMethodCtx('getBuys', {
|
||||||
description: 'Returns buys for one entry',
|
description: 'Returns buys for one entry',
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
accepts: [{
|
accepts: [{
|
||||||
|
@ -27,13 +29,19 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.getBuys = async(id, filter, options) => {
|
Self.getBuys = async(ctx, id, filter, options) => {
|
||||||
|
const userId = ctx.req.accessToken.userId;
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const myOptions = {};
|
const myOptions = {};
|
||||||
|
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
const isSupplier = await Self.app.models.Supplier.findById(userId, myOptions);
|
||||||
|
if (isSupplier) {
|
||||||
|
const isEntryOwner = (await Self.findById(id)).supplierFk === userId;
|
||||||
|
|
||||||
|
if (!isEntryOwner) throw new UserError('Access Denied');
|
||||||
|
}
|
||||||
let defaultFilter = {
|
let defaultFilter = {
|
||||||
where: {entryFk: id},
|
where: {entryFk: id},
|
||||||
fields: [
|
fields: [
|
||||||
|
@ -49,9 +57,23 @@ module.exports = Self => {
|
||||||
'buyingValue',
|
'buyingValue',
|
||||||
'price2',
|
'price2',
|
||||||
'price3',
|
'price3',
|
||||||
'printedStickers'
|
'printedStickers',
|
||||||
|
'entryFk'
|
||||||
|
],
|
||||||
|
include: [{
|
||||||
|
relation: 'entry',
|
||||||
|
scope: {
|
||||||
|
fields: [
|
||||||
|
'id', 'supplierFk'
|
||||||
],
|
],
|
||||||
include: {
|
include: {
|
||||||
|
relation: 'supplier', scope: {
|
||||||
|
fields: ['id']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
relation: 'item',
|
relation: 'item',
|
||||||
scope: {
|
scope: {
|
||||||
fields: [
|
fields: [
|
||||||
|
@ -82,9 +104,8 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}]
|
||||||
};
|
};
|
||||||
|
|
||||||
defaultFilter = mergeFilters(defaultFilter, filter);
|
defaultFilter = mergeFilters(defaultFilter, filter);
|
||||||
|
|
||||||
return models.Buy.find(defaultFilter, myOptions);
|
return models.Buy.find(defaultFilter, myOptions);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('entry addFromPackaging()', () => {
|
describe('entry addFromPackaging()', () => {
|
||||||
const supplier = 442;
|
const supplier = 442;
|
||||||
|
@ -7,22 +6,10 @@ describe('entry addFromPackaging()', () => {
|
||||||
const yesterday = new Date(today);
|
const yesterday = new Date(today);
|
||||||
yesterday.setDate(today.getDate() - 1);
|
yesterday.setDate(today.getDate() - 1);
|
||||||
|
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 49},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create an incoming travel', async() => {
|
it('should create an incoming travel', async() => {
|
||||||
const ctx = {args: {isTravelReception: true, supplier}};
|
const ctx = {accessToken: {userId: 49}, args: {isTravelReception: true, supplier}};
|
||||||
const tx = await models.Entry.beginTransaction({});
|
const tx = await models.Entry.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('Buy editLatestsBuys()', () => {
|
describe('Buy editLatestsBuys()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should change the value of a given column for the selected buys', async() => {
|
it('should change the value of a given column for the selected buys', async() => {
|
||||||
const tx = await models.Buy.beginTransaction({});
|
const tx = await models.Buy.beginTransaction({});
|
||||||
|
|
|
@ -9,7 +9,8 @@ describe('Entry filter()', () => {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
args: {
|
args: {
|
||||||
search: 1
|
search: 1
|
||||||
}
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
@ -32,7 +33,8 @@ describe('Entry filter()', () => {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
args: {
|
args: {
|
||||||
currencyFk: 1
|
currencyFk: 1
|
||||||
}
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
@ -46,15 +48,15 @@ describe('Entry filter()', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the entry matching the supplier', async() => {
|
describe('should return the entry matching the supplier', () => {
|
||||||
|
it('when userId is supplier ', async() => {
|
||||||
const tx = await models.Entry.beginTransaction({});
|
const tx = await models.Entry.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
args: {
|
args: {},
|
||||||
supplierFk: 2
|
req: {accessToken: {userId: 2}}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
@ -68,6 +70,53 @@ describe('Entry filter()', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('when userId is supplier fetching other supplier', async() => {
|
||||||
|
const tx = await models.Entry.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
supplierFk: 1
|
||||||
|
},
|
||||||
|
req: {accessToken: {userId: 2}}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
|
||||||
|
expect(result.length).toEqual(6);
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when userId is not supplier', async() => {
|
||||||
|
const tx = await models.Entry.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
supplierFk: 2
|
||||||
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
|
||||||
|
expect(result.length).toEqual(6);
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should return the entry matching the company', async() => {
|
it('should return the entry matching the company', async() => {
|
||||||
const tx = await models.Entry.beginTransaction({});
|
const tx = await models.Entry.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
@ -76,7 +125,8 @@ describe('Entry filter()', () => {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
args: {
|
args: {
|
||||||
companyFk: 442
|
companyFk: 442
|
||||||
}
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
@ -98,7 +148,8 @@ describe('Entry filter()', () => {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
args: {
|
args: {
|
||||||
isBooked: true,
|
isBooked: true,
|
||||||
}
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
@ -121,7 +172,8 @@ describe('Entry filter()', () => {
|
||||||
args: {
|
args: {
|
||||||
reference: 'movement',
|
reference: 'movement',
|
||||||
travelFk: '2'
|
travelFk: '2'
|
||||||
}
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = await models.Entry.filter(ctx, options);
|
const result = await models.Entry.filter(ctx, options);
|
||||||
|
|
|
@ -1,13 +1,22 @@
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('entry getBuys()', () => {
|
describe('entry getBuys()', () => {
|
||||||
const entryId = 4;
|
const entryId = 4;
|
||||||
it('should get the buys and items of an entry', async() => {
|
describe('should get the buys and items of an entry ', () => {
|
||||||
|
it('when is supplier and entry owner', async() => {
|
||||||
const tx = await models.Entry.beginTransaction({});
|
const tx = await models.Entry.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await models.Entry.getBuys(entryId, options);
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
search: 1
|
||||||
|
},
|
||||||
|
req: {accessToken: {userId: 2}}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await models.Entry.getBuys(ctx, entryId, options);
|
||||||
|
|
||||||
const length = result.length;
|
const length = result.length;
|
||||||
const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
|
const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
|
||||||
|
@ -21,4 +30,53 @@ describe('entry getBuys()', () => {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('when is supplier but not entry owner', async() => {
|
||||||
|
const tx = await models.Entry.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
const entryId = 1;
|
||||||
|
try {
|
||||||
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
search: 1
|
||||||
|
},
|
||||||
|
req: {accessToken: {userId: 2}}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await models.Entry.getBuys(ctx, entryId, options);
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
} catch (error) {
|
||||||
|
expect(error).toBeInstanceOf(UserError);
|
||||||
|
expect(error.message).toBe('Access Denied');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when is not supplier', async() => {
|
||||||
|
const tx = await models.Entry.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
search: 1
|
||||||
|
},
|
||||||
|
req: {accessToken: {userId: 9}}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await models.Entry.getBuys(ctx, entryId, options);
|
||||||
|
|
||||||
|
const length = result.length;
|
||||||
|
const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
|
||||||
|
|
||||||
|
expect(result.length).toEqual(4);
|
||||||
|
expect(anyResult.item).toBeDefined();
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
const activeCtx = {accessToken: {userId: 9}};
|
|
||||||
|
|
||||||
describe('entry importBuysPreview()', () => {
|
describe('entry importBuysPreview()', () => {
|
||||||
const entryId = 1;
|
const entryId = 1;
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return the buys with the calculated packagingFk', async() => {
|
it('should return the buys with the calculated packagingFk', async() => {
|
||||||
const tx = await models.Entry.beginTransaction({});
|
const tx = await models.Entry.beginTransaction({});
|
||||||
|
|
|
@ -1,15 +1,7 @@
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('invoiceInDueDay new()', () => {
|
describe('invoiceInDueDay new()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should correctly create a new due day', async() => {
|
it('should correctly create a new due day', async() => {
|
||||||
const userId = 9;
|
const userId = 9;
|
||||||
|
|
|
@ -1,24 +1,11 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('invoiceIn clone()', () => {
|
describe('invoiceIn clone()', () => {
|
||||||
let ctx;
|
const ctx = beforeAll.getCtx();
|
||||||
let options;
|
let options;
|
||||||
let tx;
|
let tx;
|
||||||
|
|
||||||
beforeEach(async() => {
|
beforeEach(async() => {
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 1},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
},
|
|
||||||
args: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: ctx.req
|
|
||||||
});
|
|
||||||
|
|
||||||
options = {transaction: tx};
|
options = {transaction: tx};
|
||||||
tx = await models.Sale.beginTransaction({});
|
tx = await models.Sale.beginTransaction({});
|
||||||
options.transaction = tx;
|
options.transaction = tx;
|
||||||
|
@ -28,7 +15,8 @@ describe('invoiceIn clone()', () => {
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the cloned invoiceIn and also clone invoiceInDueDays and invoiceInTaxes if there are any referencing the invoiceIn', async() => {
|
it('should return the cloned invoiceIn and also clone invoiceInDueDays ' +
|
||||||
|
'and invoiceInTaxes if there are any referencing the invoiceIn', async() => {
|
||||||
const clone = await models.InvoiceIn.clone(ctx, 1, false, options);
|
const clone = await models.InvoiceIn.clone(ctx, 1, false, options);
|
||||||
|
|
||||||
expect(clone.supplierRef).toEqual('1234(2)');
|
expect(clone.supplierRef).toEqual('1234(2)');
|
||||||
|
@ -51,7 +39,8 @@ describe('invoiceIn clone()', () => {
|
||||||
expect(invoiceInDueDay.length).toEqual(2);
|
expect(invoiceInDueDay.length).toEqual(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the cloned invoiceIn and also clone invoiceInIntrastat and invoiceInTaxes if it is rectificative', async() => {
|
it('should return the cloned invoiceIn and also clone invoiceInIntrastat ' +
|
||||||
|
'and invoiceInTaxes if it is rectificative', async() => {
|
||||||
const clone = await models.InvoiceIn.clone(ctx, 1, true, options);
|
const clone = await models.InvoiceIn.clone(ctx, 1, true, options);
|
||||||
|
|
||||||
expect(clone.supplierRef).toEqual('1234(2)');
|
expect(clone.supplierRef).toEqual('1234(2)');
|
||||||
|
|
|
@ -1,24 +1,11 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('invoiceIn corrective()', () => {
|
describe('invoiceIn corrective()', () => {
|
||||||
let ctx;
|
const ctx = beforeAll.getCtx();
|
||||||
let options;
|
let options;
|
||||||
let tx;
|
let tx;
|
||||||
|
|
||||||
beforeEach(async() => {
|
beforeEach(async() => {
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
},
|
|
||||||
args: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: ctx.req
|
|
||||||
});
|
|
||||||
|
|
||||||
options = {transaction: tx};
|
options = {transaction: tx};
|
||||||
tx = await models.Sale.beginTransaction({});
|
tx = await models.Sale.beginTransaction({});
|
||||||
options.transaction = tx;
|
options.transaction = tx;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('invoiceOut book()', () => {
|
describe('invoiceOut book()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
const invoiceOutId = 5;
|
const invoiceOutId = 5;
|
||||||
|
|
||||||
it('should update the booked property', async() => {
|
it('should update the booked property', async() => {
|
||||||
|
|
|
@ -1,24 +1,13 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('upsertFixedPrice()', () => {
|
describe('upsertFixedPrice()', () => {
|
||||||
const now = Date.vnNew();
|
const now = Date.vnNew();
|
||||||
const fixedPriceId = 1;
|
const fixedPriceId = 1;
|
||||||
let originalFixedPrice;
|
let originalFixedPrice;
|
||||||
|
|
||||||
|
beforeAll.mockLoopBackContext();
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
originalFixedPrice = await models.FixedPrice.findById(fixedPriceId);
|
originalFixedPrice = await models.FixedPrice.findById(fixedPriceId);
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should toggle the hasMinPrice boolean if there's a minPrice and update the rest of the data`, async() => {
|
it(`should toggle the hasMinPrice boolean if there's a minPrice and update the rest of the data`, async() => {
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
|
||||||
describe('itemShelving getAlternative()', () => {
|
describe('itemShelving getAlternative()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'},
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return a list of items without alternatives', async() => {
|
it('should return a list of items without alternatives', async() => {
|
||||||
const shelvingFk = 'HEJ';
|
const shelvingFk = 'HEJ';
|
||||||
|
|
|
@ -1,25 +1,13 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('ItemShelving upsertItem()', () => {
|
describe('ItemShelving upsertItem()', () => {
|
||||||
const warehouseFk = 1;
|
const warehouseFk = 1;
|
||||||
let ctx;
|
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
let options;
|
let options;
|
||||||
let tx;
|
let tx;
|
||||||
|
|
||||||
beforeEach(async() => {
|
beforeEach(async() => {
|
||||||
ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
},
|
|
||||||
args: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: ctx.req
|
|
||||||
});
|
|
||||||
|
|
||||||
options = {transaction: tx};
|
options = {transaction: tx};
|
||||||
tx = await models.ItemShelving.beginTransaction({});
|
tx = await models.ItemShelving.beginTransaction({});
|
||||||
options.transaction = tx;
|
options.transaction = tx;
|
||||||
|
|
|
@ -1,21 +1,8 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('item clone()', () => {
|
describe('item clone()', () => {
|
||||||
let nextItemId;
|
let nextItemId;
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(async() => {
|
beforeEach(async() => {
|
||||||
let query = `SELECT i1.id + 1 as id FROM vn.item i1
|
let query = `SELECT i1.id + 1 as id FROM vn.item i1
|
||||||
|
|
|
@ -2,17 +2,14 @@ const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
const LoopBackContext = require('loopback-context');
|
||||||
|
|
||||||
describe('item getBalance()', () => {
|
describe('item getBalance()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
it('should return the balance lines of a client type loses in which one has highlighted true', async() => {
|
it('should return the balance lines of a client type loses in which one has highlighted true', async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
active: activeCtx
|
active: ctx
|
||||||
});
|
});
|
||||||
const losesClientId = 1111;
|
const losesClientId = 1111;
|
||||||
const ticket = await models.Ticket.findById(7, null, options);
|
const ticket = await models.Ticket.findById(7, null, options);
|
||||||
|
|
|
@ -1,21 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('item new()', () => {
|
describe('item new()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
beforeAll(async() => {
|
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create a new item, adding the name as a tag', async() => {
|
it('should create a new item, adding the name as a tag', async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
|
|
|
@ -1,27 +1,13 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('regularize()', () => {
|
describe('regularize()', () => {
|
||||||
beforeAll(async() => {
|
const ctx = beforeAll.mockLoopBackContext(18);
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 18},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create a new ticket and add a line', async() => {
|
it('should create a new ticket and add a line', async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const ctx = {req: {accessToken: {userId: 18}}};
|
|
||||||
const itemId = 1;
|
const itemId = 1;
|
||||||
const warehouseId = 1;
|
const warehouseId = 1;
|
||||||
const quantity = 11;
|
const quantity = 11;
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('item updateTaxes()', () => {
|
describe('item updateTaxes()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should throw an error if the taxClassFk is blank', async() => {
|
it('should throw an error if the taxClassFk is blank', async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('tag onSubmit()', () => {
|
describe('tag onSubmit()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should delete a tag', async() => {
|
it('should delete a tag', async() => {
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('order addToOrder()', () => {
|
describe('order addToOrder()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
const orderId = 8;
|
const orderId = 8;
|
||||||
it('should add a row to a given order', async() => {
|
it('should add a row to a given order', async() => {
|
||||||
const tx = await models.Order.beginTransaction({});
|
const tx = await models.Order.beginTransaction({});
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('order filter()', () => {
|
describe('order filter()', () => {
|
||||||
const ctx = {
|
const ctx = beforeAll.getCtx();
|
||||||
req: {accessToken: {userId: 9}},
|
|
||||||
args: {},
|
|
||||||
params: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
it('should call the filter method with a basic search', async() => {
|
it('should call the filter method with a basic search', async() => {
|
||||||
const myCtx = Object.assign({}, ctx);
|
const myCtx = Object.assign({}, ctx);
|
||||||
|
|
|
@ -2,7 +2,7 @@ const models = require('vn-loopback/server/server').models;
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
describe('order new()', () => {
|
describe('order new()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
it('should throw an error if the client isnt active', async() => {
|
it('should throw an error if the client isnt active', async() => {
|
||||||
const tx = await models.Order.beginTransaction({});
|
const tx = await models.Order.beginTransaction({});
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
describe('order newFromTicket()', () => {
|
describe('order newFromTicket()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
it('should create a new order from an existing ticket', async() => {
|
it('should create a new order from an existing ticket', async() => {
|
||||||
const tx = await models.Order.beginTransaction({});
|
const tx = await models.Order.beginTransaction({});
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('AgencyTerm createInvoiceIn()', () => {
|
describe('AgencyTerm createInvoiceIn()', () => {
|
||||||
const ctx = {req: {accessToken: {userId: 9}}};
|
const ctx = beforeAll.getCtx();
|
||||||
beforeAll(async() => {
|
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const rows = [
|
const rows = [
|
||||||
{
|
{
|
||||||
routeFk: 2,
|
routeFk: 2,
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('getPalletMatchState', {
|
||||||
|
description: 'Get list of pallet from truckFk with true or false if state is matched',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'truckFk',
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
description: 'The truckFk id'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
arg: 'state',
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
description: 'State code'
|
||||||
|
}],
|
||||||
|
returns: {
|
||||||
|
type: 'object',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/getPalletMatchState`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.getPalletMatchState = async(truckFk, state, options) => {
|
||||||
|
const myOptions = {};
|
||||||
|
|
||||||
|
if (typeof options == 'object')
|
||||||
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
|
const result = await Self.rawSql(`
|
||||||
|
WITH tPallet AS(
|
||||||
|
SELECT ep.id pallet, e.id expedition, e.stateTypeFk
|
||||||
|
FROM vn.expeditionPallet ep
|
||||||
|
JOIN vn.expeditionScan es ON es.palletFk = ep.id
|
||||||
|
JOIN expedition e ON e.id = es.expeditionFk
|
||||||
|
WHERE ep.truckFk = ?
|
||||||
|
),totalPalletExpedition AS(
|
||||||
|
SELECT t.*, COUNT(expedition) totalPalletExpedition
|
||||||
|
FROM tPallet t
|
||||||
|
GROUP BY expedition
|
||||||
|
),totalPalletExpeditionCode AS(
|
||||||
|
SELECT t.*, COUNT(expedition) totalPalletExpeditionCode
|
||||||
|
FROM tPallet t
|
||||||
|
JOIN vn.expeditionStateType est ON est.id = t.stateTypeFk
|
||||||
|
WHERE code = ?
|
||||||
|
GROUP BY expedition
|
||||||
|
)
|
||||||
|
SELECT t.pallet,
|
||||||
|
tpe.totalPalletExpedition = tpec.totalPalletExpeditionCode hasMatchStateCode
|
||||||
|
FROM tPallet t
|
||||||
|
LEFT JOIN totalPalletExpedition tpe ON tpe.expedition = t.expedition
|
||||||
|
LEFT JOIN totalPalletExpeditionCode tpec ON tpec.expedition = t.expedition
|
||||||
|
GROUP BY t.pallet;`,
|
||||||
|
[truckFk, state],
|
||||||
|
myOptions);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
|
||||||
|
describe('roadMapStop getPalletMatchState()', () => {
|
||||||
|
it('should return list of pallet with true or false if state is matched', async() => {
|
||||||
|
const truckFk = 1;
|
||||||
|
const state = 'ON DELIVERY';
|
||||||
|
const result = await models.RoadmapStop.getPalletMatchState(truckFk, state);
|
||||||
|
|
||||||
|
expect(result[0].hasMatchStateCode).toBe(1);
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,21 +1,7 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('route clone()', () => {
|
describe('route clone()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const createdDate = Date.vnNew();
|
const createdDate = Date.vnNew();
|
||||||
it('should throw an error if the amount of ids pased to the clone function do no match the database', async() => {
|
it('should throw an error if the amount of ids pased to the clone function do no match the database', async() => {
|
||||||
|
|
|
@ -1,20 +1,9 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('route guessPriority()', () => {
|
describe('route guessPriority()', () => {
|
||||||
const targetRouteId = 7;
|
const targetRouteId = 7;
|
||||||
let routeTicketsToRestore;
|
let routeTicketsToRestore;
|
||||||
|
const ctx = beforeAll.getCtx();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
__: () => {}
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeAll(() => {
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async() => {
|
afterAll(async() => {
|
||||||
let restoreFixtures = [];
|
let restoreFixtures = [];
|
||||||
|
@ -25,9 +14,6 @@ describe('route guessPriority()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call guessPriority() then check all tickets in that route have their priorities defined', async() => {
|
it('should call guessPriority() then check all tickets in that route have their priorities defined', async() => {
|
||||||
const ctx = {
|
|
||||||
req: activeCtx
|
|
||||||
};
|
|
||||||
routeTicketsToRestore = await app.models.Ticket.find({where: {routeFk: targetRouteId}});
|
routeTicketsToRestore = await app.models.Ticket.find({where: {routeFk: targetRouteId}});
|
||||||
|
|
||||||
await app.models.Route.guessPriority(ctx, targetRouteId);
|
await app.models.Route.guessPriority(ctx, targetRouteId);
|
||||||
|
|
|
@ -1,20 +1,7 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
|
||||||
|
|
||||||
describe('route updateWorkCenter()', () => {
|
describe('route updateWorkCenter()', () => {
|
||||||
beforeAll(async() => {
|
beforeAll.mockLoopBackContext();
|
||||||
const activeCtx = {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
http: {
|
|
||||||
req: {
|
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const routeId = 1;
|
const routeId = 1;
|
||||||
|
|
||||||
it('should set the commission work center if the worker has workCenter', async() => {
|
it('should set the commission work center if the worker has workCenter', async() => {
|
||||||
|
|
|
@ -41,6 +41,18 @@
|
||||||
},
|
},
|
||||||
"driverName": {
|
"driverName": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kmStart": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"kmEnd": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"started": {
|
||||||
|
"type": "date"
|
||||||
|
},
|
||||||
|
"finished": {
|
||||||
|
"type": "date"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
@ -57,7 +69,7 @@
|
||||||
"roadmapStop": {
|
"roadmapStop": {
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
"model": "RoadmapStop",
|
"model": "RoadmapStop",
|
||||||
"foreignKey": "roadmapFk"
|
"foreignKey": "roadMapFk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
require('../methods/roadmapStop/getPalletMatchState')(Self);
|
||||||
|
};
|
|
@ -36,7 +36,7 @@
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "Address",
|
"model": "RoadmapAddress",
|
||||||
"foreignKey": "addressFk"
|
"foreignKey": "addressFk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue