6964-hasItemOlder #2560
|
@ -3,15 +3,21 @@
|
||||||
"base": "VnModel",
|
"base": "VnModel",
|
||||||
"options": {
|
"options": {
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"table": "productionConfig"
|
"table": "productionConfig"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"required": true,
|
"required": true,
|
||||||
"id": true
|
"id": true
|
||||||
},
|
},
|
||||||
|
"sectorFromCode": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sectorToCode": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"backupPrinterNotificationDelay": {
|
"backupPrinterNotificationDelay": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
USE vn;
|
||||||
|
|
||||||
|
ALTER TABLE vn.productionConfig ADD itemOlderReviewHours int(11) DEFAULT 0 NOT NULL COMMENT 'Horas que se tienen en cuenta para comprobar si un ítem es más viejo.';
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
USE vn;
|
||||||
|
|
||||||
|
ALTER TABLE vn.productionConfig ADD sectorFromCode varchar(15) NULL COMMENT 'Sector origen que se revisa ítems más nuevos al parkinear';
|
||||||
|
ALTER TABLE vn.productionConfig ADD sectorToCode varchar(15) NULL COMMENT 'Sector destino que se revisa ítems más nuevos al parkinear';
|
||||||
|
|
||||||
|
ALTER TABLE vn.productionConfig ADD CONSTRAINT productionConfig_sector_FK FOREIGN KEY (sectorFromCode) REFERENCES vn.sector(code) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
ALTER TABLE vn.productionConfig ADD CONSTRAINT productionConfig_sector_FK_1 FOREIGN KEY (sectorToCode) REFERENCES vn.sector(code) ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
@ -0,0 +1,70 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('getListItemNewer', {
|
||||||
|
description:
|
||||||
|
'Get boolean if any or specific item of the shelving has older created in another shelving or parking',
|
||||||
|
accessType: 'READ',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'shelvingFk',
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
description: 'Shelving code'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
arg: 'parking',
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
description: 'Parking code'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
returns: {
|
||||||
|
type: 'Array',
|
||||||
|
|||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/getListItemNewer`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.getListItemNewer = async(shelvingFk, parking, options) => {
|
||||||
|
const myOptions = {};
|
||||||
|
if (typeof options == 'object')
|
||||||
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
|
const [isParkingToReview] = await Self.rawSql(`
|
||||||
|
SELECT COUNT(p.id) parkingToReview
|
||||||
|
FROM vn.parking p
|
||||||
|
JOIN vn.sector s ON s.id = p.sectorFk
|
||||||
|
JOIN vn.productionConfig pc
|
||||||
|
WHERE p.code = ? AND s.code = pc.sectorToCode;`,
|
||||||
|
[parking], myOptions);
|
||||||
|
|
||||||
|
if (isParkingToReview['parkingToReview'] < 1) return [];
|
||||||
|
|
||||||
|
const result = await Self.rawSql(`
|
||||||
|
WITH tItemShelving AS(
|
||||||
|
SELECT is2.itemFk, is2.created, p.sectorFK, is2.id
|
||||||
|
FROM vn.itemShelving is2
|
||||||
|
JOIN vn.shelving sh ON sh.code = is2.shelvingFk
|
||||||
|
JOIN vn.parking p ON p.id = sh.parkingFk
|
||||||
carlosap
commented
Pasar a una config Pasar a una config
|
|||||||
|
JOIN vn.sector s ON s.id = p.sectorFk
|
||||||
|
JOIN vn.productionConfig pc
|
||||||
|
WHERE is2.shelvingFk = ? AND s.code = pc.sectorFromCode
|
||||||
|
), tItemInSector AS (
|
||||||
|
SELECT is2.itemFk, is2.created, is2.shelvingFk
|
||||||
|
FROM vn.itemShelving is2
|
||||||
|
JOIN vn.shelving sh ON sh.code = is2.shelvingFk
|
||||||
|
JOIN vn.parking p ON p.id = sh.parkingFk
|
||||||
carlosap
commented
Pasar a una config Pasar a una config
sergiodt
commented
Posat els casos en productionConfig Posat els casos en productionConfig
|
|||||||
|
JOIN vn.sector s ON s.id = p.sectorFk
|
||||||
|
JOIN vn.productionConfig pc
|
||||||
|
WHERE is2.shelvingFk <> ?
|
||||||
|
AND s.code = pc.sectorFromCode)
|
||||||
|
SELECT ti.itemFK, tis.shelvingFk
|
||||||
|
FROM tItemShelving ti
|
||||||
|
JOIN tItemInSector tis ON tis.itemFk = ti.itemFk
|
||||||
|
JOIN vn.productionConfig pc
|
||||||
|
WHERE ti.created > tis.created + INTERVAL pc.itemOlderReviewHours HOUR;`,
|
||||||
|
[shelvingFk, shelvingFk], myOptions);
|
||||||
alexm
commented
Si no hi ha resultats de per si ja torna array vuit, no cal ficar el if else
Si no hi ha resultats de per si ja torna array vuit, no cal ficar el if else
```
const [isParkingToReview] = await Self.rawSql(`
SELECT COUNT(p.id) parkingToReview
FROM vn.parking p
JOIN vn.sector s ON s.id = p.sectorFk
JOIN vn.productionConfig pc
WHERE p.code = ? AND s.code = pc.sectorToCode;`,
[parking], myOptions);
if (isParkingToReview['parkingToReview'] < 1) return []
```
|
|||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,63 +0,0 @@
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethod('hasItemOlder', {
|
|
||||||
description:
|
|
||||||
'Get boolean if any or specific item of the shelving has older created in another shelving or parking',
|
|
||||||
accessType: 'READ',
|
|
||||||
accepts: [{
|
|
||||||
arg: 'shelvingFkIn',
|
|
||||||
type: 'string',
|
|
||||||
required: true,
|
|
||||||
description: 'Shelving code'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
arg: 'parking',
|
|
||||||
type: 'string',
|
|
||||||
description: 'Parking code'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
arg: 'shelvingFkOut',
|
|
||||||
type: 'string',
|
|
||||||
description: 'Shelving code'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
arg: 'itemFk',
|
|
||||||
type: 'integer',
|
|
||||||
description: 'Item id'
|
|
||||||
}],
|
|
||||||
returns: {
|
|
||||||
type: 'boolean',
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
|
||||||
path: `/hasItemOlder`,
|
|
||||||
verb: 'GET'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.hasItemOlder = async(shelvingFkIn, parking, shelvingFkOut, itemFk, options) => {
|
|
||||||
if (!parking && !shelvingFkOut) throw new UserError('Missing data: parking or shelving');
|
|
||||||
|
|
||||||
const myOptions = {};
|
|
||||||
if (typeof options == 'object')
|
|
||||||
Object.assign(myOptions, options);
|
|
||||||
|
|
||||||
const result = await Self.rawSql(`
|
|
||||||
SELECT COUNT(ish.id) countItemOlder
|
|
||||||
FROM vn.itemShelving ish
|
|
||||||
JOIN (
|
|
||||||
SELECT ish.itemFk, created,shelvingFk
|
|
||||||
FROM vn.itemShelving ish
|
|
||||||
JOIN vn.shelving s ON ish.shelvingFk = s.code
|
|
||||||
WHERE ish.shelvingFk = ?
|
|
||||||
)sub ON sub.itemFK = ish.itemFk
|
|
||||||
JOIN vn.shelving s ON s.code = ish.shelvingFk
|
|
||||||
JOIN vn.parking p ON p.id = s.parkingFk
|
|
||||||
WHERE sub.created > ish.created
|
|
||||||
AND (p.code <> ? OR ? IS NULL)
|
|
||||||
AND (ish.shelvingFk <> ? OR ? IS NULL)
|
|
||||||
AND (ish.itemFk <> ? OR ? IS NULL)`,
|
|
||||||
[shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk], myOptions);
|
|
||||||
return result[0]['countItemOlder'] > 0;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
|
||||||
|
describe('itemShelving getListItemNewer()', () => {
|
||||||
|
it('should return true because there is an older item', async() => {
|
||||||
alexm
commented
quitar fit quitar fit
|
|||||||
|
const shelving = 'NCC';
|
||||||
|
const parking = 'A-47-1';
|
||||||
|
|
||||||
|
const sectorCamHighCode = 'CAMARA SECTOR D';
|
||||||
|
const sectorCamCode = 'NAVE ALGEMESI';
|
||||||
|
|
||||||
|
const sectorCamCodeHighId = 1;
|
||||||
|
const sectorCamCodeId = 9991;
|
||||||
|
|
||||||
|
const tx = await models.Sector.beginTransaction({});
|
||||||
|
const myOptions = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const sectorHighCam = await models.Sector.findById(sectorCamCodeHighId, null, myOptions);
|
||||||
|
await sectorHighCam.updateAttributes({
|
||||||
|
code: sectorCamHighCode
|
||||||
|
});
|
||||||
|
|
||||||
|
const sectorCam = await models.Sector.findById(sectorCamCodeId, null, myOptions);
|
||||||
|
await sectorCam.updateAttributes({
|
||||||
|
code: sectorCamCode
|
||||||
|
});
|
||||||
|
|
||||||
|
const config = await models.ProductionConfig.findOne();
|
||||||
|
|
||||||
|
await config.updateAttributes({
|
||||||
|
sectorToCode: sectorCamHighCode,
|
||||||
|
sectorFromCode: sectorCamCode
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await models.ItemShelving.getListItemNewer(shelving, parking, myOptions);
|
||||||
|
|
||||||
|
expect(result.length).toEqual(2);
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,45 +0,0 @@
|
||||||
|
|
||||||
const {models} = require('vn-loopback/server/server');
|
|
||||||
|
|
||||||
describe('itemShelving hasOlder()', () => {
|
|
||||||
it('should return false because there are not older items', async() => {
|
|
||||||
const shelvingFkIn = 'GVC';
|
|
||||||
const shelvingFkOut = 'HEJ';
|
|
||||||
const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, null, shelvingFkOut);
|
|
||||||
|
|
||||||
expect(result).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return false because there are not older items in parking', async() => {
|
|
||||||
const shelvingFkIn = 'HEJ';
|
|
||||||
const parking = '700-01';
|
|
||||||
const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking);
|
|
||||||
|
|
||||||
expect(result).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return true because there is an older item', async() => {
|
|
||||||
const shelvingFkIn = 'UXN';
|
|
||||||
const shelvingFkOut = 'PCC';
|
|
||||||
const parking = 'A-01-1';
|
|
||||||
const itemFk = 1;
|
|
||||||
|
|
||||||
const tx = await models.ItemShelving.beginTransaction({});
|
|
||||||
const myOptions = {transaction: tx};
|
|
||||||
const filter = {where: {shelvingFk: shelvingFkOut}
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
const itemShelvingBefore = await models.ItemShelving.findOne(filter, myOptions);
|
|
||||||
await itemShelvingBefore.updateAttributes({
|
|
||||||
itemFk: itemFk
|
|
||||||
}, myOptions);
|
|
||||||
const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking, null, null, myOptions);
|
|
||||||
|
|
||||||
expect(result).toBe(true);
|
|
||||||
await tx.rollback();
|
|
||||||
} catch (e) {
|
|
||||||
await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -4,5 +4,5 @@ module.exports = Self => {
|
||||||
require('../methods/item-shelving/getInventory')(Self);
|
require('../methods/item-shelving/getInventory')(Self);
|
||||||
require('../methods/item-shelving/getAlternative')(Self);
|
require('../methods/item-shelving/getAlternative')(Self);
|
||||||
require('../methods/item-shelving/updateFromSale')(Self);
|
require('../methods/item-shelving/updateFromSale')(Self);
|
||||||
require('../methods/item-shelving/hasItemOlder')(Self);
|
require('../methods/item-shelving/getListItemNewer')(Self);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Return array