Merge branch 'dev' into 6408-rocketChat
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
6a08a806a9
|
@ -26,16 +26,24 @@
|
||||||
<mrw:Nif><%= expeditionData.fi %></mrw:Nif>
|
<mrw:Nif><%= expeditionData.fi %></mrw:Nif>
|
||||||
<mrw:Nombre><%= expeditionData.clientName %></mrw:Nombre>
|
<mrw:Nombre><%= expeditionData.clientName %></mrw:Nombre>
|
||||||
<mrw:Telefono><%= expeditionData.phone %></mrw:Telefono>
|
<mrw:Telefono><%= expeditionData.phone %></mrw:Telefono>
|
||||||
|
<mrw:Observaciones><%= expeditionData.deliveryObservation %></mrw:Observaciones>
|
||||||
</mrw:DatosEntrega>
|
</mrw:DatosEntrega>
|
||||||
<mrw:DatosServicio>
|
<mrw:DatosServicio>
|
||||||
<mrw:Fecha><%= expeditionData.created %></mrw:Fecha>
|
<mrw:Fecha><%= expeditionData.created %></mrw:Fecha>
|
||||||
<mrw:Referencia><%= expeditionData.expeditionDataId %></mrw:Referencia>
|
<mrw:Referencia><%= expeditionData.reference %></mrw:Referencia>
|
||||||
<mrw:CodigoServicio><%= expeditionData.serviceType %></mrw:CodigoServicio>
|
<mrw:CodigoServicio><%= expeditionData.serviceType %></mrw:CodigoServicio>
|
||||||
<mrw:NumeroBultos>1</mrw:NumeroBultos>
|
<mrw:NumeroBultos>1</mrw:NumeroBultos>
|
||||||
<mrw:EntregaSabado><%= expeditionData.weekDays %></mrw:EntregaSabado>
|
<mrw:EntregaSabado><%= expeditionData.weekDays %></mrw:EntregaSabado>
|
||||||
<mrw:Peso><%= expeditionData.kg %></mrw:Peso>
|
|
||||||
<mrw:Reembolso/>
|
<mrw:Reembolso/>
|
||||||
<mrw:ImporteReembolso/>
|
<mrw:ImporteReembolso/>
|
||||||
|
<mrw:Bultos>
|
||||||
|
<mrw:BultoRequest>
|
||||||
|
<mrw:Alto><%= mrw.defaultHeight %></mrw:Alto>
|
||||||
|
<mrw:Largo><%= mrw.defaultLength %></mrw:Largo>
|
||||||
|
<mrw:Ancho><%= mrw.defaultWidth %></mrw:Ancho>
|
||||||
|
<mrw:Peso><%= mrw.defaultWeight %></mrw:Peso>
|
||||||
|
</mrw:BultoRequest>
|
||||||
|
</mrw:Bultos>
|
||||||
</mrw:DatosServicio>
|
</mrw:DatosServicio>
|
||||||
</mrw:request>
|
</mrw:request>
|
||||||
</mrw:TransmEnvio>
|
</mrw:TransmEnvio>
|
||||||
|
|
|
@ -45,7 +45,7 @@ module.exports = Self => {
|
||||||
`SELECT
|
`SELECT
|
||||||
CASE co.code
|
CASE co.code
|
||||||
WHEN 'ES' THEN a.postalCode
|
WHEN 'ES' THEN a.postalCode
|
||||||
WHEN 'PT' THEN LEFT(a.postalCode, 4)
|
WHEN 'PT' THEN LEFT(a.postalCode, mc.portugalPostCodeTrim)
|
||||||
WHEN 'AD' THEN REPLACE(a.postalCode, 'AD', '00')
|
WHEN 'AD' THEN REPLACE(a.postalCode, 'AD', '00')
|
||||||
END postalCode,
|
END postalCode,
|
||||||
a.city,
|
a.city,
|
||||||
|
@ -56,9 +56,10 @@ module.exports = Self => {
|
||||||
c.phone,
|
c.phone,
|
||||||
DATE_FORMAT(t.shipped, '%d/%m/%Y') created,
|
DATE_FORMAT(t.shipped, '%d/%m/%Y') created,
|
||||||
t.shipped,
|
t.shipped,
|
||||||
e.id expeditionId,
|
CONCAT( e.ticketFk, LPAD(e.counter, mc.counterWidth, '0')) reference,
|
||||||
LPAD(IF(mw.params IS NULL, ms.serviceType, mw.serviceType), 4 ,'0') serviceType,
|
LPAD(IF(mw.params IS NULL, ms.serviceType, mw.serviceType), mc.serviceTypeWidth,'0') serviceType,
|
||||||
IF(mw.weekdays, 'S', 'N') weekDays
|
IF(mw.weekdays, 'S', 'N') weekDays,
|
||||||
|
oa.description deliveryObservation
|
||||||
FROM expedition e
|
FROM expedition e
|
||||||
JOIN ticket t ON e.ticketFk = t.id
|
JOIN ticket t ON e.ticketFk = t.id
|
||||||
JOIN agencyMode am ON am.id = t.agencyModeFk
|
JOIN agencyMode am ON am.id = t.agencyModeFk
|
||||||
|
@ -66,8 +67,12 @@ module.exports = Self => {
|
||||||
LEFT JOIN mrwServiceWeekday mw ON mw.weekdays = DATE_FORMAT(t.shipped, '%a')
|
LEFT JOIN mrwServiceWeekday mw ON mw.weekdays = DATE_FORMAT(t.shipped, '%a')
|
||||||
JOIN client c ON t.clientFk = c.id
|
JOIN client c ON t.clientFk = c.id
|
||||||
JOIN address a ON t.addressFk = a.id
|
JOIN address a ON t.addressFk = a.id
|
||||||
|
LEFT JOIN addressObservation oa ON oa.addressFk = a.id
|
||||||
|
LEFT JOIN observationType ot ON ot.id = oa.observationTypeFk
|
||||||
|
AND ot.code = 'delivery'
|
||||||
JOIN province p ON a.provinceFk = p.id
|
JOIN province p ON a.provinceFk = p.id
|
||||||
JOIN country co ON co.id = p.countryFk
|
JOIN country co ON co.id = p.countryFk
|
||||||
|
JOIN mrwConfig mc
|
||||||
WHERE e.id = ?
|
WHERE e.id = ?
|
||||||
LIMIT 1`;
|
LIMIT 1`;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,18 @@
|
||||||
},
|
},
|
||||||
"subscriberCode": {
|
"subscriberCode": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"defaultHeight": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"defaultLength": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"defaultWidth": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"defaultWeight": {
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ BEGIN
|
||||||
-- Marcamos para no repetir
|
-- Marcamos para no repetir
|
||||||
UPDATE vn.claimEnd ce
|
UPDATE vn.claimEnd ce
|
||||||
JOIN vn.claim c ON c.id = ce.claimFk
|
JOIN vn.claim c ON c.id = ce.claimFk
|
||||||
SET c.isChargedToMana = TRUE
|
SET ce.isGreuge = TRUE
|
||||||
WHERE ce.claimDestinationFk NOT IN (1,5)
|
WHERE ce.claimDestinationFk NOT IN (1,5)
|
||||||
AND NOT ce.isGreuge
|
AND NOT ce.isGreuge
|
||||||
AND c.claimStateFk = 3;
|
AND c.claimStateFk = 3;
|
||||||
|
|
|
@ -44,8 +44,8 @@ proc:BEGIN
|
||||||
addressFk
|
addressFk
|
||||||
)
|
)
|
||||||
SELECT CONCAT(i.name, ' by ',a.nickname),
|
SELECT CONCAT(i.name, ' by ',a.nickname),
|
||||||
i.minPrice + apc.deliveryCost,
|
r.price + apc.deliveryCost,
|
||||||
i.id,
|
r.itemFk,
|
||||||
vLanded,
|
vLanded,
|
||||||
vPostalCode,
|
vPostalCode,
|
||||||
it.name,
|
it.name,
|
||||||
|
@ -53,13 +53,15 @@ proc:BEGIN
|
||||||
i.description,
|
i.description,
|
||||||
apc.addressFk
|
apc.addressFk
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
|
JOIN (SELECT itemFk, SUM(quantity * cost) price
|
||||||
|
FROM recipe
|
||||||
|
GROUP BY itemFk) r ON r.itemFk = i.id
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
JOIN addressPostCode apc
|
JOIN addressPostCode apc
|
||||||
ON apc.dayOfWeek = dayOfWeek(vLanded)
|
ON apc.dayOfWeek = dayOfWeek(vLanded)
|
||||||
AND NOW() < vLanded - INTERVAL apc.hoursInAdvance HOUR
|
AND NOW() < vLanded - INTERVAL apc.hoursInAdvance HOUR
|
||||||
AND apc.postCode = vPostalCode
|
AND apc.postCode = vPostalCode
|
||||||
JOIN vn.address a ON a.id = apc.addressFk
|
JOIN vn.address a ON a.id = apc.addressFk;
|
||||||
WHERE it.code IN ('FNR','FNP');
|
|
||||||
|
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM catalogue
|
FROM catalogue
|
||||||
|
|
|
@ -18,10 +18,29 @@ proc:BEGIN
|
||||||
DECLARE vBodyEmail TEXT;
|
DECLARE vBodyEmail TEXT;
|
||||||
DECLARE vZoneFk INT;
|
DECLARE vZoneFk INT;
|
||||||
|
|
||||||
|
DECLARE exit handler FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
GET DIAGNOSTICS CONDITION 2 @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
|
||||||
|
|
||||||
|
SELECT CONCAT('ERROR ', IFNULL(@errno,0), ': ', ifnull(@text,'texto')) AS `SQLEXCEPTION`;
|
||||||
|
|
||||||
|
CALL vn.mail_insert(
|
||||||
|
'floranet@verdnatura.es,pako@verdnatura.es',
|
||||||
|
'noreply@verdnatura.es',
|
||||||
|
'Floranet.order_confirm failure',
|
||||||
|
CONCAT('CatalogueFk: ', vCatalogueFk, '\n','ERROR ', IFNULL(@errno, 0), ': ', ifnull(@text, 'texto'))
|
||||||
|
);
|
||||||
|
END;
|
||||||
|
|
||||||
IF (SELECT isPaid FROM `order` WHERE catalogueFk = vCatalogueFk) THEN
|
IF (SELECT isPaid FROM `order` WHERE catalogueFk = vCatalogueFk) THEN
|
||||||
CALL util.throw('Esta orden ya está confirmada');
|
SELECT CONCAT('CatalogueFk: ', vCatalogueFk, ' Esta orden ya está confirmada') AS `ERROR`;
|
||||||
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
UPDATE `order`
|
UPDATE `order`
|
||||||
SET isPaid = TRUE,
|
SET isPaid = TRUE,
|
||||||
payed = NOW()
|
payed = NOW()
|
||||||
|
@ -89,7 +108,24 @@ proc:BEGIN
|
||||||
ON apc.addressFk = c.addressFk
|
ON apc.addressFk = c.addressFk
|
||||||
AND apc.dayOfWeek = dayOfWeek(c.dated)
|
AND apc.dayOfWeek = dayOfWeek(c.dated)
|
||||||
WHERE c.id = vCatalogueFk;
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
INSERT INTO vn.sale(
|
||||||
|
ticketFk,
|
||||||
|
itemFk,
|
||||||
|
concept,
|
||||||
|
price,
|
||||||
|
quantity)
|
||||||
|
SELECT
|
||||||
|
vNewTicketFk,
|
||||||
|
r.elementFk,
|
||||||
|
i.longName,
|
||||||
|
r.cost,
|
||||||
|
r.quantity
|
||||||
|
FROM catalogue c
|
||||||
|
JOIN recipe r ON r.itemFk = c.itemFk
|
||||||
|
JOIN vn.item i ON i.id = r.elementFk
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
SELECT cl.email,
|
SELECT cl.email,
|
||||||
cf.email,
|
cf.email,
|
||||||
CONCAT('Nuevo pedido FLORANET para entrega el ',c.dated),
|
CONCAT('Nuevo pedido FLORANET para entrega el ',c.dated),
|
||||||
|
@ -114,7 +150,7 @@ proc:BEGIN
|
||||||
JOIN `order` o ON o.catalogueFk = c.id
|
JOIN `order` o ON o.catalogueFk = c.id
|
||||||
JOIN config cf
|
JOIN config cf
|
||||||
WHERE c.id = vCatalogueFk;
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
CALL vn.mail_insert(
|
CALL vn.mail_insert(
|
||||||
vCustomerEmail,
|
vCustomerEmail,
|
||||||
vFloranetEmail,
|
vFloranetEmail,
|
||||||
|
@ -124,5 +160,8 @@ proc:BEGIN
|
||||||
SELECT isPaid, vNewTicketFk
|
SELECT isPaid, vNewTicketFk
|
||||||
FROM `order`
|
FROM `order`
|
||||||
WHERE catalogueFk = vCatalogueFk;
|
WHERE catalogueFk = vCatalogueFk;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -11,10 +11,7 @@ BEGIN
|
||||||
*/
|
*/
|
||||||
DECLARE vClient INT DEFAULT NULL;
|
DECLARE vClient INT DEFAULT NULL;
|
||||||
|
|
||||||
-- SET vPhone = vPhone COLLATE 'utf8_unicode_ci';
|
CREATE OR REPLACE TEMPORARY TABLE tClient
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tClient;
|
|
||||||
CREATE TEMPORARY TABLE tClient
|
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT id clientFk
|
SELECT id clientFk
|
||||||
FROM `client`
|
FROM `client`
|
||||||
|
@ -27,13 +24,14 @@ BEGIN
|
||||||
OR mobile = vPhone
|
OR mobile = vPhone
|
||||||
UNION
|
UNION
|
||||||
SELECT clientFk
|
SELECT clientFk
|
||||||
FROM vn.clientContact
|
FROM clientContact
|
||||||
WHERE phone = vPhone;
|
WHERE phone = vPhone;
|
||||||
|
|
||||||
SELECT t.clientFk INTO vClient
|
SELECT t.clientFk INTO vClient
|
||||||
FROM tClient t
|
FROM tClient t
|
||||||
JOIN `client` c ON c.id = t.clientFk
|
JOIN `client` c ON c.id = t.clientFk
|
||||||
WHERE c.isActive
|
WHERE c.isActive
|
||||||
|
AND c.salesPersonFk
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tClient;
|
DROP TEMPORARY TABLE tClient;
|
||||||
|
|
|
@ -13,28 +13,12 @@ BEGIN
|
||||||
* @param vCollectionFk Id de colección
|
* @param vCollectionFk Id de colección
|
||||||
*/
|
*/
|
||||||
DECLARE vHasTooMuchCollections BOOL;
|
DECLARE vHasTooMuchCollections BOOL;
|
||||||
DECLARE vItemPackingTypeFk VARCHAR(1);
|
|
||||||
DECLARE vWarehouseFk INT;
|
|
||||||
DECLARE vLockName VARCHAR(215);
|
|
||||||
DECLARE vLockTime INT DEFAULT 30;
|
|
||||||
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
||||||
BEGIN
|
|
||||||
IF vLockName IS NOT NULL THEN
|
|
||||||
DO RELEASE_LOCK(vLockName);
|
|
||||||
CALL util.debugAdd('releaseLock', vLockName); -- Tmp
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RESIGNAL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
-- Si hay colecciones sin terminar, sale del proceso
|
-- Si hay colecciones sin terminar, sale del proceso
|
||||||
CALL collection_get(vUserFk);
|
CALL collection_get(vUserFk);
|
||||||
|
|
||||||
SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0,
|
SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0
|
||||||
collection_assign_lockname
|
INTO vHasTooMuchCollections
|
||||||
INTO vHasTooMuchCollections,
|
|
||||||
vLockName
|
|
||||||
FROM productionConfig pc
|
FROM productionConfig pc
|
||||||
LEFT JOIN tCollection ON TRUE;
|
LEFT JOIN tCollection ON TRUE;
|
||||||
|
|
||||||
|
@ -44,21 +28,6 @@ BEGIN
|
||||||
CALL util.throw('Hay colecciones pendientes');
|
CALL util.throw('Hay colecciones pendientes');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT warehouseFk, itemPackingTypeFk
|
|
||||||
INTO vWarehouseFk, vItemPackingTypeFk
|
|
||||||
FROM operator
|
|
||||||
WHERE workerFk = 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 eliminan las colecciones sin asignar que estan obsoletas
|
-- Se eliminan las colecciones sin asignar que estan obsoletas
|
||||||
INSERT INTO ticketTracking(stateFk, ticketFk)
|
INSERT INTO ticketTracking(stateFk, ticketFk)
|
||||||
SELECT s.id, tc.ticketFk
|
SELECT s.id, tc.ticketFk
|
||||||
|
@ -66,7 +35,7 @@ BEGIN
|
||||||
JOIN ticketCollection tc ON tc.collectionFk = c.id
|
JOIN ticketCollection tc ON tc.collectionFk = c.id
|
||||||
JOIN `state` s ON s.code = 'PRINTED_AUTO'
|
JOIN `state` s ON s.code = 'PRINTED_AUTO'
|
||||||
JOIN productionConfig pc
|
JOIN productionConfig pc
|
||||||
WHERE c.workerFk IS NULL
|
WHERE c.workerFk IS NULL
|
||||||
AND TIMEDIFF(util.VN_NOW(), c.created) > pc.maxNotAssignedCollectionLifeTime;
|
AND TIMEDIFF(util.VN_NOW(), c.created) > pc.maxNotAssignedCollectionLifeTime;
|
||||||
|
|
||||||
DELETE c.*
|
DELETE c.*
|
||||||
|
@ -80,8 +49,7 @@ BEGIN
|
||||||
VALUES(vUserFk);
|
VALUES(vUserFk);
|
||||||
|
|
||||||
-- Comprueba si hay colecciones disponibles que se ajustan a su configuracion
|
-- Comprueba si hay colecciones disponibles que se ajustan a su configuracion
|
||||||
SELECT MIN(c.id)
|
SELECT MIN(c.id) INTO vCollectionFk
|
||||||
INTO vCollectionFk
|
|
||||||
FROM `collection` c
|
FROM `collection` c
|
||||||
JOIN operator o
|
JOIN operator o
|
||||||
ON (o.itemPackingTypeFk = c.itemPackingTypeFk OR c.itemPackingTypeFk IS NULL)
|
ON (o.itemPackingTypeFk = c.itemPackingTypeFk OR c.itemPackingTypeFk IS NULL)
|
||||||
|
@ -107,7 +75,5 @@ BEGIN
|
||||||
UPDATE `collection`
|
UPDATE `collection`
|
||||||
SET workerFk = vUserFk
|
SET workerFk = vUserFk
|
||||||
WHERE id = vCollectionFk;
|
WHERE id = vCollectionFk;
|
||||||
|
|
||||||
DO RELEASE_LOCK(vLockName);
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -6,12 +6,12 @@ BEGIN
|
||||||
*
|
*
|
||||||
* @param vDuaFk Id del dua a recalcular
|
* @param vDuaFk Id del dua a recalcular
|
||||||
*/
|
*/
|
||||||
DECLARE done BOOL DEFAULT FALSE;
|
DECLARE vDone BOOL DEFAULT FALSE;
|
||||||
DECLARE vInvoiceFk INT;
|
DECLARE vInvoiceFk INT;
|
||||||
DECLARE vASIEN BIGINT DEFAULT 0;
|
DECLARE vBookEntry INT;
|
||||||
DECLARE vCounter INT DEFAULT 0;
|
DECLARE vFiscalYear INT;
|
||||||
|
|
||||||
DECLARE rs CURSOR FOR
|
DECLARE vInvoicesIn CURSOR FOR
|
||||||
SELECT DISTINCT e.invoiceInFk
|
SELECT DISTINCT e.invoiceInFk
|
||||||
FROM entry e
|
FROM entry e
|
||||||
JOIN duaEntry de ON de.entryFk = e.id
|
JOIN duaEntry de ON de.entryFk = e.id
|
||||||
|
@ -20,9 +20,7 @@ BEGIN
|
||||||
AND de.customsValue
|
AND de.customsValue
|
||||||
AND ii.isBooked = FALSE;
|
AND ii.isBooked = FALSE;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
OPEN rs;
|
|
||||||
|
|
||||||
UPDATE invoiceIn ii
|
UPDATE invoiceIn ii
|
||||||
JOIN entry e ON e.invoiceInFk = ii.id
|
JOIN entry e ON e.invoiceInFk = ii.id
|
||||||
|
@ -36,38 +34,36 @@ BEGIN
|
||||||
e.isConfirmed = TRUE
|
e.isConfirmed = TRUE
|
||||||
WHERE d.id = vDuaFk;
|
WHERE d.id = vDuaFk;
|
||||||
|
|
||||||
SELECT IFNULL(ASIEN,0) INTO vASIEN
|
SELECT ASIEN INTO vBookEntry FROM dua WHERE id = vDuaFk;
|
||||||
FROM dua
|
|
||||||
WHERE id = vDuaFk;
|
|
||||||
|
|
||||||
FETCH rs INTO vInvoiceFk;
|
IF vBookEntry IS NULL THEN
|
||||||
|
SELECT YEAR(IFNULL(ii.bookEntried, d.bookEntried)) INTO vFiscalYear
|
||||||
|
FROM invoiceIn ii
|
||||||
|
JOIN entry e ON e.invoiceInFk = ii.id
|
||||||
|
JOIN duaEntry de ON de.entryFk = e.id
|
||||||
|
JOIN dua d ON d.id = de.duaFk
|
||||||
|
WHERE d.id = vDuaFk
|
||||||
|
LIMIT 1;
|
||||||
|
CALL ledger_next(vFiscalYear, FALSE, vBookEntry);
|
||||||
|
END IF;
|
||||||
|
|
||||||
WHILE NOT done DO
|
OPEN vInvoicesIn;
|
||||||
|
|
||||||
CALL invoiceIn_booking(vInvoiceFk);
|
l: LOOP
|
||||||
|
SET vDone = FALSE;
|
||||||
IF vCounter > 0 OR vASIEN > 0 THEN
|
FETCH vInvoicesIn INTO vInvoiceFk;
|
||||||
|
|
||||||
UPDATE XDiario x
|
|
||||||
JOIN ledgerConfig lc ON lc.lastBookEntry = x.ASIEN
|
|
||||||
SET x.ASIEN = vASIEN;
|
|
||||||
|
|
||||||
ELSE
|
|
||||||
|
|
||||||
SELECT lastBookEntry INTO vASIEN FROM ledgerConfig;
|
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE l;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SET vCounter = vCounter + 1;
|
CALL invoiceIn_booking(vInvoiceFk, vBookEntry);
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
FETCH rs INTO vInvoiceFk;
|
CLOSE vInvoicesIn;
|
||||||
|
|
||||||
END WHILE;
|
|
||||||
|
|
||||||
CLOSE rs;
|
|
||||||
|
|
||||||
UPDATE dua
|
UPDATE dua
|
||||||
SET ASIEN = vASIEN
|
SET ASIEN = vBookEntry
|
||||||
WHERE id = vDuaFk;
|
WHERE id = vDuaFk;
|
||||||
|
|
||||||
UPDATE invoiceIn ii
|
UPDATE invoiceIn ii
|
||||||
|
|
|
@ -12,7 +12,7 @@ BEGIN
|
||||||
WHERE id = vDuaFk;
|
WHERE id = vDuaFk;
|
||||||
|
|
||||||
IF vBookNumber IS NULL OR NOT vBookNumber THEN
|
IF vBookNumber IS NULL OR NOT vBookNumber THEN
|
||||||
CALL ledger_next(YEAR(vBookDated), vBookNumber);
|
CALL ledger_next(YEAR(vBookDated), FALSE, vBookNumber);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Apunte de la aduana
|
-- Apunte de la aduana
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceIn_booking`(vSelf INT)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceIn_booking`(
|
||||||
|
vSelf INT,
|
||||||
|
vBookNumber INT
|
||||||
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vBookNumber INT;
|
/**
|
||||||
|
* Genera la contabilidad para una factura y la marca como contabilizada
|
||||||
|
* Cuadra el asiento generado en si encuentra problemas derivados
|
||||||
|
* de los calculos con decimales
|
||||||
|
*
|
||||||
|
* @param vSelf Id invoiceIn
|
||||||
|
* @param vBookEntry Id de asiento, si es NULL se genera uno nuevo
|
||||||
|
*/
|
||||||
DECLARE vFiscalYear INT;
|
DECLARE vFiscalYear INT;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
|
CREATE OR REPLACE TEMPORARY TABLE tInvoiceIn
|
||||||
|
@ -58,7 +68,10 @@ BEGIN
|
||||||
WHERE ii.id = vSelf;
|
WHERE ii.id = vSelf;
|
||||||
|
|
||||||
SELECT YEAR(bookEntried) INTO vFiscalYear FROM tInvoiceIn LIMIT 1;
|
SELECT YEAR(bookEntried) INTO vFiscalYear FROM tInvoiceIn LIMIT 1;
|
||||||
CALL ledger_next(vFiscalYear, vBookNumber);
|
|
||||||
|
IF vBookNumber IS NULL THEN
|
||||||
|
CALL ledger_next(vFiscalYear, FALSE, vBookNumber);
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- Apunte del proveedor
|
-- Apunte del proveedor
|
||||||
INSERT INTO XDiario(
|
INSERT INTO XDiario(
|
||||||
|
@ -187,7 +200,7 @@ BEGIN
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT e.id
|
SELECT e.id
|
||||||
FROM tInvoiceIn tii
|
FROM tInvoiceIn tii
|
||||||
JOIN expense e ON e.id = tii.expenseFk
|
JOIN expense e ON e.id = tii.expenseFk
|
||||||
WHERE e.isWithheld
|
WHERE e.isWithheld
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) eWithheld ON TRUE
|
) eWithheld ON TRUE
|
||||||
|
|
|
@ -61,7 +61,7 @@ BEGIN
|
||||||
WHERE io.id = vInvoice;
|
WHERE io.id = vInvoice;
|
||||||
|
|
||||||
SELECT YEAR(FECHA) INTO vFiscalYear FROM rs LIMIT 1;
|
SELECT YEAR(FECHA) INTO vFiscalYear FROM rs LIMIT 1;
|
||||||
CALL ledger_next(vFiscalYear, vBookNumber);
|
CALL ledger_next(vFiscalYear, FALSE, vBookNumber);
|
||||||
-- Linea del cliente
|
-- Linea del cliente
|
||||||
INSERT INTO XDiario(
|
INSERT INTO XDiario(
|
||||||
ASIEN,
|
ASIEN,
|
||||||
|
|
|
@ -28,7 +28,7 @@ BEGIN
|
||||||
DECLARE vIsOriginalAClient BOOL;
|
DECLARE vIsOriginalAClient BOOL;
|
||||||
DECLARE vPayMethodCompensation INT;
|
DECLARE vPayMethodCompensation INT;
|
||||||
|
|
||||||
CALL ledger_next(YEAR(vDated), vNewBookEntry);
|
CALL ledger_next(YEAR(vDated), FALSE, vNewBookEntry);
|
||||||
|
|
||||||
SELECT COUNT(id) INTO vIsOriginalAClient
|
SELECT COUNT(id) INTO vIsOriginalAClient
|
||||||
FROM client
|
FROM client
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ledger_next`(
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ledger_next`(
|
||||||
IN vFiscalYear INT,
|
IN vFiscalYear INT,
|
||||||
|
IN vIsManageTransaction BOOLEAN,
|
||||||
OUT vLastBookEntry INT
|
OUT vLastBookEntry INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -22,13 +23,15 @@ BEGIN
|
||||||
CALL util.throw('Fiscal year is required');
|
CALL util.throw('Fiscal year is required');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT @@in_transaction INTO vHasStartTransaction;
|
IF NOT vIsManageTransaction THEN
|
||||||
|
SELECT @@in_transaction INTO vHasStartTransaction;
|
||||||
|
|
||||||
IF NOT vHasStartTransaction THEN
|
IF NOT vHasStartTransaction THEN
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
ELSE
|
ELSE
|
||||||
SAVEPOINT sp;
|
SAVEPOINT sp;
|
||||||
END IF;
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
SELECT bookEntry + 1 INTO vLastBookEntry
|
SELECT bookEntry + 1 INTO vLastBookEntry
|
||||||
FROM ledgerCompany
|
FROM ledgerCompany
|
||||||
|
@ -46,10 +49,12 @@ BEGIN
|
||||||
SET bookEntry = vLastBookEntry
|
SET bookEntry = vLastBookEntry
|
||||||
WHERE fiscalYear = vFiscalYear;
|
WHERE fiscalYear = vFiscalYear;
|
||||||
|
|
||||||
IF vHasStartTransaction THEN
|
IF NOT vIsManageTransaction THEN
|
||||||
RELEASE SAVEPOINT sp;
|
IF vHasStartTransaction THEN
|
||||||
ELSE
|
RELEASE SAVEPOINT sp;
|
||||||
COMMIT;
|
ELSE
|
||||||
END IF;
|
COMMIT;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -39,7 +39,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`xdiario_new`(
|
||||||
*/
|
*/
|
||||||
BEGIN
|
BEGIN
|
||||||
IF vBookNumber IS NULL THEN
|
IF vBookNumber IS NULL THEN
|
||||||
CALL ledger_next(YEAR(vDated), vBookNumber);
|
CALL ledger_next(YEAR(vDated), FALSE, vBookNumber);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
INSERT INTO XDiario
|
INSERT INTO XDiario
|
||||||
|
|
|
@ -9,13 +9,12 @@ BEGIN
|
||||||
DECLARE vIsCash BOOLEAN;
|
DECLARE vIsCash BOOLEAN;
|
||||||
DECLARE vIsSupplierActive BOOLEAN;
|
DECLARE vIsSupplierActive BOOLEAN;
|
||||||
|
|
||||||
-- PAK 10/02/15 No se asientan los pagos directamente, salvo en el caso de las cajas de CASH
|
|
||||||
SELECT (at2.code = 'cash') INTO vIsCash
|
SELECT (at2.code = 'cash') INTO vIsCash
|
||||||
FROM accounting a
|
FROM accounting a
|
||||||
JOIN accountingType at2 ON at2.id = a.accountingTypeFk
|
JOIN accountingType at2 ON at2.id = a.accountingTypeFk
|
||||||
WHERE a.id = NEW.bankFk;
|
WHERE a.id = NEW.bankFk;
|
||||||
|
|
||||||
IF vIsCash THEN
|
IF vIsCash THEN
|
||||||
SELECT account INTO vBankAccount
|
SELECT account INTO vBankAccount
|
||||||
FROM accounting
|
FROM accounting
|
||||||
WHERE id = NEW.bankFk;
|
WHERE id = NEW.bankFk;
|
||||||
|
@ -24,7 +23,7 @@ BEGIN
|
||||||
FROM supplier
|
FROM supplier
|
||||||
WHERE id = NEW.supplierFk;
|
WHERE id = NEW.supplierFk;
|
||||||
|
|
||||||
CALL ledger_next(YEAR(NEW.received), NEW.companyFk, vNewBookEntry);
|
CALL ledger_next(YEAR(NEW.received), TRUE, vNewBookEntry);
|
||||||
|
|
||||||
INSERT INTO XDiario (
|
INSERT INTO XDiario (
|
||||||
ASIEN,
|
ASIEN,
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
REVOKE UPDATE ON vn. invoiceIn FROM administrative, hrBoss, buyer, logistic;
|
||||||
|
GRANT UPDATE (id,
|
||||||
|
serialNumber,
|
||||||
|
serial,
|
||||||
|
supplierFk,
|
||||||
|
issued,
|
||||||
|
supplierRef,
|
||||||
|
currencyFk,
|
||||||
|
created,
|
||||||
|
companyFk,
|
||||||
|
docFk,
|
||||||
|
booked,
|
||||||
|
operated,
|
||||||
|
siiTypeInvoiceInFk,
|
||||||
|
cplusRectificationTypeFk,
|
||||||
|
cplusSubjectOpFk,
|
||||||
|
cplusTaxBreakFk,
|
||||||
|
siiTrascendencyInvoiceInFk,
|
||||||
|
bookEntried,
|
||||||
|
isVatDeductible,
|
||||||
|
withholdingSageFk,
|
||||||
|
expenseFkDeductible,
|
||||||
|
editorFk
|
||||||
|
) ON vn.invoiceIn TO administrative, hrBoss, buyer, logistic;
|
|
@ -0,0 +1,23 @@
|
||||||
|
UPDATE salix.ACL
|
||||||
|
SET accessType = 'READ'
|
||||||
|
WHERE principalId IN ('administrative','buyer')
|
||||||
|
AND model = 'invoiceIn'
|
||||||
|
AND property = '*';
|
||||||
|
|
||||||
|
INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
|
||||||
|
VALUES
|
||||||
|
('InvoiceIn', 'updateInvoiceIn', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'clone', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'corrective', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'exchangeRateUpdate', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'invoiceInEmail', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'toBook', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'toUnbook', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'deleteById', 'WRITE', 'ALLOW', 'ROLE', 'administrative'),
|
||||||
|
('InvoiceIn', 'updateInvoiceIn', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'clone', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'corrective', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'exchangeRateUpdate', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'invoiceInEmail', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'toBook', 'WRITE', 'ALLOW', 'ROLE', 'buyer'),
|
||||||
|
('InvoiceIn', 'deleteById', 'WRITE', 'ALLOW', 'ROLE', 'buyer');
|
|
@ -0,0 +1,20 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
|
||||||
|
-- floranet.recipe definition
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE floranet.`recipe`
|
||||||
|
(
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`itemFk` int(11) NOT NULL COMMENT 'Bouquet or plant name',
|
||||||
|
`elementFk` int(11) NOT NULL COMMENT 'Item detail for bouquet''s composition',
|
||||||
|
`quantity` int(10) unsigned NOT NULL DEFAULT 1,
|
||||||
|
`cost` decimal(10,2) NOT NULL DEFAULT 1.00,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `recipe_FK` (`itemFk`),
|
||||||
|
KEY `recipe_FK_1` (`elementFk`),
|
||||||
|
CONSTRAINT `recipe_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `recipe_item_FK` FOREIGN KEY (`elementFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Links handmade products with their elements';
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS floranet.`element`;
|
|
@ -0,0 +1,5 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS defaultHeight INT UNSIGNED NULL COMMENT 'default height in centimeters';
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS defaultLength INT UNSIGNED NULL COMMENT 'default length in centimeters';
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS defaultWidth INT UNSIGNED NULL COMMENT 'default width in centimeters';
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS defaultWeight INT UNSIGNED NULL COMMENT 'default weight in centimeters';
|
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE vn.productionConfig ADD scannablePreviusCodeType enum('qr','barcode')
|
||||||
|
CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT 'barcode' NOT NULL;
|
|
@ -0,0 +1,3 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS expeditionDeadLine TIME NULL
|
||||||
|
COMMENT 'This field stores the latest time by which expeditions can be generated to be sent today';
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS counterWidth INT UNSIGNED NULL
|
||||||
|
COMMENT 'If it does not reach the required value, it will be padded with zeros on the left to meet the specified length.';
|
||||||
|
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS serviceTypeWidth INT UNSIGNED NULL
|
||||||
|
COMMENT 'If it does not reach the required value, it will be padded with zeros on the left to meet the specified length.';
|
||||||
|
|
||||||
|
ALTER TABLE vn.mrwConfig ADD IF NOT EXISTS portugalPostCodeTrim INT UNSIGNED NULL
|
||||||
|
COMMENT 'It will trim the last characters of the postal code';
|
|
@ -164,6 +164,7 @@ export default class UploadPhoto extends Component {
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
type: 'blob',
|
type: 'blob',
|
||||||
|
size: 'original'
|
||||||
};
|
};
|
||||||
return this.editor.result(options)
|
return this.editor.result(options)
|
||||||
.then(blob => this.newPhoto.blob = blob)
|
.then(blob => this.newPhoto.blob = blob)
|
||||||
|
|
|
@ -85,8 +85,12 @@ exports.translateValues = async(instance, changes, options = {}) => {
|
||||||
exports.getChanges = (original, changes) => {
|
exports.getChanges = (original, changes) => {
|
||||||
const oldChanges = {};
|
const oldChanges = {};
|
||||||
const newChanges = {};
|
const newChanges = {};
|
||||||
|
const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
||||||
|
|
||||||
for (let property in changes) {
|
for (let property in changes) {
|
||||||
|
if (dateRegex.test(original[property]))
|
||||||
|
original[property] = new Date(Date.parse(original[property]));
|
||||||
|
|
||||||
const firstChar = property.substring(0, 1);
|
const firstChar = property.substring(0, 1);
|
||||||
const isPrivate = firstChar == '$';
|
const isPrivate = firstChar == '$';
|
||||||
if (isPrivate) return;
|
if (isPrivate) return;
|
||||||
|
|
|
@ -88,15 +88,17 @@ module.exports = Self => {
|
||||||
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
||||||
|
|
||||||
// When pickup has been changed
|
// When pickup has been changed
|
||||||
if (salesPerson && changedPickup && updatedClaim.pickup)
|
if (salesPerson) {
|
||||||
await notifyPickUp(ctx, salesPerson.id, claim);
|
if (changedPickup && updatedClaim.pickup)
|
||||||
|
await notifyPickUp(ctx, salesPerson.id, claim);
|
||||||
|
|
||||||
// When claimState has been changed
|
// When claimState has been changed
|
||||||
if (args.claimStateFk) {
|
if (args.claimStateFk) {
|
||||||
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
||||||
await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
|
await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
|
||||||
if (newState.code == 'canceled')
|
if (newState.code == 'canceled')
|
||||||
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
|
|
|
@ -76,7 +76,16 @@
|
||||||
},
|
},
|
||||||
"enlazadoSage": {
|
"enlazadoSage": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
}
|
},
|
||||||
|
"enlazado": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"type": "number",
|
||||||
|
"mysql": {
|
||||||
|
"columnName": "CLAVE"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
"company": {
|
"company": {
|
||||||
|
|
|
@ -22,5 +22,8 @@
|
||||||
},
|
},
|
||||||
"EntryObservation": {
|
"EntryObservation": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
|
},
|
||||||
|
"EntryType": {
|
||||||
|
"dataSource": "vn"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "EntryType",
|
||||||
|
"base": "VnModel",
|
||||||
|
"mixins": {
|
||||||
|
"Loggable": true
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"mysql": {
|
||||||
|
"table": "entryType"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "string",
|
||||||
|
"id": true,
|
||||||
|
"description": "Identifier"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"isInformal": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,9 +35,9 @@
|
||||||
},
|
},
|
||||||
"isVirtual": {
|
"isVirtual": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"columnName": "isRaid"
|
"columnName": "isRaid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"isRaid": {
|
"isRaid": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
|
@ -53,9 +53,9 @@
|
||||||
},
|
},
|
||||||
"observation": {
|
"observation": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"columnName": "evaNotes"
|
"columnName": "evaNotes"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"loadPriority": {
|
"loadPriority": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
|
@ -101,6 +101,11 @@
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "Account",
|
"model": "Account",
|
||||||
"foreignKey": "observationEditorFk"
|
"foreignKey": "observationEditorFk"
|
||||||
|
},
|
||||||
|
"entryType": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "EntryType",
|
||||||
|
"foreignKey": "typeFk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -54,6 +54,20 @@ module.exports = Self => {
|
||||||
value: rate
|
value: rate
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
const monday = 1;
|
||||||
|
if (xmlDateWithoutTime.getDay() === monday) {
|
||||||
|
const saturday = new Date(xmlDateWithoutTime);
|
||||||
|
saturday.setDate(xmlDateWithoutTime.getDate() - 2);
|
||||||
|
const sunday = new Date(xmlDateWithoutTime);
|
||||||
|
sunday.setDate(xmlDateWithoutTime.getDate() - 1);
|
||||||
|
|
||||||
|
for (const date of [saturday, sunday]) {
|
||||||
|
await models.ReferenceRate.upsertWithWhere(
|
||||||
|
{currencyFk: currency.id, dated: date},
|
||||||
|
{currencyFk: currency.id, dated: date, value: rate}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
|
describe('invoiceIn toUnbook()', () => {
|
||||||
|
it('should check that invoiceIn is unbooked', async() => {
|
||||||
|
const userId = 1;
|
||||||
|
const ctx = {
|
||||||
|
req: {
|
||||||
|
|
||||||
|
accessToken: {userId: userId},
|
||||||
|
headers: {origin: 'http://localhost:5000'},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const invoiceInId = 1;
|
||||||
|
const tx = await models.InvoiceIn.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await models.InvoiceIn.toBook(ctx, invoiceInId, options);
|
||||||
|
const bookEntry = await models.InvoiceIn.toUnbook(ctx, invoiceInId, options);
|
||||||
|
const invoiceIn = await models.InvoiceIn.findById(invoiceInId, null, options);
|
||||||
|
|
||||||
|
expect(bookEntry.accountingEntries).toEqual(4);
|
||||||
|
expect(bookEntry.isLinked).toBeFalsy();
|
||||||
|
expect(invoiceIn.isBooked).toEqual(false);
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
|
@ -32,7 +32,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await Self.rawSql(`CALL vn.invoiceIn_booking(?)`, [id], myOptions);
|
await Self.rawSql(`CALL vn.invoiceIn_booking(?, NULL)`, [id], myOptions);
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (tx) await tx.rollback();
|
if (tx) await tx.rollback();
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('toUnbook', {
|
||||||
|
description: 'To unbook the invoiceIn',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: {
|
||||||
|
arg: 'id',
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
description: 'The invoiceIn id',
|
||||||
|
http: {source: 'path'}
|
||||||
|
},
|
||||||
|
returns: {
|
||||||
|
type: 'object',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: '/:id/toUnbook',
|
||||||
|
verb: 'POST'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.toUnbook = async(ctx, invoiceInId, options) => {
|
||||||
|
let tx;
|
||||||
|
const models = Self.app.models;
|
||||||
|
const myOptions = {userId: ctx.req.accessToken.userId};
|
||||||
|
|
||||||
|
if (typeof options == 'object')
|
||||||
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
|
if (!myOptions.transaction) {
|
||||||
|
tx = await Self.beginTransaction({});
|
||||||
|
myOptions.transaction = tx;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let isLinked;
|
||||||
|
let accountingEntries;
|
||||||
|
|
||||||
|
let bookEntry = await models.Xdiario.findOne({
|
||||||
|
fields: ['ASIEN'],
|
||||||
|
where: {
|
||||||
|
and: [
|
||||||
|
{key: invoiceInId},
|
||||||
|
{enlazado: false},
|
||||||
|
{enlazadoSage: false}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, myOptions);
|
||||||
|
|
||||||
|
let asien = bookEntry?.ASIEN;
|
||||||
|
if (asien) {
|
||||||
|
accountingEntries = await models.Xdiario.count({ASIEN: asien}, myOptions);
|
||||||
|
|
||||||
|
await models.Xdiario.destroyAll({ASIEN: asien}, myOptions);
|
||||||
|
await Self.updateAll({id: invoiceInId}, {isBooked: false}, myOptions);
|
||||||
|
} else {
|
||||||
|
const linkedBookEntry = await models.Xdiario.findOne({
|
||||||
|
fields: ['ASIEN'],
|
||||||
|
where: {
|
||||||
|
key: invoiceInId,
|
||||||
|
and: [{or: [{enlazado: true, enlazadoSage: true}]}]
|
||||||
|
}
|
||||||
|
}, myOptions);
|
||||||
|
|
||||||
|
asien = linkedBookEntry?.ASIEN;
|
||||||
|
isLinked = true;
|
||||||
|
}
|
||||||
|
if (tx) await tx.commit();
|
||||||
|
|
||||||
|
return {
|
||||||
|
isLinked,
|
||||||
|
bookEntry: asien,
|
||||||
|
accountingEntries
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
if (tx) await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,104 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('updateInvoiceIn', {
|
||||||
|
description: 'To update the invoiceIn attributes',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'id',
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
description: 'The invoiceIn id',
|
||||||
|
http: {source: 'path'}
|
||||||
|
}, {
|
||||||
|
arg: 'supplierFk',
|
||||||
|
type: 'number',
|
||||||
|
required: true
|
||||||
|
}, {
|
||||||
|
arg: 'supplierRef',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'issued',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'operated',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'deductibleExpenseFk',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'dmsFk',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'bookEntried',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'booked',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'currencyFk',
|
||||||
|
type: 'number',
|
||||||
|
required: true
|
||||||
|
}, {
|
||||||
|
arg: 'companyFk',
|
||||||
|
type: 'any',
|
||||||
|
}, {
|
||||||
|
arg: 'withholdingSageFk',
|
||||||
|
type: 'any',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
returns: {
|
||||||
|
type: 'object',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: '/:id/updateInvoiceIn',
|
||||||
|
verb: 'PATCH'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.updateInvoiceIn = async(ctx,
|
||||||
|
id,
|
||||||
|
supplierFk,
|
||||||
|
supplierRef,
|
||||||
|
issued,
|
||||||
|
operated,
|
||||||
|
deductibleExpenseFk,
|
||||||
|
dmsFk,
|
||||||
|
bookEntried,
|
||||||
|
booked,
|
||||||
|
currencyFk,
|
||||||
|
companyFk,
|
||||||
|
withholdingSageFk,
|
||||||
|
options
|
||||||
|
) => {
|
||||||
|
let tx;
|
||||||
|
const myOptions = {userId: ctx.req.accessToken.userId};
|
||||||
|
|
||||||
|
if (typeof options == 'object') Object.assign(myOptions, options);
|
||||||
|
|
||||||
|
if (!myOptions.transaction) {
|
||||||
|
tx = await Self.beginTransaction({});
|
||||||
|
myOptions.transaction = tx;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const invoiceIn = await Self.findById(id, null, myOptions);
|
||||||
|
invoiceIn.updateAttributes({supplierFk,
|
||||||
|
supplierRef,
|
||||||
|
issued,
|
||||||
|
operated,
|
||||||
|
deductibleExpenseFk,
|
||||||
|
dmsFk,
|
||||||
|
bookEntried,
|
||||||
|
booked,
|
||||||
|
currencyFk,
|
||||||
|
companyFk,
|
||||||
|
withholdingSageFk
|
||||||
|
}, myOptions);
|
||||||
|
if (tx) await tx.commit();
|
||||||
|
return invoiceIn;
|
||||||
|
} catch (e) {
|
||||||
|
if (tx) await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
|
@ -11,6 +11,8 @@ module.exports = Self => {
|
||||||
require('../methods/invoice-in/getSerial')(Self);
|
require('../methods/invoice-in/getSerial')(Self);
|
||||||
require('../methods/invoice-in/corrective')(Self);
|
require('../methods/invoice-in/corrective')(Self);
|
||||||
require('../methods/invoice-in/exchangeRateUpdate')(Self);
|
require('../methods/invoice-in/exchangeRateUpdate')(Self);
|
||||||
|
require('../methods/invoice-in/toUnbook')(Self);
|
||||||
|
require('../methods/invoice-in/updateInvoiceIn')(Self);
|
||||||
|
|
||||||
Self.rewriteDbError(function(err) {
|
Self.rewriteDbError(function(err) {
|
||||||
if (err.code === 'ER_ROW_IS_REFERENCED_2' && err.sqlMessage.includes('vehicleInvoiceIn'))
|
if (err.code === 'ER_ROW_IS_REFERENCED_2' && err.sqlMessage.includes('vehicleInvoiceIn'))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<mg-ajax path="InvoiceIns/{{patch.params.id}}" options="vnPatch"></mg-ajax>
|
<mg-ajax path="InvoiceIns/{{patch.params.id}}/updateInvoiceIn" options="vnPatch"></mg-ajax>
|
||||||
<vn-watcher
|
<vn-watcher
|
||||||
vn-id="watcher"
|
vn-id="watcher"
|
||||||
data="$ctrl.invoiceIn"
|
data="$ctrl.invoiceIn"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
"id": true,
|
"id": true,
|
||||||
"type": "number",
|
"type": "string",
|
||||||
"description": "Identifier"
|
"description": "Identifier"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
|
|
|
@ -33,7 +33,7 @@ module.exports = Self => {
|
||||||
JOIN vn.item i ON i.id = b.itemFk
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
WHERE e.id = ? AND e.supplierFk = ?
|
WHERE e.id = ? AND e.supplierFk = ?
|
||||||
GROUP BY i.id
|
GROUP BY i.id
|
||||||
) SELECT i.id, i.name, et.quantity, SUM(b.quantity) quantityTotal, et.printedStickers
|
) SELECT i.id, i.name, et.quantity, SUM(b.quantity) quantityTotal, et.printedStickers, ic.url
|
||||||
FROM vn.buy b
|
FROM vn.buy b
|
||||||
JOIN vn.item i ON i.id = b.itemFk
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
|
@ -41,6 +41,7 @@ module.exports = Self => {
|
||||||
JOIN vn.buyConfig bc ON bc.monthsAgo
|
JOIN vn.buyConfig bc ON bc.monthsAgo
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
JOIN vn.travel t ON t.id = e.travelFk
|
||||||
LEFT JOIN entryTmp et ON et.id = i.id
|
LEFT JOIN entryTmp et ON et.id = i.id
|
||||||
|
JOIN hedera.imageConfig ic
|
||||||
WHERE e.supplierFk = ?
|
WHERE e.supplierFk = ?
|
||||||
AND i.family IN ('EMB', 'CONT')
|
AND i.family IN ('EMB', 'CONT')
|
||||||
AND b.created > (util.VN_CURDATE() - INTERVAL bc.monthsAgo MONTH)
|
AND b.created > (util.VN_CURDATE() - INTERVAL bc.monthsAgo MONTH)
|
||||||
|
|
|
@ -54,8 +54,8 @@
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
ng-model="$ctrl.worker.originCountryFk"
|
ng-model="$ctrl.worker.originCountryFk"
|
||||||
url="Countries"
|
url="Countries"
|
||||||
fields="['id', 'country', 'code']"
|
fields="['id', 'name', 'code']"
|
||||||
show-field="country"
|
show-field="name"
|
||||||
value-field="id"
|
value-field="id"
|
||||||
label="Origin country">
|
label="Origin country">
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
|
|
Loading…
Reference in New Issue