Merge branch 'master' into solve_merge_problems
gitea/salix/pipeline/pr-master There was a failure building this commit
Details
gitea/salix/pipeline/pr-master There was a failure building this commit
Details
This commit is contained in:
commit
dcd7237d67
|
@ -0,0 +1,88 @@
|
||||||
|
const axios = require('axios');
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
const moment = require('moment');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('sendOrders', {
|
||||||
|
description: 'Sends a set of orders',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'tickets',
|
||||||
|
type: ['number'],
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
returns: {
|
||||||
|
type: 'string',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/sendOrders`,
|
||||||
|
verb: 'POST'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Self.sendOrders = async tickets => {
|
||||||
|
const config = await Self.app.models.QuadmindsApiConfig.findOne();
|
||||||
|
if (!config) throw new UserError('Config params not set');
|
||||||
|
|
||||||
|
if (tickets.length > config.maxObjects)
|
||||||
|
throw new UserError(`Quadminds does not support more than ${config.maxObjects} tickets`);
|
||||||
|
|
||||||
|
let poisData = [];
|
||||||
|
let isOk;
|
||||||
|
for (let offset = 0; !isOk; offset = offset + config.limit) {
|
||||||
|
const pois = await axios.get(`${config.url}pois/search?limit=${config.limit}&offset=${offset}`, {
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'X-Saas-Apikey': config.key
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pois.data.data.length ? poisData.push(...pois.data.data) : isOk = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const poiMap = new Map(poisData.map(poi => [poi.code, poi._id]));
|
||||||
|
|
||||||
|
let orders = await Self.rawSql(`
|
||||||
|
SELECT a.id poiCode,
|
||||||
|
t.id code,
|
||||||
|
t.shipped date,
|
||||||
|
'PEDIDO' operation,
|
||||||
|
t.totalWithVat totalAmount,
|
||||||
|
t.totalWithoutVat totalAmountWithoutTaxes,
|
||||||
|
SUM(sv.volume) volume
|
||||||
|
FROM ticket t
|
||||||
|
JOIN address a ON a.id = t.addressFk
|
||||||
|
JOIN saleVolume sv ON sv.ticketFk = t.id
|
||||||
|
WHERE t.id IN (?)
|
||||||
|
GROUP BY t.id
|
||||||
|
`, [tickets]);
|
||||||
|
|
||||||
|
// Transformo code en string ya que lo obtenermos como integer
|
||||||
|
orders = orders.map(order => {
|
||||||
|
return {
|
||||||
|
...order,
|
||||||
|
poiId: poiMap.get(order.poiCode.toString()) || undefined,
|
||||||
|
code: order.code.toString(),
|
||||||
|
date: moment(order.date).format('YYYY-MM-DD'),
|
||||||
|
totalAmount: order.totalAmount || undefined,
|
||||||
|
totalAmountWithoutTaxes: order.totalAmountWithoutTaxes || undefined,
|
||||||
|
timeWindow: [{
|
||||||
|
from: config.orderTimeFrom,
|
||||||
|
to: config.orderTimeTo
|
||||||
|
}],
|
||||||
|
orderMeasures: [{
|
||||||
|
constraintId: 3, // Volumen
|
||||||
|
value: order.volume
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
await axios.post(`${config.url}orders`, orders, {
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Saas-Apikey': config.key
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,87 @@
|
||||||
|
const axios = require('axios');
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('sendPois', {
|
||||||
|
description: 'Sends a set of pois',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'tickets',
|
||||||
|
type: ['number'],
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
returns: {
|
||||||
|
type: 'string',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/sendPois`,
|
||||||
|
verb: 'POST'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Self.sendPois = async tickets => {
|
||||||
|
const config = await Self.app.models.QuadmindsApiConfig.findOne();
|
||||||
|
if (!config) throw new UserError('Config params not set');
|
||||||
|
|
||||||
|
if (tickets.length > config.maxObjects)
|
||||||
|
throw new UserError(`Quadminds does not support more than ${config.maxObjects} tickets`);
|
||||||
|
|
||||||
|
let pois = await Self.rawSql(`
|
||||||
|
WITH deliveryNotes AS (
|
||||||
|
SELECT t.id, t.routeFk, tn.description
|
||||||
|
FROM ticket t
|
||||||
|
JOIN ticketObservation tn ON tn.ticketFk = t.id
|
||||||
|
JOIN observationType ot ON ot.id = tn.observationTypeFk
|
||||||
|
WHERE ot.code = 'delivery'
|
||||||
|
)
|
||||||
|
SELECT a.id code,
|
||||||
|
c.socialName name,
|
||||||
|
IF(ABS(a.latitude - ROUND(a.latitude)) < 0.000001, NULL, a.latitude) latitude,
|
||||||
|
IF(ABS(a.longitude - ROUND(a.longitude)) < 0.000001, NULL, a.longitude) longitude,
|
||||||
|
a.street,
|
||||||
|
a.city locality,
|
||||||
|
p.name state,
|
||||||
|
co.name country,
|
||||||
|
CONCAT_WS(', ', IFNULL(a.street, ''), IFNULL(a.city, ''), IFNULL(p.name, '')) longAddress,
|
||||||
|
CONCAT(IFNULL(a.mobile, c.mobile)) phoneNumber,
|
||||||
|
dn.description poiDeliveryComments,
|
||||||
|
c.email email
|
||||||
|
FROM ticket t
|
||||||
|
JOIN address a ON a.id = t.addressFk
|
||||||
|
JOIN province p ON p.id = a.provinceFk
|
||||||
|
JOIN country co ON co.id = p.countryFk
|
||||||
|
JOIN client c ON c.id = t.clientFk
|
||||||
|
LEFT JOIN deliveryNotes dn ON dn.id = t.id
|
||||||
|
WHERE t.id IN (?)
|
||||||
|
GROUP BY t.id
|
||||||
|
`, [tickets]);
|
||||||
|
|
||||||
|
// Transformo code en string ya que lo obtenermos como integer
|
||||||
|
pois = pois.map(poi => {
|
||||||
|
return {
|
||||||
|
...poi,
|
||||||
|
code: poi.code.toString(),
|
||||||
|
latitude: poi.latitude || undefined,
|
||||||
|
longitude: poi.longitude || undefined,
|
||||||
|
address: {
|
||||||
|
street: poi.street || undefined,
|
||||||
|
locality: poi.locality || undefined,
|
||||||
|
state: poi.state || undefined,
|
||||||
|
country: poi.country || undefined
|
||||||
|
},
|
||||||
|
poiDeliveryComments: poi.poiDeliveryComments || undefined,
|
||||||
|
phoneNumber: poi.phoneNumber || undefined,
|
||||||
|
email: poi.email || undefined
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
await axios.post(`${config.url}pois`, pois, {
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Saas-Apikey': config.key
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
|
@ -124,6 +124,9 @@
|
||||||
"Province": {
|
"Province": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
},
|
},
|
||||||
|
"QuadmindsApiConfig": {
|
||||||
|
"dataSource": "vn"
|
||||||
|
},
|
||||||
"Autonomy": {
|
"Autonomy": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
require('../methods/quadminds-api-config/sendPois')(Self);
|
||||||
|
require('../methods/quadminds-api-config/sendOrders')(Self);
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "QuadmindsApiConfig",
|
||||||
|
"base": "VnModel",
|
||||||
|
"options": {
|
||||||
|
"mysql": {
|
||||||
|
"table": "quadmindsApiConfig"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "number",
|
||||||
|
"id": true,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxObjects": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"limit": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3180,7 +3180,7 @@ UPDATE vn.department
|
||||||
SET workerFk = null;
|
SET workerFk = null;
|
||||||
|
|
||||||
INSERT INTO vn.packaging
|
INSERT INTO vn.packaging
|
||||||
VALUES('--', 2745600.00, 100.00, 120.00, 220.00, 0.00, 1, '2001-01-01 00:00:00.000', NULL, NULL, NULL, 0.00, 16, 0.00, 0, NULL, 0.00, NULL, NULL, 0, NULL, 0, 0);
|
VALUES('--', 2745600.00, 100.00, 120.00, 220.00, 0.00, 1, '2001-01-01 00:00:00.000', NULL, NULL, NULL, 0.00, 16, 0.00, 0, NULL, 0.00, NULL, NULL, 0, NULL, 0, 0,0);
|
||||||
|
|
||||||
|
|
||||||
INSERT IGNORE INTO vn.intrastat
|
INSERT IGNORE INTO vn.intrastat
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_new`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT)
|
||||||
vUserFk INT,
|
|
||||||
OUT vCollectionFk INT
|
|
||||||
)
|
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Genera colecciones de tickets sin asignar trabajador.
|
* Genera colecciones de tickets sin asignar trabajador.
|
||||||
|
@ -15,29 +12,30 @@ BEGIN
|
||||||
DECLARE vLinesLimit INT;
|
DECLARE vLinesLimit INT;
|
||||||
DECLARE vTicketLines INT;
|
DECLARE vTicketLines INT;
|
||||||
DECLARE vVolumeLimit DECIMAL;
|
DECLARE vVolumeLimit DECIMAL;
|
||||||
DECLARE vSizeLimit INT;
|
|
||||||
DECLARE vTicketVolume DECIMAL;
|
DECLARE vTicketVolume DECIMAL;
|
||||||
|
DECLARE vSizeLimit INT;
|
||||||
DECLARE vMaxTickets INT;
|
DECLARE vMaxTickets INT;
|
||||||
DECLARE vStateCode VARCHAR(45);
|
DECLARE vStateFk VARCHAR(45);
|
||||||
DECLARE vFirstTicketFk INT;
|
DECLARE vFirstTicketFk INT;
|
||||||
|
DECLARE vHour INT;
|
||||||
|
DECLARE vMinute INT;
|
||||||
DECLARE vWorkerCode VARCHAR(3);
|
DECLARE vWorkerCode VARCHAR(3);
|
||||||
DECLARE vWagonCounter INT DEFAULT 1;
|
DECLARE vWagonCounter INT DEFAULT 0;
|
||||||
DECLARE vTicketFk INT;
|
DECLARE vTicketFk INT;
|
||||||
DECLARE vItemPackingTypeFk VARCHAR(1);
|
DECLARE vItemPackingTypeFk VARCHAR(1);
|
||||||
DECLARE vHasAssignedTickets BOOL;
|
DECLARE vHasAssignedTickets BOOLEAN;
|
||||||
DECLARE vHasUniqueCollectionTime BOOL;
|
DECLARE vHasUniqueCollectionTime BOOL;
|
||||||
DECLARE vHeight INT;
|
|
||||||
DECLARE vVolume INT;
|
|
||||||
DECLARE vLiters INT;
|
|
||||||
DECLARE vLines INT;
|
|
||||||
DECLARE vTotalLines INT DEFAULT 0;
|
|
||||||
DECLARE vTotalVolume INT DEFAULT 0;
|
|
||||||
DECLARE vFreeWagonFk INT;
|
|
||||||
DECLARE vDone INT DEFAULT FALSE;
|
DECLARE vDone INT DEFAULT FALSE;
|
||||||
|
DECLARE vLockName VARCHAR(215);
|
||||||
|
DECLARE vLockTime INT DEFAULT 30;
|
||||||
|
DECLARE vFreeWagonFk INT;
|
||||||
|
DECLARE vErrorNumber INT;
|
||||||
|
DECLARE vErrorMsg TEXT;
|
||||||
|
|
||||||
DECLARE vTickets CURSOR FOR
|
DECLARE c1 CURSOR FOR
|
||||||
SELECT ticketFk, `lines`, m3
|
SELECT ticketFk, `lines`, m3
|
||||||
FROM tmp.productionBuffer
|
FROM tmp.productionBuffer
|
||||||
|
WHERE ticketFk <> vFirstTicketFk
|
||||||
ORDER BY HH,
|
ORDER BY HH,
|
||||||
mm,
|
mm,
|
||||||
productionOrder DESC,
|
productionOrder DESC,
|
||||||
|
@ -50,6 +48,26 @@ BEGIN
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
GET DIAGNOSTICS CONDITION 1
|
||||||
|
vErrorNumber = MYSQL_ERRNO,
|
||||||
|
vErrorMsg = MESSAGE_TEXT;
|
||||||
|
|
||||||
|
CALL util.debugAdd('collection_new', JSON_OBJECT(
|
||||||
|
'errorNumber', vErrorNumber,
|
||||||
|
'errorMsg', vErrorMsg,
|
||||||
|
'lockName', vLockName,
|
||||||
|
'userFk', vUserFk,
|
||||||
|
'ticketFk', vTicketFk
|
||||||
|
)); -- Tmp
|
||||||
|
|
||||||
|
IF vLockName IS NOT NULL THEN
|
||||||
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
END IF;
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
|
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
|
||||||
pc.hasUniqueCollectionTime,
|
pc.hasUniqueCollectionTime,
|
||||||
w.code,
|
w.code,
|
||||||
|
@ -60,26 +78,36 @@ BEGIN
|
||||||
o.trainFk,
|
o.trainFk,
|
||||||
o.linesLimit,
|
o.linesLimit,
|
||||||
o.volumeLimit,
|
o.volumeLimit,
|
||||||
o.sizeLimit
|
o.sizeLimit,
|
||||||
|
pc.collection_new_lockname
|
||||||
INTO vMaxTickets,
|
INTO vMaxTickets,
|
||||||
vHasUniqueCollectionTime,
|
vHasUniqueCollectionTime,
|
||||||
vWorkerCode,
|
vWorkerCode,
|
||||||
vWarehouseFk,
|
vWarehouseFk,
|
||||||
vItemPackingTypeFk,
|
vItemPackingTypeFk,
|
||||||
vStateCode,
|
vStateFk,
|
||||||
vWagons,
|
vWagons,
|
||||||
vTrainFk,
|
vTrainFk,
|
||||||
vLinesLimit,
|
vLinesLimit,
|
||||||
vVolumeLimit,
|
vVolumeLimit,
|
||||||
vSizeLimit
|
vSizeLimit,
|
||||||
FROM worker w
|
vLockName
|
||||||
JOIN operator o ON o.workerFk = w.id
|
FROM productionConfig pc
|
||||||
|
JOIN worker w ON w.id = vUserFk
|
||||||
JOIN state st ON st.`code` = 'ON_PREPARATION'
|
JOIN state st ON st.`code` = 'ON_PREPARATION'
|
||||||
JOIN productionConfig pc
|
JOIN operator o ON o.workerFk = vUserFk;
|
||||||
WHERE w.id = vUserFk;
|
|
||||||
|
SET vLockName = CONCAT_WS('/',
|
||||||
|
vLockName,
|
||||||
|
vWarehouseFk,
|
||||||
|
vItemPackingTypeFk
|
||||||
|
);
|
||||||
|
|
||||||
|
IF NOT GET_LOCK(vLockName, vLockTime) THEN
|
||||||
|
CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- Se prepara el tren, con tantos vagones como sea necesario.
|
-- Se prepara el tren, con tantos vagones como sea necesario.
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tTrain
|
CREATE OR REPLACE TEMPORARY TABLE tTrain
|
||||||
(wagon INT,
|
(wagon INT,
|
||||||
shelve INT,
|
shelve INT,
|
||||||
|
@ -90,58 +118,59 @@ BEGIN
|
||||||
PRIMARY KEY(wagon, shelve))
|
PRIMARY KEY(wagon, shelve))
|
||||||
ENGINE = MEMORY;
|
ENGINE = MEMORY;
|
||||||
|
|
||||||
INSERT INTO tTrain (wagon, shelve, liters, `lines`, height)
|
WHILE vWagons > vWagonCounter DO
|
||||||
WITH RECURSIVE wagonSequence AS (
|
SET vWagonCounter = vWagonCounter + 1;
|
||||||
SELECT vWagonCounter wagon
|
|
||||||
UNION ALL
|
INSERT INTO tTrain(wagon, shelve, liters, `lines`, height)
|
||||||
SELECT wagon + 1 wagon
|
SELECT vWagonCounter, cv.`level` , cv.liters , cv.`lines` , cv.height
|
||||||
FROM wagonSequence
|
FROM collectionVolumetry cv
|
||||||
WHERE wagon < vWagonCounter + vWagons -1
|
WHERE cv.trainFk = vTrainFk
|
||||||
)
|
|
||||||
SELECT ws.wagon, cv.`level`, cv.liters, cv.`lines`, cv.height
|
|
||||||
FROM wagonSequence ws
|
|
||||||
JOIN vn.collectionVolumetry cv ON cv.trainFk = vTrainFk
|
|
||||||
AND cv.itemPackingTypeFk = vItemPackingTypeFk;
|
AND cv.itemPackingTypeFk = vItemPackingTypeFk;
|
||||||
|
END WHILE;
|
||||||
|
|
||||||
-- Esto desaparecerá cuando tengamos la table cache.ticket
|
-- Esto desaparecerá cuando tengamos la table cache.ticket
|
||||||
|
|
||||||
CALL productionControl(vWarehouseFk, 0);
|
CALL productionControl(vWarehouseFk, 0);
|
||||||
|
|
||||||
ALTER TABLE tmp.productionBuffer
|
ALTER TABLE tmp.productionBuffer
|
||||||
ADD COLUMN liters INT,
|
ADD COLUMN liters INT,
|
||||||
ADD COLUMN height INT;
|
ADD COLUMN height INT;
|
||||||
|
|
||||||
|
-- Se obtiene nº de colección.
|
||||||
|
INSERT INTO collection
|
||||||
|
SET itemPackingTypeFk = vItemPackingTypeFk,
|
||||||
|
trainFk = vTrainFk,
|
||||||
|
wagons = vWagons,
|
||||||
|
warehouseFk = vWarehouseFk;
|
||||||
|
|
||||||
|
SELECT LAST_INSERT_ID() INTO vCollectionFk;
|
||||||
|
|
||||||
-- Los tickets de recogida en Algemesí sólo se sacan si están asignados.
|
-- Los tickets de recogida en Algemesí sólo se sacan si están asignados.
|
||||||
-- Los pedidos con riesgo no se sacan aunque se asignen.
|
-- Los pedidos con riesgo no se sacan aunque se asignen.
|
||||||
|
DELETE pb.*
|
||||||
DELETE pb
|
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
WHERE (pb.agency = 'REC_ALGEMESI'
|
WHERE (pb.agency = 'REC_ALGEMESI'
|
||||||
AND s.code <> 'PICKER_DESIGNED')
|
AND s.code <> 'PICKER_DESIGNED')
|
||||||
OR pb.problem LIKE '%RIESGO%';
|
OR pb.problem LIKE '%RIESGO%';
|
||||||
|
|
||||||
-- Si hay tickets asignados, nos centramos exclusivamente en esos tickets
|
-- Comprobamos si hay tickets asignados. En ese caso, nos centramos
|
||||||
-- y los sacamos independientemente de problemas o tamaños
|
-- exclusivamente en esos tickets y los sacamos independientemente
|
||||||
|
-- de problemas o tamaños
|
||||||
SELECT EXISTS (
|
SELECT COUNT(*) INTO vHasAssignedTickets
|
||||||
SELECT TRUE
|
FROM tmp.productionBuffer pb
|
||||||
FROM tmp.productionBuffer pb
|
JOIN state s ON s.id = pb.state
|
||||||
JOIN state s ON s.id = pb.state
|
WHERE s.code = 'PICKER_DESIGNED'
|
||||||
WHERE s.code = 'PICKER_DESIGNED'
|
AND pb.workerCode = vWorkerCode;
|
||||||
AND pb.workerCode = vWorkerCode
|
|
||||||
) INTO vHasAssignedTickets;
|
|
||||||
|
|
||||||
-- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
|
-- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
|
||||||
|
|
||||||
IF vHasAssignedTickets THEN
|
IF vHasAssignedTickets THEN
|
||||||
DELETE pb
|
DELETE pb.*
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
WHERE s.code <> 'PICKER_DESIGNED'
|
WHERE s.code <> 'PICKER_DESIGNED'
|
||||||
OR pb.workerCode <> vWorkerCode;
|
OR pb.workerCode <> vWorkerCode;
|
||||||
ELSE
|
ELSE
|
||||||
DELETE pb
|
DELETE pb.*
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
JOIN agencyMode am ON am.id = pb.agencyModeFk
|
JOIN agencyMode am ON am.id = pb.agencyModeFk
|
||||||
|
@ -164,7 +193,7 @@ BEGIN
|
||||||
OR (NOT pb.H AND pb.V > 0 AND vItemPackingTypeFk = 'H')
|
OR (NOT pb.H AND pb.V > 0 AND vItemPackingTypeFk = 'H')
|
||||||
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
|
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
|
||||||
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
|
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
|
||||||
OR LENGTH(pb.problem)
|
OR LENGTH(pb.problem) > 0
|
||||||
OR pb.lines > vLinesLimit
|
OR pb.lines > vLinesLimit
|
||||||
OR pb.m3 > vVolumeLimit
|
OR pb.m3 > vVolumeLimit
|
||||||
OR sub.maxSize > vSizeLimit
|
OR sub.maxSize > vSizeLimit
|
||||||
|
@ -191,37 +220,37 @@ BEGIN
|
||||||
ticketFk
|
ticketFk
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
OPEN vTickets;
|
SET vTicketFk = vFirstTicketFk;
|
||||||
l: LOOP
|
SET @lines = 0;
|
||||||
SET vDone = FALSE;
|
SET @volume = 0;
|
||||||
FETCH vTickets INTO vTicketFk, vTicketLines, vTicketVolume;
|
|
||||||
|
|
||||||
IF vDone THEN
|
OPEN c1;
|
||||||
LEAVE l;
|
read_loop: LOOP
|
||||||
END IF;
|
SET vDone = FALSE;
|
||||||
|
|
||||||
-- Buscamos un ticket que cumpla con los requisitos en el listado
|
-- Buscamos un ticket que cumpla con los requisitos en el listado
|
||||||
|
IF ((vTicketLines + @lines) <= vLinesLimit OR vLinesLimit IS NULL)
|
||||||
IF (vLinesLimit IS NULL OR (vTotalLines + vTicketLines) <= vLinesLimit)
|
AND ((vTicketVolume + @volume) <= vVolumeLimit OR vVolumeLimit IS NULL) THEN
|
||||||
AND (vVolumeLimit IS NULL OR (vTotalVolume + vTicketVolume) <= vVolumeLimit) THEN
|
|
||||||
|
|
||||||
CALL ticket_splitItemPackingType(vTicketFk, vItemPackingTypeFk);
|
CALL ticket_splitItemPackingType(vTicketFk, vItemPackingTypeFk);
|
||||||
DROP TEMPORARY TABLE tmp.ticketIPT;
|
DROP TEMPORARY TABLE tmp.ticketIPT;
|
||||||
|
|
||||||
SELECT COUNT(*), SUM(litros), MAX(i.`size`), SUM(sv.volume)
|
|
||||||
INTO vLines, vLiters, vHeight, vVolume
|
|
||||||
FROM saleVolume sv
|
|
||||||
JOIN sale s ON s.id = sv.saleFk
|
|
||||||
JOIN item i ON i.id = s.itemFk
|
|
||||||
WHERE sv.ticketFk = vTicketFk;
|
|
||||||
|
|
||||||
SET vTotalVolume = vTotalVolume + vVolume,
|
|
||||||
vTotalLines = vTotalLines + vLines;
|
|
||||||
|
|
||||||
UPDATE tmp.productionBuffer pb
|
UPDATE tmp.productionBuffer pb
|
||||||
SET pb.liters = vLiters,
|
JOIN (
|
||||||
pb.`lines` = vLines,
|
SELECT SUM(litros) liters,
|
||||||
pb.height = vHeight
|
@lines:= COUNT(*) + @lines,
|
||||||
|
COUNT(*) `lines`,
|
||||||
|
MAX(i.`size`) height,
|
||||||
|
@volume := SUM(sv.volume) + @volume,
|
||||||
|
SUM(sv.volume) volume
|
||||||
|
FROM saleVolume sv
|
||||||
|
JOIN sale s ON s.id = sv.saleFk
|
||||||
|
JOIN item i ON i.id = s.itemFk
|
||||||
|
WHERE sv.ticketFk = vTicketFk
|
||||||
|
) sub
|
||||||
|
SET pb.liters = sub.liters,
|
||||||
|
pb.`lines` = sub.`lines`,
|
||||||
|
pb.height = sub.height
|
||||||
WHERE pb.ticketFk = vTicketFk;
|
WHERE pb.ticketFk = vTicketFk;
|
||||||
|
|
||||||
UPDATE tTrain tt
|
UPDATE tTrain tt
|
||||||
|
@ -238,13 +267,17 @@ BEGIN
|
||||||
tt.height
|
tt.height
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
-- Si no le encuentra una balda, intentamos darle un carro entero libre
|
-- Si no le encuentra una balda adecuada, intentamos darle un carro entero si queda alguno libre
|
||||||
|
|
||||||
IF NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
IF NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
||||||
SELECT wagon INTO vFreeWagonFk
|
SELECT tt.wagon
|
||||||
FROM tTrain
|
INTO vFreeWagonFk
|
||||||
GROUP BY wagon
|
FROM tTrain tt
|
||||||
HAVING SUM(IFNULL(ticketFk, 0)) = 0
|
LEFT JOIN (
|
||||||
|
SELECT DISTINCT wagon
|
||||||
|
FROM tTrain
|
||||||
|
WHERE ticketFk IS NOT NULL
|
||||||
|
) nn ON nn.wagon = tt.wagon
|
||||||
|
WHERE nn.wagon IS NULL
|
||||||
ORDER BY wagon
|
ORDER BY wagon
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
|
@ -253,35 +286,38 @@ BEGIN
|
||||||
SET ticketFk = vFirstTicketFk
|
SET ticketFk = vFirstTicketFk
|
||||||
WHERE wagon = vFreeWagonFk;
|
WHERE wagon = vFreeWagonFk;
|
||||||
|
|
||||||
-- Se anulan el resto de carros libres,
|
-- Se anulan el resto de carros libres para que sólo uno lleve un pedido excesivo
|
||||||
-- máximo un carro con pedido excesivo
|
DELETE tt.*
|
||||||
|
|
||||||
DELETE tt
|
|
||||||
FROM tTrain tt
|
FROM tTrain tt
|
||||||
JOIN (SELECT wagon
|
LEFT JOIN (
|
||||||
FROM tTrain
|
SELECT DISTINCT wagon
|
||||||
GROUP BY wagon
|
FROM tTrain
|
||||||
HAVING SUM(IFNULL(ticketFk, 0)) = 0
|
WHERE ticketFk IS NOT NULL
|
||||||
) sub ON sub.wagon = tt.wagon;
|
) nn ON nn.wagon = tt.wagon
|
||||||
|
WHERE nn.wagon IS NULL;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
|
||||||
|
IF vDone OR NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk IS NULL) THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
CLOSE vTickets;
|
CLOSE c1;
|
||||||
|
|
||||||
IF (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
IF (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
||||||
-- Se obtiene nº de colección
|
UPDATE collection c
|
||||||
|
JOIN state st ON st.code = 'ON_PREPARATION'
|
||||||
INSERT INTO collection
|
SET c.stateFk = st.id
|
||||||
SET itemPackingTypeFk = vItemPackingTypeFk,
|
WHERE c.id = vCollectionFk;
|
||||||
trainFk = vTrainFk,
|
|
||||||
wagons = vWagons,
|
|
||||||
warehouseFk = vWarehouseFk;
|
|
||||||
|
|
||||||
SELECT LAST_INSERT_ID() INTO vCollectionFk;
|
|
||||||
|
|
||||||
-- Asigna las bandejas
|
-- Asigna las bandejas
|
||||||
|
|
||||||
INSERT IGNORE INTO ticketCollection(ticketFk, collectionFk, `level`, wagon, liters)
|
INSERT IGNORE INTO ticketCollection(ticketFk, collectionFk, `level`, wagon, liters)
|
||||||
SELECT tt.ticketFk, vCollectionFk, tt.shelve, tt.wagon, tt.liters
|
SELECT tt.ticketFk, vCollectionFk, tt.shelve, tt.wagon, tt.liters
|
||||||
FROM tTrain tt
|
FROM tTrain tt
|
||||||
|
@ -289,36 +325,39 @@ BEGIN
|
||||||
ORDER BY tt.wagon, tt.shelve;
|
ORDER BY tt.wagon, tt.shelve;
|
||||||
|
|
||||||
-- Actualiza el estado de los tickets
|
-- Actualiza el estado de los tickets
|
||||||
|
CALL collection_setState(vCollectionFk, vStateFk);
|
||||||
CALL collection_setState(vCollectionFk, vStateCode);
|
|
||||||
|
|
||||||
-- Aviso para la preparacion previa
|
-- Aviso para la preparacion previa
|
||||||
|
|
||||||
INSERT INTO ticketDown(ticketFk, collectionFk)
|
INSERT INTO ticketDown(ticketFk, collectionFk)
|
||||||
SELECT tc.ticketFk, tc.collectionFk
|
SELECT tc.ticketFk, tc.collectionFk
|
||||||
FROM ticketCollection tc
|
FROM ticketCollection tc
|
||||||
WHERE tc.collectionFk = vCollectionFk;
|
WHERE tc.collectionFk = vCollectionFk;
|
||||||
|
|
||||||
CALL collection_mergeSales(vCollectionFk);
|
CALL sales_mergeByCollection(vCollectionFk);
|
||||||
|
|
||||||
UPDATE `collection` c
|
UPDATE `collection` c
|
||||||
JOIN(
|
JOIN (
|
||||||
SELECT COUNT(*) saleTotalCount,
|
SELECT COUNT(*) saleTotalCount,
|
||||||
SUM(s.isPicked <> 0) salePickedCount
|
SUM(s.isPicked <> 0) salePickedCount
|
||||||
FROM ticketCollection tc
|
FROM ticketCollection tc
|
||||||
JOIN sale s ON s.ticketFk = tc.ticketFk
|
JOIN sale s ON s.ticketFk = tc.ticketFk
|
||||||
WHERE tc.collectionFk = vCollectionFk
|
WHERE tc.collectionFk = vCollectionFk
|
||||||
AND s.quantity > 0
|
AND s.quantity > 0
|
||||||
)sub
|
) sub
|
||||||
SET c.saleTotalCount = sub.saleTotalCount,
|
SET c.saleTotalCount = sub.saleTotalCount,
|
||||||
c.salePickedCount = sub.salePickedCount
|
c.salePickedCount = sub.salePickedCount
|
||||||
WHERE c.id = vCollectionFk;
|
WHERE c.id = vCollectionFk;
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
SET vCollectionFk = NULL;
|
DELETE FROM `collection`
|
||||||
|
WHERE id = vCollectionFk;
|
||||||
|
SET vCollectionFk = NULL;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
tTrain,
|
tTrain,
|
||||||
tmp.productionBuffer;
|
tmp.productionBuffer;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -48,6 +48,13 @@ proc: BEGIN
|
||||||
RESIGNAL;
|
RESIGNAL;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
SELECT id INTO vSaleFk
|
||||||
|
FROM sale
|
||||||
|
WHERE id = vSaleFk
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
SELECT MAX(p.pickingOrder), s.quantity - SUM(IFNULL(iss.quantity, 0)), s.quantity
|
SELECT MAX(p.pickingOrder), s.quantity - SUM(IFNULL(iss.quantity, 0)), s.quantity
|
||||||
INTO vLastPickingOrder, vOutStanding, vSaleQuantity
|
INTO vLastPickingOrder, vOutStanding, vSaleQuantity
|
||||||
FROM sale s
|
FROM sale s
|
||||||
|
@ -57,7 +64,8 @@ proc: BEGIN
|
||||||
LEFT JOIN parking p ON p.id = sh.parkingFk
|
LEFT JOIN parking p ON p.id = sh.parkingFk
|
||||||
WHERE s.id = vSaleFk;
|
WHERE s.id = vSaleFk;
|
||||||
|
|
||||||
IF vOutStanding <= 0 THEN
|
IF vOutStanding <= 0 THEN
|
||||||
|
COMMIT;
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
@ -84,10 +92,8 @@ proc: BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
LEAVE l;
|
LEAVE l;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
START TRANSACTION;
|
SELECT id INTO vItemShelvingFk
|
||||||
|
|
||||||
SELECT id INTO vItemShelvingFk
|
|
||||||
FROM itemShelving
|
FROM itemShelving
|
||||||
WHERE id = vItemShelvingFk
|
WHERE id = vItemShelvingFk
|
||||||
FOR UPDATE;
|
FOR UPDATE;
|
||||||
|
@ -115,9 +121,8 @@ proc: BEGIN
|
||||||
WHERE id = vItemShelvingFk;
|
WHERE id = vItemShelvingFk;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
END LOOP;
|
END LOOP;
|
||||||
CLOSE vItemShelvingAvailable;
|
CLOSE vItemShelvingAvailable;
|
||||||
|
COMMIT;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -3,47 +3,41 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_mergeSales`(
|
||||||
vSelf INT
|
vSelf INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vHasSalesToMerge BOOL;
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
BEGIN
|
BEGIN
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
RESIGNAL;
|
RESIGNAL;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
|
|
||||||
SELECT id INTO vSelf
|
|
||||||
FROM ticket
|
|
||||||
WHERE id = vSelf FOR UPDATE;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
|
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
|
||||||
(PRIMARY KEY (id))
|
(PRIMARY KEY (id))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT s.id, s.itemFk, SUM(s.quantity) newQuantity
|
SELECT s.id, s.itemFk, SUM(s.quantity) newQuantity
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN itemType it ON it.id = i.typeFk
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
WHERE s.ticketFk = vSelf
|
WHERE s.ticketFk = vSelf
|
||||||
AND it.isMergeable
|
AND it.isMergeable
|
||||||
GROUP BY s.itemFk, s.price, s.discount
|
GROUP BY s.itemFk, s.price, s.discount;
|
||||||
HAVING COUNT(*) > 1;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vHasSalesToMerge
|
START TRANSACTION;
|
||||||
FROM tSalesToPreserve;
|
|
||||||
|
|
||||||
IF vHasSalesToMerge THEN
|
UPDATE sale s
|
||||||
UPDATE sale s
|
JOIN tSalesToPreserve stp ON stp.id = s.id
|
||||||
JOIN tSalesToPreserve stp ON stp.id = s.id
|
SET s.quantity = newQuantity
|
||||||
SET s.quantity = newQuantity;
|
WHERE s.ticketFk = vSelf;
|
||||||
|
|
||||||
DELETE s
|
DELETE s.*
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN tSalesToPreserve stp ON stp.itemFk = s.itemFk
|
LEFT JOIN tSalesToPreserve stp ON stp.id = s.id
|
||||||
WHERE s.ticketFk = vSelf
|
JOIN item i ON i.id = s.itemFk
|
||||||
AND s.id <> stp.id;
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
END IF;
|
WHERE s.ticketFk = vSelf
|
||||||
|
AND stp.id IS NULL
|
||||||
|
AND it.isMergeable;
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tSalesToPreserve;
|
DROP TEMPORARY TABLE tSalesToPreserve;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -4,7 +4,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolume`(
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Update the volume ticket
|
* Update the volume ticket.
|
||||||
*
|
*
|
||||||
* @param vSelf Ticket id
|
* @param vSelf Ticket id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4,26 +4,36 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolumeIte
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Update the volume tickets of item
|
* Update the volume of tickets containing the item.
|
||||||
*
|
*
|
||||||
* @param vSelf Ticket id
|
* @param vItemFk Item id
|
||||||
*/
|
*/
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tTicket
|
DECLARE vTicket INT;
|
||||||
(PRIMARY KEY (id))
|
DECLARE vDone BOOL;
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT t.id, SUM(s.quantity * ic.cm3delivery / 1000000) volume
|
DECLARE vTickets CURSOR FOR
|
||||||
|
SELECT DISTINCT t.id
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN ticket t ON t.id = s.ticketFk
|
JOIN ticket t ON t.id = s.ticketFk
|
||||||
JOIN itemCost ic ON ic.itemFk = s.itemFk
|
JOIN itemCost ic ON ic.itemFk = s.itemFk
|
||||||
AND ic.warehouseFk = t.warehouseFk
|
AND ic.warehouseFk = t.warehouseFk
|
||||||
WHERE s.itemFk = vItemFk
|
WHERE s.itemFk = vItemFk
|
||||||
AND t.shipped >= util.VN_CURDATE()
|
AND t.shipped >= util.VN_CURDATE()
|
||||||
GROUP BY t.id;
|
AND t.refFk IS NULL;
|
||||||
|
|
||||||
UPDATE ticket t
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
JOIN tTicket tt ON tt.id = t.id
|
|
||||||
SET t.volume = tt.volume;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tTicket;
|
OPEN vTickets;
|
||||||
|
l: LOOP
|
||||||
|
FETCH vTickets INTO vTicket;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE l;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
CALL ticket_setVolume(vTicket);
|
||||||
|
|
||||||
|
END LOOP l;
|
||||||
|
CLOSE vTickets;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -5,21 +5,23 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_splitItemPacki
|
||||||
)
|
)
|
||||||
proc: BEGIN
|
proc: BEGIN
|
||||||
/**
|
/**
|
||||||
* Clona y reparte las líneas de ventas de un ticket en funcion del tipo de empaquetado.
|
* Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado.
|
||||||
* Respeta el id de ticket inicial para el tipo de empaquetado propuesto.
|
* Respeta el id inicial para el tipo propuesto.
|
||||||
*
|
*
|
||||||
* @param vSelf Id ticket
|
* @param vSelf Id ticket
|
||||||
* @param vOriginalItemPackingTypeFk Tipo empaquetado al que se mantiene el ticket original
|
* @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
|
||||||
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
*/
|
*/
|
||||||
DECLARE vDone INT DEFAULT FALSE;
|
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
|
||||||
DECLARE vHasItemPackingType BOOL;
|
|
||||||
DECLARE vItemPackingTypeFk INT;
|
|
||||||
DECLARE vNewTicketFk INT;
|
DECLARE vNewTicketFk INT;
|
||||||
|
DECLARE vPackingTypesToSplit INT;
|
||||||
|
DECLARE vDone INT DEFAULT FALSE;
|
||||||
|
|
||||||
DECLARE vItemPackingTypes CURSOR FOR
|
DECLARE vSaleGroup CURSOR FOR
|
||||||
SELECT DISTINCT itemPackingTypeFk
|
SELECT itemPackingTypeFk
|
||||||
FROM tSalesToMove;
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL
|
||||||
|
ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
|
@ -34,39 +36,59 @@ proc: BEGIN
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tSalesToMove (
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
|
||||||
ticketFk INT,
|
ticketFk INT,
|
||||||
saleFk INT,
|
itemPackingTypeFk VARCHAR(1)
|
||||||
itemPackingTypeFk INT
|
) ENGINE = MEMORY;
|
||||||
) ENGINE=MEMORY;
|
|
||||||
|
|
||||||
INSERT INTO tSalesToMove (saleFk, itemPackingTypeFk)
|
CASE vPackingTypesToSplit
|
||||||
SELECT s.id, i.itemPackingTypeFk
|
WHEN 0 THEN
|
||||||
FROM ticket t
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
JOIN item i ON i.id = s.itemFk
|
WHEN 1 THEN
|
||||||
WHERE t.id = vSelf
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
AND i.itemPackingTypeFk <> vOriginalItemPackingTypeFk;
|
SELECT vSelf, itemPackingTypeFk
|
||||||
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL;
|
||||||
|
ELSE
|
||||||
|
OPEN vSaleGroup;
|
||||||
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
|
|
||||||
OPEN vItemPackingTypes;
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
|
|
||||||
l: LOOP
|
l: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vItemPackingTypes INTO vItemPackingTypeFk;
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
|
|
||||||
IF vDone THEN
|
IF vDone THEN
|
||||||
LEAVE l;
|
LEAVE l;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
CALL ticket_Clone(vSelf, vNewTicketFk);
|
CALL ticket_Clone(vSelf, vNewTicketFk);
|
||||||
|
|
||||||
UPDATE tSalesToMove
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
SET ticketFk = vNewTicketFk
|
VALUES(vNewTicketFk, vItemPackingTypeFk);
|
||||||
WHERE itemPackingTypeFk = vItemPackingTypeFk;
|
END LOOP;
|
||||||
|
|
||||||
END LOOP;
|
CLOSE vSaleGroup;
|
||||||
|
|
||||||
CLOSE vItemPackingTypes;
|
SELECT s.id
|
||||||
|
FROM sale s
|
||||||
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
UPDATE sale s
|
||||||
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
|
SET s.ticketFk = t.ticketFk;
|
||||||
|
|
||||||
|
SELECT itemPackingTypeFk INTO vItemPackingTypeFk
|
||||||
|
FROM tSaleGroup sg
|
||||||
|
WHERE sg.itemPackingTypeFk IS NOT NULL
|
||||||
|
ORDER BY sg.itemPackingTypeFk
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
UPDATE sale s
|
UPDATE sale s
|
||||||
JOIN tSalesToMove stm ON stm.saleFk = s.id
|
JOIN tSalesToMove stm ON stm.saleFk = s.id
|
||||||
|
@ -83,6 +105,8 @@ proc: BEGIN
|
||||||
UNION
|
UNION
|
||||||
SELECT vSelf, vOriginalItemPackingTypeFk;
|
SELECT vSelf, vOriginalItemPackingTypeFk;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tSalesToMove;
|
DROP TEMPORARY TABLE
|
||||||
|
tSale,
|
||||||
|
tSaleGroup;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
RENAME TABLE vn.quadMindsApiConfig TO vn.quadmindsApiConfig;
|
||||||
|
|
||||||
|
ALTER TABLE vn.quadmindsApiConfig
|
||||||
|
ADD maxObjects INT NULL COMMENT 'Número máximo de objetos en el array por petición',
|
||||||
|
ADD `limit` INT NULL COMMENT 'Limite de objetos solicitados por petición',
|
||||||
|
ADD `orderTimeFrom` VARCHAR(5) NULL COMMENT 'Inicio de ventana horaria de pedido',
|
||||||
|
ADD `orderTimeTo` VARCHAR(5) NULL COMMENT 'Fin de ventana horaria de pedido';
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
ALTER TABLE vn.packaging ADD IF NOT EXISTS isPlantTray BOOL DEFAULT FALSE NOT NULL COMMENT 'The container is a plant tray. Used to restrict the picking of full plant trays, to make previous picking.';
|
|
@ -349,13 +349,6 @@
|
||||||
message="Recalculate components">
|
message="Recalculate components">
|
||||||
</vn-confirm>
|
</vn-confirm>
|
||||||
|
|
||||||
<!-- Client balance popup-->
|
|
||||||
<vn-client-balance-create
|
|
||||||
vn-id="balance-create"
|
|
||||||
company-fk="$ctrl.vnConfig.companyFk"
|
|
||||||
client-fk="$ctrl.ticket.client.id">
|
|
||||||
</vn-client-balance-create>
|
|
||||||
|
|
||||||
<!-- Send pdf to tablet -->
|
<!-- Send pdf to tablet -->
|
||||||
<vn-confirm
|
<vn-confirm
|
||||||
vn-id="pdfToTablet"
|
vn-id="pdfToTablet"
|
||||||
|
|
Loading…
Reference in New Issue