feat: #6382 chekCodeFormat #2351

Merged
jgallego merged 6 commits from 6382-regularizar-Shelving-Parking into dev 2024-05-06 07:46:10 +00:00
3 changed files with 24 additions and 32 deletions
Showing only changes of commit 7d3870e4a1 - Show all commits

View File

@ -23,16 +23,6 @@ BEGIN
SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1)); SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1));
SET vQuantity = vQuantity * vPacking; SET vQuantity = vQuantity * vPacking;
IF (SELECT COUNT(*) FROM shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN
INSERT IGNORE INTO parking(code) VALUES(vShelvingFk);
INSERT INTO shelving(code, parkingFk)
SELECT vShelvingFk, id
FROM parking
WHERE `code` = vShelvingFk COLLATE utf8_unicode_ci;
END IF;
IF (SELECT COUNT(*) FROM itemShelving IF (SELECT COUNT(*) FROM itemShelving
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
AND itemFk = vItemFk AND itemFk = vItemFk

View File

@ -1,4 +1,7 @@
ALTER TABLE vn.parking ALTER TABLE vn.parking
ADD CONSTRAINT chkParkingCodeFormat CHECK (CHAR_LENGTH(code) > 4 AND code LIKE '%-%'); ADD CONSTRAINT chkParkingCodeFormat CHECK (CHAR_LENGTH(code) > 4 AND code LIKE '%-%');
guillermo marked this conversation as resolved
Review

Gasta millor LENGTH()

Gasta millor LENGTH()
Review

perque?
Si se espera que code contenga caracteres que podrían ser multibyte y solo importa el conteo de caracteres visibles, se debería preferir CHAR_LENGTH. Por otro lado, si se quiere asegurar una restricción basada en el tamaño en bytes de la cadena, entonces se debería usar LENGTH

perque? Si se espera que code contenga caracteres que podrían ser multibyte y solo importa el conteo de caracteres visibles, se debería preferir CHAR_LENGTH. Por otro lado, si se quiere asegurar una restricción basada en el tamaño en bytes de la cadena, entonces se debería usar LENGTH
ALTER TABLE vn.parking MODIFY COLUMN sectorFk int(11) NOT NULL;
ALTER TABLE vn.shelving ALTER TABLE vn.shelving
ADD CONSTRAINT chkShelvingCodeFormat CHECK (CHAR_LENGTH(code) <= 4 AND code NOT LIKE '%-%'); ADD CONSTRAINT chkShelvingCodeFormat CHECK (CHAR_LENGTH(code) <= 4 AND code NOT LIKE '%-%');

View File

@ -1,18 +1,17 @@
const { models } = require('vn-loopback/server/server'); const {models} = require('vn-loopback/server/server');
const LoopBackContext = require('loopback-context'); const LoopBackContext = require('loopback-context');
// #6276
describe('ItemShelving upsertItem()', () => { describe('ItemShelving upsertItem()', () => {
const warehouseFk = 1; const warehouseFk = 1;
let ctx; let ctx;
let options; let options;
let tx; let tx;
beforeEach(async () => { beforeEach(async() => {
ctx = { ctx = {
req: { req: {
accessToken: { userId: 9 }, accessToken: {userId: 9},
headers: { origin: 'http://localhost' } headers: {origin: 'http://localhost'}
}, },
args: {} args: {}
}; };
@ -21,35 +20,35 @@ describe('ItemShelving upsertItem()', () => {
active: ctx.req 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;
}); });
afterEach(async () => { afterEach(async() => {
await tx.rollback(); await tx.rollback();
}); });
it('should add two new records', async () => { it('should add two new records', async() => {
const shelvingFk = 'ZPP'; const shelvingFk = 'GVC';
const items = [1, 1, 1, 2]; const items = [1, 1, 1, 2];
await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options);
const itemShelvings = await models.ItemShelving.find({ where: { shelvingFk } }, options); const itemShelvings = await models.ItemShelving.find({where: {shelvingFk}}, options);
expect(itemShelvings.length).toEqual(2); expect(itemShelvings.length).toEqual(2);
}); });
it('should update the visible items', async () => { it('should update the visible items', async() => {
const shelvingFk = 'GVC'; const shelvingFk = 'GVC';
const items = [2, 2]; const items = [2, 2];
const { visible: visibleItemsBefore } = await models.ItemShelving.findOne({ const {visible: visibleItemsBefore} = await models.ItemShelving.findOne({
where: { shelvingFk, itemFk: items[0] } where: {shelvingFk, itemFk: items[0]}
}, options); }, options);
await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options);
const { visible: visibleItemsAfter } = await models.ItemShelving.findOne({ const {visible: visibleItemsAfter} = await models.ItemShelving.findOne({
where: { shelvingFk, itemFk: items[0] } where: {shelvingFk, itemFk: items[0]}
}, options); }, options);
expect(visibleItemsAfter).toEqual(visibleItemsBefore + 2); expect(visibleItemsAfter).toEqual(visibleItemsBefore + 2);