diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2be92faa..a672e7986 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [24.18.01] - 2024-05-02
+## [24.20.01] - 2024-05-14
+
+### Fixed
+- (Worker -> time-control) Corrección de errores
+- (InvoiceOut -> Crear factura) Cuando falla al crear una factura, se devuelve un error
+
+## [24.18.01] - 2024-05-07
## [24.16.01] - 2024-04-18
diff --git a/Jenkinsfile b/Jenkinsfile
index d700ce1f9..9d5954f86 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -24,7 +24,7 @@ node {
FROM_GIT = env.JOB_NAME.startsWith('gitea/')
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
RUN_BUILD = PROTECTED_BRANCH && FROM_GIT
- env.DEBUG = 'strong-remoting:shared-method'
+ // env.DEBUG = 'strong-remoting:shared-method'
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
echo "NODE_NAME: ${env.NODE_NAME}"
echo "WORKSPACE: ${env.WORKSPACE}"
@@ -71,6 +71,7 @@ pipeline {
stage('Back') {
steps {
sh 'pnpm install --prefer-offline'
+ sh 'node node_modules/puppeteer/install.mjs'
}
}
stage('Print') {
diff --git a/back/methods/dms/downloadFile.js b/back/methods/dms/downloadFile.js
index d64b15b70..9290188a1 100644
--- a/back/methods/dms/downloadFile.js
+++ b/back/methods/dms/downloadFile.js
@@ -30,7 +30,7 @@ module.exports = Self => {
path: `/:id/downloadFile`,
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.downloadFile = async function(ctx, id) {
diff --git a/back/methods/docuware/download.js b/back/methods/docuware/download.js
index a1776cde5..eb575236d 100644
--- a/back/methods/docuware/download.js
+++ b/back/methods/docuware/download.js
@@ -43,7 +43,7 @@ module.exports = Self => {
path: `/:id/download`,
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.download = async function(id, fileCabinet, filter) {
diff --git a/back/methods/image/download.js b/back/methods/image/download.js
index 201e16164..e0fcb0951 100644
--- a/back/methods/image/download.js
+++ b/back/methods/image/download.js
@@ -48,7 +48,7 @@ module.exports = Self => {
path: `/:collection/:size/:id/download`,
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.download = async function(ctx, collection, size, id) {
diff --git a/back/methods/vn-user/renew-token.js b/back/methods/vn-user/renew-token.js
index 2fd1f43c0..8e5ffc095 100644
--- a/back/methods/vn-user/renew-token.js
+++ b/back/methods/vn-user/renew-token.js
@@ -12,8 +12,8 @@ module.exports = Self => {
http: {
path: `/renewToken`,
verb: 'POST'
- }
- });
+ },
+ accessScopes: ['DEFAULT', 'read:multimedia']});
Self.renewToken = async function(ctx) {
const {accessToken: token} = ctx.req;
diff --git a/back/methods/vn-user/specs/renew-token.spec.js b/back/methods/vn-user/specs/renew-token.spec.js
index 741388bf9..70e7473d1 100644
--- a/back/methods/vn-user/specs/renew-token.spec.js
+++ b/back/methods/vn-user/specs/renew-token.spec.js
@@ -28,6 +28,9 @@ describe('Renew Token', () => {
});
it('should renew token', async() => {
+ const {courtesyTime} = await models.AccessTokenConfig.findOne({
+ fields: ['courtesyTime']
+ });
const mockDate = new Date(startingTime + 26600000);
jasmine.clock().mockDate(mockDate);
const {id} = await models.VnUser.renewToken(ctx);
@@ -35,7 +38,7 @@ describe('Renew Token', () => {
expect(id).not.toEqual(ctx.req.accessToken.id);
await models.VnUser.logout(ctx.req.accessToken.id);
- jasmine.clock().tick(70 * 1000);
+ jasmine.clock().tick((courtesyTime + 10) * 1000);
let tokenNotExists;
try {
tokenNotExists = await models.AccessToken.findById(ctx.req.accessToken.id);
diff --git a/back/model-config.json b/back/model-config.json
index ebcdb7bce..e64386300 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -124,6 +124,9 @@
"Postcode": {
"dataSource": "vn"
},
+ "ReferenceRate": {
+ "dataSource": "vn"
+ },
"SageWithholding": {
"dataSource": "vn"
},
@@ -177,5 +180,11 @@
},
"ProductionConfig": {
"dataSource": "vn"
+ },
+ "AgencyLog": {
+ "dataSource": "vn"
+ },
+ "AgencyWorkCenter": {
+ "dataSource": "vn"
}
-}
\ No newline at end of file
+}
diff --git a/back/models/agency-log.json b/back/models/agency-log.json
new file mode 100644
index 000000000..04b0b2995
--- /dev/null
+++ b/back/models/agency-log.json
@@ -0,0 +1,9 @@
+{
+ "name": "AgencyLog",
+ "base": "Log",
+ "options": {
+ "mysql": {
+ "table": "agencyLog"
+ }
+ }
+}
diff --git a/back/models/agency-workCenter.js b/back/models/agency-workCenter.js
new file mode 100644
index 000000000..32114355e
--- /dev/null
+++ b/back/models/agency-workCenter.js
@@ -0,0 +1,8 @@
+const UserError = require('vn-loopback/util/user-error');
+module.exports = Self => {
+ Self.rewriteDbError(function(err) {
+ if (err.code === 'ER_DUP_ENTRY')
+ return new UserError(`This workCenter is already assigned to this agency`);
+ return err;
+ });
+};
diff --git a/back/models/agency-workCenter.json b/back/models/agency-workCenter.json
new file mode 100644
index 000000000..adf1e5bcb
--- /dev/null
+++ b/back/models/agency-workCenter.json
@@ -0,0 +1,41 @@
+{
+ "name": "AgencyWorkCenter",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "agencyWorkCenter"
+ }
+ },
+ "properties": {
+ "id": {
+ "id": true,
+ "type": "number",
+ "forceId": false
+ },
+ "agencyFk": {
+ "type": "number",
+ "required": false
+ },
+ "workCenterFk": {
+ "type": "number",
+ "required": false
+ }
+ },
+ "relations": {
+ "agency": {
+ "type": "belongsTo",
+ "model": "WorkCenter",
+ "foreignKey": "agencyFk"
+ },
+ "workCenter": {
+ "type": "belongsTo",
+ "model": "WorkCenter",
+ "foreignKey": "workCenterFk"
+ }
+ },
+ "scope": {
+ "include":{
+ "relation": "workCenter"
+ }
+ }
+}
diff --git a/back/models/collection.json b/back/models/collection.json
index 3e428ef60..cb8dc3d7c 100644
--- a/back/models/collection.json
+++ b/back/models/collection.json
@@ -1,6 +1,11 @@
{
"name": "Collection",
"base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "collection"
+ }
+ },
"acls": [{
"property": "validations",
"accessType": "EXECUTE",
@@ -9,4 +14,3 @@
"permission": "ALLOW"
}]
}
-
\ No newline at end of file
diff --git a/back/models/reference-rate.json b/back/models/reference-rate.json
new file mode 100644
index 000000000..fe732f3ef
--- /dev/null
+++ b/back/models/reference-rate.json
@@ -0,0 +1,36 @@
+{
+ "name": "ReferenceRate",
+ "base": "PersistedModel",
+ "options": {
+ "mysql": {
+ "table": "referenceRate"
+ }
+ },
+ "properties": {
+ "id": {
+ "type": "number",
+ "id": true,
+ "description": "Identifier"
+ },
+ "currencyFk": {
+ "type": "number",
+ "required": true
+ },
+ "dated": {
+ "type": "date",
+ "required": true
+ },
+ "value": {
+ "type": "number",
+ "required": true
+ }
+ },
+ "acls": [
+ {
+ "accessType": "READ",
+ "principalType": "ROLE",
+ "principalId": "$everyone",
+ "permission": "ALLOW"
+ }
+ ]
+}
diff --git a/db/.editorconfig b/db/.editorconfig
new file mode 100644
index 000000000..c97043430
--- /dev/null
+++ b/db/.editorconfig
@@ -0,0 +1,13 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+# http://editorconfig.org
+
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index e13b03725..1a7d029cc 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -160,7 +160,8 @@ INSERT INTO `vn`.`currency`(`id`, `code`, `name`, `ratio`)
(1, 'EUR', 'Euro', 1),
(2, 'USD', 'Dollar USA', 1.4),
(3, 'GBP', 'Libra', 1),
- (4, 'JPY', 'Yen Japones', 1);
+ (4, 'JPY', 'Yen Japones', 1),
+ (5, 'CNY', 'Yuan Chino', 1.2);
INSERT INTO `vn`.`country`(`id`, `country`, `isUeeMember`, `code`, `currencyFk`, `ibanLength`, `continentFk`, `hasDailyInvoice`, `CEE`)
VALUES
@@ -527,7 +528,8 @@ INSERT INTO `vn`.`observationType`(`id`,`description`, `code`)
(4, 'SalesPerson', 'salesPerson'),
(5, 'Administrative', 'administrative'),
(6, 'Weight', 'weight'),
- (7, 'InvoiceOut', 'invoiceOut');
+ (7, 'InvoiceOut', 'invoiceOut'),
+ (8, 'DropOff', 'dropOff');
INSERT INTO `vn`.`addressObservation`(`id`,`addressFk`,`observationTypeFk`,`description`)
VALUES
@@ -2615,16 +2617,32 @@ INSERT INTO `vn`.`invoiceInIntrastat` (`invoiceInFk`, `net`, `intrastatFk`, `amo
(2, 16.10, 6021010, 25.00, 80, 5);
UPDATE `vn`.`invoiceIn`
- SET isBooked = TRUE
- WHERE id IN (2, 5, 7, 8, 9, 10);
+ SET isBooked = TRUE
+ WHERE id IN (5, 7, 8, 9, 10);
-INSERT INTO `vn`.`ticketRecalc`(`ticketFk`)
- SELECT t.id
- FROM vn.ticket t
- LEFT JOIN vn.ticketRecalc tr ON tr.ticketFk = t.id
- WHERE tr.ticketFk IS NULL;
+DELIMITER $$
+CREATE PROCEDURE `tmp`.`ticket_recalc`()
+BEGIN
+ DECLARE vDone BOOL;
+ DECLARE vTicketFk INT;
-CALL `vn`.`ticket_doRecalc`();
+ DECLARE cTickets CURSOR FOR SELECT id FROM vn.ticket;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND
+ SET vDone = TRUE;
+
+ OPEN cTickets;
+ myLoop: LOOP
+ SET vDone = FALSE;
+ FETCH cTickets INTO vTicketFk;
+ IF vDone THEN LEAVE myLoop; END IF;
+ CALL vn.ticket_recalc(vTicketFk, NULL);
+ END LOOP;
+ CLOSE cTickets;
+END$$
+DELIMITER ;
+
+CALL tmp.ticket_recalc;
+DROP PROCEDURE tmp.ticket_recalc;
UPDATE `vn`.`ticket`
SET refFk = 'T1111111'
@@ -3774,3 +3792,6 @@ INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk)
INSERT INTO vn.workerTeam(id, team, workerFk)
VALUES
(8, 1, 19);
+
+INSERT INTO vn.workCenter (id, name, payrollCenterFk, counter, warehouseFk, street, geoFk, deliveryManAdjustment)
+ VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
\ No newline at end of file
diff --git a/db/routines/bi/procedures/Greuge_Evolution_Add.sql b/db/routines/bi/procedures/Greuge_Evolution_Add.sql
index 1d4bf4355..c5b077f29 100644
--- a/db/routines/bi/procedures/Greuge_Evolution_Add.sql
+++ b/db/routines/bi/procedures/Greuge_Evolution_Add.sql
@@ -92,12 +92,12 @@ BEGIN
UPDATE bi.Greuge_Evolution ge
JOIN (
SELECT cs.Id_Cliente, sum(Valor * Cantidad) as Importe
- FROM vn2008.Tickets t
- JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna
- JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
+ FROM vn.ticket t
+ JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.addressFk
+ JOIN vn2008.Movimientos m on m.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
- WHERE t.Fecha >= datFEC
- AND t.Fecha < datFEC_TOMORROW
+ WHERE t.shipped >= datFEC
+ AND t.shipped < datFEC_TOMORROW
AND mc.Id_Componente = 17 -- Recobro
GROUP BY cs.Id_Cliente
) sub using(Id_Cliente)
diff --git a/db/routines/bi/procedures/analisis_ventas_update.sql b/db/routines/bi/procedures/analisis_ventas_update.sql
index 6d357275a..228660d07 100644
--- a/db/routines/bi/procedures/analisis_ventas_update.sql
+++ b/db/routines/bi/procedures/analisis_ventas_update.sql
@@ -1,5 +1,5 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
BEGIN
DECLARE vLastMonth DATE;
@@ -10,18 +10,18 @@ BEGIN
OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth));
INSERT INTO analisis_ventas (
- Familia,
- Reino,
- Comercial,
- Comprador,
- Provincia,
- almacen,
- Año,
- Mes,
- Semana,
- Vista,
- Importe
- )
+ Familia,
+ Reino,
+ Comercial,
+ Comprador,
+ Provincia,
+ almacen,
+ Año,
+ Mes,
+ Semana,
+ Vista,
+ Importe
+ )
SELECT
tp.Tipo AS Familia,
r.reino AS Reino,
@@ -35,19 +35,19 @@ BEGIN
dm.description AS Vista,
bt.importe AS Importe
FROM bs.ventas bt
- LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id
- LEFT JOIN vn2008.reinos r ON r.id = tp.reino_id
- LEFT JOIN vn2008.Clientes c on c.Id_Cliente = bt.Id_Cliente
- LEFT JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = c.Id_Trabajador
- LEFT JOIN vn2008.Trabajadores tr2 ON tr2.Id_Trabajador = tp.Id_Trabajador
- JOIN vn2008.time tm ON tm.date = bt.fecha
- JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento
- LEFT JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
- LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista
- LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna
- LEFT JOIN vn2008.province p ON p.province_id = cs.province_id
- LEFT JOIN vn.warehouse w ON w.id = t.warehouse_id
- WHERE bt.fecha >= vLastMonth AND r.mercancia;
-END$$
-DELIMITER ;
+ LEFT JOIN vn2008.Tipos tp ON tp.tipo_id = bt.tipo_id
+ LEFT JOIN vn2008.reinos r ON r.id = tp.reino_id
+ LEFT JOIN vn2008.Clientes c on c.Id_Cliente = bt.Id_Cliente
+ LEFT JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = c.Id_Trabajador
+ LEFT JOIN vn2008.Trabajadores tr2 ON tr2.Id_Trabajador = tp.Id_Trabajador
+ JOIN vn2008.time tm ON tm.date = bt.fecha
+ JOIN vn2008.Movimientos m ON m.Id_Movimiento = bt.Id_Movimiento
+ LEFT JOIN vn.ticket t ON t.id = m.Id_Ticket
+ JOIN vn2008.Agencias a ON a.Id_Agencia = t.agencyModeFk
+ LEFT JOIN vn.deliveryMethod dm ON dm.id = a.Vista
+ LEFT JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.addressFk
+ LEFT JOIN vn2008.province p ON p.province_id = cs.province_id
+ LEFT JOIN vn.warehouse w ON w.id = t.warehouseFk
+ WHERE bt.fecha >= vLastMonth AND r.mercancia;
+END$$
+DELIMITER ;
diff --git a/db/routines/bi/procedures/claim_ratio_routine.sql b/db/routines/bi/procedures/claim_ratio_routine.sql
index 10cb717cf..83d70c867 100644
--- a/db/routines/bi/procedures/claim_ratio_routine.sql
+++ b/db/routines/bi/procedures/claim_ratio_routine.sql
@@ -59,18 +59,18 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list
(PRIMARY KEY (Id_Ticket))
- SELECT DISTINCT t.Id_Ticket
+ SELECT DISTINCT t.id Id_Ticket
FROM vn2008.Movimientos_componentes mc
JOIN vn2008.Movimientos m ON mc.Id_Movimiento = m.Id_Movimiento
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Tickets_state ts ON ts.Id_Ticket = t.Id_Ticket
- JOIN vn.ticketTracking tt ON tt.id = ts.inter_id
- JOIN vn2008.state s ON s.id = tt.stateFk
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
+ JOIN vn.ticketLastState ts ON ts.ticketFk = t.id
+ JOIN vn.ticketTracking tt ON tt.id = ts.ticketTrackingFk
+ JOIN vn.state s ON s.id = tt.stateFk
WHERE mc.Id_Componente = 17
AND mc.greuge = 0
- AND t.Fecha >= '2016-10-01'
- AND t.Fecha < util.VN_CURDATE()
- AND s.alert_level >= 3;
+ AND t.shipped >= '2016-10-01'
+ AND t.shipped < util.VN_CURDATE()
+ AND s.alertLevel >= 3;
DELETE g.*
FROM vn.greuge g
@@ -79,18 +79,18 @@ BEGIN
INSERT INTO vn.greuge(clientFk, description, amount,shipped,
greugeTypeFk, ticketFk)
- SELECT Id_Cliente
+ SELECT t.clientFk
,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2)
AS dif
- ,date(t.Fecha)
+ ,date(t.shipped)
, 2
,tt.Id_Ticket
FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
+ JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc
ON mc.Id_Movimiento = m.Id_Movimiento AND mc.Id_Componente = 17
- GROUP BY t.Id_Ticket
+ GROUP BY t.id
HAVING ABS(dif) > 1;
UPDATE vn2008.Movimientos_componentes mc
diff --git a/db/routines/bi/procedures/comparativa_add.sql b/db/routines/bi/procedures/comparativa_add.sql
index 4297c8aff..ac06798db 100644
--- a/db/routines/bi/procedures/comparativa_add.sql
+++ b/db/routines/bi/procedures/comparativa_add.sql
@@ -15,17 +15,17 @@ BEGIN
IF lastCOMP < vMaxPeriod - 3 AND vMaxWeek > 3 THEN
REPLACE vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
- SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
+ SELECT tm.period as Periodo, m.Id_Article, t.warehouseFk, sum(m.Cantidad), sum(v.importe)
FROM bs.ventas v
JOIN vn2008.time tm ON tm.date = v.fecha
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
JOIN vn2008.reinos r ON r.id = tp.reino_id
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3
- AND t.Id_Cliente NOT IN(400,200)
- AND t.warehouse_id NOT IN (0,13)
- GROUP BY m.Id_Article, Periodo, t.warehouse_id;
+ AND t.clientFk NOT IN(400,200)
+ AND t.warehouseFk NOT IN (0,13)
+ GROUP BY m.Id_Article, Periodo, t.warehouseFk;
END IF;
END$$
diff --git a/db/routines/bi/procedures/comparativa_add_manual.sql b/db/routines/bi/procedures/comparativa_add_manual.sql
index 281e15b23..2b05b1277 100644
--- a/db/routines/bi/procedures/comparativa_add_manual.sql
+++ b/db/routines/bi/procedures/comparativa_add_manual.sql
@@ -25,16 +25,16 @@ BEGIN
WHERE Periodo BETWEEN periodStart AND periodEnd;
INSERT INTO vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
- SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
+ SELECT tm.period as Periodo, m.Id_Article, t.warehouseFk, sum(m.Cantidad), sum(v.importe)
FROM bs.ventas v
JOIN vn2008.time tm ON tm.date = v.fecha
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
JOIN vn2008.reinos r ON r.id = tp.reino_id
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
WHERE tm.period BETWEEN periodStart AND periodEnd
- AND t.Id_Cliente NOT IN(400,200)
- AND t.warehouse_id NOT IN (0,13)
- GROUP BY m.Id_Article, Periodo, t.warehouse_id;
+ AND t.clientFk NOT IN(400,200)
+ AND t.warehouseFk NOT IN (0,13)
+ GROUP BY m.Id_Article, Periodo, t.warehouseFk;
END$$
DELIMITER ;
diff --git a/db/routines/bi/views/v_ventas_contables.sql b/db/routines/bi/views/v_ventas_contables.sql
index 373fcdd3f..82bbeeaac 100644
--- a/db/routines/bi/views/v_ventas_contables.sql
+++ b/db/routines/bi/views/v_ventas_contables.sql
@@ -11,13 +11,13 @@ AS SELECT `time`.`year` AS `year`,
FROM (
(
(
- `vn2008`.`Tickets` `t`
- JOIN `bi`.`f_tvc` ON(`t`.`Id_Ticket` = `bi`.`f_tvc`.`Id_Ticket`)
+ `vn`.`ticket` `t`
+ JOIN `bi`.`f_tvc` ON(`t`.`id` = `bi`.`f_tvc`.`Id_Ticket`)
)
- JOIN `vn2008`.`Movimientos` `m` ON(`t`.`Id_Ticket` = `m`.`Id_Ticket`)
+ JOIN `vn2008`.`Movimientos` `m` ON(`t`.`id` = `m`.`Id_Ticket`)
)
- JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`Fecha` AS date))
+ JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`shipped` AS date))
)
-WHERE `t`.`Fecha` >= '2014-01-01'
+WHERE `t`.`shipped` >= '2014-01-01'
GROUP BY `time`.`year`,
`time`.`month`
diff --git a/db/routines/bs/procedures/comercialesCompleto.sql b/db/routines/bs/procedures/comercialesCompleto.sql
index 101173740..96cab5b4f 100644
--- a/db/routines/bs/procedures/comercialesCompleto.sql
+++ b/db/routines/bs/procedures/comercialesCompleto.sql
@@ -70,23 +70,23 @@ BEGIN
AND (v.fecha BETWEEN TIMESTAMPADD(DAY, - DAY(vDate) + 1, vDate) AND TIMESTAMPADD(DAY, - 1, vDate))
GROUP BY Id_Cliente) mes_actual ON mes_actual.Id_Cliente = c.Id_Cliente
LEFT JOIN
- (SELECT t.Id_Cliente, SUM(m.preu * m.Cantidad * (1 - m.Descuento / 100)) futur
- FROM vn2008.Tickets t
- JOIN vn2008.Clientes c ON c.Id_Cliente = t.Id_Cliente
- JOIN vn2008.Movimientos m ON m.Id_Ticket = t.Id_Ticket
+ (SELECT t.clientFk Id_Cliente, SUM(m.preu * m.Cantidad * (1 - m.Descuento / 100)) futur
+ FROM vn.ticket t
+ JOIN vn2008.Clientes c ON c.Id_Cliente = t.clientFk
+ JOIN vn2008.Movimientos m ON m.Id_Ticket = t.id
LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
WHERE
(c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- AND t.Fecha BETWEEN vDate AND util.dayEnd(LAST_DAY(vDate))
+ AND t.shipped BETWEEN vDate AND util.dayEnd(LAST_DAY(vDate))
GROUP BY Id_Cliente) f ON c.Id_Cliente = f.Id_Cliente
LEFT JOIN
- (SELECT MAX(t.Fecha) LastTicket, c.Id_Cliente
- FROM vn2008.Tickets t
- JOIN vn2008.Clientes c ON c.Id_cliente = t.Id_Cliente
+ (SELECT MAX(t.shipped) LastTicket, c.Id_Cliente
+ FROM vn.ticket t
+ JOIN vn2008.Clientes c ON c.Id_cliente = t.clientFk
LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
WHERE
(c.Id_Trabajador = vWorker OR tr.boss = vWorker)
- GROUP BY t.Id_Cliente) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente
+ GROUP BY t.clientFk) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente
LEFT JOIN
(
SELECT SUM(importe) peso, c.Id_Cliente
diff --git a/db/routines/bs/procedures/manaCustomerUpdate.sql b/db/routines/bs/procedures/manaCustomerUpdate.sql
index 2038f976a..f53d293b3 100644
--- a/db/routines/bs/procedures/manaCustomerUpdate.sql
+++ b/db/routines/bs/procedures/manaCustomerUpdate.sql
@@ -68,13 +68,13 @@ BEGIN
FROM
(
SELECT cs.Id_Cliente, Cantidad * Valor as mana
- FROM vn2008.Tickets t
+ FROM vn.ticket t
JOIN vn2008.Consignatarios cs using(Id_Consigna)
- JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
+ JOIN vn2008.Movimientos m on m.Id_Ticket = t.id
JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId)
- AND t.Fecha > vFromDated
- AND date(t.Fecha) <= vToDated
+ AND t.shipped > vFromDated
+ AND date(t.shipped) <= vToDated
UNION ALL
SELECT r.Id_Cliente, - Entregado
FROM vn2008.Recibos r
diff --git a/db/routines/bs/procedures/ventas_contables_add.sql b/db/routines/bs/procedures/ventas_contables_add.sql
index 66c012a19..ad4e80a06 100644
--- a/db/routines/bs/procedures/ventas_contables_add.sql
+++ b/db/routines/bs/procedures/ventas_contables_add.sql
@@ -19,11 +19,11 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list
- (PRIMARY KEY (Id_Ticket))
+ (PRIMARY KEY (id))
ENGINE = MEMORY
- SELECT Id_Ticket
- FROM vn2008.Tickets t
- JOIN vn.invoiceOut io ON io.`ref` = t.Factura
+ SELECT t.id
+ FROM vn.ticket t
+ JOIN vn.invoiceOut io ON io.`ref` = t.refFk
WHERE year(io.issued) = vYear
AND month(io.issued) = vMonth;
@@ -46,7 +46,7 @@ BEGIN
) as grupo
, tp.reino_id
, a.tipo_id
- , t.empresa_id
+ , t.companyFk
, a.expenseFk
+ IF(e.empresa_grupo = e2.empresa_grupo
,1
@@ -54,19 +54,19 @@ BEGIN
) * 100000
+ tp.reino_id * 1000 as Gasto
FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t on t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
+ JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.addressFk
JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente
- JOIN tmp.ticket_list tt on tt.Id_Ticket = t.Id_Ticket
+ JOIN tmp.ticket_list tt on tt.id = t.id
JOIN vn2008.Articles a on m.Id_Article = a.Id_Article
- JOIN vn2008.empresa e on e.id = t.empresa_id
+ JOIN vn2008.empresa e on e.id = t.companyFk
LEFT JOIN vn2008.empresa e2 on e2.Id_Cliente = c.Id_Cliente
JOIN vn2008.Tipos tp on tp.tipo_id = a.tipo_id
WHERE Cantidad <> 0
AND Preu <> 0
AND m.Descuento <> 100
AND a.tipo_id != TIPO_PATRIMONIAL
- GROUP BY grupo, reino_id, tipo_id, empresa_id, Gasto;
+ GROUP BY grupo, reino_id, tipo_id, companyFk, Gasto;
INSERT INTO bs.ventas_contables(year
, month
@@ -92,7 +92,7 @@ BEGIN
JOIN vn.ticket t ON ts.ticketFk = t.id
JOIN vn.address a on a.id = t.addressFk
JOIN vn.client cl on cl.id = a.clientFk
- JOIN tmp.ticket_list tt on tt.Id_Ticket = t.id
+ JOIN tmp.ticket_list tt on tt.id = t.id
JOIN vn.company c on c.id = t.companyFk
LEFT JOIN vn.company c2 on c2.clientFk = cl.id
GROUP BY grupo, t.companyFk ;
diff --git a/db/routines/bs/procedures/ventas_contables_por_cliente.sql b/db/routines/bs/procedures/ventas_contables_por_cliente.sql
index 931653e6e..ed3773cf7 100644
--- a/db/routines/bs/procedures/ventas_contables_por_cliente.sql
+++ b/db/routines/bs/procedures/ventas_contables_por_cliente.sql
@@ -10,38 +10,38 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
CREATE TEMPORARY TABLE tmp.ticket_list
- (PRIMARY KEY (Id_Ticket))
- SELECT Id_Ticket
- FROM vn2008.Tickets t
- JOIN vn.invoiceOut io ON io.id = t.Factura
+ (PRIMARY KEY (id))
+ SELECT t.id
+ FROM vn.ticket t
+ JOIN vn.invoiceOut io ON io.id = t.refFk
WHERE year(io.issued) = vYear
- AND month(io.issued) = vMonth;
-
+ AND month(io.issued) = vMonth;
+
SELECT vYear Año,
vMonth Mes,
- t.Id_Cliente,
+ t.clientFk Id_Cliente,
round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) Venta,
IF(e.empresa_grupo = e2.empresa_grupo,
1,
IF(e2.empresa_grupo,2,0))
AS grupo,
- t.empresa_id empresa
+ t.companyFk empresa
FROM vn2008.Movimientos m
- JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
- JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.Id_Consigna
+ JOIN vn.ticket t ON t.id = m.Id_Ticket
+ JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = t.addressFk
JOIN vn2008.Clientes c ON c.Id_Cliente = cs.Id_Cliente
- JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket
+ JOIN tmp.ticket_list tt ON tt.id = t.id
JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article
- JOIN vn2008.empresa e ON e.id = t.empresa_id
+ JOIN vn2008.empresa e ON e.id = t.companyFk
LEFT JOIN vn2008.empresa e2 ON e2.Id_Cliente = c.Id_Cliente
JOIN vn2008.Tipos tp ON tp.tipo_id = a.tipo_id
WHERE Cantidad <> 0
AND Preu <> 0
AND m.Descuento <> 100
AND a.tipo_id != 188
- GROUP BY t.Id_Cliente, grupo,t.empresa_id;
-
+ GROUP BY t.clientFk, grupo,t.companyFk;
+
DROP TEMPORARY TABLE tmp.ticket_list;
-
+
END$$
DELIMITER ;
diff --git a/db/routines/hedera/events/order_doRecalc.sql b/db/routines/hedera/events/order_doRecalc.sql
deleted file mode 100644
index bbc61924f..000000000
--- a/db/routines/hedera/events/order_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `hedera`.`order_doRecalc`
- ON SCHEDULE EVERY 10 SECOND
- STARTS '2019-08-29 14:18:04.000'
- ON COMPLETION PRESERVE
- DISABLE
-DO CALL order_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/hedera/procedures/order_doRecalc.sql b/db/routines/hedera/procedures/order_doRecalc.sql
deleted file mode 100644
index 4c0ee0499..000000000
--- a/db/routines/hedera/procedures/order_doRecalc.sql
+++ /dev/null
@@ -1,53 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_doRecalc`()
-proc: BEGIN
-/**
- * Recalculates modified orders.
- */
- DECLARE vDone BOOL;
- DECLARE vOrderFk INT;
-
- DECLARE cCur CURSOR FOR
- SELECT DISTINCT orderFk FROM tOrder;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
-
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('hedera.order_doRecalc');
- ROLLBACK;
- RESIGNAL;
- END;
-
- IF !GET_LOCK('hedera.order_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- DROP TEMPORARY TABLE IF EXISTS tOrder;
- CREATE TEMPORARY TABLE tOrder
- ENGINE = MEMORY
- SELECT id, orderFk FROM orderRecalc;
-
- OPEN cCur;
-
- myLoop: LOOP
- SET vDone = FALSE;
- FETCH cCur INTO vOrderFk;
-
- IF vDone THEN
- LEAVE myLoop;
- END IF;
-
- CALL order_recalc(vOrderFk);
- END LOOP;
-
- CLOSE cCur;
-
- DELETE o FROM orderRecalc o JOIN tOrder t ON t.id = o.id;
-
- DROP TEMPORARY TABLE tOrder;
-
- DO RELEASE_LOCK('hedera.order_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/procedures/order_requestRecalc.sql b/db/routines/hedera/procedures/order_requestRecalc.sql
deleted file mode 100644
index 990894bb6..000000000
--- a/db/routines/hedera/procedures/order_requestRecalc.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recalculate the order total.
- *
- * @param vSelf The order identifier
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- -- #4409 Disable order recalc
- -- INSERT INTO orderRecalc SET orderFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterDelete.sql b/db/routines/hedera/triggers/orderRow_afterDelete.sql
deleted file mode 100644
index 10b5ae9e3..000000000
--- a/db/routines/hedera/triggers/orderRow_afterDelete.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterDelete`
- AFTER DELETE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NULL, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterInsert.sql b/db/routines/hedera/triggers/orderRow_afterInsert.sql
deleted file mode 100644
index 7e8d5f341..000000000
--- a/db/routines/hedera/triggers/orderRow_afterInsert.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterInsert`
- AFTER INSERT ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, NULL);
- CALL order_requestRecalc(NEW.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/orderRow_afterUpdate.sql b/db/routines/hedera/triggers/orderRow_afterUpdate.sql
deleted file mode 100644
index 33f4ae84e..000000000
--- a/db/routines/hedera/triggers/orderRow_afterUpdate.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterUpdate`
- AFTER UPDATE ON `orderRow`
- FOR EACH ROW
-BEGIN
- CALL stock.log_add('orderRow', NEW.id, OLD.id);
- CALL order_requestRecalc(OLD.orderFk);
- CALL order_requestRecalc(NEW.orderFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/hedera/triggers/order_afterUpdate.sql b/db/routines/hedera/triggers/order_afterUpdate.sql
index a4549549a..25f51b3f0 100644
--- a/db/routines/hedera/triggers/order_afterUpdate.sql
+++ b/db/routines/hedera/triggers/order_afterUpdate.sql
@@ -2,23 +2,15 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`order_afterUpdate`
AFTER UPDATE ON `order`
FOR EACH ROW
-BEGIN
- CALL stock.log_add('order', NEW.id, OLD.id);
-
- IF !(OLD.address_id <=> NEW.address_id)
- OR !(OLD.company_id <=> NEW.company_id)
- OR !(OLD.customer_id <=> NEW.customer_id) THEN
- CALL order_requestRecalc(NEW.id);
- END IF;
-
- IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
- -- Fallo que se actualiza no se sabe como tickets en este cliente
- CALL vn.mail_insert(
- 'jgallego@verdnatura.es',
- 'noreply@verdnatura.es',
- 'Actualizada order al address 2850',
- CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
- );
- END IF;
+BEGIN
+ IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
+ -- Fallo que se actualiza no se sabe como tickets en este cliente
+ CALL vn.mail_insert(
+ 'jgallego@verdnatura.es',
+ 'noreply@verdnatura.es',
+ 'Actualizada order al address 2850',
+ CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
+ );
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/sage/procedures/importErrorNotification.sql b/db/routines/sage/procedures/importErrorNotification.sql
index b070097f4..75b0cffc8 100644
--- a/db/routines/sage/procedures/importErrorNotification.sql
+++ b/db/routines/sage/procedures/importErrorNotification.sql
@@ -43,7 +43,7 @@ BEGIN
WHERE sub.amountTaxableBase<>sub2.amountTaxableBase
AND sub.amountTaxableBase/2 <> sub2.amountTaxableBase
UNION ALL
- SELECT CONCAT('- Factura Duplicada: ', mc.Asiento)
+ SELECT CONCAT('- Factura Duplicada: ', accountingEntryFk)
FROM accountingEntryError
)sub;
diff --git a/db/routines/stock/procedures/inbound_addPick.sql b/db/routines/stock/procedures/inbound_addPick.sql
index d867b5641..41b93a986 100644
--- a/db/routines/stock/procedures/inbound_addPick.sql
+++ b/db/routines/stock/procedures/inbound_addPick.sql
@@ -1,8 +1,8 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_addPick`(
vSelf INT,
- vOutboundFk INT,
- vQuantity INT
+ vOutboundFk INT,
+ vQuantity INT
)
BEGIN
INSERT INTO inboundPick
diff --git a/db/routines/stock/procedures/inbound_removePick.sql b/db/routines/stock/procedures/inbound_removePick.sql
index e125ee8a7..e183e1171 100644
--- a/db/routines/stock/procedures/inbound_removePick.sql
+++ b/db/routines/stock/procedures/inbound_removePick.sql
@@ -1,9 +1,9 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_removePick`(
vSelf INT,
- vOutboundFk INT,
- vQuantity INT,
- vTotalQuantity INT
+ vOutboundFk INT,
+ vQuantity INT,
+ vTotalQuantity INT
)
BEGIN
IF vQuantity < vTotalQuantity THEN
diff --git a/db/routines/stock/procedures/inbound_requestQuantity.sql b/db/routines/stock/procedures/inbound_requestQuantity.sql
index 5d814ce2c..1cbc1908b 100644
--- a/db/routines/stock/procedures/inbound_requestQuantity.sql
+++ b/db/routines/stock/procedures/inbound_requestQuantity.sql
@@ -1,9 +1,9 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_requestQuantity`(
vSelf INT,
- vRequested INT,
- vDated DATETIME,
- OUT vSupplied INT)
+ vRequested INT,
+ vDated DATETIME,
+ OUT vSupplied INT)
BEGIN
/**
* Disassociates inbound picks after the given date until the
@@ -29,7 +29,7 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
-
+
SET vSupplied = 0;
OPEN vPicks;
@@ -45,7 +45,7 @@ BEGIN
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
SET vSupplied = vSupplied + vPickGranted;
CALL inbound_removePick(vSelf, vOutboundFk, vPickGranted, vPickQuantity);
-
+
UPDATE outbound
SET isSync = FALSE,
lack = lack + vPickGranted
diff --git a/db/routines/stock/procedures/inbound_sync.sql b/db/routines/stock/procedures/inbound_sync.sql
index fc672d920..77d3e42f7 100644
--- a/db/routines/stock/procedures/inbound_sync.sql
+++ b/db/routines/stock/procedures/inbound_sync.sql
@@ -23,7 +23,7 @@ BEGIN
SELECT id, lack, lack < quantity
FROM outbound
WHERE warehouseFk = vWarehouse
- AND itemFk = vItem
+ AND itemFk = vItem
AND dated >= vDated
AND (vExpired IS NULL OR dated < vExpired)
ORDER BY dated, created;
@@ -51,8 +51,8 @@ BEGIN
END IF;
SET vSupplied = LEAST(vAvailable, vLack);
-
- IF vSupplied > 0 THEN
+
+ IF vSupplied > 0 THEN
SET vAvailable = vAvailable - vSupplied;
UPDATE outbound
SET lack = lack - vSupplied
@@ -64,8 +64,8 @@ BEGIN
SET vSupplied = vSupplied + vSuppliedFromRequest;
SET vAvailable = vAvailable - vSuppliedFromRequest;
END IF;
-
- IF vSupplied > 0 THEN
+
+ IF vSupplied > 0 THEN
CALL inbound_addPick(vSelf, vOutboundFk, vSupplied);
END IF;
diff --git a/db/routines/stock/procedures/log_add.sql b/db/routines/stock/procedures/log_add.sql
deleted file mode 100644
index 2b75c7f72..000000000
--- a/db/routines/stock/procedures/log_add.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_add`(IN `vTableName` VARCHAR(255), IN `vNewId` VARCHAR(255), IN `vOldId` VARCHAR(255))
-proc: BEGIN
- -- XXX: Disabled while testing
- LEAVE proc;
-
- IF vOldId IS NOT NULL AND !(vOldId <=> vNewId) THEN
- INSERT IGNORE INTO `log` SET
- tableName = vTableName,
- tableId = vOldId,
- operation = 'delete';
- END IF;
-
- IF vNewId IS NOT NULL THEN
- INSERT IGNORE INTO `log` SET
- tableName = vTableName,
- tableId = vNewId,
- operation = 'insert';
- END IF;
-END$$
-DELIMITER ;
diff --git a/db/routines/stock/procedures/log_refreshAll.sql b/db/routines/stock/procedures/log_refreshAll.sql
index eab91f8e9..3eaad07f2 100644
--- a/db/routines/stock/procedures/log_refreshAll.sql
+++ b/db/routines/stock/procedures/log_refreshAll.sql
@@ -10,7 +10,7 @@ BEGIN
DO RELEASE_LOCK('stock.log_sync');
RESIGNAL;
END;
-
+
IF !GET_LOCK('stock.log_sync', 30) THEN
CALL util.throw('Lock timeout exceeded');
END IF;
diff --git a/db/routines/stock/procedures/log_refreshBuy.sql b/db/routines/stock/procedures/log_refreshBuy.sql
index 62fa73435..488c00a28 100644
--- a/db/routines/stock/procedures/log_refreshBuy.sql
+++ b/db/routines/stock/procedures/log_refreshBuy.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshBuy`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tValues;
CREATE TEMPORARY TABLE tValues
@@ -11,7 +11,7 @@ BEGIN
e.id entryFk,
t.id travelFk,
b.itemFk,
- e.isRaid,
+ e.isRaid,
ADDTIME(t.shipped,
IFNULL(t.shipmentHour, '00:00:00')) shipped,
t.warehouseOutFk,
@@ -24,7 +24,7 @@ BEGIN
ABS(b.quantity) quantity,
b.created,
b.quantity > 0 isIn,
- t.shipped < vn.getInventoryDate() lessThanInventory
+ t.shipped < vn.getInventoryDate() lessThanInventory
FROM vn.buy b
JOIN vn.entry e ON e.id = b.entryFk
JOIN vn.travel t ON t.id = e.travelFk
@@ -52,7 +52,7 @@ BEGIN
quantity,
IF(isIn, isReceived, isDelivered) AND !isRaid
FROM tValues
- WHERE isIn OR !lessThanInventory;
+ WHERE isIn OR !lessThanInventory;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
@@ -67,7 +67,7 @@ BEGIN
quantity,
IF(isIn, isDelivered, isReceived) AND !isRaid
FROM tValues
- WHERE !isIn OR !lessThanInventory;
+ WHERE !isIn OR !lessThanInventory;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/log_refreshOrder.sql b/db/routines/stock/procedures/log_refreshOrder.sql
index 49225ddf0..ce5b31cc8 100644
--- a/db/routines/stock/procedures/log_refreshOrder.sql
+++ b/db/routines/stock/procedures/log_refreshOrder.sql
@@ -1,13 +1,13 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshOrder`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DECLARE vExpireTime INT DEFAULT 20;
DECLARE vExpired DATETIME DEFAULT TIMESTAMPADD(MINUTE, -vExpireTime, util.VN_NOW());
DROP TEMPORARY TABLE IF EXISTS tValues;
- CREATE TEMPORARY TABLE tValues
+ CREATE TEMPORARY TABLE tValues
ENGINE = MEMORY
SELECT
r.id rowFk,
@@ -23,24 +23,24 @@ BEGIN
OR (vTableName = 'order' AND o.id = vTableId)
OR (vTableName = 'orderRow' AND r.id = vTableId)
)
- AND !o.confirmed
- AND r.shipment >= vn.getInventoryDate()
+ AND !o.confirmed
+ AND r.shipment >= vn.getInventoryDate()
AND r.created >= vExpired
AND r.amount != 0;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
- itemFk, created, expired, quantity
+ itemFk, created, expired, quantity
)
- SELECT 'orderRow',
+ SELECT 'orderRow',
rowFk,
warehouseFk,
shipped,
itemFk,
created,
- TIMESTAMPADD(MINUTE, vExpireTime, created),
+ TIMESTAMPADD(MINUTE, vExpireTime, created),
quantity
- FROM tValues;
+ FROM tValues;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/log_refreshSale.sql b/db/routines/stock/procedures/log_refreshSale.sql
index 0499fc711..983616dca 100644
--- a/db/routines/stock/procedures/log_refreshSale.sql
+++ b/db/routines/stock/procedures/log_refreshSale.sql
@@ -1,10 +1,10 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshSale`(
- `vTableName` VARCHAR(255),
- `vTableId` INT)
+ `vTableName` VARCHAR(255),
+ `vTableId` INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tValues;
- CREATE TEMPORARY TABLE tValues
+ CREATE TEMPORARY TABLE tValues
ENGINE = MEMORY
SELECT
m.id saleFk,
@@ -14,7 +14,7 @@ BEGIN
t.shipped,
ABS(m.quantity) quantity,
m.created,
- TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
+ TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
m.quantity < 0 isIn,
m.isPicked OR s.alertLevel > 1 isPicked
FROM vn.sale m
@@ -32,33 +32,33 @@ BEGIN
REPLACE INTO inbound (
tableName, tableId, warehouseFk, dated,
- itemFk, expired, quantity, isPicked
+ itemFk, expired, quantity, isPicked
)
- SELECT 'sale',
+ SELECT 'sale',
saleFk,
warehouseFk,
shipped,
itemFk,
- expired,
+ expired,
quantity,
- isPicked
- FROM tValues
- WHERE isIn;
+ isPicked
+ FROM tValues
+ WHERE isIn;
REPLACE INTO outbound (
tableName, tableId, warehouseFk, dated,
- itemFk, created, quantity, isPicked
+ itemFk, created, quantity, isPicked
)
- SELECT 'sale',
+ SELECT 'sale',
saleFk,
warehouseFk,
shipped,
itemFk,
created,
quantity,
- isPicked
- FROM tValues
- WHERE !isIn;
+ isPicked
+ FROM tValues
+ WHERE !isIn;
DROP TEMPORARY TABLE tValues;
END$$
diff --git a/db/routines/stock/procedures/outbound_sync.sql b/db/routines/stock/procedures/outbound_sync.sql
index c79bde45f..0de352176 100644
--- a/db/routines/stock/procedures/outbound_sync.sql
+++ b/db/routines/stock/procedures/outbound_sync.sql
@@ -7,7 +7,7 @@ BEGIN
* @param vSelf The outbound reference
*/
DECLARE vDated DATETIME;
- DECLARE vItem INT;
+ DECLARE vItem INT;
DECLARE vWarehouse INT;
DECLARE vLack INT;
DECLARE vSupplied INT;
@@ -21,7 +21,7 @@ BEGIN
SELECT id, available, available < quantity
FROM inbound
WHERE warehouseFk = vWarehouse
- AND itemFk = vItem
+ AND itemFk = vItem
AND dated <= vDated
AND (expired IS NULL OR expired > vDated)
ORDER BY dated;
diff --git a/db/routines/stock/procedures/visible_log.sql b/db/routines/stock/procedures/visible_log.sql
index 2867f1186..cc88d3205 100644
--- a/db/routines/stock/procedures/visible_log.sql
+++ b/db/routines/stock/procedures/visible_log.sql
@@ -1,16 +1,16 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`visible_log`(
vIsPicked BOOL,
- vWarehouseFk INT,
- vItemFk INT,
- vQuantity INT
+ vWarehouseFk INT,
+ vItemFk INT,
+ vQuantity INT
)
proc: BEGIN
IF !vIsPicked THEN
LEAVE proc;
END IF;
- INSERT INTO visible
+ INSERT INTO visible
SET itemFk = vItemFk,
warehouseFk = vWarehouseFk,
quantity = vQuantity
diff --git a/db/routines/stock/triggers/inbound_afterDelete.sql b/db/routines/stock/triggers/inbound_afterDelete.sql
index b485299b0..451dcc599 100644
--- a/db/routines/stock/triggers/inbound_afterDelete.sql
+++ b/db/routines/stock/triggers/inbound_afterDelete.sql
@@ -12,11 +12,11 @@ BEGIN
DELETE FROM inboundPick
WHERE inboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- -OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ -OLD.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/inbound_beforeInsert.sql b/db/routines/stock/triggers/inbound_beforeInsert.sql
index 8aabb0682..723cb3222 100644
--- a/db/routines/stock/triggers/inbound_beforeInsert.sql
+++ b/db/routines/stock/triggers/inbound_beforeInsert.sql
@@ -4,12 +4,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`inbound_beforeInse
FOR EACH ROW
BEGIN
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ NEW.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/outbound_afterDelete.sql b/db/routines/stock/triggers/outbound_afterDelete.sql
index dce0aed7a..e7d756871 100644
--- a/db/routines/stock/triggers/outbound_afterDelete.sql
+++ b/db/routines/stock/triggers/outbound_afterDelete.sql
@@ -12,11 +12,11 @@ BEGIN
DELETE FROM inboundPick
WHERE outboundFk = OLD.id;
- CALL visible_log(
+ CALL visible_log(
OLD.isPicked,
- OLD.warehouseFk,
- OLD.itemFk,
- OLD.quantity
+ OLD.warehouseFk,
+ OLD.itemFk,
+ OLD.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/stock/triggers/outbound_beforeInsert.sql b/db/routines/stock/triggers/outbound_beforeInsert.sql
index e41edae43..86546413e 100644
--- a/db/routines/stock/triggers/outbound_beforeInsert.sql
+++ b/db/routines/stock/triggers/outbound_beforeInsert.sql
@@ -5,12 +5,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`outbound_beforeIns
BEGIN
SET NEW.lack = NEW.quantity;
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
-
- CALL visible_log(
+
+ CALL visible_log(
NEW.isPicked,
- NEW.warehouseFk,
- NEW.itemFk,
- -NEW.quantity
+ NEW.warehouseFk,
+ NEW.itemFk,
+ -NEW.quantity
);
END$$
DELIMITER ;
diff --git a/db/routines/util/functions/binlogQueue_getDelay.sql b/db/routines/util/functions/binlogQueue_getDelay.sql
index a440fc0ab..d6cf49377 100644
--- a/db/routines/util/functions/binlogQueue_getDelay.sql
+++ b/db/routines/util/functions/binlogQueue_getDelay.sql
@@ -1,6 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `util`.`binlogQueue_getDelay`(vCode VARCHAR(255))
RETURNS BIGINT
+ READS SQL DATA
NOT DETERMINISTIC
BEGIN
/**
diff --git a/db/routines/vn/events/ticket_doRecalc.sql b/db/routines/vn/events/ticket_doRecalc.sql
deleted file mode 100644
index 9209c5715..000000000
--- a/db/routines/vn/events/ticket_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`ticket_doRecalc`
- ON SCHEDULE EVERY 10 SECOND
- STARTS '2022-01-28 09:29:18.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO CALL ticket_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/vn/events/travel_doRecalc.sql b/db/routines/vn/events/travel_doRecalc.sql
deleted file mode 100644
index a08ecc068..000000000
--- a/db/routines/vn/events/travel_doRecalc.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_doRecalc`
- ON SCHEDULE EVERY 15 SECOND
- STARTS '2019-05-17 10:52:29.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO CALL travel_doRecalc$$
-DELIMITER ;
diff --git a/db/routines/vn/functions/getAlert3StateTest.sql b/db/routines/vn/functions/getAlert3StateTest.sql
index 6a14d80d4..f1a8ac4cc 100644
--- a/db/routines/vn/functions/getAlert3StateTest.sql
+++ b/db/routines/vn/functions/getAlert3StateTest.sql
@@ -11,9 +11,9 @@ BEGIN
SELECT
a.Vista
INTO vDeliveryType
- FROM vn2008.Tickets t
- JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
- WHERE Id_Ticket = vTicket;
+ FROM ticket t
+ JOIN vn2008.Agencias a ON a.Id_Agencia = t.agencyModeFk
+ WHERE t.id = vTicket;
CASE vDeliveryType
WHEN 1 THEN -- AGENCIAS
@@ -23,11 +23,11 @@ BEGIN
SET vCode = 'ON_DELIVERY';
ELSE -- MERCADO, OTROS
- SELECT t.warehouse_id <> w.warehouse_id INTO isWaitingForPickUp
- FROM vn2008.Tickets t
+ SELECT t.warehouseFk <> w.warehouse_id INTO isWaitingForPickUp
+ FROM ticket t
LEFT JOIN vn2008.warehouse_pickup w
- ON w.agency_id = t.Id_Agencia AND w.warehouse_id = t.warehouse_id
- WHERE t.Id_Ticket = vTicket;
+ ON w.agency_id = t.agencyModeFk AND w.warehouse_id = t.warehouseFk
+ WHERE t.id = vTicket;
IF isWaitingForPickUp THEN
SET vCode = 'WAITING_FOR_PICKUP';
diff --git a/db/routines/vn/functions/ticketPositionInPath.sql b/db/routines/vn/functions/ticketPositionInPath.sql
index 9bd2c110e..9a3bb4a0e 100644
--- a/db/routines/vn/functions/ticketPositionInPath.sql
+++ b/db/routines/vn/functions/ticketPositionInPath.sql
@@ -28,10 +28,10 @@ SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0)
SELECT (ag.`name` = 'VN_VALENCIA')
INTO vIsValenciaPath
- FROM vn2008.Rutas r
- JOIN vn2008.Agencias a on a.Id_Agencia = r.Id_Agencia
+ FROM `route` r
+ JOIN vn2008.Agencias a on a.Id_Agencia = r.agencyModeFk
JOIN vn2008.agency ag on ag.agency_id = a.agency_id
- WHERE r.Id_Ruta = vMyPath;
+ WHERE r.id = vMyPath;
IF vIsValenciaPath THEN -- Rutas Valencia
diff --git a/db/routines/vn/procedures/available_traslate.sql b/db/routines/vn/procedures/available_traslate.sql
new file mode 100644
index 000000000..d33a8e10e
--- /dev/null
+++ b/db/routines/vn/procedures/available_traslate.sql
@@ -0,0 +1,138 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`available_traslate`(
+ vWarehouseLanding INT,
+ vDated DATE,
+ vWarehouseShipment INT)
+proc: BEGIN
+/**
+ * Calcular la disponibilidad dependiendo del almacen
+ * de origen y destino según la fecha.
+ *
+ * @param vWarehouseLanding Almacén de llegada
+ * @param vDated Fecha del calculo para la disponibilidad de articulos
+ * @param vWarehouseShipment Almacén de destino
+ */
+ DECLARE vDatedFrom DATE;
+ DECLARE vDatedTo DATETIME;
+ DECLARE vDatedReserve DATETIME;
+ DECLARE vDatedInventory DATE;
+
+ IF vDated < util.VN_CURDATE() THEN
+ LEAVE proc;
+ END IF;
+
+ CALL item_getStock (vWarehouseLanding, vDated, NULL);
+
+ -- Calcula algunos parámetros necesarios.
+ SET vDatedFrom = vDated;
+ SET vDatedTo = util.dayEnd (vDated + INTERVAL 4 DAY);
+ SELECT inventoried INTO vDatedInventory FROM config;
+ SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
+ FROM hedera.orderConfig;
+
+ -- Calcula el ultimo dia de vida para cada producto.
+ CREATE OR REPLACE TEMPORARY TABLE tItemRange
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT c.itemFk, MAX(t.landed) dated
+ FROM buy c
+ JOIN entry e ON c.entryFk = e.id
+ JOIN travel t ON t.id = e.travelFk
+ JOIN warehouse w ON w.id = t.warehouseInFk
+ WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
+ AND t.warehouseInFk = vWarehouseLanding
+ AND NOT e.isExcludedFromAvailable
+ AND NOT e.isRaid
+ GROUP BY c.itemFk;
+
+ -- Tabla con el ultimo dia de last_buy para cada producto
+ -- que hace un replace de la anterior.
+ CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
+
+ INSERT INTO tItemRange
+ SELECT t.itemFk, tr.landed
+ FROM tmp.buyUltimate t
+ JOIN buy b ON b.id = t.buyFk
+ JOIN entry e ON e.id = b.entryFk
+ JOIN travel tr ON tr.id = e.travelFk
+ LEFT JOIN tItemRange i ON t.itemFk = i.itemFk
+ WHERE t.warehouseFk = vWarehouseShipment
+ AND NOT e.isRaid
+ ON DUPLICATE KEY UPDATE tItemRange.dated = GREATEST(tItemRange.dated,
+ tr.landed);
+
+ CREATE OR REPLACE TEMPORARY TABLE tItemRangeLive
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT ir.itemFk, util.dayEnd(ir.dated + INTERVAL it.life DAY) dated
+ FROM tItemRange ir
+ JOIN item i ON i.id = ir.itemFk
+ JOIN itemType it ON it.id = i.typeFk
+ HAVING dated >= vDatedFrom OR dated IS NULL;
+
+ -- Calcula el ATP.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
+ (INDEX (itemFk,warehouseFk))
+ ENGINE = MEMORY
+ SELECT i.itemFk,
+ vWarehouseLanding warehouseFk,
+ i.shipped dated,
+ i.quantity
+ FROM itemTicketOut i
+ JOIN tItemRangeLive ir ON ir.itemFK = i.itemFk
+ WHERE i.shipped >= vDatedFrom
+ AND (ir.dated IS NULL OR i.shipped <= ir.dated)
+ AND i.warehouseFk = vWarehouseLanding
+ UNION ALL
+ SELECT b.itemFk,
+ vWarehouseLanding,
+ t.landed,
+ b.quantity
+ FROM buy b
+ JOIN entry e ON b.entryFk = e.id
+ JOIN travel t ON t.id = e.travelFk
+ JOIN tItemRangeLive ir ON ir.itemFk = b.itemFk
+ WHERE NOT e.isExcludedFromAvailable
+ AND b.quantity <> 0
+ AND NOT e.isRaid
+ AND t.warehouseInFk = vWarehouseLanding
+ AND t.landed >= vDatedFrom
+ AND (ir.dated IS NULL OR t.landed <= ir.dated)
+ UNION ALL
+ SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
+ FROM itemEntryOut i
+ JOIN tItemRangeLive ir ON ir.itemFk = i.itemFk
+ WHERE i.shipped >= vDatedFrom
+ AND (ir.dated IS NULL OR i.shipped <= ir.dated)
+ AND i.warehouseOutFk = vWarehouseLanding
+ UNION ALL
+ SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
+ FROM hedera.order_row r
+ JOIN hedera.`order` o ON o.id = r.order_id
+ JOIN tItemRangeLive ir ON ir.itemFk = r.item_id
+ WHERE r.shipment >= vDatedFrom
+ AND (ir.dated IS NULL OR r.shipment <= ir.dated)
+ AND r.warehouse_id = vWarehouseLanding
+ AND r.created >= vDatedReserve
+ AND NOT o.confirmed;
+
+ CALL item_getAtp(vDated);
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.availableTraslate
+ (PRIMARY KEY (item_id))
+ ENGINE = MEMORY
+ SELECT t.item_id, SUM(stock) available
+ FROM (
+ SELECT ti.itemFk item_id, stock
+ FROM tmp.itemList ti
+ JOIN tItemRange ir ON ir.itemFk = ti.itemFk
+ UNION ALL
+ SELECT itemFk, quantity
+ FROM tmp.itemAtp
+ ) t
+ GROUP BY t.item_id
+ HAVING available <> 0;
+
+ DROP TEMPORARY TABLE tmp.itemList, tItemRange, tItemRangeLive;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/balance_create.sql b/db/routines/vn/procedures/balance_create.sql
new file mode 100644
index 000000000..1b3b2162c
--- /dev/null
+++ b/db/routines/vn/procedures/balance_create.sql
@@ -0,0 +1,217 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`balance_create`(
+ IN vStartingMonth INT,
+ IN vEndingMonth INT,
+ IN vCompany INT,
+ IN vIsConsolidated BOOLEAN,
+ IN vInterGroupSalesIncluded BOOLEAN)
+BEGIN
+/**
+ * Crea un balance financiero para una empresa durante
+ * un período de tiempo determinado.
+ *
+ * @param vStartingMonth Mes de inicio del período
+ * @param vEndingMonth Mes de finalización del período
+ * @param vCompany Identificador de la empresa
+ * @param vIsConsolidated Indica si se trata de un balance consolidado
+ * @param vInterGroupSalesIncluded Indica si se incluyen las ventas del grupo
+ */
+ DECLARE intGAP INT DEFAULT 7;
+ DECLARE vYears INT DEFAULT 2;
+ DECLARE vYear TEXT;
+ DECLARE vOneYearAgo TEXT;
+ DECLARE vTwoYearsAgo TEXT;
+ DECLARE vQuery TEXT;
+ DECLARE vConsolidatedGroup INT;
+ DECLARE vStartingDate DATE DEFAULT '2020-01-01';
+ DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
+ DECLARE vStartingYear INT DEFAULT vCurYear - 2;
+ DECLARE vTable TEXT;
+
+ SET vTable = util.quoteIdentifier('balanceNestTree');
+ SET vYear = util.quoteIdentifier(vCurYear);
+ SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
+ SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
+
+ -- Solicitamos la tabla tmp.nest, como base para el balance.
+ DROP TEMPORARY TABLE IF EXISTS tmp.nest;
+
+ EXECUTE IMMEDIATE CONCAT(
+ 'CREATE TEMPORARY TABLE tmp.nest
+ SELECT node.id
+ ,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1),
+ node.name) name,
+ node.lft,
+ node.rgt,
+ COUNT(parent.id) - 1 depth,
+ CAST((node.rgt - node.lft - 1) / 2 AS DECIMAL) sons
+ FROM ', vTable, ' node,
+ ', vTable, ' parent
+ WHERE node.lft BETWEEN parent.lft AND parent.rgt
+ GROUP BY node.id
+ ORDER BY node.lft')
+ USING intGAP;
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balance
+ SELECT * FROM tmp.nest;
+
+ SELECT companyGroupFk INTO vConsolidatedGroup
+ FROM company
+ WHERE id = vCompany;
+
+ CREATE OR REPLACE TEMPORARY TABLE tCompanyReceiving
+ SELECT id companyFk
+ FROM company
+ WHERE id = vCompany
+ OR companyGroupFk = IF(vIsConsolidated, vConsolidatedGroup, NULL);
+
+ CREATE OR REPLACE TEMPORARY TABLE tCompanyIssuing
+ SELECT id companyFk
+ FROM supplier p;
+
+ IF NOT vInterGroupSalesIncluded THEN
+
+ DELETE ci
+ FROM tCompanyIssuing ci
+ JOIN company e on e.id = ci.companyFk
+ WHERE e.companyGroupFk = vConsolidatedGroup;
+
+ END IF;
+
+ -- Se calculan las facturas que intervienen,
+ -- para luego poder servir el desglose desde aqui.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balanceDetail
+ SELECT cr.companyFk receivingId,
+ ci.companyFk issuingId,
+ YEAR(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `year`,
+ MONTH(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `month`,
+ expenseFk,
+ SUM(taxableBase) amount
+ FROM invoiceIn r
+ JOIN invoiceInTax ri on ri.invoiceInFk = r.id
+ JOIN tCompanyReceiving cr on cr.companyFk = r.companyFk
+ JOIN tCompanyIssuing ci ON ci.companyFk = r.supplierFk
+ WHERE COALESCE(r.bookEntried, r.booked, r.issued) >= vStartingDate
+ AND r.isBooked
+ GROUP BY expenseFk, `year`, `month`, ci.companyFk, cr.companyFk;
+
+ INSERT INTO tmp.balanceDetail(
+ receivingId,
+ issuingId,
+ `year`,
+ `month`,
+ expenseFk,
+ amount)
+ SELECT em.companyFk,
+ em.companyFk,
+ `year`,
+ `month`,
+ expenseFk,
+ SUM(em.amount)
+ FROM expenseManual em
+ JOIN tCompanyReceiving er ON er.companyFk = em.companyFk
+ WHERE `year` >= vStartingYear
+ AND `month` BETWEEN vStartingMonth AND vEndingMonth
+ GROUP BY expenseFk, `year`, `month`, em.companyFk;
+
+ DELETE FROM tmp.balanceDetail
+ WHERE `month` < vStartingMonth
+ OR `month` > vEndingMonth;
+
+ -- Ahora el balance
+ EXECUTE IMMEDIATE CONCAT(
+ 'ALTER TABLE tmp.balance
+ ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
+ ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
+ ADD COLUMN ', vYear,' INT(10) NULL ,
+ ADD COLUMN expenseFk VARCHAR(10) NULL,
+ ADD COLUMN expenseName VARCHAR(45) NULL');
+
+ -- Añadimos los gastos, para facilitar el formulario
+ UPDATE tmp.balance b
+ JOIN balanceNestTree bnt on bnt.id = b.id
+ JOIN expense e ON e.id = bnt.expenseFk COLLATE utf8_general_ci
+ SET b.expenseFk = e.id COLLATE utf8_general_ci,
+ b.expenseName = e.name COLLATE utf8_general_ci ;
+
+ -- Rellenamos los valores de primer nivel, los que corresponden
+ -- a los gastos simples.
+ WHILE vYears >= 0 DO
+ SET vQuery = CONCAT(
+ 'UPDATE tmp.balance b
+ JOIN (
+ SELECT expenseFk, SUM(amount) amount
+ FROM tmp.balanceDetail
+ WHERE year = ?
+ GROUP BY expenseFk
+ ) sub on sub.expenseFk = b.expenseFk COLLATE utf8_general_ci
+ SET ', util.quoteIdentifier(vCurYear - vYears), ' = - amount');
+
+ EXECUTE IMMEDIATE vQuery
+ USING vCurYear - vYears;
+
+ SET vYears = vYears - 1;
+ END WHILE;
+
+ -- Añadimos las ventas.
+ EXECUTE IMMEDIATE CONCAT(
+ 'UPDATE tmp.balance b
+ JOIN (
+ SELECT SUM(IF(year = ?, venta, 0)) y2,
+ SUM(IF(year = ?, venta, 0)) y1,
+ SUM(IF(year = ?, venta, 0)) y0,
+ c.Gasto
+ FROM bs.ventas_contables c
+ JOIN tCompanyReceiving cr ON cr.companyFk = c.empresa_id
+ WHERE month BETWEEN ? AND ?
+ GROUP BY c.Gasto
+ ) sub ON sub.gasto = b.expenseFk COLLATE utf8_general_ci
+ SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
+ b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
+ b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
+ USING vCurYear-2,
+ vCurYear-1,
+ vCurYear,
+ vStartingMonth,
+ vEndingMonth;
+
+ -- Ventas intra grupo.
+ IF NOT vInterGroupSalesIncluded THEN
+
+ SELECT lft, rgt INTO @groupLft, @groupRgt
+ FROM tmp.balance b
+ WHERE TRIM(b.`name`) = 'Grupo';
+
+ DELETE
+ FROM tmp.balance
+ WHERE lft BETWEEN @groupLft AND @groupRgt;
+
+ END IF;
+
+ -- Rellenamos el valor de los padres con la suma de los hijos.
+ CREATE OR REPLACE TEMPORARY TABLE tmp.balance_aux
+ SELECT * FROM tmp.balance;
+
+ EXECUTE IMMEDIATE
+ CONCAT('UPDATE tmp.balance b
+ JOIN (
+ SELECT b1.id,
+ b1.name,
+ SUM(b2.', vYear,') thisYear,
+ SUM(b2.', vOneYearAgo,') oneYearAgo,
+ SUM(b2.', vTwoYearsAgo,') twoYearsAgo
+ FROM tmp.nest b1
+ JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
+ GROUP BY b1.id
+ )sub ON sub.id = b.id
+ SET b.', vYear, ' = thisYear,
+ b.', vOneYearAgo, ' = oneYearAgo,
+ b.', vTwoYearsAgo, ' = twoYearsAgo');
+
+ SELECT *, CONCAT('',IFNULL(expenseFk,'')) newgasto
+ FROM tmp.balance;
+
+ DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving, tCompanyIssuing;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/buy_chekItem.sql b/db/routines/vn/procedures/buy_chekItem.sql
index 0a0f00345..e8cf05fed 100644
--- a/db/routines/vn/procedures/buy_chekItem.sql
+++ b/db/routines/vn/procedures/buy_chekItem.sql
@@ -19,10 +19,10 @@ BEGIN
AND a.hasWeightVolumetric
LIMIT 1;
- DROP TEMPORARY TABLE IF EXISTS tmp.buysToCheck;
+ DROP TEMPORARY TABLE tmp.buysToCheck;
- IF hasVolumetricAgency THEN
- CALL util.throw('Some purchase line has an item without size or weight per stem in the volumetric agency.');
+ IF hasVolumetricAgency THEN
+ CALL util.throw('Item lacks size/weight in purchase line at agency');
END IF;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/collection_assign.sql b/db/routines/vn/procedures/collection_assign.sql
index 49b4eb7bb..f6000e87d 100644
--- a/db/routines/vn/procedures/collection_assign.sql
+++ b/db/routines/vn/procedures/collection_assign.sql
@@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_assign`(
vUserFk INT,
OUT vCollectionFk INT
)
-proc:BEGIN
+BEGIN
/**
* Comprueba si existen colecciones libres que se ajustan
* al perfil del usuario y le asigna la más antigua.
@@ -13,11 +13,16 @@ proc:BEGIN
* @param vCollectionFk Id de colección
*/
DECLARE vHasTooMuchCollections BOOL;
- DECLARE vLockTime INT DEFAULT 15;
+ DECLARE vItemPackingTypeFk VARCHAR(1);
+ DECLARE vWarehouseFk INT;
+ DECLARE vLockName VARCHAR(215);
+ DECLARE vLockTime INT DEFAULT 30;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
- DO RELEASE_LOCK('collection_assign');
+ IF vLockName IS NOT NULL THEN
+ DO RELEASE_LOCK(vLockName);
+ END IF;
RESIGNAL;
END;
@@ -28,17 +33,27 @@ proc:BEGIN
SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0
INTO vHasTooMuchCollections
FROM tCollection
- JOIN productionConfig pc ;
+ JOIN productionConfig pc;
DROP TEMPORARY TABLE tCollection;
IF vHasTooMuchCollections THEN
CALL util.throw('Hay colecciones pendientes');
- LEAVE proc;
END IF;
- IF NOT GET_LOCK('collection_assign',vLockTime) THEN
- LEAVE proc;
+ SELECT warehouseFk, itemPackingTypeFk
+ INTO vWarehouseFk, vItemPackingTypeFk
+ FROM operator
+ WHERE workerFk = vUserFk;
+
+ SET vLockName = CONCAT_WS('/',
+ 'collection_assign',
+ 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
@@ -90,6 +105,6 @@ proc:BEGIN
SET workerFk = vUserFk
WHERE id = vCollectionFk;
- DO RELEASE_LOCK('collection_assign');
+ DO RELEASE_LOCK(vLockName);
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql
index 1292707af..f3767ddf3 100644
--- a/db/routines/vn/procedures/collection_new.sql
+++ b/db/routines/vn/procedures/collection_new.sql
@@ -1,6 +1,6 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`collection_new`(vUserFk INT, OUT vCollectionFk INT)
-proc:BEGIN
+BEGIN
/**
* Genera colecciones de tickets sin asignar trabajador.
*
@@ -26,7 +26,7 @@ proc:BEGIN
DECLARE vHasUniqueCollectionTime BOOL;
DECLARE vDone INT DEFAULT FALSE;
DECLARE vLockName VARCHAR(215);
- DECLARE vLockTime INT DEFAULT 15;
+ DECLARE vLockTime INT DEFAULT 30;
DECLARE vFreeWagonFk INT;
DECLARE c1 CURSOR FOR
@@ -86,7 +86,7 @@ proc:BEGIN
);
IF NOT GET_LOCK(vLockName, vLockTime) THEN
- LEAVE proc;
+ CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
END IF;
-- Se prepara el tren, con tantos vagones como sea necesario.
diff --git a/db/routines/vn/procedures/company_getSuppliersDebt.sql b/db/routines/vn/procedures/company_getSuppliersDebt.sql
index 50c64669c..6335ccbe3 100644
--- a/db/routines/vn/procedures/company_getSuppliersDebt.sql
+++ b/db/routines/vn/procedures/company_getSuppliersDebt.sql
@@ -188,7 +188,7 @@ BEGIN
FROM tPendingDuedates vp
LEFT JOIN supplier s ON s.id = vp.supplierFk
LEFT JOIN client c ON c.fi = s.nif
- JOIN clientRisk cr ON cr.clientFk = c.id
+ LEFT JOIN clientRisk cr ON cr.clientFk = c.id
AND cr.companyFk = vp.companyFk
LEFT JOIN supplierAccount sa ON sa.supplierFk = s.id
LEFT JOIN bankEntity be ON be.id = sa.bankEntityFk
diff --git a/db/routines/vn/procedures/creditInsurance_getRisk.sql b/db/routines/vn/procedures/creditInsurance_getRisk.sql
new file mode 100644
index 000000000..8ddb9d721
--- /dev/null
+++ b/db/routines/vn/procedures/creditInsurance_getRisk.sql
@@ -0,0 +1,42 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
+BEGIN
+/**
+* Devuelve el riesgo de los clientes que estan asegurados
+*/
+ CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
+ (PRIMARY KEY (clientFk))
+ ENGINE = MEMORY
+ SELECT * FROM (
+ SELECT cc.client clientFk, ci.grade
+ FROM creditClassification cc
+ JOIN creditInsurance ci ON cc.id = ci.creditClassification
+ WHERE dateEnd IS NULL
+ ORDER BY ci.creationDate DESC
+ LIMIT 10000000000000000000) t1
+ GROUP BY clientFk;
+
+ CALL client_getDebt(util.VN_CURDATE());
+
+ SELECT c.id,
+ c.name,
+ c.credit clientCredit,
+ c.creditInsurance solunion,
+ CAST(r.risk AS DECIMAL(10,0)) risk,
+ CAST(c.creditInsurance - r.risk AS DECIMAL(10,0)) riskAlive,
+ cac.invoiced billedAnnually,
+ c.dueDay,
+ cgd.grade,
+ c2.country
+ FROM tmp.clientGetDebt cgd
+ LEFT JOIN tmp.risk r ON r.clientFk = cgd.clientFk
+ JOIN client c ON c.id = cgd.clientFk
+ JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk
+ JOIN country c2 ON c2.id = c.countryFk
+ GROUP BY c.id;
+
+ DROP TEMPORARY TABLE
+ tmp.risk,
+ tmp.clientGetDebt;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/entry_checkBooked.sql b/db/routines/vn/procedures/entry_checkBooked.sql
index 3ca8c9642..7ee1fee22 100644
--- a/db/routines/vn/procedures/entry_checkBooked.sql
+++ b/db/routines/vn/procedures/entry_checkBooked.sql
@@ -15,7 +15,7 @@ BEGIN
FROM `entry`
WHERE id = vSelf;
- IF vIsBooked AND NOT @isModeInventory THEN
+ IF vIsBooked AND NOT IFNULL(@isModeInventory, FALSE) THEN
CALL util.throw('Entry is already booked');
END IF;
END$$
diff --git a/db/routines/vn/procedures/entry_getTransfer.sql b/db/routines/vn/procedures/entry_getTransfer.sql
index b82f273ae..165c87dc7 100644
--- a/db/routines/vn/procedures/entry_getTransfer.sql
+++ b/db/routines/vn/procedures/entry_getTransfer.sql
@@ -68,19 +68,19 @@ BEGIN
AND v.`visible`
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
- CALL vn2008.availableTraslate(vWarehouseOut, vDateShipped, NULL);
+ CALL available_traslate(vWarehouseOut, vDateShipped, NULL);
INSERT INTO tItem(itemFk, available)
SELECT a.item_id, a.available
- FROM vn2008.availableTraslate a
+ FROM tmp.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE available = a.available;
- CALL vn2008.availableTraslate(vWarehouseIn, vDateLanded, vWarehouseOut);
+ CALL available_traslate(vWarehouseIn, vDateLanded, vWarehouseOut);
INSERT INTO tItem(itemFk, availableLanding)
SELECT a.item_id, a.available
- FROM vn2008.availableTraslate a
+ FROM tmp.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE availableLanding = a.available;
ELSE
diff --git a/db/routines/vn/procedures/entry_recalc.sql b/db/routines/vn/procedures/entry_recalc.sql
index 2410d380d..b426a9b5b 100644
--- a/db/routines/vn/procedures/entry_recalc.sql
+++ b/db/routines/vn/procedures/entry_recalc.sql
@@ -26,7 +26,7 @@ BEGIN
LEAVE l;
END IF;
- CALL vn2008.buy_tarifas_entry(vEntryFk);
+ CALL buy_recalcPricesByEntry(vEntryFk);
END LOOP;
CLOSE vCur;
diff --git a/db/routines/vn/procedures/entry_updateComission.sql b/db/routines/vn/procedures/entry_updateComission.sql
index 1bef79bd3..ceed20d78 100644
--- a/db/routines/vn/procedures/entry_updateComission.sql
+++ b/db/routines/vn/procedures/entry_updateComission.sql
@@ -9,6 +9,14 @@ BEGIN
DECLARE vCurrencyName VARCHAR(25);
DECLARE vComission INT;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ START TRANSACTION;
+
CREATE OR REPLACE TEMPORARY TABLE tmp.recalcEntryCommision
SELECT e.id
FROM vn.entry e
@@ -28,12 +36,15 @@ BEGIN
WHERE id = vCurrency;
CALL entry_recalc();
+
+ COMMIT;
+
SELECT util.notification_send(
'entry-update-comission',
JSON_OBJECT('currencyName', vCurrencyName, 'referenceCurrent', vComission),
NULL
);
- DROP TEMPORARY TABLE tmp.recalcEntryCommision;
+ DROP TEMPORARY TABLE tmp.recalcEntryCommision;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/invoiceFromAddress.sql b/db/routines/vn/procedures/invoiceFromAddress.sql
index bde7afd8c..2879460ce 100644
--- a/db/routines/vn/procedures/invoiceFromAddress.sql
+++ b/db/routines/vn/procedures/invoiceFromAddress.sql
@@ -8,12 +8,15 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS `tmp`.`ticketToInvoice`;
- CREATE TEMPORARY TABLE `tmp.``ticketToInvoice`
+ CREATE TEMPORARY TABLE `tmp`.`ticketToInvoice`
(PRIMARY KEY (`id`))
- ENGINE = MEMORY
- SELECT Id_Ticket id FROM vn2008.Tickets WHERE (Fecha BETWEEN vMinDateTicket
- AND vMaxTicketDate) AND Id_Consigna = vAddress
- AND Factura IS NULL AND empresa_id = vCompany;
+ ENGINE = MEMORY
+ SELECT id
+ FROM ticket
+ WHERE (shipped BETWEEN vMinDateTicket AND vMaxTicketDate)
+ AND addressFk = vAddress
+ AND refFk IS NULL
+ AND companyFk = vCompany;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
index 5a53b7543..631b8f31c 100644
--- a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
+++ b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql
@@ -4,16 +4,9 @@ BEGIN
DECLARE vRate DOUBLE DEFAULT 1;
DECLARE vDated DATE;
DECLARE vExpenseFk VARCHAR(10);
- DECLARE vIsBooked BOOLEAN DEFAULT FALSE;
- SELECT isBooked INTO vIsBooked
- FROM invoiceIn ii
- WHERE id = vInvoiceInFk;
+ CALL invoiceIn_checkBooked(vInvoiceInFk);
- IF vIsBooked THEN
- CALL util.throw('A booked invoice cannot be modified');
- END IF;
-
SELECT MAX(rr.dated) INTO vDated
FROM referenceRate rr
JOIN invoiceIn ii ON ii.id = vInvoiceInFk
diff --git a/db/routines/vn/procedures/itemShelving_addList.sql b/db/routines/vn/procedures/itemShelving_addList.sql
index c07dd985c..130007de5 100644
--- a/db/routines/vn/procedures/itemShelving_addList.sql
+++ b/db/routines/vn/procedures/itemShelving_addList.sql
@@ -39,7 +39,7 @@ BEGIN
UPDATE vn.itemShelving
SET isChecked = vIsChecked
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
- AND itemFk = vItemFk;
+ AND itemFk = vItemFk AND isChecked IS NULL;
SET vCounter = vCounter + 1;
END WHILE;
diff --git a/db/routines/vn/procedures/item_getBalance.sql b/db/routines/vn/procedures/item_getBalance.sql
index 95596d3bc..11af7e570 100644
--- a/db/routines/vn/procedures/item_getBalance.sql
+++ b/db/routines/vn/procedures/item_getBalance.sql
@@ -155,27 +155,28 @@ BEGIN
SET @currentLineFk := 0;
SET @shipped := '';
- SELECT DATE(@shipped:= shipped) shipped,
- alertLevel,
- stateName,
- origin,
- reference,
- clientFk,
- name,
- `in` invalue,
- `out`,
- @a := @a + IFNULL(`in`, 0) - IFNULL(`out`, 0) balance,
+ SELECT DATE(@shipped:= t.shipped) shipped,
+ t.alertLevel,
+ t.stateName,
+ t.origin,
+ t.reference,
+ t.clientFk,
+ t.name,
+ t.`in` invalue,
+ t.`out`,
+ @a := @a + IFNULL(t.`in`, 0) - IFNULL(t.`out`, 0) balance,
@currentLineFk := IF (@shipped < util.VN_CURDATE()
- OR (@shipped = util.VN_CURDATE() AND (isPicked OR a.`code` >= 'ON_PREPARATION')),
- lineFk,
+ OR (@shipped = util.VN_CURDATE() AND (t.isPicked OR a.`code` >= 'ON_PREPARATION')),
+ t.lineFk,
@currentLineFk) lastPreparedLineFk,
- isTicket,
- lineFk,
- isPicked,
- clientType,
- claimFk
- FROM tItemDiary
- LEFT JOIN alertLevel a ON a.id = tItemDiary.alertLevel;
+ t.isTicket,
+ t.lineFk,
+ t.isPicked,
+ t.clientType,
+ t.claimFk,
+ t.`order`
+ FROM tItemDiary t
+ LEFT JOIN alertLevel a ON a.id = t.alertLevel;
ELSE
SELECT SUM(`in`) - SUM(`out`) INTO @a
@@ -197,7 +198,8 @@ BEGIN
0 lineFk,
0 isPicked,
0 clientType,
- 0 claimFk
+ 0 claimFk,
+ NULL `order`
UNION ALL
SELECT shipped,
alertlevel,
@@ -213,7 +215,8 @@ BEGIN
lineFk,
isPicked,
clientType,
- claimFk
+ claimFk,
+ `order`
FROM tItemDiary
WHERE shipped >= vDate;
END IF;
diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql
index 1da60cf70..6f275de86 100644
--- a/db/routines/vn/procedures/item_getSimilar.sql
+++ b/db/routines/vn/procedures/item_getSimilar.sql
@@ -65,7 +65,8 @@ BEGIN
WHEN b.groupingMode = 'packing' THEN b.packing
ELSE 1
END AS minQuantity,
- iss.visible located
+ iss.visible located,
+ b.price2
FROM vn.item i
JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vCalcFk
diff --git a/db/routines/vn/procedures/recipe_Cook.sql b/db/routines/vn/procedures/recipe_Cook.sql
deleted file mode 100644
index 9371ef820..000000000
--- a/db/routines/vn/procedures/recipe_Cook.sql
+++ /dev/null
@@ -1,74 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`recipe_Cook`(vItemFk INT, vBunchesQuantity INT, vDate DATE)
-BEGIN
-
- DECLARE vCalc INT;
- DECLARE vWarehouseFk INT DEFAULT 1; -- Silla FV
-
- SET @element := '';
- SET @counter := 0;
-
- CALL cache.available_refresh(vCalc, FALSE, vWarehouseFk, vDate);
-
- DROP TEMPORARY TABLE IF EXISTS tmp.recipeCook;
-
- CREATE TEMPORARY TABLE tmp.recipeCook
- SELECT *,
- @counter := IF(@element = element COLLATE utf8_general_ci , @counter + 1, 1) as counter,
- @element := element COLLATE utf8_general_ci
- FROM
- (
- SELECT i.id itemFk,
- CONCAT(i.longName, ' (ref: ',i.id,')') longName,
- i.size,
- i.inkFk,
- a.available,
- r.element,
- vBunchesQuantity * r.quantity as quantity,
- r.itemFk as bunchItemFk,
- IFNULL((i.inkFk = r.inkFk ) ,0)
- + IFNULL((i.size = r.size) ,0)
- + IFNULL((i.name LIKE CONCAT('%',r.name,'%')) ,0)
- + IFNULL((i.longName LIKE CONCAT('%',r.longName,'%')),0)
- + IFNULL((i.typeFk = r.typeFk),0) as matches,
- i.typeFk,
- rl.previousSelected
- FROM vn.recipe r
- JOIN vn.item i ON (IFNULL(i.name LIKE CONCAT('%',r.name,'%'), 0)
- OR IFNULL(i.longName LIKE CONCAT('%',r.longName,'%'),0))
- OR i.typeFk <=> r.typeFk
- JOIN cache.available a ON a.item_id = i.id AND a.calc_id = vCalc
- LEFT JOIN (SELECT recipe_ItemFk, element as log_element, selected_ItemFk, count(*) as previousSelected
- FROM vn.recipe_log
- GROUP BY recipe_ItemFk, element, selected_ItemFk) rl ON rl.recipe_ItemFk = r.itemFk
- AND rl.log_element = r.element
- AND rl.selected_ItemFk = i.id
- WHERE r.itemFk = vItemFk
- AND a.available > vBunchesQuantity * r.quantity
- UNION ALL
- SELECT 100 itemFk,
- CONCAT('? ',r.element,' ',IFNULL(r.size,''),' ',IFNULL(r.inkFk,'')) as longName,
- NULL,
- NULL,
- 0,
- r.element,
- vBunchesQuantity * r.quantity as quantity,
- r.itemFk as bunchItemFk,
- -1 as matches,
- r.typeFk,
- NULL
- FROM vn.recipe r
- WHERE r.itemFk = vItemFk
- GROUP BY r.element
- ) sub
-
- ORDER BY element, matches DESC, previousSelected DESC;
-
- SELECT *
- FROM tmp.recipeCook
- WHERE counter < 6
- OR itemFk = 100
- ;
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/ticketCalculateClon.sql b/db/routines/vn/procedures/ticketCalculateClon.sql
index 7ded84f45..a56491590 100644
--- a/db/routines/vn/procedures/ticketCalculateClon.sql
+++ b/db/routines/vn/procedures/ticketCalculateClon.sql
@@ -29,7 +29,7 @@ BEGIN
FROM sale
WHERE ticketFk = vTicketNew AND price > 0;
- CALL sale_recalcComponent('imbalance');
+ CALL sale_recalcComponent('buyerDiscount');
DROP TEMPORARY TABLE IF EXISTS tmp.recalculateSales;
diff --git a/db/routines/vn/procedures/ticket_canAdvance.sql b/db/routines/vn/procedures/ticket_canAdvance.sql
index 8852a3010..d1ca7b5e2 100644
--- a/db/routines/vn/procedures/ticket_canAdvance.sql
+++ b/db/routines/vn/procedures/ticket_canAdvance.sql
@@ -8,38 +8,14 @@ BEGIN
* @param vDateToAdvance Fecha a cuando se quiere adelantar.
* @param vWarehouseFk Almacén
*/
- DECLARE vDateInventory DATE;
- SELECT inventoried INTO vDateInventory FROM config;
-
- CREATE OR REPLACE TEMPORARY TABLE tmp.stock
- (itemFk INT PRIMARY KEY,
- amount INT)
- ENGINE = MEMORY;
-
- INSERT INTO tmp.stock(itemFk, amount)
- SELECT itemFk, SUM(quantity) amount FROM
- (
- SELECT itemFk, quantity
- FROM itemTicketOut
- WHERE shipped >= vDateInventory
- AND shipped < vDateFuture
- AND warehouseFk = vWarehouseFk
- UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryIn
- WHERE landed >= vDateInventory
- AND landed <= vDateToAdvance
- AND isVirtualStock = FALSE
- AND warehouseInFk = vWarehouseFk
- UNION ALL
- SELECT itemFk, quantity
- FROM itemEntryOut
- WHERE shipped >= vDateInventory
- AND shipped < vDateFuture
- AND warehouseOutFk = vWarehouseFk
- ) t
- GROUP BY itemFk HAVING amount != 0;
+ CALL item_getStock(vWarehouseFk, vDateToAdvance, NULL);
+ CALL item_getMinacum(
+ vWarehouseFk,
+ vDateToAdvance,
+ DATEDIFF(DATE_SUB(vDateFuture, INTERVAL 1 DAY), vDateToAdvance),
+ NULL
+ );
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
@@ -87,7 +63,7 @@ BEGIN
count(s.id) futureLines,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
- SUM((s.quantity <= IFNULL(st.amount,0))) hasStock,
+ SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock,
z.id futureZoneFk,
z.name futureZoneName,
st.classColor,
@@ -107,7 +83,9 @@ BEGIN
JOIN agencyMode am ON t.agencyModeFk = am.id
JOIN zone z ON t.zoneFk = z.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
- LEFT JOIN tmp.stock st ON st.itemFk = i.id
+ LEFT JOIN tmp.itemMinacum im ON im.itemFk = i.id
+ AND im.warehouseFk = vWarehouseFk
+ LEFT JOIN tmp.itemList il ON il.itemFk = i.id
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
AND t.warehouseFk = vWarehouseFk
GROUP BY t.id
@@ -146,6 +124,8 @@ BEGIN
) dest ON dest.addressFk = origin.addressFk
WHERE origin.hasStock;
- DROP TEMPORARY TABLE tmp.stock;
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.itemList,
+ tmp.itemMinacum;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_doRecalc.sql b/db/routines/vn/procedures/ticket_doRecalc.sql
deleted file mode 100644
index 1dd2a05cb..000000000
--- a/db/routines/vn/procedures/ticket_doRecalc.sql
+++ /dev/null
@@ -1,53 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doRecalc`()
-proc: BEGIN
-/**
- * Recalculates modified ticket.
- */
- DECLARE vDone BOOL;
- DECLARE vTicketFk INT;
-
- DECLARE cCur CURSOR FOR
- SELECT DISTINCT ticketFk FROM tTicket;
-
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
-
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('vn.ticket_doRecalc');
- ROLLBACK;
- RESIGNAL;
- END;
-
- IF !GET_LOCK('vn.ticket_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- DROP TEMPORARY TABLE IF EXISTS tTicket;
- CREATE TEMPORARY TABLE tTicket
- ENGINE = MEMORY
- SELECT id, ticketFk FROM ticketRecalc;
-
- OPEN cCur;
-
- myLoop: LOOP
- SET vDone = FALSE;
- FETCH cCur INTO vTicketFk;
-
- IF vDone THEN
- LEAVE myLoop;
- END IF;
-
- CALL ticket_recalc(vTicketFk, NULL);
- END LOOP;
-
- CLOSE cCur;
-
- DELETE tr FROM ticketRecalc tr JOIN tTicket t ON tr.id = t.id;
-
- DROP TEMPORARY TABLE tTicket;
-
- DO RELEASE_LOCK('vn.ticket_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_getMovable.sql b/db/routines/vn/procedures/ticket_getMovable.sql
index eee165538..512151bd4 100644
--- a/db/routines/vn/procedures/ticket_getMovable.sql
+++ b/db/routines/vn/procedures/ticket_getMovable.sql
@@ -21,7 +21,7 @@ BEGIN
WHERE t.id = vTicketFk;
-- Añadimos un dia más para calcular el stock hasta vNewShipped inclusive
- CALL item_getStock(vWarehouseFk, DATE_ADD(vNewShipped, INTERVAL 1 DAY), NULL);
+ CALL item_getStock(vWarehouseFk, vNewShipped, NULL);
CALL item_getMinacum(
vWarehouseFk,
vNewShipped,
@@ -38,7 +38,7 @@ BEGIN
s.discount,
i.image,
i.subName,
- il.stock + IFNULL(im.amount, 0) AS movable
+ IFNULL(il.stock,0) + IFNULL(im.amount, 0) AS movable
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@@ -48,8 +48,8 @@ BEGIN
WHERE t.id = vTicketFk;
DROP TEMPORARY TABLE IF EXISTS
- tmp.itemList,
- tmp.itemMinacum;
+ tmp.itemList,
+ tmp.itemMinacum;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_recalcByScope.sql b/db/routines/vn/procedures/ticket_recalcByScope.sql
new file mode 100644
index 000000000..41105fe23
--- /dev/null
+++ b/db/routines/vn/procedures/ticket_recalcByScope.sql
@@ -0,0 +1,40 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_recalcByScope`(
+ vScope VARCHAR(255),
+ vId INT
+)
+BEGIN
+/**
+ * Recalculates tickets in an scope.
+ *
+ * @param vScope The scope name
+ * @param vId The scope id
+ */
+ DECLARE vDone BOOL;
+ DECLARE vTicketFk INT;
+
+ DECLARE cTickets CURSOR FOR
+ SELECT id FROM ticket
+ WHERE refFk IS NULL
+ AND ((vScope = 'client' AND clientFk = vId)
+ OR (vScope = 'address' AND addressFk = vId));
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND
+ SET vDone = TRUE;
+
+ OPEN cTickets;
+
+ myLoop: LOOP
+ SET vDone = FALSE;
+ FETCH cTickets INTO vTicketFk;
+
+ IF vDone THEN
+ LEAVE myLoop;
+ END IF;
+
+ CALL ticket_recalc(vTicketFk, NULL);
+ END LOOP;
+
+ CLOSE cTickets;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_requestRecalc.sql b/db/routines/vn/procedures/ticket_requestRecalc.sql
deleted file mode 100644
index 6636e4c0f..000000000
--- a/db/routines/vn/procedures/ticket_requestRecalc.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recalculate the ticket total.
- *
- * @param vSelf The ticket identifier
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- INSERT INTO ticketRecalc SET ticketFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_doRecalc.sql b/db/routines/vn/procedures/travel_doRecalc.sql
deleted file mode 100644
index 5d877174c..000000000
--- a/db/routines/vn/procedures/travel_doRecalc.sql
+++ /dev/null
@@ -1,34 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_doRecalc`()
-proc: BEGIN
-/**
-* Recounts the number of entries of changed travels.
-*/
- DECLARE vTravelFk INT;
-
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- DO RELEASE_LOCK('vn.ticket_doRecalc');
- END;
-
- IF !GET_LOCK('vn.travel_doRecalc', 0) THEN
- LEAVE proc;
- END IF;
-
- CREATE OR REPLACE TEMPORARY TABLE tTravel
- ENGINE = MEMORY
- SELECT travelFk FROM travelRecalc;
-
- UPDATE travel t
- JOIN tTravel tt ON tt.travelFk = t.id
- SET t.totalEntries = (
- SELECT COUNT(e.id)
- FROM entry e
- WHERE e.travelFk = t.id
- );
-
- DELETE tr FROM travelRecalc tr JOIN tTravel t ON tr.travelFk = t.travelFk;
- DROP TEMPORARY TABLE tTravel;
- DO RELEASE_LOCK('vn.travel_doRecalc');
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_recalc.sql b/db/routines/vn/procedures/travel_recalc.sql
new file mode 100644
index 000000000..46d1cdc4f
--- /dev/null
+++ b/db/routines/vn/procedures/travel_recalc.sql
@@ -0,0 +1,17 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_recalc`(vSelf INT)
+proc: BEGIN
+/**
+ * Updates the number of entries assigned to the travel.
+ *
+ * @param vSelf The travel id
+ */
+ UPDATE travel
+ SET totalEntries = (
+ SELECT COUNT(id)
+ FROM entry
+ WHERE travelFk = vSelf
+ )
+ WHERE id = vSelf;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/travel_requestRecalc.sql b/db/routines/vn/procedures/travel_requestRecalc.sql
deleted file mode 100644
index 5797f2397..000000000
--- a/db/routines/vn/procedures/travel_requestRecalc.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_requestRecalc`(vSelf INT)
-proc: BEGIN
-/**
- * Adds a request to recount the number of entries for the travel.
- *
- * @param vSelf The travel reference
- */
- IF vSelf IS NULL THEN
- LEAVE proc;
- END IF;
-
- INSERT IGNORE INTO travelRecalc SET travelFk = vSelf;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/workerTimeControl_clockIn.sql b/db/routines/vn/procedures/workerTimeControl_clockIn.sql
index e58528487..a1ce53bc2 100644
--- a/db/routines/vn/procedures/workerTimeControl_clockIn.sql
+++ b/db/routines/vn/procedures/workerTimeControl_clockIn.sql
@@ -121,15 +121,17 @@ BEGIN
CALL util.throw(vErrorCode);
END IF;
+
-- DIRECCION CORRECTA
CALL workerTimeControl_direction(vWorkerFk, vTimed);
IF (SELECT
- IF(IF(option1 IN ('inMiddle', 'outMiddle'),
+ IF((IF(option1 IN ('inMiddle', 'outMiddle'),
'middle',
option1) <> vDirection
AND IF(option2 IN ('inMiddle', 'outMiddle'),
'middle',
- IFNULL(option2, '')) <> vDirection,
+ IFNULL(option2, '')) <> vDirection)
+ OR (option1 IS NULL AND option2 IS NULL),
TRUE ,
FALSE)
FROM tmp.workerTimeControlDirection
@@ -137,12 +139,17 @@ BEGIN
SET vIsError = TRUE;
END IF;
- DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
+
IF vIsError THEN
SET vErrorCode = 'WRONG_DIRECTION';
+ IF(SELECT option1 IS NULL AND option2 IS NULL
+ FROM tmp.workerTimeControlDirection) THEN
+
+ SET vErrorCode = 'DAY_MAX_TIME';
+ END IF;
CALL util.throw(vErrorCode);
END IF;
-
+ DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
-- FICHADAS IMPARES
SELECT timed INTO vLastIn
FROM workerTimeControl
diff --git a/db/routines/vn/triggers/address_afterUpdate.sql b/db/routines/vn/triggers/address_afterUpdate.sql
index 6160aa2a5..ab5e03882 100644
--- a/db/routines/vn/triggers/address_afterUpdate.sql
+++ b/db/routines/vn/triggers/address_afterUpdate.sql
@@ -5,36 +5,32 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`address_afterUpdate`
BEGIN
-- Recargos de equivalencia distintos implican facturacion por consignatario
IF NEW.isEqualizated != OLD.isEqualizated THEN
- IF
+ IF
(SELECT COUNT(*) FROM
(
SELECT DISTINCT (isEqualizated = FALSE) as Equ
- FROM address
+ FROM address
WHERE clientFk = NEW.clientFk
) t1
) > 1
- THEN
- UPDATE client
+ THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
END IF;
END IF;
+
IF NEW.isDefaultAddress AND NEW.isActive = FALSE THEN
CALL util.throw ('Cannot desactivate the default address');
END IF;
- IF NOT (NEW.isEqualizated <=> OLD.isEqualizated) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.addressFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
- IF (NEW.clientFk <> OLD.clientFk OR NEW.isActive <> OLD.isActive OR NOT (NEW.provinceFk <=> OLD.provinceFk))
- AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
- UPDATE client
+ IF (NEW.clientFk <> OLD.clientFk
+ OR NEW.isActive <> OLD.isActive
+ OR NOT (NEW.provinceFk <=> OLD.provinceFk))
+ AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
+ UPDATE client
SET hasToInvoiceByAddress = TRUE
WHERE id = NEW.clientFk;
- END IF;
+ END IF;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/agency_beforeInsert.sql b/db/routines/vn/triggers/agency_beforeInsert.sql
new file mode 100644
index 000000000..8ff3958e1
--- /dev/null
+++ b/db/routines/vn/triggers/agency_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`agency_beforeInsert`
+ BEFORE INSERT ON `agency`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterDelete.sql b/db/routines/vn/triggers/buy_afterDelete.sql
index 2fcb0852d..5daaefa33 100644
--- a/db/routines/vn/triggers/buy_afterDelete.sql
+++ b/db/routines/vn/triggers/buy_afterDelete.sql
@@ -3,19 +3,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`buy_afterDelete`
AFTER DELETE ON `buy`
FOR EACH ROW
trig: BEGIN
- DECLARE vValues VARCHAR(255);
-
IF @isModeInventory OR @isTriggerDisabled THEN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NULL, OLD.id);
-
INSERT INTO entryLog
SET `action` = 'delete',
`changedModel` = 'Buy',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterInsert.sql b/db/routines/vn/triggers/buy_afterInsert.sql
index 25682f1bb..b39842d35 100644
--- a/db/routines/vn/triggers/buy_afterInsert.sql
+++ b/db/routines/vn/triggers/buy_afterInsert.sql
@@ -7,8 +7,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- CALL stock.log_add('buy', NEW.id, NULL);
-
CALL buy_afterUpsert(NEW.id);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/buy_afterUpdate.sql b/db/routines/vn/triggers/buy_afterUpdate.sql
index 9866f5bb8..fc7ca152d 100644
--- a/db/routines/vn/triggers/buy_afterUpdate.sql
+++ b/db/routines/vn/triggers/buy_afterUpdate.sql
@@ -12,14 +12,6 @@ trig: BEGIN
LEAVE trig;
END IF;
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.entryFk <=> OLD.entryFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created) THEN
- CALL stock.log_add('buy', NEW.id, OLD.id);
- END IF;
-
CALL buy_afterUpsert(NEW.id);
SELECT w.isBuyerToBeEmailed, t.landed
diff --git a/db/routines/vn/triggers/client_afterUpdate.sql b/db/routines/vn/triggers/client_afterUpdate.sql
index 481b00007..8bca36d63 100644
--- a/db/routines/vn/triggers/client_afterUpdate.sql
+++ b/db/routines/vn/triggers/client_afterUpdate.sql
@@ -4,20 +4,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`client_afterUpdate`
FOR EACH ROW
BEGIN
IF !(NEW.defaultAddressFk <=> OLD.defaultAddressFk) THEN
- UPDATE `address` SET isDefaultAddress = 0
+ UPDATE `address` SET isDefaultAddress = FALSE
WHERE clientFk = NEW.id;
-
- UPDATE `address` SET isDefaultAddress = 1
- WHERE id = NEW.defaultAddressFk;
+
+ UPDATE `address` SET isDefaultAddress = TRUE
+ WHERE id = NEW.defaultAddressFk;
END IF;
- IF NOT (NEW.provinceFk <=> OLD.provinceFk) OR NOT (NEW.isVies <=> OLD.isVies) THEN
- INSERT IGNORE INTO ticketRecalc (ticketFk)
- SELECT id FROM ticket t
- WHERE t.clientFk = NEW.id
- AND t.refFk IS NULL;
- END IF;
-
IF NOT NEW.isActive THEN
UPDATE account.`user`
SET active = FALSE
diff --git a/db/routines/vn/triggers/entry_afterDelete.sql b/db/routines/vn/triggers/entry_afterDelete.sql
index 5c246651d..c723930fa 100644
--- a/db/routines/vn/triggers/entry_afterDelete.sql
+++ b/db/routines/vn/triggers/entry_afterDelete.sql
@@ -8,7 +8,5 @@ BEGIN
`changedModel` = 'Entry',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL travel_requestRecalc(OLD.travelFk);
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/entry_afterInsert.sql b/db/routines/vn/triggers/entry_afterInsert.sql
deleted file mode 100644
index 79563c17f..000000000
--- a/db/routines/vn/triggers/entry_afterInsert.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterInsert`
- AFTER INSERT ON `entry`
- FOR EACH ROW
-BEGIN
- CALL travel_requestRecalc(NEW.travelFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/entry_afterUpdate.sql b/db/routines/vn/triggers/entry_afterUpdate.sql
index 60adc0003..47d61ed30 100644
--- a/db/routines/vn/triggers/entry_afterUpdate.sql
+++ b/db/routines/vn/triggers/entry_afterUpdate.sql
@@ -3,24 +3,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterUpdate`
AFTER UPDATE ON `entry`
FOR EACH ROW
BEGIN
- IF NOT(NEW.id <=> OLD.id)
- OR NOT(NEW.travelFk <=> OLD.travelFk)
- OR NOT(NEW.isRaid <=> OLD.isRaid) THEN
- CALL stock.log_add('entry', NEW.id, OLD.id);
- END IF;
-
- IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
- CALL travel_requestRecalc(OLD.travelFk);
- CALL travel_requestRecalc(NEW.travelFk);
- END IF;
-
-
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
FROM buy b
WHERE b.entryFk = NEW.id;
-
+
CALL buy_checkItem();
END IF;
END$$
diff --git a/db/routines/vn/triggers/sale_afterDelete.sql b/db/routines/vn/triggers/sale_afterDelete.sql
index fab1c52cd..6365208b2 100644
--- a/db/routines/vn/triggers/sale_afterDelete.sql
+++ b/db/routines/vn/triggers/sale_afterDelete.sql
@@ -12,9 +12,6 @@ BEGIN
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
- CALL stock.log_add('sale', NULL, OLD.id);
- CALL ticket_requestRecalc(OLD.ticketFk);
-
SELECT account.myUser_getName() INTO vUserRole;
SELECT account.user_getMysqlRole(vUserRole) INTO vUserRole;
diff --git a/db/routines/vn/triggers/sale_afterInsert.sql b/db/routines/vn/triggers/sale_afterInsert.sql
index d4c2d60f5..b5b28257f 100644
--- a/db/routines/vn/triggers/sale_afterInsert.sql
+++ b/db/routines/vn/triggers/sale_afterInsert.sql
@@ -7,11 +7,7 @@ BEGIN
CALL util.throw('Cannot insert a service item into a ticket');
END IF;
- CALL stock.log_add('sale', NEW.id, NULL);
- CALL ticket_requestRecalc(NEW.ticketFk);
-
IF NEW.quantity > 0 THEN
-
UPDATE vn.collection c
JOIN vn.ticketCollection tc ON tc.collectionFk = c.id
AND tc.ticketFk = NEW.ticketFk
diff --git a/db/routines/vn/triggers/sale_afterUpdate.sql b/db/routines/vn/triggers/sale_afterUpdate.sql
index 0d21f08d7..3f59c9188 100644
--- a/db/routines/vn/triggers/sale_afterUpdate.sql
+++ b/db/routines/vn/triggers/sale_afterUpdate.sql
@@ -6,24 +6,6 @@ BEGIN
DECLARE vIsToSendMail BOOL;
DECLARE vUserRole VARCHAR(255);
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.created <=> OLD.created)
- OR !(NEW.isPicked <=> OLD.isPicked) THEN
- CALL stock.log_add('sale', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.itemFk <=> OLD.itemFk)
- OR !(NEW.quantity <=> OLD.quantity)
- OR !(NEW.discount <=> OLD.discount) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- END IF;
-
IF !(OLD.ticketFk <=> NEW.ticketFk) THEN
UPDATE ticketRequest SET ticketFk = NEW.ticketFk
WHERE saleFk = NEW.id;
diff --git a/db/routines/vn/triggers/ticketService_afterDelete.sql b/db/routines/vn/triggers/ticketService_afterDelete.sql
index 11d5aaf24..ca2675ce8 100644
--- a/db/routines/vn/triggers/ticketService_afterDelete.sql
+++ b/db/routines/vn/triggers/ticketService_afterDelete.sql
@@ -8,8 +8,5 @@ BEGIN
`changedModel` = 'TicketService',
`changedModelId` = OLD.id,
`userFk` = account.myUser_getId();
-
- CALL ticket_requestRecalc(OLD.ticketFk);
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketService_afterInsert.sql b/db/routines/vn/triggers/ticketService_afterInsert.sql
deleted file mode 100644
index b9142ff72..000000000
--- a/db/routines/vn/triggers/ticketService_afterInsert.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterInsert`
- AFTER INSERT ON `ticketService`
- FOR EACH ROW
-BEGIN
-
- CALL ticket_requestRecalc(NEW.ticketFk);
-
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/ticketService_afterUpdate.sql b/db/routines/vn/triggers/ticketService_afterUpdate.sql
deleted file mode 100644
index ecc9e9a5a..000000000
--- a/db/routines/vn/triggers/ticketService_afterUpdate.sql
+++ /dev/null
@@ -1,13 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterUpdate`
- AFTER UPDATE ON `ticketService`
- FOR EACH ROW
-BEGIN
- IF !(NEW.price <=> OLD.price)
- OR !(NEW.ticketFk <=> OLD.ticketFk)
- OR !(NEW.quantity <=> OLD.quantity) THEN
- CALL ticket_requestRecalc(NEW.ticketFk);
- CALL ticket_requestRecalc(OLD.ticketFk);
- END IF;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/triggers/ticket_afterUpdate.sql b/db/routines/vn/triggers/ticket_afterUpdate.sql
index df939c9d1..f1ad394ef 100644
--- a/db/routines/vn/triggers/ticket_afterUpdate.sql
+++ b/db/routines/vn/triggers/ticket_afterUpdate.sql
@@ -3,24 +3,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticket_afterUpdate`
AFTER UPDATE ON `ticket`
FOR EACH ROW
BEGIN
-
- IF !(NEW.id <=> OLD.id)
- OR !(NEW.warehouseFk <=> OLD.warehouseFk)
- OR !(NEW.shipped <=> OLD.shipped) THEN
- CALL stock.log_add('ticket', NEW.id, OLD.id);
- END IF;
-
- IF !(NEW.clientFk <=> OLD.clientFk)
- OR !(NEW.addressFk <=> OLD.addressFk)
- OR !(NEW.companyFk <=> OLD.companyFk) THEN
- CALL ticket_requestRecalc(NEW.id);
- END IF;
-
IF NEW.routeFk <> OLD.routeFk THEN
- UPDATE expedition
+ UPDATE expedition
SET hasNewRoute = TRUE
WHERE ticketFk = NEW.id;
END IF;
-
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/travel_afterUpdate.sql b/db/routines/vn/triggers/travel_afterUpdate.sql
index 38cd3ba13..7cfe865f3 100644
--- a/db/routines/vn/triggers/travel_afterUpdate.sql
+++ b/db/routines/vn/triggers/travel_afterUpdate.sql
@@ -3,10 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`travel_afterUpdate`
AFTER UPDATE ON `travel`
FOR EACH ROW
BEGIN
- CALL stock.log_add('travel', NEW.id, OLD.id);
-
IF NOT(NEW.shipped <=> OLD.shipped) THEN
- UPDATE entry
+ UPDATE entry
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
WHERE travelFk = NEW.id;
END IF;
@@ -15,11 +13,11 @@ BEGIN
IF (SELECT hasWeightVolumetric FROM agencyMode WHERE id = NEW.agencyModeFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
- FROM entry e
+ FROM entry e
JOIN buy b ON b.entryFk = e.id
JOIN item i ON i.id = b.itemFk
WHERE e.travelFk = NEW.id;
-
+
CALL buy_checkItem();
END IF;
END IF;
diff --git a/db/routines/vn/views/ticketMRW.sql b/db/routines/vn/views/ticketMRW.sql
index d612c8742..26b928ac4 100644
--- a/db/routines/vn/views/ticketMRW.sql
+++ b/db/routines/vn/views/ticketMRW.sql
@@ -1,8 +1,8 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`ticketMRW`
-AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`,
- `Tickets`.`empresa_id` AS `empresa_id`,
+AS SELECT `ticket`.`agencyModeFk` AS `id_Agencia`,
+ `ticket`.`companyFk` AS `empresa_id`,
`Consignatarios`.`consignatario` AS `Consignatario`,
`Consignatarios`.`domicilio` AS `DOMICILIO`,
`Consignatarios`.`poblacion` AS `POBLACION`,
@@ -19,13 +19,13 @@ AS SELECT `Tickets`.`Id_Agencia` AS `id_Agencia`,
0
) AS `movil`,
`Clientes`.`if` AS `IF`,
- `Tickets`.`Id_Ticket` AS `Id_Ticket`,
- `Tickets`.`warehouse_id` AS `warehouse_id`,
+ `ticket`.`id` AS `Id_Ticket`,
+ `ticket`.`warehouseFk` AS `warehouse_id`,
`Consignatarios`.`id_consigna` AS `Id_Consigna`,
`Paises`.`Codigo` AS `CodigoPais`,
- `Tickets`.`Fecha` AS `Fecha`,
+ `ticket`.`shipped` AS `Fecha`,
`province`.`province_id` AS `province_id`,
- `Tickets`.`landing` AS `landing`
+ `ticket`.`landed` AS `landing`
FROM (
(
(
@@ -35,8 +35,8 @@ FROM (
`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`
)
)
- JOIN `vn2008`.`Tickets` ON(
- `Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna`
+ JOIN `vn`.`ticket` ON(
+ `Consignatarios`.`id_consigna` = `ticket`.`addressFk`
)
)
JOIN `vn2008`.`province` ON(
@@ -44,4 +44,4 @@ FROM (
)
)
JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`)
- )
+ );
diff --git a/db/routines/vn2008/procedures/article_multiple_buy.sql b/db/routines/vn2008/procedures/article_multiple_buy.sql
deleted file mode 100644
index 5b0d402c5..000000000
--- a/db/routines/vn2008/procedures/article_multiple_buy.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy`(v_date DATETIME, wh INT)
-BEGIN
- CALL vn.item_multipleBuy(v_date, wh);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/article_multiple_buy_date.sql b/db/routines/vn2008/procedures/article_multiple_buy_date.sql
deleted file mode 100644
index 7b197cb01..000000000
--- a/db/routines/vn2008/procedures/article_multiple_buy_date.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy_date`(
- IN vDated DATETIME,
- IN vWarehouseFk TINYINT(3)
-)
-BEGIN
- CALL vn.item_multipleBuyByDate(vDated, vWarehouseFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/availableTraslate.sql b/db/routines/vn2008/procedures/availableTraslate.sql
deleted file mode 100644
index a3d2c8bea..000000000
--- a/db/routines/vn2008/procedures/availableTraslate.sql
+++ /dev/null
@@ -1,126 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`availableTraslate`(
- vWarehouseLanding INT,
- vDated DATE,
- vWarehouseShipment INT)
-proc: BEGIN
- DECLARE vDatedFrom DATE;
- DECLARE vDatedTo DATETIME;
- DECLARE vDatedReserve DATETIME;
- DECLARE vDatedInventory DATE;
-
- IF vDated < util.VN_CURDATE() THEN
- LEAVE proc;
- END IF;
-
- CALL vn.item_getStock (vWarehouseLanding, vDated, NULL);
-
- -- Calcula algunos parámetros necesarios
- SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
- SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
- SELECT FechaInventario INTO vDatedInventory FROM tblContadores;
- SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
- FROM hedera.orderConfig;
-
- -- Calcula el ultimo dia de vida para cada producto
- DROP TEMPORARY TABLE IF EXISTS itemRange;
- CREATE TEMPORARY TABLE itemRange
- (PRIMARY KEY (itemFk))
- ENGINE = MEMORY
- SELECT c.itemFk, MAX(t.landed) dated
- FROM vn.buy c
- JOIN vn.entry e ON c.entryFk = e.id
- JOIN vn.travel t ON t.id = e.travelFk
- JOIN vn.warehouse w ON w.id = t.warehouseInFk
- WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
- AND t.warehouseInFk = vWarehouseLanding
- AND NOT e.isExcludedFromAvailable
- AND NOT e.isRaid
- GROUP BY c.itemFk;
-
- -- Tabla con el ultimo dia de last_buy para cada producto que hace un replace de la anterior
- CALL vn.buyUltimate(vWarehouseShipment, util.VN_CURDATE());
-
- INSERT INTO itemRange
- SELECT t.itemFk, tr.landed
- FROM tmp.buyUltimate t
- JOIN vn.buy b ON b.id = t.buyFk
- JOIN vn.entry e ON e.id = b.entryFk
- JOIN vn.travel tr ON tr.id = e.travelFk
- LEFT JOIN itemRange i ON t.itemFk = i.itemFk
- WHERE t.warehouseFk = vWarehouseShipment
- AND NOT e.isRaid
- ON DUPLICATE KEY UPDATE itemRange.dated = GREATEST(itemRange.dated, tr.landed);
-
- DROP TEMPORARY TABLE IF EXISTS itemRangeLive;
- CREATE TEMPORARY TABLE itemRangeLive
- (PRIMARY KEY (itemFk))
- ENGINE = MEMORY
- SELECT ir.itemFk, TIMESTAMP(TIMESTAMPADD(DAY, it.life, ir.dated), '23:59:59') dated
- FROM itemRange ir
- JOIN vn.item i ON i.id = ir.itemFk
- JOIN vn.itemType it ON it.id = i.typeFk
- HAVING dated >= vDatedFrom OR dated IS NULL;
-
- -- Calcula el ATP
- DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
- CREATE TEMPORARY TABLE tmp.itemCalc
- (INDEX (itemFk,warehouseFk))
- ENGINE = MEMORY
- SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
- FROM vn.itemTicketOut i
- JOIN itemRangeLive ir ON ir.itemFK = i.itemFk
- WHERE i.shipped >= vDatedFrom
- AND (ir.dated IS NULL OR i.shipped <= ir.dated)
- AND i.warehouseFk = vWarehouseLanding
- UNION ALL
- SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
- FROM vn.buy b
- JOIN vn.entry e ON b.entryFk = e.id
- JOIN vn.travel t ON t.id = e.travelFk
- JOIN itemRangeLive ir ON ir.itemFk = b.itemFk
- WHERE NOT e.isExcludedFromAvailable
- AND b.quantity <> 0
- AND NOT e.isRaid
- AND t.warehouseInFk = vWarehouseLanding
- AND t.landed >= vDatedFrom
- AND (ir.dated IS NULL OR t.landed <= ir.dated)
- UNION ALL
- SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
- FROM vn.itemEntryOut i
- JOIN itemRangeLive ir ON ir.itemFk = i.itemFk
- WHERE i.shipped >= vDatedFrom
- AND (ir.dated IS NULL OR i.shipped <= ir.dated)
- AND i.warehouseOutFk = vWarehouseLanding
- UNION ALL
- SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
- FROM hedera.order_row r
- JOIN hedera.`order` o ON o.id = r.order_id
- JOIN itemRangeLive ir ON ir.itemFk = r.item_id
- WHERE r.shipment >= vDatedFrom
- AND (ir.dated IS NULL OR r.shipment <= ir.dated)
- AND r.warehouse_id = vWarehouseLanding
- AND r.created >= vDatedReserve
- AND NOT o.confirmed;
-
- CALL vn.item_getAtp(vDated);
-
- DROP TEMPORARY TABLE IF EXISTS availableTraslate;
- CREATE TEMPORARY TABLE availableTraslate
- (PRIMARY KEY (item_id))
- ENGINE = MEMORY
- SELECT t.item_id, SUM(stock) available
- FROM (
- SELECT ti.itemFk item_id, stock
- FROM tmp.itemList ti
- JOIN itemRange ir ON ir.itemFk = ti.itemFk
- UNION ALL
- SELECT itemFk, quantity
- FROM tmp.itemAtp
- ) t
- GROUP BY t.item_id
- HAVING available <> 0;
-
- DROP TEMPORARY TABLE tmp.itemList, itemRange, itemRangeLive;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/balance_create.sql b/db/routines/vn2008/procedures/balance_create.sql
deleted file mode 100644
index 2acd26834..000000000
--- a/db/routines/vn2008/procedures/balance_create.sql
+++ /dev/null
@@ -1,207 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`balance_create`(
- IN vStartingMonth INT,
- IN vEndingMonth INT,
- IN vCompany INT,
- IN vIsConsolidated BOOLEAN,
- IN vInterGroupSalesIncluded BOOLEAN)
-BEGIN
- DECLARE intGAP INT DEFAULT 7;
- DECLARE vYears INT DEFAULT 2;
- DECLARE vYear TEXT;
- DECLARE vOneYearAgo TEXT;
- DECLARE vTwoYearsAgo TEXT;
- DECLARE vQuery TEXT;
- DECLARE vConsolidatedGroup INT;
- DECLARE vStartingDate DATE DEFAULT '2020-01-01';
- DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
- DECLARE vStartingYear INT DEFAULT vCurYear - 2;
- DECLARE vTable TEXT;
-
- SET vTable = util.quoteIdentifier('balance_nest_tree');
- SET vYear = util.quoteIdentifier(vCurYear);
- SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
- SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
-
- -- Solicitamos la tabla tmp.nest, como base para el balance
- DROP TEMPORARY TABLE IF EXISTS tmp.nest;
-
- EXECUTE IMMEDIATE CONCAT(
- 'CREATE TEMPORARY TABLE tmp.nest
- SELECT node.id
- ,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1), node.name) AS name
- ,node.lft
- ,node.rgt
- ,COUNT(parent.id) - 1 as depth
- ,cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons
- FROM ', vTable, ' AS node,
- ', vTable, ' AS parent
- WHERE node.lft BETWEEN parent.lft AND parent.rgt
- GROUP BY node.id
- ORDER BY node.lft')
- USING intGAP;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.balance;
- CREATE TEMPORARY TABLE tmp.balance
- SELECT * FROM tmp.nest;
-
- DROP TEMPORARY TABLE IF EXISTS tmp.empresas_receptoras;
- DROP TEMPORARY TABLE IF EXISTS tmp.empresas_emisoras;
-
- SELECT empresa_grupo INTO vConsolidatedGroup
- FROM empresa
- WHERE id = vCompany;
-
- CREATE TEMPORARY TABLE tmp.empresas_receptoras
- SELECT id as empresa_id
- FROM vn2008.empresa
- WHERE id = vCompany
- OR empresa_grupo = IF(vIsConsolidated, vConsolidatedGroup, NULL);
-
- CREATE TEMPORARY TABLE tmp.empresas_emisoras
- SELECT Id_Proveedor as empresa_id FROM vn2008.Proveedores p;
-
- IF vInterGroupSalesIncluded = FALSE THEN
-
- DELETE ee.*
- FROM tmp.empresas_emisoras ee
- JOIN vn2008.empresa e on e.id = ee.empresa_id
- WHERE e.empresa_grupo = vConsolidatedGroup;
-
- END IF;
-
- -- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
- DROP TEMPORARY TABLE IF EXISTS tmp.balance_desglose;
- CREATE TEMPORARY TABLE tmp.balance_desglose
- SELECT er.empresa_id receptora_id,
- ee.empresa_id emisora_id,
- year(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `year`,
- month(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `month`,
- gastos_id Id_Gasto,
- SUM(bi) importe
- FROM recibida r
- JOIN recibida_iva ri on ri.recibida_id = r.id
- JOIN tmp.empresas_receptoras er on er.empresa_id = r.empresa_id
- JOIN tmp.empresas_emisoras ee ON ee.empresa_id = r.proveedor_id
- WHERE IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha)) >= vStartingDate
- AND r.contabilizada
- GROUP BY Id_Gasto, year, month, emisora_id, receptora_id;
-
- INSERT INTO tmp.balance_desglose(
- receptora_id,
- emisora_id,
- year,
- month,
- Id_Gasto,
- importe)
- SELECT gr.empresa_id,
- gr.empresa_id,
- year,
- month,
- Id_Gasto,
- SUM(importe)
- FROM gastos_resumen gr
- JOIN tmp.empresas_receptoras er on gr.empresa_id = er.empresa_id
- WHERE year >= vStartingYear
- AND month BETWEEN vStartingMonth AND vEndingMonth
- GROUP BY Id_Gasto, year, month, gr.empresa_id;
-
- DELETE FROM tmp.balance_desglose
- WHERE month < vStartingMonth
- OR month > vEndingMonth;
-
- -- Ahora el balance
- EXECUTE IMMEDIATE CONCAT(
- 'ALTER TABLE tmp.balance
- ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
- ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
- ADD COLUMN ', vYear,' INT(10) NULL ,
- ADD COLUMN Id_Gasto VARCHAR(10) NULL,
- ADD COLUMN Gasto VARCHAR(45) NULL');
-
- -- Añadimos los gastos, para facilitar el formulario
- UPDATE tmp.balance b
- JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
- JOIN (SELECT id Id_Gasto, name Gasto
- FROM vn.expense
- GROUP BY id) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci
- SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci
- , b.Gasto = g.Gasto COLLATE utf8_general_ci ;
-
- -- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
- WHILE vYears >= 0 DO
- SET vQuery = CONCAT(
- 'UPDATE tmp.balance b
- JOIN
- (SELECT Id_Gasto, SUM(Importe) as Importe
- FROM tmp.balance_desglose
- WHERE year = ?
- GROUP BY Id_Gasto
- ) sub on sub.Id_Gasto = b.Id_Gasto COLLATE utf8_general_ci
- SET ', util.quoteIdentifier(vCurYear - vYears), ' = - Importe');
-
- EXECUTE IMMEDIATE vQuery
- USING vCurYear - vYears;
-
- SET vYears = vYears - 1;
- END WHILE;
-
- -- Añadimos las ventas
- EXECUTE IMMEDIATE CONCAT(
- 'UPDATE tmp.balance b
- JOIN (
- SELECT SUM(IF(year = ?, venta, 0)) y2,
- SUM(IF(year = ?, venta, 0)) y1,
- SUM(IF(year = ?, venta, 0)) y0,
- c.Gasto
- FROM bs.ventas_contables c
- JOIN tmp.empresas_receptoras er on er.empresa_id = c.empresa_id
- WHERE month BETWEEN ? AND ?
- GROUP BY c.Gasto
- ) sub ON sub.Gasto = b.Id_Gasto COLLATE utf8_general_ci
- SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
- b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
- b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
- USING vCurYear-2,
- vCurYear-1,
- vCurYear,
- vStartingMonth,
- vEndingMonth;
-
- -- Ventas intra grupo
- IF NOT vInterGroupSalesIncluded THEN
-
- SELECT lft, rgt INTO @grupoLft, @grupoRgt
- FROM tmp.balance b
- WHERE TRIM(b.`name`) = 'Grupo';
-
- DELETE
- FROM tmp.balance
- WHERE lft BETWEEN @grupoLft AND @grupoRgt;
-
- END IF;
-
- -- Rellenamos el valor de los padres con la suma de los hijos
- DROP TEMPORARY TABLE IF EXISTS tmp.balance_aux;
- CREATE TEMPORARY TABLE tmp.balance_aux
- SELECT * FROM tmp.balance;
-
- EXECUTE IMMEDIATE
- CONCAT('UPDATE tmp.balance b
- JOIN (
- SELECT b1.id,
- b1.name,
- SUM(b2.', vYear,') thisYear,
- SUM(b2.', vOneYearAgo,') oneYearAgo,
- SUM(b2.', vTwoYearsAgo,') twoYearsAgo
- FROM tmp.nest b1
- JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
- GROUP BY b1.id)sub ON sub.id = b.id
- SET b.', vYear, ' = thisYear,
- b.', vOneYearAgo, ' = oneYearAgo,
- b.', vTwoYearsAgo, ' = twoYearsAgo');
-
- SELECT *, CONCAT('',ifnull(Id_Gasto,'')) newgasto
- FROM tmp.balance;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/buy_tarifas.sql b/db/routines/vn2008/procedures/buy_tarifas.sql
deleted file mode 100644
index c6e8dff90..000000000
--- a/db/routines/vn2008/procedures/buy_tarifas.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas`(vBuyFk INT)
-BEGIN
- CALL vn.buy_recalcPricesByBuy(vBuyFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/procedures/buy_tarifas_entry.sql b/db/routines/vn2008/procedures/buy_tarifas_entry.sql
deleted file mode 100644
index 3fc0739e0..000000000
--- a/db/routines/vn2008/procedures/buy_tarifas_entry.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas_entry`(IN vEntryFk INT(11))
-BEGIN
-/**
- * Recalcula los precios de una entrada
- *
- * @param vEntryFk
- */
- CALL vn.buy_recalcPricesByEntry(vEntryFk);
-END$$
-DELIMITER ;
diff --git a/db/routines/vn2008/views/payrollWorker.sql b/db/routines/vn2008/views/payrollWorker.sql
index d4ada9aa0..6199e98b8 100644
--- a/db/routines/vn2008/views/payrollWorker.sql
+++ b/db/routines/vn2008/views/payrollWorker.sql
@@ -1,6 +1,9 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
- VIEW `vn2008`.`payroll_employee`
-AS SELECT `pw`.`workerFkA3` AS `CodTrabajador`,
- `pw`.`companyFkA3` AS `codempresa`
-FROM `vn`.`payrollWorker` `pw`
+ VIEW `vn2008`.`payroll_employee` AS
+SELECT
+ `pw`.`workerFkA3` AS `CodTrabajador`,
+ `pw`.`companyFkA3` AS `codempresa`,
+ `pw`.`workerFk` AS `workerFk`
+FROM
+ `vn`.`payrollWorker` `pw`;
\ No newline at end of file
diff --git a/db/versions/10859-pinkGerbera/00-firstScript.sql b/db/versions/10859-pinkGerbera/00-firstScript.sql
new file mode 100644
index 000000000..1aed01319
--- /dev/null
+++ b/db/versions/10859-pinkGerbera/00-firstScript.sql
@@ -0,0 +1,7 @@
+CREATE OR REPLACE PROCEDURE `vn`.`balance_create`() BEGIN END;
+CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByEntry`() BEGIN END;
+CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByBuy`() BEGIN END;
+
+GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`, `hrBoss`;
+GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `buyer`, `claimManager`, `employee`;
+GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `buyer`, `entryEditor`, `claimManager`, `employee`;
\ No newline at end of file
diff --git a/db/versions/10944-tealLaurel/00-firstScript.sql b/db/versions/10944-tealLaurel/00-firstScript.sql
new file mode 100644
index 000000000..2d61cde90
--- /dev/null
+++ b/db/versions/10944-tealLaurel/00-firstScript.sql
@@ -0,0 +1,8 @@
+REVOKE UPDATE ON vn.entry FROM entryEditor;
+GRANT UPDATE ON vn.entry TO administrative;
+GRANT UPDATE (id, supplierFk, dated, invoiceNumber, isExcludedFromAvailable,
+ isConfirmed, isOrdered, isRaid,commission, created, evaNotes, travelFk,
+ currencyFk,companyFk, gestDocFk, invoiceInFk, loadPriority,
+ kop, sub, pro, auction, invoiceAmount, buyerFk, typeFk, reference,
+ observationEditorFk, clonedFrom, editorFk, lockerUserFk, locked
+) ON vn.entry TO entryEditor;
diff --git a/db/versions/10950-greenArborvitae/00-firstScript.sql b/db/versions/10950-greenArborvitae/00-firstScript.sql
new file mode 100644
index 000000000..e8d4e31f2
--- /dev/null
+++ b/db/versions/10950-greenArborvitae/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+ALTER TABLE vn.packaging
+MODIFY COLUMN volume decimal(10,2) CHECK (volume >= COALESCE(width, 1) * COALESCE(depth, 1) * COALESCE(height, 1));
diff --git a/db/versions/10987-tealMonstera/00-firstScript.vn.sql b/db/versions/10987-tealMonstera/00-firstScript.vn.sql
new file mode 100644
index 000000000..d24ddd5de
--- /dev/null
+++ b/db/versions/10987-tealMonstera/00-firstScript.vn.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+
+USE vn;
+INSERT INTO vn.observationType (description,code) VALUES ('Entrega','dropOff');
\ No newline at end of file
diff --git a/db/versions/10990-yellowPalmetto/00-firstScript.sql b/db/versions/10990-yellowPalmetto/00-firstScript.sql
index be866af8c..56b1541fb 100644
--- a/db/versions/10990-yellowPalmetto/00-firstScript.sql
+++ b/db/versions/10990-yellowPalmetto/00-firstScript.sql
@@ -2,4 +2,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_getRisk`()
BEGIN
END;
-GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financialBoss;
+GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financial;
+
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
+BEGIN
+END;
+
+GRANT EXECUTE ON PROCEDURE vn.creditInsurance_getRisk TO financial;
diff --git a/db/versions/10992-goldenIvy/00-acl.sql b/db/versions/10992-goldenIvy/00-acl.sql
new file mode 100644
index 000000000..1d1c3ce91
--- /dev/null
+++ b/db/versions/10992-goldenIvy/00-acl.sql
@@ -0,0 +1,2 @@
+INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
+ VALUES ('InvoiceIn', 'exchangeRateUpdate', '*', 'ALLOW', 'ROLE', 'employee');
diff --git a/db/versions/10992-goldenIvy/00-referenceRate.sql b/db/versions/10992-goldenIvy/00-referenceRate.sql
new file mode 100644
index 000000000..db53f328f
--- /dev/null
+++ b/db/versions/10992-goldenIvy/00-referenceRate.sql
@@ -0,0 +1,4 @@
+ALTER TABLE vn.referenceRate DROP INDEX `PRIMARY`;
+ALTER TABLE vn.referenceRate ADD id INT auto_increment PRIMARY KEY;
+ALTER TABLE vn.referenceRate CHANGE id id int(11) auto_increment NOT NULL FIRST;
+CREATE UNIQUE INDEX referenceRate_currencyFk_IDX USING BTREE ON vn.referenceRate (currencyFk,dated);
diff --git a/db/versions/10995-navyErica/01-agencyLogCreate.sql b/db/versions/10995-navyErica/01-agencyLogCreate.sql
new file mode 100644
index 000000000..0b8a1ed87
--- /dev/null
+++ b/db/versions/10995-navyErica/01-agencyLogCreate.sql
@@ -0,0 +1,24 @@
+-- vn.agencyLog definition
+ALTER TABLE vn.agency ADD IF NOT EXISTS editorFk int(10) unsigned DEFAULT NULL NULL;
+
+ALTER TABLE vn.agency ADD CONSTRAINT agency_user_FK FOREIGN KEY (editorFk) REFERENCES `account`.`user`(id);
+
+CREATE TABLE IF NOT EXISTS `vn`.`agencyLog` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `originFk` smallint(5) unsigned DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('agency','agencyMode') NOT NULL DEFAULT 'agency',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `logAgencyUserFk` (`userFk`),
+ KEY `agencyLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `agencyLog_originFk` (`originFk`,`creationDate`),
+ CONSTRAINT `agencyOriginFk` FOREIGN KEY (`originFk`) REFERENCES `agency` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `agencyUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
\ No newline at end of file
diff --git a/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql b/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql
new file mode 100644
index 000000000..179fbc63c
--- /dev/null
+++ b/db/versions/10995-navyErica/02-agencyWorkCenterCreate.sql
@@ -0,0 +1,18 @@
+CREATE TABLE IF NOT EXISTS `vn`.`agencyWorkCenter` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `agencyFk` smallint(5) unsigned NOT NULL,
+ `workCenterFk` int(11) NOT NULL,
+ `editorFk` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `agencyWorkCenter_unique` (`agencyFk`,`workCenterFk`),
+ KEY `agencyWorkCenter_workCenter_FK` (`workCenterFk`),
+ KEY `agencyWorkCenter_user_FK` (`editorFk`),
+ CONSTRAINT `agencyWorkCenter_agency_FK` FOREIGN KEY (`agencyFk`) REFERENCES `agency` (`id`) ON DELETE CASCADE,
+ CONSTRAINT `agencyWorkCenter_user_FK` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `agencyWorkCenter_workCenter_FK` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='refs #4988';
+
+INSERT INTO vn.agencyWorkCenter (agencyFk, workCenterFk)
+ SELECT id, workCenterFk
+ FROM vn.agency
+ WHERE workCenterFk IS NOT NULL;
diff --git a/db/versions/10995-navyErica/03-tableAcl.sql b/db/versions/10995-navyErica/03-tableAcl.sql
new file mode 100644
index 000000000..f3fc4d336
--- /dev/null
+++ b/db/versions/10995-navyErica/03-tableAcl.sql
@@ -0,0 +1,19 @@
+-- Place your SQL code here
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyLog','*','READ','ALLOW','ROLE','employee');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyWorkCenter','*','READ','ALLOW','ROLE','employee');
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES('AgencyMode', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
+
+INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
+ VALUES('Agency', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('Agency','*','WRITE','ALLOW','ROLE','deliveryAssistant');
+
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('AgencyWorkCenter','*','WRITE','ALLOW','ROLE','deliveryAssistant');
+
diff --git a/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql b/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql
new file mode 100644
index 000000000..13216936b
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/00-dropOrderRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE hedera.orderRecalc;
diff --git a/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql b/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql
new file mode 100644
index 000000000..e7c765e91
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/01-dropTicketRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE vn.ticketRecalc;
diff --git a/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql b/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql
new file mode 100644
index 000000000..49b26f83f
--- /dev/null
+++ b/db/versions/10996-pinkPhormium/02-dropTravelRecalc.sql
@@ -0,0 +1 @@
+DROP TABLE vn.travelRecalc;
diff --git a/db/versions/11003-greenRoebelini/00-firstScript.sql b/db/versions/11003-greenRoebelini/00-firstScript.sql
new file mode 100644
index 000000000..97c5f355f
--- /dev/null
+++ b/db/versions/11003-greenRoebelini/00-firstScript.sql
@@ -0,0 +1 @@
+DROP SCHEMA IF EXISTS rfid;
diff --git a/db/versions/11007-greenRose/00-firstScript.sql b/db/versions/11007-greenRose/00-firstScript.sql
new file mode 100644
index 000000000..154a75532
--- /dev/null
+++ b/db/versions/11007-greenRose/00-firstScript.sql
@@ -0,0 +1,16 @@
+CREATE OR REPLACE TABLE `vn`.`farmingDeliveryNote` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `farmingFk` int(10) unsigned NOT NULL,
+ `deliveryNoteFk` int(11) NOT NULL,
+ `amount` decimal(10,2) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `farmingDeliveryNoteFk_FK` (`deliveryNoteFk`),
+ KEY `farmingDeliveryNoteFk_FK_1` (`farmingFk`),
+ CONSTRAINT `farmingDeliveryNoteFk_FK` FOREIGN KEY (`deliveryNoteFk`) REFERENCES `deliveryNote` (`id`),
+ CONSTRAINT `farmingDeliveryNoteFk_FK_1` FOREIGN KEY (`farmingFk`) REFERENCES `farming` (`id`)
+);
+
+INSERT IGNORE INTO `vn`.`farmingDeliveryNote` (farmingFk, deliveryNoteFk, amount)
+ SELECT farmingFk, id, amount
+ FROM vn.deliveryNote dn
+ WHERE farmingFk;
\ No newline at end of file
diff --git a/db/versions/11014-orangePalmetto/00-firstScript.sql b/db/versions/11014-orangePalmetto/00-firstScript.sql
new file mode 100644
index 000000000..fe85c7ec6
--- /dev/null
+++ b/db/versions/11014-orangePalmetto/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.claimBeginning MODIFY COLUMN quantity double DEFAULT 0 NULL;
diff --git a/e2e/paths/09-invoice-out/03_manualInvoice.spec.js b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
index dfaa55ef9..a1856f1b1 100644
--- a/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
+++ b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
@@ -40,7 +40,7 @@ describe('InvoiceOut manual invoice path', () => {
await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
await page.waitForSelector(selectors.invoiceOutIndex.manualInvoiceForm);
- await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceClient, 'Max Eisenhardt');
+ await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceClient, 'Petter Parker');
await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceSerial, 'Global nacional');
await page.autocompleteSearch(selectors.invoiceOutIndex.manualInvoiceTaxArea, 'national');
await page.waitToClick(selectors.invoiceOutIndex.saveInvoice);
diff --git a/e2e/paths/12-entry/05_basicData.spec.js b/e2e/paths/12-entry/05_basicData.spec.js
index 15282820e..f1f14f8da 100644
--- a/e2e/paths/12-entry/05_basicData.spec.js
+++ b/e2e/paths/12-entry/05_basicData.spec.js
@@ -76,6 +76,6 @@ describe('Entry basic data path', () => {
expect(confirmed).toBe('checked');
expect(inventory).toBe('checked');
expect(raid).toBe('checked');
- expect(booked).toBe('checked');
+ expect(booked).toBe('unchecked');
});
});
diff --git a/front/core/services/token.js b/front/core/services/token.js
index 125de6b9a..6858bcae9 100644
--- a/front/core/services/token.js
+++ b/front/core/services/token.js
@@ -1,5 +1,6 @@
import ngModule from '../module';
-
+const TOKEN_MULTIMEDIA = 'vnTokenMultimedia';
+const TOKEN = 'vnToken';
/**
* Saves and loads the token for the current logged in user.
*
@@ -58,8 +59,8 @@ export default class Token {
}
getStorage(storage) {
- this.token = storage.getItem('vnToken');
- this.tokenMultimedia = storage.getItem('vnTokenMultimedia');
+ this.token = storage.getItem(TOKEN);
+ this.tokenMultimedia = storage.getItem(TOKEN_MULTIMEDIA);
if (!this.token) return;
const created = storage.getItem('vnTokenCreated');
this.created = created && new Date(created);
@@ -67,15 +68,15 @@ export default class Token {
}
setStorage(storage, token, tokenMultimedia, created, ttl) {
- storage.setItem('vnTokenMultimedia', tokenMultimedia);
- storage.setItem('vnToken', token);
+ storage.setItem(TOKEN_MULTIMEDIA, tokenMultimedia);
+ storage.setItem(TOKEN, token);
storage.setItem('vnTokenCreated', created.toJSON());
storage.setItem('vnTokenTtl', ttl);
}
removeStorage(storage) {
- storage.removeItem('vnToken');
- storage.removeItem('vnTokenMultimedia');
+ storage.removeItem(TOKEN);
+ storage.removeItem(TOKEN_MULTIMEDIA);
storage.removeItem('vnTokenCreated');
storage.removeItem('vnTokenTtl');
}
@@ -96,9 +97,9 @@ export default class Token {
this.checking = true;
const renewPeriod = Math.min(this.ttl, this.renewPeriod) * 1000;
const maxDate = this.created.getTime() + renewPeriod;
- const now = new Date();
+ const now = new Date().getTime();
- if (now.getTime() <= maxDate) {
+ if (now <= maxDate) {
this.checking = false;
return;
}
@@ -106,7 +107,17 @@ export default class Token {
this.$http.post('VnUsers/renewToken')
.then(res => {
const token = res.data;
- this.set(token.id, now, token.ttl, this.remember);
+ const tokenMultimedia =
+ localStorage.getItem(TOKEN_MULTIMEDIA)
+ ?? sessionStorage.getItem(TOKEN_MULTIMEDIA);
+
+ return this.$http.post('VnUsers/renewToken', null, {
+ headers: {Authorization: tokenMultimedia}
+ })
+ .then(({data}) => {
+ const tokenMultimedia = data;
+ this.set(token.id, tokenMultimedia.id, new Date(), token.ttl, this.remember);
+ });
})
.finally(() => {
this.checking = false;
@@ -119,4 +130,4 @@ export default class Token {
}
Token.$inject = ['vnInterceptor', '$http', '$rootScope'];
-ngModule.service('vnToken', Token);
+ngModule.service(TOKEN, Token);
diff --git a/front/salix/components/change-password/index.js b/front/salix/components/change-password/index.js
index 7e30bf54e..93241b781 100644
--- a/front/salix/components/change-password/index.js
+++ b/front/salix/components/change-password/index.js
@@ -1,5 +1,5 @@
import ngModule from '../../module';
-const UserError = require('vn-loopback/util/user-error');
+import UserError from 'core/lib/user-error';
export default class Controller {
constructor($scope, $element, $http, vnApp, $translate, $state, $location) {
diff --git a/front/salix/components/reset-password/index.js b/front/salix/components/reset-password/index.js
index ba1240b45..d5c920b2f 100644
--- a/front/salix/components/reset-password/index.js
+++ b/front/salix/components/reset-password/index.js
@@ -1,5 +1,5 @@
import ngModule from '../../module';
-const UserError = require('vn-loopback/util/user-error');
+import UserError from 'core/lib/user-error';
export default class Controller {
constructor($scope, $element, $http, vnApp, $translate, $state, $location) {
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index a0e60550f..9a3a1f52a 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -1,217 +1,217 @@
{
- "State cannot be blank": "State cannot be blank",
- "Cannot be blank": "Cannot be blank",
- "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
- "The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero",
- "Invalid email": "Invalid email",
- "Name cannot be blank": "Name cannot be blank",
- "Phone cannot be blank": "Phone cannot be blank",
- "Description should have maximum of 45 characters": "Description should have maximum of 45 characters",
- "Period cannot be blank": "Period cannot be blank",
- "Sample type cannot be blank": "Sample type cannot be blank",
- "That payment method requires an IBAN": "That payment method requires an IBAN",
- "That payment method requires a BIC": "That payment method requires a BIC",
- "The default consignee can not be unchecked": "The default consignee can not be unchecked",
- "Enter an integer different to zero": "Enter an integer different to zero",
- "Package cannot be blank": "Package cannot be blank",
- "The price of the item changed": "The price of the item changed",
- "The sales of this ticket can't be modified": "The sales of this ticket can't be modified",
- "Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
- "You can't create an order for a frozen client": "You can't create an order for a frozen client",
- "This address doesn't exist": "This address doesn't exist",
- "Warehouse cannot be blank": "Warehouse cannot be blank",
- "Agency cannot be blank": "Agency cannot be blank",
- "The IBAN does not have the correct format": "The IBAN does not have the correct format",
- "You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows",
- "You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client",
- "Worker cannot be blank": "Worker cannot be blank",
- "You must delete the claim id %d first": "You must delete the claim id %d first",
- "You don't have enough privileges": "You don't have enough privileges",
- "Tag value cannot be blank": "Tag value cannot be blank",
- "A client with that Web User name already exists": "A client with that Web User name already exists",
- "The warehouse can't be repeated": "The warehouse can't be repeated",
- "Barcode must be unique": "Barcode must be unique",
- "You don't have enough privileges to do that": "You don't have enough privileges to do that",
- "You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client",
- "can't be blank": "can't be blank",
- "Street cannot be empty": "Street cannot be empty",
- "City cannot be empty": "City cannot be empty",
- "EXTENSION_INVALID_FORMAT": "Invalid extension",
- "The secret can't be blank": "The secret can't be blank",
- "Invalid TIN": "Invalid Tax number",
- "This ticket can't be invoiced": "This ticket can't be invoiced",
- "The value should be a number": "The value should be a number",
- "The current ticket can't be modified": "The current ticket can't be modified",
- "Extension format is invalid": "Extension format is invalid",
- "NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS",
- "This client can't be invoiced": "This client can't be invoiced",
- "You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice",
- "The introduced hour already exists": "The introduced hour already exists",
- "Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket",
- "Concept cannot be blank": "Concept cannot be blank",
- "Ticket id cannot be blank": "Ticket id cannot be blank",
- "Weekday cannot be blank": "Weekday cannot be blank",
- "This ticket can not be modified": "This ticket can not be modified",
- "You can't delete a confirmed order": "You can't delete a confirmed order",
- "Value has an invalid format": "Value has an invalid format",
- "The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one",
- "Swift / BIC can't be empty": "Swift / BIC can't be empty",
- "Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
- "Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
- "Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
- "Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
- "Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})",
- "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*",
- "Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})",
- "Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})",
- "Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}",
- "Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*",
- "Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*",
- "Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member",
- "Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member",
- "Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}",
- "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
- "NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day",
- "Created absence": "The worker {{author}} has added an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
- "Deleted absence": "The worker {{author}} has deleted an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
- "I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})",
- "I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})",
- "Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
- "The grade must be similar to the last one": "The grade must be similar to the last one",
- "agencyModeFk": "Agency",
- "clientFk": "Client",
- "zoneFk": "Zone",
- "warehouseFk": "Warehouse",
- "shipped": "Shipped",
- "landed": "Landed",
- "addressFk": "Address",
- "companyFk": "Company",
- "agency": "Agency",
- "delivery": "Delivery",
- "You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data",
- "The social name cannot be empty": "The social name cannot be empty",
- "The nif cannot be empty": "The nif cannot be empty",
- "Amount cannot be zero": "Amount cannot be zero",
- "Company has to be official": "Company has to be official",
- "Unable to clone this travel": "Unable to clone this travel",
- "The observation type can't be repeated": "The observation type can't be repeated",
- "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
- "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
- "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
- "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
- "Role name must be written in camelCase": "Role name must be written in camelCase",
- "Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})",
- "None": "None",
- "error densidad = 0": "error densidad = 0",
- "This document already exists on this ticket": "This document already exists on this ticket",
- "serial non editable": "This serial doesn't allow to set a reference",
- "nickname": "nickname",
- "State": "State",
- "regular": "regular",
- "reserved": "reserved",
- "Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients",
- "A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced",
- "This client is not invoiceable": "This client is not invoiceable",
- "INACTIVE_PROVIDER": "Inactive provider",
- "reference duplicated": "reference duplicated",
- "The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option",
- "This item is not available": "This item is not available",
- "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}",
- "The type of business must be filled in basic data": "The type of business must be filled in basic data",
- "The worker has hours recorded that day": "The worker has hours recorded that day",
- "isWithoutNegatives": "isWithoutNegatives",
- "routeFk": "routeFk",
- "Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data",
- "Can't change the password of another worker": "Can't change the password of another worker",
- "No hay un contrato en vigor": "There is no existing contract",
- "No está permitido trabajar": "Not allowed to work",
- "Dirección incorrecta": "Wrong direction",
- "No se permite fichar a futuro": "It is not allowed to sign in the future",
- "Descanso diario 12h.": "Daily rest 12h.",
- "Fichadas impares": "Odd signs",
- "Descanso diario 9h.": "Daily rest 9h.",
- "Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.",
- "Verify email": "Verify email",
- "Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it",
- "Password does not meet requirements": "Password does not meet requirements",
- "You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies",
- "Not enough privileges to edit a client": "Not enough privileges to edit a client",
- "Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*",
- "You don't have grant privilege": "You don't have grant privilege",
- "You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user",
- "Email verify": "Email verify",
- "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
- "App locked": "App locked by user {{userId}}",
- "The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified",
- "Receipt's bank was not found": "Receipt's bank was not found",
- "This receipt was not compensated": "This receipt was not compensated",
- "Client's email was not found": "Client's email was not found",
- "Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d",
- "It is not possible to modify tracked sales": "It is not possible to modify tracked sales",
- "It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
- "It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
- "Warehouse inventory not set": "Almacén inventario no está establecido",
- "Component cost not set": "Componente coste no está estabecido",
- "Description cannot be blank": "Description cannot be blank",
- "company": "Company",
- "country": "Country",
- "clientId": "Id client",
- "clientSocialName": "Client",
- "amount": "Amount",
- "taxableBase": "Taxable base",
- "ticketFk": "Id ticket",
- "isActive": "Active",
- "hasToInvoice": "Invoice",
- "isTaxDataChecked": "Data checked",
- "comercialId": "Id Comercial",
- "comercialName": "Comercial",
- "Added observation": "Added observation",
- "Comment added to client": "Comment added to client",
- "This ticket is already a refund": "This ticket is already a refund",
- "A claim with that sale already exists": "A claim with that sale already exists",
- "Pass expired": "The password has expired, change it from Salix",
- "Can't transfer claimed sales": "Can't transfer claimed sales",
- "Invalid quantity": "Invalid quantity",
- "Failed to upload delivery note": "Error to upload delivery note {{id}}",
- "Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address",
- "The renew period has not been exceeded": "The renew period has not been exceeded",
- "You can not use the same password": "You can not use the same password",
- "Valid priorities": "Valid priorities: %d",
- "hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}",
- "hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}",
- "This ticket cannot be left empty.": "This ticket cannot be left empty. %s",
- "Social name should be uppercase": "Social name should be uppercase",
- "Street should be uppercase": "Street should be uppercase",
- "You don't have enough privileges.": "You don't have enough privileges.",
- "This ticket is locked": "This ticket is locked",
- "This ticket is not editable.": "This ticket is not editable.",
- "The ticket doesn't exist.": "The ticket doesn't exist.",
- "The sales do not exists": "The sales do not exists",
- "Ticket without Route": "Ticket without route",
- "Select a different client": "Select a different client",
- "Fill all the fields": "Fill all the fields",
- "Error while generating PDF": "Error while generating PDF",
- "Can't invoice to future": "Can't invoice to future",
- "This ticket is already invoiced": "This ticket is already invoiced",
- "Negative basis of tickets: 23": "Negative basis of tickets: 23",
- "Booking completed": "Booking complete",
- "The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
- "You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
- "Bank entity must be specified": "Bank entity must be specified",
- "Try again": "Try again",
- "keepPrice": "keepPrice",
- "Cannot past travels with entries": "Cannot past travels with entries",
- "It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}",
- "Incorrect pin": "Incorrect pin.",
- "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
- "Name should be uppercase": "Name should be uppercase",
- "You cannot update these fields": "You cannot update these fields",
- "CountryFK cannot be empty": "Country cannot be empty",
- "You are not allowed to modify the alias": "You are not allowed to modify the alias",
- "You already have the mailAlias": "You already have the mailAlias",
+ "State cannot be blank": "State cannot be blank",
+ "Cannot be blank": "Cannot be blank",
+ "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
+ "The grade must be an integer greater than or equal to zero": "The grade must be an integer greater than or equal to zero",
+ "Invalid email": "Invalid email",
+ "Name cannot be blank": "Name cannot be blank",
+ "Phone cannot be blank": "Phone cannot be blank",
+ "Description should have maximum of 45 characters": "Description should have maximum of 45 characters",
+ "Period cannot be blank": "Period cannot be blank",
+ "Sample type cannot be blank": "Sample type cannot be blank",
+ "That payment method requires an IBAN": "That payment method requires an IBAN",
+ "That payment method requires a BIC": "That payment method requires a BIC",
+ "The default consignee can not be unchecked": "The default consignee can not be unchecked",
+ "Enter an integer different to zero": "Enter an integer different to zero",
+ "Package cannot be blank": "Package cannot be blank",
+ "The price of the item changed": "The price of the item changed",
+ "The sales of this ticket can't be modified": "The sales of this ticket can't be modified",
+ "Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
+ "You can't create an order for a frozen client": "You can't create an order for a frozen client",
+ "This address doesn't exist": "This address doesn't exist",
+ "Warehouse cannot be blank": "Warehouse cannot be blank",
+ "Agency cannot be blank": "Agency cannot be blank",
+ "The IBAN does not have the correct format": "The IBAN does not have the correct format",
+ "You can't make changes on the basic data of an confirmed order or with rows": "You can't make changes on the basic data of an confirmed order or with rows",
+ "You can't create a ticket for an inactive client": "You can't create a ticket for an inactive client",
+ "Worker cannot be blank": "Worker cannot be blank",
+ "You must delete the claim id %d first": "You must delete the claim id %d first",
+ "You don't have enough privileges": "You don't have enough privileges",
+ "Tag value cannot be blank": "Tag value cannot be blank",
+ "A client with that Web User name already exists": "A client with that Web User name already exists",
+ "The warehouse can't be repeated": "The warehouse can't be repeated",
+ "Barcode must be unique": "Barcode must be unique",
+ "You don't have enough privileges to do that": "You don't have enough privileges to do that",
+ "You can't create a ticket for a frozen client": "You can't create a ticket for a frozen client",
+ "can't be blank": "can't be blank",
+ "Street cannot be empty": "Street cannot be empty",
+ "City cannot be empty": "City cannot be empty",
+ "EXTENSION_INVALID_FORMAT": "Invalid extension",
+ "The secret can't be blank": "The secret can't be blank",
+ "Invalid TIN": "Invalid Tax number",
+ "This ticket can't be invoiced": "This ticket can't be invoiced",
+ "The value should be a number": "The value should be a number",
+ "The current ticket can't be modified": "The current ticket can't be modified",
+ "Extension format is invalid": "Extension format is invalid",
+ "NO_ZONE_FOR_THIS_PARAMETERS": "NO_ZONE_FOR_THIS_PARAMETERS",
+ "This client can't be invoiced": "This client can't be invoiced",
+ "You must provide the correction information to generate a corrective invoice": "You must provide the correction information to generate a corrective invoice",
+ "The introduced hour already exists": "The introduced hour already exists",
+ "Invalid parameters to create a new ticket": "Invalid parameters to create a new ticket",
+ "Concept cannot be blank": "Concept cannot be blank",
+ "Ticket id cannot be blank": "Ticket id cannot be blank",
+ "Weekday cannot be blank": "Weekday cannot be blank",
+ "This ticket can not be modified": "This ticket can not be modified",
+ "You can't delete a confirmed order": "You can't delete a confirmed order",
+ "Value has an invalid format": "Value has an invalid format",
+ "The postcode doesn't exist. Please enter a correct one": "The postcode doesn't exist. Please enter a correct one",
+ "Swift / BIC can't be empty": "Swift / BIC can't be empty",
+ "Deleted sales from ticket": "I have deleted the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}",
+ "Added sale to ticket": "I have added the following line to the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}",
+ "Changed sale discount": "I have changed the following lines discounts from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Created claim": "I have created the claim [{{claimId}}]({{{claimUrl}}}) for the following lines from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Changed sale price": "I have changed the price of [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) from {{oldPrice}}€ ➔ *{{newPrice}}€* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale quantity": "I have changed the quantity of [{{itemId}} {{concept}}]({{{itemUrl}}}) from {{oldQuantity}} ➔ *{{newQuantity}}* of the ticket [{{ticketId}}]({{{ticketUrl}}})",
+ "Changed sale reserved state": "I have changed the following lines reserved state from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "Bought units from buy request": "Bought {{quantity}} units of [{{itemId}} {{concept}}]({{{urlItem}}}) for the ticket id [{{ticketId}}]({{{url}}})",
+ "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} ({{clientId}})]({{{url}}}) to *{{credit}} €*",
+ "Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})",
+ "Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})",
+ "Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}",
+ "Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*",
+ "Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*",
+ "Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member",
+ "Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member",
+ "Client checked as validated despite of duplication": "Client checked as validated despite of duplication from client id {{clientId}}",
+ "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment",
+ "NOT_ZONE_WITH_THIS_PARAMETERS": "There's no zone available for this day",
+ "Created absence": "The worker {{author}} has added an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
+ "Deleted absence": "The worker {{author}} has deleted an absence of type '{{absenceType}}' to {{employee}} for day {{dated}}.",
+ "I have deleted the ticket id": "I have deleted the ticket id [{{id}}]({{{url}}})",
+ "I have restored the ticket id": "I have restored the ticket id [{{id}}]({{{url}}})",
+ "Changed this data from the ticket": "I have changed the data from the ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}",
+ "The grade must be similar to the last one": "The grade must be similar to the last one",
+ "agencyModeFk": "Agency",
+ "clientFk": "Client",
+ "zoneFk": "Zone",
+ "warehouseFk": "Warehouse",
+ "shipped": "Shipped",
+ "landed": "Landed",
+ "addressFk": "Address",
+ "companyFk": "Company",
+ "agency": "Agency",
+ "delivery": "Delivery",
+ "You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data",
+ "The social name cannot be empty": "The social name cannot be empty",
+ "The nif cannot be empty": "The nif cannot be empty",
+ "Amount cannot be zero": "Amount cannot be zero",
+ "Company has to be official": "Company has to be official",
+ "Unable to clone this travel": "Unable to clone this travel",
+ "The observation type can't be repeated": "The observation type can't be repeated",
+ "New ticket request has been created with price": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}* and a price of *{{price}} €*",
+ "New ticket request has been created": "New ticket request has been created *'{{description}}'* for day *{{shipped}}*, with a quantity of *{{quantity}}*",
+ "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
+ "Swift / BIC cannot be empty": "Swift / BIC cannot be empty",
+ "Role name must be written in camelCase": "Role name must be written in camelCase",
+ "Client assignment has changed": "I did change the salesperson ~*\"<{{previousWorkerName}}>\"*~ by *\"<{{currentWorkerName}}>\"* from the client [{{clientName}} ({{clientId}})]({{{url}}})",
+ "None": "None",
+ "error densidad = 0": "error densidad = 0",
+ "This document already exists on this ticket": "This document already exists on this ticket",
+ "serial non editable": "This serial doesn't allow to set a reference",
+ "nickname": "nickname",
+ "State": "State",
+ "regular": "regular",
+ "reserved": "reserved",
+ "Global invoicing failed": "[Global invoicing] Wasn't able to invoice some of the clients",
+ "A ticket with a negative base can't be invoiced": "A ticket with a negative base can't be invoiced",
+ "This client is not invoiceable": "This client is not invoiceable",
+ "INACTIVE_PROVIDER": "Inactive provider",
+ "reference duplicated": "reference duplicated",
+ "The PDF document does not exist": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option",
+ "This item is not available": "This item is not available",
+ "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}",
+ "The type of business must be filled in basic data": "The type of business must be filled in basic data",
+ "The worker has hours recorded that day": "The worker has hours recorded that day",
+ "isWithoutNegatives": "isWithoutNegatives",
+ "routeFk": "routeFk",
+ "Not enough privileges to edit a client with verified data": "Not enough privileges to edit a client with verified data",
+ "Can't change the password of another worker": "Can't change the password of another worker",
+ "No hay un contrato en vigor": "There is no existing contract",
+ "No está permitido trabajar": "Not allowed to work",
+ "Dirección incorrecta": "Wrong direction",
+ "No se permite fichar a futuro": "It is not allowed to sign in the future",
+ "Descanso diario 12h.": "Daily rest 12h.",
+ "Fichadas impares": "Odd signs",
+ "Descanso diario 9h.": "Daily rest 9h.",
+ "Descanso semanal 36h. / 72h.": "Weekly rest 36h. / 72h.",
+ "Verify email": "Verify email",
+ "Click on the following link to verify this email. If you haven't requested this email, just ignore it": "Click on the following link to verify this email. If you haven't requested this email, just ignore it",
+ "Password does not meet requirements": "Password does not meet requirements",
+ "You don't have privileges to change the zone": "You don't have privileges to change the zone or for these parameters there are more than one shipping options, talk to agencies",
+ "Not enough privileges to edit a client": "Not enough privileges to edit a client",
+ "Claim pickup order sent": "Claim pickup order sent [{{claimId}}]({{{claimUrl}}}) to client *{{clientName}}*",
+ "You don't have grant privilege": "You don't have grant privilege",
+ "You don't own the role and you can't assign it to another user": "You don't own the role and you can't assign it to another user",
+ "Email verify": "Email verify",
+ "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) merged with [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})",
+ "App locked": "App locked by user {{userId}}",
+ "The sales of the receiver ticket can't be modified": "The sales of the receiver ticket can't be modified",
+ "Receipt's bank was not found": "Receipt's bank was not found",
+ "This receipt was not compensated": "This receipt was not compensated",
+ "Client's email was not found": "Client's email was not found",
+ "Tickets with associated refunds": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº %d",
+ "It is not possible to modify tracked sales": "It is not possible to modify tracked sales",
+ "It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
+ "It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
+ "Warehouse inventory not set": "Almacén inventario no está establecido",
+ "Component cost not set": "Componente coste no está estabecido",
+ "Description cannot be blank": "Description cannot be blank",
+ "company": "Company",
+ "country": "Country",
+ "clientId": "Id client",
+ "clientSocialName": "Client",
+ "amount": "Amount",
+ "taxableBase": "Taxable base",
+ "ticketFk": "Id ticket",
+ "isActive": "Active",
+ "hasToInvoice": "Invoice",
+ "isTaxDataChecked": "Data checked",
+ "comercialId": "Id Comercial",
+ "comercialName": "Comercial",
+ "Added observation": "Added observation",
+ "Comment added to client": "Comment added to client",
+ "This ticket is already a refund": "This ticket is already a refund",
+ "A claim with that sale already exists": "A claim with that sale already exists",
+ "Pass expired": "The password has expired, change it from Salix",
+ "Can't transfer claimed sales": "Can't transfer claimed sales",
+ "Invalid quantity": "Invalid quantity",
+ "Failed to upload delivery note": "Error to upload delivery note {{id}}",
+ "Mail not sent": "There has been an error sending the invoice to the client [{{clientId}}]({{{clientUrl}}}), please check the email address",
+ "The renew period has not been exceeded": "The renew period has not been exceeded",
+ "You can not use the same password": "You can not use the same password",
+ "Valid priorities": "Valid priorities: %d",
+ "hasAnyNegativeBase": "Negative basis of tickets: {{ticketsIds}}",
+ "hasAnyPositiveBase": "Positive basis of tickets: {{ticketsIds}}",
+ "This ticket cannot be left empty.": "This ticket cannot be left empty. %s",
+ "Social name should be uppercase": "Social name should be uppercase",
+ "Street should be uppercase": "Street should be uppercase",
+ "You don't have enough privileges.": "You don't have enough privileges.",
+ "This ticket is locked": "This ticket is locked",
+ "This ticket is not editable.": "This ticket is not editable.",
+ "The ticket doesn't exist.": "The ticket doesn't exist.",
+ "The sales do not exists": "The sales do not exists",
+ "Ticket without Route": "Ticket without route",
+ "Select a different client": "Select a different client",
+ "Fill all the fields": "Fill all the fields",
+ "Error while generating PDF": "Error while generating PDF",
+ "Can't invoice to future": "Can't invoice to future",
+ "This ticket is already invoiced": "This ticket is already invoiced",
+ "Negative basis of tickets: 23": "Negative basis of tickets: 23",
+ "Booking completed": "Booking complete",
+ "The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
+ "You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
+ "Bank entity must be specified": "Bank entity must be specified",
+ "Try again": "Try again",
+ "keepPrice": "keepPrice",
+ "Cannot past travels with entries": "Cannot past travels with entries",
+ "It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}",
+ "Incorrect pin": "Incorrect pin.",
+ "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
+ "Name should be uppercase": "Name should be uppercase",
+ "You cannot update these fields": "You cannot update these fields",
+ "CountryFK cannot be empty": "Country cannot be empty",
+ "You are not allowed to modify the alias": "You are not allowed to modify the alias",
+ "You already have the mailAlias": "You already have the mailAlias",
"This machine is already in use.": "This machine is already in use.",
"the plate does not exist": "The plate {{plate}} does not exist",
"We do not have availability for the selected item": "We do not have availability for the selected item",
@@ -223,6 +223,7 @@
"printerNotExists": "The printer does not exist",
"There are not picking tickets": "There are not picking tickets",
"ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)",
- "This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
- "They're not your subordinate": "They're not your subordinate"
-}
+ "This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
+ "They're not your subordinate": "They're not your subordinate",
+ "InvoiceIn is already booked": "InvoiceIn is already booked"
+}
\ No newline at end of file
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index 82bd20ee7..e74aadbba 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -354,6 +354,9 @@
"They're not your subordinate": "No es tu subordinado/a.",
"No results found": "No se han encontrado resultados",
"InvoiceIn is already booked": "La factura recibida está contabilizada",
+ "This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia",
+ "Select ticket or client": "Elija un ticket o un client",
+ "It was not able to create the invoice": "No se pudo crear la factura",
"Phone not valid": "Teléfono no es válido",
"User not valid": "Usuario no válido",
"Credentials not valid": "Credenciales no válidas",
diff --git a/modules/claim/back/methods/claim/claimPickupPdf.js b/modules/claim/back/methods/claim/claimPickupPdf.js
index 4b66bd418..232c134f6 100644
--- a/modules/claim/back/methods/claim/claimPickupPdf.js
+++ b/modules/claim/back/methods/claim/claimPickupPdf.js
@@ -35,7 +35,7 @@ module.exports = Self => {
path: '/:id/claim-pickup-pdf',
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order');
diff --git a/modules/claim/back/methods/claim/createFromSales.js b/modules/claim/back/methods/claim/createFromSales.js
index 30093e43d..1af479dbb 100644
--- a/modules/claim/back/methods/claim/createFromSales.js
+++ b/modules/claim/back/methods/claim/createFromSales.js
@@ -83,7 +83,6 @@ module.exports = Self => {
const newClaimBeginning = models.ClaimBeginning.create({
saleFk: sale.id,
claimFk: newClaim.id,
- quantity: sale.quantity
}, myOptions);
promises.push(newClaimBeginning);
diff --git a/modules/claim/back/methods/claim/downloadFile.js b/modules/claim/back/methods/claim/downloadFile.js
index 61784f39e..ffcf51367 100644
--- a/modules/claim/back/methods/claim/downloadFile.js
+++ b/modules/claim/back/methods/claim/downloadFile.js
@@ -33,7 +33,7 @@ module.exports = Self => {
path: `/:id/downloadFile`,
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.downloadFile = async function(ctx, id) {
diff --git a/modules/claim/back/methods/claim/specs/createFromSales.spec.js b/modules/claim/back/methods/claim/specs/createFromSales.spec.js
index fe009c1c3..25414d1db 100644
--- a/modules/claim/back/methods/claim/specs/createFromSales.spec.js
+++ b/modules/claim/back/methods/claim/specs/createFromSales.spec.js
@@ -37,7 +37,7 @@ describe('Claim createFromSales()', () => {
let claimBeginning = await models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
expect(claimBeginning.saleFk).toEqual(newSale[0].id);
- expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
+ expect(claimBeginning.quantity).toEqual(0);
await tx.rollback();
} catch (e) {
@@ -67,7 +67,7 @@ describe('Claim createFromSales()', () => {
const claimBeginning = await models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
expect(claimBeginning.saleFk).toEqual(newSale[0].id);
- expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
+ expect(claimBeginning.quantity).toEqual(0);
await tx.rollback();
} catch (e) {
diff --git a/modules/claim/back/models/claim-beginning.json b/modules/claim/back/models/claim-beginning.json
index d224586da..ba6e83808 100644
--- a/modules/claim/back/models/claim-beginning.json
+++ b/modules/claim/back/models/claim-beginning.json
@@ -16,8 +16,7 @@
"description": "Identifier"
},
"quantity": {
- "type": "number",
- "required": true
+ "type": "number"
}
},
"relations": {
diff --git a/modules/client/back/methods/client/campaignMetricsPdf.js b/modules/client/back/methods/client/campaignMetricsPdf.js
index 20c35494e..dc89a6802 100644
--- a/modules/client/back/methods/client/campaignMetricsPdf.js
+++ b/modules/client/back/methods/client/campaignMetricsPdf.js
@@ -46,7 +46,7 @@ module.exports = Self => {
path: '/:id/campaign-metrics-pdf',
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'campaign-metrics');
diff --git a/modules/entry/back/methods/entry/entryOrderPdf.js b/modules/entry/back/methods/entry/entryOrderPdf.js
index 93c1b6bd9..7a432123e 100644
--- a/modules/entry/back/methods/entry/entryOrderPdf.js
+++ b/modules/entry/back/methods/entry/entryOrderPdf.js
@@ -34,7 +34,7 @@ module.exports = Self => {
path: '/:id/entry-order-pdf',
verb: 'GET'
},
- accessScopes: ['read:multimedia']
+ accessScopes: ['DEFAULT', 'read:multimedia']
});
Self.entryOrderPdf = (ctx, id) => Self.printReport(ctx, id, 'entry-order');
diff --git a/modules/entry/front/basic-data/index.html b/modules/entry/front/basic-data/index.html
index 6bccb0b5f..57de1c5f7 100644
--- a/modules/entry/front/basic-data/index.html
+++ b/modules/entry/front/basic-data/index.html
@@ -123,7 +123,9 @@
{{$t('total')}} | +{{total.price | currency('EUR', $i18n.locale)}} | ++ |