diff --git a/CHANGELOG.md b/CHANGELOG.md index b2be92faa..0bb15511b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,14 @@ 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 +- (Worker -> Ver albarán) Ya no aparece la página en blanco + +## [24.18.01] - 2024-05-07 ## [24.16.01] - 2024-04-18 diff --git a/Jenkinsfile b/Jenkinsfile index bfe31fc60..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}" 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/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/.dump/data.sql b/db/dump/.dump/data.sql index 8c6794a5b..e74acc89b 100644 --- a/db/dump/.dump/data.sql +++ b/db/dump/.dump/data.sql @@ -3,7 +3,7 @@ USE `util`; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -INSERT INTO `version` VALUES ('vn-database','10977','7a021c9ac6f804cc120542b65d7461283d516569','2024-04-18 09:13:43','11000'); +INSERT INTO `version` VALUES ('vn-database','11018','878ee9e3039dd06ad456fa475f0d646d8bae3d4b','2024-05-07 07:34:42','11032'); INSERT INTO `versionLog` VALUES ('vn-database','10107','00-firstScript.sql','jenkins@10.0.2.69','2022-04-23 10:53:53',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10112','00-firstScript.sql','jenkins@10.0.2.69','2022-05-09 09:14:53',NULL,NULL); @@ -688,6 +688,9 @@ INSERT INTO `versionLog` VALUES ('vn-database','10890','00-firstScript.sql','jen INSERT INTO `versionLog` VALUES ('vn-database','10891','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-07 08:12:58',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10892','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:53',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10893','00-sage.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:53',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10895','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:53',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10895','01-secondScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:56',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10895','02-thirdScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10896','01-financialProductType.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-07 08:12:58',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10896','02-flight.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-07 08:12:58',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10896','03-gastos_resumen.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-07 08:13:00',NULL,NULL); @@ -737,11 +740,13 @@ INSERT INTO `versionLog` VALUES ('vn-database','10940','00-firstScript.sql','jen INSERT INTO `versionLog` VALUES ('vn-database','10941','00-restoreVn2008Jerarquia.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-03-07 09:36:57',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10942','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-03-07 10:24:45',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10943','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-03-07 10:29:57',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10944','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10946','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-03-08 07:56:17',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10948','00-addReconciliationConfig.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10948','02-grantPrivileges.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10948','03-modifyColumn.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10949','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:52',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10950','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10953','00-account.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:54',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10953','01-bs.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:54',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10953','02-edi.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-04 07:34:54',NULL,NULL); @@ -768,7 +773,19 @@ INSERT INTO `versionLog` VALUES ('vn-database','10975','00-action.sql','jenkins@ INSERT INTO `versionLog` VALUES ('vn-database','10975','01-expeditionFk.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-03 12:04:52',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10976','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:57',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10977','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-18 07:40:57',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10984','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); INSERT INTO `versionLog` VALUES ('vn-database','10988','00-pbx_prefix.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-04-11 17:00:16',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10990','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10994','00-modifyAcls.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10996','00-dropOrderRecalc.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10996','01-dropTicketRecalc.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10996','02-dropTravelRecalc.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:31:59',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','10997','00-groupingMode.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:34:21',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','11003','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:34:21',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','11007','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:34:21',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','11016','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-27 13:16:09',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','11018','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-05-07 07:34:21',NULL,NULL); +INSERT INTO `versionLog` VALUES ('vn-database','11021','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-04-30 09:07:56',NULL,NULL); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; @@ -1311,7 +1328,6 @@ INSERT INTO `ACL` VALUES (211,'TravelLog','*','READ','ALLOW','ROLE','buyer'); INSERT INTO `ACL` VALUES (212,'Thermograph','*','*','ALLOW','ROLE','buyer'); INSERT INTO `ACL` VALUES (213,'TravelThermograph','*','WRITE','ALLOW','ROLE','buyer'); INSERT INTO `ACL` VALUES (214,'Entry','*','*','ALLOW','ROLE','buyer'); -INSERT INTO `ACL` VALUES (215,'TicketWeekly','*','WRITE','ALLOW','ROLE','buyer'); INSERT INTO `ACL` VALUES (216,'TravelThermograph','*','READ','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (218,'Intrastat','*','*','ALLOW','ROLE','buyer'); INSERT INTO `ACL` VALUES (221,'UserConfig','getUserConfig','READ','ALLOW','ROLE','account'); @@ -1667,9 +1683,9 @@ INSERT INTO `ACL` VALUES (610,'Ticket','deliveryNoteCsv','READ','ALLOW','ROLE',' INSERT INTO `ACL` VALUES (611,'State','find','READ','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (612,'State','findById','READ','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (613,'State','findOne','READ','ALLOW','ROLE','employee'); -INSERT INTO `ACL` VALUES (614,'Worker','find','READ','ALLOW','ROLE','employee'); -INSERT INTO `ACL` VALUES (615,'Worker','findById','READ','ALLOW','ROLE','employee'); -INSERT INTO `ACL` VALUES (616,'Worker','findOne','READ','ALLOW','ROLE','employee'); +INSERT INTO `ACL` VALUES (614,'Worker','find','READ','ALLOW','ROLE','hr'); +INSERT INTO `ACL` VALUES (615,'Worker','findById','READ','ALLOW','ROLE','hr'); +INSERT INTO `ACL` VALUES (616,'Worker','findOne','READ','ALLOW','ROLE','hr'); INSERT INTO `ACL` VALUES (617,'Worker','filter','READ','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (618,'Worker','getWorkedHours','READ','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (619,'Worker','active','READ','ALLOW','ROLE','employee'); @@ -1842,6 +1858,10 @@ INSERT INTO `ACL` VALUES (822,'SupplierDms','*','*','ALLOW','ROLE','employee'); INSERT INTO `ACL` VALUES (823,'MailAlias','*','*','ALLOW','ROLE','developerBoss'); INSERT INTO `ACL` VALUES (824,'ItemShelving','hasItemOlder','READ','ALLOW','ROLE','production'); INSERT INTO `ACL` VALUES (825,'Application','getEnumValues','*','ALLOW','ROLE','employee'); +INSERT INTO `ACL` VALUES (826,'Ticket','editZone','WRITE','ALLOW','ROLE','salesAssistant'); +INSERT INTO `ACL` VALUES (827,'TicketWeekly','deleteById','WRITE','ALLOW','ROLE','buyerBoss'); +INSERT INTO `ACL` VALUES (828,'TicketWeekly','upsert','WRITE','ALLOW','ROLE','buyer'); +INSERT INTO `ACL` VALUES (829,'Worker','__get__summary','READ','ALLOW','ROLE','employee'); INSERT INTO `fieldAcl` VALUES (1,'Client','name','update','employee'); INSERT INTO `fieldAcl` VALUES (2,'Client','contact','update','employee'); @@ -2160,7 +2180,7 @@ INSERT INTO `continent` VALUES (3,'África','AF'); INSERT INTO `continent` VALUES (4,'Europa','EU'); INSERT INTO `continent` VALUES (5,'Oceanía','OC'); -INSERT INTO `department` VALUES (1,'VN','VERDNATURA',1,110,763,0,0,0,0,26,NULL,'/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (1,'VN','VERDNATURA',1,118,763,0,0,0,0,26,NULL,'/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (22,'shopping','COMPRAS',2,3,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (23,'CMA','CAMARA',13,14,NULL,72,1,1,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,1,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (31,'it','INFORMATICA',4,5,NULL,72,0,0,1,0,1,'/1/','informatica-cau',1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); @@ -2171,50 +2191,54 @@ INSERT INTO `department` VALUES (37,'PROD','PRODUCCION',12,35,NULL,72,1,1,1,11,1 INSERT INTO `department` VALUES (38,'picking','SACADO',15,16,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (39,'packing','ENCAJADO',17,18,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (41,'administration','ADMINISTRACION',36,37,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (43,'VT','VENTAS',38,69,NULL,0,0,0,1,15,1,'/1/',NULL,1,'',1,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (44,'management','GERENCIA',70,71,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (45,'logistic','LOGISTICA',72,73,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (46,'delivery','REPARTO',74,75,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (48,'storage','ALMACENAJE',76,77,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (49,NULL,'PROPIEDAD',78,79,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (52,NULL,'CARGA AEREA',80,81,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (43,'VT','VENTAS',38,77,NULL,0,0,0,1,19,1,'/1/',NULL,1,'',1,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (44,'management','GERENCIA',78,79,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (45,'logistic','LOGISTICA',80,81,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (46,'delivery','REPARTO',82,83,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (48,'storage','ALMACENAJE',84,85,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (49,NULL,'PROPIEDAD',86,87,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (52,NULL,'CARGA AEREA',88,89,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (53,'marketing','MARKETING Y COMUNICACIÓN',39,40,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (54,NULL,'ORNAMENTALES',82,83,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (54,NULL,'ORNAMENTALES',90,91,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (55,NULL,'TALLER NATURAL',19,20,14548,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1118,NULL,NULL,NULL); INSERT INTO `department` VALUES (56,NULL,'TALLER ARTIFICIAL',21,22,8470,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1927,NULL,NULL,NULL); -INSERT INTO `department` VALUES (58,'CMP','CAMPOS',84,87,NULL,72,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (59,'maintenance','MANTENIMIENTO',88,89,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (58,'CMP','CAMPOS',92,95,NULL,72,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (59,'maintenance','MANTENIMIENTO',96,97,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (60,'claims','RECLAMACIONES',41,42,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,1,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (61,NULL,'VNH',90,93,NULL,73,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (66,NULL,'VERDNAMADRID',94,95,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (61,NULL,'VNH',98,101,NULL,73,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (66,NULL,'VERDNAMADRID',102,103,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (68,NULL,'COMPLEMENTOS',23,24,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (69,NULL,'VERDNABARNA',96,97,NULL,74,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (69,NULL,'VERDNABARNA',104,105,NULL,74,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (80,'vallesTeam','EQUIPO J VALLES',43,44,4250,72,0,0,2,0,43,'/1/43/','jvp_equipo',1,'equipojvalles@verdnatura.es',0,0,0,0,NULL,NULL,'5300',NULL); -INSERT INTO `department` VALUES (86,NULL,'LIMPIEZA',98,99,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (89,NULL,'COORDINACION',100,101,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (90,NULL,'TRAILER',91,92,NULL,0,0,0,2,0,61,'/1/61/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (86,NULL,'LIMPIEZA',106,107,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (89,NULL,'COORDINACION',108,109,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (90,NULL,'TRAILER',99,100,NULL,0,0,0,2,0,61,'/1/61/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (91,'artificial','ARTIFICIAL',25,26,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (92,NULL,'EQUIPO SILVERIO',45,46,1203,0,0,0,2,0,43,'/1/43/','sdc_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (94,'brocalTeam','EQUIPO J BROCAL',47,48,3797,0,0,0,2,0,43,'/1/43/','jes_equipo',0,'equipojbrocal@verdnatura.es',0,0,0,0,NULL,NULL,'5100',NULL); -INSERT INTO `department` VALUES (95,'zambranoTeam','EQUIPO C ZAMBRANO',49,50,4667,0,0,0,2,0,43,'/1/43/','czg_equipo',0,'equipoczambrano@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL); +INSERT INTO `department` VALUES (95,'spainTeam1','EQUIPO ESPAÑA 1',49,50,24065,0,0,0,2,0,43,'/1/43/','es1_equipo',0,'españa1@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL); INSERT INTO `department` VALUES (96,NULL,'EQUIPO C LOPEZ',51,52,4661,0,0,0,2,0,43,'/1/43/','cla_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (115,NULL,'EQUIPO CLAUDI',53,54,3810,0,0,0,2,0,43,'/1/43/','csr_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (123,NULL,'EQUIPO ELENA BASCUÑANA',55,56,7102,0,0,0,2,0,43,'/1/43/','ebt_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (124,NULL,'CONTROL INTERNO',102,103,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (124,NULL,'CONTROL INTERNO',110,111,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (125,'miriamMarTeam','EQUIPO MIRIAM MAR',57,58,1118,0,0,0,2,0,43,'/1/43/','mir_equipo',0,'equipomirgir@verdnatura.es',0,0,0,0,NULL,NULL,'5200',NULL); INSERT INTO `department` VALUES (126,NULL,'PRESERVADO',27,28,NULL,0,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (128,NULL,'PALETIZADO',29,30,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (130,NULL,'REVISION',31,32,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (131,'greenhouse','INVERNADERO',85,86,NULL,0,0,0,2,0,58,'/1/58/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (131,'greenhouse','INVERNADERO',93,94,NULL,0,0,0,2,0,58,'/1/58/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (132,NULL,'EQUIPO DC',59,60,1731,0,0,0,2,0,43,'/1/43/','dc_equipo',1,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (133,'franceTeam','EQUIPO FRANCIA',61,62,1731,72,0,0,2,0,43,'/1/43/','fr_equipo',1,'gestionfrancia@verdnatura.es',0,0,0,0,NULL,NULL,'3300',NULL); INSERT INTO `department` VALUES (134,'portugalTeam','EQUIPO PORTUGAL',63,64,6264,0,0,0,2,0,43,'/1/43/','pt_equipo',1,'portugal@verdnatura.es',0,0,0,0,NULL,NULL,'3500',NULL); -INSERT INTO `department` VALUES (135,'routers','ENRUTADORES',104,105,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',106,107,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); -INSERT INTO `department` VALUES (137,'sorter','SORTER',108,109,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (135,'routers','ENRUTADORES',112,113,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',114,115,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (137,'sorter','SORTER',116,117,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (139,'soriaTeam','EQUIPO J SORIA ',65,66,3803,0,0,0,2,0,43,'/1/43/','jss_equipo',1,'equipojsoria@verdnatura.es',0,0,0,0,NULL,NULL,'5400',NULL); -INSERT INTO `department` VALUES (140,'hollandTeam','EQUIPO HOLANDA',67,68,NULL,0,0,0,2,0,43,'/1/43/','nl_equipo',1,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (140,'hollandTeam','EQUIPO HOLANDA',67,68,NULL,0,0,0,2,0,43,'/1/43/','nl_equipo',1,NULL,1,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `department` VALUES (141,NULL,'PREVIA',33,34,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (142,NULL,'EQUIPO ESPAÑA 2',69,70,3797,0,0,0,2,0,43,'/1/43/','jes_equipo',0,'equipojbrocal@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (143,NULL,'EQUIPO ESPAÑA 3',71,72,4379,0,0,0,2,0,43,'/1/43/','mir_equipo',0,'equipomirgir@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (144,NULL,'EQUIPO ESPAÑA 4',73,74,3803,0,0,0,2,0,43,'/1/43/','jss_equipo',0,'equipojsoria@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `department` VALUES (145,NULL,'EQUIPO ESPAÑA 5',75,76,4250,0,0,0,2,0,43,'/1/43/','jvp_equipo',0,'equipojvalles@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL); INSERT INTO `docuware` VALUES (1,'deliveryNote','Albaranes cliente','find','find','N__ALBAR_N',NULL); INSERT INTO `docuware` VALUES (2,'deliveryNote','Albaranes cliente','store','Archivar','N__ALBAR_N',NULL); diff --git a/db/dump/.dump/privileges.sql b/db/dump/.dump/privileges.sql index d63ce9707..ad060f997 100644 --- a/db/dump/.dump/privileges.sql +++ b/db/dump/.dump/privileges.sql @@ -92,7 +92,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','guest','tagL10n','root@pc-jua INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','guest','config','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','','Select'); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','guest','originL10n','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','Select',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','guest','origin','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','Select',''); -INSERT IGNORE INTO `tables_priv` VALUES ('','vn','entryEditor','entry','guillermo@10.5.1.4','0000-00-00 00:00:00','Insert,Update',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','entryEditor','entry','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Insert','Update'); INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','guest','social','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','Select',''); INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','guest','image','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','Select',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','guest','tblContadores','root@pc-juan.dyn.verdnatura.es','2022-08-03 23:44:43','','Select'); @@ -1248,7 +1248,7 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','Recib INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','Rutas','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Update,Delete',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','Movimientos','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Update',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','state','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select',''); -INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryAssistant','route','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Insert,Update',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryAssistant','route','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Insert,Update,Delete',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryAssistant','routeComplement','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select,Insert,Update,Delete',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','deliveryAssistant','deliveryMethod','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Select',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn2008','deliveryAssistant','Tickets','alexm@db-proxy2.static.verdnatura.es','0000-00-00 00:00:00','Update',''); @@ -1388,6 +1388,13 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','buyer','supplierFreight','jen INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','payrollWorker','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Insert',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','payrollWorkCenter','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); INSERT IGNORE INTO `tables_priv` VALUES ('','vn','hr','payrollComponent','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select,Update',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','professionalCategory','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','production','ticketObservation','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Insert',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','deliveryNoteState','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','deliveryNote','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','invoiceOutExpense','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','delivery','carlosap@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select',''); +INSERT IGNORE INTO `tables_priv` VALUES ('','vn','administrative','entry','jenkins@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Update',''); /*!40000 ALTER TABLE `tables_priv` ENABLE KEYS */; /*!40000 ALTER TABLE `columns_priv` DISABLE KEYS */; @@ -1623,6 +1630,36 @@ INSERT IGNORE INTO `columns_priv` VALUES ('','vn','employee','ticket','cmrFk',' INSERT IGNORE INTO `columns_priv` VALUES ('','vn','employee','ticket','editorFk','0000-00-00 00:00:00','Update'); INSERT IGNORE INTO `columns_priv` VALUES ('','vn','employee','config','truckLength','0000-00-00 00:00:00','Select'); INSERT IGNORE INTO `columns_priv` VALUES ('','vn','production','item','isBoxPickingMode','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','id','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','supplierFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','dated','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','invoiceNumber','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','isExcludedFromAvailable','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','isConfirmed','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','isOrdered','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','isRaid','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','commission','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','created','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','evaNotes','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','travelFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','currencyFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','companyFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','gestDocFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','invoiceInFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','loadPriority','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','kop','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','sub','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','pro','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','auction','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','invoiceAmount','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','buyerFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','typeFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','reference','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','observationEditorFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','clonedFrom','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','editorFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','lockerUserFk','0000-00-00 00:00:00','Update'); +INSERT IGNORE INTO `columns_priv` VALUES ('','vn','entryEditor','entry','locked','0000-00-00 00:00:00','Update'); /*!40000 ALTER TABLE `columns_priv` ENABLE KEYS */; /*!40000 ALTER TABLE `procs_priv` DISABLE KEYS */; @@ -1741,9 +1778,8 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','hasanynegativ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','marketingBoss','hasanynegativebase','FUNCTION','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','hassomenegativebase','FUNCTION','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','util','administrative','accountshorttostandard','FUNCTION','alexm@%','Execute','0000-00-00 00:00:00'); -INSERT IGNORE INTO `procs_priv` VALUES ('','vn2008','logistic','raidupdate','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','grafana','lastdayofweek','FUNCTION','juan@db-proxy2.static.verdnatura.es','Execute','0000-00-00 00:00:00'); -INSERT IGNORE INTO `procs_priv` VALUES ('','vn2008','artificialBoss','raidupdate','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); +INSERT IGNORE INTO `procs_priv` VALUES ('','vn','financial','creditInsurance_GetRisk','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','marketingBoss','invoicefromclient','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','invoicefromclient','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','invoicefromticket','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); @@ -1843,7 +1879,6 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','packinglistswitch', INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','previoussticker_get','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','productioncontrol','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','productionsectorlist','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); -INSERT IGNORE INTO `procs_priv` VALUES ('','vn','financialBoss','riskallclients','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','routemonitor_calculate','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','account','developer','user_haspriv','FUNCTION','jgallego@db-proxy1.static.verdnatura.es','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','employee','salegroup_add','PROCEDURE','alexm@%','Execute','0000-00-00 00:00:00'); @@ -2022,6 +2057,8 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','entry_getTransfer','PR INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','intrastat_estimateNet','FUNCTION','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','artificialBoss','confection_controlSource','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); INSERT IGNORE INTO `procs_priv` VALUES ('','vn','financial','remittance_calc','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); +INSERT IGNORE INTO `procs_priv` VALUES ('','util','developer','connection_kill','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); +INSERT IGNORE INTO `procs_priv` VALUES ('','vn','financial','client_getRisk','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00'); /*!40000 ALTER TABLE `procs_priv` ENABLE KEYS */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; @@ -2056,7 +2093,7 @@ INSERT IGNORE INTO `global_priv` VALUES ('','deliveryBoss','{\"access\":0,\"ver INSERT IGNORE INTO `global_priv` VALUES ('','developer','{\"access\": 5909905728, \"is_role\": true, \"version_id\": 101106}'); INSERT IGNORE INTO `global_priv` VALUES ('','developerBoss','{\"access\":33554432,\"version_id\":101106,\"is_role\":true}'); INSERT IGNORE INTO `global_priv` VALUES ('','employee','{\"access\": 0, \"is_role\": true, \"version_id\": 101106}'); -INSERT IGNORE INTO `global_priv` VALUES ('','entryEditor','{\"access\":0,\"version_id\":100707,\"is_role\":true}'); +INSERT IGNORE INTO `global_priv` VALUES ('','entryEditor','{\"access\":0,\"version_id\":101106,\"is_role\":true}'); INSERT IGNORE INTO `global_priv` VALUES ('','ext','{\"access\": 0, \"is_role\": true, \"version_id\": 100707}'); INSERT IGNORE INTO `global_priv` VALUES ('','financial','{\"access\": 0, \"version_id\": 101106, \"is_role\": true}'); INSERT IGNORE INTO `global_priv` VALUES ('','financialBoss','{\"access\": 0, \"version_id\": 101106, \"is_role\": true}'); diff --git a/db/dump/.dump/structure.sql b/db/dump/.dump/structure.sql index 4812b536b..b00758ac5 100644 --- a/db/dump/.dump/structure.sql +++ b/db/dump/.dump/structure.sql @@ -3149,18 +3149,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, @@ -3174,20 +3174,20 @@ 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; + 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -3264,18 +3264,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 @@ -3284,18 +3284,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 @@ -3455,17 +3455,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 ;; @@ -3510,17 +3510,17 @@ 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -3947,12 +3947,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) @@ -5629,23 +5629,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 @@ -6286,13 +6286,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 @@ -7083,11 +7083,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; @@ -7110,7 +7110,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 @@ -7118,19 +7118,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 @@ -7156,7 +7156,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 ; @@ -7216,39 +7216,39 @@ 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -8834,7 +8834,7 @@ CREATE TABLE `expedition_PrintOut` ( `shopName` varchar(100) NOT NULL DEFAULT ' ', `isPrinted` int(11) NOT NULL DEFAULT 0, `created` timestamp NOT NULL DEFAULT current_timestamp(), - `printerFk` tinyint(3) unsigned NOT NULL DEFAULT 0, + `printerFk` int(10) unsigned NOT NULL DEFAULT 0, `routeFk` int(11) NOT NULL DEFAULT 0, `parkingCode` varchar(8) NOT NULL DEFAULT ' ', `truckName` varchar(25) NOT NULL DEFAULT ' ', @@ -8880,10 +8880,10 @@ DROP TABLE IF EXISTS `printer`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `printer` ( - `id` tinyint(3) unsigned NOT NULL, + `id` int(10) unsigned NOT NULL, `description` varchar(50) NOT NULL, PRIMARY KEY (`id`), - CONSTRAINT `printer_FK` FOREIGN KEY (`id`) REFERENCES `vn`.`printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + CONSTRAINT `vnPrinter_FK` FOREIGN KEY (`id`) REFERENCES `vn`.`printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -10415,7 +10415,6 @@ proc:BEGIN DECLARE vPackage INT; DECLARE vPutOrderFk INT; DECLARE vIsLot BOOLEAN; - DECLARE vForceToPacking INT DEFAULT 2; DECLARE vEntryFk INT; DECLARE vHasToChangePackagingFk BOOLEAN; DECLARE vIsFloramondoDirect BOOLEAN; @@ -10551,7 +10550,7 @@ proc:BEGIN @pac := GREATEST(1, IFNULL(i.stemMultiplier, 1) * e.pac / @t) packing, IFNULL(b.`grouping`, e.pac), @pac * e.qty, - vForceToPacking, + 'packing', IF(vHasToChangePackagingFk OR b.packagingFk IS NULL, vPackage, b.packagingFk), (IFNULL(i.weightByPiece, 0) * @pac) / 1000 FROM ekt e @@ -11347,7 +11346,7 @@ proc: BEGIN o.NumberOfUnits etiquetas, o.NumberOfItemsPerCask packing, GREATEST(1, IFNULL(o.MinimumQuantity,0)) * o.NumberOfItemsPerCask `grouping`, - 2, -- Obliga al Packing + 'packing', o.embalageCode, o.diId FROM edi.offer o @@ -11920,6 +11919,31 @@ DELIMITER ; -- /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `catalogue_findById` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `catalogue_findById`(vSelf INT) + READS SQL DATA +BEGIN +/** + * Returns one recordset from catalogue + * + * @param vCatalogueFk Identifier de floranet.catalogue + */ + SELECT * FROM catalogue WHERE id = vSelf; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `catalogue_get` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -11932,7 +11956,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `catalogue_get`(vLanded DATE, vPosta READS SQL DATA proc:BEGIN /** - * Returns list, price and all the stuff regarding the floranet items + * Returns list, price and all the stuff regarding the floranet items. * * @param vLanded Delivery date * @param vPostalCode Delivery address postal code @@ -12010,7 +12034,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `contact_request`( READS SQL DATA BEGIN /** - * Set actions for contact request. + * Set actions for contact request * * @param vPostalCode Delivery address postal code */ @@ -12035,7 +12059,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `deliveryDate_get`(vPostalCode VARCH READS SQL DATA BEGIN /** - * Returns available dates for this postalCode, in the next seven days + * Returns available dates for this postalCode, in the next seven days. * * @param vPostalCode Delivery address postal code */ @@ -12073,7 +12097,7 @@ DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `order_confirm`(vCatalogueFk INT) READS SQL DATA BEGIN -/** Update order.isPaid field +/** Update order.isPaid field. * * @param vCatalogueFk floranet.catalogue.id * @@ -12103,40 +12127,23 @@ DELIMITER ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `order_put`(vOrder JSON) +CREATE DEFINER=`root`@`localhost` PROCEDURE `order_put`(vJsonData JSON) READS SQL DATA BEGIN /** - * Get and process an order + * Get and process an order. * - * @param vOrder Data of the order - * - * Customer data: , , - * - * Item data: , - * - * Delivery data: ,
, - * + * @param vJsonData The order data in json format */ - INSERT IGNORE INTO `order`( - catalogueFk, - customerName, - email, - customerPhone, - message, - deliveryName, - address, - deliveryPhone - ) - VALUES (JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.catalogueFk')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerName')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.email')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerPhone')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.message')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryName')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.address')), - JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryPhone')) - ); + INSERT INTO `order` + SET catalogueFk = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.products[0].id')), + customerName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerName')), + email = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.email')), + customerPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerPhone')), + message= JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.message')), + deliveryName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryName')), + address = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.address')), + deliveryPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryPhone')); SELECT LAST_INSERT_ID() orderFk; END ;; @@ -12159,7 +12166,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `sliders_get`() READS SQL DATA BEGIN /** - * Returns list of url for sliders + * Returns list of url for sliders. */ SELECT CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image) url, @@ -12878,21 +12885,6 @@ CREATE TABLE `orderConfig` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `orderRecalc` --- - -DROP TABLE IF EXISTS `orderRecalc`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `orderRecalc` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `orderFk` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `orderRecalc_ibfk_1` (`orderFk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Queue of changed orders to recalc it''s total'; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `orderRow` -- @@ -13364,27 +13356,6 @@ CREATE TABLE `visitUser` ( -- -- Dumping events for database 'hedera' -- -/*!50106 SET @save_time_zone= @@TIME_ZONE */ ; -/*!50106 DROP EVENT IF EXISTS `order_doRecalc` */; -DELIMITER ;; -/*!50003 SET @saved_cs_client = @@character_set_client */ ;; -/*!50003 SET @saved_cs_results = @@character_set_results */ ;; -/*!50003 SET @saved_col_connection = @@collation_connection */ ;; -/*!50003 SET character_set_client = utf8mb4 */ ;; -/*!50003 SET character_set_results = utf8mb4 */ ;; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;; -/*!50003 SET @saved_time_zone = @@time_zone */ ;; -/*!50003 SET time_zone = 'SYSTEM' */ ;; -/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `order_doRecalc` ON SCHEDULE EVERY 10 SECOND STARTS '2019-08-29 14:18:04' ON COMPLETION PRESERVE DISABLE DO CALL order_doRecalc */ ;; -/*!50003 SET time_zone = @saved_time_zone */ ;; -/*!50003 SET sql_mode = @saved_sql_mode */ ;; -/*!50003 SET character_set_client = @saved_cs_client */ ;; -/*!50003 SET character_set_results = @saved_cs_results */ ;; -/*!50003 SET collation_connection = @saved_col_connection */ ;; -DELIMITER ; -/*!50106 SET TIME_ZONE= @save_time_zone */ ; -- -- Dumping routines for database 'hedera' @@ -15435,72 +15406,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `order_doRecalc` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `order_getAvailable` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -15705,35 +15610,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `order_requestRecalc` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `order_update` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -17501,94 +17377,6 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; --- --- Current Database: `rfid` --- - -CREATE DATABASE /*!32312 IF NOT EXISTS*/ `rfid` /*!40100 DEFAULT CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci */; - -USE `rfid`; - --- --- Table structure for table `expedition_PrintOut` --- - -DROP TABLE IF EXISTS `expedition_PrintOut`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `expedition_PrintOut` ( - `expeditionFk` int(11) NOT NULL, - `ticketFk` int(11) NOT NULL, - `addressFk` int(11) NOT NULL, - `street` varchar(100) NOT NULL, - `postalCode` varchar(10) NOT NULL, - `city` varchar(100) NOT NULL, - `shopName` varchar(100) NOT NULL, - `isPrinted` tinyint(1) NOT NULL DEFAULT 0, - `created` timestamp NOT NULL DEFAULT current_timestamp(), - `printerFk` int(11) NOT NULL DEFAULT 1, - `routeFk` int(11) DEFAULT NULL, - `parkingCode` varchar(8) DEFAULT NULL, - `truckName` varchar(25) DEFAULT NULL, - PRIMARY KEY (`expeditionFk`), - KEY `expedition_PrintOut_FK` (`printerFk`), - CONSTRAINT `expedition_PrintOut_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `expedition_Read` --- - -DROP TABLE IF EXISTS `expedition_Read`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `expedition_Read` ( - `expeditionFk` int(11) NOT NULL, - `created` timestamp NOT NULL DEFAULT current_timestamp(), - `readingPointFk` int(11) DEFAULT NULL, - PRIMARY KEY (`expeditionFk`), - KEY `expedition_Read_FK` (`readingPointFk`), - CONSTRAINT `expedition_Read_FK` FOREIGN KEY (`readingPointFk`) REFERENCES `readingPoint` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `printer` --- - -DROP TABLE IF EXISTS `printer`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `printer` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `description` varchar(50) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `readingPoint` --- - -DROP TABLE IF EXISTS `readingPoint`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `readingPoint` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `description` varchar(100) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping events for database 'rfid' --- - --- --- Dumping routines for database 'rfid' --- - -- -- Current Database: `sage` -- @@ -18970,7 +18758,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; @@ -23861,8 +23649,8 @@ DELIMITER ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `inbound_addPick`( vSelf INT, - vOutboundFk INT, - vQuantity INT + vOutboundFk INT, + vQuantity INT ) BEGIN INSERT INTO inboundPick @@ -23890,9 +23678,9 @@ DELIMITER ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `inbound_removePick`( vSelf INT, - vOutboundFk INT, - vQuantity INT, - vTotalQuantity INT + vOutboundFk INT, + vQuantity INT, + vTotalQuantity INT ) BEGIN IF vQuantity < vTotalQuantity THEN @@ -23923,9 +23711,9 @@ DELIMITER ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `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 @@ -23951,7 +23739,7 @@ BEGIN DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; - + SET vSupplied = 0; OPEN vPicks; @@ -23967,7 +23755,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 @@ -24019,7 +23807,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; @@ -24047,8 +23835,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 @@ -24060,8 +23848,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; @@ -24084,40 +23872,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `log_add` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `log_clean` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -24189,7 +23943,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; @@ -24225,8 +23979,8 @@ DELIMITER ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `log_refreshBuy`( - `vTableName` VARCHAR(255), - `vTableId` INT) + `vTableName` VARCHAR(255), + `vTableId` INT) BEGIN DROP TEMPORARY TABLE IF EXISTS tValues; CREATE TEMPORARY TABLE tValues @@ -24236,7 +23990,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, @@ -24249,7 +24003,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 @@ -24277,7 +24031,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, @@ -24292,7 +24046,7 @@ BEGIN quantity, IF(isIn, isDelivered, isReceived) AND !isRaid FROM tValues - WHERE !isIn OR !lessThanInventory; + WHERE !isIn OR !lessThanInventory; DROP TEMPORARY TABLE tValues; END ;; @@ -24312,14 +24066,14 @@ DELIMITER ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `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, @@ -24335,24 +24089,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 ;; @@ -24372,11 +24126,11 @@ DELIMITER ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `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, @@ -24386,7 +24140,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 @@ -24404,33 +24158,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 ;; @@ -24696,7 +24450,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; @@ -24710,7 +24464,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; @@ -24781,16 +24535,16 @@ DELIMITER ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `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 @@ -25005,7 +24759,7 @@ CREATE TABLE `notificationAcl` ( `roleFk` int(10) unsigned NOT NULL, PRIMARY KEY (`notificationFk`,`roleFk`), KEY `notificationAcl_ibfk_2` (`roleFk`), - CONSTRAINT `notificationAcl_ibfk_1` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `notificationAcl_Fk` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `notificationAcl_ibfk_2` FOREIGN KEY (`roleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -25043,7 +24797,7 @@ CREATE TABLE `notificationQueue` ( KEY `notificationFk` (`notificationFk`), KEY `authorFk` (`authorFk`), KEY `status` (`status`), - CONSTRAINT `nnotificationQueue_ibfk_1` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`name`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `notificationQueue_Fk` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`name`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `notificationQueue_ibfk_2` FOREIGN KEY (`authorFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -25063,7 +24817,7 @@ CREATE TABLE `notificationSubscription` ( UNIQUE KEY `notificationSubscription_UN` (`notificationFk`,`userFk`), KEY `notificationSubscription_ibfk_2` (`userFk`), KEY `notificationSubscription_ibfk_1` (`notificationFk`), - CONSTRAINT `notificationSubscription_ibfk_1` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `notificationSubscription_Fk` FOREIGN KEY (`notificationFk`) REFERENCES `notification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `notificationSubscription_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -25238,6 +24992,63 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP FUNCTION IF EXISTS `binlogQueue_getDelay` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` FUNCTION `binlogQueue_getDelay`(vCode VARCHAR(255)) RETURNS bigint(20) + READS SQL DATA +BEGIN +/** + * Returns the difference between the current position of the binary log and + * the passed queue. + * + * @param vCode The queue code + * @return The difference in MB + */ + DECLARE vCurLogName VARCHAR(255); + DECLARE vCurPosition BIGINT; + DECLARE vQueueLogName VARCHAR(255); + DECLARE vQueuePosition BIGINT; + DECLARE vDelay BIGINT; + + SELECT VARIABLE_VALUE INTO vCurLogName + FROM information_schema.GLOBAL_STATUS + WHERE VARIABLE_NAME = 'BINLOG_SNAPSHOT_FILE'; + + SELECT VARIABLE_VALUE INTO vCurPosition + FROM information_schema.GLOBAL_STATUS + WHERE VARIABLE_NAME = 'BINLOG_SNAPSHOT_POSITION'; + + SELECT logName, `position` + INTO vQueueLogName, vQueuePosition + FROM binlogQueue + WHERE code = vCode; + + IF vQueuePosition IS NULL THEN + RETURN NULL; + END IF; + + SET vDelay = + vCurPosition - CAST(vQueuePosition AS SIGNED) + + @@max_binlog_size * ( + CAST(REGEXP_SUBSTR(vCurLogName, '[0-9]+') AS SIGNED) - + CAST(REGEXP_SUBSTR(vQueueLogName, '[0-9]+') AS SIGNED) + ); + + RETURN ROUND(vDelay / POW(1024, 2)); +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP FUNCTION IF EXISTS `capitalizeFirst` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -26341,6 +26152,32 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `connection_kill` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `connection_kill`( + vConnectionId BIGINT +) +BEGIN +/** + * Kill a connection + * + * @param vConnectionId + */ + KILL vConnectionId; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `debugAdd` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -27525,15 +27362,15 @@ DROP TABLE IF EXISTS `arcRead`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `arcRead` ( `id` smallint(2) unsigned NOT NULL AUTO_INCREMENT, - `printerFk` tinyint(3) unsigned DEFAULT NULL, + `printerFk` int(10) unsigned DEFAULT NULL, `ip` varchar(50) NOT NULL, `counter` smallint(2) unsigned DEFAULT NULL COMMENT 'Número de etiquetas leídas del pallet actual por el arco', `error` varchar(50) DEFAULT NULL, `minimum` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `arcRead_ip_UN` (`ip`), - KEY `worker_printer_FK` (`printerFk`), - CONSTRAINT `worker_printer_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + KEY `arcRead_FK` (`printerFk`), + CONSTRAINT `arcRead_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -27961,6 +27798,42 @@ CREATE TABLE `bankPolicy` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Lineas de credito asociadas a cuentas corrientes'; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `bankPolicyDetail` +-- + +DROP TABLE IF EXISTS `bankPolicyDetail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bankPolicyDetail` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bankPolicyFk` int(11) NOT NULL, + `installmentNumber` int(11) NOT NULL, + `dueDated` date NOT NULL, + `netAmount` decimal(10,2) DEFAULT NULL, + `amortization` decimal(10,2) DEFAULT NULL, + `outstanding` decimal(10,2) DEFAULT NULL, + `rate` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Detalle de las cuotas'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `bankPolicyReview` +-- + +DROP TABLE IF EXISTS `bankPolicyReview`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bankPolicyReview` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bankPolicyFk` int(11) NOT NULL, + `amount` double NOT NULL, + `rate` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Revisiones del euribor'; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `beach` -- @@ -28292,7 +28165,7 @@ CREATE TABLE `buy` ( `stickers` int(11) NOT NULL DEFAULT 0, `packing` int(11) NOT NULL DEFAULT 1 CHECK (`packing` > 0), `grouping` smallint(5) unsigned NOT NULL DEFAULT 1, - `groupingMode` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0=sin obligar 1=grouping 2=packing', + `groupingMode` enum('grouping','packing') DEFAULT NULL, `containerFk` smallint(5) unsigned DEFAULT NULL, `comissionValue` decimal(10,3) NOT NULL DEFAULT 0.000, `packageValue` decimal(10,3) NOT NULL DEFAULT 0.000, @@ -32122,6 +31995,26 @@ CREATE TABLE `farming` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `farmingDeliveryNote` +-- + +DROP TABLE IF EXISTS `farmingDeliveryNote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `farmingDms` -- @@ -32512,7 +32405,7 @@ CREATE TABLE `host` ( `description` varchar(50) DEFAULT NULL, `workerFk` int(10) unsigned DEFAULT NULL, `windowsSerial` varchar(40) DEFAULT NULL, - `printerFk` tinyint(3) unsigned DEFAULT NULL, + `printerFk` int(10) unsigned DEFAULT NULL, `warehouseFk` smallint(5) unsigned DEFAULT 60, `companyFk` int(10) unsigned DEFAULT 442, `bankFk` int(11) DEFAULT 13, @@ -32526,11 +32419,11 @@ CREATE TABLE `host` ( KEY `configHost_FK_2` (`warehouseFk`), KEY `configHost_FK_4` (`bankFk`), KEY `configHost_FK_5` (`workerFk`), - CONSTRAINT `configHost_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON UPDATE CASCADE, CONSTRAINT `configHost_FK_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE, CONSTRAINT `configHost_FK_4` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE, CONSTRAINT `configHost_FK_5` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`), - CONSTRAINT `hostCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE + CONSTRAINT `hostCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE, + CONSTRAINT `host_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -35109,7 +35002,7 @@ CREATE TABLE `operator` ( `itemPackingTypeFk` varchar(1) NOT NULL DEFAULT 'H', `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT 60, `sectorFk` int(11) DEFAULT NULL, - `labelerFk` tinyint(3) unsigned DEFAULT NULL, + `labelerFk` int(10) unsigned DEFAULT NULL, `linesLimit` int(11) DEFAULT 20 COMMENT 'Límite de lineas en una colección para la asignación de pedidos', `volumeLimit` decimal(10,6) DEFAULT 0.500000 COMMENT 'Límite de volumen en una colección para la asignación de pedidos', PRIMARY KEY (`workerFk`), @@ -35123,8 +35016,7 @@ CREATE TABLE `operator` ( CONSTRAINT `operator_FK_1` FOREIGN KEY (`trainFk`) REFERENCES `train` (`id`) ON UPDATE CASCADE, CONSTRAINT `operator_FK_2` FOREIGN KEY (`itemPackingTypeFk`) REFERENCES `itemPackingType` (`code`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `operator_FK_3` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT `operator_FK_4` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON UPDATE CASCADE, - CONSTRAINT `operator_FK_5` FOREIGN KEY (`labelerFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + CONSTRAINT `operator_FK_4` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -35308,7 +35200,7 @@ DROP TABLE IF EXISTS `packaging`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `packaging` ( `id` varchar(10) NOT NULL, - `volume` decimal(10,2) DEFAULT 0.00, + `volume` decimal(10,2) DEFAULT NULL CHECK (`volume` >= coalesce(`width`,1) * coalesce(`depth`,1) * coalesce(`height`,1)), `width` decimal(10,2) DEFAULT 0.00, `depth` decimal(10,2) DEFAULT 0.00, `height` decimal(10,2) DEFAULT 0.00, @@ -35437,8 +35329,8 @@ CREATE TABLE `packingSite` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(10) DEFAULT NULL, `hostFk` int(11) DEFAULT NULL, - `printerRfidFk` tinyint(3) unsigned DEFAULT NULL, - `printerFk` tinyint(3) unsigned DEFAULT NULL, + `printerRfidFk` int(10) unsigned DEFAULT NULL, + `printerFk` int(10) unsigned DEFAULT NULL, `collectionFk` int(11) DEFAULT NULL COMMENT 'Last collection packed on this site', `monitorId` varchar(255) DEFAULT NULL, `parkingFk` int(11) DEFAULT NULL, @@ -36233,7 +36125,7 @@ DROP TABLE IF EXISTS `printQueue`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `printQueue` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `printerFk` tinyint(3) unsigned DEFAULT NULL, + `printerFk` int(10) unsigned DEFAULT NULL, `priorityFk` tinyint(3) unsigned NOT NULL DEFAULT 3 COMMENT '1 - high, 2 - normal, 3 - low', `reportFk` tinyint(3) unsigned DEFAULT NULL, `statusCode` enum('queued','error','printing','printed') NOT NULL DEFAULT 'queued', @@ -36250,7 +36142,7 @@ CREATE TABLE `printQueue` ( KEY `priorityFk` (`priorityFk`), KEY `workerFk` (`workerFk`), KEY `printQueue_report` (`reportFk`), - CONSTRAINT `printQueue_printerFk` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON UPDATE CASCADE, + CONSTRAINT `printQueue_FK` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON UPDATE CASCADE, CONSTRAINT `printQueue_priorityFk` FOREIGN KEY (`priorityFk`) REFERENCES `queuePriority` (`id`) ON UPDATE CASCADE, CONSTRAINT `printQueue_report` FOREIGN KEY (`reportFk`) REFERENCES `report` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; @@ -36295,7 +36187,7 @@ DROP TABLE IF EXISTS `printer`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `printer` ( - `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `path` varchar(50) DEFAULT NULL, `modelFk` varchar(50) DEFAULT NULL, @@ -36398,6 +36290,9 @@ CREATE TABLE `productionConfig` ( `itemPreviousDefaultSize` int(11) DEFAULT NULL COMMENT 'Altura por defecto para los artículos de previa', `addressSelfConsumptionFk` int(11) DEFAULT 2613 COMMENT 'Consignatario para crear el ticket de autoconsumo', `defaultFreightItemFk` int(10) unsigned NOT NULL DEFAULT 71 COMMENT 'Default value for expedition table', + `backupPrinterNotificationDelay` int(10) unsigned DEFAULT NULL COMMENT 'Minimum seconds Interval to Prevent Spam from Same-Type Notifications', + `collection_new_lockname` varchar(100) NOT NULL DEFAULT 'collection_new' COMMENT 'Lockname value for proc vn.collection_new', + `collection_assign_lockname` varchar(100) DEFAULT 'collection_assign' COMMENT 'Lockname value for proc vn.collection_new', PRIMARY KEY (`id`), KEY `productionConfig_FK` (`shortageAddressFk`), KEY `productionConfig_FK_1` (`clientSelfConsumptionFk`), @@ -38040,17 +37935,16 @@ CREATE TABLE `sector` ( `workerFk` int(11) DEFAULT NULL, `isHideForPickers` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'sector a ocultar a los sacadores', `isReserve` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Sectores de reserva, como Albenfruit o Fuentes', - `mainPrinterFk` tinyint(3) unsigned DEFAULT NULL, + `backupPrinterFk` int(10) unsigned DEFAULT NULL, `typeFk` int(10) unsigned NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `code_UNIQUE` (`code`), KEY `sector_fk1_idx` (`warehouseFk`), KEY `sector_report` (`reportFk`), KEY `sector_FK` (`sonFk`,`warehouseFk`), - KEY `sector_FK_1` (`mainPrinterFk`), + KEY `sector_FK_1` (`backupPrinterFk`), KEY `sectorType_FK` (`typeFk`), CONSTRAINT `sectorType_FK` FOREIGN KEY (`typeFk`) REFERENCES `sectorType` (`id`) ON UPDATE CASCADE, - CONSTRAINT `sector_FK_1` FOREIGN KEY (`mainPrinterFk`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `sector_fk1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `sector_report` FOREIGN KEY (`reportFk`) REFERENCES `report` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; @@ -39807,21 +39701,6 @@ SET character_set_client = utf8; 1 AS `alertCode` */; SET character_set_client = @saved_cs_client; --- --- Table structure for table `ticketRecalc` --- - -DROP TABLE IF EXISTS `ticketRecalc`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ticketRecalc` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ticketFk` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `ticketRecalc_ibfk_1` (`ticketFk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Queue of changed tickets to recalc its total'; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `ticketRefund` -- @@ -40568,19 +40447,6 @@ CREATE TABLE `travelObservation` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Observaciones de travel'; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `travelRecalc` --- - -DROP TABLE IF EXISTS `travelRecalc`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `travelRecalc` ( - `travelFk` int(10) unsigned NOT NULL, - PRIMARY KEY (`travelFk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Travels to recalc it''s entry count'; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `travelThermograph` -- @@ -41248,7 +41114,6 @@ CREATE TABLE `worker` ( KEY `worker_FK_2` (`educationLevelFk`), KEY `worker_FK_1` (`originCountryFk`), KEY `worker_fk_editor` (`editorFk`), - CONSTRAINT `worker_FK` FOREIGN KEY (`labelerFk__`) REFERENCES `printer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `worker_FK_1` FOREIGN KEY (`originCountryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE, CONSTRAINT `worker_FK_2` FOREIGN KEY (`educationLevelFk`) REFERENCES `educationLevel` (`id`) ON UPDATE CASCADE, CONSTRAINT `worker_FK_3` FOREIGN KEY (`bossFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE, @@ -42752,6 +42617,24 @@ END */ ;; /*!50003 SET character_set_client = @saved_cs_client */ ;; /*!50003 SET character_set_results = @saved_cs_results */ ;; /*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `raidUpdate` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb4 */ ;; +/*!50003 SET character_set_results = utf8mb4 */ ;; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `raidUpdate` ON SCHEDULE EVERY 1 DAY STARTS '2017-12-29 00:05:00' ON COMPLETION PRESERVE ENABLE DO CALL raidUpdate */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; /*!50106 DROP EVENT IF EXISTS `route_doRecalc` */;; DELIMITER ;; /*!50003 SET @saved_cs_client = @@character_set_client */ ;; @@ -42770,42 +42653,6 @@ DELIMITER ;; /*!50003 SET character_set_client = @saved_cs_client */ ;; /*!50003 SET character_set_results = @saved_cs_results */ ;; /*!50003 SET collation_connection = @saved_col_connection */ ;; -/*!50106 DROP EVENT IF EXISTS `ticket_doRecalc` */;; -DELIMITER ;; -/*!50003 SET @saved_cs_client = @@character_set_client */ ;; -/*!50003 SET @saved_cs_results = @@character_set_results */ ;; -/*!50003 SET @saved_col_connection = @@collation_connection */ ;; -/*!50003 SET character_set_client = utf8mb3 */ ;; -/*!50003 SET character_set_results = utf8mb3 */ ;; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;; -/*!50003 SET @saved_time_zone = @@time_zone */ ;; -/*!50003 SET time_zone = 'SYSTEM' */ ;; -/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ticket_doRecalc` ON SCHEDULE EVERY 10 SECOND STARTS '2022-01-28 09:29:18' ON COMPLETION PRESERVE ENABLE DO CALL ticket_doRecalc */ ;; -/*!50003 SET time_zone = @saved_time_zone */ ;; -/*!50003 SET sql_mode = @saved_sql_mode */ ;; -/*!50003 SET character_set_client = @saved_cs_client */ ;; -/*!50003 SET character_set_results = @saved_cs_results */ ;; -/*!50003 SET collation_connection = @saved_col_connection */ ;; -/*!50106 DROP EVENT IF EXISTS `travel_doRecalc` */;; -DELIMITER ;; -/*!50003 SET @saved_cs_client = @@character_set_client */ ;; -/*!50003 SET @saved_cs_results = @@character_set_results */ ;; -/*!50003 SET @saved_col_connection = @@collation_connection */ ;; -/*!50003 SET character_set_client = utf8mb3 */ ;; -/*!50003 SET character_set_results = utf8mb3 */ ;; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;; -/*!50003 SET @saved_time_zone = @@time_zone */ ;; -/*!50003 SET time_zone = 'SYSTEM' */ ;; -/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `travel_doRecalc` ON SCHEDULE EVERY 15 SECOND STARTS '2019-05-17 10:52:29' ON COMPLETION PRESERVE ENABLE DO CALL travel_doRecalc */ ;; -/*!50003 SET time_zone = @saved_time_zone */ ;; -/*!50003 SET sql_mode = @saved_sql_mode */ ;; -/*!50003 SET character_set_client = @saved_cs_client */ ;; -/*!50003 SET character_set_results = @saved_cs_results */ ;; -/*!50003 SET collation_connection = @saved_col_connection */ ;; /*!50106 DROP EVENT IF EXISTS `vehicle_notify` */;; DELIMITER ;; /*!50003 SET @saved_cs_client = @@character_set_client */ ;; @@ -44365,9 +44212,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 @@ -44377,11 +44224,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'; @@ -46250,10 +46097,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 @@ -48665,10 +48512,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 ; @@ -49502,7 +49349,7 @@ BEGIN IF(i.hasMinPrice, GREATEST(i.minPrice,IFNULL(pf.rate3, b.price3)),IFNULL(pf.rate3, b.price3)) rate3, IFNULL(pf.packing, GREATEST(b.grouping, b.packing)) packing, IFNULL(pf.`grouping`, b.`grouping`) `grouping`, - ABS(IFNULL(pf.box, b.groupingMode)) groupingMode, + b.groupingMode groupingMode, tl.buyFk, i.typeFk, IF(i.hasKgPrice, b.weight / b.packing, NULL) weightGrouping @@ -49706,14 +49553,15 @@ BEGIN SELECT tcc.warehouseFk, tcc.itemFk, 1 rate, - IF(tcc.groupingMode = 1, tcc.`grouping`, 1) `grouping`, + IF(tcc.groupingMode = 'grouping', tcc.`grouping`, 1) `grouping`, CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) price, CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) / weightGrouping priceKg FROM tmp.ticketComponentCalculate tcc JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk AND tcs.warehouseFk = tcc.warehouseFk WHERE IFNULL(tcs.classRate, 1) = 1 - AND tcc.groupingMode < 2 AND (tcc.packing > tcc.`grouping` or tcc.groupingMode = 0) + AND NOT tcc.groupingMode = 'packing' + AND (tcc.packing > tcc.`grouping` OR tcc.groupingMode IS NULL) GROUP BY tcs.warehouseFk, tcs.itemFk; INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, `grouping`, price, priceKg) @@ -49967,7 +49815,8 @@ BEGIN DELETE e FROM entry e - JOIN tEntryToDelete tmp ON tmp.id = e.id; + JOIN tEntryToDelete tmp ON tmp.id = e.id + WHERE NOT e.isBooked; -- borrar de route registros menores a 4 años CREATE OR REPLACE TEMPORARY TABLE tRouteToDelete @@ -50942,15 +50791,15 @@ BEGIN SET vEnded = util.dayEnd(IFNULL(vDate, util.VN_CURDATE())); - CREATE OR REPLACE TEMPORARY TABLE tClientRisk + CREATE OR REPLACE TEMPORARY TABLE tClientRisk ENGINE = MEMORY - SELECT cr.clientFk, SUM(cr.amount) amount + SELECT cr.clientFk, SUM(cr.amount) amount FROM clientRisk cr JOIN tmp.clientGetDebt c ON c.clientFk = cr.clientFk GROUP BY cr.clientFk; INSERT INTO tClientRisk - SELECT c.clientFk, SUM(r.amountPaid) + SELECT c.clientFk, SUM(r.amountPaid) FROM receipt r JOIN tmp.clientGetDebt c ON c.clientFk = r.clientFk WHERE r.payed > vEnded @@ -51061,6 +50910,54 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `client_getRisk` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `client_getRisk`( + vDate DATE +) +BEGIN +/** + * Retorna el riesgo de los clientes activos. + * + * @param vDate Fecha a calcular + */ + CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt + (PRIMARY KEY (clientFk)) + ENGINE = MEMORY + SELECT id clientFk + FROM client + WHERE isActive; + + CALL client_getDebt(vDate); + + SELECT c.socialName, + r.clientFk, + c.credit, + CAST(r.risk AS DECIMAL (10,2)) risk, + CAST(c.credit - r.risk AS DECIMAL (10,2)) difference, + co.country + FROM client c + JOIN tmp.risk r ON r.clientFk = c.id + JOIN country co ON co.id = c.countryFk + GROUP BY c.id; + + DROP TEMPORARY TABLE + tmp.risk, + tmp.clientGetDebt; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `client_RandomList` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -51296,8 +51193,8 @@ BEGIN ENGINE = MEMORY SELECT b.itemFk, CASE b.groupingMode - WHEN 0 THEN 1 - WHEN 2 THEN b.packing + WHEN NULL THEN 1 + WHEN 'packing' THEN b.packing ELSE b.`grouping` END `grouping` FROM buy b @@ -51471,6 +51368,10 @@ BEGIN SELECT LAST_INSERT_ID() INTO vSaleFk; + UPDATE sale + SET originalQuantity = 0 + WHERE id = vSaleFk; + CALL sale_calculateComponent(vSaleFk, NULL); END ;; DELIMITER ; @@ -51492,6 +51393,128 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_assign`( vUserFk INT, OUT vCollectionFk INT ) +BEGIN +/** + * Comprueba si existen colecciones libres que se ajustan + * al perfil del usuario y le asigna la más antigua. + * Añade un registro al semillero de colecciones. + * + * @param vUserFk Id de usuario + * @param vCollectionFk Id de colección + */ + DECLARE vHasTooMuchCollections BOOL; + DECLARE vItemPackingTypeFk VARCHAR(1); + DECLARE vWarehouseFk INT; + DECLARE vLockName VARCHAR(215); + DECLARE vLockTime INT DEFAULT 30; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + IF vLockName IS NOT NULL THEN + DO RELEASE_LOCK(vLockName); + END IF; + + RESIGNAL; + END; + + -- Si hay colecciones sin terminar, sale del proceso + CALL collection_get(vUserFk); + + SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0 INTO vHasTooMuchCollections + FROM productionConfig pc + LEFT JOIN tCollection ON TRUE; + + DROP TEMPORARY TABLE tCollection; + + IF vHasTooMuchCollections THEN + CALL util.throw('Hay colecciones pendientes'); + END IF; + + SELECT warehouseFk, itemPackingTypeFk + INTO vWarehouseFk, vItemPackingTypeFk + FROM operator + WHERE workerFk = vUserFk; + + SET vLockName = CONCAT_WS('/', + vLockName, + vWarehouseFk, + vItemPackingTypeFk + ); + + IF NOT GET_LOCK(vLockName, vLockTime) THEN + CALL util.throw(CONCAT('Cannot get lock: ', vLockName)); + END IF; + + -- Se eliminan las colecciones sin asignar que estan obsoletas + INSERT INTO ticketTracking(stateFk, ticketFk) + SELECT s.id, tc.ticketFk + FROM `collection` c + JOIN ticketCollection tc ON tc.collectionFk = c.id + JOIN `state` s ON s.code = 'PRINTED_AUTO' + JOIN productionConfig pc + WHERE c.workerFk IS NULL + AND TIMEDIFF(util.VN_NOW(), c.created) > pc.maxNotAssignedCollectionLifeTime; + + DELETE c.* + FROM `collection` c + JOIN productionConfig pc + WHERE c.workerFk IS NULL + AND TIMEDIFF(util.VN_NOW(), c.created) > pc.maxNotAssignedCollectionLifeTime; + + -- Se añade registro al semillero + INSERT INTO collectionHotbed(userFk) + VALUES(vUserFk); + + -- Comprueba si hay colecciones disponibles que se ajustan a su configuracion + SELECT MIN(c.id) + INTO vCollectionFk + FROM `collection` c + JOIN operator o + ON (o.itemPackingTypeFk = c.itemPackingTypeFk OR c.itemPackingTypeFk IS NULL) + AND o.numberOfWagons = c.wagons + AND o.trainFk = c.trainFk + AND o.warehouseFk = c.warehouseFk + AND c.workerFk IS NULL + AND (c.saleTotalCount <= o.linesLimit OR o.linesLimit IS NULL) + JOIN ( + SELECT tc.collectionFk, SUM(sv.volume) volume + FROM ticketCollection tc + JOIN saleVolume sv ON sv.ticketFk = tc.ticketFk + WHERE sv.shipped >= util.VN_CURDATE() + GROUP BY tc.collectionFk + ) sub ON sub.collectionFk = c.id + AND (volume <= o.volumeLimit OR o.volumeLimit IS NULL) + WHERE o.workerFk = vUserFk; + + IF vCollectionFk IS NULL THEN + CALL collection_new(vUserFk, vCollectionFk); + END IF; + + UPDATE `collection` + SET workerFk = vUserFk + WHERE id = vCollectionFk; + + DO RELEASE_LOCK(vLockName); +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `collection_assign2` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_assign2`( + vUserFk INT, + OUT vCollectionFk INT +) proc:BEGIN /** * Comprueba si existen colecciones libres que se ajustan @@ -51506,7 +51529,7 @@ proc:BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN - DO RELEASE_LOCK('collection_assign'); + DO RELEASE_LOCK('collection_assign2'); RESIGNAL; END; @@ -51526,7 +51549,7 @@ proc:BEGIN LEAVE proc; END IF; - IF NOT GET_LOCK('collection_assign',vLockTime) THEN + IF NOT GET_LOCK('collection_assign2',vLockTime) THEN LEAVE proc; END IF; @@ -51579,7 +51602,7 @@ proc:BEGIN SET workerFk = vUserFk WHERE id = vCollectionFk; - DO RELEASE_LOCK('collection_assign'); + DO RELEASE_LOCK('collection_assign2'); END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -51828,7 +51851,7 @@ DELIMITER ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_new`(vUserFk INT, OUT vCollectionFk INT) -proc:BEGIN +BEGIN /** * Genera colecciones de tickets sin asignar trabajador. * @@ -51854,7 +51877,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 @@ -51891,7 +51914,8 @@ proc:BEGIN o.numberOfWagons, o.trainFk, o.linesLimit, - o.volumeLimit + o.volumeLimit, + pc.collection_new_lockname INTO vMaxTickets, vHasUniqueCollectionTime, vWorkerCode, @@ -51901,20 +51925,21 @@ proc:BEGIN vWagons, vTrainFk, vLinesLimit, - vVolumeLimit + vVolumeLimit, + vLockName FROM productionConfig pc JOIN worker w ON w.id = vUserFk JOIN state st ON st.`code` = 'ON_PREPARATION' JOIN operator o ON o.workerFk = vUserFk; SET vLockName = CONCAT_WS('/', - 'collection_new', + vLockName, vWarehouseFk, vItemPackingTypeFk ); 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. @@ -52542,7 +52567,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 @@ -52892,42 +52917,109 @@ DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `creditInsurance_getRisk`() BEGIN /** - * Devuelve el riesgo de los clientes que estan asegurados +* 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 ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `creditRecovery` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `creditRecovery`() +BEGIN +/** + * Actualiza el crédito de los clientes */ - CREATE OR REPLACE TEMPORARY TABLE tmp.client_list - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT * FROM ( - SELECT cc.client Id_Cliente, 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 Id_Cliente; - CALL vn2008.risk_vs_client_list(util.VN_CURDATE()); + DECLARE EXIT HANDLER FOR SQLSTATE '45000' + BEGIN + ROLLBACK; + RESIGNAL; + END; - 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, - ci.grade, - c2.country - FROM tmp.client_list ci - LEFT JOIN tmp.risk r ON r.Id_Cliente = ci.Id_Cliente - JOIN client c ON c.id = ci.Id_Cliente - JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk - JOIN country c2 ON c2.id = c.countryFk - GROUP BY c.id; + START TRANSACTION; + + UPDATE `client` c + JOIN payMethod pm ON pm.id = c.payMethodFk + SET c.credit = 0 + WHERE pm.`code` = 'card'; + + DROP TEMPORARY TABLE IF EXISTS tCreditClients; + CREATE TEMPORARY TABLE tCreditClients + SELECT clientFk, IF(credit > recovery, credit - recovery, 0) newCredit + FROM ( + SELECT r.clientFk, + r.amount recovery, + (sub2.created + INTERVAL r.period DAY) deadLine, + sub2.amount credit + FROM recovery r + JOIN ( + SELECT clientFk, amount, created + FROM ( + SELECT clientFk, amount, created + FROM clientCredit + ORDER BY created DESC + LIMIT 10000000000000000000 + ) sub + GROUP BY clientFk + ) sub2 ON sub2.clientFk = r.clientFk + WHERE r.finished IS NULL OR r.finished >= util.VN_CURDATE() + GROUP BY r.clientFk + HAVING deadLine <= util.VN_CURDATE() + ) sub3 + WHERE credit > 0; + + UPDATE client c + JOIN tCreditClients cc ON cc.clientFk = c.id + SET c.credit = newCredit; + + DROP TEMPORARY TABLE tCreditClients; + COMMIT; - DROP TEMPORARY TABLE IF EXISTS tmp.risk; - DROP TEMPORARY TABLE IF EXISTS tmp.client_list; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -54220,7 +54312,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 ;; @@ -55332,6 +55424,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 @@ -55351,13 +55451,16 @@ 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -56768,7 +56871,7 @@ BEGIN freightValue decimal(10,3) DEFAULT '0.000', packing int(11) DEFAULT '1', `grouping` smallint(5) unsigned NOT NULL DEFAULT '1', - groupingMode tinyint(4) NOT NULL DEFAULT 0 , + groupingMode enum('grouping', 'packing') DEFAULT NULL, comissionValue decimal(10,3) DEFAULT '0.000', packageValue decimal(10,3) DEFAULT '0.000', packageFk varchar(10) COLLATE utf8_unicode_ci DEFAULT '--', @@ -57129,12 +57232,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 ; @@ -57386,6 +57492,8 @@ BEGIN DECLARE vLines INT; DECLARE vHasDistinctTransactions INT; + CALL invoiceIn_checkBooked(vInvoiceInFk); + SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig; SELECT COUNT(*) INTO vLines @@ -57477,16 +57585,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 @@ -57897,6 +57998,41 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `invoiceIn_checkBooked` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceIn_checkBooked`( + vSelf INT +) +BEGIN +/** + * Comprueba si una factura recibida está contabilizada, + * y si lo está retorna un throw. + * + * @param vSelf Id invoiceIn + */ + DECLARE vIsBooked BOOL; + + SELECT isBooked INTO vIsBooked + FROM invoiceIn + WHERE id = vSelf; + + IF vIsBooked THEN + CALL util.throw('InvoiceIn is already booked'); + END IF; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `invoiceOutAgain` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -60505,7 +60641,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; @@ -62731,11 +62867,12 @@ BEGIN a.available, IFNULL(ip.counter, 0) `counter`, CASE - WHEN b.groupingMode = 1 THEN b.grouping - WHEN b.groupingMode = 2 THEN b.packing + WHEN b.groupingMode = 'grouping' THEN b.grouping + 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 @@ -63233,14 +63370,14 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `item_setVisibleDiscard` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb3 */ ; -/*!50003 SET character_set_results = utf8mb3 */ ; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `item_setVisibleDiscard`( vItemFk INT, @@ -63256,6 +63393,7 @@ BEGIN * @param vQuantity a dar de alta/baja * @param vAddressFk id address */ + DECLARE vTicketFk INT; DECLARE vClientFk INT; DECLARE vDefaultCompanyFk INT; @@ -63266,17 +63404,17 @@ BEGIN SELECT DEFAULT(companyFk) INTO vDefaultCompanyFk FROM vn.ticket LIMIT 1; - - IF vAddressFk IS NULL THEN + + IF vAddressFk IS NULL THEN SELECT pc.shortageAddressFk INTO vAddressShortage FROM productionConfig pc ; - ELSE + ELSE SET vAddressShortage = vAddressFk; END IF; SELECT a.clientFk INTO vClientFk FROM address a - WHERE a.id = vAddressFk; + WHERE a.id = vAddressShortage; SELECT t.id INTO vTicketFk FROM ticket t @@ -63308,7 +63446,7 @@ BEGIN INSERT INTO sale(ticketFk, itemFk, concept, quantity) SELECT vTicketFk, vItemFk, - CONCAT(longName,' ', worker_getCode(), ' ', LEFT(CAST(util.VN_NOW() AS TIME),5)), + name, vQuantity FROM item WHERE id = vItemFk; @@ -66076,6 +66214,50 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `raidUpdate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `raidUpdate`() +BEGIN +/** + * Actualiza el travel de las entradas de redadas + */ + UPDATE entry e + JOIN entryVirtual ev ON ev.entryFk = e.id + JOIN travel t ON t.id = e.travelFk + JOIN ( + SELECT * + FROM ( + SELECT t.id, t.landed, tt.warehouseInFk, tt.warehouseOutFk + FROM travel t + JOIN ( + SELECT t.warehouseInFk, t.warehouseOutFk + FROM entryVirtual ev + JOIN entry e ON e.id = ev.entryFk + JOIN travel t ON t.id = e.travelFk + GROUP BY t.warehouseInFk, t.warehouseOutFk + ) tt ON t.warehouseInFk = tt.warehouseInFk AND t.warehouseOutFk = tt.warehouseOutFk + WHERE shipped > util.VN_CURDATE() AND NOT isDelivered + ORDER BY t.landed + LIMIT 10000000000000000000 + ) t + GROUP BY t.warehouseInFk, t.warehouseOutFk + ) tt ON t.warehouseInFk = tt.warehouseInFk AND t.warehouseOutFk = tt.warehouseOutFk + SET e.travelFk = t.id; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `rangeDateInfo` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -66126,6 +66308,57 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `rateView` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `rateView`() +BEGIN +/** + * Muestra información sobre tasas de cambio de Dolares + */ + SELECT + t.year año, + t.month mes, + pay.dollars dolares, + pay.changePractical cambioPractico, + CAST(SUM(iit.foreignValue ) / SUM(iit.taxableBase) AS DECIMAL(5,4))cambioTeorico, + pay.changeOfficial cambioOficial + FROM invoiceIn ii + JOIN time t ON t.dated = ii.issued + JOIN invoiceInTax iit ON ii.id = iit.invoiceInFk + JOIN + ( SELECT + t.year, + t.month, + CAST(SUM(p.divisa) AS DECIMAL(10,2)) dollars, + CAST(SUM(p.divisa) / SUM(p.amount) AS DECIMAL(5,4)) changePractical, + CAST(rr.value * 0.998 AS DECIMAL(5,4)) changeOfficial + FROM payment p + JOIN time t ON t.dated = p.received + JOIN referenceRate rr ON rr.dated = p.received + JOIN currency c ON c.id = rr.currencyFk + WHERE p.divisa + AND c.code = 'USD' + GROUP BY t.year, t.month + ) pay ON t.year = pay.year AND t.month = pay.month + JOIN currency c ON c.id = ii.currencyFk + WHERE c.code = 'USD' + AND iit.foreignValue + AND iit.taxableBase + GROUP BY t.year, t.month; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `rate_getPrices` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -66566,48 +66799,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `riskAllClients` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `riskAllClients`(maxRiskDate DATE) -BEGIN - - DROP TEMPORARY TABLE IF EXISTS tmp.client_list; - CREATE TEMPORARY TABLE tmp.client_list - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT id Id_Cliente, null grade FROM vn.client; - - CALL vn2008.risk_vs_client_list(maxRiskDate); - - SELECT - c.RazonSocial, - c.Id_Cliente, - c.Credito, - CAST(r.risk as DECIMAL (10,2)) risk, - CAST(c.Credito - r.risk as DECIMAL (10,2)) Diferencia, - c.Id_Pais - FROM - vn2008.Clientes c - JOIN tmp.risk r ON r.Id_Cliente = c.Id_Cliente - JOIN tmp.client_list ci ON c.Id_Cliente = ci.Id_Cliente - GROUP BY c.Id_cliente; - - DROP TEMPORARY TABLE IF EXISTS tmp.risk; - DROP TEMPORARY TABLE IF EXISTS tmp.client_list; -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `routeGuessPriority` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -68781,7 +68972,7 @@ BEGIN DECLARE vWarehouseFk SMALLINT; DECLARE vDate DATE; DECLARE vGrouping INT; - DECLARE vGroupingModeFk INT; + DECLARE vGroupingMode VARCHAR(255); DECLARE vPacking INT; DECLARE vRoundQuantity INT DEFAULT 1; DECLARE vLanded DATE; @@ -68791,8 +68982,6 @@ BEGIN DECLARE vOldPrice DECIMAL(10,2); DECLARE vOption VARCHAR(255); DECLARE vNewSaleFk INT; - DECLARE vForceToGrouping INT DEFAULT 1; - DECLARE vForceToPacking INT DEFAULT 2; DECLARE vFinalPrice DECIMAL(10,2); DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -68826,15 +69015,15 @@ BEGIN CALL buyUltimate(vWarehouseFk, vDate); SELECT `grouping`, groupingMode, packing - INTO vGrouping,vGroupingModeFk,vPacking + INTO vGrouping,vGroupingMode,vPacking FROM buy b JOIN tmp.buyUltimate tmp ON b.id = tmp.buyFk WHERE tmp.itemFk = vNewItemFk AND tmp.WarehouseFk = vWarehouseFk; - IF vGroupingModeFk = vForceToPacking AND vPacking > 0 THEN + IF vGroupingMode = 'packing' AND vPacking > 0 THEN SET vRoundQuantity = vPacking; END IF; - IF vGroupingModeFk = vForceToGrouping AND vGrouping > 0 THEN + IF vGroupingMode = 'grouping' AND vGrouping > 0 THEN SET vRoundQuantity = vGrouping; END IF; @@ -68849,6 +69038,10 @@ BEGIN ORDER BY (vQuantity % `grouping`) ASC LIMIT 1; + IF vNewPrice IS NULL THEN + CALL util.throw('price retrieval failed'); + END IF; + IF vNewPrice > vOldPrice THEN SET vFinalPrice = vOldPrice; SET vOption = 'substitution'; @@ -68860,7 +69053,8 @@ BEGIN START TRANSACTION; UPDATE sale - SET quantity = quantity - vQuantity + SET originalQuantity = quantity - vQuantity, + quantity = quantity - vQuantity WHERE id = vSaleFk; INSERT INTO vn.sale(ticketFk, @@ -68870,7 +69064,8 @@ BEGIN price) SELECT vTicketFk, vNewItemFk, - CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ', i.name), + CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, + CONCAT('+ ', i.name), vFinalPrice FROM vn.item i WHERE id = vNewItemFk; @@ -71928,14 +72123,14 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `ticket_canAdvance` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb3 */ ; -/*!50003 SET character_set_results = utf8mb3 */ ; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT) BEGIN @@ -71946,38 +72141,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)) @@ -72025,7 +72196,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, @@ -72045,7 +72216,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 @@ -72084,7 +72257,9 @@ 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -72744,7 +72919,7 @@ BEGIN INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity) (SELECT vCurTicketFk, p.id, COUNT(*) FROM expedition e - JOIN packaging p ON p.itemFk = e.freightItemFk + JOIN packaging p ON p.id = e.packagingFk WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable AND vWithPackage GROUP BY p.itemFk); @@ -73269,72 +73444,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `ticket_doRecalc` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `ticket_getFromFloramondo` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -73505,7 +73614,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, @@ -73522,7 +73631,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 @@ -73532,8 +73641,8 @@ BEGIN WHERE t.id = vTicketFk; DROP TEMPORARY TABLE IF EXISTS - tmp.itemList, - tmp.itemMinacum; + tmp.itemList, + tmp.itemMinacum; END ;; DELIMITER ; @@ -74205,6 +74314,59 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `ticket_recalcByScope` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `ticket_recalcComponents` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; @@ -74239,34 +74401,6 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `ticket_requestRecalc` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `ticket_setNextState` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; @@ -75834,53 +75968,6 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `travel_doRecalc` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; /*!50003 DROP PROCEDURE IF EXISTS `travel_getDetailFromContinent` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -76119,7 +76206,7 @@ DELIMITER ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `travel_requestRecalc` */; +/*!50003 DROP PROCEDURE IF EXISTS `travel_recalc` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; @@ -76127,18 +76214,20 @@ DELIMITER ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `travel_requestRecalc`(vSelf INT) +CREATE DEFINER=`root`@`localhost` PROCEDURE `travel_recalc`(vSelf INT) proc: BEGIN /** - * Adds a request to recount the number of entries for the travel. + * Updates the number of entries assigned to the travel. * - * @param vSelf The travel reference + * @param vSelf The travel id */ - IF vSelf IS NULL THEN - LEAVE proc; - END IF; - - INSERT IGNORE INTO travelRecalc SET travelFk = vSelf; + UPDATE travel + SET totalEntries = ( + SELECT COUNT(id) + FROM entry + WHERE travelFk = vSelf + ) + WHERE id = vSelf; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -78220,7 +78309,7 @@ BEGIN FROM workerTimeControl WHERE userFk = vWorkerFk AND direction = 'middle' - AND timed BETWEEN vLastIn AND util.VN_NOW(); + AND timed BETWEEN vLastIn AND vTimed; DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlDirection; CREATE TEMPORARY TABLE tmp.workerTimeControlDirection @@ -84096,7 +84185,8 @@ SET @saved_cs_client = @@character_set_client; SET character_set_client = utf8; /*!50001 CREATE VIEW `payroll_employee` AS SELECT 1 AS `CodTrabajador`, - 1 AS `codempresa` */; + 1 AS `codempresa`, + 1 AS `workerFk` */; SET character_set_client = @saved_cs_client; -- @@ -85353,27 +85443,6 @@ CREATE TABLE `zones__` ( -- -- Dumping events for database 'vn2008' -- -/*!50106 SET @save_time_zone= @@TIME_ZONE */ ; -/*!50106 DROP EVENT IF EXISTS `raidUpdate` */; -DELIMITER ;; -/*!50003 SET @saved_cs_client = @@character_set_client */ ;; -/*!50003 SET @saved_cs_results = @@character_set_results */ ;; -/*!50003 SET @saved_col_connection = @@collation_connection */ ;; -/*!50003 SET character_set_client = utf8mb3 */ ;; -/*!50003 SET character_set_results = utf8mb3 */ ;; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;; -/*!50003 SET @saved_time_zone = @@time_zone */ ;; -/*!50003 SET time_zone = 'SYSTEM' */ ;; -/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `raidUpdate` ON SCHEDULE EVERY 1 DAY STARTS '2017-12-29 00:05:00' ON COMPLETION PRESERVE ENABLE DO CALL raidUpdate */ ;; -/*!50003 SET time_zone = @saved_time_zone */ ;; -/*!50003 SET sql_mode = @saved_sql_mode */ ;; -/*!50003 SET character_set_client = @saved_cs_client */ ;; -/*!50003 SET character_set_results = @saved_cs_results */ ;; -/*!50003 SET collation_connection = @saved_col_connection */ ;; -DELIMITER ; -/*!50106 SET TIME_ZONE= @save_time_zone */ ; -- -- Dumping routines for database 'vn2008' @@ -85448,7 +85517,7 @@ proc: BEGIN -- 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 inventoried INTO vDatedInventory FROM vn.config; SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve FROM hedera.orderConfig; @@ -85821,252 +85890,6 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `raidUpdate` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `raidUpdate`() -BEGIN - - UPDATE Entradas e - JOIN Entradas_Auto ea USING (Id_Entrada) - JOIN travel t ON t.id = e.travel_id - JOIN ( - SELECT * - FROM ( - SELECT id, landing, warehouse_id, warehouse_id_out - FROM travel - JOIN ( - SELECT warehouse_id, warehouse_id_out - FROM Entradas_Auto ea - JOIN Entradas e USING(Id_Entrada) - JOIN travel t ON t.id = e.travel_id - GROUP BY warehouse_id, warehouse_id_out - ) t USING (warehouse_id, warehouse_id_out) - WHERE shipment > util.VN_CURDATE() AND delivered = FALSE - ORDER BY landing - LIMIT 10000000000000000000 - ) t - GROUP BY warehouse_id, warehouse_id_out - ) t USING (warehouse_id, warehouse_id_out) - SET e.travel_id = t.id; -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `rateView` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `rateView`() -BEGIN - - SELECT - t.year as año, - t.month as mes, - pagos.dolares, - pagos.cambioPractico, - CAST(sum(divisa) / sum(bi) as DECIMAL(5,4)) as cambioTeorico, - pagos.cambioOficial - FROM recibida r - JOIN time t ON t.date = r.fecha - JOIN recibida_iva ri ON r.id = ri.recibida_id - JOIN - ( - SELECT - t.year as Año, - t.month as Mes, - cast(sum(divisa) as DECIMAL(10,2)) as dolares, - cast(sum(divisa) / sum(importe) as DECIMAL(5,4)) as cambioPractico, - cast(rr.rate * 0.998 as DECIMAL(5,4)) as cambioOficial - FROM pago p - JOIN time t ON t.date = p.fecha - JOIN reference_rate rr ON rr.date = p.fecha AND moneda_id = 2 - WHERE divisa - AND fecha >= '2015-01-11' - GROUP BY t.year, t.month - ) pagos ON t.year = pagos.Año AND t.month = pagos.Mes - WHERE moneda_id = 2 - AND fecha >= '2015-01-01' - AND divisa - AND bi - GROUP BY t.year, t.month; - -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `recobro_credito` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `recobro_credito`() -BEGIN - DECLARE EXIT HANDLER FOR SQLSTATE '45000' - BEGIN - ROLLBACK; - RESIGNAL; - END; - - START TRANSACTION; - UPDATE vn.`client` c - JOIN vn.payMethod pm ON pm.id = c.payMethodFk - SET credit = 0 - WHERE pm.`code` = 'card'; - - DROP TEMPORARY TABLE IF EXISTS clientes_credit; - CREATE TEMPORARY TABLE clientes_credit - SELECT Id_Cliente, if (Credito > Recobro ,Credito - Recobro,0) AS newCredit - FROM ( - SELECT r.Id_Cliente, r.amount AS Recobro, - timestampadd(DAY, period, UltimaFecha) AS Deadline, sub2.amount AS Credito - FROM vn2008.recovery r - JOIN ( - SELECT Id_Cliente, amount , odbc_date AS UltimaFecha - FROM ( - SELECT * FROM credit - ORDER BY odbc_date DESC - LIMIT 10000000000000000000 - ) sub - GROUP BY Id_Cliente - ) sub2 USING(Id_Cliente) - WHERE dend IS NULL or dend >= util.VN_CURDATE() - GROUP BY Id_Cliente - HAVING Deadline <= util.VN_CURDATE() - ) sub3 - WHERE Credito > 0; - - UPDATE Clientes - JOIN clientes_credit USING(Id_Cliente) - SET Clientes.Credito = newCredit; - - DROP TEMPORARY TABLE clientes_credit; - COMMIT; -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -/*!50003 DROP PROCEDURE IF EXISTS `risk_vs_client_list` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `risk_vs_client_list`(maxRiskDate DATE) -BEGIN -/** - * Calcula el riesgo para los clientes activos de la tabla temporal tmp.client_list - * - * @deprecated usar vn.client_getDebt - * @param maxRiskDate Fecha maxima de los registros - * @return table tmp.risk - */ - DECLARE startingDate DATETIME DEFAULT TIMESTAMPADD(DAY, - DAYOFMONTH(util.VN_CURDATE()) - 60, util.VN_CURDATE()); - DECLARE endingDate DATETIME; - DECLARE MAX_RISK_ALLOWED INT DEFAULT 200; - - SET maxRiskDate = IFNULL(maxRiskDate, util.VN_CURDATE()); - SET endingDate = TIMESTAMP(maxRiskDate, '23:59:59'); - - DROP TEMPORARY TABLE IF EXISTS tmp.client_list_2; - CREATE TEMPORARY TABLE tmp.client_list_2 - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT * - FROM tmp.client_list; - - DROP TEMPORARY TABLE IF EXISTS tmp.client_list_3; - CREATE TEMPORARY TABLE tmp.client_list_3 - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT * - FROM tmp.client_list; - - DROP TEMPORARY TABLE IF EXISTS tmp.tickets_sin_facturar; - CREATE TEMPORARY TABLE tmp.tickets_sin_facturar - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT t.Id_Cliente, floor(IF(cl.isVies, 1, 1.1) * sum(Cantidad * Preu * (100 - Descuento) / 100)) as total - FROM Movimientos m - JOIN Tickets t on m.Id_Ticket = t.Id_Ticket - JOIN tmp.client_list c on c.Id_Cliente = t.Id_Cliente - JOIN vn.client cl ON cl.id = t.Id_Cliente - WHERE Factura IS NULL - AND Fecha BETWEEN startingDate AND endingDate - GROUP BY t.Id_Cliente; - - DROP TEMPORARY TABLE IF EXISTS tmp.risk; - CREATE TEMPORARY TABLE tmp.risk - (PRIMARY KEY (Id_Cliente)) - ENGINE = MEMORY - SELECT Id_Cliente, SUM(amount) risk, sum(saldo) saldo - FROM Clientes c - JOIN ( - SELECT clientFk, SUM(amount) amount,SUM(amount) saldo - FROM vn.clientRisk - JOIN tmp.client_list on Id_Cliente = clientFk - GROUP BY clientFk - UNION ALL - SELECT Id_Cliente, SUM(Entregado),SUM(Entregado) - FROM Recibos - JOIN tmp.client_list_2 using(Id_Cliente) - WHERE Fechacobro > endingDate - GROUP BY Id_Cliente - UNION ALL - SELECT Id_Cliente, total,0 - FROM tmp.tickets_sin_facturar - UNION ALL - SELECT t.clientFk, CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2)), CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2)) - FROM hedera.tpvTransaction t - JOIN tmp.client_list_3 on Id_Cliente = t.clientFk - WHERE t.receiptFk IS NULL - AND t.status = 'ok' - GROUP BY t.clientFk - ) t ON c.Id_Cliente = t.clientFk - WHERE c.activo != FALSE - GROUP BY c.Id_Cliente; - - DELETE r.* - FROM tmp.risk r - JOIN vn2008.Clientes c on c.Id_Cliente = r.Id_Cliente - JOIN vn2008.pay_met pm on pm.id = c.pay_met_id - WHERE IFNULL(r.saldo,0) < 10 - AND r.risk <= MAX_RISK_ALLOWED - AND pm.`name` = 'TARJETA'; -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -- -- Current Database: `account` @@ -86346,7 +86169,7 @@ USE `bi`; /*!50001 SET collation_connection = utf8mb4_unicode_ci */; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ -/*!50001 VIEW `v_ventas_contables` AS select `time`.`year` AS `year`,`time`.`month` AS `month`,cast(sum(`m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100) as decimal(10,0)) AS `importe` from (((`vn2008`.`Tickets` `t` join `bi`.`f_tvc` on(`t`.`Id_Ticket` = `bi`.`f_tvc`.`Id_Ticket`)) join `vn2008`.`Movimientos` `m` on(`t`.`Id_Ticket` = `m`.`Id_Ticket`)) join `vn2008`.`time` on(`time`.`date` = cast(`t`.`Fecha` as date))) where `t`.`Fecha` >= '2014-01-01' group by `time`.`year`,`time`.`month` */; +/*!50001 VIEW `v_ventas_contables` AS select `time`.`year` AS `year`,`time`.`month` AS `month`,cast(sum(`m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100) as decimal(10,0)) AS `importe` from (((`vn`.`ticket` `t` join `bi`.`f_tvc` on(`t`.`id` = `bi`.`f_tvc`.`Id_Ticket`)) join `vn2008`.`Movimientos` `m` on(`t`.`id` = `m`.`Id_Ticket`)) join `vn2008`.`time` on(`time`.`date` = cast(`t`.`shipped` as date))) where `t`.`shipped` >= '2014-01-01' group by `time`.`year`,`time`.`month` */; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; @@ -87107,12 +86930,6 @@ USE `psico`; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; --- --- Current Database: `rfid` --- - -USE `rfid`; - -- -- Current Database: `sage` -- @@ -89094,7 +88911,7 @@ USE `vn`; /*!50001 SET collation_connection = utf8mb4_unicode_ci */; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ -/*!50001 VIEW `ticketMRW` AS select `Tickets`.`Id_Agencia` AS `id_Agencia`,`Tickets`.`empresa_id` AS `empresa_id`,`Consignatarios`.`consignatario` AS `Consignatario`,`Consignatarios`.`domicilio` AS `DOMICILIO`,`Consignatarios`.`poblacion` AS `POBLACION`,`Consignatarios`.`codPostal` AS `CODPOSTAL`,`Consignatarios`.`telefono` AS `telefono`,ifnull(ifnull(ifnull(ifnull(`Consignatarios`.`movil`,`Clientes`.`movil`),`Consignatarios`.`telefono`),`Clientes`.`telefono`),0) AS `movil`,`Clientes`.`if` AS `IF`,`Tickets`.`Id_Ticket` AS `Id_Ticket`,`Tickets`.`warehouse_id` AS `warehouse_id`,`Consignatarios`.`id_consigna` AS `Id_Consigna`,`Paises`.`Codigo` AS `CodigoPais`,`Tickets`.`Fecha` AS `Fecha`,`province`.`province_id` AS `province_id`,`Tickets`.`landing` AS `landing` from ((((`vn2008`.`Clientes` join `vn2008`.`Consignatarios` on(`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`)) join `vn2008`.`Tickets` on(`Consignatarios`.`id_consigna` = `Tickets`.`Id_Consigna`)) join `vn2008`.`province` on(`Consignatarios`.`province_id` = `province`.`province_id`)) join `vn2008`.`Paises` on(`province`.`Paises_Id` = `Paises`.`Id`)) */; +/*!50001 VIEW `ticketMRW` AS select `vn`.`ticket`.`agencyModeFk` AS `id_Agencia`,`vn`.`ticket`.`companyFk` AS `empresa_id`,`Consignatarios`.`consignatario` AS `Consignatario`,`Consignatarios`.`domicilio` AS `DOMICILIO`,`Consignatarios`.`poblacion` AS `POBLACION`,`Consignatarios`.`codPostal` AS `CODPOSTAL`,`Consignatarios`.`telefono` AS `telefono`,ifnull(ifnull(ifnull(ifnull(`Consignatarios`.`movil`,`Clientes`.`movil`),`Consignatarios`.`telefono`),`Clientes`.`telefono`),0) AS `movil`,`Clientes`.`if` AS `IF`,`vn`.`ticket`.`id` AS `Id_Ticket`,`vn`.`ticket`.`warehouseFk` AS `warehouse_id`,`Consignatarios`.`id_consigna` AS `Id_Consigna`,`Paises`.`Codigo` AS `CodigoPais`,`vn`.`ticket`.`shipped` AS `Fecha`,`province`.`province_id` AS `province_id`,`vn`.`ticket`.`landed` AS `landing` from ((((`vn2008`.`Clientes` join `vn2008`.`Consignatarios` on(`Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente`)) join `vn`.`ticket` on(`Consignatarios`.`id_consigna` = `vn`.`ticket`.`addressFk`)) join `vn2008`.`province` on(`Consignatarios`.`province_id` = `province`.`province_id`)) join `vn2008`.`Paises` on(`province`.`Paises_Id` = `Paises`.`Id`)) */; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; @@ -91386,7 +91203,7 @@ USE `vn2008`; /*!50001 SET collation_connection = utf8mb4_unicode_ci */; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ -/*!50001 VIEW `payroll_employee` AS select `pw`.`workerFkA3` AS `CodTrabajador`,`pw`.`companyFkA3` AS `codempresa` from `vn`.`payrollWorker` `pw` */; +/*!50001 VIEW `payroll_employee` AS select `pw`.`workerFkA3` AS `CodTrabajador`,`pw`.`companyFkA3` AS `codempresa`,`pw`.`workerFk` AS `workerFk` from `vn`.`payrollWorker` `pw` */; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; @@ -91904,4 +91721,4 @@ USE `vn2008`; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-04-18 7:15:58 +-- Dump completed on 2024-05-07 5:48:20 diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql index f8923508a..ad4eb24a5 100644 --- a/db/dump/.dump/triggers.sql +++ b/db/dump/.dump/triggers.sql @@ -995,27 +995,19 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 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; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `hedera`.`order_afterUpdate` + AFTER UPDATE ON `order` + FOR EACH ROW +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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -1071,70 +1063,6 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -- -- Current Database: `pbx` @@ -1398,12 +1326,6 @@ DELIMITER ; USE `psico`; --- --- Current Database: `rfid` --- - -USE `rfid`; - -- -- Current Database: `sage` -- @@ -1519,12 +1441,12 @@ DELIMITER ;; 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 ; @@ -1554,11 +1476,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 ; @@ -1581,12 +1503,12 @@ DELIMITER ;; 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 ; @@ -1616,11 +1538,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 ; @@ -1745,15 +1667,15 @@ DELIMITER ;; BEFORE INSERT ON `accountReconciliation` FOR EACH ROW - SET NEW.calculatedCode = REPLACE( - REPLACE( - REPLACE( - REPLACE( - CONCAT(NEW.supplierAccountFk,NEW.operationDated,NEW.amount,NEW.concept,NEW.debitCredit) - ,' ','') - ,":",'') - ,'-','') - ,'.','') */;; + SET NEW.calculatedCode = REGEXP_REPLACE( + CONCAT(NEW.supplierAccountFk, + NEW.operationDated, + NEW.amount, + NEW.concept, + CAST(NEW.debitCredit AS UNSIGNED) + ), + '[ :\\-.]', '' + ) */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; @@ -1867,37 +1789,33 @@ DELIMITER ;; 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -2292,7 +2210,7 @@ trig: BEGIN DECLARE vWarehouse INT; DECLARE vLanding DATE; DECLARE vGrouping INT; - DECLARE vGroupingMode TINYINT; + DECLARE vGroupingMode VARCHAR(255); DECLARE vGenericFk INT; DECLARE vGenericInDate BOOL; DECLARE vBuyerFk INT; @@ -2398,8 +2316,6 @@ trig: BEGIN LEAVE trig; END IF; - CALL stock.log_add('buy', NEW.id, NULL); - CALL buy_afterUpsert(NEW.id); END */;; DELIMITER ; @@ -2508,11 +2424,11 @@ DELIMITER ; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb3 */ ; -/*!50003 SET character_set_results = utf8mb3 */ ; -/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`buy_afterUpdate` AFTER UPDATE ON `buy` @@ -2527,14 +2443,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 @@ -2610,20 +2518,15 @@ DELIMITER ;; 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -3302,20 +3205,13 @@ DELIMITER ;; 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 @@ -4674,26 +4570,6 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`entry_afterInsert` - AFTER INSERT ON `entry` - FOR EACH ROW -BEGIN - CALL travel_requestRecalc(NEW.travelFk); -END */;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`entry_beforeUpdate` BEFORE UPDATE ON `entry` FOR EACH ROW @@ -4769,24 +4645,12 @@ DELIMITER ;; 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 */;; @@ -4834,8 +4698,6 @@ BEGIN `changedModel` = 'Entry', `changedModelId` = OLD.id, `userFk` = account.myUser_getId(); - - CALL travel_requestRecalc(OLD.travelFk); END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -5433,6 +5295,10 @@ DELIMITER ;; BEGIN DECLARE vWithholdingSageFk INT; + IF NEW.isBooked = OLD.isBooked THEN + CALL invoiceIn_checkBooked(OLD.id); + END IF; + IF NOT (NEW.supplierRef <=> OLD.supplierRef) AND NOT util.checkPrintableChars(NEW.supplierRef) THEN CALL util.throw('The invoiceIn reference contains invalid characters'); END IF; @@ -5475,7 +5341,6 @@ DELIMITER ;; AFTER UPDATE ON `invoiceIn` FOR EACH ROW BEGIN - IF NEW.issued != OLD.issued OR NEW.currencyFk != OLD.currencyFk THEN @@ -5510,6 +5375,26 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceIn_beforeDelete` + BEFORE DELETE ON `invoiceIn` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.id); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceIn_afterDelete` AFTER DELETE ON `invoiceIn` FOR EACH ROW @@ -5534,12 +5419,74 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInCorrection_beforeInsert` + BEFORE INSERT ON `invoiceInCorrection` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(NEW.correctingFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInCorrection_beforeUpdate` + BEFORE UPDATE ON `invoiceInCorrection` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.correctingFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInCorrection_beforeDelete` + BEFORE DELETE ON `invoiceInCorrection` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.correctingFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInDueDay_beforeInsert` BEFORE INSERT ON `invoiceInDueDay` FOR EACH ROW BEGIN DECLARE vIsNotified BOOLEAN; + CALL invoiceIn_checkBooked(NEW.invoiceInFk); + SET NEW.editorFk = account.myUser_getId(); SELECT isNotified INTO vIsNotified @@ -5582,6 +5529,7 @@ DELIMITER ;; BEGIN DECLARE vIsNotified BOOLEAN; + CALL invoiceIn_checkBooked(OLD.invoiceInFk); SET NEW.editorFk = account.myUser_getId(); SELECT isNotified INTO vIsNotified @@ -5618,6 +5566,26 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInDueDay_beforeDelete` + BEFORE DELETE ON `invoiceInDueDay` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.invoiceInFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInDueDay_afterDelete` AFTER DELETE ON `invoiceInDueDay` FOR EACH ROW @@ -5642,6 +5610,66 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInIntrastat_beforeInsert` + BEFORE INSERT ON `invoiceInIntrastat` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(NEW.invoiceInFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInIntrastat_beforeUpdate` + BEFORE UPDATE ON `invoiceInIntrastat` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.invoiceInFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInIntrastat_beforeDelete` + BEFORE DELETE ON `invoiceInIntrastat` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.invoiceInFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInTax_beforeInsert` BEFORE INSERT ON `invoiceInTax` FOR EACH ROW @@ -5667,6 +5695,8 @@ DELIMITER ;; BEFORE UPDATE ON `invoiceInTax` FOR EACH ROW BEGIN + CALL invoiceIn_checkBooked(OLD.invoiceInFk); + IF NOT (NEW.invoiceInFk <=> OLD.invoiceInFk) THEN CALL invoiceInTax_afterUpsert(NEW.invoiceInFk); END IF; @@ -5687,6 +5717,26 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInTax_beforeDelete` + BEFORE DELETE ON `invoiceInTax` + FOR EACH ROW +BEGIN + CALL invoiceIn_checkBooked(OLD.invoiceInFk); +END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`invoiceInTax_afterDelete` AFTER DELETE ON `invoiceInTax` FOR EACH ROW @@ -7827,11 +7877,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 @@ -7907,24 +7953,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; @@ -8046,9 +8074,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; @@ -9077,25 +9102,11 @@ DELIMITER ;; 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 ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -9366,8 +9377,6 @@ DELIMITER ;; FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); - SET NEW.workerFk = account.myUser_getId(); - END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -9623,28 +9632,6 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`ticketService_afterInsert` - AFTER INSERT ON `ticketService` - FOR EACH ROW -BEGIN - - CALL ticket_requestRecalc(NEW.ticketFk); - -END */;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`ticketService_beforeUpdate` BEFORE UPDATE ON `ticketService` FOR EACH ROW @@ -9665,31 +9652,6 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 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 ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8mb4 */ ; -/*!50003 SET character_set_results = utf8mb4 */ ; -/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`ticketService_afterDelete` AFTER DELETE ON `ticketService` FOR EACH ROW @@ -9699,9 +9661,6 @@ BEGIN `changedModel` = 'TicketService', `changedModelId` = OLD.id, `userFk` = account.myUser_getId(); - - CALL ticket_requestRecalc(OLD.ticketFk); - END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -10142,10 +10101,8 @@ DELIMITER ;; 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; @@ -10154,11 +10111,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; @@ -10997,4 +10954,4 @@ USE `vn2008`; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-04-18 7:16:17 +-- Dump completed on 2024-05-07 5:48:41 diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql index 523f41bfb..fd940d8a6 100644 --- a/db/dump/fixtures.after.sql +++ b/db/dump/fixtures.after.sql @@ -146,7 +146,7 @@ INSERT INTO `vn`.`businessReasonEnd` (`id`, `reason`) ('2', 'No supera PP empresa'), ('3', 'Despido'); -INSERT INTO `vn2008`.`payroll_categorias` (`codcategoria`, `descripcion`, `Tarifa`) +INSERT INTO `vn`.`payrollCategories` (`id`, `description`, `rate`) VALUES ('11', 'INFORMATICA', '2'), ('12', 'AUX INFORMATICA', '7'); diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 30564d8a2..06e94c99e 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -11,7 +11,6 @@ CREATE ROLE 'salix'; GRANT 'salix' TO 'root'@'%'; SET DEFAULT ROLE 'salix' FOR 'root'@'%'; -CREATE SCHEMA IF NOT EXISTS `vn2008`; CREATE SCHEMA IF NOT EXISTS `tmp`; UPDATE `util`.`config` @@ -160,7 +159,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 @@ -371,20 +371,20 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`) (4, 'GCN Channel'), (5, 'The Newspaper'); -INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`, `businessTypeFk`,`typeFk`) +INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`businessTypeFk`,`typeFk`) VALUES - (1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'), - (1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'), - (1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'), - (1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'), - (1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 1, 'florist','normal'), - (1106, 'DavidCharlesHaller', '53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 1, 'florist','normal'), - (1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 1, 'florist','normal'), - (1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 1, 'florist','normal'), - (1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 1, 'florist','normal'), - (1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, NULL, 0, 1, 'florist','normal'), - (1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses'), - (1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses'); + (1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'), + (1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'), + (1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'), + (1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'), + (1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 'florist','normal'), + (1106, 'DavidCharlesHaller', '53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 'florist','normal'), + (1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 'florist','normal'), + (1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 'florist','normal'), + (1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 'florist','normal'), + (1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, NULL, 0, 'florist','normal'), + (1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses'), + (1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses'); INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`) SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), UPPER(CONCAT(name, 'Social')), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'GOTHAM', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, util.VN_CURDATE(), 1 @@ -2616,16 +2616,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' @@ -3771,3 +3787,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 c5b077f29..6480155cb 100644 --- a/db/routines/bi/procedures/Greuge_Evolution_Add.sql +++ b/db/routines/bi/procedures/Greuge_Evolution_Add.sql @@ -91,15 +91,15 @@ BEGIN -- Recobro UPDATE bi.Greuge_Evolution ge JOIN ( - SELECT cs.Id_Cliente, sum(Valor * Cantidad) as Importe + SELECT a.clientFk Id_Cliente, sum(sc.value * s.quantity) as Importe 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 + JOIN vn.address a on a.id = t.addressFk + JOIN vn.sale s on s.ticketFk = t.id + JOIN vn.saleComponent sc on sc.saleFk = s.id WHERE t.shipped >= datFEC AND t.shipped < datFEC_TOMORROW - AND mc.Id_Componente = 17 -- Recobro - GROUP BY cs.Id_Cliente + AND sc.componentFk = 17 -- Recobro + GROUP BY a.clientFk ) sub using(Id_Cliente) SET Recobro = Importe WHERE ge.Fecha = datFEC; diff --git a/db/routines/bi/procedures/analisis_ventas_evolution_add.sql b/db/routines/bi/procedures/analisis_ventas_evolution_add.sql index fca749681..7c2cc5678 100644 --- a/db/routines/bi/procedures/analisis_ventas_evolution_add.sql +++ b/db/routines/bi/procedures/analisis_ventas_evolution_add.sql @@ -24,7 +24,7 @@ BEGIN WHERE Periodo < vMaxPeriod; SELECT MIN(period) INTO vCurrentPeriod - FROM vn2008.time + FROM vn.time WHERE period > vPreviousPeriod; SET vYear = FLOOR(vCurrentPeriod / 100); @@ -66,7 +66,7 @@ BEGIN WHERE periodo < vMaxPeriod; SELECT MIN(period) INTO vCurrentPeriod - FROM vn2008.time + FROM vn.time WHERE period > vPreviousPeriod; SET vYear = FLOOR(vCurrentPeriod / 100); @@ -108,7 +108,7 @@ BEGIN WHERE periodo < vMaxPeriod; SELECT MIN(period) INTO vCurrentPeriod - FROM vn2008.time + FROM vn.time WHERE period > vPreviousPeriod; SET vYear = FLOOR(vCurrentPeriod / 100); @@ -156,7 +156,7 @@ BEGIN WHERE periodo < vMaxPeriod; SELECT MIN(period) INTO vCurrentPeriod - FROM vn2008.time + FROM vn.time WHERE period > vPreviousPeriod; SET vYear = FLOOR(vCurrentPeriod / 100); @@ -198,7 +198,7 @@ BEGIN WHERE periodo < vMaxPeriod; SELECT MIN(period) INTO vCurrentPeriod - FROM vn2008.time + FROM vn.time WHERE period > vPreviousPeriod; SET vYear = FLOOR(vCurrentPeriod / 100); diff --git a/db/routines/bi/procedures/analisis_ventas_update.sql b/db/routines/bi/procedures/analisis_ventas_update.sql index 228660d07..ef3e165a0 100644 --- a/db/routines/bi/procedures/analisis_ventas_update.sql +++ b/db/routines/bi/procedures/analisis_ventas_update.sql @@ -23,31 +23,31 @@ BEGIN Importe ) SELECT - tp.Tipo AS Familia, - r.reino AS Reino, - tr.CodigoTrabajador AS Comercial, - tr2.CodigoTrabajador AS Comprador, - p.name AS Provincia, - w.name AS almacen, - tm.year AS Año, - tm.month AS Mes, - tm.week AS Semana, - dm.description AS Vista, - bt.importe AS Importe + it.name, + ic.name, + w.code, + w2.code, + p.name, + wa.name, + tm.year, + tm.month, + tm.week, + dm.description, + bt.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 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; + LEFT JOIN vn.itemType it ON it.id = bt.tipo_id + LEFT JOIN vn.itemCategory ic ON ic.id = it.categoryFk + LEFT JOIN vn.client c on c.id = bt.Id_Cliente + LEFT JOIN vn.worker w ON w.id = c.salesPersonFk + LEFT JOIN vn.worker w2 ON w2.id = it.workerFk + JOIN vn.time tm ON tm.dated = bt.fecha + JOIN vn.sale s ON s.id = bt.Id_Movimiento + LEFT JOIN vn.ticket t ON t.id = s.ticketFk + JOIN vn.agencyMode am ON am.id = t.agencyModeFk + LEFT JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk + LEFT JOIN vn.address a ON a.id = t.addressFk + LEFT JOIN vn.province p ON p.id = a.provinceFk + LEFT JOIN vn.warehouse wa ON wa.id = t.warehouseFk + WHERE bt.fecha >= vLastMonth AND ic.merchandise; END$$ DELIMITER ; diff --git a/db/routines/bi/procedures/claim_ratio_routine.sql b/db/routines/bi/procedures/claim_ratio_routine.sql index 83d70c867..ae87e15a2 100644 --- a/db/routines/bi/procedures/claim_ratio_routine.sql +++ b/db/routines/bi/procedures/claim_ratio_routine.sql @@ -13,46 +13,45 @@ BEGIN INSERT INTO vn.greuge(shipped, clientFk, description, amount, greugeTypeFk, ticketFk) - SELECT cm.Fecha - , cm.Id_Cliente - , concat('Claim ',cm.id,' : ', m.Concepte) - ,round( -1 * ((sensib -1)/4) * Cantidad * - Preu * (100 - Descuento) / 100, 2) AS Reclamaciones + SELECT c.ticketCreated + , c.clientFk + , concat('Claim ', c.id,' : ', s.concept) + ,round( -1 * ((c.responsibility -1)/4) * s.quantity * + s.price * (100 - s.discount) / 100, 2) , 4 - , m.Id_Ticket - FROM vn2008.Movimientos m - JOIN vn2008.cl_act ca USING(Id_Movimiento) - JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id - WHERE ca.cl_sol_id NOT IN (1,5) - AND ca.greuge = 0 - AND cm.cl_est_id = 3; + , s.ticketFk + FROM vn.sale s + JOIN vn.claimEnd ce ON ce.saleFk = s.id + JOIN vn.claim c ON c.id = ce.claimFk + WHERE ce.claimDestinationFk NOT IN (1,5) + AND NOT ce.isGreuge + AND c.claimStateFk = 3; -- Reclamaciones que pasan a Maná INSERT INTO vn.greuge(shipped, clientFk, description, amount, greugeTypeFk, ticketFk) - SELECT cm.Fecha - , cm.Id_Cliente - , concat('Claim_mana ',cm.id,' : ', m.Concepte) - ,round( ((sensib -1)/4) * Cantidad * Preu * (100 - Descuento) / 100, 2) - AS Reclamaciones + SELECT c.ticketCreated + , c.clientFk + , concat('Claim_mana ',c.id,' : ', s.concept) + ,round( ((c.responsibility -1)/4) * s.quantity * s.price * (100 - s.discount) / 100, 2) ,3 - ,m.Id_Ticket - FROM vn2008.Movimientos m - JOIN vn2008.cl_act ca USING(Id_Movimiento) - JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id - WHERE ca.cl_sol_id NOT IN (1,5) - AND ca.greuge = 0 - AND cm.cl_est_id = 3 - AND cm.mana; + ,s.ticketFk + FROM vn.sale s + JOIN vn.claimEnd ce ON ce.saleFk = s.id + JOIN vn.claim c ON c.id = ce.claimFk + WHERE ce.claimDestinationFk NOT IN (1,5) + AND NOT ce.isGreuge + AND c.claimStateFk = 3 + AND c.isChargedToMana; -- Marcamos para no repetir - UPDATE vn2008.cl_act ca - JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id - SET greuge = 1 - WHERE ca.cl_sol_id NOT IN (1,5) - AND ca.greuge = 0 - AND cm.cl_est_id = 3; + UPDATE vn.claimEnd ce + JOIN vn.claim c ON c.id = ce.claimFk + SET c.isChargedToMana = TRUE + WHERE ce.claimDestinationFk NOT IN (1,5) + AND NOT ce.isGreuge + AND c.claimStateFk = 3; -- Recobros @@ -60,17 +59,17 @@ BEGIN CREATE TEMPORARY TABLE tmp.ticket_list (PRIMARY KEY (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 vn.ticket t ON t.id = m.Id_Ticket + FROM vn.saleComponent sc + JOIN vn.sale s ON sc.saleFk = s.id + JOIN vn.ticket t ON t.id = s.ticketFk 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 + JOIN vn.state st ON st.id = tt.stateFk + WHERE sc.componentFk = 17 + AND sc.isGreuge = 0 AND t.shipped >= '2016-10-01' AND t.shipped < util.VN_CURDATE() - AND s.alertLevel >= 3; + AND st.alertLevel >= 3; DELETE g.* FROM vn.greuge g @@ -80,24 +79,24 @@ BEGIN INSERT INTO vn.greuge(clientFk, description, amount,shipped, greugeTypeFk, ticketFk) SELECT t.clientFk - ,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2) - AS dif - ,date(t.shipped) + ,concat('recobro ', s.ticketFk), - round(SUM(sc.value*s.quantity),2) + AS dif, + date(t.shipped) , 2 ,tt.Id_Ticket - FROM vn2008.Movimientos m - JOIN vn.ticket t ON t.id = m.Id_Ticket + FROM vn.sale s + JOIN vn.ticket t ON t.id = s.ticketFk 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 + JOIN vn.saleComponent sc + ON sc.saleFk = s.id AND sc.componentFk = 17 GROUP BY t.id HAVING ABS(dif) > 1; - UPDATE vn2008.Movimientos_componentes mc - JOIN vn2008.Movimientos m ON m.Id_Movimiento = mc.Id_Movimiento - JOIN tmp.ticket_list tt ON tt.Id_Ticket = m.Id_Ticket - SET greuge = 1 - WHERE Id_Componente = 17; + UPDATE vn.saleComponent sc + JOIN vn.sale s ON s.id = sc.saleFk + JOIN tmp.ticket_list tt ON tt.Id_Ticket = s.ticketFk + SET sc.isGreuge = 1 + WHERE sc.componentFk = 17; /* * Recalculamos la ratio de las reclamaciones, que luego @@ -105,26 +104,25 @@ BEGIN */ REPLACE bi.claims_ratio(Id_Cliente, Consumo, Reclamaciones, Ratio, recobro) - SELECT Id_Cliente, 0,0,0,0 - FROM vn2008.Clientes; + SELECT id, 0,0,0,0 + FROM vn.client; REPLACE bi.claims_ratio(Id_Cliente, Consumo, Reclamaciones, Ratio, recobro) SELECT fm.Id_Cliente, 12 * fm.Consumo, Reclamaciones, - round(Reclamaciones / (12*fm.Consumo),4) AS Ratio, 0 + round(Reclamaciones / (12*fm.Consumo),4), 0 FROM bi.facturacion_media_anual fm LEFT JOIN( - SELECT cm.Id_Cliente, round(sum(-1 * ((sensib -1)/4) * - Cantidad * Preu * (100 - Descuento) / 100)) + SELECT c.clientFk, round(sum(-1 * ((c.responsibility -1)/4) * + s.quantity * s.price * (100 - s.discount) / 100)) AS Reclamaciones - FROM vn2008.Movimientos m - JOIN vn2008.cl_act ca - ON ca.Id_Movimiento = m.Id_Movimiento - JOIN vn2008.cl_main cm ON cm.id = ca.cl_main_id - WHERE ca.cl_sol_id NOT IN (1,5) - AND cm.cl_est_id = 3 - AND cm.Fecha >= TIMESTAMPADD(YEAR, -1, util.VN_CURDATE()) - GROUP BY cm.Id_Cliente - ) claims ON claims.Id_Cliente = fm.Id_Cliente; + FROM vn.sale s + JOIN vn.claimEnd ce ON ce.saleFk = s.id + JOIN vn.claim c ON c.id = ce.claimFk + WHERE ce.claimDestinationFk NOT IN (1,5) + AND c.claimStateFk = 3 + AND c.ticketCreated >= TIMESTAMPADD(YEAR, -1, util.VN_CURDATE()) + GROUP BY c.clientFk + ) claims ON claims.clientFk = fm.Id_Cliente; -- Calculamos el porcentaje del recobro para añadirlo al precio de venta @@ -153,7 +151,7 @@ BEGIN -- CLIENTE 5523, VERDECORA UPDATE bi.claims_ratio SET recobro = GREATEST(0.12, recobro) WHERE Id_Cliente = 5523; - -- CLIENTE 15979, SERVEIS VETERINARIS + -- CLIENTE 15979, SERVEIS VETERINARIS UPDATE bi.claims_ratio SET recobro = GREATEST(0.05, recobro) WHERE Id_Cliente = 15979; -- CLIENTE 5189 i 8942, son de CSR i son el mateix client diff --git a/db/routines/bi/procedures/clean_launcher.sql b/db/routines/bi/procedures/clean_launcher.sql deleted file mode 100644 index 9eea34584..000000000 --- a/db/routines/bi/procedures/clean_launcher.sql +++ /dev/null @@ -1,9 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`clean_launcher`() -BEGIN -/** - * Borra registros de las principales tablas (excepto de "ticket"). - */ - CALL vn2008.clean(0); -END$$ -DELIMITER ; diff --git a/db/routines/bi/procedures/comparativa_add.sql b/db/routines/bi/procedures/comparativa_add.sql deleted file mode 100644 index ac06798db..000000000 --- a/db/routines/bi/procedures/comparativa_add.sql +++ /dev/null @@ -1,32 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add`() -BEGIN - DECLARE lastCOMP INT; # Se trata de una variable para almacenar el ultimo valor del Periodo - DECLARE vMaxPeriod INT; - DECLARE vMaxWeek INT; - - SELECT t.period, t.`week` INTO vMaxPeriod, vMaxWeek - FROM vn.`time` t - WHERE t.dated = util.VN_CURDATE(); - - SELECT MAX(Periodo) INTO lastCOMP FROM vn2008.Comparativa; - -- Fijaremos las ventas con más de un mes de antiguedad en la tabla Comparativa - - 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.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 vn.ticket t ON t.id = m.Id_Ticket - WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3 - 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$$ -DELIMITER ; diff --git a/db/routines/bi/procedures/comparativa_add_manual.sql b/db/routines/bi/procedures/comparativa_add_manual.sql deleted file mode 100644 index 2b05b1277..000000000 --- a/db/routines/bi/procedures/comparativa_add_manual.sql +++ /dev/null @@ -1,40 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add_manual`(IN vStarted DATE, IN vEnded DATE) -BEGIN -/** - * Recalcula la tabla Comparativa para dos valores dados - * - * @param vStarted fecha desde - * @param vEnded fecha hasta - */ - - DECLARE periodStart INT; - DECLARE periodEnd INT; - - -- Seleccionamos la fecha minima/maxima del periodo que vamos a consultar - - SELECT t.period INTO periodStart - FROM vn.`time` t - WHERE t.dated = vStarted; - - SELECT t.period INTO periodEnd - FROM vn.`time` t - WHERE t.dated = vEnded; - - DELETE FROM vn2008.Comparativa - 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.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 vn.ticket t ON t.id = m.Id_Ticket - WHERE tm.period BETWEEN periodStart AND periodEnd - 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/procedures/defaultersFromDate.sql b/db/routines/bi/procedures/defaultersFromDate.sql index 267c90dab..bfe133750 100644 --- a/db/routines/bi/procedures/defaultersFromDate.sql +++ b/db/routines/bi/procedures/defaultersFromDate.sql @@ -2,7 +2,7 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaultersFromDate`(IN vDate DATE) BEGIN - SELECT t1.*, c.Cliente, w.code AS workerCode, c.pay_met_id,c.Vencimiento + SELECT t1.*, c.name Cliente, w.code workerCode, c.payMethodFk pay_met_id, c.dueDay Vencimiento FROM ( -- Filtramos aquellos clientes cuyo saldo se ha incrementado de ayer a hoy select * from( @@ -18,7 +18,7 @@ BEGIN having today.amount > 0 and difference <> 0 ) newDefaulters - )t1 left join vn2008.Clientes c ON t1.client = c.Id_Cliente - left join vn.worker w ON w.id = c.Id_Trabajador; + )t1 left join vn.client c ON c.id = t1.client + left join vn.worker w ON w.id = c.salesPersonFk; END$$ DELIMITER ; diff --git a/db/routines/bi/procedures/defaulting.sql b/db/routines/bi/procedures/defaulting.sql index e8ba5e682..d20232b8b 100644 --- a/db/routines/bi/procedures/defaulting.sql +++ b/db/routines/bi/procedures/defaulting.sql @@ -2,21 +2,22 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaulting`(IN `vDate` DATE) BEGIN DECLARE vDone BOOLEAN; - DECLARE vClient INT; - DECLARE vAmount INT; - DECLARE vDued DATE; - DECLARE vAmountInvoice DECIMAL(10,2); - DECLARE vGraceDays INT; + DECLARE vClient INT; + DECLARE vAmount INT; + DECLARE vDued DATE; + DECLARE vAmountInvoice DECIMAL(10,2); + DECLARE vGraceDays INT; DECLARE defaulters CURSOR FOR - SELECT client, amount, graceDays FROM bi.defaulters d - JOIN vn2008.Clientes c ON c.Id_Cliente = d.client - JOIN vn2008.pay_met pm ON pm.id = c.pay_met_id - WHERE hasChanged AND date = vDate; - + SELECT d.client, d.amount, pm.graceDays + FROM bi.defaulters d + JOIN vn.client c ON c.id = d.client + JOIN vn.payMethod pm ON pm.id = c.payMethodFk + WHERE hasChanged AND date = vDate; + DECLARE invoices CURSOR FOR SELECT dued Vencimiento, amount importe FROM vn.invoiceOut WHERE issued >= '2016-01-01' AND clientFk = vClient ORDER BY issued DESC; - + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DELETE FROM bi.defaulters WHERE date = vDate; @@ -26,7 +27,7 @@ BEGIN FROM vn.`client` c LEFT JOIN bi.customerRiskOverdue cro ON c.id = cro.customer_id GROUP BY c.id; - + -- marcamos si ha cambiado y heredamos la fecha defaulterSince UPDATE bi.defaulters d LEFT JOIN ( @@ -35,16 +36,16 @@ BEGIN WHERE date <= TIMESTAMPADD(DAY,-1, vDate) ORDER BY date DESC LIMIT 10000000000000000000) t GROUP BY client - ) yesterday using(client) + ) yesterday using(client) SET d.hasChanged = (IFNULL(d.amount,0) <> IFNULL(yesterday.amount,0)), d.defaulterSince = yesterday.defaulterSince, - d.frozened = yesterday.frozened + d.frozened = yesterday.frozened WHERE d.date = vDate ; - - OPEN defaulters; + + OPEN defaulters; defaulters: LOOP SET vDone = FALSE; - SET vAmount = 0; + SET vAmount = 0; FETCH defaulters INTO vClient,vAmount, vGraceDays; IF vDone THEN LEAVE defaulters; @@ -60,7 +61,7 @@ BEGIN IF TIMESTAMPADD(DAY, vGraceDays, vDued) <= vDate THEN SET vAmount = vAmount - vAmountInvoice; IF vAmount <= 0 THEN - + UPDATE defaulters SET defaulterSince = vDued WHERE client = vClient and date = vDate; @@ -73,20 +74,20 @@ BEGIN END LOOP; CLOSE defaulters; - DELETE FROM defaulters + DELETE FROM defaulters WHERE amount = 0 AND hasChanged = FALSE - AND `date` = vDate; - - UPDATE defaulters d + AND `date` = vDate; + + UPDATE defaulters d JOIN vn.config ON TRUE SET d.frozened = NULL WHERE `date` = vDate AND d.amount <= config.defaultersMaxAmount; - - CALL vn.clientFreeze(); - - -- actualizamos defaulting + + CALL vn.clientFreeze(); + + -- actualizamos defaulting DELETE FROM bi.defaulting WHERE date = vDate; INSERT INTO bi.defaulting(date, amount) diff --git a/db/routines/bi/views/last_Id_Cubo.sql b/db/routines/bi/views/last_Id_Cubo.sql deleted file mode 100644 index 758b524fd..000000000 --- a/db/routines/bi/views/last_Id_Cubo.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bi`.`last_Id_Cubo` -AS SELECT `C`.`Id_Compra` AS `Id_Compra`, - `C`.`Id_Article` AS `Id_Article`, - `tr`.`warehouse_id` AS `warehouse_id`, - `C`.`Id_Cubo` AS `Id_Cubo`, - `C`.`Packing` AS `Packing` -FROM ( - ( - `vn2008`.`Compres` `C` - JOIN `vn2008`.`Entradas` `E` ON(`C`.`Id_Entrada` = `E`.`Id_Entrada`) - ) - JOIN `vn2008`.`travel` `tr` ON(`E`.`travel_id` = `tr`.`id`) - ) -WHERE `C`.`Id_Cubo` IS NOT NULL - AND `C`.`Id_Cubo` <> '--' - AND `tr`.`landing` > `util`.`VN_CURDATE`() - INTERVAL 18 MONTH -ORDER BY `C`.`Id_Compra` DESC diff --git a/db/routines/bi/views/v_ventas_contables.sql b/db/routines/bi/views/v_ventas_contables.sql deleted file mode 100644 index 82bbeeaac..000000000 --- a/db/routines/bi/views/v_ventas_contables.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bi`.`v_ventas_contables` -AS SELECT `time`.`year` AS `year`, - `time`.`month` AS `month`, - cast( - sum( - `m`.`Cantidad` * `m`.`Preu` * (100 - `m`.`Descuento`) / 100 - ) AS decimal(10, 0) - ) AS `importe` -FROM ( - ( - ( - `vn`.`ticket` `t` - JOIN `bi`.`f_tvc` ON(`t`.`id` = `bi`.`f_tvc`.`Id_Ticket`) - ) - JOIN `vn2008`.`Movimientos` `m` ON(`t`.`id` = `m`.`Id_Ticket`) - ) - JOIN `vn2008`.`time` ON(`time`.`date` = cast(`t`.`shipped` AS date)) - ) -WHERE `t`.`shipped` >= '2014-01-01' -GROUP BY `time`.`year`, - `time`.`month` diff --git a/db/routines/bs/procedures/bancos_evolution_add.sql b/db/routines/bs/procedures/bancos_evolution_add.sql deleted file mode 100644 index f0a3b3709..000000000 --- a/db/routines/bs/procedures/bancos_evolution_add.sql +++ /dev/null @@ -1,112 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`bancos_evolution_add`(vStartingDate DATE) -BEGIN -/** - * Inserta en la tabla bancos_evolution los saldos acumulados de cada banco - * - * @param vStartingDate Fecha desde la cual se recalculan la tabla bs.bancos_evolution - */ - DECLARE vCurrentDate DATE; - DECLARE vMaxDate DATE DEFAULT TIMESTAMPADD(MONTH, 7, util.VN_CURDATE()); - IF IFNULL(vStartingDate,0) < TIMESTAMPADD(YEAR, -5, util.VN_CURDATE()) THEN - CALL util.throw('invalid date'); - END IF; - DELETE FROM bs.bancos_evolution WHERE Fecha >= vStartingDate; - - SET vCurrentDate = vStartingDate; - - INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo) - SELECT vCurrentDate, Id_Banco, deuda - FROM bs.bancos_evolution - WHERE Fecha = TIMESTAMPADD(DAY,-1,vCurrentDate); - - WHILE vCurrentDate < vMaxDate DO --- insertar solo el dia de ayer - INSERT INTO bs.bancos_evolution(Fecha ,Id_Banco, saldo) - SELECT vCurrentDate, Id_Banco, SUM(saldo) - FROM ( - SELECT Id_Banco ,saldo - FROM bs.bancos_evolution - WHERE Fecha = TIMESTAMPADD(DAY,-1,vCurrentDate) -- los saldos acumulados del dia anterior - UNION ALL - - SELECT c.Id_Banco, IFNULL(SUM(Entrada),0) - IFNULL(SUM(Salida),0) as saldo - FROM vn2008.Cajas c - JOIN vn2008.Bancos b using(Id_Banco) -- saldos de las cajas - JOIN vn.accountingType at2 ON at2.id = b.cash - WHERE at2.code IN ('wireTransfer','fundingLine') - AND Cajafecha = vCurrentDate - AND (Serie = 'MB' OR at2.code = 'fundingLine') - GROUP BY Id_Banco - )sub - GROUP BY Id_Banco - ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo); - - SET vCurrentDate = TIMESTAMPADD(DAY,1,vCurrentDate); - - END WHILE; - - -- Ahora actualizamos la quilla - UPDATE bs.bancos_evolution be - JOIN - ( - SELECT bp.Id_Banco, - sum(bp.importe) as quilla, t.dated - FROM vn.time t - JOIN vn2008.Bancos_poliza bp ON t.dated between apertura AND IFNULL(cierre, t.dated) - WHERE t.dated BETWEEN vStartingDate AND vMaxDate - GROUP BY Id_Banco, t.dated - ) sub ON be.Id_Banco = sub.Id_Banco AND sub.dated = be.Fecha - SET be.quilla = sub.quilla; - - -- pagos futuros no concilidados - INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo) - SELECT t.dated, p.id_banco, - importe - FROM vn.time t - join vn2008.pago p ON p.fecha <= t.dated - WHERE t.dated BETWEEN util.VN_CURDATE() AND vMaxDate - AND p.fecha BETWEEN util.VN_CURDATE() AND vMaxDate - AND NOT conciliado - ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo); - - -- cobros futuros - INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo) - SELECT t.dated, r.Id_Banco, SUM(Entregado) - FROM vn.time t - JOIN vn2008.Recibos r ON r.Fechacobro <= t.dated - WHERE r.Fechacobro > util.VN_CURDATE() AND r.Fechacobro <= vMaxDate - AND t.dated BETWEEN util.VN_CURDATE() AND vMaxDate - GROUP BY t.dated, r.Id_Banco - ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo); - - -- saldos de la tabla prevision - INSERT INTO bs.bancos_evolution(Fecha, Id_Banco, saldo) - SELECT t.dated, sp.Id_Banco, SUM(Importe) - FROM vn.time t - JOIN vn2008.Saldos_Prevision sp ON sp.Fecha <= t.dated - JOIN vn2008.Bancos b ON sp.Id_Banco = b.Id_Banco - JOIN vn.accountingType at2 ON at2.id = b.cash - WHERE at2.code IN ('wireTransfer','fundingLine') - AND t.dated BETWEEN vStartingDate AND vMaxDate - GROUP BY t.dated, sp.Id_Banco - ON DUPLICATE KEY UPDATE saldo = saldo + VALUES(saldo); - - -- Utilizamos el saldo_auxiliar para calcular lo dispuesto en las polizas - UPDATE bs.bancos_evolution be - SET saldo_aux = saldo - WHERE Fecha >= vStartingDate; - - -- Deuda - UPDATE bs.bancos_evolution be - JOIN vn2008.Bancos b using(Id_Banco) - JOIN vn.accountingType at2 ON at2.id = b.cash - SET be.deuda = IF(at2.code = 'fundingLine', be.saldo_aux, 0) - , be.saldo = IF(at2.code = 'fundingLine', 0, be.saldo_aux) - WHERE Fecha >= vStartingDate; - - -- Liquidez - update bs.bancos_evolution set liquidez = saldo - quilla + deuda WHERE Fecha >= vStartingDate; - -- Disponibilidad - update bs.bancos_evolution set `disponibilidad ajena` = - quilla + deuda WHERE Fecha >= vStartingDate; - -END$$ -DELIMITER ; diff --git a/db/routines/bs/procedures/comercialesCompleto.sql b/db/routines/bs/procedures/comercialesCompleto.sql deleted file mode 100644 index 96cab5b4f..000000000 --- a/db/routines/bs/procedures/comercialesCompleto.sql +++ /dev/null @@ -1,111 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`comercialesCompleto`(IN vWorker INT, vDate DATE) -BEGIN - DECLARE vAYearAgoStarted DATE DEFAULT DATE_FORMAT(TIMESTAMPADD(YEAR, - 1, vDate), '%Y-%m-01'); - DECLARE vAYearAgoEnded DATE DEFAULT TIMESTAMPADD(YEAR, - 1, LAST_DAY(vDate)); - - CALL vn.worker_GetHierarchy(vWorker); - - INSERT IGNORE INTO tmp.workerHierarchyList (workerFk) - SELECT wd2.workerFk - FROM vn.workerDepartment wd2 - WHERE wd2.workerFk = vWorker; - - -- Falta que en algunos casos solo tenga en cuenta los tipos afectados. - SELECT - c.Id_Cliente id_cliente, - c.Cliente cliente, - cr.recobro * 100 tarifa, - c.Telefono telefono, - c.movil, - c.POBLACION poblacion, - p.`name` provincia, - ROUND(f.futur, 2) futur, - c.Credito credito, - pm.`name` forma_pago, - ROUND(c365 / 12, 2) consumo_medio365, - ROUND(c365, 2) consumo365, - ROUND(CmLy.peso, 2) peso_mes_año_pasado, - ROUND(CmLy.peso * 1.19, 2) objetivo, - tr.CodigoTrabajador, - ROUND(mes_actual.consumo, 2) consumoMes, - ROUND(IFNULL(mes_actual.consumo, 0) - IFNULL(CmLy.peso * 1.19, 0), 2) como_lo_llevo, - DATE(LastTicket) ultimo_ticket, - dead.muerto, - g.Greuge, - cr.recobro - FROM - vn2008.Clientes c - LEFT JOIN - (SELECT g.clientFk Id_Cliente, CAST( SUM(g.amount) as DECIMAL(12,2)) AS Greuge - FROM vn.greuge g - JOIN vn.`client` c ON c.id = g.clientFk - LEFT JOIN vn.worker w ON c.salesPersonFk = w.id - WHERE (c.salesPersonFk = vWorker OR w.bossFk = vWorker) - GROUP BY Id_Cliente - ) g ON g.Id_Cliente = c.Id_Cliente - LEFT JOIN - vn2008.province p ON p.province_id = c.province_id - JOIN - vn2008.pay_met pm ON pm.id = c.pay_met_id - LEFT JOIN - vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador - LEFT JOIN - bi.claims_ratio cr on cr.Id_Cliente = c.Id_Cliente - LEFT JOIN - (SELECT v.Id_Cliente, SUM(importe) c365 -- optimizat de 6s /5.3s/ 4.7s a 0.3/0.4/0.3 - FROM bs.ventas v - JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente - WHERE v.fecha BETWEEN TIMESTAMPADD(YEAR, - 1, vDate) AND vDate - GROUP BY v.Id_Cliente) c365 ON c365.Id_Cliente = c.Id_Cliente - LEFT JOIN - (SELECT - Id_Cliente, SUM(importe) consumo - FROM - bs.ventas v - INNER JOIN vn2008.Clientes c USING (Id_Cliente) - LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador - WHERE - (c.Id_Trabajador = vWorker OR tr.boss = vWorker) - 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.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.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.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.clientFk) LastTicket ON LastTicket.Id_Cliente = c.Id_Cliente - LEFT JOIN - ( - SELECT SUM(importe) peso, c.Id_Cliente - FROM bs.ventas v - JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente - LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador - WHERE fecha BETWEEN vAYearAgoStarted and vAYearAgoEnded - AND (c.Id_Trabajador = vWorker OR tr.boss = vWorker) - GROUP BY c.Id_Cliente) CmLy ON CmLy.Id_Cliente = c.Id_Cliente - LEFT JOIN - (SELECT c.Id_Cliente, - IF(MAX(io.issued) < DATE_FORMAT(TIMESTAMPADD(MONTH, - 1, vDate), '%Y- %m-01'), TRUE, FALSE) muerto - FROM vn.invoiceOut io - JOIN vn2008.Clientes c ON c.Id_cliente = io.clientFk - LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador - WHERE (c.Id_Trabajador = vWorker OR tr.boss = vWorker) - GROUP BY Id_Cliente) dead ON dead.Id_Cliente = c.Id_Cliente - JOIN tmp.workerHierarchyList s ON s.workerFk = c.Id_Trabajador; - - DROP TEMPORARY TABLE tmp.workerHierarchyList; -END$$ -DELIMITER ; diff --git a/db/routines/bs/procedures/indicatorsUpdate.sql b/db/routines/bs/procedures/indicatorsUpdate.sql index b2a3ee8b3..d66e52a61 100644 --- a/db/routines/bs/procedures/indicatorsUpdate.sql +++ b/db/routines/bs/procedures/indicatorsUpdate.sql @@ -15,10 +15,10 @@ BEGIN SET lastYearSales = (SELECT SUM(importe + recargo) FROM ventas v - JOIN vn2008.empresa e ON e.id = v.empresa_id - JOIN vn2008.empresa_grupo eg ON eg.empresa_grupo_id = e.empresa_grupo + JOIN vn.company c ON c.id = v.empresa_id + JOIN vn.companyGroup cg ON cg.id = c.companyGroupFk WHERE fecha BETWEEN oneYearBefore AND vDated - AND eg.grupo = 'Verdnatura' + AND cg.code = 'Verdnatura' ) WHERE updated = vDated; diff --git a/db/routines/bs/procedures/manaCustomerUpdate.sql b/db/routines/bs/procedures/manaCustomerUpdate.sql index f53d293b3..e9ba70423 100644 --- a/db/routines/bs/procedures/manaCustomerUpdate.sql +++ b/db/routines/bs/procedures/manaCustomerUpdate.sql @@ -5,97 +5,90 @@ BEGIN DECLARE vFromDated DATE; DECLARE vForDeleteDated DATE; DECLARE vManaId INT; - DECLARE vManaAutoId INT; - DECLARE vClaimManaId INT; - DECLARE vManaBankId INT; - DECLARE vManaGreugeTypeId INT; - DECLARE vManaFromDays INT; - DECLARE vManaToDays INT; + DECLARE vManaAutoId INT; + DECLARE vClaimManaId INT; + DECLARE vManaBankId INT; + DECLARE vManaGreugeTypeId INT; + DECLARE vManaFromDays INT; + DECLARE vManaToDays INT; - SELECT id INTO vManaId - FROM vn.component WHERE code = 'mana'; + SELECT id INTO vManaId + FROM vn.component WHERE code = 'mana'; - SELECT id INTO vManaAutoId + SELECT id INTO vManaAutoId FROM vn.component WHERE code = 'autoMana'; SELECT id INTO vClaimManaId FROM vn.component WHERE code = 'manaClaim'; - SELECT id INTO vManaBankId + SELECT id INTO vManaBankId FROM vn.accounting WHERE code = 'mana'; - SELECT id INTO vManaGreugeTypeId + SELECT id INTO vManaGreugeTypeId FROM vn.greugeType WHERE code = 'mana'; - SELECT manaFromDays, manaToDays - INTO vManaFromDays, vManaToDays - FROM vn.salespersonConfig; + SELECT manaFromDays, manaToDays + INTO vManaFromDays, vManaToDays + FROM vn.salespersonConfig; - SELECT MAX(dated) - INTO vFromDated - FROM vn.clientManaCache; + SELECT MAX(dated) INTO vFromDated + FROM vn.clientManaCache; - DELETE - FROM vn.clientManaCache - WHERE dated = vFromDated; - - SELECT MAX(dated) - INTO vFromDated - FROM vn.clientManaCache; - - IF ISNULL(vFromDated) THEN - SELECT manaDateFrom - INTO vFromDated - FROM vn.salespersonConfig; - END IF; + DELETE FROM vn.clientManaCache + WHERE dated = vFromDated; + + SELECT MAX(dated) INTO vFromDated + FROM vn.clientManaCache; + + IF vFromDated IS NULL THEN + SELECT manaDateFrom + INTO vFromDated + FROM vn.salespersonConfig; + END IF; - WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO - SELECT - vFromDated + INTERVAL vManaToDays DAY, - vFromDated - INTERVAL vManaFromDays DAY - INTO - vToDated, - vForDeleteDated; - - DELETE FROM vn.clientManaCache - WHERE dated <= vForDeleteDated; + WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO + SELECT vFromDated + INTERVAL vManaToDays DAY, + vFromDated - INTERVAL vManaFromDays DAY + INTO vToDated, + vForDeleteDated; + + DELETE FROM vn.clientManaCache + WHERE dated <= vForDeleteDated; - INSERT INTO vn.clientManaCache(clientFk, mana, dated) - SELECT - Id_Cliente, - SUM(mana), - vToDated - FROM - ( - SELECT cs.Id_Cliente, Cantidad * Valor as mana - FROM vn.ticket t - JOIN vn2008.Consignatarios cs using(Id_Consigna) - 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.shipped > vFromDated - AND date(t.shipped) <= vToDated - UNION ALL - SELECT r.Id_Cliente, - Entregado - FROM vn2008.Recibos r - WHERE Id_Banco = vManaBankId - AND Fechacobro > vFromDated - AND Fechacobro <= vToDated - UNION ALL - SELECT clientFk, amount - FROM vn.greuge - WHERE greugeTypeFk = vManaGreugeTypeId - AND shipped > vFromDated - AND shipped <= vToDated - UNION ALL - SELECT clientFk, mana - FROM vn.clientManaCache - WHERE dated = vFromDated - ) sub - GROUP BY Id_Cliente - HAVING Id_Cliente; + INSERT INTO vn.clientManaCache(clientFk, mana, dated) + SELECT Id_Cliente, + SUM(mana), + vToDated + FROM ( + SELECT a.clientFk Id_Cliente, s.quantity * sc.value mana + FROM vn.ticket t + JOIN vn.address a ON a.id = t.addressFk + JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.saleComponent sc ON sc.saleFk = s.id + WHERE sc.componentFk IN (vManaAutoId, vManaId, vClaimManaId) + AND t.shipped > vFromDated + AND DATE(t.shipped) <= vToDated + UNION ALL + SELECT clientFk, - amountPaid + FROM vn.receipt + WHERE bankFk = vManaBankId + AND payed > vFromDated + AND payed <= vToDated + UNION ALL + SELECT clientFk, amount + FROM vn.greuge + WHERE greugeTypeFk = vManaGreugeTypeId + AND shipped > vFromDated + AND shipped <= vToDated + UNION ALL + SELECT clientFk, mana + FROM vn.clientManaCache + WHERE dated = vFromDated + ) sub + GROUP BY Id_Cliente + HAVING Id_Cliente; - SET vFromDated = vToDated; - END WHILE; + SET vFromDated = vToDated; + END WHILE; END$$ DELIMITER ; diff --git a/db/routines/bs/procedures/sale_add.sql b/db/routines/bs/procedures/sale_add.sql new file mode 100644 index 000000000..64beb4776 --- /dev/null +++ b/db/routines/bs/procedures/sale_add.sql @@ -0,0 +1,72 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sale_add`( + IN vStarted DATE, + IN vEnded DATE) +BEGIN +/** + * Añade las ventas que se realizaron entre 2 fechas a la tabla bs.sale + * + * @param vStarted Fecha de inicio + * @param vEnded Fecha de fin + * + */ + DECLARE vLoopDate DATE; + DECLARE vLoopDateTime DATETIME; + + IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN + CALL util.throw('Wrong date'); + END IF; + + SET vLoopDate = vStarted; + + DELETE FROM sale + WHERE dated BETWEEN vStarted AND vEnded; + + WHILE vLoopDate <= vEnded DO + SET vLoopDateTime = util.dayEnd(vLoopDate); + + REPLACE sale( + saleFk, + amount, + surcharge, + dated, + typeFk, + clientFk, + companyFk, + margin + )WITH calculatedSales AS( + SELECT s.id saleFk, + SUM(IF(ct.isBase, s.quantity * sc.value, 0)) amount, + SUM(IF(ct.isBase, 0, s.quantity * sc.value)) surcharge, + s.total pvp, + DATE(t.shipped) dated, + i.typeFk, + t.clientFk, + t.companyFk, + SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) marginComponents + FROM vn.ticket t + STRAIGHT_JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.item i ON i.id = s.itemFk + JOIN vn.itemType it ON it.id = i.typeFk + JOIN vn.itemCategory ic ON ic.id = it.categoryFk + JOIN vn.saleComponent sc ON sc.saleFk = s.id + JOIN vn.component c ON c.id = sc.componentFk + JOIN vn.componentType ct ON ct.id = c.typeFk + WHERE t.shipped BETWEEN vLoopDate AND vLoopDateTime + AND s.quantity <> 0 + AND ic.merchandise + GROUP BY s.id + )SELECT saleFk, + amount, + surcharge, + dated, + typeFk, + clientFk, + companyFk, + marginComponents + amount + surcharge - pvp + FROM calculatedSales; + + SET vLoopDate = vLoopDate + INTERVAL 1 DAY; + END WHILE; +END$$ +DELIMITER ; diff --git a/db/routines/bs/procedures/ventas_add_launcher.sql b/db/routines/bs/procedures/sales_addLauncher.sql similarity index 56% rename from db/routines/bs/procedures/ventas_add_launcher.sql rename to db/routines/bs/procedures/sales_addLauncher.sql index 0d9e89a89..38cb5e219 100644 --- a/db/routines/bs/procedures/ventas_add_launcher.sql +++ b/db/routines/bs/procedures/sales_addLauncher.sql @@ -1,13 +1,12 @@ DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add_launcher`() +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sales_addLauncher`() BEGIN /** * Añade las ventas a la tabla bs.sale que se realizaron desde hace un mes hasta hoy * */ - DECLARE vCurDate DATE DEFAULT util.VN_CURDATE(); - CALL ventas_add(vCurDate - INTERVAL 1 MONTH, vCurDate); - + + CALL sale_add(vCurDate - INTERVAL 1 MONTH, vCurDate); END$$ DELIMITER ; diff --git a/db/routines/bs/procedures/ventas_add.sql b/db/routines/bs/procedures/ventas_add.sql deleted file mode 100644 index fcb00e092..000000000 --- a/db/routines/bs/procedures/ventas_add.sql +++ /dev/null @@ -1,78 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add`( - IN vStarted DATETIME, - IN vEnded DATETIME) -BEGIN -/** -* Añade las ventas que se realizaron entre -* vStarted y vEnded -* -* @param vStarted Fecha de inicio -* @param vEnded Fecha de finalizacion -* -**/ - DECLARE vStartingDate DATETIME; - DECLARE vEndingDate DATETIME; - - IF vStarted < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE()) - OR vEnded < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE()) THEN - CALL util.throw('fechaDemasiadoAntigua'); - END IF; - - SET vEnded = util.dayEnd(vEnded); - SET vStartingDate = vStarted ; - SET vEndingDate = util.dayEnd(vStartingDate); - - DELETE - FROM sale - WHERE dated BETWEEN vStartingDate AND vEnded; - - WHILE vEndingDate <= vEnded DO - - REPLACE ventas(Id_Movimiento, importe, recargo, fecha, tipo_id, Id_Cliente, empresa_id) - SELECT saleFk, - SUM(IF(ct.isBase, s.quantity * sc.value, 0)) importe, - SUM(IF(ct.isBase, 0, s.quantity * sc.value)) recargo, - vStartingDate, - i.typeFk, - a.clientFk, - t.companyFk - FROM vn.saleComponent sc - JOIN vn.component c ON c.id = sc.componentFk - JOIN vn.componentType ct ON ct.id = c.typeFk - JOIN vn.sale s ON s.id = sc.saleFk - JOIN vn.item i ON i.id = s.itemFk - JOIN vn.itemType it ON it.id = i.typeFk - JOIN vn.itemCategory ic ON ic.id = it.categoryFk - JOIN vn.ticket t ON t.id = s.ticketFk - JOIN vn.address a ON a.id = t.addressFk - JOIN vn.client cl ON cl.id = a.clientFk - WHERE t.shipped BETWEEN vStartingDate AND vEndingDate - AND s.quantity <> 0 - AND s.discount <> 100 - AND ic.merchandise - GROUP BY sc.saleFk - HAVING IFNULL(importe,0) <> 0 OR IFNULL(recargo,0) <> 0; - - UPDATE sale s - JOIN ( - SELECT s.id, - SUM(s.quantity * sc.value ) margen, - s.quantity * s.price * (100 - s.discount ) / 100 pvp - FROM vn.sale s - JOIN vn.ticket t ON t.id = s.ticketFk - JOIN vn.saleComponent sc ON sc.saleFk = s.id - JOIN vn.component c ON c.id = sc.componentFk - JOIN vn.componentType ct ON ct.id = c.typeFk - WHERE t.shipped BETWEEN vStartingDate AND vEndingDate - AND ct.isMargin = TRUE - GROUP BY s.id) sub ON sub.id = s.saleFk - SET s.margin = sub.margen + s.amount + s.surcharge - sub.pvp; - - SET vStartingDate = TIMESTAMPADD(DAY,1, vStartingDate); - SET vEndingDate = util.dayEnd(vStartingDate); - - END WHILE; - -END$$ -DELIMITER ; diff --git a/db/routines/bs/procedures/ventas_contables_add.sql b/db/routines/bs/procedures/ventas_contables_add.sql index ad4e80a06..72b0c0fee 100644 --- a/db/routines/bs/procedures/ventas_contables_add.sql +++ b/db/routines/bs/procedures/ventas_contables_add.sql @@ -38,35 +38,35 @@ BEGIN SELECT vYear , vMonth - , round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) + , round(sum(s.quantity * s.price * (100 - s.discount)/100)) , IF( - e.empresa_grupo = e2.empresa_grupo + co.companyGroupFk = co2.companyGroupFk ,1 - ,IF(e2.empresa_grupo,2,0) + ,IF(co2.companyGroupFk,2,0) ) as grupo - , tp.reino_id - , a.tipo_id + , it.categoryFk + , i.typeFk , t.companyFk - , a.expenseFk - + IF(e.empresa_grupo = e2.empresa_grupo + , i.expenseFk + + IF(co.companyGroupFk = co2.companyGroupFk ,1 - ,IF(e2.empresa_grupo,2,0) + ,IF(co2.companyGroupFk,2,0) ) * 100000 - + tp.reino_id * 1000 as Gasto - FROM vn2008.Movimientos m - 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 + + it.categoryFk * 1000 as Gasto + FROM vn.sale s + JOIN vn.ticket t ON t.id = s.ticketFk + JOIN vn.address a on a.id = t.addressFk + JOIN vn.client c on c.id = a.clientFk 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.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, companyFk, Gasto; + JOIN vn.item i on s.itemFk = i.id + JOIN vn.company co on co.id = t.companyFk + LEFT JOIN vn.company co2 on co2.clientFk = c.id + JOIN vn.itemType it on it.id = i.typeFk + WHERE s.quantity <> 0 + AND s.price <> 0 + AND s.discount <> 100 + AND i.typeFk <> TIPO_PATRIMONIAL + GROUP BY grupo, it.categoryFk, i.typeFk, t.companyFk, Gasto; INSERT INTO bs.ventas_contables(year , month diff --git a/db/routines/bs/procedures/ventas_contables_por_cliente.sql b/db/routines/bs/procedures/ventas_contables_por_cliente.sql deleted file mode 100644 index ed3773cf7..000000000 --- a/db/routines/bs/procedures/ventas_contables_por_cliente.sql +++ /dev/null @@ -1,47 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_contables_por_cliente`(IN vYear INT, IN vMonth INT) -BEGIN - - /** - * Muestra las ventas (€) de cada cliente - * dependiendo del año - */ - - DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; - - CREATE TEMPORARY TABLE tmp.ticket_list - (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; - - SELECT vYear Año, - vMonth Mes, - 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.companyFk empresa - FROM vn2008.Movimientos m - 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 = t.id - JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article - 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.clientFk, grupo,t.companyFk; - - DROP TEMPORARY TABLE tmp.ticket_list; - -END$$ -DELIMITER ; diff --git a/db/routines/bs/procedures/vivosMuertos.sql b/db/routines/bs/procedures/vivosMuertos.sql deleted file mode 100644 index c07570603..000000000 --- a/db/routines/bs/procedures/vivosMuertos.sql +++ /dev/null @@ -1,63 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vivosMuertos`() -BEGIN - - /** - * Devuelve el número de clientes nuevos y muertos, - * dependiendo de la fecha actual. - * - * @param @datSTART Fecha de inicio a buscar - * @param @datEND Fecha de finalización a buscar - */ - - SET @datSTART = TIMESTAMPADD(YEAR,-2,util.VN_CURDATE()); - SET @datEND = TIMESTAMPADD(DAY,-DAY(util.VN_CURDATE()),util.VN_CURDATE()); - - DROP TEMPORARY TABLE IF EXISTS tmp.VivosMuertos; - - CREATE TEMPORARY TABLE tmp.VivosMuertos - SELECT c.Id_Cliente, tm.yearMonth, f.Compra, 0 as Nuevo, 0 as Muerto - FROM vn2008.Clientes c - JOIN - (SELECT DISTINCT yearMonth - FROM vn2008.time - WHERE date BETWEEN @datSTART - AND @datEND ) tm - LEFT JOIN - (SELECT DISTINCT tm.yearMonth, io.clientFk Id_Cliente , 1 as Compra - FROM vn.invoiceOut io - JOIN vn2008.time tm ON tm.date = io.issued - WHERE io.issued BETWEEN @datSTART - AND @datEND) f ON f.yearMonth = tm.yearMonth - AND f.Id_Cliente = c.Id_Cliente; - - UPDATE tmp.VivosMuertos vm - JOIN - (SELECT MIN(tm.yearMonth) firstMonth, io.clientFk Id_Cliente - FROM vn.invoiceOut io - JOIN vn2008.time tm ON tm.date = io.issued - WHERE io.issued BETWEEN @datSTART AND @datEND - GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth - AND fm.Id_Cliente = vm.Id_Cliente - - SET Nuevo = 1; - - SELECT max(yearMonth) INTO @lastYearMonth FROM tmp.VivosMuertos; - - UPDATE tmp.VivosMuertos vm - JOIN ( - SELECT MAX(tm.yearMonth) firstMonth, io.clientFk Id_Cliente - FROM vn.invoiceOut io - JOIN vn2008.time tm ON tm.date = io.issued - WHERE io.issued BETWEEN @datSTART AND @datEND - GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth - AND fm.Id_Cliente = vm.Id_Cliente - - SET Muerto = 1 - - WHERE yearMonth < @lastYearMonth; - - SELECT * FROM tmp.VivosMuertos; - -END$$ -DELIMITER ; diff --git a/db/routines/bs/views/VentasPorCliente.sql b/db/routines/bs/views/VentasPorCliente.sql deleted file mode 100644 index 579d3b955..000000000 --- a/db/routines/bs/views/VentasPorCliente.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bs`.`VentasPorCliente` -AS SELECT `v`.`Id_Cliente` AS `Id_Cliente`, - round(sum(`v`.`importe`), 0) AS `VentaBasica`, - `t`.`year` AS `year`, - `t`.`month` AS `month` -FROM ( - `vn2008`.`time` `t` - JOIN `bs`.`ventas` `v` ON(`v`.`fecha` = `t`.`date`) - ) -GROUP BY `v`.`Id_Cliente`, - `t`.`year`, - `t`.`month` diff --git a/db/routines/bs/views/bajasLaborales.sql b/db/routines/bs/views/bajasLaborales.sql deleted file mode 100644 index 31f870d06..000000000 --- a/db/routines/bs/views/bajasLaborales.sql +++ /dev/null @@ -1,31 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bs`.`bajasLaborales` -AS SELECT `w`.`firstName` AS `firstname`, - `w`.`lastName` AS `name`, - `b`.`id` AS `businessFk`, - max(`c`.`dated`) AS `lastDate`, - max(IFNULL(`b`.`ended`, `util`.`VN_CURDATE`())) AS `endContract`, - `at`.`name` AS `type`, - cast(COUNT(0) AS decimal(10, 0)) AS `dias`, - `w`.`id` AS `userFk` -FROM ( - ( - ( - `vn`.`calendar` `c` - JOIN `vn`.`business` `b` ON(`b`.`id` = `c`.`businessFk`) - ) - JOIN `vn`.`worker` `w` ON(`w`.`id` = `b`.`workerFk`) - ) - JOIN `vn`.`absenceType` `at` ON(`at`.`id` = `c`.`dayOffTypeFk`) - ) -WHERE `c`.`dated` >= `util`.`VN_CURDATE`() + INTERVAL -1 year - AND `at`.`name` NOT IN ( - 'Vacaciones', - 'Vacaciones 1/2 día', - 'Compensar', - 'Festivo' - ) -GROUP BY `w`.`id`, - `at`.`id` -HAVING `endContract` >= `util`.`VN_CURDATE`() diff --git a/db/routines/bs/views/horasSilla.sql b/db/routines/bs/views/horasSilla.sql deleted file mode 100644 index 973108e8a..000000000 --- a/db/routines/bs/views/horasSilla.sql +++ /dev/null @@ -1,27 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bs`.`horasSilla` -AS SELECT `wj`.`dated` AS `Fecha`, - `d`.`name` AS `Departamento`, - cast(sum(`wj`.`total`) AS decimal(10, 2)) AS `Horas`, - cast( - sum( - (`wj`.`total` + `wj`.`lunch`) * `wj`.`priceOrdinaryHour` - ) AS decimal(10, 2) - ) AS `Salarios` -FROM ( - ( - `vn`.`workerJourney` `wj` - JOIN `vn`.`business` `b` ON(`b`.`id` = `wj`.`businessFk`) - ) - JOIN `vn`.`department` `d` ON(`d`.`id` = `b`.`departmentFk`) - ) -WHERE `d`.`name` IN ( - 'CAMARA', - 'ENCAJADO', - 'PALETIZADORES', - 'PRODUCCION', - 'SACADORES' - ) -GROUP BY `wj`.`dated`, - `d`.`name` diff --git a/db/routines/bs/views/s1_ticketDetail.sql b/db/routines/bs/views/s1_ticketDetail.sql deleted file mode 100644 index 77fbcdcd9..000000000 --- a/db/routines/bs/views/s1_ticketDetail.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bs`.`s1_ticketDetail` -AS SELECT `s`.`ticketFk` AS `ticketFk`, - cast( - sum(`s`.`price` * `s`.`quantity`) AS decimal(10, 2) - ) AS `ticketAmount`, - COUNT(`s`.`id`) AS `ticketLines`, - cast(sum(`sv`.`volume`) AS decimal(10, 2)) AS `ticketM3`, - cast(`t`.`shipped` AS date) AS `shipped` -FROM ( - ( - `vn`.`ticket` `t` - JOIN `vn`.`sale` `s` ON(`s`.`ticketFk` = `t`.`id`) - ) - JOIN `vn`.`saleVolume` `sv` ON(`sv`.`saleFk` = `s`.`id`) - ) -WHERE `t`.`shipped` BETWEEN '2021-09-01' AND '2021-10-31 23:59' -GROUP BY `s`.`ticketFk` diff --git a/db/routines/bs/views/s21_saleDetail.sql b/db/routines/bs/views/s21_saleDetail.sql deleted file mode 100644 index 778994bfb..000000000 --- a/db/routines/bs/views/s21_saleDetail.sql +++ /dev/null @@ -1,42 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `bs`.`s21_saleDetail` -AS SELECT dayofmonth(`t`.`shipped`) AS `dia`, - year(`t`.`shipped`) AS `año`, - MONTH(`t`.`shipped`) AS `mes`, - `s`.`concept` AS `concepto`, - `s`.`quantity` AS `unidades`, - `s`.`price` AS `precio`, - `s`.`quantity` * `s`.`price` AS `venta`, - `it`.`name` AS `familia`, - `w`.`code` AS `comprador`, - `s`.`itemFk` AS `itemFk`, - `s`.`ticketFk` AS `ticketFk`, - `sv`.`volume` AS `volume` -FROM ( - ( - ( - ( - ( - ( - `vn`.`sale` `s` - JOIN `vn`.`item` `i` ON(`i`.`id` = `s`.`itemFk`) - ) - JOIN `vn`.`itemType` `it` ON(`it`.`id` = `i`.`typeFk`) - ) - JOIN `vn`.`worker` `w` ON(`w`.`id` = `it`.`workerFk`) - ) - JOIN `vn`.`ticket` `t` ON(`t`.`id` = `s`.`ticketFk`) - ) - JOIN `vn`.`client` `c` ON(`c`.`id` = `t`.`clientFk`) - ) - JOIN `vn`.`saleVolume` `sv` ON(`sv`.`saleFk` = `s`.`id`) - ) -WHERE ( - `t`.`shipped` BETWEEN '2020-10-21' AND '2020-10-28' - OR `t`.`shipped` BETWEEN '2019-10-21' AND '2019-10-28' - OR `t`.`shipped` BETWEEN '2021-09-1' AND '2021-10-28' - ) - AND `t`.`warehouseFk` IN (1, 60) - AND `c`.`isRelevant` <> 0 - AND `s`.`quantity` > 0 diff --git a/db/routines/cache/procedures/prod_graphic_refresh.sql b/db/routines/cache/procedures/prod_graphic_refresh.sql deleted file mode 100644 index edeeba436..000000000 --- a/db/routines/cache/procedures/prod_graphic_refresh.sql +++ /dev/null @@ -1,36 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`prod_graphic_refresh`(v_refresh BOOL, wh_id INT) -proc: BEGIN - DECLARE datEQ DATETIME; - DECLARE timDIF TIME; - DECLARE v_calc INT; - - CALL cache_calc_start (v_calc, v_refresh, 'prod_graphic', wh_id); - - IF !v_refresh - THEN - LEAVE proc; - END IF; - - CALL vn2008.production_control_source(wh_id, 0); - - DELETE FROM prod_graphic_source; - - INSERT INTO prod_graphic_source (warehouse_id, graphCategory, m3, hora, `order`, Agencia) - SELECT - wh_id, - st.graphCategory, - CAST(SUM(m3) AS DECIMAL(10,0)) as m3, - pb.Hora, - pb.state_order, - pb.Agencia - FROM tmp.production_buffer pb - JOIN vn.state st ON st.id = pb.state - WHERE Fecha = util.VN_CURDATE() - GROUP BY wh_id, graphCategory - ; - - - CALL cache_calc_end (v_calc); -END$$ -DELIMITER ; diff --git a/db/routines/edi/procedures/ekt_load.sql b/db/routines/edi/procedures/ekt_load.sql index 9ec0c81d4..190b09a86 100644 --- a/db/routines/edi/procedures/ekt_load.sql +++ b/db/routines/edi/procedures/ekt_load.sql @@ -70,16 +70,16 @@ proc:BEGIN ELSE - INSERT IGNORE INTO vn2008.Cubos (Id_Cubo, X, Y, Z) + INSERT IGNORE INTO vn.packaging (id, width, depth, height) SELECT bucket_id, ROUND(x_size/10), ROUND(y_size/10), ROUND(z_size/10) FROM bucket WHERE bucket_id = vPackage; IF ROW_COUNT() > 0 THEN - INSERT INTO vn2008.mail SET + INSERT INTO vn.mail SET `subject` = 'Cubo añadido', - `text` = CONCAT('Se ha añadido el cubo: ', vPackage), - `to` = 'ekt@verdnatura.es'; + `body` = CONCAT('Se ha añadido el cubo: ', vPackage), + `receiver` = 'ekt@verdnatura.es'; END IF; END IF; 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/util/procedures/connection_kill.sql b/db/routines/util/procedures/connection_kill.sql new file mode 100644 index 000000000..b38509d1b --- /dev/null +++ b/db/routines/util/procedures/connection_kill.sql @@ -0,0 +1,13 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`connection_kill`( + vConnectionId BIGINT +) +BEGIN +/** + * Kill a connection + * + * @param vConnectionId + */ + KILL vConnectionId; +END$$ +DELIMITER ; \ No newline at end of file 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 deleted file mode 100644 index f1a8ac4cc..000000000 --- a/db/routines/vn/functions/getAlert3StateTest.sql +++ /dev/null @@ -1,40 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`getAlert3StateTest`(vTicket INT) - RETURNS varchar(45) CHARSET latin1 COLLATE latin1_swedish_ci - NOT DETERMINISTIC - READS SQL DATA -BEGIN - DECLARE vDeliveryType INTEGER DEFAULT 0; - DECLARE isWaitingForPickUp BOOLEAN DEFAULT FALSE; - DECLARE vCode VARCHAR(45); - - SELECT - a.Vista - INTO vDeliveryType - FROM ticket t - JOIN vn2008.Agencias a ON a.Id_Agencia = t.agencyModeFk - WHERE t.id = vTicket; - - CASE vDeliveryType - WHEN 1 THEN -- AGENCIAS - SET vCode = 'DELIVERED'; - - WHEN 2 THEN -- REPARTO - SET vCode = 'ON_DELIVERY'; - - ELSE -- MERCADO, OTROS - SELECT t.warehouseFk <> w.warehouse_id INTO isWaitingForPickUp - FROM ticket t - LEFT JOIN vn2008.warehouse_pickup w - ON w.agency_id = t.agencyModeFk AND w.warehouse_id = t.warehouseFk - WHERE t.id = vTicket; - - IF isWaitingForPickUp THEN - SET vCode = 'WAITING_FOR_PICKUP'; - ELSE - SET vCode = 'DELIVERED'; - END IF; - END CASE; - RETURN vCode; -END$$ -DELIMITER ; diff --git a/db/routines/vn/functions/ticketPositionInPath.sql b/db/routines/vn/functions/ticketPositionInPath.sql index 9a3bb4a0e..5e75d868d 100644 --- a/db/routines/vn/functions/ticketPositionInPath.sql +++ b/db/routines/vn/functions/ticketPositionInPath.sql @@ -26,11 +26,11 @@ SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0) LEFT JOIN ticketState ts on ts.ticketFk = t.id WHERE t.id = vTicketId; -SELECT (ag.`name` = 'VN_VALENCIA') +SELECT (a.`name` = 'VN_VALENCIA') INTO vIsValenciaPath FROM `route` r - JOIN vn2008.Agencias a on a.Id_Agencia = r.agencyModeFk - JOIN vn2008.agency ag on ag.agency_id = a.agency_id + JOIN agencyMode am on am.id = r.agencyModeFk + JOIN agency a on a.id = am.agencyFk WHERE r.id = vMyPath; IF vIsValenciaPath THEN -- Rutas Valencia diff --git a/db/routines/vn/functions/ticketSplitCounter.sql b/db/routines/vn/functions/ticketSplitCounter.sql index a04c4f8a9..e82c079ae 100644 --- a/db/routines/vn/functions/ticketSplitCounter.sql +++ b/db/routines/vn/functions/ticketSplitCounter.sql @@ -9,9 +9,9 @@ BEGIN SELECT CONCAT(printedStickers,'/',Total, IF(printedStickers = Total ,' LS','')) INTO vSplitCounter FROM ( - SELECT count(l.Id_Movimiento) as printedStickers, COUNT(*) as Total - FROM vn.sale s - LEFT JOIN vn2008.movement_label l ON l.Id_Movimiento = s.id + SELECT count(sl.saleFk) as printedStickers, COUNT(*) as Total + FROM sale s + LEFT JOIN saleLabel sl ON sl.saleFk = s.id WHERE ticketFk = vTicketFk ) sub; 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/catalog_componentCalculate.sql b/db/routines/vn/procedures/catalog_componentCalculate.sql index 4b860103d..92fe233c5 100644 --- a/db/routines/vn/procedures/catalog_componentCalculate.sql +++ b/db/routines/vn/procedures/catalog_componentCalculate.sql @@ -259,7 +259,7 @@ BEGIN JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk AND tcs.warehouseFk = tcc.warehouseFk WHERE IFNULL(tcs.classRate, 1) = 1 - AND NOT tcc.groupingMode = 'packing' + AND (tcc.groupingMode = 'grouping' OR tcc.groupingMode IS NULL) AND (tcc.packing > tcc.`grouping` OR tcc.groupingMode IS NULL) GROUP BY tcs.warehouseFk, tcs.itemFk; diff --git a/db/routines/vn/procedures/clean.sql b/db/routines/vn/procedures/clean.sql index ed1569935..36ef85834 100644 --- a/db/routines/vn/procedures/clean.sql +++ b/db/routines/vn/procedures/clean.sql @@ -131,7 +131,8 @@ BEGIN DELETE e FROM entry e - JOIN tEntryToDelete tmp ON tmp.id = e.id; + JOIN tEntryToDelete tmp ON tmp.id = e.id + WHERE NOT e.isBooked; -- borrar de route registros menores a 4 años CREATE OR REPLACE TEMPORARY TABLE tRouteToDelete diff --git a/db/routines/vn/procedures/collection_addItem.sql b/db/routines/vn/procedures/collection_addItem.sql index c19d88684..b5bc91c67 100644 --- a/db/routines/vn/procedures/collection_addItem.sql +++ b/db/routines/vn/procedures/collection_addItem.sql @@ -52,6 +52,10 @@ BEGIN SELECT LAST_INSERT_ID() INTO vSaleFk; + UPDATE sale + SET originalQuantity = 0 + WHERE id = vSaleFk; + CALL sale_calculateComponent(vSaleFk, NULL); END$$ DELIMITER ; diff --git a/db/routines/vn/procedures/collection_assign.sql b/db/routines/vn/procedures/collection_assign.sql index f6000e87d..196764c42 100644 --- a/db/routines/vn/procedures/collection_assign.sql +++ b/db/routines/vn/procedures/collection_assign.sql @@ -30,10 +30,9 @@ BEGIN -- Si hay colecciones sin terminar, sale del proceso CALL collection_get(vUserFk); - SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0 - INTO vHasTooMuchCollections - FROM tCollection - JOIN productionConfig pc; + SELECT (pc.maxNotReadyCollections - COUNT(*)) <= 0 INTO vHasTooMuchCollections + FROM productionConfig pc + LEFT JOIN tCollection ON TRUE; DROP TEMPORARY TABLE tCollection; @@ -47,7 +46,7 @@ BEGIN WHERE workerFk = vUserFk; SET vLockName = CONCAT_WS('/', - 'collection_assign', + vLockName, vWarehouseFk, vItemPackingTypeFk ); diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql index f3767ddf3..8a1eff4a1 100644 --- a/db/routines/vn/procedures/collection_new.sql +++ b/db/routines/vn/procedures/collection_new.sql @@ -63,7 +63,8 @@ BEGIN o.numberOfWagons, o.trainFk, o.linesLimit, - o.volumeLimit + o.volumeLimit, + pc.collection_new_lockname INTO vMaxTickets, vHasUniqueCollectionTime, vWorkerCode, @@ -73,14 +74,15 @@ BEGIN vWagons, vTrainFk, vLinesLimit, - vVolumeLimit + vVolumeLimit, + vLockName FROM productionConfig pc JOIN worker w ON w.id = vUserFk JOIN state st ON st.`code` = 'ON_PREPARATION' JOIN operator o ON o.workerFk = vUserFk; SET vLockName = CONCAT_WS('/', - 'collection_new', + vLockName, vWarehouseFk, vItemPackingTypeFk ); diff --git a/db/routines/vn/procedures/duaInvoiceInBooking.sql b/db/routines/vn/procedures/duaInvoiceInBooking.sql index f95e836b1..981f3026d 100644 --- a/db/routines/vn/procedures/duaInvoiceInBooking.sql +++ b/db/routines/vn/procedures/duaInvoiceInBooking.sql @@ -28,11 +28,10 @@ BEGIN JOIN entry e ON e.invoiceInFk = ii.id JOIN duaEntry de ON de.entryFk = e.id JOIN dua d ON d.id = de.duaFk - SET ii.isBooked = TRUE, - ii.booked = IFNULL(ii.booked,d.booked), - ii.operated = IFNULL(ii.operated,d.operated), - ii.issued = IFNULL(ii.issued,d.issued), - ii.bookEntried = IFNULL(ii.bookEntried,d.bookEntried), + SET ii.booked = IFNULL(ii.booked, d.booked), + ii.operated = IFNULL(ii.operated, d.operated), + ii.issued = IFNULL(ii.issued, d.issued), + ii.bookEntried = IFNULL(ii.bookEntried, d.bookEntried), e.isBooked = TRUE, e.isConfirmed = TRUE WHERE d.id = vDuaFk; @@ -71,5 +70,9 @@ BEGIN SET ASIEN = vASIEN WHERE id = vDuaFk; + UPDATE invoiceIn ii + JOIN duaInvoiceIn dii ON dii.invoiceInFk = ii.id + SET ii.isBooked = TRUE + WHERE dii.duaFk = vDuaFk; END$$ DELIMITER ; 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/fv_pca.sql b/db/routines/vn/procedures/fv_pca.sql deleted file mode 100644 index b8e7343ef..000000000 --- a/db/routines/vn/procedures/fv_pca.sql +++ /dev/null @@ -1,101 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`fv_pca`() -BEGIN - -DECLARE done INT DEFAULT FALSE; - -DECLARE vTicketFk INT; -DECLARE vSaleFk INT; -DECLARE vClonTicket INT DEFAULT 0; - -DECLARE cur1 CURSOR FOR -SELECT s.ticketFk, s.id - FROM vn.sale s - JOIN vn.ticket t ON t.id = s.ticketFk - JOIN vn.item i ON i.id = s.itemFk - JOIN vn.itemType it ON it.id = i.typeFk - WHERE t.shipped BETWEEN '2020-10-18' AND '2020-10-31' - AND it.code IN ('ANT','ANS','ORQ','TRO') - and t.warehouseFk = 1; - -DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; - -OPEN cur1; - -FETCH cur1 INTO vTicketFk, vSaleFk; - - WHILE done = 0 DO - - SELECT t.id INTO vClonTicket - FROM vn.ticket t - JOIN (SELECT addressFk, shipped FROM vn.ticket WHERE id = vTicketFk) sub USING(addressFk, shipped) - WHERE t.warehouseFk = 44 - LIMIT 1; - - SELECT vTicketFk, vClonTicket; - - IF vClonTicket = 0 THEN - - INSERT INTO ticket ( - clientFk, - shipped, - addressFk, - agencyModeFk, - nickname, - warehouseFk, - companyFk, - landed, - zoneFk, - zonePrice, - zoneBonus, - routeFk - ) - SELECT - clientFk, - shipped, - addressFk, - agencyModeFk, - nickname, - 44, - companyFk, - landed, - zoneFk, - zonePrice, - zoneBonus, - routeFk - - FROM ticket - WHERE id = vTicketFk; - - SET vClonTicket = LAST_INSERT_ID(); - - SELECT 'lstID', vClonTicket; - /* - INSERT INTO ticketObservation(ticketFk, observationTypeFk, description) - SELECT vTicketFk, ao.observationTypeFk, ao.description - FROM addressObservation ao - JOIN ticket t ON t.addressFk = ao.addressFk - WHERE t.id = vClonTicket; -*/ - INSERT INTO ticketLog - SET originFk = vTicketFk, userFk = account.myUser_getId(), `action` = 'insert', - description = CONCAT('Ha creado el ticket:', ' ', vClonTicket, ' clonando el ', vTicketFk); - - END IF; - - UPDATE vn.sale - SET ticketFk = vClonTicket - WHERE id = vSaleFk; - - SET vClonTicket = 0; - - SET done = 0; - FETCH cur1 INTO vTicketFk, vSaleFk; - - END WHILE; - - CLOSE cur1; - - -END$$ -DELIMITER ; diff --git a/db/routines/vn/procedures/inventoryMake.sql b/db/routines/vn/procedures/inventoryMake.sql index b7ea377d2..30bea6690 100644 --- a/db/routines/vn/procedures/inventoryMake.sql +++ b/db/routines/vn/procedures/inventoryMake.sql @@ -21,7 +21,7 @@ BEGIN SELECT id FROM warehouse WHERE isInventory; - + DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; @@ -38,18 +38,18 @@ BEGIN INTO vMaxRecentInventories, vWarehouseOutFkInventory, vAgencyModeFkInventory - FROM inventoryConfig + FROM inventoryConfig LIMIT 1; - IF vDateLastInventory IS NULL + IF vDateLastInventory IS NULL OR vInventorySupplierFk IS NULL - OR vMaxRecentInventories IS NULL - OR vInventoryDate IS NULL + OR vMaxRecentInventories IS NULL + OR vInventoryDate IS NULL OR vWarehouseOutFkInventory IS NULL OR vAgencyModeFkInventory IS NULL THEN CALL util.throw('Some config parameters are not set'); END IF; - + START TRANSACTION; OPEN cWarehouses; @@ -77,7 +77,7 @@ BEGIN LIMIT 1; IF vTravelFk IS NULL THEN - INSERT INTO travel + INSERT INTO travel SET warehouseOutFk = vWarehouseOutFkInventory, warehouseInFk = vWarehouseFk, shipped = vInventoryDate, @@ -94,15 +94,16 @@ BEGIN SELECT id INTO vEntryFk FROM entry WHERE supplierFk = vInventorySupplierFk - AND travelFk = vTravelFk; + AND travelFk = vTravelFk + AND typeFk = 'inventory'; IF vEntryFk IS NULL THEN - INSERT INTO entry + INSERT INTO entry SET supplierFk = vInventorySupplierFk, isConfirmed = TRUE, isOrdered = TRUE, - travelFk = vTravelFk; - + travelFk = vTravelFk, + typeFk = 'inventory'; SELECT LAST_INSERT_ID() INTO vEntryFk; ELSE DELETE FROM buy WHERE entryFk = vEntryFk; @@ -224,15 +225,15 @@ BEGIN JOIN tInventory i2 ON i2.itemFk = i.id SET i.lastUsed = NOW() WHERE i2.quantity; - + DROP TEMPORARY TABLE tInventory; END LOOP; - + CLOSE cWarehouses; UPDATE config SET inventoried = vInventoryDate; - + CREATE OR REPLACE TEMPORARY TABLE tEntryToDelete (INDEX(entryId)) ENGINE = MEMORY SELECT e.id entryId, @@ -252,7 +253,7 @@ BEGIN WHERE e.supplierFk = vInventorySupplierFk AND t.shipped IN (sub.shipped); - DELETE e + DELETE e FROM `entry` e JOIN tEntryToDelete tmp ON tmp.entryId = e.id; diff --git a/db/routines/vn/procedures/invoiceInTax_afterUpsert.sql b/db/routines/vn/procedures/invoiceInTax_afterUpsert.sql index 43d54c28c..60ec34696 100644 --- a/db/routines/vn/procedures/invoiceInTax_afterUpsert.sql +++ b/db/routines/vn/procedures/invoiceInTax_afterUpsert.sql @@ -10,8 +10,6 @@ BEGIN DECLARE vLines INT; DECLARE vHasDistinctTransactions INT; - CALL invoiceIn_checkBooked(vInvoiceInFk); - SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig; SELECT COUNT(*) INTO vLines diff --git a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql index 631b8f31c..b64996a66 100644 --- a/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql +++ b/db/routines/vn/procedures/invoiceInTax_getFromEntries.sql @@ -5,8 +5,6 @@ BEGIN DECLARE vDated DATE; DECLARE vExpenseFk VARCHAR(10); - CALL invoiceIn_checkBooked(vInvoiceInFk); - SELECT MAX(rr.dated) INTO vDated FROM referenceRate rr JOIN invoiceIn ii ON ii.id = vInvoiceInFk diff --git a/db/routines/vn/procedures/itemShelvingProblem.sql b/db/routines/vn/procedures/itemShelvingProblem.sql index 01d9d6b5a..aed7572ee 100644 --- a/db/routines/vn/procedures/itemShelvingProblem.sql +++ b/db/routines/vn/procedures/itemShelvingProblem.sql @@ -20,17 +20,17 @@ BEGIN GREATEST(0,iss.visible - IFNULL(sub3.transit,0)) as Altillo, s.id as saleFk, IFNULL(sub3.transit,0) transit, - v.visible, s.isPicked, s.reserved, t.shipped, tst.productionOrder, mm.Id_Movimiento - FROM vn.ticket t - JOIN vn.ticketState tst ON tst.ticketFk = t.id - JOIN vn.sale s ON s.ticketFk = t.id - JOIN vn.item i ON i.id = s.itemFk + v.visible, s.isPicked, s.reserved, t.shipped, tst.productionOrder, st.saleFk + FROM ticket t + JOIN ticketState tst ON tst.ticketFk = t.id + JOIN sale s ON s.ticketFk = t.id + JOIN item i ON i.id = s.itemFk JOIN cache.visible v ON s.itemFk = v.item_id AND v.calc_id = vVisibleCache - LEFT JOIN vn2008.Movimientos_mark mm ON mm.Id_Movimiento = s.id AND mm.stateFk = 26 - JOIN vn.itemShelvingStock iss ON iss.itemFk = v.item_id + LEFT JOIN saleTracking st ON st.saleFk = s.id AND st.stateFk = 26 + JOIN itemShelvingStock iss ON iss.itemFk = v.item_id LEFT JOIN (SELECT itemFk, sum(saldo) as transit - FROM vn.itemPlacementSupplyList + FROM itemPlacementSupplyList WHERE saldo > 0 AND sectorFk = vSectorFk GROUP BY itemFk) sub3 ON sub3.itemFk = i.id @@ -42,7 +42,7 @@ BEGIN AND tst.isPreviousPreparable = TRUE AND t.warehouseFk = vWarehouseFk AND iss.sectorFk = vSectorFk - AND mm.Id_Movimiento IS NULL + AND st.saleFk IS NULL ORDER BY itemFk; END$$ diff --git a/db/routines/vn/procedures/itemShelving_add.sql b/db/routines/vn/procedures/itemShelving_add.sql index d4c31f09e..0dc7f3098 100644 --- a/db/routines/vn/procedures/itemShelving_add.sql +++ b/db/routines/vn/procedures/itemShelving_add.sql @@ -1,7 +1,7 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT) BEGIN - + /** * Añade registro o lo actualiza si ya existe. @@ -13,34 +13,24 @@ BEGIN * @param vGrouping el grouping del producto en itemShelving, NULL para coger el de la ultima compra * @param vPacking el packing del producto, NULL para coger el de la ultima compra * @param vWarehouseFk indica el sector - * + * **/ DECLARE vItemFk INT; SELECT barcodeToItem(vBarcode) INTO vItemFk; - + SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1)); SET vQuantity = vQuantity * vPacking; - IF (SELECT COUNT(*) FROM shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN - - INSERT IGNORE INTO parking(code) VALUES(vShelvingFk); - INSERT INTO shelving(code, parkingFk) - SELECT vShelvingFk, id - FROM parking - WHERE `code` = vShelvingFk COLLATE utf8_unicode_ci; - - END IF; - - IF (SELECT COUNT(*) FROM itemShelving - WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk - AND itemFk = vItemFk + IF (SELECT COUNT(*) FROM itemShelving + WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk + AND itemFk = vItemFk AND packing = vPacking) = 1 THEN UPDATE itemShelving SET visible = visible+vQuantity - WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking; + WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking; ELSE CALL cache.last_buy_refresh(FALSE); diff --git a/db/routines/vn/procedures/item_cleanFloramondo.sql b/db/routines/vn/procedures/item_cleanFloramondo.sql index cae06ee54..080c61b5b 100644 --- a/db/routines/vn/procedures/item_cleanFloramondo.sql +++ b/db/routines/vn/procedures/item_cleanFloramondo.sql @@ -101,9 +101,6 @@ BEGIN DELETE FROM itemCost WHERE itemFk = vItemOld; - DELETE FROM vn2008.rec_translator - WHERE Id_Article = vItemOld; - DELETE FROM bs.waste WHERE itemFk = vItemOld; diff --git a/db/routines/vn/procedures/item_getBalance.sql b/db/routines/vn/procedures/item_getBalance.sql index 95596d3bc..88583cf00 100644 --- a/db/routines/vn/procedures/item_getBalance.sql +++ b/db/routines/vn/procedures/item_getBalance.sql @@ -155,30 +155,31 @@ 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 + SELECT IFNULL(SUM(IFNULL(`in`, 0)) - SUM(IFNULL(`out`, 0)), 0) INTO @a FROM tItemDiary WHERE shipped < vDate; @@ -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 6f275de86..b0f3ca40e 100644 --- a/db/routines/vn/procedures/item_getSimilar.sql +++ b/db/routines/vn/procedures/item_getSimilar.sql @@ -21,9 +21,6 @@ BEGIN CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vDated); - -- Añadido temporalmente para ver si ya no sucede el cuelgue de db - SET vShowType = TRUE; - WITH itemTags AS ( SELECT i.id, typeFk, @@ -82,7 +79,7 @@ BEGIN AND iss.warehouseFk = vWarehouseFk JOIN itemTags its WHERE a.available > 0 - AND IF(vShowType, i.typeFk = its.typeFk, TRUE) + AND (i.typeFk = its.typeFk OR NOT vShowType) AND i.id <> vSelf ORDER BY `counter` DESC, (t.name = its.name) DESC, diff --git a/db/routines/vn/procedures/packingListPrinted.sql b/db/routines/vn/procedures/packingListPrinted.sql deleted file mode 100644 index 473ead5be..000000000 --- a/db/routines/vn/procedures/packingListPrinted.sql +++ /dev/null @@ -1,13 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`packingListPrinted`(ticketFk INT) -BEGIN - - UPDATE vn2008.Movimientos_mark mm - JOIN vn2008.Movimientos m ON m.Id_Movimiento = mm.Id_Movimiento - SET mm.valor = 2 -- Impreso - WHERE mm.valor = 1 -- Listo para imprimir - AND mm.stateFk = 9 -- Encajando - AND m.Id_Ticket = ticketFk; - -END$$ -DELIMITER ; diff --git a/db/routines/vn/procedures/packingListSwitch.sql b/db/routines/vn/procedures/packingListSwitch.sql index 65384827c..0883a7b6d 100644 --- a/db/routines/vn/procedures/packingListSwitch.sql +++ b/db/routines/vn/procedures/packingListSwitch.sql @@ -5,14 +5,14 @@ BEGIN DECLARE valueFk INT; DECLARE encajando INT DEFAULT 9; - SELECT valor INTO valueFk - FROM vn2008.Movimientos_mark - WHERE Id_Movimiento = saleFk + SELECT isChecked INTO valueFk + FROM saleTracking + WHERE saleFk = saleFk AND stateFk = encajando; SET valueFk = (IFNULL(valueFk,0) + 1) MOD 3; - REPLACE vn2008.Movimientos_mark(Id_Movimiento, valor, Id_Trabajador, stateFk) + REPLACE saleTracking(saleFk, isChecked, workerFk, stateFk) VALUES(saleFk,valueFk,account.myUser_getId(),encajando); 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/sale_replaceItem.sql b/db/routines/vn/procedures/sale_replaceItem.sql index 056397274..a4aefc088 100644 --- a/db/routines/vn/procedures/sale_replaceItem.sql +++ b/db/routines/vn/procedures/sale_replaceItem.sql @@ -79,6 +79,10 @@ BEGIN ORDER BY (vQuantity % `grouping`) ASC LIMIT 1; + IF vNewPrice IS NULL THEN + CALL util.throw('price retrieval failed'); + END IF; + IF vNewPrice > vOldPrice THEN SET vFinalPrice = vOldPrice; SET vOption = 'substitution'; @@ -90,7 +94,8 @@ BEGIN START TRANSACTION; UPDATE sale - SET quantity = quantity - vQuantity + SET originalQuantity = quantity - vQuantity, + quantity = quantity - vQuantity WHERE id = vSaleFk; INSERT INTO vn.sale(ticketFk, @@ -100,7 +105,8 @@ BEGIN price) SELECT vTicketFk, vNewItemFk, - CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ', i.name), + CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, + CONCAT('+ ', i.name), vFinalPrice FROM vn.item i WHERE id = vNewItemFk; 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/ticketRequest_Add.sql b/db/routines/vn/procedures/ticketRequest_Add.sql deleted file mode 100644 index 5ba347fef..000000000 --- a/db/routines/vn/procedures/ticketRequest_Add.sql +++ /dev/null @@ -1,19 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketRequest_Add`(vDescription VARCHAR(255), vQuantity INT, vPrice DOUBLE, vTicketFk INT, vBuyerCode VARCHAR(3)) -BEGIN - - INSERT INTO vn.ticketRequest(description, - quantity, - price, - ticketFk, - buyerCode, - requesterFk) - VALUES(vDescription, - vQuantity, - vPrice, - vTicketFk, - vBuyerCode, - vn.getUser()); - -END$$ -DELIMITER ; 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_close.sql b/db/routines/vn/procedures/ticket_close.sql index 91e0979cd..47d748ddf 100644 --- a/db/routines/vn/procedures/ticket_close.sql +++ b/db/routines/vn/procedures/ticket_close.sql @@ -63,7 +63,7 @@ BEGIN INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity) (SELECT vCurTicketFk, p.id, COUNT(*) FROM expedition e - JOIN packaging p ON p.itemFk = e.freightItemFk + JOIN packaging p ON p.id = e.packagingFk WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable AND vWithPackage GROUP BY p.itemFk); diff --git a/db/routines/vn/procedures/ticket_doCmr.sql b/db/routines/vn/procedures/ticket_doCmr.sql index 61d8da5f9..2da8464b4 100644 --- a/db/routines/vn/procedures/ticket_doCmr.sql +++ b/db/routines/vn/procedures/ticket_doCmr.sql @@ -7,7 +7,7 @@ BEGIN * * @param vSelf El id del ticket */ - DECLARE vCmrFk, vPreviousCmrFk, vCurrentCmrFk INT; + DECLARE vCmrFk INT; SELECT cmrFk INTO vCmrFk FROM ticket WHERE id = vSelf; @@ -44,8 +44,6 @@ BEGIN AND t.id = vSelf GROUP BY t.id; - START TRANSACTION; - IF vCmrFk THEN UPDATE cmr c JOIN tTicket t @@ -57,9 +55,7 @@ BEGIN c.supplierFk = t.supplierFk, c.ead = t.landed WHERE id = vCmrFk; - ELSE - SELECT MAX(id) INTO vPreviousCmrFk FROM cmr; - + ELSE INSERT INTO cmr ( senderInstruccions, truckPlate, @@ -70,17 +66,14 @@ BEGIN ead ) SELECT * FROM tTicket; - - SELECT MAX(id) INTO vCurrentCmrFk FROM cmr; - IF vPreviousCmrFk <> vCurrentCmrFk THEN + IF (SELECT EXISTS(SELECT * FROM tTicket)) THEN UPDATE ticket - SET cmrFk = vCurrentCmrFk + SET cmrFk = LAST_INSERT_ID() WHERE id = vSelf; END IF; END IF; - COMMIT; DROP TEMPORARY TABLE tTicket; 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/procedures/workerTimeControl_direction.sql b/db/routines/vn/procedures/workerTimeControl_direction.sql index ce44b9703..f7a68e1e4 100644 --- a/db/routines/vn/procedures/workerTimeControl_direction.sql +++ b/db/routines/vn/procedures/workerTimeControl_direction.sql @@ -26,7 +26,7 @@ BEGIN FROM workerTimeControl WHERE userFk = vWorkerFk AND direction = 'middle' - AND timed BETWEEN vLastIn AND util.VN_NOW(); + AND timed BETWEEN vLastIn AND vTimed; DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlDirection; CREATE TEMPORARY TABLE tmp.workerTimeControlDirection 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/entry_beforeUpdate.sql b/db/routines/vn/triggers/entry_beforeUpdate.sql index 98ebe1364..d56db5e01 100644 --- a/db/routines/vn/triggers/entry_beforeUpdate.sql +++ b/db/routines/vn/triggers/entry_beforeUpdate.sql @@ -6,9 +6,19 @@ BEGIN DECLARE vIsVirtual BOOL; DECLARE vPrintedCount INT; DECLARE vHasDistinctWarehouses BOOL; + DECLARE vTotalBuy INT; IF NEW.isBooked = OLD.isBooked THEN CALL entry_checkBooked(OLD.id); + ELSE + IF NEW.isBooked THEN + SELECT COUNT(*) INTO vTotalBuy + FROM buy + WHERE entryFk = NEW.id; + IF NOT vTotalBuy THEN + CALL util.throw('Entry must have lines to be marked booked'); + END IF; + END IF; END IF; SET NEW.editorFk = account.myUser_getId(); @@ -16,7 +26,7 @@ BEGIN IF NOT (NEW.travelFk <=> OLD.travelFk) THEN IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN - CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries'); + CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries'); END IF; SELECT COUNT(*) > 0 INTO vIsVirtual diff --git a/db/routines/vn/triggers/invoiceInCorrection_beforeDelete.sql b/db/routines/vn/triggers/invoiceInCorrection_beforeDelete.sql deleted file mode 100644 index f4df48dcd..000000000 --- a/db/routines/vn/triggers/invoiceInCorrection_beforeDelete.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeDelete` - BEFORE DELETE ON `invoiceInCorrection` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.correctingFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInCorrection_beforeInsert.sql b/db/routines/vn/triggers/invoiceInCorrection_beforeInsert.sql deleted file mode 100644 index aec58a265..000000000 --- a/db/routines/vn/triggers/invoiceInCorrection_beforeInsert.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeInsert` - BEFORE INSERT ON `invoiceInCorrection` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(NEW.correctingFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInCorrection_beforeUpdate.sql b/db/routines/vn/triggers/invoiceInCorrection_beforeUpdate.sql deleted file mode 100644 index bd324863b..000000000 --- a/db/routines/vn/triggers/invoiceInCorrection_beforeUpdate.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeUpdate` - BEFORE UPDATE ON `invoiceInCorrection` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.correctingFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInDueDay_beforeDelete.sql b/db/routines/vn/triggers/invoiceInDueDay_beforeDelete.sql deleted file mode 100644 index 10c9d0b52..000000000 --- a/db/routines/vn/triggers/invoiceInDueDay_beforeDelete.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_beforeDelete` - BEFORE DELETE ON `invoiceInDueDay` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.invoiceInFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInDueDay_beforeInsert.sql b/db/routines/vn/triggers/invoiceInDueDay_beforeInsert.sql index 95b227616..f7e4265a7 100644 --- a/db/routines/vn/triggers/invoiceInDueDay_beforeInsert.sql +++ b/db/routines/vn/triggers/invoiceInDueDay_beforeInsert.sql @@ -5,8 +5,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_befor BEGIN DECLARE vIsNotified BOOLEAN; - CALL invoiceIn_checkBooked(NEW.invoiceInFk); - SET NEW.editorFk = account.myUser_getId(); SELECT isNotified INTO vIsNotified diff --git a/db/routines/vn/triggers/invoiceInDueDay_beforeUpdate.sql b/db/routines/vn/triggers/invoiceInDueDay_beforeUpdate.sql index 5d58ef28b..2452ff0d1 100644 --- a/db/routines/vn/triggers/invoiceInDueDay_beforeUpdate.sql +++ b/db/routines/vn/triggers/invoiceInDueDay_beforeUpdate.sql @@ -5,7 +5,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_befor BEGIN DECLARE vIsNotified BOOLEAN; - CALL invoiceIn_checkBooked(OLD.invoiceInFk); SET NEW.editorFk = account.myUser_getId(); SELECT isNotified INTO vIsNotified diff --git a/db/routines/vn/triggers/invoiceInIntrastat_beforeDelete.sql b/db/routines/vn/triggers/invoiceInIntrastat_beforeDelete.sql deleted file mode 100644 index 412b091f4..000000000 --- a/db/routines/vn/triggers/invoiceInIntrastat_beforeDelete.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeDelete` - BEFORE DELETE ON `invoiceInIntrastat` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.invoiceInFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInIntrastat_beforeInsert.sql b/db/routines/vn/triggers/invoiceInIntrastat_beforeInsert.sql deleted file mode 100644 index d6c25c505..000000000 --- a/db/routines/vn/triggers/invoiceInIntrastat_beforeInsert.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeInsert` - BEFORE INSERT ON `invoiceInIntrastat` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(NEW.invoiceInFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInIntrastat_beforeUpdate.sql b/db/routines/vn/triggers/invoiceInIntrastat_beforeUpdate.sql deleted file mode 100644 index 649c9ef30..000000000 --- a/db/routines/vn/triggers/invoiceInIntrastat_beforeUpdate.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeUpdate` - BEFORE UPDATE ON `invoiceInIntrastat` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.invoiceInFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInTax_beforeDelete.sql b/db/routines/vn/triggers/invoiceInTax_beforeDelete.sql deleted file mode 100644 index a43f602b4..000000000 --- a/db/routines/vn/triggers/invoiceInTax_beforeDelete.sql +++ /dev/null @@ -1,8 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInTax_beforeDelete` - BEFORE DELETE ON `invoiceInTax` - FOR EACH ROW -BEGIN - CALL invoiceIn_checkBooked(OLD.invoiceInFk); -END$$ -DELIMITER ; diff --git a/db/routines/vn/triggers/invoiceInTax_beforeUpdate.sql b/db/routines/vn/triggers/invoiceInTax_beforeUpdate.sql index 3e5ecf030..30918b7c5 100644 --- a/db/routines/vn/triggers/invoiceInTax_beforeUpdate.sql +++ b/db/routines/vn/triggers/invoiceInTax_beforeUpdate.sql @@ -3,8 +3,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInTax_beforeUp BEFORE UPDATE ON `invoiceInTax` FOR EACH ROW BEGIN - CALL invoiceIn_checkBooked(OLD.invoiceInFk); - IF NOT (NEW.invoiceInFk <=> OLD.invoiceInFk) THEN CALL invoiceInTax_afterUpsert(NEW.invoiceInFk); END IF; diff --git a/db/routines/vn/triggers/invoiceIn_beforeUpdate.sql b/db/routines/vn/triggers/invoiceIn_beforeUpdate.sql index d0762de96..4503c7dbd 100644 --- a/db/routines/vn/triggers/invoiceIn_beforeUpdate.sql +++ b/db/routines/vn/triggers/invoiceIn_beforeUpdate.sql @@ -5,10 +5,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_beforeUpdat BEGIN DECLARE vWithholdingSageFk INT; - IF NEW.isBooked = OLD.isBooked THEN - CALL invoiceIn_checkBooked(OLD.id); - END IF; - IF NOT (NEW.supplierRef <=> OLD.supplierRef) AND NOT util.checkPrintableChars(NEW.supplierRef) THEN CALL util.throw('The invoiceIn reference contains invalid characters'); END IF; 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/solunionCAP_afterInsert.sql b/db/routines/vn/triggers/solunionCAP_afterInsert.sql index 8524689a7..0d6e510ad 100644 --- a/db/routines/vn/triggers/solunionCAP_afterInsert.sql +++ b/db/routines/vn/triggers/solunionCAP_afterInsert.sql @@ -3,8 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_afterInse AFTER INSERT ON `solunionCAP` FOR EACH ROW BEGIN - UPDATE vn2008.Clientes c - JOIN creditClassification cc ON c.Id_Cliente = cc.client + UPDATE client c + JOIN creditClassification cc ON cc.client = c.id JOIN creditInsurance ci ON ci.creditClassification = cc.id SET creditInsurance = ci.credit * 2 WHERE ci.id = NEW.creditInsurance; END$$ diff --git a/db/routines/vn/triggers/solunionCAP_afterUpdate.sql b/db/routines/vn/triggers/solunionCAP_afterUpdate.sql index 688241515..40ff57f35 100644 --- a/db/routines/vn/triggers/solunionCAP_afterUpdate.sql +++ b/db/routines/vn/triggers/solunionCAP_afterUpdate.sql @@ -4,13 +4,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_afterUpda FOR EACH ROW BEGIN IF NEW.dateLeaving IS NOT NULL THEN - UPDATE vn2008.Clientes c - JOIN creditClassification cc ON c.Id_Cliente = cc.client + UPDATE client c + JOIN creditClassification cc ON cc.client = c.id JOIN creditInsurance ci ON ci.creditClassification = cc.id SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance; ELSE - UPDATE vn2008.Clientes c - JOIN creditClassification cc ON c.Id_Cliente = cc.client + UPDATE client c + JOIN creditClassification cc ON cc.client = c.id JOIN creditInsurance ci ON ci.creditClassification = cc.id SET creditInsurance = ci.credit * 2 WHERE ci.id = OLD.creditInsurance; END IF; diff --git a/db/routines/vn/triggers/solunionCAP_beforeDelete.sql b/db/routines/vn/triggers/solunionCAP_beforeDelete.sql index 85d65a949..29c4298fd 100644 --- a/db/routines/vn/triggers/solunionCAP_beforeDelete.sql +++ b/db/routines/vn/triggers/solunionCAP_beforeDelete.sql @@ -3,8 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`solunionCAP_beforeDel BEFORE DELETE ON `solunionCAP` FOR EACH ROW BEGIN - UPDATE vn2008.Clientes c - JOIN creditClassification cc ON c.Id_Cliente = cc.client + UPDATE client c + JOIN creditClassification cc ON cc.client = c.id JOIN creditInsurance ci ON ci.creditClassification = cc.id SET creditInsurance = ci.credit WHERE ci.id = OLD.creditInsurance; END$$ diff --git a/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql b/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql index a58955e0d..f47a7ae35 100644 --- a/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql +++ b/db/routines/vn/triggers/ticketPackaging_beforeInsert.sql @@ -4,7 +4,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketPackaging_befor FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); - SET NEW.workerFk = account.myUser_getId(); - END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/ticketRequest_beforeInsert.sql b/db/routines/vn/triggers/ticketRequest_beforeInsert.sql index d17459912..00e659abc 100644 --- a/db/routines/vn/triggers/ticketRequest_beforeInsert.sql +++ b/db/routines/vn/triggers/ticketRequest_beforeInsert.sql @@ -14,7 +14,7 @@ BEGIN END IF; IF NEW.attenderFk IS NULL THEN - SET NEW.attenderFk = (SELECT w.id FROM worker w WHERE w.code = NEW.buyerCode); + SET NEW.attenderFk = (SELECT defaultAttenderFk FROM ticketConfig LIMIT 1); END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql b/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql index e5e9c307e..954df8ed3 100644 --- a/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql +++ b/db/routines/vn/triggers/ticketRequest_beforeUpdate.sql @@ -12,9 +12,5 @@ BEGIN IF NEW.salesPersonCode <> OLD.salesPersonCode THEN SET NEW.requesterFk = (SELECT w.id FROM worker w WHERE w.code = NEW.salesPersonCode); END IF; - - IF NEW.buyerCode <> OLD.buyerCode THEN - SET NEW.attenderFk = (SELECT w.id FROM worker w WHERE w.code = NEW.buyerCode); - END IF; END$$ DELIMITER ; 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..0ce13e0a5 100644 --- a/db/routines/vn/triggers/ticket_afterUpdate.sql +++ b/db/routines/vn/triggers/ticket_afterUpdate.sql @@ -3,24 +3,12 @@ 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; + + CALL ticket_doCmr(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/especialPrice.sql b/db/routines/vn/views/especialPrice.sql index 08b9b434a..79d3e1384 100644 --- a/db/routines/vn/views/especialPrice.sql +++ b/db/routines/vn/views/especialPrice.sql @@ -1,8 +1,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn`.`especialPrice` -AS SELECT `p`.`Id_PrecioEspecial` AS `id`, - `p`.`Id_Cliente` AS `clientFk`, - `p`.`Id_Article` AS `itemFk`, - `p`.`PrecioEspecial` AS `value` -FROM `vn2008`.`PreciosEspeciales` `p` +AS SELECT `sp`.`id` AS `id`, + `sp`.`clientFk` AS `clientFk`, + `sp`.`itemFk` AS `itemFk`, + `sp`.`value` AS `value` +FROM `vn`.`specialPrice` `sp` diff --git a/db/routines/vn/views/exchangeInsurance.sql b/db/routines/vn/views/exchangeInsurance.sql deleted file mode 100644 index 5df3c2f1d..000000000 --- a/db/routines/vn/views/exchangeInsurance.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`exchangeInsurance` -AS SELECT `vn2008`.`pago_sdc`.`pago_sdc_id` AS `id`, - `vn2008`.`pago_sdc`.`importe` AS `amount`, - `vn2008`.`pago_sdc`.`fecha` AS `dated`, - `vn2008`.`pago_sdc`.`vencimiento` AS `finished`, - `vn2008`.`pago_sdc`.`entity_id` AS `entityFk`, - `vn2008`.`pago_sdc`.`ref` AS `ref`, - `vn2008`.`pago_sdc`.`rate` AS `rate`, - `vn2008`.`pago_sdc`.`empresa_id` AS `companyFk`, - `vn2008`.`pago_sdc`.`financialProductTypefk` AS `financialProductTypefk`, - `vn2008`.`pago_sdc`.`upperBarrier` AS `upperBarrier`, - `vn2008`.`pago_sdc`.`lowerBarrier` AS `lowerBarrier`, - `vn2008`.`pago_sdc`.`strike` AS `strike` -FROM `vn2008`.`pago_sdc` diff --git a/db/routines/vn/views/paymentExchangeInsurance.sql b/db/routines/vn/views/paymentExchangeInsurance.sql index 7128144ea..f3e07eaaf 100644 --- a/db/routines/vn/views/paymentExchangeInsurance.sql +++ b/db/routines/vn/views/paymentExchangeInsurance.sql @@ -1,16 +1,16 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn`.`paymentExchangeInsurance` -AS SELECT `p`.`pago_sdc_id` AS `id`, - `p`.`importe` AS `amount`, - `p`.`fecha` AS `created`, - `p`.`vencimiento` AS `dueDay`, - `p`.`entity_id` AS `entityFk`, - `p`.`ref` AS `ref`, - `p`.`rate` AS `rate`, - `p`.`empresa_id` AS `companyFk`, - `p`.`financialProductTypefk` AS `financialProductTypefk`, - `p`.`upperBarrier` AS `upperBarrier`, - `p`.`lowerBarrier` AS `lowerBarrier`, - `p`.`strike` AS `strike` -FROM `vn2008`.`pago_sdc` `p` +AS SELECT `ei`.`id` AS `pago_sdc_id`, + `ei`.`amount` AS `importe`, + `ei`.`dated` AS `fecha`, + `ei`.`dueDated` AS `vencimiento`, + `ei`.`entityFk` AS `entity_id`, + `ei`.`ref` AS `ref`, + `ei`.`rate` AS `rate`, + `ei`.`companyFk` AS `empresa_id`, + `ei`.`financialProductTypefk` AS `financialProductTypefk`, + `ei`.`upperBarrier` AS `upperBarrier`, + `ei`.`lowerBarrier` AS `lowerBarrier`, + `ei`.`strike` AS `strike` +FROM `vn`.`exchangeInsurance` `ei` diff --git a/db/routines/vn/views/promissoryNote.sql b/db/routines/vn/views/promissoryNote.sql deleted file mode 100644 index a9f047285..000000000 --- a/db/routines/vn/views/promissoryNote.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`promissoryNote` -AS SELECT `p`.`Id_Pagare` AS `id`, - `p`.`Concepto` AS `Concept`, - `p`.`pago_id` AS `paymentFk` -FROM `vn2008`.`Pagares` `p` diff --git a/db/routines/vn/views/saleLabel.sql b/db/routines/vn/views/saleLabel.sql deleted file mode 100644 index 4feae9294..000000000 --- a/db/routines/vn/views/saleLabel.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`saleLabel` -AS SELECT `ml`.`Id_movimiento` AS `saleFk`, - `ml`.`label` AS `label`, - `ml`.`stem` AS `stem`, - `ml`.`created` AS `created` -FROM `vn2008`.`movement_label` `ml` diff --git a/db/routines/vn/views/ticketMRW.sql b/db/routines/vn/views/ticketMRW.sql deleted file mode 100644 index 26b928ac4..000000000 --- a/db/routines/vn/views/ticketMRW.sql +++ /dev/null @@ -1,47 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`ticketMRW` -AS SELECT `ticket`.`agencyModeFk` AS `id_Agencia`, - `ticket`.`companyFk` AS `empresa_id`, - `Consignatarios`.`consignatario` AS `Consignatario`, - `Consignatarios`.`domicilio` AS `DOMICILIO`, - `Consignatarios`.`poblacion` AS `POBLACION`, - `Consignatarios`.`codPostal` AS `CODPOSTAL`, - `Consignatarios`.`telefono` AS `telefono`, - IFNULL( - IFNULL( - IFNULL( - IFNULL(`Consignatarios`.`movil`, `Clientes`.`movil`), - `Consignatarios`.`telefono` - ), - `Clientes`.`telefono` - ), - 0 - ) AS `movil`, - `Clientes`.`if` AS `IF`, - `ticket`.`id` AS `Id_Ticket`, - `ticket`.`warehouseFk` AS `warehouse_id`, - `Consignatarios`.`id_consigna` AS `Id_Consigna`, - `Paises`.`Codigo` AS `CodigoPais`, - `ticket`.`shipped` AS `Fecha`, - `province`.`province_id` AS `province_id`, - `ticket`.`landed` AS `landing` -FROM ( - ( - ( - ( - `vn2008`.`Clientes` - JOIN `vn2008`.`Consignatarios` ON( - `Clientes`.`id_cliente` = `Consignatarios`.`Id_cliente` - ) - ) - JOIN `vn`.`ticket` ON( - `Consignatarios`.`id_consigna` = `ticket`.`addressFk` - ) - ) - JOIN `vn2008`.`province` ON( - `Consignatarios`.`province_id` = `province`.`province_id` - ) - ) - JOIN `vn2008`.`Paises` ON(`province`.`Paises_Id` = `Paises`.`Id`) - ); diff --git a/db/routines/vn/views/ticketToPrepare.sql b/db/routines/vn/views/ticketToPrepare.sql deleted file mode 100644 index 98302b60d..000000000 --- a/db/routines/vn/views/ticketToPrepare.sql +++ /dev/null @@ -1,58 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`ticketToPrepare` -AS SELECT `m`.`Id_Ticket` AS `Id_Ticket`, - `mk`.`Id_Movimiento` AS `Id_Movimiento`, - `mk`.`Id_Movimiento_mark` AS `Id_Movimiento_mark`, - `mk`.`Id_Trabajador` AS `Id_Trabjador`, - `m`.`Id_Article` AS `Id_Article`, - `m`.`Concepte` AS `Concepte`, - `art`.`subName` AS `subName`, - `mk`.`original_quantity` - IFNULL(`is`.`quantity`, 0) AS `Cantidad`, - `mk`.`original_quantity` AS `original_quantity`, - IF( - HOUR(`t`.`shipped`), - HOUR(`t`.`shipped`), - HOUR(`z`.`hour`) - ) AS `Hora`, - HOUR(`t`.`shipped`) AS `Departure`, - MINUTE(`t`.`shipped`) AS `Minuto`, - `am`.`agencyFk` AS `agency_id`, - `t`.`warehouseFk` AS `warehouse_id`, - `a`.`provinceFk` AS `province_id`, - `is`.`quantity` AS `picked`, - `t`.`zoneFk` AS `zoneFk`, - `p`.`sectorFk` AS `sectorFk` -FROM ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - `vn2008`.`Movimientos_mark` `mk` - JOIN `vn2008`.`Movimientos` `m` ON(`m`.`Id_Movimiento` = `mk`.`Id_Movimiento`) - ) - JOIN `vn`.`ticket` `t` ON(`m`.`Id_Ticket` = `t`.`id`) - ) - JOIN `vn`.`agencyMode` `am` ON(`am`.`id` = `t`.`agencyModeFk`) - ) - JOIN `vn`.`address` `a` ON(`a`.`id` = `t`.`addressFk`) - ) - LEFT JOIN `vn`.`itemShelvingSale` `is` ON(`is`.`saleFk` = `mk`.`Id_Movimiento`) - ) - LEFT JOIN `vn`.`itemShelving` `ish` ON(`ish`.`id` = `is`.`itemShelvingFk`) - ) - LEFT JOIN `vn`.`shelving` `sh` ON(`sh`.`code` = `ish`.`shelvingFk`) - ) - LEFT JOIN `vn`.`parking` `p` ON(`p`.`id` = `sh`.`parkingFk`) - ) - LEFT JOIN `vn2008`.`Articles` `art` ON(`art`.`Id_Article` = `m`.`Id_Article`) - ) - LEFT JOIN `vn`.`zone` `z` ON(`z`.`id` = `t`.`zoneFk`) - ) -WHERE `mk`.`stateFk` = 26 - AND `mk`.`valor` <> 1 diff --git a/db/routines/vn/views/ticketeToPreparePrepared.sql b/db/routines/vn/views/ticketeToPreparePrepared.sql deleted file mode 100644 index 76e840816..000000000 --- a/db/routines/vn/views/ticketeToPreparePrepared.sql +++ /dev/null @@ -1,47 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn`.`ticketeToPreparePrepared` -AS SELECT `m`.`Id_Ticket` AS `Id_Ticket`, - `mk`.`Id_Movimiento` AS `Id_Movimiento`, - `mk`.`Id_Movimiento_mark` AS `Id_Movimiento_mark`, - `mk`.`Id_Trabajador` AS `Id_Trabjador`, - `m`.`Id_Article` AS `Id_Article`, - `m`.`Concepte` AS `Concepte`, - `art`.`subName` AS `subName`, - `mk`.`original_quantity` - IFNULL(`is`.`quantity`, 0) AS `Cantidad`, - `mk`.`original_quantity` AS `original_quantity`, - HOUR(`t`.`shipped`) AS `Hora`, - HOUR(`t`.`shipped`) AS `Departure`, - MINUTE(`t`.`shipped`) AS `Minuto`, - `am`.`agencyFk` AS `agency_id`, - `t`.`warehouseFk` AS `warehouse_id`, - `a`.`provinceFk` AS `province_id`, - `is`.`quantity` AS `picked`, - `t`.`CodigoTrabajador` AS `trabajador`, - `is`.`sectorFk` AS `sectorFk` -FROM ( - ( - ( - ( - ( - ( - ( - ( - `vn2008`.`Movimientos_mark` `mk` - JOIN `vn`.`state` `st` ON(`st`.`id` = `mk`.`stateFk`) - ) - JOIN `vn2008`.`Movimientos` `m` ON(`m`.`Id_Movimiento` = `mk`.`Id_Movimiento`) - ) - JOIN `vn`.`ticket` `t` ON(`m`.`Id_Ticket` = `t`.`id`) - ) - JOIN `vn`.`agencyMode` `am` ON(`am`.`id` = `t`.`agencyModeFk`) - ) - JOIN `vn`.`address` `a` ON(`a`.`id` = `t`.`addressFk`) - ) - LEFT JOIN `vn`.`itemShelvingSaleSum` `is` ON(`is`.`saleFk` = `mk`.`Id_Movimiento`) - ) - JOIN `vn2008`.`Articles` `art` ON(`art`.`Id_Article` = `m`.`Id_Article`) - ) - LEFT JOIN `vn2008`.`Trabajadores` `t` ON(`t`.`Id_Trabajador` = `mk`.`Id_Trabajador`) - ) -WHERE `st`.`code` LIKE 'PREVIOUS_PREPARATION' 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 42a7c51c9..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 inventoried INTO vDatedInventory FROM vn.config; - 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/Clientes.sql b/db/routines/vn2008/views/Clientes.sql index a696cb6e0..153d875bc 100644 --- a/db/routines/vn2008/views/Clientes.sql +++ b/db/routines/vn2008/views/Clientes.sql @@ -42,7 +42,6 @@ AS SELECT `c`.`id` AS `id_cliente`, `c`.`hasInvoiceSimplified` AS `hasInvoiceSimplified`, `c`.`salesPersonFk` AS `Id_Trabajador`, `c`.`isVies` AS `vies`, - `c`.`eypbc` AS `EYPBC`, `c`.`bankEntityFk` AS `bankEntityFk`, `c`.`typeFk` AS `typeFk` FROM `vn`.`client` `c` 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/10991-greenAsparagus/00-firstScript.sql b/db/versions/10991-greenAsparagus/00-firstScript.sql new file mode 100644 index 000000000..9cfc9e19d --- /dev/null +++ b/db/versions/10991-greenAsparagus/00-firstScript.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.productionConfig MODIFY COLUMN id INT(10) UNSIGNED FIRST; +ALTER TABLE vn.productionConfig ADD scannableCodeType enum('qr','barcode') DEFAULT 'barcode' NOT NULL; 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/11001-blackPalmetto/00-firstScript.sql b/db/versions/11001-blackPalmetto/00-firstScript.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db/versions/11002-limeCarnation/00-firstScript.sql b/db/versions/11002-limeCarnation/00-firstScript.sql new file mode 100644 index 000000000..b1a49a309 --- /dev/null +++ b/db/versions/11002-limeCarnation/00-firstScript.sql @@ -0,0 +1,7 @@ +-- Place your SQL code here +ALTER TABLE `vn`.`ticketRequest` + CHANGE IF EXISTS `buyerCode` `buyerCode__` varchar(3) NOT NULL COMMENT '@deprecated 2024-04-23 refs #6731 field not used'; + +ALTER TABLE `vn`.`ticketConfig` ADD COLUMN IF NOT EXISTS `defaultAttenderFk` int unsigned; + +ALTER TABLE vn.ticketConfig ADD CONSTRAINT ticketConfig_worker_FK FOREIGN KEY (defaultAttenderFk) REFERENCES vn.worker(id); 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/11008-orangeCarnation/00-alter.sql b/db/versions/11008-orangeCarnation/00-alter.sql new file mode 100644 index 000000000..951e2d916 --- /dev/null +++ b/db/versions/11008-orangeCarnation/00-alter.sql @@ -0,0 +1,7 @@ +ALTER TABLE vn.parking +ADD CONSTRAINT chkParkingCodeFormat CHECK (CHAR_LENGTH(code) > 4 AND code LIKE '%-%'); + +ALTER TABLE vn.parking MODIFY COLUMN sectorFk int(11) NOT NULL; + +ALTER TABLE vn.shelving +ADD CONSTRAINT chkShelvingCodeFormat CHECK (CHAR_LENGTH(code) <= 4 AND code NOT LIKE '%-%'); diff --git a/db/versions/11012-silverRuscus/00-firstScript.sql b/db/versions/11012-silverRuscus/00-firstScript.sql new file mode 100644 index 000000000..161960f6b --- /dev/null +++ b/db/versions/11012-silverRuscus/00-firstScript.sql @@ -0,0 +1,5 @@ +DROP TABLE cache.prod_graphic_source; +RENAME TABLE vn2008.unary TO vn2008.unary__; +ALTER TABLE vn2008.unary__ COMMENT='refs #7258 @deprecated 2023-12-13'; +RENAME TABLE vn2008.jerarquia TO vn2008.jerarquia__; +ALTER TABLE vn2008.jerarquia__ COMMENT='refs #7258 @deprecated 2023-12-13'; 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/db/versions/11016-pinkAralia/00-firstScript.sql b/db/versions/11016-pinkAralia/00-firstScript.sql new file mode 100644 index 000000000..de090013d --- /dev/null +++ b/db/versions/11016-pinkAralia/00-firstScript.sql @@ -0,0 +1,5 @@ +-- Place your SQL code here +ALTER TABLE vn.productionConfig ADD collectionNewLockname varchar(100) + DEFAULT 'collection_new' NOT NULL COMMENT 'Lockname value for proc vn.collection_new'; +ALTER TABLE vn.productionConfig ADD collectionAssignLockname varchar(100) + DEFAULT 'collection_assign' NULL COMMENT 'Lockname value for proc vn.collection_new'; diff --git a/db/versions/11018-crimsonBamboo/00-firstScript.sql b/db/versions/11018-crimsonBamboo/00-firstScript.sql new file mode 100644 index 000000000..1d0c8f0bd --- /dev/null +++ b/db/versions/11018-crimsonBamboo/00-firstScript.sql @@ -0,0 +1,3 @@ +-- Place your SQL code here +ALTER TABLE vn.productionConfig ADD collection_new_lockname varchar(100) DEFAULT 'collection_new' NOT NULL COMMENT 'Lockname value for proc vn.collection_new'; +ALTER TABLE vn.productionConfig ADD collection_assign_lockname varchar(100) DEFAULT 'collection_assign' NULL COMMENT 'Lockname value for proc vn.collection_new'; diff --git a/db/versions/11021-bronzeErica/00-firstScript.sql b/db/versions/11021-bronzeErica/00-firstScript.sql new file mode 100644 index 000000000..6f6b68d49 --- /dev/null +++ b/db/versions/11021-bronzeErica/00-firstScript.sql @@ -0,0 +1,13 @@ + + ALTER TABLE vn.productionConfig + DROP COLUMN IF EXISTS collectionNewLockname, + DROP COLUMN IF EXISTS collectionAssignLockname; + + DELIMITER $$ + CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`connection_kill`() + BEGIN + + END$$ + DELIMITER ; + + GRANT EXECUTE ON PROCEDURE util.connection_kill TO 'developer'; \ No newline at end of file diff --git a/db/versions/11026-brownAralia/00-entryAlter.sql b/db/versions/11026-brownAralia/00-entryAlter.sql new file mode 100644 index 000000000..26b3f727e --- /dev/null +++ b/db/versions/11026-brownAralia/00-entryAlter.sql @@ -0,0 +1 @@ +ALTER TABLE vn.entryType ADD isInformal TINYINT DEFAULT 0 NOT NULL; diff --git a/db/versions/11026-brownAralia/01-entryUpdate.sql b/db/versions/11026-brownAralia/01-entryUpdate.sql new file mode 100644 index 000000000..5454db45f --- /dev/null +++ b/db/versions/11026-brownAralia/01-entryUpdate.sql @@ -0,0 +1,3 @@ +UPDATE vn.entryType + SET description='Interna', code='internal' + WHERE code='supplies' diff --git a/db/versions/11026-brownAralia/02-entryInternal.sql b/db/versions/11026-brownAralia/02-entryInternal.sql new file mode 100644 index 000000000..77f0133e5 --- /dev/null +++ b/db/versions/11026-brownAralia/02-entryInternal.sql @@ -0,0 +1,3 @@ +UPDATE vn.entryType + SET isInformal = TRUE + WHERE code IN ('inventory', 'life', 'regularization', 'internal') diff --git a/db/versions/11029-tealAnthurium/00-firstScript.sql b/db/versions/11029-tealAnthurium/00-firstScript.sql new file mode 100644 index 000000000..b54e7a3b5 --- /dev/null +++ b/db/versions/11029-tealAnthurium/00-firstScript.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE vn.productionConfig ADD defaultSectorFk INT UNSIGNED DEFAULT 37 NOT NULL COMMENT 'Default sector'; diff --git a/db/versions/11030-salmonCyca/00-firstScript.sql b/db/versions/11030-salmonCyca/00-firstScript.sql new file mode 100644 index 000000000..72ccc9ae2 --- /dev/null +++ b/db/versions/11030-salmonCyca/00-firstScript.sql @@ -0,0 +1,10 @@ +-- Place your SQL code here +ALTER TABLE vn.absenceType ADD isFestiveEligible BOOL DEFAULT 1 NOT NULL COMMENT 'Para marcar un tipo de absence'; + +UPDATE vn.absenceType +SET isFestiveEligible = 0 +WHERE code = 'holiday'; + +UPDATE vn.absenceType + SET isFestiveEligible=0 + WHERE code = 'halfHoliday'; diff --git a/db/versions/11031-aquaPalmetto/00-firstScript.sql b/db/versions/11031-aquaPalmetto/00-firstScript.sql new file mode 100644 index 000000000..5ef37e8f0 --- /dev/null +++ b/db/versions/11031-aquaPalmetto/00-firstScript.sql @@ -0,0 +1,4 @@ + +UPDATE bs.nightTask + SET `procedure` = 'sales_addLauncher' + WHERE `procedure` = 'ventas_add_launcher'; \ No newline at end of file diff --git a/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql b/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql new file mode 100644 index 000000000..a01efe3fb --- /dev/null +++ b/db/versions/11033-aquaPaniculata/00-rollbackAcls.sql @@ -0,0 +1,9 @@ +DELETE FROM salix.ACL + WHERE model = 'Worker' + AND property = '__get__summary' + AND principalId = 'employee'; + +UPDATE salix.ACL SET principalId = 'employee' + WHERE model = 'Worker' + AND property IN ('find','findById','findOne') + AND principalId = 'hr'; diff --git a/db/versions/11037-redPhormium/00-firstScript.sql b/db/versions/11037-redPhormium/00-firstScript.sql new file mode 100644 index 000000000..fd09d31d9 --- /dev/null +++ b/db/versions/11037-redPhormium/00-firstScript.sql @@ -0,0 +1 @@ +REVOKE UPDATE (`size`, longName, name) ON vn.item FROM buyer; diff --git a/e2e/paths/03-worker/01_summary.spec.js b/e2e/paths/03-worker/01_summary.spec.js index 3c6149726..51992b41d 100644 --- a/e2e/paths/03-worker/01_summary.spec.js +++ b/e2e/paths/03-worker/01_summary.spec.js @@ -2,6 +2,7 @@ import selectors from '../../helpers/selectors.js'; import getBrowser from '../../helpers/puppeteer'; describe('Worker summary path', () => { + const workerId = 3; let browser; let page; beforeAll(async() => { @@ -9,7 +10,7 @@ describe('Worker summary path', () => { page = browser.page; await page.loginAndModule('employee', 'worker'); const httpDataResponse = page.waitForResponse(response => { - return response.status() === 200 && response.url().includes(`Workers/summary`); + return response.status() === 200 && response.url().includes(`Workers/${workerId}`); }); await page.accessToSearchResult('agencyNick'); await httpDataResponse; diff --git a/e2e/paths/05-ticket/09_weekly.spec.js b/e2e/paths/05-ticket/09_weekly.spec.js index 20cfa0d13..1caf91f9c 100644 --- a/e2e/paths/05-ticket/09_weekly.spec.js +++ b/e2e/paths/05-ticket/09_weekly.spec.js @@ -8,7 +8,7 @@ describe('Ticket descriptor path', () => { beforeAll(async() => { browser = await getBrowser(); page = browser.page; - await page.loginAndModule('buyer', 'ticket'); + await page.loginAndModule('buyerBoss', 'ticket'); await page.accessToSection('ticket.weekly.index'); }); 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/loopback/locale/en.json b/loopback/locale/en.json index 9a3a1f52a..ca76eae42 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -223,7 +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 d7f9564fe..f1c57455e 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -277,7 +277,7 @@ "Collection does not exist": "La colección no existe", "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo", "Insert a date range": "Inserte un rango de fechas", - "Added observation": "{{user}} añadió esta observacion: {{text}}", + "Added observation": "{{user}} añadió esta observacion: {{text}} {{defaulterId}} ({{{defaulterUrl}}})", "Comment added to client": "Observación añadida al cliente {{clientFk}}", "Invalid auth code": "Código de verificación incorrecto", "Invalid or expired verification code": "Código de verificación incorrecto o expirado", @@ -353,5 +353,8 @@ "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario", "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" -} \ No newline at end of file + "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" +} diff --git a/loopback/locale/fr.json b/loopback/locale/fr.json new file mode 100644 index 000000000..44f5e35d3 --- /dev/null +++ b/loopback/locale/fr.json @@ -0,0 +1,360 @@ +{ + "Phone format is invalid": "O formato do telefone é inválido", + "You are not allowed to change the credit": "Você não tem permissão para alterar o crédito", + "Unable to mark the equivalence surcharge": "Não é possível marcar a sobretaxa de equivalência", + "The default consignee can not be unchecked": "Não é possível desmarcar o destinatário padrão", + "Unable to default a disabled consignee": "Não é possível definir um destinatário desativado como padrão", + "Can't be blank": "Não pode ficar em branco", + "Invalid TIN": "NIF/CIF inválido", + "TIN must be unique": "O NIF/CIF deve ser único", + "A client with that Web User name already exists": "Já existe um cliente com esse nome de usuário da web", + "Is invalid": "É inválido", + "Quantity cannot be zero": "A quantidade não pode ser zero", + "Enter an integer different to zero": "Digite um inteiro diferente de zero", + "Package cannot be blank": "A embalagem não pode ficar em branco", + "The company name must be unique": "O nome da empresa deve ser único", + "Invalid email": "E-mail inválido", + "The IBAN does not have the correct format": "O IBAN não tem o formato correto", + "That payment method requires an IBAN": "Este método de pagamento requer um IBAN", + "That payment method requires a BIC": "Este método de pagamento requer um BIC", + "State cannot be blank": "O estado não pode ficar em branco", + "Worker cannot be blank": "O trabalhador não pode ficar em branco", + "Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor", + "can't be blank": "Não pode ficar em branco", + "Observation type must be unique": "O tipo de observação deve ser único", + "The credit must be an integer greater than or equal to zero": "O crédito deve ser um inteiro maior ou igual a zero", + "The grade must be similar to the last one": "A nota deve ser semelhante à última", + "Only manager can change the credit": "Apenas o gerente pode alterar o crédito deste cliente", + "Name cannot be blank": "O nome não pode ficar em branco", + "Phone cannot be blank": "O telefone não pode ficar em branco", + "Period cannot be blank": "O período não pode ficar em branco", + "Choose a company": "Escolha uma empresa", + "Se debe rellenar el campo de texto": "O campo de texto deve ser preenchido", + "Description should have maximum of 45 characters": "A descrição deve ter no máximo 45 caracteres", + "Cannot be blank": "Não pode ficar em branco", + "The grade must be an integer greater than or equal to zero": "A nota deve ser um inteiro maior ou igual a zero", + "Sample type cannot be blank": "O tipo de amostra não pode ficar em branco", + "Description cannot be blank": "A descrição não pode ficar em branco", + "The price of the item changed": "O preço do item mudou", + "The value should not be greater than 100%": "O valor não deve ser maior que 100%", + "The value should be a number": "O valor deve ser um número", + "This order is not editable": "Esta ordem não é editável", + "You can't create an order for a frozen client": "Você não pode criar uma ordem para um cliente congelado", + "You can't create an order for a client that has a debt": "Você não pode criar uma ordem para um cliente que tem uma dívida", + "is not a valid date": "não é uma data válida", + "Barcode must be unique": "O código de barras deve ser único", + "The warehouse can't be repeated": "O armazém não pode ser repetido", + "The tag or priority can't be repeated for an item": "A tag ou prioridade não podem ser repetidas para um item", + "The observation type can't be repeated": "O tipo de observação não pode ser repetido", + "A claim with that sale already exists": "Já existe uma reclamação com essa venda", + "You don't have enough privileges to change that field": "Você não tem privilégios suficientes para alterar esse campo", + "Warehouse cannot be blank": "O armazém não pode ficar em branco", + "Agency cannot be blank": "A agência não pode ficar em branco", + "Not enough privileges to edit a client with verified data": "Não há privilégios suficientes para editar um cliente com dados verificados", + "This address doesn't exist": "Este endereço não existe", + "You must delete the claim id %d first": "Você deve excluir primeiro a reclamação %d", + "You don't have enough privileges": "Você não tem privilégios suficientes", + "Cannot check Equalization Tax in this NIF/CIF": "Não é possível verificar o Imposto de Equalização neste NIF/CIF", + "You can't make changes on the basic data of an confirmed order or with rows": "Você não pode fazer alterações nos dados básicos de um pedido confirmado ou com linhas", + "INVALID_USER_NAME": "Le nom d'utilisateur ne doit contenir que des lettres minuscules ou, à partir du deuxième caractère, des chiffres ou des tirets bas, l'utilisation de la lettre ñ n'est pas autorisée", + "You can't create a ticket for a frozen client": "Vous ne pouvez pas créer un ticket pour un client gelé", + "You can't create a ticket for an inactive client": "Vous ne pouvez pas créer un ticket pour un client inactif", + "Tag value cannot be blank": "La valeur du tag ne peut pas être vide", + "ORDER_EMPTY": "Panier vide", + "You don't have enough privileges to do that": "Vous n'avez pas les privilèges nécessaires pour faire cela", + "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "LE CONSIGNATAIRE NE PEUT PAS ÊTRE DÉSACTIVÉ", + "Error. El NIF/CIF está repetido": "Erreur. Le NIF/CIF est répété", + "Street cannot be empty": "L'adresse ne peut pas être vide", + "City cannot be empty": "La ville ne peut pas être vide", + "Code cannot be blank": "Le code ne peut pas être vide", + "You cannot remove this department": "Vous ne pouvez pas supprimer ce département", + "The extension must be unique": "L'extension doit être unique", + "The secret can't be blank": "Le mot de passe ne peut pas être vide", + "We weren't able to send this SMS": "Nous n'avons pas pu envoyer ce SMS", + "This client can't be invoiced": "Ce client ne peut pas être facturé", + "You must provide the correction information to generate a corrective invoice": "Vous devez fournir les informations de correction pour générer une facture corrective", + "This ticket can't be invoiced": "Ce ticket ne peut pas être facturé", + "You cannot add or modify services to an invoiced ticket": "Vous ne pouvez pas ajouter ou modifier des services à un ticket facturé", + "This ticket can not be modified": "Ce ticket ne peut pas être modifié", + "The introduced hour already exists": "Cette heure a déjà été introduite", + "INFINITE_LOOP": "Il existe une dépendance entre deux chefs", + "The sales of the receiver ticket can't be modified": "Les lignes du ticket auquel vous envoyez ne peuvent pas être modifiées", + "NO_AGENCY_AVAILABLE": "Il n'y a pas de zone de livraison disponible avec ces paramètres", + "ERROR_PAST_SHIPMENT": "Vous ne pouvez pas sélectionner une date d'envoi dans le passé", + "The current ticket can't be modified": "Le ticket actuel ne peut pas être modifié", + "The current claim can't be modified": "La réclamation actuelle ne peut pas être modifiée", + "The sales of this ticket can't be modified": "Les lignes de ce ticket ne peuvent pas être modifiées", + "The sales do not exists": "Les lignes sélectionnées n'existent pas", + "Please select at least one sale": "Veuillez sélectionner au moins une ligne", + "All sales must belong to the same ticket": "Toutes les lignes doivent appartenir au même ticket", + "NO_ZONE_FOR_THIS_PARAMETERS": "Il n'y a pas de zone configurée pour ce jour", + "This item doesn't exists": "Cet article n'existe pas", + "NOT_ZONE_WITH_THIS_PARAMETERS": "Il n'y a pas de zone configurée pour ce jour", + "Extension format is invalid": "Le format de l'extension est invalide", + "Invalid parameters to create a new ticket": "Paramètres invalides pour créer un nouveau ticket", + "This item is not available": "Cet article n'est pas disponible", + "This postcode already exists": "Ce code postal existe déjà", + "Concept cannot be blank": "Le concept ne peut pas être vide", + "File doesn't exists": "Le fichier n'existe pas", + "You don't have privileges to change the zone": "Vous n'avez pas les privilèges pour changer la zone ou pour ces paramètres, il y a plus d'une option de livraison, parlez avec les agences", + "This ticket is already on weekly tickets": "Ce ticket est déjà sur les tickets hebdomadaires", + "Ticket id cannot be blank": "L'id du ticket ne peut pas être vide", + "Weekday cannot be blank": "Le jour de la semaine ne peut pas être vide", + "You can't delete a confirmed order": "Vous ne pouvez pas supprimer une commande confirmée", + "The social name has an invalid format": "Le nom fiscal a un format incorrect", + "Invalid quantity": "Quantité invalide", + "This postal code is not valid": "Ce code postal n'est pas valide", + "is invalid": "est invalide", + "The postcode doesn't exist. Please enter a correct one": "Le code postal n'existe pas. Veuillez entrer un code correct", + "The department name can't be repeated": "Le nom du département ne peut pas être répété", + "This phone already exists": "Ce téléphone existe déjà", + "You cannot move a parent to its own sons": "Vous ne pouvez pas déplacer un élément parent à un de ses fils", + "You can't create a claim for a removed ticket": "Vous ne pouvez pas créer une réclamation pour un ticket supprimé", + "You cannot delete a ticket that part of it is being prepared": "Vous ne pouvez pas supprimer un ticket dont une partie est en préparation", + "You must delete all the buy requests first": "Vous devez supprimer toutes les demandes d'achat en premier", + "You should specify a date": "Vous devez spécifier une date", + "You should specify at least a start or end date": "Vous devez spécifier au moins une date de début ou de fin", + "Start date should be lower than end date": "La date de début doit être inférieure à la date de fin", + "You should mark at least one week day": "Vous devez marquer au moins un jour de la semaine", + "Swift / BIC can't be empty": "Swift / BIC ne peut pas être vide", + "Customs agent is required for a non UEE member": "Un agent des douanes est requis pour les clients non membres de l'UEE", + "Incoterms is required for a non UEE member": "Les incoterms sont requis pour les clients non membres de l'UEE", + "Deleted sales from ticket": "J'ai supprimé les lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", + "Added sale to ticket": "J'ai ajouté la ligne suivante au ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", + "Changed sale discount": "J'ai changé le rabais des lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Created claim": "J'ai créé la réclamation [{{claimId}}]({{{claimUrl}}}) des lignes suivantes du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Changed sale price": "J'ai changé le prix de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* du ticket [{{ticketId}}]({{{ticketUrl}}})", + "Changed sale quantity": "J'ai changé la quantité de {{itemId}} {{concept}} de {{oldQuantity}} ➔ {{newQuantity}} du ticket [{{ticketId}}]({{{ticketUrl}}})", + "State": "État", + "regular": "normal", + "reserved": "réservé", + "Changed sale reserved state": "J'ai changé l'état réservé des lignes suivantes du ticket[{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Bought units from buy request": "{{quantity}} unités ont été achetées de [{{itemId}} {{concept}}]({{{urlItem}}}) pour le ticket id [{{ticketId}}]({{{url}}})", + "Deny buy request": "La demande d'achat pour le ticket id {{ticketId}} a été rejetée. Raison : {{observation}}", + "MESSAGE_INSURANCE_CHANGE": "J'ai changé le crédit assuré du client [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", + "Changed client paymethod": "J'ai changé la méthode de paiement du client [{{clientName}} ({{clientId}})]({{{url}}})", + "Sent units from ticket": "Envoi *{{quantity}}* unités de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenant du ticket id [{{ticketId}}]({{{ticketUrl}}})", + "Change quantity": "{{concept}} change de {{oldQuantity}} à {{newQuantity}}", + "Claim will be picked": "Le produit de la réclamation [({{claimId}})]({{{claimUrl}}}) du client *{{clientName}}*, avec le type de ramassage *{{claimPickup}}* sera récupéré", + "Claim state has changed to": "L'état de la réclamation [({{claimId}})]({{{claimUrl}}}) du client *{{clientName}}* a été changé à *{{newState}}*", + "Client checked as validated despite of duplication": "Le client a été vérifié malgré l'existence du client id {{clientId}}", + "ORDER_ROW_UNAVAILABLE": "Il n'y a pas de disponibilité pour ce produit", + "Distance must be lesser than 4000": "La distance doit être inférieure à 4000", + "This ticket is deleted": "Ce ticket est supprimé", + "Unable to clone this travel": "Il n'a pas été possible de cloner ce voyage", + "This thermograph id already exists": "L'id du thermographe existe déjà", + "Choose a date range or days forward": "Sélectionnez une plage de dates ou des jours à venir", + "ORDER_ALREADY_CONFIRMED": "COMMANDE DÉJÀ CONFIRMÉE", + "Invalid password": "Mot de passe invalide", + "Password does not meet requirements": "Le mot de passe ne répond pas aux exigences", + "Role already assigned": "Rôle déjà attribué", + "Invalid role name": "Nom de rôle invalide", + "Role name must be written in camelCase": "Le nom du rôle doit être écrit en camelCase", + "Email already exists": "L'email existe déjà", + "User already exists": "L'utilisateur existe déjà", + "Absence change notification on the labour calendar": "Notification de changement d'absence sur le calendrier de travail", + "Record of hours week": "Enregistrement des heures semaine {{week}} année {{year}}", + "Created absence": "L'employé {{author}} a ajouté une absence de type '{{absenceType}}' à {{employee}} pour le jour {{dated}}.", + "Deleted absence": "L'employé {{author}} a supprimé une absence de type '{{absenceType}}' à {{employee}} du jour {{dated}}.", + "I have deleted the ticket id": "J'ai supprimé le ticket id [{{id}}]({{{url}}})", + "I have restored the ticket id": "J'ai restauré le ticket id [{{id}}]({{{url}}})", + "You can only restore a ticket within the first hour after deletion": "Vous pouvez uniquement restaurer un ticket dans la première heure après sa suppression", + "Changed this data from the ticket": "J'ai modifié ces données du ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "agencyModeFk": "Agence", + "clientFk": "Client", + "zoneFk": "Zone", + "warehouseFk": "Entrepôt", + "shipped": "Date d'envoi", + "landed": "Date de livraison", + "addressFk": "Consignataire", + "companyFk": "Entreprise", + "agency": "Agence", + "delivery": "Livraison", + "The social name cannot be empty": "La raison sociale ne peut pas être vide", + "The nif cannot be empty": "Le NIF ne peut pas être vide", + "You need to fill sage information before you check verified data": "Vous devez remplir les informations de sage avant de vérifier les données", + "ASSIGN_ZONE_FIRST": "Assignez une zone d'abord", + "Amount cannot be zero": "Le montant ne peut pas être zéro", + "Company has to be official": "L'entreprise doit être officielle", + "You can not select this payment method without a registered bankery account": "Vous ne pouvez pas utiliser cette méthode de paiement sans avoir enregistré un compte bancaire", + "Action not allowed on the test environment": "Cette action n'est pas autorisée dans l'environnement de test", + "The selected ticket is not suitable for this route": "Le ticket sélectionné n'est pas adapté à cet itinéraire", + "New ticket request has been created with price": "Une nouvelle demande de ticket '{{description}}' a été créée pour le jour {{shipped}}, avec une quantité de {{quantity}} et un prix de {{price}} €", + "New ticket request has been created": "Une nouvelle demande de ticket '{{description}}' a été créée pour le jour {{shipped}}, avec une quantité de {{quantity}}", + "Swift / BIC cannot be empty": "Swift / BIC ne peut pas être vide", + "This BIC already exist.": "Ce BIC existe déjà.", + "That item doesn't exists": "Cet article n'existe pas", + "There's a new urgent ticket:": "Il y a un nouveau ticket urgent :", + "Invalid account": "Compte invalide", + "Compensation account is empty": "Le compte de compensation est vide", + "This genus already exist": "Ce genre existe déjà", + "This specie already exist": "Cette espèce existe déjà", + "Client assignment has changed": "J'ai changé le commercial ~*\"<{{previousWorkerName}}>\"*~ pour *\"<{{currentWorkerName}}>\"* du client [{{clientName}} ({{clientId}})]({{{url}}})", + "None": "Aucun", + "The contract was not active during the selected date": "Le contrat n'était pas actif pendant la date sélectionnée", + "Cannot add more than one '1/2 day vacation'": "Vous ne pouvez pas ajouter plus d'un 'Vacances 1/2 jour'", + "This document already exists on this ticket": "Ce document existe déjà dans ce ticket", + "Some of the selected tickets are not billable": "Certains des tickets sélectionnés ne sont pas facturables", + "You can't invoice tickets from multiple clients": "Vous ne pouvez pas facturer des tickets de plusieurs clients", + "nickname": "surnom", + "INACTIVE_PROVIDER": "Fournisseur inactif", + "This client is not invoiceable": "Ce client n'est pas facturable", + "serial non editable": "Cette série ne permet pas d'assigner la référence", + "Max shipped required": "La date limite est requise", + "Can't invoice to future": "Vous ne pouvez pas facturer pour l'avenir", + "Can't invoice to past": "Vous ne pouvez pas facturer pour le passé", + "This ticket is already invoiced": "Ce ticket est déjà facturé", + "A ticket with an amount of zero can't be invoiced": "Un ticket avec un montant de zéro ne peut pas être facturé", + "A ticket with a negative base can't be invoiced": "Un ticket avec une base négative ne peut pas être facturé", + "Global invoicing failed": "[Facturation globale] Certains clients n'ont pas pu être facturés", + "Wasn't able to invoice the following clients": "Les clients suivants n'ont pas pu être facturés", + "Can't verify data unless the client has a business type": "Vous ne pouvez pas vérifier les données d'un client qui n'a pas de type d'entreprise", + "You don't have enough privileges to set this credit amount": "Vous n'avez pas suffisamment de privilèges pour établir ce montant de crédit", + "You can't change the credit set to zero from a financialBoss": "Vous ne pouvez pas modifier le crédit établi à zéro par un chef financier", + "Amounts do not match": "Les montants ne correspondent pas", + "The PDF document does not exist": "Le document PDF n'existe pas. Essayez de le régénérer depuis l'option 'Regénérer PDF facture'", + "The type of business must be filled in basic data": "Le type d'entreprise doit être rempli dans les données de base", + "You can't create a claim from a ticket delivered more than seven days ago": "Vous ne pouvez pas créer une réclamation pour un ticket livré il y a plus de sept jours", + "The worker has hours recorded that day": "Le travailleur a des heures enregistrées ce jour-là", + "The worker has a marked absence that day": "Le travailleur a une absence marquée ce jour-là", + "You can not modify is pay method checked": "Vous ne pouvez pas modifier le champ méthode de paiement validé", + "The account size must be exactly 10 characters": "La taille du compte doit être exactement de 10 caractères", + "Can't transfer claimed sales": "Vous ne pouvez pas transférer des lignes réclamées", + "You don't have privileges to create refund": "Vous n'avez pas les privilèges pour créer un abonnement", + "The item is required": "L'article est requis", + "The agency is already assigned to another autonomous": "L'agence est déjà assignée à un autre autonome", + "date in the future": "Date dans le futur", + "reference duplicated": "Référence dupliquée", + "This ticket is already a refund": "Ce ticket est déjà un abonnement", + "isWithoutNegatives": "Sans négatifs", + "routeFk": "routeFk", + "Can't change the password of another worker": "Vous ne pouvez pas changer le mot de passe d'un autre travailleur", + "No hay un contrato en vigor": "Il n'y a pas de contrat en vigueur", + "No se permite fichar a futuro": "Il n'est pas permis de pointer pour l'avenir", + "No está permitido trabajar": "Il n'est pas permis de travailler", + "Fichadas impares": "Pointages impairs", + "Descanso diario 12h.": "Repos quotidien de 12h.", + "Descanso semanal 36h. / 72h.": "Repos hebdomadaire de 36h / 72h.", + "Dirección incorrecta": "Adresse incorrecte", + "Modifiable user details only by an administrator": "Détails de l'utilisateur modifiables uniquement par un administrateur", + "Modifiable password only via recovery or by an administrator": "Mot de passe modifiable uniquement via la récupération ou par un administrateur", + "Not enough privileges to edit a client": "Vous n'avez pas suffisamment de privilèges pour éditer un client", + "This route does not exists": "Cette route n'existe pas", + "Claim pickup order sent": "Ordre de ramassage de la réclamation envoyé [{{claimId}}]({{{claimUrl}}}) au client *{{clientName}}*", + "You don't have grant privilege": "Vous n'avez pas le privilège de donner des privilèges", + "You don't own the role and you can't assign it to another user": "Vous n'êtes pas le propriétaire du rôle et vous ne pouvez pas l'assigner à un autre utilisateur", + "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionné avec [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", + "Already has this status": "A déjà cet état", + "There aren't records for this week": "Il n'y a pas d'enregistrements pour cette semaine", + "Empty data source": "Source de données vide", + "App locked": "Application verrouillée par l'utilisateur {{userId}}", + "Email verify": "Vérification de courriel", + "Landing cannot be lesser than shipment": "L'arrivée ne peut pas être inférieure à l'expédition", + "Receipt's bank was not found": "La banque du reçu n'a pas été trouvée", + "This receipt was not compensated": "Ce reçu n'a pas été compensé", + "Client's email was not found": "L'email du client n'a pas été trouvé", + "Negative basis": "Base négative", + "This worker code already exists": "Ce code de travailleur existe déjà", + "This personal mail already exists": "Ce courriel personnel existe déjà", + "This worker already exists": "Ce travailleur existe déjà", + "App name does not exist": "Le nom de l'application n'est pas valide", + "Try again": "Réessayez", + "Aplicación bloqueada por el usuario 9": "Application bloquée par l'utilisateur 9", + "Failed to upload delivery note": "Échec du téléchargement du bon de livraison {{id}}", + "The DOCUWARE PDF document does not exists": "Le document PDF Docuware n'existe pas", + "It is not possible to modify tracked sales": "Il n'est pas possible de modifier des lignes de commande qui ont commencé à être préparées", + "It is not possible to modify sales that their articles are from Floramondo": "Il n'est pas possible de modifier des lignes de commande dont les articles proviennent de Floramondo", + "It is not possible to modify cloned sales": "Il n'est pas possible de modifier des lignes de commande clonées", + "A supplier with the same name already exists. Change the country.": "Un fournisseur avec le même nom existe déjà. Changez le pays.", + "There is no assigned email for this client": "Il n'y a pas d'email assigné pour ce client", + "Exists an invoice with a future date": "Il existe une facture avec une date future", + "Invoice date can't be less than max date": "La date de la facture ne peut pas être inférieure à la date limite", + "Warehouse inventory not set": "L'inventaire de l'entrepôt n'est pas établi", + "This locker has already been assigned": "Ce casier a déjà été assigné", + "Tickets with associated refunds": "Vous ne pouvez pas supprimer des tickets avec des remboursements associés. Ce ticket est associé au remboursement Nº %d", + "Not exist this branch": "La branche n'existe pas", + "This ticket cannot be signed because it has not been boxed": "Ce ticket ne peut pas être signé car il n'a pas été emballé", + "Collection does not exist": "La collection n'existe pas", + "Cannot obtain exclusive lock": "Impossible d'obtenir un verrou exclusif", + "Insert a date range": "Insérez une plage de dates", + "Added observation": "{{user}} a ajouté cette observation : {{text}}", + "Comment added to client": "Observation ajoutée au client {{clientFk}}", + "Invalid auth code": "Code de vérification incorrect", + "Invalid or expired verification code": "Code de vérification incorrect ou expiré", + "Cannot create a new claimBeginning from a different ticket": "Vous ne pouvez pas créer une ligne de réclamation d'un ticket différent de l'origine", + "company": "Compagnie", + "country": "Pays", + "clientId": "Id client", + "clientSocialName": "Client", + "amount": "Montant", + "taxableBase": "Base", + "ticketFk": "Id ticket", + "isActive": "Actif", + "hasToInvoice": "Facturer", + "isTaxDataChecked": "Données vérifiées", + "comercialId": "Id commercial", + "comercialName": "Commercial", + "Pass expired": "Le mot de passe a expiré, changez-le depuis Salix", + "Invalid NIF for VIES": "NIF invalide pour VIES", + "Ticket does not exist": "Ce ticket n'existe pas", + "Ticket is already signed": "Ce ticket a déjà été signé", + "Authentication failed": "Échec de l'authentification", + "You can't use the same password": "Vous ne pouvez pas utiliser le même mot de passe", + "You can only add negative amounts in refund tickets": "Vous ne pouvez ajouter que des montants négatifs dans les tickets de remboursement", + "Fecha fuera de rango": "Date hors plage", + "Error while generating PDF": "Erreur lors de la génération du PDF", + "Error when sending mail to client": "Erreur lors de l'envoi du courrier au client", + "Mail not sent": "Une erreur est survenue lors de l'envoi de la facture au client [{{clientId}}]({{{clientUrl}}}), veuillez vérifier l'adresse électronique", + "The renew period has not been exceeded": "La période de renouvellement n'a pas été dépassée", + "Valid priorities": "Priorités valides : %d", + "hasAnyNegativeBase": "Base négative pour les tickets : {{ticketsIds}}", + "hasAnyPositiveBase": "Base positives pour les tickets : {{ticketsIds}}", + "You cannot assign an alias that you are not assigned to": "Vous ne pouvez pas attribuer un alias que vous n'avez pas reçu", + "This ticket cannot be left empty.": "Ce ticket ne peut pas être laissé vide. %s", + "The company has not informed the supplier account for bank transfers": "L'entreprise n'a pas informé le compte du fournisseur pour les transferts bancaires", + "You cannot assign/remove an alias that you are not assigned to": "Vous ne pouvez pas attribuer/supprimer un alias que vous n'avez pas reçu", + "This invoice has a linked vehicle.": "Cette facture a un véhicule lié", + "You don't have enough privileges.": "Vous n'avez pas suffisamment de privilèges.", + "This ticket is locked": "Ce ticket est bloqué.", + "This ticket is not editable.": "Ce ticket n'est pas modifiable.", + "The ticket doesn't exist.": "Le ticket n'existe pas.", + "Social name should be uppercase": "La raison sociale doit être en majuscules", + "Street should be uppercase": "L'adresse fiscale doit être en majuscules", + "Ticket without Route": "Ticket sans itinéraire", + "Select a different client": "Sélectionnez un client différent", + "Fill all the fields": "Remplissez tous les champs", + "The response is not a PDF": "La réponse n'est pas un PDF", + "Booking completed": "Réservation terminée", + "The ticket is in preparation": "Le ticket [{{ticketId}}]({{{ticketUrl}}}) du commercial {{salesPersonId}} est en préparation", + "The notification subscription of this worker cant be modified": "L'abonnement à la notification de ce travailleur ne peut pas être modifié", + "User disabled": "Utilisateur désactivé", + "The amount cannot be less than the minimum": "La quantité ne peut pas être inférieure à la quantité minimale", + "quantityLessThanMin": "La quantité ne peut pas être inférieure à la quantité minimale", + "Cannot past travels with entries": "Vous ne pouvez pas passer des envois avec des entrées", + "It was not able to remove the next expeditions:": "Il n'a pas été possible de supprimer les expéditions suivantes : {{expeditions}}", + "This claim has been updated": "La réclamation avec l'Id : {{claimId}}, a été mise à jour", + "This user does not have an assigned tablet": "Cet utilisateur n'a pas de tablette assignée", + "Field are invalid": "Le champ '{{tag}}' n'est pas valide", + "Incorrect pin": "Pin incorrect.", + "You already have the mailAlias": "Vous avez déjà cet alias de courrier", + "The alias cant be modified": "Cet alias de courrier ne peut pas être modifié", + "No tickets to invoice": "Pas de tickets à facturer", + "this warehouse has not dms": "L'entrepôt n'accepte pas les documents", + "This ticket already has a cmr saved": "Ce ticket a déjà un cmr enregistré", + "Name should be uppercase": "Le nom doit être en majuscules", + "Bank entity must be specified": "L'entité bancaire doit être spécifiée", + "An email is necessary": "Un email est nécessaire", + "You cannot update these fields": "Vous ne pouvez pas mettre à jour ces champs", + "CountryFK cannot be empty": "Le pays ne peut pas être vide", + "Cmr file does not exist": "Le fichier cmr n'existe pas", + "You are not allowed to modify the alias": "Vous n'êtes pas autorisé à modifier l'alias", + "The address of the customer must have information about Incoterms and Customs Agent": "L'adresse du client doit contenir des informations sur les Incoterms et l'agent des douanes", + "The line could not be marked": "La ligne ne peut pas être marquée", + "This password can only be changed by the user themselves": "Ce mot de passe ne peut être modifié que par l'utilisateur lui-même", + "They're not your subordinate": "Ce n'est pas votre subordonné.", + "No results found": "Aucun résultat trouvé", + "InvoiceIn is already booked": "La facture reçue est déjà comptabilisée", + "This workCenter is already assigned to this agency": "Ce centre de travail est déjà assigné à cette agence", + "Select ticket or client": "Choisissez un ticket ou un client", + "It was not able to create the invoice": "Il n'a pas été possible de créer la facture" +} \ No newline at end of file diff --git a/loopback/locale/pt.json b/loopback/locale/pt.json new file mode 100644 index 000000000..b11eeefc6 --- /dev/null +++ b/loopback/locale/pt.json @@ -0,0 +1,360 @@ +{ + "Phone format is invalid": "O formato do telefone não é válido", + "You are not allowed to change the credit": "Você não tem permissão para alterar o crédito", + "Unable to mark the equivalence surcharge": "Não é possível marcar a sobretaxa de equivalência", + "The default consignee can not be unchecked": "Não é possível desmarcar o destinatário padrão", + "Unable to default a disabled consignee": "Não é possível definir como padrão um destinatário desativado", + "Can't be blank": "Não pode estar em branco", + "Invalid TIN": "NIF/CIF inválido", + "TIN must be unique": "O NIF/CIF deve ser único", + "A client with that Web User name already exists": "Já existe um cliente com esse nome de usuário da web", + "Is invalid": "É inválido", + "Quantity cannot be zero": "A quantidade não pode ser zero", + "Enter an integer different to zero": "Digite um inteiro diferente de zero", + "Package cannot be blank": "A embalagem não pode estar em branco", + "The company name must be unique": "O nome da empresa deve ser único", + "Invalid email": "Email inválido", + "The IBAN does not have the correct format": "O IBAN não tem o formato correto", + "That payment method requires an IBAN": "Esse método de pagamento requer um IBAN", + "That payment method requires a BIC": "Esse método de pagamento requer um BIC", + "State cannot be blank": "O estado não pode estar em branco", + "Worker cannot be blank": "O trabalhador não pode estar em branco", + "Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor", + "can't be blank": "não pode estar em branco", + "Observation type must be unique": "O tipo de observação deve ser único", + "The credit must be an integer greater than or equal to zero": "O crédito deve ser um número inteiro maior ou igual a zero", + "The grade must be similar to the last one": "A nota deve ser semelhante à última", + "Only manager can change the credit": "Apenas o gerente pode alterar o crédito deste cliente", + "Name cannot be blank": "O nome não pode estar em branco", + "Phone cannot be blank": "O telefone não pode estar em branco", + "Period cannot be blank": "O período não pode estar em branco", + "Choose a company": "Escolha uma empresa", + "Se debe rellenar el campo de texto": "Você deve preencher o campo de texto", + "Description should have maximum of 45 characters": "A descrição deve ter no máximo 45 caracteres", + "Cannot be blank": "Não pode estar em branco", + "The grade must be an integer greater than or equal to zero": "A nota deve ser um número inteiro maior ou igual a zero", + "Sample type cannot be blank": "O tipo de amostra não pode estar em branco", + "Description cannot be blank": "A descrição não pode estar em branco", + "The price of the item changed": "O preço do item mudou", + "The value should not be greater than 100%": "O valor não deve ser maior que 100%", + "The value should be a number": "O valor deve ser um número", + "This order is not editable": "Esta ordem não é editável", + "You can't create an order for a frozen client": "Você não pode criar um pedido para um cliente congelado", + "You can't create an order for a client that has a debt": "Você não pode criar um pedido para um cliente com dívida", + "is not a valid date": "não é uma data válida", + "Barcode must be unique": "O código de barras deve ser único", + "The warehouse can't be repeated": "O armazém não pode ser repetido", + "The tag or priority can't be repeated for an item": "A tag ou prioridade não pode ser repetida para um item", + "The observation type can't be repeated": "O tipo de observação não pode ser repetido", + "A claim with that sale already exists": "Já existe uma reclamação com essa venda", + "You don't have enough privileges to change that field": "Você não tem privilégios suficientes para alterar esse campo", + "Warehouse cannot be blank": "O armazém não pode estar em branco", + "Agency cannot be blank": "A agência não pode estar em branco", + "Not enough privileges to edit a client with verified data": "Não há privilégios suficientes para editar um cliente com dados verificados", + "This address doesn't exist": "Este endereço não existe", + "You must delete the claim id %d first": "Você deve excluir a reclamação %d primeiro", + "You don't have enough privileges": "Você não tem privilégios suficientes", + "Cannot check Equalization Tax in this NIF/CIF": "Não é possível verificar o Imposto de Equalização neste NIF/CIF", + "You can't make changes on the basic data of an confirmed order or with rows": "Você não pode fazer alterações nos dados básicos de um pedido confirmado ou com linhas", + "INVALID_USER_NAME": "O nome de usuário só pode conter letras minúsculas ou, a partir do segundo caractere, números ou sublinhados, o uso da letra ñ não é permitido", + "You can't create a ticket for a frozen client": "Você não pode criar um ticket para um cliente congelado", + "You can't create a ticket for an inactive client": "Você não pode criar um ticket para um cliente inativo", + "Tag value cannot be blank": "O valor da tag não pode estar em branco", + "ORDER_EMPTY": "Cesta vazia", + "You don't have enough privileges to do that": "Você não tem privilégios suficientes para fazer isso", + "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NÃO É POSSÍVEL DESATIVAR O CONSIGNATÁRIO", + "Error. El NIF/CIF está repetido": "Erro. O NIF/CIF está repetido", + "Street cannot be empty": "A rua não pode estar vazia", + "City cannot be empty": "A cidade não pode estar vazia", + "Code cannot be blank": "O código não pode estar em branco", + "You cannot remove this department": "Você não pode remover este departamento", + "The extension must be unique": "A extensão deve ser única", + "The secret can't be blank": "O segredo não pode estar em branco", + "We weren't able to send this SMS": "Não conseguimos enviar este SMS", + "This client can't be invoiced": "Este cliente não pode ser faturado", + "You must provide the correction information to generate a corrective invoice": "Você deve fornecer as informações de correção para gerar uma fatura corretiva", + "This ticket can't be invoiced": "Este ticket não pode ser faturado", + "You cannot add or modify services to an invoiced ticket": "Você não pode adicionar ou modificar serviços a um ticket faturado", + "This ticket can not be modified": "Este ticket não pode ser modificado", + "The introduced hour already exists": "A hora introduzida já existe", + "INFINITE_LOOP": "Loop infinito", + "The sales of the receiver ticket can't be modified": "As vendas do ticket receptor não podem ser modificadas", + "NO_AGENCY_AVAILABLE": "Nenhuma agência disponível", + "ERROR_PAST_SHIPMENT": "Erro. Data de envio no passado", + "The current ticket can't be modified": "O ticket atual não pode ser modificado", + "The current claim can't be modified": "A reclamação atual não pode ser modificada", + "The sales of this ticket can't be modified": "As vendas deste ticket não podem ser modificadas", + "The sales do not exists": "As vendas não existem", + "Please select at least one sale": "Por favor, selecione pelo menos uma venda", + "All sales must belong to the same ticket": "Todas as vendas devem pertencer ao mesmo ticket", + "NO_ZONE_FOR_THIS_PARAMETERS": "Nenhuma zona para estes parâmetros", + "This item doesn't exists": "Este item não existe", + "NOT_ZONE_WITH_THIS_PARAMETERS": "Nenhuma zona para estes parâmetros", + "Extension format is invalid": "O formato da extensão é inválido", + "Invalid parameters to create a new ticket": "Parâmetros inválidos para criar um novo ticket", + "This item is not available": "Este item não está disponível", + "This postcode already exists": "Este código postal já existe", + "Concept cannot be blank": "O conceito não pode estar em branco", + "File doesn't exists": "O arquivo não existe", + "You don't have privileges to change the zone": "Você não tem privilégios para alterar a zona", + "This ticket is already on weekly tickets": "Este ticket já está em tickets semanais", + "Ticket id cannot be blank": "O id do ticket não pode ficar em branco", + "Weekday cannot be blank": "O dia da semana não pode ficar em branco", + "You can't delete a confirmed order": "Você não pode excluir um pedido confirmado", + "The social name has an invalid format": "O nome social tem um formato inválido", + "Invalid quantity": "Quantidade inválida", + "This postal code is not valid": "Este código postal não é válido", + "is invalid": "é inválido", + "The postcode doesn't exist. Please enter a correct one": "O código postal não existe. Por favor, insira um correto", + "The department name can't be repeated": "O nome do departamento não pode ser repetido", + "This phone already exists": "Este telefone já existe", + "You cannot move a parent to its own sons": "Você não pode mover um pai para seus próprios filhos", + "You can't create a claim for a removed ticket": "Você não pode criar uma reclamação para um ticket removido", + "You cannot delete a ticket that part of it is being prepared": "Você não pode excluir um ticket que parte dele está sendo preparada", + "You must delete all the buy requests first": "Você deve excluir todas as solicitações de compra primeiro", + "You should specify a date": "Você deve especificar uma data", + "You should specify at least a start or end date": "Você deve especificar pelo menos uma data de início ou fim", + "Start date should be lower than end date": "A data de início deve ser anterior à data de término", + "You should mark at least one week day": "Você deve marcar pelo menos um dia da semana", + "Swift / BIC can't be empty": "Swift / BIC não pode ficar vazio", + "Customs agent is required for a non UEE member": "O agente alfandegário é necessário para um cliente não UEE", + "Incoterms is required for a non UEE member": "Incoterms são necessários para um cliente não UEE", + "Deleted sales from ticket": "Vendas excluídas do ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", + "Added sale to ticket": "Venda adicionada ao ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", + "Changed sale discount": "Desconto da venda alterado no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Created claim": "Reclamação criada [{{claimId}}]({{{claimUrl}}}) no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Changed sale price": "Preço da venda alterado para [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* no ticket [{{ticketId}}]({{{ticketUrl}}})", + "Changed sale quantity": "Quantidade da venda alterada para [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* no ticket [{{ticketId}}]({{{ticketUrl}}})", + "State": "Estado", + "regular": "normal", + "reserved": "reservado", + "Changed sale reserved state": "Estado de reserva da venda alterado no ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Bought units from buy request": "Unidades compradas da solicitação de compra [{{itemId}} {{concept}}]({{{urlItem}}}) para o ticket id [{{ticketId}}]({{{url}}})", + "Deny buy request": "Solicitação de compra negada para o ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", + "MESSAGE_INSURANCE_CHANGE": "Crédito segurado do cliente [{{clientName}} ({{clientId}})]({{{url}}}) alterado para *{{credit}} €*", + "Changed client paymethod": "Forma de pagamento do cliente [{{clientName}} ({{clientId}}) alterada", + "Sent units from ticket": "*{{quantity}}* Unidades enviadas de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", + "Change quantity": "{{concept}} mudou de {{oldQuantity}} para {{newQuantity}}", + "Claim will be picked": "Reclamação será recolhida [({{claimId}})]({{{claimUrl}}}) do cliente *{{clientName}}*, com tipo de coleta *{{claimPickup}}*", + "Claim state has changed to": "Estado da reclamação alterado para {{newState}} ({{claimId}}) do cliente {{clientName}}", + "Client checked as validated despite of duplication": "Cliente verificado apesar da duplicação do id {{clientId}}", + "ORDER_ROW_UNAVAILABLE": "Esta linha de pedido não está disponível", + "Distance must be lesser than 4000": "A distância deve ser menor que 4000", + "This ticket is deleted": "Este ticket foi excluído", + "Unable to clone this travel": "Não foi possível clonar esta viagem", + "This thermograph id already exists": "Esta id de termógrafo já existe", + "Choose a date range or days forward": "Escolha um intervalo de datas ou dias adiante", + "ORDER_ALREADY_CONFIRMED": "PEDIDO JÁ CONFIRMADO", + "Invalid password": "Senha inválida", + "Password does not meet requirements": "Senha não atende aos requisitos", + "Role already assigned": "Função já atribuída", + "Invalid role name": "Nome da função inválido", + "Role name must be written in camelCase": "O nome da função deve ser escrito em camelCase", + "Email already exists": "O e-mail já existe", + "User already exists": "O usuário já existe", + "Absence change notification on the labour calendar": "Notificação de mudança de ausência no calendário trabalhista", + "Record of hours week": "Registro de horas semana {{week}} ano {{year}} ", + "Created absence": "O funcionário {{author}} adicionou uma ausência do tipo '{{absenceType}}' para {{employee}} no dia {{dated}}.", + "Deleted absence": "O funcionário {{author}} excluiu uma ausência do tipo '{{absenceType}}' de {{employee}} no dia {{dated}}.", + "I have deleted the ticket id": "Eu excluí o id do ticket [{{id}}]({{{url}}})", + "I have restored the ticket id": "Eu restaurei o id do ticket [{{id}}]({{{url}}})", + "You can only restore a ticket within the first hour after deletion": "Você só pode restaurar um ticket dentro da primeira hora após a exclusão", + "Changed this data from the ticket": "Estes dados do ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "agencyModeFk": "Agência", + "clientFk": "Cliente", + "zoneFk": "Zona", + "warehouseFk": "Armazém", + "shipped": "Enviado", + "landed": "Entregue", + "addressFk": "Destinatário", + "companyFk": "Empresa", + "agency": "Agência", + "delivery": "Entrega", + "The social name cannot be empty": "O nome social não pode estar vazio", + "The nif cannot be empty": "O NIF não pode estar vazio", + "You need to fill sage information before you check verified data": "Você precisa preencher as informações do sage antes de verificar os dados verificados", + "ASSIGN_ZONE_FIRST": "Atribua uma zona primeiro", + "Amount cannot be zero": "O valor não pode ser zero", + "Company has to be official": "A empresa deve ser oficial", + "You can not select this payment method without a registered bankery account": "Você não pode selecionar este método de pagamento sem uma conta bancária registrada", + "Action not allowed on the test environment": "Ação não permitida no ambiente de teste", + "The selected ticket is not suitable for this route": "O ticket selecionado não é adequado para esta rota", + "New ticket request has been created with price": "Nova solicitação de ticket criada para o dia {{shipped}}, com uma quantidade de {{quantity}} e um preço de {{price}} €", + "New ticket request has been created": "Nova solicitação de ticket criada para o dia {{shipped}}, com uma quantidade de {{quantity}}", + "Swift / BIC cannot be empty": "Swift / BIC não pode ficar vazio", + "This BIC already exist.": "Este BIC já existe.", + "That item doesn't exists": "Esse item não existe", + "There's a new urgent ticket:": "Há um novo ticket urgente:", + "Invalid account": "Conta inválida", + "Compensation account is empty": "A conta de compensação está vazia", + "This genus already exist": "Este gênero já existe", + "This specie already exist": "Esta espécie já existe", + "Client assignment has changed": "A atribuição do cliente foi alterada de ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})", + "None": "Nenhum", + "The contract was not active during the selected date": "O contrato não estava ativo durante a data selecionada", + "Cannot add more than one '1/2 day vacation'": "Não é possível adicionar mais de um 'meio dia de férias'", + "This document already exists on this ticket": "Este documento já existe neste ticket", + "Some of the selected tickets are not billable": "Alguns dos tickets selecionados não são faturáveis", + "You can't invoice tickets from multiple clients": "Você não pode faturar tickets de múltiplos clientes", + "nickname": "apelido", + "INACTIVE_PROVIDER": "Fornecedor inativo", + "This client is not invoiceable": "Este cliente não é faturável", + "serial non editable": "Este série não é editável", + "Max shipped required": "A data limite é requerida", + "Can't invoice to future": "Não é possível faturar para o futuro", + "Can't invoice to past": "Não é possível faturar para o passado", + "This ticket is already invoiced": "Este ticket já está faturado", + "A ticket with an amount of zero can't be invoiced": "Um ticket com um valor zero não pode ser faturado", + "A ticket with a negative base can't be invoiced": "Um ticket com uma base negativa não pode ser faturado", + "Global invoicing failed": "[Faturamento global] Não foi possível faturar alguns clientes", + "Wasn't able to invoice the following clients": "Não foi possível faturar os seguintes clientes", + "Can't verify data unless the client has a business type": "Não é possível verificar os dados a menos que o cliente tenha um tipo de negócio", + "You don't have enough privileges to set this credit amount": "Você não tem privilégios suficientes para definir este valor de crédito", + "You can't change the credit set to zero from a financialBoss": "Você não pode alterar o crédito definido como zero de um financeiro chefe", + "Amounts do not match": "Os valores não correspondem", + "The PDF document does not exist": "O documento PDF não existe. Tente regenerá-lo na opção 'Regenerar PDF da fatura'", + "The type of business must be filled in basic data": "O tipo de negócio deve ser preenchido nos dados básicos", + "You can't create a claim from a ticket delivered more than seven days ago": "Você não pode criar uma reclamação de um ticket entregue há mais de sete dias", + "The worker has hours recorded that day": "O trabalhador tem horas registradas nesse dia", + "The worker has a marked absence that day": "O trabalhador tem uma ausência marcada nesse dia", + "You can not modify is pay method checked": "Você não pode modificar o método de pagamento verificado", + "The account size must be exactly 10 characters": "O tamanho da conta deve ser exatamente de 10 caracteres", + "Can't transfer claimed sales": "Não é possível transferir vendas reclamadas", + "You don't have privileges to create refund": "Você não tem privilégios para criar um reembolso", + "The item is required": "O item é necessário", + "The agency is already assigned to another autonomous": "A agência já está atribuída a outro autônomo", + "date in the future": "Data no futuro", + "reference duplicated": "Referência duplicada", + "This ticket is already a refund": "Este ticket já é um reembolso", + "isWithoutNegatives": "Sem negativos", + "routeFk": "routeFk", + "Can't change the password of another worker": "Não é possível alterar a senha de outro trabalhador", + "No hay un contrato en vigor": "Não há um contrato em vigor", + "No se permite fichar a futuro": "Não é permitido marcar o ponto no futuro", + "No está permitido trabajar": "Não está permitido trabalhar", + "Fichadas impares": "Fichadas ímpares", + "Descanso diario 12h.": "Descanso diário 12h.", + "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.", + "Dirección incorrecta": "Endereço incorreto", + "Modifiable user details only by an administrator": "Detalhes do usuário modificáveis apenas por um administrador", + "Modifiable password only via recovery or by an administrator": "Senha modificável apenas via recuperação ou por um administrador", + "Not enough privileges to edit a client": "Não há privilégios suficientes para editar um cliente", + "This route does not exists": "Esta rota não existe", + "Claim pickup order sent": "Ordem de retirada de reclamação enviada [{{claimId}}]({{{claimUrl}}}) o cliente *{{clientName}}*", + "You don't have grant privilege": "Você não tem privilégio de concessão", + "You don't own the role and you can't assign it to another user": "Você não é proprietário do papel e não pode atribuí-lo a outro usuário", + "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) mesclado com [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", + "Already has this status": "Já tem este status", + "There aren't records for this week": "Não há registros para esta semana", + "Empty data source": "Fonte de dados vazia", + "App locked": "Aplicativo bloqueado pelo usuário {{userId}}", + "Email verify": "Verificação de e-mail", + "Landing cannot be lesser than shipment": "O pouso não pode ser menor que o envio", + "Receipt's bank was not found": "Banco do recibo não encontrado", + "This receipt was not compensated": "Este recibo não foi compensado", + "Client's email was not found": "E-mail do cliente não encontrado", + "Negative basis": "Base negativa", + "This worker code already exists": "Este código de trabalhador já existe", + "This personal mail already exists": "Este e-mail pessoal já existe", + "This worker already exists": "Este trabalhador já existe", + "App name does not exist": "O nome do aplicativo não existe", + "Try again": "Tente novamente", + "Aplicación bloqueada por el usuario 9": "Aplicação bloqueada pelo usuário 9", + "Failed to upload delivery note": "Falha ao carregar nota de entrega {{id}}", + "The DOCUWARE PDF document does not exists": "O documento PDF DOCUWARE não existe", + "It is not possible to modify tracked sales": "Não é possível modificar vendas rastreadas", + "It is not possible to modify sales that their articles are from Floramondo": "Não é possível modificar vendas cujos artigos são da Floramondo", + "It is not possible to modify cloned sales": "Não é possível modificar vendas clonadas", + "A supplier with the same name already exists. Change the country.": "Já existe um fornecedor com o mesmo nome. Mude o país.", + "There is no assigned email for this client": "Não há e-mail atribuído para este cliente", + "Exists an invoice with a future date": "Existe uma fatura com data futura", + "Invoice date can't be less than max date": "A data da fatura não pode ser menor que a data máxima", + "Warehouse inventory not set": "Inventário do armazém não configurado", + "This locker has already been assigned": "Este armário já foi atribuído", + "Tickets with associated refunds": "Tickets com reembolsos associados", + "Not exist this branch": "Esta filial não existe", + "This ticket cannot be signed because it has not been boxed": "Este ticket não pode ser assinado porque não foi encaixotado", + "Collection does not exist": "Coleção não existe", + "Cannot obtain exclusive lock": "Não é possível obter um bloqueio exclusivo", + "Insert a date range": "Insira um intervalo de datas", + "Added observation": "{{user}} adicionou esta observação: {{text}}", + "Comment added to client": "Comentário adicionado ao cliente {{clientFk}}", + "Invalid auth code": "Código de autenticação inválido", + "Invalid or expired verification code": "Código de verificação inválido ou expirado", + "Cannot create a new claimBeginning from a different ticket": "Não é possível criar um novo reclamação a partir de um ticket diferente", + "company": "Empresa", + "country": "País", + "clientId": "Id do cliente", + "clientSocialName": "Cliente", + "amount": "Quantidade", + "taxableBase": "Base tributável", + "ticketFk": "Id do ticket", + "isActive": "Está ativo", + "hasToInvoice": "Tem que faturar", + "isTaxDataChecked": "Dados fiscais verificados", + "comercialId": "Id do comercial", + "comercialName": "Comercial", + "Pass expired": "A senha expirou, altere-a pelo Salix", + "Invalid NIF for VIES": "NIF inválido para VIES", + "Ticket does not exist": "Este ticket não existe", + "Ticket is already signed": "Este ticket já está assinado", + "Authentication failed": "Autenticação falhou", + "You can't use the same password": "Você não pode usar a mesma senha", + "You can only add negative amounts in refund tickets": "Você só pode adicionar quantidades negativas em tickets de reembolso", + "Fecha fuera de rango": "Data fora do intervalo", + "Error while generating PDF": "Erro ao gerar PDF", + "Error when sending mail to client": "Erro ao enviar e-mail para o cliente", + "Mail not sent": "E-mail não enviado cliente [{{clientId}}]({{{clientUrl}}})", + "The renew period has not been exceeded": "O período de renovação não foi excedido", + "Valid priorities": "Prioridades válidas", + "hasAnyNegativeBase": "Base negativa para os tickets", + "hasAnyPositiveBase": "Bases positivas para os tickets", + "You cannot assign an alias that you are not assigned to": "Você não pode atribuir um alias que não está atribuído a você", + "This ticket cannot be left empty.": "Este ticket não pode ficar vazio.", + "The company has not informed the supplier account for bank transfers": "A empresa não informou a conta do fornecedor para transferências bancárias", + "You cannot assign/remove an alias that you are not assigned to": "Você não pode atribuir/remover um alias que não está atribuído a você", + "This invoice has a linked vehicle.": "Esta fatura tem um veículo vinculado", + "You don't have enough privileges.": "Você não tem privilégios suficientes.", + "This ticket is locked": "Este ticket está bloqueado.", + "This ticket is not editable.": "Este ticket não é editável.", + "The ticket doesn't exist.": "O ticket não existe.", + "Social name should be uppercase": "O nome social deve estar em maiúsculas", + "Street should be uppercase": "A rua deve estar em maiúsculas", + "Ticket without Route": "Ticket sem rota", + "Select a different client": "Selecione um cliente diferente", + "Fill all the fields": "Preencha todos os campos", + "The response is not a PDF": "A resposta não é um PDF", + "Booking completed": "Reserva concluída", + "The ticket is in preparation": "O ticket está em preparação [{{ticketId}}]({{{ticketUrl}}}) comercial {{salesPersonId}}", + "The notification subscription of this worker cant be modified": "A inscrição de notificação deste trabalhador não pode ser modificada", + "User disabled": "Usuário desativado", + "The amount cannot be less than the minimum": "O valor não pode ser menor que o mínimo", + "quantityLessThanMin": "Quantidade menor que o mínimo", + "Cannot past travels with entries": "Não é possível passar viagens com entradas", + "It was not able to remove the next expeditions:": "Não foi possível remover as próximas expedições:", + "This claim has been updated": "Esta reclamação foi atualizada", + "This user does not have an assigned tablet": "Este usuário não tem um tablet atribuído", + "Field are invalid": "Campos inválidos", + "Incorrect pin": "PIN incorreto.", + "You already have the mailAlias": "Você já tem o alias de e-mail", + "The alias cant be modified": "O alias não pode ser modificado", + "No tickets to invoice": "Não há tickets para faturar", + "this warehouse has not dms": "Este armazém não tem DMS", + "This ticket already has a cmr saved": "Este ticket já tem um CMR salvo", + "Name should be uppercase": "O nome deve estar em maiúsculas", + "Bank entity must be specified": "A entidade bancária deve ser especificada", + "An email is necessary": "Um e-mail é necessário", + "You cannot update these fields": "Você não pode atualizar estes campos", + "CountryFK cannot be empty": "CountryFK não pode estar vazio", + "Cmr file does not exist": "O arquivo CMR não existe", + "You are not allowed to modify the alias": "Você não tem permissão para modificar o alias", + "The address of the customer must have information about Incoterms and Customs Agent": "O endereço do cliente deve ter informações sobre Incoterms e Agente Aduaneiro", + "The line could not be marked": "A linha não pôde ser marcada", + "This password can only be changed by the user themselves": "Esta senha só pode ser alterada pelo próprio usuário", + "They're not your subordinate": "Eles não são seus subordinados.", + "No results found": "Nenhum resultado encontrado", + "InvoiceIn is already booked": "InvoiceIn já está reservado", + "This workCenter is already assigned to this agency": "Este centro de trabalho já está atribuído a esta agência", + "Select ticket or client": "Selecione um ticket ou cliente", + "It was not able to create the invoice": "Não foi possível criar a fatura" +} \ No newline at end of file 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/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/locale/client/en.yml b/modules/client/back/locale/client/en.yml index ad21a6ce6..75ff0f7ac 100644 --- a/modules/client/back/locale/client/en.yml +++ b/modules/client/back/locale/client/en.yml @@ -27,7 +27,6 @@ columns: hasCoreVnh: core VNH hasIncoterms: incoterms isTaxDataChecked: tax data checked - eypbc: EYPBC quality: quality isVies: VIES isRelevant: relevant diff --git a/modules/client/back/locale/client/es.yml b/modules/client/back/locale/client/es.yml index b17f53b1c..7ff6a5c30 100644 --- a/modules/client/back/locale/client/es.yml +++ b/modules/client/back/locale/client/es.yml @@ -27,7 +27,6 @@ columns: hasCoreVnh: centro VNH hasIncoterms: incoterms isTaxDataChecked: datos fiscales comprobados - eypbc: EYPBC quality: calidad isVies: VIES isRelevant: importante diff --git a/modules/client/back/methods/defaulter/observationEmail.js b/modules/client/back/methods/defaulter/observationEmail.js index 5ac00b4ee..c06d1d3d0 100644 --- a/modules/client/back/methods/defaulter/observationEmail.js +++ b/modules/client/back/methods/defaulter/observationEmail.js @@ -29,6 +29,7 @@ module.exports = Self => { const $t = ctx.req.__; // $translate const myOptions = {}; const userId = ctx.req.accessToken.userId; + const url = await Self.app.models.Url.getUrl(); if (typeof options == 'object') Object.assign(myOptions, options); @@ -38,7 +39,9 @@ module.exports = Self => { const body = $t('Added observation', { user: user.name, - text: observation + text: observation, + defaulterId: defaulter.clientFk, + defaulterUrl: `${url}client/${defaulter.clientFk}/summary` }); await models.Mail.create({ diff --git a/modules/client/back/models/business.json b/modules/client/back/models/business.json index 7ad2d307f..58e989ae0 100644 --- a/modules/client/back/models/business.json +++ b/modules/client/back/models/business.json @@ -10,6 +10,9 @@ "id": { "type": "number", "id": true + }, + "workcenterFk" : { + "type": "number" } }, "relations": { @@ -24,4 +27,4 @@ "foreignKey": "departmentFk" } } -} \ No newline at end of file +} diff --git a/modules/client/back/models/client.json b/modules/client/back/models/client.json index 550ac380e..510857595 100644 --- a/modules/client/back/models/client.json +++ b/modules/client/back/models/client.json @@ -103,9 +103,6 @@ "isTaxDataChecked":{ "type": "boolean" }, - "eypbc": { - "type": "boolean" - }, "quality": { "type": "number" }, diff --git a/modules/client/front/consumption/index.html b/modules/client/front/consumption/index.html index 17e1e8c8b..06611da5a 100644 --- a/modules/client/front/consumption/index.html +++ b/modules/client/front/consumption/index.html @@ -77,8 +77,7 @@ tabindex="-1"> - {{::sale.quantity | dashIfEmpty}} - + {{::sale.quantity | dashIfEmpty}} diff --git a/modules/invoiceIn/back/methods/invoice-in/exchangeRateUpdate.js b/modules/invoiceIn/back/methods/invoice-in/exchangeRateUpdate.js new file mode 100644 index 000000000..3ad06b242 --- /dev/null +++ b/modules/invoiceIn/back/methods/invoice-in/exchangeRateUpdate.js @@ -0,0 +1,64 @@ +const axios = require('axios'); +const {DOMParser} = require('xmldom'); +const UserError = require('vn-loopback/util/user-error'); + +module.exports = Self => { + Self.remoteMethod('exchangeRateUpdate', { + description: 'Updates the exchange rates from an XML feed', + accessType: 'WRITE', + accepts: [], + http: { + path: '/exchangeRateUpdate', + verb: 'post' + } + }); + + Self.exchangeRateUpdate = async() => { + const response = await axios.get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'); + const xmlData = response.data; + + const doc = new DOMParser({errorHandler: {warning: () => {}}})?.parseFromString(xmlData, 'text/xml'); + const cubes = doc?.getElementsByTagName('Cube'); + if (!cubes || cubes.length === 0) + throw new UserError('No cubes found. Exiting the method.'); + + const models = Self.app.models; + + const maxDateRecord = await models.ReferenceRate.findOne({order: 'dated DESC'}); + + const maxDate = maxDateRecord?.dated ? new Date(maxDateRecord.dated) : null; + + for (const cube of Array.from(cubes)) { + if (cube.nodeType === doc.ELEMENT_NODE && cube.attributes.getNamedItem('time')) { + const xmlDate = new Date(cube.getAttribute('time')); + const xmlDateWithoutTime = new Date(xmlDate.getFullYear(), xmlDate.getMonth(), xmlDate.getDate()); + if (!maxDate || maxDate < xmlDateWithoutTime) { + for (const rateCube of Array.from(cube.childNodes)) { + if (rateCube.nodeType === doc.ELEMENT_NODE) { + const currencyCode = rateCube.getAttribute('currency'); + const rate = rateCube.getAttribute('rate'); + if (['USD', 'CNY', 'GBP'].includes(currencyCode)) { + const currency = await models.Currency.findOne({where: {code: currencyCode}}); + if (!currency) throw new UserError(`Currency not found for code: ${currencyCode}`); + const existingRate = await models.ReferenceRate.findOne({ + where: {currencyFk: currency.id, dated: xmlDate} + }); + + if (existingRate) { + if (existingRate.value !== rate) + await existingRate.updateAttributes({value: rate}); + } else { + await models.ReferenceRate.create({ + currencyFk: currency.id, + dated: xmlDate, + value: rate + }); + } + } + } + } + } + } + } + }; +}; diff --git a/modules/invoiceIn/back/methods/invoice-in/specs/exchangeRateUpdate.spec.js b/modules/invoiceIn/back/methods/invoice-in/specs/exchangeRateUpdate.spec.js new file mode 100644 index 000000000..0fd7ea165 --- /dev/null +++ b/modules/invoiceIn/back/methods/invoice-in/specs/exchangeRateUpdate.spec.js @@ -0,0 +1,52 @@ +describe('exchangeRateUpdate functionality', function() { + const axios = require('axios'); + const models = require('vn-loopback/server/server').models; + + beforeEach(function() { + spyOn(axios, 'get').and.returnValue(Promise.resolve({ + data: ` + + + + + ` + })); + }); + + it('should process XML data and update or create rates in the database', async function() { + spyOn(models.ReferenceRate, 'findOne').and.returnValue(Promise.resolve(null)); + spyOn(models.ReferenceRate, 'create').and.returnValue(Promise.resolve()); + + await models.InvoiceIn.exchangeRateUpdate(); + + expect(models.ReferenceRate.create).toHaveBeenCalledTimes(2); + }); + + it('should not create or update rates when no XML data is available', async function() { + axios.get.and.returnValue(Promise.resolve({})); + spyOn(models.ReferenceRate, 'create'); + + let thrownError = null; + try { + await models.InvoiceIn.exchangeRateUpdate(); + } catch (error) { + thrownError = error; + } + + expect(thrownError.message).toBe('No cubes found. Exiting the method.'); + }); + + it('should handle errors gracefully', async function() { + axios.get.and.returnValue(Promise.reject(new Error('Network error'))); + let error; + + try { + await models.InvoiceIn.exchangeRateUpdate(); + } catch (e) { + error = e; + } + + expect(error).toBeDefined(); + expect(error.message).toBe('Network error'); + }); +}); diff --git a/modules/invoiceIn/back/methods/invoice-in/specs/filter.spec.js b/modules/invoiceIn/back/methods/invoice-in/specs/filter.spec.js index 3ff5a92f3..ff2164783 100644 --- a/modules/invoiceIn/back/methods/invoice-in/specs/filter.spec.js +++ b/modules/invoiceIn/back/methods/invoice-in/specs/filter.spec.js @@ -158,7 +158,7 @@ describe('InvoiceIn filter()', () => { const result = await models.InvoiceIn.filter(ctx, {}, options); - expect(result.length).toEqual(4); + expect(result.length).toEqual(5); await tx.rollback(); } catch (e) { @@ -180,7 +180,7 @@ describe('InvoiceIn filter()', () => { const result = await models.InvoiceIn.filter(ctx, {}, options); - expect(result.length).toEqual(6); + expect(result.length).toEqual(5); expect(result[0].isBooked).toBeTruthy(); await tx.rollback(); diff --git a/modules/invoiceIn/back/models/invoice-in.js b/modules/invoiceIn/back/models/invoice-in.js index af5efbcdf..31cdc1abe 100644 --- a/modules/invoiceIn/back/models/invoice-in.js +++ b/modules/invoiceIn/back/models/invoice-in.js @@ -10,6 +10,7 @@ module.exports = Self => { require('../methods/invoice-in/invoiceInEmail')(Self); require('../methods/invoice-in/getSerial')(Self); require('../methods/invoice-in/corrective')(Self); + require('../methods/invoice-in/exchangeRateUpdate')(Self); Self.rewriteDbError(function(err) { if (err.code === 'ER_ROW_IS_REFERENCED_2' && err.sqlMessage.includes('vehicleInvoiceIn')) diff --git a/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js index 043dfbead..c46da0ba5 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js +++ b/modules/invoiceOut/back/methods/invoiceOut/createManualInvoice.js @@ -46,12 +46,11 @@ module.exports = Self => { } }); - Self.createManualInvoice = async(ctx, options) => { + Self.createManualInvoice = async(ctx, clientFk, ticketFk, maxShipped, serial, taxArea, reference, options) => { + if (!clientFk && !ticketFk) throw new UserError(`Select ticket or client`); const models = Self.app.models; - const args = ctx.args; - - let tx; const myOptions = {userId: ctx.req.accessToken.userId}; + let tx; if (typeof options == 'object') Object.assign(myOptions, options); @@ -61,18 +60,15 @@ module.exports = Self => { myOptions.transaction = tx; } - const ticketId = args.ticketFk; - let clientId = args.clientFk; - let maxShipped = args.maxShipped; let companyId; let newInvoice; let query; try { - if (ticketId) { - const ticket = await models.Ticket.findById(ticketId, null, myOptions); + if (ticketFk) { + const ticket = await models.Ticket.findById(ticketFk, null, myOptions); const company = await models.Company.findById(ticket.companyFk, null, myOptions); - clientId = ticket.clientFk; + clientFk = ticket.clientFk; maxShipped = ticket.shipped; companyId = ticket.companyFk; @@ -85,7 +81,7 @@ module.exports = Self => { throw new UserError(`A ticket with an amount of zero can't be invoiced`); // Validates ticket nagative base - const hasNegativeBase = await getNegativeBase(maxShipped, clientId, companyId, myOptions); + const hasNegativeBase = await getNegativeBase(maxShipped, clientFk, companyId, myOptions); if (hasNegativeBase && company.code == 'VNL') throw new UserError(`A ticket with a negative base can't be invoiced`); } else { @@ -95,7 +91,7 @@ module.exports = Self => { const company = await models.Ticket.findOne({ fields: ['companyFk'], where: { - clientFk: clientId, + clientFk: clientFk, shipped: {lte: maxShipped} } }, myOptions); @@ -103,7 +99,7 @@ module.exports = Self => { } // Validate invoiceable client - const isClientInvoiceable = await isInvoiceable(clientId, myOptions); + const isClientInvoiceable = await isInvoiceable(clientFk, myOptions); if (!isClientInvoiceable) throw new UserError(`This client is not invoiceable`); @@ -114,27 +110,27 @@ module.exports = Self => { if (maxShipped >= tomorrow) throw new UserError(`Can't invoice to future`); - const maxInvoiceDate = await getMaxIssued(args.serial, companyId, myOptions); + const maxInvoiceDate = await getMaxIssued(serial, companyId, myOptions); if (Date.vnNew() < maxInvoiceDate) throw new UserError(`Can't invoice to past`); - if (ticketId) { + if (ticketFk) { query = `CALL invoiceOut_newFromTicket(?, ?, ?, ?, @newInvoiceId)`; await Self.rawSql(query, [ - ticketId, - args.serial, - args.taxArea, - args.reference + ticketFk, + serial, + taxArea, + reference ], myOptions); } else { query = `CALL invoiceOut_newFromClient(?, ?, ?, ?, ?, ?, @newInvoiceId)`; await Self.rawSql(query, [ - clientId, - args.serial, + clientFk, + serial, maxShipped, companyId, - args.taxArea, - args.reference + taxArea, + reference ], myOptions); } @@ -146,26 +142,27 @@ module.exports = Self => { throw e; } - if (newInvoice.id) - await Self.createPdf(ctx, newInvoice.id); + if (!newInvoice.id) throw new UserError('It was not able to create the invoice'); + + await Self.createPdf(ctx, newInvoice.id); return newInvoice; }; - async function isInvoiceable(clientId, options) { + async function isInvoiceable(clientFk, options) { const models = Self.app.models; const query = `SELECT (hasToInvoice AND isTaxDataChecked) AS invoiceable FROM client WHERE id = ?`; - const [result] = await models.InvoiceOut.rawSql(query, [clientId], options); + const [result] = await models.InvoiceOut.rawSql(query, [clientFk], options); return result.invoiceable; } - async function getNegativeBase(maxShipped, clientId, companyId, options) { + async function getNegativeBase(maxShipped, clientFk, companyId, options) { const models = Self.app.models; await models.InvoiceOut.rawSql('CALL invoiceOut_exportationFromClient(?,?,?)', - [maxShipped, clientId, companyId], options + [maxShipped, clientFk, companyId], options ); const query = 'SELECT vn.hasAnyNegativeBase() AS base'; const [result] = await models.InvoiceOut.rawSql(query, [], options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/negativeBases.js b/modules/invoiceOut/back/methods/invoiceOut/negativeBases.js index 66440616c..fc8830885 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/negativeBases.js +++ b/modules/invoiceOut/back/methods/invoiceOut/negativeBases.js @@ -70,7 +70,7 @@ module.exports = Self => { c.hasToInvoice, c.isTaxDataChecked, w.id comercialId, - CONCAT(w.firstName, ' ', w.lastName) comercialName + u.name workerName FROM vn.ticket t JOIN vn.company co ON co.id = t.companyFk JOIN vn.sale s ON s.ticketFk = t.id diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js index b166caf78..55739e570 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js +++ b/modules/invoiceOut/back/methods/invoiceOut/specs/createManualInvoice.spec.js @@ -1,13 +1,10 @@ -const models = require('vn-loopback/server/server').models; +const {models} = require('vn-loopback/server/server'); const LoopBackContext = require('loopback-context'); describe('InvoiceOut createManualInvoice()', () => { - const userId = 1; const ticketId = 16; const clientId = 1106; - const activeCtx = { - accessToken: {userId: userId}, - }; + const activeCtx = {accessToken: {userId: 1}}; const ctx = {req: activeCtx}; it('should throw an error trying to invoice again', async() => { @@ -18,13 +15,8 @@ describe('InvoiceOut createManualInvoice()', () => { let error; try { - ctx.args = { - ticketFk: ticketId, - serial: 'T', - taxArea: 'CEE' - }; - await models.InvoiceOut.createManualInvoice(ctx, options); - await models.InvoiceOut.createManualInvoice(ctx, options); + await createInvoice(ctx, options, undefined, ticketId); + await createInvoice(ctx, options, undefined, ticketId); await tx.rollback(); } catch (e) { @@ -47,17 +39,9 @@ describe('InvoiceOut createManualInvoice()', () => { let error; try { const ticket = await models.Ticket.findById(ticketId, null, options); - await ticket.updateAttributes({ - totalWithVat: 0 - }, options); - - ctx.args = { - ticketFk: ticketId, - serial: 'T', - taxArea: 'CEE' - }; - await models.InvoiceOut.createManualInvoice(ctx, options); + await ticket.updateAttributes({totalWithVat: 0}, options); + await createInvoice(ctx, options, undefined, ticketId); await tx.rollback(); } catch (e) { error = e; @@ -75,13 +59,7 @@ describe('InvoiceOut createManualInvoice()', () => { let error; try { - ctx.args = { - clientFk: clientId, - serial: 'T', - taxArea: 'CEE' - }; - await models.InvoiceOut.createManualInvoice(ctx, options); - + await createInvoice(ctx, options, clientId); await tx.rollback(); } catch (e) { error = e; @@ -103,16 +81,9 @@ describe('InvoiceOut createManualInvoice()', () => { let error; try { const client = await models.Client.findById(clientId, null, options); - await client.updateAttributes({ - isTaxDataChecked: false - }, options); + await client.updateAttributes({isTaxDataChecked: false}, options); - ctx.args = { - ticketFk: ticketId, - serial: 'T', - taxArea: 'CEE' - }; - await models.InvoiceOut.createManualInvoice(ctx, options); + await createInvoice(ctx, options, undefined, ticketId); await tx.rollback(); } catch (e) { @@ -130,12 +101,7 @@ describe('InvoiceOut createManualInvoice()', () => { const options = {transaction: tx}; try { - ctx.args = { - ticketFk: ticketId, - serial: 'T', - taxArea: 'CEE' - }; - const result = await models.InvoiceOut.createManualInvoice(ctx, options); + const result = await createInvoice(ctx, options, undefined, ticketId); expect(result.id).toEqual(jasmine.any(Number)); @@ -146,3 +112,18 @@ describe('InvoiceOut createManualInvoice()', () => { } }); }); + +function createInvoice( + ctx, + options, + clientFk = undefined, + ticketFk = undefined, + maxShipped = undefined, + serial = 'T', + taxArea = 'CEE', + reference = undefined +) { + return models.InvoiceOut.createManualInvoice( + ctx, clientFk, ticketFk, maxShipped, serial, taxArea, reference, options + ); +} diff --git a/modules/invoiceOut/back/models/cplus-rectification-type.json b/modules/invoiceOut/back/models/cplus-rectification-type.json index e7bfb957f..06a57ea67 100644 --- a/modules/invoiceOut/back/models/cplus-rectification-type.json +++ b/modules/invoiceOut/back/models/cplus-rectification-type.json @@ -15,5 +15,13 @@ "description": { "type": "string" } - } + }, + "acls": [ + { + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + } + ] } \ No newline at end of file diff --git a/modules/invoiceOut/front/negative-bases/index.html b/modules/invoiceOut/front/negative-bases/index.html index 26f67c7d4..499b6bfe0 100644 --- a/modules/invoiceOut/front/negative-bases/index.html +++ b/modules/invoiceOut/front/negative-bases/index.html @@ -114,7 +114,7 @@ - {{::client.comercialName | dashIfEmpty}} + {{::client.workerName | dashIfEmpty}} diff --git a/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js b/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js index 8615b7b86..2dd43224c 100644 --- a/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js +++ b/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js @@ -1,18 +1,17 @@ -const { models } = require('vn-loopback/server/server'); +const {models} = require('vn-loopback/server/server'); const LoopBackContext = require('loopback-context'); -// #6276 describe('ItemShelving upsertItem()', () => { const warehouseFk = 1; let ctx; let options; let tx; - beforeEach(async () => { + beforeEach(async() => { ctx = { req: { - accessToken: { userId: 9 }, - headers: { origin: 'http://localhost' } + accessToken: {userId: 9}, + headers: {origin: 'http://localhost'} }, args: {} }; @@ -21,35 +20,35 @@ describe('ItemShelving upsertItem()', () => { active: ctx.req }); - options = { transaction: tx }; + options = {transaction: tx}; tx = await models.ItemShelving.beginTransaction({}); options.transaction = tx; }); - afterEach(async () => { + afterEach(async() => { await tx.rollback(); }); - it('should add two new records', async () => { - const shelvingFk = 'ZPP'; + it('should add two new records', async() => { + const shelvingFk = 'GVC'; const items = [1, 1, 1, 2]; await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); - const itemShelvings = await models.ItemShelving.find({ where: { shelvingFk } }, options); + const itemShelvings = await models.ItemShelving.find({where: {shelvingFk}}, options); expect(itemShelvings.length).toEqual(2); }); - it('should update the visible items', async () => { + it('should update the visible items', async() => { const shelvingFk = 'GVC'; const items = [2, 2]; - const { visible: visibleItemsBefore } = await models.ItemShelving.findOne({ - where: { shelvingFk, itemFk: items[0] } + const {visible: visibleItemsBefore} = await models.ItemShelving.findOne({ + where: {shelvingFk, itemFk: items[0]} }, options); await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); - const { visible: visibleItemsAfter } = await models.ItemShelving.findOne({ - where: { shelvingFk, itemFk: items[0] } + const {visible: visibleItemsAfter} = await models.ItemShelving.findOne({ + where: {shelvingFk, itemFk: items[0]} }, options); expect(visibleItemsAfter).toEqual(visibleItemsBefore + 2); diff --git a/modules/item/back/methods/item/getBalance.js b/modules/item/back/methods/item/getBalance.js index d4e2d0f74..207f8020f 100644 --- a/modules/item/back/methods/item/getBalance.js +++ b/modules/item/back/methods/item/getBalance.js @@ -27,8 +27,11 @@ module.exports = Self => { const where = filter.where; const query = 'CALL vn.item_getBalance(?, ?, ?)'; + if (where?.date) { + where.date = new Date(where.date); + where.date.setHours(0, 0, 0, 0); + } const [diary] = await Self.rawSql(query, [where.itemFk, where.warehouseFk, where.date], myOptions); - for (const entry of diary) if (entry.clientType === 'loses') entry.highlighted = true; diff --git a/modules/route/back/methods/route/getExpeditionSummary.js b/modules/route/back/methods/route/getExpeditionSummary.js index ee89401a8..2bd2ca43a 100644 --- a/modules/route/back/methods/route/getExpeditionSummary.js +++ b/modules/route/back/methods/route/getExpeditionSummary.js @@ -49,8 +49,7 @@ module.exports = Self => { JOIN vn.agencyMode am ON am.id = r.agencyModeFk JOIN vn.agency ag ON ag.id = am.agencyFk LEFT JOIN vn.userConfig uc ON uc.userFk = account.myUser_getId() - WHERE (r.created = util.VN_CURDATE() OR r.created = util.yesterday()) - AND t.routeFk = ? + WHERE t.routeFk = ? GROUP BY t.addressFk, e.itemPackingTypeFk ) sub GROUP BY addressFk diff --git a/modules/route/back/methods/route/getTickets.js b/modules/route/back/methods/route/getTickets.js index 2393018cf..0e7c9fe20 100644 --- a/modules/route/back/methods/route/getTickets.js +++ b/modules/route/back/methods/route/getTickets.js @@ -33,54 +33,54 @@ module.exports = Self => { const stmt = new ParameterizedSQL( `SELECT - t.id, - t.packages, - t.warehouseFk, - t.nickname, - t.clientFk, - t.priority, - t.addressFk, - st.code ticketStateCode, - st.name ticketStateName, - wh.name warehouseName, - tob.description observationDelivery, - tob2.description observationDropOff, - tob2.id, - a.street, - a.postalCode, - a.city, - am.name agencyModeName, - u.nickname userNickname, - vn.ticketTotalVolume(t.id) volume, - GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt, - c.phone clientPhone, - c.mobile clientMobile, - a.phone addressPhone, - a.mobile addressMobile, - a.longitude, - a.latitude, - wm.mediaValue salePersonPhone, - t.cmrFk, - t.isSigned signed - FROM vn.route r - JOIN ticket t ON t.routeFk = r.id - JOIN client c ON t.clientFk = c.id - LEFT JOIN vn.sale s ON s.ticketFk = t.id - LEFT JOIN vn.item i ON i.id = s.itemFk - LEFT JOIN ticketState ts ON ts.ticketFk = t.id - LEFT JOIN state st ON st.id = ts.stateFk - LEFT JOIN warehouse wh ON wh.id = t.warehouseFk - LEFT JOIN observationType ot ON ot.code = 'delivery' - LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id - AND tob.observationTypeFk = ot.id - LEFT JOIN observationType ot2 ON ot2.code = 'dropOff' - LEFT JOIN ticketObservation tob2 ON tob2.ticketFk = t.id - AND tob2.observationTypeFk = ot2.id - LEFT JOIN address a ON a.id = t.addressFk - LEFT JOIN agencyMode am ON am.id = t.agencyModeFk - LEFT JOIN account.user u ON u.id = r.workerFk - LEFT JOIN vehicle v ON v.id = r.vehicleFk - LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk` + t.id, + t.packages, + t.warehouseFk, + t.nickname, + t.clientFk, + t.priority, + t.addressFk, + st.code ticketStateCode, + st.name ticketStateName, + wh.name warehouseName, + tob.description observationDelivery, + tob2.description observationDropOff, + tob2.id observationId, + a.street, + a.postalCode, + a.city, + am.name agencyModeName, + u.nickname userNickname, + vn.ticketTotalVolume(t.id) volume, + GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt, + c.phone clientPhone, + c.mobile clientMobile, + a.phone addressPhone, + a.mobile addressMobile, + a.longitude, + a.latitude, + wm.mediaValue salePersonPhone, + t.cmrFk, + t.isSigned signed + FROM vn.route r + JOIN ticket t ON t.routeFk = r.id + JOIN client c ON t.clientFk = c.id + LEFT JOIN vn.sale s ON s.ticketFk = t.id + LEFT JOIN vn.item i ON i.id = s.itemFk + LEFT JOIN ticketState ts ON ts.ticketFk = t.id + LEFT JOIN state st ON st.id = ts.stateFk + LEFT JOIN warehouse wh ON wh.id = t.warehouseFk + LEFT JOIN observationType ot ON ot.code = 'delivery' + LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id + AND tob.observationTypeFk = ot.id + LEFT JOIN observationType ot2 ON ot2.code = 'dropOff' + LEFT JOIN ticketObservation tob2 ON tob2.ticketFk = t.id + AND tob2.observationTypeFk = ot2.id + LEFT JOIN address a ON a.id = t.addressFk + LEFT JOIN agencyMode am ON am.id = t.agencyModeFk + LEFT JOIN account.user u ON u.id = r.workerFk + LEFT JOIN vehicle v ON v.id = r.vehicleFk + LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk` ); if (!filter.where) filter.where = {}; diff --git a/modules/shelving/front/basic-data/index.html b/modules/shelving/front/basic-data/index.html deleted file mode 100644 index 68d61e169..000000000 --- a/modules/shelving/front/basic-data/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/modules/shelving/front/basic-data/index.js b/modules/shelving/front/basic-data/index.js deleted file mode 100644 index e17c9feee..000000000 --- a/modules/shelving/front/basic-data/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; - -ngModule.vnComponent('vnShelvingBasicData', { - template: require('./index.html'), - controller: Section, - bindings: { - shelving: '<' - } -}); diff --git a/modules/shelving/front/card/index.html b/modules/shelving/front/card/index.html deleted file mode 100644 index c83afc288..000000000 --- a/modules/shelving/front/card/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/modules/shelving/front/card/index.js b/modules/shelving/front/card/index.js deleted file mode 100644 index 4f571d876..000000000 --- a/modules/shelving/front/card/index.js +++ /dev/null @@ -1,29 +0,0 @@ -import ngModule from '../module'; -import ModuleCard from 'salix/components/module-card'; - -class Controller extends ModuleCard { - reload() { - const filter = { - include: [ - {relation: 'worker', - scope: { - fields: ['id'], - include: { - relation: 'user', - scope: { - fields: ['nickname'] - } - } - }}, - {relation: 'parking'} - ] - }; - this.$http.get(`Shelvings/${this.$params.id}`, {filter}) - .then(res => this.shelving = res.data); - } -} - -ngModule.vnComponent('vnShelvingCard', { - template: require('./index.html'), - controller: Controller -}); diff --git a/modules/shelving/front/card/index.spec.js b/modules/shelving/front/card/index.spec.js deleted file mode 100644 index 85b1bd269..000000000 --- a/modules/shelving/front/card/index.spec.js +++ /dev/null @@ -1,26 +0,0 @@ -import './index'; - -describe('component vnShelvingCard', () => { - let controller; - let $httpBackend; - const data = {id: 1, code: 'AAA'}; - - beforeEach(ngModule('shelving')); - - beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => { - $httpBackend = _$httpBackend_; - - let $element = angular.element('
'); - controller = $componentController('vnShelvingCard', {$element}); - - $stateParams.id = data.id; - $httpBackend.whenRoute('GET', 'Shelvings/:id').respond(data); - })); - - it('should reload the controller data', () => { - controller.reload(); - $httpBackend.flush(); - - expect(controller.shelving).toEqual(data); - }); -}); diff --git a/modules/shelving/front/create/index.html b/modules/shelving/front/create/index.html deleted file mode 100644 index edb3a7d3b..000000000 --- a/modules/shelving/front/create/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/modules/shelving/front/create/index.js b/modules/shelving/front/create/index.js deleted file mode 100644 index bb0e441eb..000000000 --- a/modules/shelving/front/create/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; - -export default class Controller extends Section { - onSubmit() { - return this.$.watcher.submit().then(res => - this.$state.go('shelving.card.basicData', {id: res.data.id}) - ); - } -} - -ngModule.vnComponent('vnShelvingCreate', { - template: require('./index.html'), - controller: Controller -}); diff --git a/modules/shelving/front/create/index.spec.js b/modules/shelving/front/create/index.spec.js deleted file mode 100644 index 0bdde9145..000000000 --- a/modules/shelving/front/create/index.spec.js +++ /dev/null @@ -1,38 +0,0 @@ -import './index'; - -describe('Shelving', () => { - describe('Component vnShelvingCreate', () => { - let $scope; - let $state; - let controller; - - beforeEach(ngModule('shelving')); - - beforeEach(inject(($componentController, $rootScope, _$state_) => { - $scope = $rootScope.$new(); - $state = _$state_; - $scope.watcher = { - submit: () => { - return { - then: callback => { - callback({data: {id: 1}}); - } - }; - } - }; - const $element = angular.element(''); - controller = $componentController('vnShelvingCreate', {$element, $scope}); - controller.$params = {}; - })); - - describe('onSubmit()', () => { - it(`should redirect to basic data by calling the $state.go function`, () => { - jest.spyOn(controller.$state, 'go'); - - controller.onSubmit(); - - expect(controller.$state.go).toHaveBeenCalledWith('shelving.card.basicData', {id: 1}); - }); - }); - }); -}); diff --git a/modules/shelving/front/descriptor/index.html b/modules/shelving/front/descriptor/index.html deleted file mode 100644 index 53dd37258..000000000 --- a/modules/shelving/front/descriptor/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - Delete shelving - - - -
- - - - - - - {{::$ctrl.shelving.worker.user.nickname}} - - -
-
-
- - - - - - - diff --git a/modules/shelving/front/descriptor/index.js b/modules/shelving/front/descriptor/index.js deleted file mode 100644 index 931dbb6dc..000000000 --- a/modules/shelving/front/descriptor/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import ngModule from '../module'; -import Descriptor from 'salix/components/descriptor'; - -class Controller extends Descriptor { - get shelving() { - return this.entity; - } - - set shelving(value) { - this.entity = value; - } - - onDelete() { - return this.$http.delete(`Shelvings/${this.shelving.id}`) - .then(() => this.$state.go('shelving.index')) - .then(() => this.vnApp.showSuccess(this.$t('Shelving removed'))); - } -} - -ngModule.vnComponent('vnShelvingDescriptor', { - template: require('./index.html'), - controller: Controller, - bindings: { - shelving: '<' - } -}); diff --git a/modules/shelving/front/descriptor/index.spec.js b/modules/shelving/front/descriptor/index.spec.js deleted file mode 100644 index 3ee33580b..000000000 --- a/modules/shelving/front/descriptor/index.spec.js +++ /dev/null @@ -1,29 +0,0 @@ -import './index.js'; - -describe('component vnShelvingDescriptor', () => { - let $httpBackend; - let controller; - - const shelving = {id: 1, code: 'AA6'}; - - beforeEach(ngModule('shelving')); - - beforeEach(inject(($componentController, _$httpBackend_, _$httpParamSerializer_) => { - $httpBackend = _$httpBackend_; - controller = $componentController('vnShelvingDescriptor', {$element: null}, {shelving}); - jest.spyOn(controller.vnApp, 'showSuccess'); - })); - - describe('onDelete()', () => { - it('should delete entity and go to index', () => { - controller.$state.go = jest.fn(); - - $httpBackend.expectDELETE('Shelvings/1').respond(); - controller.onDelete(); - $httpBackend.flush(); - - expect(controller.$state.go).toHaveBeenCalledWith('shelving.index'); - expect(controller.vnApp.showSuccess).toHaveBeenCalled(); - }); - }); -}); diff --git a/modules/shelving/front/descriptor/locale/es.yml b/modules/shelving/front/descriptor/locale/es.yml deleted file mode 100644 index e7fafc320..000000000 --- a/modules/shelving/front/descriptor/locale/es.yml +++ /dev/null @@ -1,3 +0,0 @@ -Delete shelving: Eliminar carro -Shelving will be removed: El carro será eliminado -Shelving removed: Carro eliminado diff --git a/modules/shelving/front/index.js b/modules/shelving/front/index.js index 2ad9bc1b9..a7209a0bd 100644 --- a/modules/shelving/front/index.js +++ b/modules/shelving/front/index.js @@ -1,11 +1,3 @@ export * from './module'; -import './basic-data'; -import './card'; -import './create'; -import './descriptor'; -import './index/'; import './main'; -import './search-panel'; -import './summary'; -import './log'; diff --git a/modules/shelving/front/index/index.html b/modules/shelving/front/index/index.html deleted file mode 100644 index 1532abd42..000000000 --- a/modules/shelving/front/index/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/shelving/front/index/index.js b/modules/shelving/front/index/index.js deleted file mode 100644 index 04d8ea9cd..000000000 --- a/modules/shelving/front/index/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; - -export default class Controller extends Section { - preview(shelving) { - this.selectedShelving = shelving; - this.$.summary.show(); - } -} - -ngModule.vnComponent('vnShelvingIndex', { - template: require('./index.html'), - controller: Controller -}); diff --git a/modules/shelving/front/index/index.spec.js b/modules/shelving/front/index/index.spec.js deleted file mode 100644 index aad79fb0e..000000000 --- a/modules/shelving/front/index/index.spec.js +++ /dev/null @@ -1,39 +0,0 @@ -import './index.js'; -describe('Component vnShelvingIndex', () => { - let controller; - let $window; - let shelvings = [{ - id: 1, - code: 'AAA' - }, { - id: 2, - code: 'AA1' - }, { - id: 3, - code: 'AA2' - }]; - - beforeEach(ngModule('shelving')); - - beforeEach(inject(($componentController, _$window_) => { - $window = _$window_; - const $element = angular.element(''); - controller = $componentController('vnShelvingIndex', {$element}); - })); - - describe('preview()', () => { - it('should show the dialog summary', () => { - controller.$.summary = {show: () => {}}; - jest.spyOn(controller.$.summary, 'show'); - - let event = new MouseEvent('click', { - view: $window, - bubbles: true, - cancelable: true - }); - controller.preview(event, shelvings[0]); - - expect(controller.$.summary.show).toHaveBeenCalledWith(); - }); - }); -}); diff --git a/modules/shelving/front/index/locale/es.yml b/modules/shelving/front/index/locale/es.yml deleted file mode 100644 index 4d30f4cee..000000000 --- a/modules/shelving/front/index/locale/es.yml +++ /dev/null @@ -1,2 +0,0 @@ -Parking: Parking -Priority: Prioridad \ No newline at end of file diff --git a/modules/shelving/front/log/index.html b/modules/shelving/front/log/index.html deleted file mode 100644 index 8f0e6851c..000000000 --- a/modules/shelving/front/log/index.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/shelving/front/log/index.js b/modules/shelving/front/log/index.js deleted file mode 100644 index 588e0995a..000000000 --- a/modules/shelving/front/log/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; - -ngModule.vnComponent('vnShelvingLog', { - template: require('./index.html'), - controller: Section, -}); diff --git a/modules/shelving/front/log/locale/es.yml b/modules/shelving/front/log/locale/es.yml deleted file mode 100644 index c572b78d1..000000000 --- a/modules/shelving/front/log/locale/es.yml +++ /dev/null @@ -1 +0,0 @@ -Changed by: Cambiado por \ No newline at end of file diff --git a/modules/shelving/front/main/index.html b/modules/shelving/front/main/index.html index 3f3cc718b..e69de29bb 100644 --- a/modules/shelving/front/main/index.html +++ b/modules/shelving/front/main/index.html @@ -1,19 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/modules/shelving/front/main/index.js b/modules/shelving/front/main/index.js index 96689fbd9..4e45a7dd3 100644 --- a/modules/shelving/front/main/index.js +++ b/modules/shelving/front/main/index.js @@ -4,22 +4,10 @@ import ModuleMain from 'salix/components/module-main'; export default class Shelving extends ModuleMain { constructor($element, $) { super($element, $); - this.filter = { - include: [ - {relation: 'parking'} - ], - }; } - - exprBuilder(param, value) { - switch (param) { - case 'search': - return {code: {like: `%${value}%`}}; - case 'parkingFk': - case 'userFk': - case 'isRecyclable': - return {[param]: value}; - } + async $onInit() { + this.$state.go('home'); + window.location.href = await this.vnApp.getUrl(`shelving/`); } } diff --git a/modules/shelving/front/main/index.spec.js b/modules/shelving/front/main/index.spec.js deleted file mode 100644 index dcfa912bc..000000000 --- a/modules/shelving/front/main/index.spec.js +++ /dev/null @@ -1,19 +0,0 @@ -import './index'; - -describe('component vnShelving', () => { - let controller; - - beforeEach(ngModule('shelving')); - - beforeEach(inject($componentController => { - controller = $componentController('vnShelving', {$element: null}); - })); - - describe('exprBuilder()', () => { - it('should search by code', () => { - let expr = controller.exprBuilder('search', 'UXN'); - - expect(expr).toEqual({code: {like: '%UXN%'}},); - }); - }); -}); diff --git a/modules/shelving/front/routes.json b/modules/shelving/front/routes.json index 4059e5095..7f6408cad 100644 --- a/modules/shelving/front/routes.json +++ b/modules/shelving/front/routes.json @@ -26,42 +26,6 @@ "state": "shelving.index", "component": "vn-shelving-index", "description": "Shelvings" - }, - { - "url": "/create", - "state": "shelving.create", - "component": "vn-shelving-create", - "description": "New shelving" - }, - { - "url": "/:id", - "state": "shelving.card", - "abstract": true, - "component": "vn-shelving-card" - }, - { - "url": "/summary", - "state": "shelving.card.summary", - "component": "vn-shelving-summary", - "description": "Summary", - "params": { - "shelving": "$ctrl.shelving" - } - }, - { - "url": "/basic-data", - "state": "shelving.card.basicData", - "component": "vn-shelving-basic-data", - "description": "Basic data", - "params": { - "shelving": "$ctrl.shelving" - } - }, - { - "url" : "/log", - "state": "shelving.card.log", - "component": "vn-shelving-log", - "description": "Log" } ] } diff --git a/modules/shelving/front/search-panel/index.html b/modules/shelving/front/search-panel/index.html deleted file mode 100644 index b7ca068a5..000000000 --- a/modules/shelving/front/search-panel/index.html +++ /dev/null @@ -1,43 +0,0 @@ -
-
- - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff --git a/modules/shelving/front/search-panel/index.js b/modules/shelving/front/search-panel/index.js deleted file mode 100644 index 51b81538b..000000000 --- a/modules/shelving/front/search-panel/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import ngModule from '../module'; -import SearchPanel from 'core/components/searchbar/search-panel'; - -ngModule.vnComponent('vnShelvingSearchPanel', { - template: require('./index.html'), - controller: SearchPanel -}); diff --git a/modules/shelving/front/search-panel/locale/es.yml b/modules/shelving/front/search-panel/locale/es.yml deleted file mode 100644 index bd19b1b33..000000000 --- a/modules/shelving/front/search-panel/locale/es.yml +++ /dev/null @@ -1 +0,0 @@ -Search shelvings by code: Busca carros por código \ No newline at end of file diff --git a/modules/shelving/front/summary/index.html b/modules/shelving/front/summary/index.html deleted file mode 100644 index 61e44d278..000000000 --- a/modules/shelving/front/summary/index.html +++ /dev/null @@ -1,51 +0,0 @@ - -
- - - - {{::$ctrl.summary.code}} -
- - -

- - Basic data - -

- - - - - - - - - - {{$ctrl.summary.worker.user.nickname}} - - - - - -
-
-
- - \ No newline at end of file diff --git a/modules/shelving/front/summary/index.js b/modules/shelving/front/summary/index.js deleted file mode 100644 index 91f8e2aa7..000000000 --- a/modules/shelving/front/summary/index.js +++ /dev/null @@ -1,41 +0,0 @@ -import ngModule from '../module'; -import Summary from 'salix/components/summary'; -import './style.scss'; - -class Controller extends Summary { - set shelving(value) { - this._shelving = value; - this.summary = null; - if (!value) return; - - const filter = { - include: [ - {relation: 'worker', - scope: { - fields: ['id'], - include: { - relation: 'user', - scope: { - fields: ['nickname'] - } - } - }}, - {relation: 'parking'} - ] - }; - this.$http.get(`Shelvings/${value.id}`, {filter}) - .then(res => this.summary = res.data); - } - - get shelving() { - return this._shelving; - } -} - -ngModule.vnComponent('vnShelvingSummary', { - template: require('./index.html'), - controller: Controller, - bindings: { - shelving: '<' - } -}); diff --git a/modules/shelving/front/summary/locale/es.yml b/modules/shelving/front/summary/locale/es.yml deleted file mode 100644 index d5d14d52a..000000000 --- a/modules/shelving/front/summary/locale/es.yml +++ /dev/null @@ -1,5 +0,0 @@ -Code: Código -Parking: Parking -Priority: Prioridad -Worker: Trabajador -Recyclable: Reciclable \ No newline at end of file diff --git a/modules/shelving/front/summary/style.scss b/modules/shelving/front/summary/style.scss deleted file mode 100644 index 1eb6b2323..000000000 --- a/modules/shelving/front/summary/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import "variables"; - -vn-client-summary { - .alert span { - color: $color-alert - } -} \ No newline at end of file diff --git a/modules/ticket/back/methods/ticket-request/filter.js b/modules/ticket/back/methods/ticket-request/filter.js index 10aaf02e5..5364cef9a 100644 --- a/modules/ticket/back/methods/ticket-request/filter.js +++ b/modules/ticket/back/methods/ticket-request/filter.js @@ -1,4 +1,3 @@ - const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; const buildFilter = require('vn-loopback/util/filter').buildFilter; const mergeFilters = require('vn-loopback/util/filter').mergeFilters; @@ -135,7 +134,8 @@ module.exports = Self => { tr.requesterFk, tr.isOk, s.quantity saleQuantity, - s.itemFk, + s.itemFk saleItemFk, + i.id itemFk, i.name itemDescription, t.shipped, DATE(t.shipped) shippedDate, diff --git a/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js b/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js index de2817d87..668a991f4 100644 --- a/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js +++ b/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js @@ -92,9 +92,7 @@ describe('ticket-request confirm()', () => { const request = await models.TicketRequest.findById(requestId, null, options); expect(request.saleFk).toBeNull(); - - await request.updateAttributes({saleFk: 2}, options); - + await request.updateAttributes({saleFk: 2}); ctx.args = { itemFk: itemId, id: requestId, @@ -102,7 +100,6 @@ describe('ticket-request confirm()', () => { }; await models.TicketRequest.confirm(ctx, options); - await tx.rollback(); } catch (e) { await tx.rollback(); diff --git a/modules/ticket/back/methods/ticket/addSaleByCode.js b/modules/ticket/back/methods/ticket/addSaleByCode.js index a73628c86..ca3d2cb07 100644 --- a/modules/ticket/back/methods/ticket/addSaleByCode.js +++ b/modules/ticket/back/methods/ticket/addSaleByCode.js @@ -30,7 +30,7 @@ module.exports = Self => { }); Self.addSaleByCode = async(ctx, barcode, quantity, ticketFk, warehouseFk, options) => { - const myOptions = {}; + const myOptions = {userId: ctx.req.accessToken.userId}; let tx; if (typeof options == 'object') diff --git a/modules/ticket/back/methods/ticket/componentUpdate.js b/modules/ticket/back/methods/ticket/componentUpdate.js index 0786b72c8..8bea731b7 100644 --- a/modules/ticket/back/methods/ticket/componentUpdate.js +++ b/modules/ticket/back/methods/ticket/componentUpdate.js @@ -150,7 +150,7 @@ module.exports = Self => { const salesNewTicket = salesMovable.filter(sale => (sale.movable ? sale.movable : 0) >= sale.quantity); const salesNewTicketLength = salesNewTicket.length; - if (salesNewTicketLength && sales.length != salesNewTicketLength) { + if (salesNewTicketLength && (args.newTicket || sales.length != salesNewTicketLength)) { const newTicket = await models.Ticket.transferSales( ctx, args.id, diff --git a/modules/ticket/back/methods/ticket/priceDifference.js b/modules/ticket/back/methods/ticket/priceDifference.js index 7dc85bd3d..7db03e268 100644 --- a/modules/ticket/back/methods/ticket/priceDifference.js +++ b/modules/ticket/back/methods/ticket/priceDifference.js @@ -118,7 +118,7 @@ module.exports = Self => { const [salesMovable] = await Self.rawSql(query, params, myOptions); const itemMovable = new Map(); - for (sale of salesMovable) { + for (let sale of salesMovable) { const saleMovable = sale.movable ? sale.movable : 0; itemMovable.set(sale.id, saleMovable); } @@ -129,7 +129,7 @@ module.exports = Self => { const [difComponents] = await Self.rawSql(query, params, myOptions); const map = new Map(); - for (difComponent of difComponents) + for (let difComponent of difComponents) map.set(difComponent.saleFk, difComponent); for (sale of salesObj.items) { diff --git a/modules/ticket/back/methods/ticket/specs/priceDifference.spec.js b/modules/ticket/back/methods/ticket/specs/priceDifference.spec.js index d01f0c1bb..e5c06b6dd 100644 --- a/modules/ticket/back/methods/ticket/specs/priceDifference.spec.js +++ b/modules/ticket/back/methods/ticket/specs/priceDifference.spec.js @@ -1,5 +1,4 @@ const models = require('vn-loopback/server/server').models; -const UserError = require('vn-loopback/util/user-error'); const ForbiddenError = require('vn-loopback/util/forbiddenError'); describe('sale priceDifference()', () => { @@ -83,12 +82,10 @@ describe('sale priceDifference()', () => { warehouseId: 1 }; - const result = await models.Ticket.priceDifference(ctx, options); - const firstItem = result.items[0]; - const secondtItem = result.items[1]; + const {items} = await models.Ticket.priceDifference(ctx, options); - expect(firstItem.movable).toEqual(380); - expect(secondtItem.movable).toEqual(1790); + expect(items[0].movable).toEqual(410); + expect(items[1].movable).toEqual(1810); await tx.rollback(); } catch (e) { diff --git a/modules/ticket/back/models/ticket-config.json b/modules/ticket/back/models/ticket-config.json index d757fbd1a..6dd2808ea 100644 --- a/modules/ticket/back/models/ticket-config.json +++ b/modules/ticket/back/models/ticket-config.json @@ -23,6 +23,16 @@ }, "daysForWarningClaim": { "type": "number" + }, + "defaultAttenderFk": { + "type": "number" + } + }, + "relations": { + "attender": { + "type": "belongsTo", + "model": "Worker", + "foreignKey": "defaultAttenderFk" } } } diff --git a/modules/ticket/back/models/ticket-request.js b/modules/ticket/back/models/ticket-request.js index d133f85d5..622cd7696 100644 --- a/modules/ticket/back/models/ticket-request.js +++ b/modules/ticket/back/models/ticket-request.js @@ -8,21 +8,21 @@ module.exports = function(Self) { require('../methods/ticket-request/getItemTypeWorker')(Self); Self.observe('before save', async function(ctx) { - if (ctx.isNewInstance) { - const loopBackContext = LoopBackContext.getCurrentContext(); - const filter = {where: {id: loopBackContext.active.accessToken.userId}}; - const models = Self.app.models; - const worker = await models.Worker.findOne(filter); + const loopBackContext = LoopBackContext.getCurrentContext(); + const filter = {where: {id: loopBackContext.active.accessToken.userId}}; + const models = Self.app.models; + const worker = await models.Worker.findOne(filter); + const instance = ctx.instance; + const attenderFk = instance?.attenderFk; - const instance = ctx.instance; + if (ctx.isNewInstance) { instance.requesterFk = worker.id; const httpCtx = {req: loopBackContext.active}; const httpRequest = httpCtx.req.http .req; const $t = httpRequest.__; - const attenderId = instance.attenderFk; - if (attenderId) { + if (attenderFk) { const ticket = await models.Ticket.findById(instance.ticketFk); let messageText = 'New ticket request has been created'; if (instance.price) @@ -35,8 +35,20 @@ module.exports = function(Self) { quantity: instance.quantity, price: instance.price }); - await models.Chat.sendCheckingPresence(httpCtx, attenderId, message); + await models.Chat.sendCheckingPresence(httpCtx, attenderFk, message); + } else { + const {defaultAttenderFk} = await models.TicketConfig.findOne(); + Object.assign(instance, {attenderFk: defaultAttenderFk}); } } }); + + Self.observe('after save', async function(ctx) { + const models = Self.app.models; + const instance = ctx.instance; + if (instance?.attenderFk === null && !ctx.isNewInstance) { + const {defaultAttenderFk} = await models.TicketConfig.findOne(); + await models.TicketRequest.updateAll({id: instance.id}, {attenderFk: defaultAttenderFk}); + } + }); }; diff --git a/modules/worker/back/methods/operator/spec/operator.spec.js b/modules/worker/back/methods/operator/spec/operator.spec.js index 8a7d05298..c80a6542d 100644 --- a/modules/worker/back/methods/operator/spec/operator.spec.js +++ b/modules/worker/back/methods/operator/spec/operator.spec.js @@ -52,18 +52,16 @@ describe('Operator', () => { }); it('should not sent notification when is already notified by another worker', async() => { - try { - await models.NotificationQueue.create({ - authorFk: 2, - notificationFk: notificationName, - params: JSON.stringify({'labelerId': labeler, 'sectorId': sectorId, 'workerId': 2}), - created: '2001-01-01 12:30:00', - status: sentStatus - }); - await models.Operator.updateAll({id: 1}, {labelerFk: labeler, sectorFk: sectorId}); - } catch (e) { - expect(e.message).toEqual('Previous notification sended with the same parameters'); - } + const {id} = await models.NotificationQueue.create({ + authorFk: 2, + notificationFk: notificationName, + params: JSON.stringify({'labelerId': labeler, 'sectorId': sectorId, 'workerId': 2}), + created: '2001-01-01 11:30:00', + status: sentStatus + }); + const notificationQueue = await updateOperatorAndFindNotification(); + + expect(notificationQueue.id).toEqual(id); }); it('should send a notification when the previous one has distinct params', async() => { diff --git a/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js b/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js index 343eb2a71..daf7284ac 100644 --- a/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js +++ b/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js @@ -45,7 +45,7 @@ describe('workerTimeControl clockIn()', () => { throw e; } }); - + it('should throw an error trying to change a middle hour to out not resting 12h', async() => { activeCtx.accessToken.userId = HHRRId; const workerId = teamBossId; @@ -99,6 +99,32 @@ describe('workerTimeControl clockIn()', () => { } }); + it('should throw an error trying to add an "in" entry if the last clockIn is not out', async() => { + activeCtx.accessToken.userId = HHRRId; + const workerId = teamBossId; + const tx = await models.WorkerTimeControl.beginTransaction({}); + try { + const options = {transaction: tx}; + + ctx.args = {timed: "2000-12-25T21:00:00.000Z", direction: 'in'}; + await models.WorkerTimeControl.addTimeEntry(ctx, workerId, options); + + ctx.args = {timed: "2000-12-25T22:00:00.000Z", direction: 'middle'}; + await models.WorkerTimeControl.addTimeEntry(ctx, workerId, options); + + ctx.args = {timed: "2000-12-25T22:30:00.000Z", direction: 'middle'}; + await models.WorkerTimeControl.addTimeEntry(ctx, workerId, options); + + ctx.args = {timed: "2000-12-26T01:00:00.000Z", direction: 'in'}; + await models.WorkerTimeControl.addTimeEntry(ctx, workerId, options); + + await tx.rollback(); + } catch (e) { + expect(e.message).toBe('Dirección incorrecta'); + await tx.rollback(); + } + }); + describe('as Role errors', () => { it('should add if the current user is team boss and the target user is himself', async() => { activeCtx.accessToken.userId = teamBossId; diff --git a/modules/worker/back/methods/worker/createAbsence.js b/modules/worker/back/methods/worker/createAbsence.js index d628d0a2b..2de1d6e4d 100644 --- a/modules/worker/back/methods/worker/createAbsence.js +++ b/modules/worker/back/methods/worker/createAbsence.js @@ -98,6 +98,22 @@ module.exports = Self => { if (isHalfHoliday && hasHalfHoliday) throw new UserError(`Cannot add more than one '1/2 day vacation'`); + const isFestive = absenceType.isFestiveEligible; + + const workCenter = await models.Business.findOne({ + where: {id: args.businessFk} + },); + + const [holiday] = await models.CalendarHoliday.find({ + where: { + dated: args.dated, + workCenterFk: workCenter.workCenterFk + } + }); + + if (holiday && isFestive) + throw new UserError(`Cannot add holidays on this day`); + const absence = await models.Calendar.create({ businessFk: labour.businessFk, dayOffTypeFk: args.absenceTypeId, diff --git a/modules/worker/back/methods/worker/specs/createAbsence.spec.js b/modules/worker/back/methods/worker/specs/createAbsence.spec.js index 346e43c51..aadaca99b 100644 --- a/modules/worker/back/methods/worker/specs/createAbsence.spec.js +++ b/modules/worker/back/methods/worker/specs/createAbsence.spec.js @@ -104,6 +104,35 @@ describe('Worker createAbsence()', () => { expect(error.message).toEqual(`Cannot add more than one '1/2 day vacation'`); }); + it(`should throw an error when adding a "Holiday" absence if there's a festivity`, async() => { + const ctx = { + req: {accessToken: {userId: 9}}, + args: { + id: 3, + businessFk: 3, + absenceTypeId: 1, + dated: '2001-12-08T23:00:00.000Z' + } + }; + const workerId = 1; + + const tx = await app.models.Calendar.beginTransaction({}); + + let error; + try { + const options = {transaction: tx}; + + await app.models.Worker.createAbsence(ctx, workerId, options); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + error = e; + } + + expect(error.message).toEqual(`Cannot add holidays on this day`); + }); + it(`should throw an error when adding a absence if the worker has hours recorded that day and not is a half absence`, async() => { const ctx = { req: {accessToken: {userId: 19}}, diff --git a/modules/worker/back/models/absence-type.json b/modules/worker/back/models/absence-type.json index 7fc62f780..2f6103367 100644 --- a/modules/worker/back/models/absence-type.json +++ b/modules/worker/back/models/absence-type.json @@ -22,7 +22,10 @@ }, "holidayEntitlementRate": { "type": "number" - } + }, + "isFestiveEligible": { + "type": "boolean" + } }, "acls": [ { @@ -32,4 +35,4 @@ "permission": "ALLOW" } ] -} \ No newline at end of file +} diff --git a/modules/worker/back/models/operator.js b/modules/worker/back/models/operator.js index 1ebc1643c..d46f3d934 100644 --- a/modules/worker/back/models/operator.js +++ b/modules/worker/back/models/operator.js @@ -18,7 +18,7 @@ module.exports = Self => { const {backupPrinterNotificationDelay} = await models.ProductionConfig.findOne(); if (backupPrinterNotificationDelay) { const notifications = await models.NotificationQueue.find( - {where: {created: {gte: Date.vnNow() - (backupPrinterNotificationDelay * 1000) + (3600 * 1000)}, + {where: {created: {gte: new Date(Date.vnNow() - (backupPrinterNotificationDelay * 1000))}, notificationFk: notificationName, status: 'sent' } @@ -30,8 +30,7 @@ module.exports = Self => { return Object.keys(criteria).every(key => criteria[key] === paramsObj?.[key]); }); - if (filteredNotifications.length >= 1) - throw new Error('Previous notification sended with the same parameters'); + if (filteredNotifications.length >= 1) return; } await models.NotificationQueue.create({ diff --git a/modules/worker/back/models/worker.json b/modules/worker/back/models/worker.json index c203f6e09..1f2b6be27 100644 --- a/modules/worker/back/models/worker.json +++ b/modules/worker/back/models/worker.json @@ -59,6 +59,9 @@ }, "isF11Allowed": { "type" : "boolean" + }, + "isFreelance": { + "type" : "boolean" } }, "relations": { @@ -92,87 +95,5 @@ "model": "WorkerTeamCollegues", "foreignKey": "workerFk" } - }, - "scopes":{ - "summary": { - "include": [ - { - "relation": "user", - "scope": { - "fields": ["email", "name", "nickname", "roleFk", "emailVerified"], - "include": [ - { - "relation": "role", - "scope": { - "fields": ["name"] - } - }, - { - "relation": "emailUser", - "scope": { - "fields": ["email"] - } - } - ] - } - }, { - "relation": "department", - "scope": { - "include": { - "relation": "department" - } - } - }, { - "relation": "boss" - }, { - "relation": "client", - "scope": { - "fields": [ - "id", - "name", - "fi", - "socialName", - "contact", - "street", - "city", - "postcode", - "email", - "mobile", - "isActive", - "credit", - "creditInsurance", - "iban", - "dueDay", - "isEqualizated", - "isFreezed", - "hasToInvoiceByAddress", - "hasToInvoice", - "isToBeMailed", - "hasSepaVnl", - "hasLcr", - "hasCoreVnl", - "hasCoreVnh", - "hasIncoterms", - "isTaxDataChecked", - "eypbc", - "quality", - "isVies", - "isRelevant", - "accountingAccount", - "created", - "sageTaxTypeFk", - "sageTransactionTypeFk", - "businessTypeFk", - "salesPersonFk", - "hasElectronicInvoice", - "rating", - "recommendedCredit" - ] - } - }, { - "relation": "sip" - } - ] - } } } diff --git a/modules/worker/front/card/index.js b/modules/worker/front/card/index.js index 1aa548db9..9a40e31c2 100644 --- a/modules/worker/front/card/index.js +++ b/modules/worker/front/card/index.js @@ -4,13 +4,37 @@ import ModuleCard from 'salix/components/module-card'; class Controller extends ModuleCard { reload() { const filter = { - where: { - id: this.$params.id} + include: [ + { + relation: 'user', + scope: { + fields: ['name', 'emailVerified'], + include: { + relation: 'emailUser', + scope: { + fields: ['email'] + } + } + } + }, { + relation: 'sip', + scope: { + fields: ['extension', 'secret'] + } + }, { + relation: 'department', + scope: { + include: { + relation: 'department' + } + } + } + ] }; return Promise.all([ - this.$http.get(`Workers/summary`, {filter}) - .then(res => this.worker = res.data[0]), + this.$http.get(`Workers/${this.$params.id}`, {filter}) + .then(res => this.worker = res.data), this.$http.get(`Workers/${this.$params.id}/activeContract`) .then(res => this.hasWorkCenter = res.data?.workCenterFk) ]); diff --git a/modules/worker/front/descriptor/index.js b/modules/worker/front/descriptor/index.js index 9263b857b..75265acb4 100644 --- a/modules/worker/front/descriptor/index.js +++ b/modules/worker/front/descriptor/index.js @@ -37,11 +37,41 @@ class Controller extends Descriptor { loadData() { const filter = { - where: {id: this.id}, + include: [ + { + relation: 'user', + scope: { + fields: ['name', 'emailVerified'], + include: { + relation: 'emailUser', + scope: { + fields: ['email'] + } + } + } + }, { + relation: 'client', + scope: { + fields: ['fi'] + } + }, { + relation: 'sip', + scope: { + fields: ['extension'] + } + }, { + relation: 'department', + scope: { + include: { + relation: 'department' + } + } + } + ] }; - return this.getData(`Workers/summary`, {filter}) - .then(res => this.entity = res.data[0]); + return this.getData(`Workers/${this.id}`, {filter}) + .then(res => this.entity = res.data); } getPassRequirements() { diff --git a/modules/worker/front/descriptor/index.spec.js b/modules/worker/front/descriptor/index.spec.js index cee8b0def..4f7fa6a05 100644 --- a/modules/worker/front/descriptor/index.spec.js +++ b/modules/worker/front/descriptor/index.spec.js @@ -14,14 +14,14 @@ describe('vnWorkerDescriptor', () => { describe('loadData()', () => { it(`should perform a get query to store the worker data into the controller`, () => { const id = 1; - const response = ['foo']; + const response = 'foo'; $httpBackend.whenGET('UserConfigs/getUserConfig').respond({}); - $httpBackend.expectRoute('GET', `Workers/summary`).respond(response); + $httpBackend.expectRoute('GET', `Workers/${id}`).respond(response); controller.id = id; $httpBackend.flush(); - expect([controller.worker]).toEqual(response); + expect(controller.worker).toEqual(response); }); }); diff --git a/modules/worker/front/summary/index.js b/modules/worker/front/summary/index.js index d1a27a6d4..212609f58 100644 --- a/modules/worker/front/summary/index.js +++ b/modules/worker/front/summary/index.js @@ -10,14 +10,53 @@ class Controller extends Summary { this.$.worker = null; if (!value) return; + const query = `Workers/${value.id}`; const filter = { - where: { - id: value.id - } + include: [ + { + relation: 'user', + scope: { + fields: ['name', 'roleFk'], + include: [{ + relation: 'role', + scope: { + fields: ['name'] + } + }, + { + relation: 'emailUser', + scope: { + fields: ['email'] + } + }] + } + }, + { + relation: 'client', + scope: {fields: ['fi', 'phone']} + }, + { + relation: 'boss', + scope: {fields: ['id', 'name']} + }, + { + relation: 'sip', + scope: {fields: ['extension']} + }, + { + relation: 'department', + scope: { + include: { + relation: 'department', + scope: {fields: ['id', 'code', 'name']} + } + } + } + ] }; - this.$http.get(`Workers/summary`, {filter}).then(res => { - this.$.worker = res.data[0]; + this.$http.get(query, {params: {filter}}).then(res => { + this.$.worker = res.data; }); } diff --git a/modules/zone/back/models/agency.json b/modules/zone/back/models/agency.json index be262b670..18b315d9a 100644 --- a/modules/zone/back/models/agency.json +++ b/modules/zone/back/models/agency.json @@ -15,6 +15,22 @@ "name": { "type": "string", "required": false + }, + "warehouseFk": { + "type": "number", + "required": false + }, + "isOwn": { + "type": "boolean", + "required": false + }, + "workCenterFk": { + "type": "number", + "required": false + }, + "isAnyVolumeAllowed": { + "type": "boolean", + "required": false } }, "relations": { @@ -22,6 +38,16 @@ "type": "hasOne", "model": "SupplierAgencyTerm", "foreignKey": "agencyFk" - } + }, + "warehouse": { + "type": "belongsTo", + "model": "Warehouse", + "foreignKey": "warehouseFk" + }, + "workCenter": { + "type": "belongsTo", + "model": "WorkCenter", + "foreignKey": "workCenterFk" + } } } diff --git a/myt.config.yml b/myt.config.yml index d94913b05..17300aa37 100755 --- a/myt.config.yml +++ b/myt.config.yml @@ -288,6 +288,7 @@ localFixtures: - payDemDetail - payMethod - payrollCategories + - payrollWorker - postCode - priceFixed - printer @@ -322,6 +323,7 @@ localFixtures: - shelving - smsConfig - specie + - split - supplier - supplierAccount - supplierActivity @@ -392,8 +394,4 @@ localFixtures: - zoneExclusionGeo - zoneGeo - zoneIncluded - - zoneWarehouse - vn2008: - - payroll_employee - - Splits - - zones + - zoneWarehouse \ No newline at end of file diff --git a/package.json b/package.json index aa2aa2238..b4c70cf5b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-back", - "version": "24.18.0", + "version": "24.22.0", "author": "Verdnatura Levante SL", "description": "Salix backend", "license": "GPL-3.0", diff --git a/print/templates/reports/collection-label/assets/css/style.css b/print/templates/reports/collection-label/assets/css/style.css index eb300f850..3eb68a2b2 100644 --- a/print/templates/reports/collection-label/assets/css/style.css +++ b/print/templates/reports/collection-label/assets/css/style.css @@ -32,9 +32,12 @@ html { #bold { font-weight: bold; } -#barcode{ +.barcode{ width: 370px; } +.qr{ + max-height: 137px; +} #shipped { font-weight: bold; width: 50px; diff --git a/print/templates/reports/collection-label/collection-label.html b/print/templates/reports/collection-label/collection-label.html index a0bfcad0e..752a31185 100644 --- a/print/templates/reports/collection-label/collection-label.html +++ b/print/templates/reports/collection-label/collection-label.html @@ -8,11 +8,15 @@ {{labelData.clientFk ? `${labelData.ticketFk} « ${labelData.clientFk}` : labelData.ticketFk}} - {{labelData.shipped || '---'}} + {{dashIfEmpty(labelData.shipped)}} - -
- {{labelData.workerCode || '---'}} + + + {{dashIfEmpty(labelData.workerCode)}} + + +
+ {{dashIfEmpty(labelData.workerCode)}} {{labelData.labelCount || 0}} @@ -21,11 +25,11 @@ {{labelData.code == 'V' ? (labelData.size || 0) + 'cm' : (labelData.volume || 0) + 'm³'}} -
{{getAgencyDescripton(labelData)}}
+
{{dashIfEmpty(getAgencyDescription(labelData))}}
{{labelData.lineCount || 0}} - {{labelData.nickName ? labelData.nickName.toUpperCase() : '---'}} + {{dashIfEmpty(labelData?.nickName.toUpperCase()) }} {{labelData.shippedHour || labelData.zoneHour}} diff --git a/print/templates/reports/collection-label/collection-label.js b/print/templates/reports/collection-label/collection-label.js index db2adeb34..f2f697ae6 100644 --- a/print/templates/reports/collection-label/collection-label.js +++ b/print/templates/reports/collection-label/collection-label.js @@ -1,6 +1,7 @@ -const jsBarcode = require('jsbarcode'); const {DOMImplementation, XMLSerializer} = require('xmldom'); const vnReport = require('../../../core/mixins/vn-report.js'); +const {toDataURL} = require('qrcode'); +const jsBarcode = require('jsbarcode'); module.exports = { name: 'collection-label', @@ -27,10 +28,28 @@ module.exports = { } else ticketIds = [this.id]; - this.labelsData = await this.rawSqlFromDef('labelsData', [ticketIds]); + const labels = await this.rawSqlFromDef('labelsData', [ticketIds]); + + const [{scannableCodeType}] = await this.rawSqlFromDef('barcodeType'); + if (scannableCodeType === 'qr') { + for (const labelData of labels) + labelData.qrData = await this.getQr(labelData?.ticketFk, labelData?.workerFk); + } + + this.labelsData = labels; this.checkMainEntity(this.labelsData); }, methods: { + async getQr(ticketFk, workerFk = null) { + const QRdata = JSON.stringify({ + company: 'vnl', + user: workerFk, + created: Date.vnNew(), + table: 'ticket', + id: ticketFk + }); + return toDataURL(QRdata, {margin: 0}); + }, getBarcode(id) { const xmlSerializer = new XMLSerializer(); const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null); @@ -52,18 +71,16 @@ module.exports = { if (labelData.code == 'V') value = value + `${labelData.wagon}-${labelData.level}`; else - value = value + `${labelData.color.substring(0, 4)}`; + value = value + `${labelData.color?.substring(0, 4)}`; } else value = '-'.repeat(19); return value; }, - getAgencyDescripton(labelData) { + getAgencyDescription(labelData) { let value; if (labelData.agencyDescription) value = labelData.agencyDescription.toUpperCase().substring(0, 11); - else - value = '---'; if (labelData.routeFk) { let routeFk = labelData.routeFk.toString(); @@ -72,5 +89,8 @@ module.exports = { return value; }, + dashIfEmpty(value) { + return value || '---'; + } }, }; diff --git a/print/templates/reports/collection-label/sql/barcodeType.sql b/print/templates/reports/collection-label/sql/barcodeType.sql new file mode 100644 index 000000000..0700c95a2 --- /dev/null +++ b/print/templates/reports/collection-label/sql/barcodeType.sql @@ -0,0 +1,3 @@ +SELECT scannableCodeType + FROM productionConfig + LIMIT 1 \ No newline at end of file diff --git a/print/templates/reports/collection-label/sql/labelsData.sql b/print/templates/reports/collection-label/sql/labelsData.sql index 61990812d..f0a9baf1f 100644 --- a/print/templates/reports/collection-label/sql/labelsData.sql +++ b/print/templates/reports/collection-label/sql/labelsData.sql @@ -11,6 +11,7 @@ SELECT c.itemPackingTypeFk code, IF(sgd.id, IFNULL(pc.itemPreviousDefaultSize, i.`size`), i.`size`) ) `size`, w.code workerCode, + w.id workerFk, TIME_FORMAT(t.shipped, '%H:%i') shippedHour, TIME_FORMAT(zo.`hour`, '%H:%i') zoneHour, DATE_FORMAT(t.shipped, '%d/%m/%y') shipped, diff --git a/print/templates/reports/delivery-note/assets/css/style.css b/print/templates/reports/delivery-note/assets/css/style.css index 8405ae78d..3e1c64d85 100644 --- a/print/templates/reports/delivery-note/assets/css/style.css +++ b/print/templates/reports/delivery-note/assets/css/style.css @@ -39,7 +39,11 @@ h2 { margin-top: 10px } -.observations{ +.observations { text-align: justify; text-justify: inter-word; +} + +.column-oriented { + margin-bottom: 5px; } \ No newline at end of file diff --git a/print/templates/reports/invoice/sql/rectified.sql b/print/templates/reports/invoice/sql/rectified.sql index 79ce733e3..48eefb093 100644 --- a/print/templates/reports/invoice/sql/rectified.sql +++ b/print/templates/reports/invoice/sql/rectified.sql @@ -1,11 +1,9 @@ -SELECT - io2.amount, - io2.ref, - io2.issued, - ict.description -FROM invoiceOut io - JOIN invoiceCorrection ic ON ic.correctingFk = io.id - JOIN invoiceOut io2 ON io2.id = ic.correctedFk - LEFT JOIN ticket t ON t.refFk = io.ref - JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk -WHERE io.ref = ? +SELECT io2.amount, + io2.ref, + io2.issued, + ict.description + FROM invoiceOut io + JOIN invoiceCorrection ic ON ic.correctingFk = io.id + JOIN invoiceOut io2 ON io2.id = ic.correctedFk + JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk + WHERE io.ref = ? diff --git a/print/templates/reports/supplier-campaign-metrics/assets/css/style.css b/print/templates/reports/supplier-campaign-metrics/assets/css/style.css index 32caeb43c..ff59bee18 100644 --- a/print/templates/reports/supplier-campaign-metrics/assets/css/style.css +++ b/print/templates/reports/supplier-campaign-metrics/assets/css/style.css @@ -17,4 +17,9 @@ h2 { .description strong { text-transform: uppercase; -} \ No newline at end of file +} + +.black { + color: black; +} + diff --git a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql index b48e99c23..60ef0fed3 100644 --- a/print/templates/reports/supplier-campaign-metrics/sql/entries.sql +++ b/print/templates/reports/supplier-campaign-metrics/sql/entries.sql @@ -6,3 +6,4 @@ SELECT FROM vn.entry e JOIN vn.travel t ON t.id = e.travelFk WHERE e.supplierFk = ? AND DATE(t.shipped) BETWEEN ? AND ? + ORDER BY t.shipped DESC; diff --git a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html index 08b27d0bd..95b913bc5 100644 --- a/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html +++ b/print/templates/reports/supplier-campaign-metrics/supplier-campaign-metrics.html @@ -37,7 +37,10 @@

- {{$t('entry')}} {{entry.id}} + + {{$t('entry')}} + {{entry.id}} + {{$t('dated')}} {{formatDate(entry.shipped, '%d-%m-%Y')}} {{$t('reference')}} {{entry.reference}}

@@ -67,6 +70,13 @@
+ + + + + + +
{{$t('total')}}{{total.price | currency('EUR', $i18n.locale)}}