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 28 additions and 32 deletions

View File

@ -23,16 +23,6 @@ BEGIN
SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1));
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
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
AND itemFk = vItemFk

View File

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