-- MariaDB dump 10.19  Distrib 10.6.8-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: db.verdnatura.es    Database: account
-- ------------------------------------------------------
-- Server version	5.6.25-4-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `account`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `account` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `account`;

--
-- Table structure for table `account`
--

DROP TABLE IF EXISTS `account`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account` (
  `id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `account_ibfk_3` FOREIGN KEY (`id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Users allowed to have an account';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `account`.`account_afterInsert`
	AFTER INSERT ON `account`
	FOR EACH ROW
BEGIN
	INSERT IGNORE INTO userSync (`name`)
		SELECT `name` FROM `user` WHERE id = NEW.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 `account`.`account_afterDelete`
	AFTER DELETE ON `account`
	FOR EACH ROW
BEGIN
	INSERT IGNORE INTO userSync (`name`)
		SELECT `name` FROM `user` WHERE id = 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 */ ;

--
-- Table structure for table `accountConfig`
--

DROP TABLE IF EXISTS `accountConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accountConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `homedir` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The base folder for users home directory',
  `shell` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The default shell',
  `idBase` int(11) NOT NULL COMMENT 'Base id for Posix users and groups',
  `min` smallint(6) NOT NULL,
  `max` smallint(6) NOT NULL COMMENT 'Maximum password age (seconds)',
  `warn` smallint(6) NOT NULL COMMENT 'Warn to change password when elapsed (seconds)',
  `inact` smallint(6) NOT NULL COMMENT 'Maximum inactivity time (seconds)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global configuration parameters for accounts';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `accountDovecot`
--

DROP TABLE IF EXISTS `accountDovecot`;
/*!50001 DROP VIEW IF EXISTS `accountDovecot`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `accountDovecot` (
  `name` tinyint NOT NULL,
  `password` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `accountLog`
--

DROP TABLE IF EXISTS `accountLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accountLog` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `msg` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `pid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `rhost` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `time` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `emailUser`
--

DROP TABLE IF EXISTS `emailUser`;
/*!50001 DROP VIEW IF EXISTS `emailUser`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `emailUser` (
  `userFk` tinyint NOT NULL,
  `email` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ldapConfig`
--

DROP TABLE IF EXISTS `ldapConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ldapConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `server` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The LDAP server access url',
  `rdn` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The LDAP user',
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The LDAP password',
  `userDn` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The base DN for users',
  `groupDn` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The base DN for groups',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='LDAP server configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailAlias`
--

DROP TABLE IF EXISTS `mailAlias`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailAlias` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `alias` varchar(50) CHARACTER SET utf8 NOT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isPublic` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `alias` (`alias`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Mail aliases';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailAliasAccount`
--

DROP TABLE IF EXISTS `mailAliasAccount`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailAliasAccount` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mailAlias` int(10) unsigned NOT NULL,
  `account` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mailAlias` (`mailAlias`,`account`),
  KEY `account` (`account`),
  CONSTRAINT `account` FOREIGN KEY (`account`) REFERENCES `account` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `mailAlias` FOREIGN KEY (`mailAlias`) REFERENCES `mailAlias` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Mail alias that is assigned to each account';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailClientAccess`
--

DROP TABLE IF EXISTS `mailClientAccess`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailClientAccess` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `client` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `action` set('OK','REJECT') CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'REJECT',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mailFrom` (`client`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailConfig`
--

DROP TABLE IF EXISTS `mailConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `domain` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailForward`
--

DROP TABLE IF EXISTS `mailForward`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailForward` (
  `account` int(10) unsigned NOT NULL,
  `forwardTo` varchar(250) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`account`),
  CONSTRAINT `mailForward_ibfk_1` FOREIGN KEY (`account`) REFERENCES `account` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Mail forwarding';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailSenderAccess`
--

DROP TABLE IF EXISTS `mailSenderAccess`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailSenderAccess` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sender` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `action` set('OK','REJECT') NOT NULL DEFAULT 'REJECT',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mailFrom` (`sender`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `myRole`
--

DROP TABLE IF EXISTS `myRole`;
/*!50001 DROP VIEW IF EXISTS `myRole`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myRole` (
  `id` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myUser`
--

DROP TABLE IF EXISTS `myUser`;
/*!50001 DROP VIEW IF EXISTS `myUser`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myUser` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `active` tinyint NOT NULL,
  `email` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `lang` tinyint NOT NULL,
  `role` tinyint NOT NULL,
  `recoverPass` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `role`
--

DROP TABLE IF EXISTS `role`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `role` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(14) COLLATE utf8_unicode_ci NOT NULL COMMENT 'MySQL doesn''t support more than 14 chars for proxied user names',
  `description` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hasLogin` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Roles';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `account`.`role_beforeInsert`
	BEFORE INSERT ON `role`
	FOR EACH ROW
BEGIN
	CALL role_checkName(NEW.`name`);
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 `account`.`role_beforeUpdate`
	BEFORE UPDATE ON `role`
	FOR EACH ROW
BEGIN
	IF !(NEW.`name` <=> OLD.`name`) THEN
		CALL role_checkName (NEW.`name`);
	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 */ ;

--
-- Table structure for table `roleConfig`
--

DROP TABLE IF EXISTS `roleConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `roleConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  `mysqlPassword` varchar(255) NOT NULL COMMENT 'The password used for MySQL user roles, base64 encoded',
  `rolePrefix` char(2) NOT NULL,
  `userPrefix` char(2) DEFAULT NULL,
  `userHost` varchar(255) NOT NULL,
  `tplUser` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COMMENT='Role configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `roleInherit`
--

DROP TABLE IF EXISTS `roleInherit`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `roleInherit` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `role` int(10) unsigned NOT NULL,
  `inheritsFrom` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `role` (`role`,`inheritsFrom`),
  KEY `owner_id` (`inheritsFrom`),
  CONSTRAINT `roleInherit_ibfk_1` FOREIGN KEY (`role`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `roleInherit_ibfk_2` FOREIGN KEY (`inheritsFrom`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Role inheritance';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `roleRole`
--

DROP TABLE IF EXISTS `roleRole`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `roleRole` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `role` int(10) unsigned NOT NULL,
  `inheritsFrom` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `role` (`role`,`inheritsFrom`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Calculated role inheritance';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sambaConfig`
--

DROP TABLE IF EXISTS `sambaConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sambaConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `adDomain` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Active directory domain',
  `adController` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The hosname of domain controller',
  `adUser` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Active directory user',
  `adPassword` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Active directory password',
  `verifyCert` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT 'Whether to verify server certificate',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global configuration parameters for accounts';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `user`
--

DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `realm` varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  `name` varchar(30) CHARACTER SET utf8 NOT NULL,
  `nickname` varchar(127) COLLATE utf8_unicode_ci NOT NULL,
  `bcryptPassword` varchar(512) COLLATE utf8_unicode_ci DEFAULT NULL,
  `role` int(10) unsigned NOT NULL DEFAULT '2',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  `email` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `emailVerified` tinyint(1) DEFAULT NULL,
  `verificationToken` varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  `lang` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `lastPassChange` datetime DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` char(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Deprecated',
  `recoverPass` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT 'Deprecated',
  `sync` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Deprecated',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `mail` (`email`),
  KEY `role` (`role`),
  KEY `email` (`email`),
  KEY `nickname` (`nickname`),
  KEY `lang` (`lang`),
  CONSTRAINT `user_ibfk_2` FOREIGN KEY (`role`) REFERENCES `role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global users';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `account`.`user_beforeInsert`
	BEFORE INSERT ON `user`
	FOR EACH ROW
BEGIN
	CALL user_checkName(NEW.`name`);

	IF NEW.nickname = '' THEN
		SET NEW.nickname = NEW.`name`;
	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 `account`.`user_afterInsert`
	AFTER INSERT ON `user`
	FOR EACH ROW
BEGIN
	CALL hedera.image_ref('user', NEW.image);
    
	INSERT IGNORE INTO userSync SET `name` = NEW.`name`;
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 `account`.`user_beforeUpdate`
	BEFORE UPDATE ON `user`
	FOR EACH ROW
BEGIN
	IF !(NEW.`name` <=> OLD.`name`) THEN
		CALL user_checkName (NEW.`name`);
	END IF;

	IF !(NEW.`password` <=> OLD.`password`) THEN
		SET NEW.bcryptPassword = NULL;
		SET NEW.lastPassChange = NOW();
	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 `account`.`user_afterUpdate`
	AFTER UPDATE ON `user`
	FOR EACH ROW
BEGIN
	IF !(NEW.image <=> OLD.image) THEN
		CALL hedera.image_unref('user', OLD.image);
		CALL hedera.image_ref('user', NEW.image);
	END IF;

	INSERT IGNORE INTO userSync SET `name` = NEW.`name`;

	IF !(OLD.`name` <=> NEW.`name`) THEN
		INSERT IGNORE INTO userSync SET `name` = OLD.`name`;
	END IF;

	IF !(NEW.`role` <=> OLD.`role`)
	THEN
		CALL vn.mail_insert('jgallego@verdnatura.es',
							'jgallego@verdnatura.es',
							'Rol modificado',
							CONCAT(
								myUser_getName(), 
								' ha modificado el rol del usuario ',
								NEW.`name`, ' de ', OLD.role, ' a ', NEW.role)
							);
	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 `account`.`user_afterDelete`
	AFTER DELETE ON `user`
	FOR EACH ROW
BEGIN
	CALL hedera.image_unref('user', OLD.image);

	INSERT IGNORE INTO userSync SET `name` = OLD.`name`;
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 */ ;

--
-- Table structure for table `userConfig`
--

DROP TABLE IF EXISTS `userConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `loginKey` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userPassword`
--

DROP TABLE IF EXISTS `userPassword`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userPassword` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `length` tinyint(3) unsigned NOT NULL COMMENT 'Minimal length',
  `nAlpha` tinyint(3) unsigned NOT NULL COMMENT 'Minimum of alphabetic characters',
  `nUpper` tinyint(3) unsigned NOT NULL COMMENT 'Minimum of uppercase letters',
  `nDigits` tinyint(3) unsigned NOT NULL COMMENT 'Minimum of digits',
  `nPunct` tinyint(3) unsigned NOT NULL COMMENT 'Minimum of symbols',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Restrictions on user passwords';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userSync`
--

DROP TABLE IF EXISTS `userSync`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userSync` (
  `name` varchar(30) NOT NULL COMMENT 'The user name',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Users pending to be synchronized';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'account'
--

--
-- Dumping routines for database 'account'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `myUserGetId` */;
/*!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 `myUserGetId`() RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_getId()
 */
	RETURN myUser_getId();
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 `myUserGetName` */;
/*!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 `myUserGetName`() RETURNS varchar(30) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_getName()
 */
	RETURN myUser_getName();
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 `myUserHasRole` */;
/*!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 `myUserHasRole`(vRoleName VARCHAR(255)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_hasRole()
 */	
	RETURN myUser_hasRole(vRoleName);
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 `myUserHasRoleId` */;
/*!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 `myUserHasRoleId`(vRoleId INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_hasRoleId()
 */	
	RETURN myUser_hasRoleId(vRoleId);
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 `myUser_checkLogin` */;
/*!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 `myUser_checkLogin`() RETURNS tinyint(1)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
 * Checks that variables @userId and @userName haven't been altered.
 *
 * @return %TRUE if they are unaltered or unset, otherwise %FALSE
 */
	DECLARE vSignature VARCHAR(128);
	DECLARE vKey VARCHAR(255);

	IF @userId IS NOT NULL
		AND @userName IS NOT NULL
		AND @userSignature IS NOT NULL
	THEN
		SELECT loginKey INTO vKey FROM userConfig;
		SET vSignature = util.hmacSha2(256, CONCAT_WS('/', @userId, @userName), vKey);
		RETURN vSignature = @userSignature;
	END IF;
	
	RETURN FALSE;

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 `myUser_getId` */;
/*!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 `myUser_getId`() RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
 * Returns the current user id.
 *
 * @return The user id
 */
	DECLARE vUser INT DEFAULT NULL;
	
	IF myUser_checkLogin()
	THEN
		SET vUser = @userId;
	ELSE
		SELECT id INTO vUser FROM user
			WHERE name = LEFT(USER(), INSTR(USER(), '@') - 1);
	END IF;
	
	RETURN vUser;
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 `myUser_getName` */;
/*!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 `myUser_getName`() RETURNS varchar(30) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns the current user name.
 *
 * @return The user name
 */
	DECLARE vUser VARCHAR(30) DEFAULT NULL;

	IF myUser_checkLogin()
    THEN
		SET vUser = @userName;
	ELSE
		SET vUser = LEFT(USER(), INSTR(USER(), '@') - 1);
	END IF;
	
	RETURN vUser;
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 `myUser_hasRole` */;
/*!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 `myUser_hasRole`(vRoleName VARCHAR(255)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Checks if current user has/inherits a role.
 *
 * @param vRoleName Role to check
 * @return %TRUE if it has role, %FALSE otherwise
 */
	RETURN user_hasRole(myUser_getName(), vRoleName);
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 `myUser_hasRoleId` */;
/*!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 `myUser_hasRoleId`(vRoleId INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Checks if current user has/inherits a role.
 *
 * @param vRoleName Role id to check
 * @return %TRUE if it has role, %FALSE otherwise
 */
	RETURN user_hasRoleId(myUser_getName(), vRoleId);
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 `passwordGenerate` */;
/*!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 `passwordGenerate`() RETURNS text CHARSET utf8 COLLATE utf8_unicode_ci
    READS SQL DATA
BEGIN
/**
	* Generates a random password that meets the minimum requirements.
	*
	* @return Generated password
	*/
	DECLARE vMinLength TINYINT;
	DECLARE vMinAlpha TINYINT;
	DECLARE vMinUpper TINYINT;
	DECLARE vMinDigits TINYINT;
	DECLARE vMinPunct TINYINT;
	DECLARE vAlpha TINYINT DEFAULT 0;
	DECLARE vUpper TINYINT DEFAULT 0;
	DECLARE vDigits TINYINT DEFAULT 0;
	DECLARE vPunct TINYINT DEFAULT 0;
	DECLARE vRandIndex INT;
	DECLARE vPwd TEXT DEFAULT '';

	DECLARE vAlphaChars TEXT DEFAULT 'abcdefghijklmnopqrstuvwxyz';
	DECLARE vUpperChars TEXT DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	DECLARE vDigitChars TEXT DEFAULT '1234567890';
	DECLARE vPunctChars TEXT DEFAULT '!$%&()=.';

	SELECT length, nAlpha, nUpper, nDigits, nPunct 
		INTO vMinLength, vMinAlpha, vMinUpper, vMinDigits, vMinPunct FROM userPassword;

	WHILE LENGTH(vPwd) < vMinLength OR vAlpha < vMinAlpha 
	OR vUpper < vMinUpper OR vDigits < vMinDigits OR vPunct < vMinPunct DO
		SET vRandIndex = FLOOR((RAND() * 4) + 1);

		CASE
			WHEN vRandIndex = 1 THEN
				SET vPwd = CONCAT(vPwd, SUBSTRING(vAlphaChars, FLOOR((RAND() * 26) + 1), 1));
				SET vAlpha = vAlpha + 1;
			WHEN vRandIndex = 2 THEN
				SET vPwd = CONCAT(vPwd, SUBSTRING(vUpperChars, FLOOR((RAND() * 26) + 1), 1));
				SET vUpper = vUpper + 1;
			WHEN vRandIndex = 3 THEN
				SET vPwd = CONCAT(vPwd, SUBSTRING(vDigitChars, FLOOR((RAND() * 10) + 1), 1));
				SET vDigits = vDigits + 1;
			WHEN vRandIndex = 4 THEN
				SET vPwd = CONCAT(vPwd, SUBSTRING(vPunctChars, FLOOR((RAND() * LENGTH(vPunctChars)) + 1), 1));
				SET vPunct = vPunct + 1;
		END CASE;
	END WHILE;
	RETURN vPwd;
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 `toUnixDays` */;
/*!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 `toUnixDays`(vDate DATE) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Devuelve el timestamp unix en días de una fecha.
 *
 * @param vData La fecha
 * @return Unix timestamp en días
 */
	RETURN UNIX_TIMESTAMP(vDate) DIV 86400;
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 `userGetId` */;
/*!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 `userGetId`() RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_getId()
 */
	RETURN myUser_getId();
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 `userGetName` */;
/*!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 `userGetName`() RETURNS varchar(30) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use myUser_getName()
 */	
	RETURN myUser_getName();
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 `userHasRole` */;
/*!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 `userHasRole`(vUserName VARCHAR(255), vRoleName VARCHAR(255)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use user_hasRole()
 */
	RETURN user_hasRole(vUserName, vRoleName);
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 `userHasRoleId` */;
/*!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 `userHasRoleId`(vUser VARCHAR(255), vRoleId INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use user_hasRoleId()
 */
	RETURN user_hasRoleId(vUser, vRoleId);
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 `user_getMysqlRole` */;
/*!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 `user_getMysqlRole`(vUserName VARCHAR(255)) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
/**
 * From a username, it returns the associated MySQL wich should be used when
 * using external authentication systems.
 *
 * @param vUserName The user name
 * @return The associated MySQL role
 */
	DECLARE vRole VARCHAR(255);

	SELECT CONCAT(IF(r.hasLogin, c.rolePrefix, ''), r.name) INTO vRole
		FROM role r 
			JOIN user u ON u.role = r.id
			JOIN roleConfig c
		WHERE u.name = vUserName;

	RETURN vRole;
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 `user_getNameFromId` */;
/*!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 `user_getNameFromId`(vSelf INT) RETURNS varchar(30) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
/**
 * Gets user name from it's id.
 * 
 * @param vSelf The user id
 * @return The user name
 */
	DECLARE vName VARCHAR(30);
	
	SELECT `name` INTO vName 
		FROM user 
		WHERE id = vSelf;
	
	RETURN vName;
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 `user_hasRole` */;
/*!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 `user_hasRole`(vUserName VARCHAR(255), vRoleName VARCHAR(255)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Checks if user has/inherits a role.
 *
 * @param vUserName The user name
 * @param vRoleName Role to check
 * @return %TRUE if it has role, %FALSE otherwise
 */
	DECLARE vHasRole BOOL DEFAULT FALSE;

	SELECT COUNT(*) > 0 INTO vHasRole
		FROM user u
			JOIN roleRole rr ON rr.role = u.role
			JOIN role r ON r.id = rr.inheritsFrom
		WHERE u.`name` = vUserName
			AND r.`name` = vRoleName COLLATE 'utf8_unicode_ci';

	RETURN vHasRole;
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 `user_hasRoleId` */;
/*!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 `user_hasRoleId`(vUser VARCHAR(255), vRoleId INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Checks if user has/inherits a role.
 *
 * @param vUserName The user name
 * @param vRoleId Role id to check
 * @return %TRUE if it has role, %FALSE otherwise
 */
	DECLARE vHasRole BOOL DEFAULT FALSE;

	SELECT COUNT(*) > 0 INTO vHasRole
		FROM user u
			JOIN roleRole rr ON rr.role = u.role
			JOIN role r ON r.id = rr.inheritsFrom
		WHERE u.`name` = vUser
			AND r.id = vRoleId;
	
	RETURN vHasRole;
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 `myUserLogout` */;
/*!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 `myUserLogout`()
BEGIN
/**
 * @deprecated Use myUser_Logout()
 */
	CALL myUser_logout;
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 `myUser_changePassword` */;
/*!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 `myUser_changePassword`(vOldPassword VARCHAR(255), vPassword VARCHAR(255))
BEGIN
/**
 * Changes the current user password.
 *
 * @param vOldPassword The current password
 * @param vPassword The new password
 */
	CALL user_changePassword(myUser_getId(), vOldPassword, vPassword);
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 `myUser_login` */;
/*!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 `myUser_login`(vUserName VARCHAR(255), vPassword VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * Logs in using the user credentials.
 *
 * @param vUserName The user name
 * @param vPassword The user password
 */
	DECLARE vAuthIsOk BOOLEAN DEFAULT FALSE;

	SELECT COUNT(*) = 1 INTO vAuthIsOk FROM user
		WHERE name = vUserName
			AND password = MD5(vPassword)
			AND active;

	IF vAuthIsOk	
	THEN
		CALL myUser_loginWithName (vUserName);
	ELSE
		CALL util.throw ('INVALID_CREDENTIALS');
	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 `myUser_loginWithKey` */;
/*!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 `myUser_loginWithKey`(vUserName VARCHAR(255), vKey VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * Logs in using the user name and MySQL master key.
 *
 * @param vUserName The user name
 * @param vKey The MySQL master key
 */
	DECLARE vLoginKey VARCHAR(255);

	SELECT loginKey INTO vLoginKey FROM userConfig;

	IF vLoginKey = vKey THEN
		CALL myUser_loginWithName(vUserName);
	ELSE
		CALL util.throw('INVALID_KEY');
	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 `myUser_loginWithName` */;
/*!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 `myUser_loginWithName`(vUserName VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * Logs in using only the user name. This procedure is intended to be executed
 * by users with a high level of privileges so that normal users should not have 
 * execute permissions on it.
 *
 * @param vUserName The user name
 */
	DECLARE vUserId INT DEFAULT NULL;
	DECLARE vKey VARCHAR(255);

	SELECT id INTO vUserId FROM user
		WHERE name = vUserName;

	SELECT loginKey INTO vKey FROM userConfig;

	SET @userId = vUserId;
	SET @userName = vUserName;
	SET @userSignature = util.hmacSha2(256, CONCAT_WS('/', vUserId, vUserName), vKey);
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 `myUser_logout` */;
/*!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 `myUser_logout`()
BEGIN
/**
 * Logouts the user.
 */	
	SET @userId = NULL;
	SET @userName = NULL;
	SET @userSignature = NULL;
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 `myUser_restorePassword` */;
/*!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 `myUser_restorePassword`(vVerificationToken VARCHAR(255), vPassword VARCHAR(255))
BEGIN
/**
 * Changes the current user password using recovery token.
 *
 * @param vVerificationToken The current password
 * @param vPassword The new password
 */
	CALL user_restorePassword(myUser_getId(), vVerificationToken, vPassword);
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 `role_checkName` */;
/*!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 `role_checkName`(vRoleName VARCHAR(255))
BEGIN
/**
 * Checks that role name meets the necessary syntax requirements, otherwise it
 * throws an exception.
 * Role name must be written in camelCase.
 *
 * @param vRoleName The role name
 */
	IF BINARY vRoleName NOT REGEXP '^[a-z][a-zA-Z]+$' THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Role name must be written in camelCase';
	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 `role_getDescendents` */;
/*!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 `role_getDescendents`(vSelf INT)
BEGIN
/**
 * Gets the identifiers of all the subroles implemented by a role (Including
 * itself).
 *
 * @param vSelf The role identifier
 * @table tmp.role Subroles implemented by the role
 */
	DECLARE vIsRoot BOOL;

	DROP TEMPORARY TABLE IF EXISTS
		tmp.role, parents, childs;

	CREATE TEMPORARY TABLE tmp.role
		(UNIQUE (id))
		ENGINE = MEMORY
		SELECT vSelf AS id;

	CREATE TEMPORARY TABLE parents
		ENGINE = MEMORY
		SELECT vSelf AS id;

	CREATE TEMPORARY TABLE childs
		LIKE parents;

	REPEAT
		DELETE FROM childs;
		INSERT INTO childs
			SELECT DISTINCT r.inheritsFrom id
				FROM parents p
					JOIN roleInherit r ON r.role = p.id
					LEFT JOIN tmp.role t ON t.id = r.inheritsFrom
				WHERE t.id IS NULL;

		DELETE FROM parents;
		INSERT INTO parents
			SELECT * FROM childs;

		INSERT INTO tmp.role
			SELECT * FROM childs;

		UNTIL ROW_COUNT() <= 0
	END REPEAT;

	-- If it is root all the roles are added

	SELECT COUNT(*) > 0 INTO vIsRoot
		FROM tmp.role t
			JOIN role r ON r.id = t.id 
		WHERE r.`name` = 'root';
		
	IF vIsRoot THEN
		INSERT IGNORE INTO tmp.role (id)
			SELECT id FROM role;
	END IF;

	-- Cleaning

	DROP TEMPORARY TABLE
		parents, childs;
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 `role_sync` */;
/*!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 `role_sync`()
BEGIN
/**
 * Synchronize the @roleRole table with the current role hierarchy. This
 * procedure must be called every time the @roleInherit table is modified so
 * that the changes made on it are effective.
 */
	DECLARE vRoleId INT;
	DECLARE vDone BOOL;

	DECLARE cur CURSOR FOR
		SELECT id FROM role;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tRoleRole;
	CREATE TEMPORARY TABLE tRoleRole
		ENGINE = MEMORY
		SELECT * FROM roleRole LIMIT 0;

	OPEN cur;

	l: LOOP
		SET vDone = FALSE;
		FETCH cur INTO vRoleId;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL role_getDescendents(vRoleId);

		INSERT INTO tRoleRole (role, inheritsFrom)
			SELECT vRoleId, id FROM tmp.role;

		DROP TEMPORARY TABLE tmp.role;
	END LOOP;

	CLOSE cur;

	START TRANSACTION;
	DELETE FROM roleRole;
	INSERT INTO roleRole SELECT * FROM tRoleRole;
	COMMIT;

	DROP TEMPORARY TABLE tRoleRole;

	CALL role_syncPrivileges;
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 `role_syncPrivileges` */;
/*!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 `role_syncPrivileges`()
BEGIN
/**
 * Synchronizes permissions of MySQL role users based on role hierarchy.
 * The computed role users of permission mix will be named according to 
 * pattern [vRolePrefix][roleName].
 *
 * If [vTplUser]@[vTplHost] user exists, it will be taken as a template for
 * basic attributes.
 *
 * Warning! This procedure should only be called when MySQL privileges
 * are modified. If role hierarchy is modified, you must call the role_sync()
 * procedure wich calls this internally.
 */
	DECLARE vIsMysql BOOL DEFAULT VERSION() NOT LIKE '%MariaDB%';
	DECLARE vVersion INT DEFAULT SUBSTRING_INDEX(VERSION(), '.', 1);
	DECLARE vTplUser VARCHAR(255);
	DECLARE vTplHost VARCHAR(255);
	DECLARE vUserPrefix VARCHAR(2);
	DECLARE vUserHost VARCHAR(255);
	DECLARE vRolePrefix VARCHAR(2);
	DECLARE vRoleHost VARCHAR(255);
	DECLARE vPrefixedLike VARCHAR(255);
	DECLARE vPassword VARCHAR(255) DEFAULT '';

	SELECT rolePrefix, userPrefix, userHost, tplUser
		INTO vRolePrefix, vUserPrefix, vUserHost, vTplUser
		FROM roleConfig;

	-- Deletes computed role users

	SET vPrefixedLike = CONCAT(vRolePrefix, '%');
	SET vRoleHost = vUserHost;

	IF vIsMysql THEN
		SET vTplHost = 'localhost';

		DELETE FROM mysql.user
			WHERE `User` LIKE vPrefixedLike;
	ELSE
		SET vTplHost = '';

		DELETE FROM mysql.global_priv
			WHERE `User` LIKE vPrefixedLike;

		DELETE FROM mysql.roles_mapping
			WHERE `User` LIKE vPrefixedLike
				OR (
					`Role` LIKE vPrefixedLike
					AND (`User`, `Host`) = ('root', 'localhost')
				);
	END IF;

	DELETE FROM mysql.db
		WHERE `User` LIKE vPrefixedLike;

	DELETE FROM mysql.tables_priv
		WHERE `User` LIKE vPrefixedLike;

	DELETE FROM mysql.columns_priv
		WHERE `User` LIKE vPrefixedLike;

	DELETE FROM mysql.procs_priv
		WHERE `User` LIKE vPrefixedLike;

	DELETE FROM mysql.proxies_priv
		WHERE `Proxied_user` LIKE vPrefixedLike;

	-- Temporary tables

	DROP TEMPORARY TABLE IF EXISTS tRole;
	CREATE TEMPORARY TABLE tRole
		(INDEX (id))
		ENGINE = MEMORY
		SELECT
			id,
			`name` `role`,
			CONCAT(vRolePrefix, `name`) prefixedRole
			FROM `role`
			WHERE hasLogin;

	-- Get role inheritance

	DROP TEMPORARY TABLE IF EXISTS tRoleInherit;
	CREATE TEMPORARY TABLE tRoleInherit
		(INDEX (inheritsFrom))
		ENGINE = MEMORY
		SELECT
			r.prefixedRole,
			ri.`name` inheritsFrom
			FROM tRole r
				JOIN `roleRole` rr ON rr.role = r.id
				JOIN `role` ri ON ri.id = rr.inheritsFrom
				JOIN mysql.`user` u
					ON u.`User` = ri.`name` AND u.`Host` = vTplHost;

	-- Recreate role users

	IF vIsMysql THEN
		DROP TEMPORARY TABLE IF EXISTS tUser;
		CREATE TEMPORARY TABLE tUser
			SELECT
				r.prefixedRole `User`,
				vRoleHost `Host`,
				IFNULL(t.`authentication_string`,
					'') `authentication_string`,
				IFNULL(t.`plugin`,
					'mysql_native_password') `plugin`,
				IFNULL(IF('' != u.`ssl_type`,
					u.`ssl_type`, t.`ssl_type`),
					'') `ssl_type`,
				IFNULL(IF('' != u.`ssl_cipher`,
					u.`ssl_cipher`, t.`ssl_cipher`),
					'') `ssl_cipher`,
				IFNULL(IF('' != u.`x509_issuer`,
					u.`x509_issuer`, t.`x509_issuer`),
					'') `x509_issuer`,
				IFNULL(IF('' != u.`x509_subject`,
					u.`x509_subject`, t.`x509_subject`),
					'') `x509_subject`,
				IFNULL(IF(0 != u.`max_questions`,
					u.`max_questions`, t.`max_questions`),
					0) `max_questions`,
				IFNULL(IF(0 != u.`max_updates`,
					u.`max_updates`, t.`max_updates`),
					0) `max_updates`,
				IFNULL(IF(0 != u.`max_connections`,
					u.`max_connections`, t.`max_connections`),
					0) `max_connections`,
				IFNULL(IF(0 != u.`max_user_connections`,
					u.`max_user_connections`, t.`max_user_connections`),
					0) `max_user_connections`
				FROM tRole r
					LEFT JOIN mysql.user t
						ON t.`User` = vTplUser
							AND t.`Host` = vTplHost
					LEFT JOIN mysql.user u
						ON u.`User` = r.role
							AND u.`Host` = vTplHost;

		IF vVersion <= 5 THEN
			SELECT `Password` INTO vPassword
				FROM mysql.user
				WHERE `User` = vTplUser
					AND `Host` = vTplHost;

			INSERT INTO mysql.user (
					`User`,
					`Host`,
					`Password`,
					`authentication_string`,
					`plugin`,
					`ssl_type`,
					`ssl_cipher`,
					`x509_issuer`,
					`x509_subject`,
					`max_questions`,
					`max_updates`,
					`max_connections`,
					`max_user_connections`
				)
				SELECT
					`User`,
					`Host`,
					vPassword,
					`authentication_string`,
					`plugin`,
					`ssl_type`,
					`ssl_cipher`,
					`x509_issuer`,
					`x509_subject`,
					`max_questions`,
					`max_updates`,
					`max_connections`,
					`max_user_connections`
					FROM tUser;
		ELSE
			INSERT INTO mysql.user (
					`User`,
					`Host`,
					`authentication_string`,
					`plugin`,
					`ssl_type`,
					`ssl_cipher`,
					`x509_issuer`,
					`x509_subject`,
					`max_questions`,
					`max_updates`,
					`max_connections`,
					`max_user_connections`
				)
				SELECT
					`User`,
					`Host`,
					`authentication_string`,
					`plugin`,
					`ssl_type`,
					`ssl_cipher`,
					`x509_issuer`,
					`x509_subject`,
					`max_questions`,
					`max_updates`,
					`max_connections`,
					`max_user_connections`
					FROM tUser;
		END IF;

		DROP TEMPORARY TABLE tUser;

		-- Proxy privileges

		INSERT INTO mysql.proxies_priv (
			`User`,
			`Host`,
			`Proxied_user`,
			`Proxied_host`,
			`Grantor`
		)
		SELECT
			'',
			vUserHost,
			prefixedRole,
			vRoleHost,
			CONCAT(prefixedRole, '@', vRoleHost)
			FROM tRole;

		-- Global privileges

		DROP TEMPORARY TABLE IF EXISTS tUserPriv;
		CREATE TEMPORARY TABLE tUserPriv
			(INDEX (prefixedRole))
			ENGINE = MEMORY
			SELECT
				r.prefixedRole,
				MAX(u.`Select_priv`) `Select_priv`,
				MAX(u.`Insert_priv`) `Insert_priv`,
				MAX(u.`Update_priv`) `Update_priv`,
				MAX(u.`Delete_priv`) `Delete_priv`,
				MAX(u.`Create_priv`) `Create_priv`,
				MAX(u.`Drop_priv`) `Drop_priv`,
				MAX(u.`Reload_priv`) `Reload_priv`,
				MAX(u.`Shutdown_priv`) `Shutdown_priv`,
				MAX(u.`Process_priv`) `Process_priv`,
				MAX(u.`File_priv`) `File_priv`,
				MAX(u.`Grant_priv`) `Grant_priv`,
				MAX(u.`References_priv`) `References_priv`,
				MAX(u.`Index_priv`) `Index_priv`,
				MAX(u.`Alter_priv`) `Alter_priv`,
				MAX(u.`Show_db_priv`) `Show_db_priv`,
				MAX(u.`Super_priv`) `Super_priv`,
				MAX(u.`Create_tmp_table_priv`) `Create_tmp_table_priv`,
				MAX(u.`Lock_tables_priv`) `Lock_tables_priv`,
				MAX(u.`Execute_priv`) `Execute_priv`,
				MAX(u.`Repl_slave_priv`) `Repl_slave_priv`,
				MAX(u.`Repl_client_priv`) `Repl_client_priv`,
				MAX(u.`Create_view_priv`) `Create_view_priv`,
				MAX(u.`Show_view_priv`) `Show_view_priv`,
				MAX(u.`Create_routine_priv`) `Create_routine_priv`,
				MAX(u.`Alter_routine_priv`) `Alter_routine_priv`,
				MAX(u.`Create_user_priv`) `Create_user_priv`,
				MAX(u.`Event_priv`) `Event_priv`,
				MAX(u.`Trigger_priv`) `Trigger_priv`,
				MAX(u.`Create_tablespace_priv`) `Create_tablespace_priv`
				FROM tRoleInherit r
					JOIN mysql.user u
						ON u.`User` = r.inheritsFrom
							AND u.`Host`= vTplHost
				GROUP BY r.prefixedRole;
	
		UPDATE mysql.user u
			JOIN tUserPriv t
				ON u.`User` = t.prefixedRole
					AND u.`Host` = vRoleHost
			SET
				u.`Select_priv`
					= t.`Select_priv`,
				u.`Insert_priv`
					= t.`Insert_priv`,
				u.`Update_priv`
					= t.`Update_priv`,
				u.`Delete_priv`
					= t.`Delete_priv`,
				u.`Create_priv`
					= t.`Create_priv`,
				u.`Drop_priv`
					= t.`Drop_priv`,
				u.`Reload_priv`
					= t.`Reload_priv`,
				u.`Shutdown_priv`
					= t.`Shutdown_priv`,
				u.`Process_priv`
					= t.`Process_priv`,
				u.`File_priv`
					= t.`File_priv`,
				u.`Grant_priv`
					= t.`Grant_priv`,
				u.`References_priv`
					= t.`References_priv`,
				u.`Index_priv`
					= t.`Index_priv`,
				u.`Alter_priv`
					= t.`Alter_priv`,
				u.`Show_db_priv`
					= t.`Show_db_priv`,
				u.`Super_priv`
					= t.`Super_priv`,
				u.`Create_tmp_table_priv`
					= t.`Create_tmp_table_priv`,
				u.`Lock_tables_priv`
					= t.`Lock_tables_priv`,
				u.`Execute_priv`
					= t.`Execute_priv`,
				u.`Repl_slave_priv`
					= t.`Repl_slave_priv`,
				u.`Repl_client_priv`
					= t.`Repl_client_priv`,
				u.`Create_view_priv`
					= t.`Create_view_priv`,
				u.`Show_view_priv`
					= t.`Show_view_priv`,
				u.`Create_routine_priv`
					= t.`Create_routine_priv`,
				u.`Alter_routine_priv`
					= t.`Alter_routine_priv`,
				u.`Create_user_priv`
					= t.`Create_user_priv`,
				u.`Event_priv`
					= t.`Event_priv`,
				u.`Trigger_priv`
					= t.`Trigger_priv`,
				u.`Create_tablespace_priv`
					= t.`Create_tablespace_priv`;

		DROP TEMPORARY TABLE tUserPriv;

		-- Schema level privileges

		INSERT INTO mysql.db (
				`User`,
				`Host`,
				`Db`,
				`Select_priv`,
				`Insert_priv`,
				`Update_priv`,
				`Delete_priv`,
				`Create_priv`,
				`Drop_priv`,
				`Grant_priv`,
				`References_priv`,
				`Index_priv`,
				`Alter_priv`,
				`Create_tmp_table_priv`,
				`Lock_tables_priv`,
				`Create_view_priv`,
				`Show_view_priv`,
				`Create_routine_priv`,
				`Alter_routine_priv`,
				`Execute_priv`,
				`Event_priv`,
				`Trigger_priv`
			)
			SELECT
				r.prefixedRole,
				vRoleHost,
				t.`Db`,
				MAX(t.`Select_priv`),
				MAX(t.`Insert_priv`),
				MAX(t.`Update_priv`),
				MAX(t.`Delete_priv`),
				MAX(t.`Create_priv`),
				MAX(t.`Drop_priv`),
				MAX(t.`Grant_priv`),
				MAX(t.`References_priv`),
				MAX(t.`Index_priv`),
				MAX(t.`Alter_priv`),
				MAX(t.`Create_tmp_table_priv`),
				MAX(t.`Lock_tables_priv`),
				MAX(t.`Create_view_priv`),
				MAX(t.`Show_view_priv`),
				MAX(t.`Create_routine_priv`),
				MAX(t.`Alter_routine_priv`),
				MAX(t.`Execute_priv`),
				MAX(t.`Event_priv`),
				MAX(t.`Trigger_priv`)
				FROM tRoleInherit r
					JOIN mysql.db t
						ON t.`User` = r.inheritsFrom
							AND t.`Host`= vTplHost
				GROUP BY r.prefixedRole, t.`Db`;

		-- Table level privileges

		INSERT INTO mysql.tables_priv (
				`User`,
				`Host`,
				`Db`,
				`Table_name`,
				`Grantor`,
				`Timestamp`,
				`Table_priv`,
				`Column_priv`
			)
			SELECT
				r.prefixedRole,
				vRoleHost,
				t.`Db`,
				t.`Table_name`,
				t.`Grantor`,
				MAX(t.`Timestamp`),
				IFNULL(GROUP_CONCAT(NULLIF(t.`Table_priv`, '')), ''),
				IFNULL(GROUP_CONCAT(NULLIF(t.`Column_priv`, '')), '')
				FROM tRoleInherit r
					JOIN mysql.tables_priv t
						ON t.`User` = r.inheritsFrom
							AND t.`Host`= vTplHost
				GROUP BY r.prefixedRole, t.`Db`, t.`Table_name`;

		-- Column level privileges

		INSERT INTO mysql.columns_priv (
				`User`,
				`Host`,
				`Db`,
				`Table_name`,
				`Column_name`,
				`Timestamp`,
				`Column_priv`
			)
			SELECT
				r.prefixedRole,
				vRoleHost,
				t.`Db`,
				t.`Table_name`,
				t.`Column_name`,
				MAX(t.`Timestamp`),
				IFNULL(GROUP_CONCAT(NULLIF(t.`Column_priv`, '')), '')
				FROM tRoleInherit r
					JOIN mysql.columns_priv t
						ON t.`User` = r.inheritsFrom
							AND t.`Host`= vTplHost
				GROUP BY r.prefixedRole, t.`Db`, t.`Table_name`, t.`Column_name`;

		-- Routine privileges

		INSERT IGNORE INTO mysql.procs_priv (
				`User`,
				`Host`,
				`Db`,
				`Routine_name`,
				`Routine_type`,
				`Grantor`,
				`Timestamp`,
				`Proc_priv`
			)
			SELECT
				r.prefixedRole,
				vRoleHost,
				t.`Db`,
				t.`Routine_name`,
				t.`Routine_type`,
				t.`Grantor`,
				t.`Timestamp`,
				t.`Proc_priv`
				FROM tRoleInherit r
					JOIN mysql.procs_priv t
						ON t.`User` = r.inheritsFrom
							AND t.`Host`= vTplHost;
	ELSE
		-- Roles

		INSERT INTO mysql.global_priv (`Host`, `User`, `Priv`)
			SELECT vTplHost, prefixedRole, 
					JSON_OBJECT(
						'is_role', TRUE,
						'access', 0
					)
				FROM tRole r
			UNION
			SELECT vTplHost, CONCAT(vRolePrefix, 'root'), 
				JSON_OBJECT(
					'is_role', TRUE,
					'access', 0
				);

		INSERT INTO mysql.roles_mapping (`Host`, `User`, `Role`, `Admin_option`)
			SELECT vTplHost, prefixedRole, inheritsFrom, 'N'
				FROM tRoleInherit
			UNION
			SELECT vTplHost, CONCAT(vRolePrefix, 'root'), `User`, 'Y'
				FROM mysql.global_priv
				WHERE `User` LIKE vPrefixedLike AND `Host` = vTplHost;

		INSERT INTO mysql.roles_mapping (`Host`, `User`, `Role`, `Admin_option`)
			SELECT 'localhost', 'root', prefixedRole, 'Y'
				FROM tRole
			UNION
			SELECT 'localhost', 'root', CONCAT(vRolePrefix, 'root'), 'Y';

		-- Role users

		INSERT INTO mysql.global_priv (
				`User`,
				`Host`,
				`Priv`
			)
			SELECT 
				r.prefixedRole,
				vRoleHost,
				JSON_MERGE_PATCH(
					IFNULL(t.`Priv`, '{}'),
					IFNULL(u.`Priv`, '{}'),
					JSON_OBJECT(
						'mysql_old_password', JSON_VALUE(t.`Priv`, '$.mysql_old_password'),
						'mysql_native_password', JSON_VALUE(t.`Priv`, '$.mysql_native_password'),
						'authentication_string', JSON_VALUE(t.`Priv`, '$.authentication_string'),
						'ssl_type', JSON_VALUE(t.`Priv`, '$.ssl_type'),
						'default_role', r.prefixedRole,
						'access', 0,
						'is_role', FALSE
					)
				)
				FROM tRole r
					LEFT JOIN mysql.global_priv t
						ON (t.`User`, t.Host) = (vTplUser, vTplHost)
					LEFT JOIN mysql.global_priv u
						ON (u.`User`, u.Host) = (r.`role`, vTplHost);

		INSERT INTO mysql.roles_mapping (`Host`, `User`, `Role`, `Admin_option`)
			SELECT vRoleHost, prefixedRole, prefixedRole, 'N'
				FROM tRole;

		-- Accounts

		DROP TEMPORARY TABLE IF EXISTS tAccounts;
		CREATE TEMPORARY TABLE tAccounts
			(INDEX (`name`))
			ENGINE = MEMORY
			SELECT p.`User` `name`, r.prefixedRole
				FROM mysql.global_priv p
					JOIN `user` u ON u.`name` = p.`User`
					JOIN tRole r ON r.`id` = u.`role`
				WHERE JSON_EXTRACT(p.`Priv`, '$.autogenerated') = 'true';

		UPDATE mysql.global_priv p
				JOIN tAccounts c ON c.`name` = p.`User`
			SET p.`Priv` = JSON_SET(p.`Priv`, '$.default_role', c.prefixedRole)
				WHERE p.`Host` = vUserHost;
	
		UPDATE IGNORE mysql.roles_mapping m
				JOIN tAccounts c ON c.`name` = m.`User`
			SET m.`Role` = c.prefixedRole
				WHERE m.`Host` = vUserHost;

		DROP TEMPORARY TABLE tAccounts;
	END IF;

	-- Cleanup

	DROP TEMPORARY TABLE
		tRole,
		tRoleInherit;

	FLUSH PRIVILEGES;
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 `userLogin` */;
/*!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 `userLogin`(vUserName VARCHAR(255), vPassword VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * @deprecated Use myUser_login()
 */
	CALL myUser_login(vUserName, vPassword);
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 `userLoginWithKey` */;
/*!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 `userLoginWithKey`(vUserName VARCHAR(255), vKey VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * @deprecated Use myUser_loginWithKey()
 */
	CALL myUser_loginWithKey(vUserName, vKey);
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 `userLoginWithName` */;
/*!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 `userLoginWithName`(vUserName VARCHAR(255))
    READS SQL DATA
BEGIN
/**
 * @deprecated Use myUser_loginWithName()
 */
	CALL myUser_loginWithName(vUserName);
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 `userSetPassword` */;
/*!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 `userSetPassword`(vUserName VARCHAR(255), vPassword VARCHAR(255))
BEGIN
/**
 * @deprecated Use user_setPassword()
 */
	DECLARE vUserId INT;

	SELECT id INTO vUserId
		FROM user WHERE `name` = vUserName;

	CALL user_setPassword(vUserId, vPassword);
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 `user_changePassword` */;
/*!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 `user_changePassword`(vSelf INT, vOldPassword VARCHAR(255), vPassword VARCHAR(255))
BEGIN
/**
 * Changes the user password.
 *
 * @param vSelf The user id
 * @param vOldPassword The current password
 * @param vPassword The new password
 */
	DECLARE vPasswordOk BOOL;
	DECLARE vUserName VARCHAR(255);

	SELECT `password` = MD5(vOldPassword), `name`
		INTO vPasswordOk, vUserName
		FROM user WHERE id = vSelf;
		
	IF NOT vPasswordOk THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Invalid password';
	END IF;

	CALL user_setPassword(vSelf, vPassword);
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 `user_checkName` */;
/*!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 `user_checkName`(vUserName VARCHAR(255))
BEGIN
/**
 * Checks that username meets the necessary syntax requirements, otherwise it
 * throws an exception.
 * The user name must only contain lowercase letters or, starting with second
 * character, numbers or underscores.
 */
	IF vUserName NOT REGEXP '^[a-z0-9_-]*$' THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'INVALID_USER_NAME';
	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 `user_checkPassword` */;
/*!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 `user_checkPassword`(vPassword VARCHAR(255))
BEGIN
/**
 * Comprueba si la contraseña cumple los requisitos de seguridad
 * establecidos. Lanza una excepción si no se cumplen.
 *
 * @param vPassword Contraseña a comprobar
 */
	DECLARE vChr CHAR(1);
	DECLARE vPasswordOk TINYINT;
	DECLARE vI TINYINT DEFAULT 1;
	DECLARE vNAlpha TINYINT DEFAULT 0;
	DECLARE vNUpper TINYINT DEFAULT 0;
	DECLARE vNDigits TINYINT DEFAULT 0;
	DECLARE vNPunct TINYINT DEFAULT 0;

	WHILE vI <= CHAR_LENGTH(vPassword)
	DO
		SET vChr = SUBSTRING(vPassword, vI, 1);

		IF vChr REGEXP '[[:alpha:]]'
		THEN
			SET vNAlpha = vNAlpha+1;
			
			IF vChr REGEXP '[A-Z]'
			THEN
				SET vNUpper = vNUpper+1;
			END IF;
		ELSEIF vChr REGEXP '[[:digit:]]'
		THEN
			SET vNDigits = vNDigits+1;
		ELSEIF vChr REGEXP '[[:punct:]]'
		THEN
			SET vNPunct = vNPunct+1;
		END IF;

		SET vI = vI+1;
	END WHILE;

	SELECT
		CHAR_LENGTH(vPassword) >= length
		AND vNAlpha >= nAlpha
		AND vNUpper >= nUpper
		AND vNDigits >= nDigits
		AND vNPunct >= nPunct
			INTO vPasswordOk
			FROM userPassword LIMIT 1;

	IF NOT vPasswordOk THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Password does not meet requirements';
	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 `user_restorePassword` */;
/*!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 `user_restorePassword`(vSelf INT, vVerificationToken VARCHAR(255), vPassword VARCHAR(255))
BEGIN
/**
 * Changes the user password using recovery token.
 *
 * @param vSelf The user id
 * @param vVerificationToken The verification token
 * @param vPassword The new password
 */
	DECLARE vTokenVerified BOOL;
	DECLARE vUserName VARCHAR(255);

	SELECT verificationToken = vVerificationToken, `name`
		INTO vTokenVerified, vUserName
		FROM user WHERE id = vSelf;
		
	IF NOT vTokenVerified THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Invalid verification token';
	END IF;

	CALL user_setPassword(vSelf, vPassword);
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 `user_setPassword` */;
/*!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 `user_setPassword`(vSelf INT, vPassword VARCHAR(255))
BEGIN
/**
 * Change the password of the passed as a parameter. Only administrators should
 * have execute privileges on the procedure since it does not request the user's
 * current password.
 *
 * @param vSelf The user id
 * @param vPassword New password
 */
	CALL user_checkPassword(vPassword);

	UPDATE user SET
		`password` = MD5(vPassword),
		`verificationToken` = NULL
		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 */ ;

--
-- Current Database: `bs`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bs` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `bs`;

--
-- Temporary table structure for view `bajasLaborales`
--

DROP TABLE IF EXISTS `bajasLaborales`;
/*!50001 DROP VIEW IF EXISTS `bajasLaborales`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `bajasLaborales` (
  `firstname` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `business_id` tinyint NOT NULL,
  `lastDate` tinyint NOT NULL,
  `endContract` tinyint NOT NULL,
  `type` tinyint NOT NULL,
  `dias` tinyint NOT NULL,
  `userFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `bancos_evolution`
--

DROP TABLE IF EXISTS `bancos_evolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bancos_evolution` (
  `Fecha` date NOT NULL,
  `Id_Banco` int(11) NOT NULL,
  `saldo` decimal(10,2) NOT NULL DEFAULT '0.00',
  `quilla` decimal(10,2) NOT NULL DEFAULT '0.00',
  `deuda` decimal(10,2) NOT NULL DEFAULT '0.00',
  `liquidez` decimal(10,2) NOT NULL DEFAULT '0.00',
  `disponibilidad ajena` decimal(10,2) NOT NULL DEFAULT '0.00',
  `saldo_aux` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT 'Saldo auxiliar para el calculo de lo dispuesto en las polizas',
  PRIMARY KEY (`Fecha`,`Id_Banco`),
  KEY `fk_banco_evolution_idx` (`Id_Banco`),
  CONSTRAINT `fk_banco_evolution` FOREIGN KEY (`Id_Banco`) REFERENCES `vn`.`accounting` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena los saldos bancarios';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `carteras`
--

DROP TABLE IF EXISTS `carteras`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `carteras` (
  `CodigoTrabajador` varchar(3) CHARACTER SET latin1 NOT NULL,
  `Año` int(11) NOT NULL,
  `Mes` int(11) NOT NULL,
  `Peso` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`CodigoTrabajador`,`Año`,`Mes`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientAnnualConsumption`
--

DROP TABLE IF EXISTS `clientAnnualConsumption`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientAnnualConsumption` (
  `clientFk` int(11) NOT NULL,
  `invoiced` double(17,0) DEFAULT NULL,
  PRIMARY KEY (`clientFk`),
  CONSTRAINT `fmaId_Cliente` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientDied`
--

DROP TABLE IF EXISTS `clientDied`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientDied` (
  `id` int(11) NOT NULL DEFAULT '0',
  `clientName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `lastInvoiced` date DEFAULT NULL,
  `workerCode` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `Boss` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `Aviso` varchar(13) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Clientes que no han comprado en los ultimos 3 meses, se actualiza con proceso nocturno el 3 de cada mes';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientNewBorn`
--

DROP TABLE IF EXISTS `clientNewBorn`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientNewBorn` (
  `clientFk` int(11) NOT NULL,
  `firstShipped` date NOT NULL COMMENT 'Primer pedido o de la relacion comercial, o después de un año de inactividad',
  `lastShipped` date NOT NULL COMMENT 'último pedido del cliente',
  `isModified` tinyint(4) DEFAULT '0',
  `isRookie` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'define un cliente que ha de ser cuidado por ser nuevo o recuperado',
  PRIMARY KEY (`clientFk`),
  CONSTRAINT `clientNewBorn_fk1` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Listado de clientes que se consideran nuevos a efectos de cobrar la comision adicional del comercial';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `bs`.`clientNewBorn_BEFORE_UPDATE`
	BEFORE UPDATE ON `clientNewBorn`
	FOR EACH ROW
BEGIN
	-- Si ha pasado un año o mas
	IF TIMESTAMPDIFF(YEAR,NEW.lastShipped, OLD.lastShipped) THEN
		SET NEW.firstShipped = NEW.lastShipped;
	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 */ ;

--
-- Table structure for table `clientNewBorn__`
--

DROP TABLE IF EXISTS `clientNewBorn__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientNewBorn__` (
  `clientFk` int(11) NOT NULL,
  `shipped` date NOT NULL,
  PRIMARY KEY (`clientFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Listado de clientes que se consideran nuevos a efectos de cobrar la comision adicional del comercial';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `compradores`
--

DROP TABLE IF EXISTS `compradores`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `compradores` (
  `Id_Trabajador` int(10) unsigned NOT NULL,
  `año` int(4) NOT NULL,
  `semana` int(2) NOT NULL,
  `importe` decimal(10,2) DEFAULT NULL,
  `comision` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`Id_Trabajador`,`año`,`semana`),
  CONSTRAINT `comprador_trabajador` FOREIGN KEY (`Id_Trabajador`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `compradores_evolution`
--

DROP TABLE IF EXISTS `compradores_evolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `compradores_evolution` (
  `Id_Trabajador` int(10) unsigned NOT NULL,
  `fecha` date NOT NULL,
  `importe` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`Id_Trabajador`,`fecha`),
  CONSTRAINT `evo_trabajador` FOREIGN KEY (`Id_Trabajador`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `customerEvolution`
--

DROP TABLE IF EXISTS `customerEvolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `customerEvolution` (
  `dated` date NOT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`dated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `defaulter`
--

DROP TABLE IF EXISTS `defaulter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `defaulter` (
  `clientFk` int(11) NOT NULL,
  `created` date NOT NULL,
  `amount` double NOT NULL DEFAULT '0',
  `defaulterSinced` date DEFAULT NULL,
  `hasChanged` tinyint(1) DEFAULT NULL,
  `frozened` date DEFAULT NULL,
  PRIMARY KEY (`clientFk`,`created`),
  KEY `client` (`clientFk`),
  KEY `date` (`created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `experienceIberflora2016`
--

DROP TABLE IF EXISTS `experienceIberflora2016`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `experienceIberflora2016` (
  `Id_Cliente` int(11) NOT NULL,
  `isVisitor` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Id_Cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de clientes que participan en el estudio sobre la mejora del consumo tras la visita a las instalaciones de Silla';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `fondo_maniobra`
--

DROP TABLE IF EXISTS `fondo_maniobra`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fondo_maniobra` (
  `fecha` date NOT NULL,
  `fondo` double DEFAULT NULL,
  `clientes_facturas` double DEFAULT NULL,
  `clientes_cobros` double DEFAULT NULL,
  `proveedores_facturas` double DEFAULT NULL,
  `proveedores_pagos` double DEFAULT NULL,
  `fondo_medio` double DEFAULT NULL,
  PRIMARY KEY (`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `indicators`
--

DROP TABLE IF EXISTS `indicators`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `indicators` (
  `updated` date NOT NULL,
  `lastYearSales` int(11) DEFAULT NULL,
  `totalGreuge` int(11) DEFAULT NULL,
  `latePaymentRate` decimal(5,4) DEFAULT NULL,
  `countEmployee` decimal(10,2) DEFAULT NULL,
  `averageMana` int(11) DEFAULT NULL,
  `bankingPool` int(11) DEFAULT NULL,
  `lastMonthActiveClients` int(11) DEFAULT NULL,
  `lastMonthLostClients` int(11) DEFAULT NULL,
  `lastMonthNewClients` int(11) DEFAULT NULL,
  `lastMonthWebBuyingRate` decimal(5,4) DEFAULT NULL,
  `productionHours__` decimal(10,1) DEFAULT NULL,
  `dailyWorkersCost__` decimal(10,0) DEFAULT NULL,
  `volumeM3__` decimal(10,0) DEFAULT NULL,
  `salesValue__` decimal(10,0) DEFAULT NULL,
  `valueM3__` decimal(10,0) DEFAULT NULL,
  `hoursM3__` decimal(5,2) DEFAULT NULL,
  `workerCostM3__` decimal(10,1) DEFAULT NULL,
  `salesWorkersCostRate__` decimal(10,2) DEFAULT NULL,
  `thisWeekSales` decimal(10,2) DEFAULT NULL,
  `lastYearWeekSales` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`updated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena los valores actuales para una consulta diaria rápida por los directivos.';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `inspeccionSS_2021`
--

DROP TABLE IF EXISTS `inspeccionSS_2021`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inspeccionSS_2021` (
  `business_id` int(11) DEFAULT NULL,
  `id` int(11) NOT NULL DEFAULT '0',
  `firstName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `timed` datetime NOT NULL,
  `hours_week` smallint(6) DEFAULT NULL,
  `year` int(4) NOT NULL,
  `week` int(2) NOT NULL,
  `dated` date NOT NULL,
  `orden` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='bs.inspeccionSS_2021_add()';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `lastIndicators`
--

DROP TABLE IF EXISTS `lastIndicators`;
/*!50001 DROP VIEW IF EXISTS `lastIndicators`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `lastIndicators` (
  `updated` tinyint NOT NULL,
  `lastYearSales` tinyint NOT NULL,
  `incLastYearSales` tinyint NOT NULL,
  `totalGreuge` tinyint NOT NULL,
  `incTotalGreuge` tinyint NOT NULL,
  `latePaymentRate` tinyint NOT NULL,
  `incLatePaymentRate` tinyint NOT NULL,
  `countEmployee` tinyint NOT NULL,
  `incCountEmployee` tinyint NOT NULL,
  `averageMana` tinyint NOT NULL,
  `incAverageMana` tinyint NOT NULL,
  `bankingPool` tinyint NOT NULL,
  `incbankingPool` tinyint NOT NULL,
  `lastMonthActiveClients` tinyint NOT NULL,
  `incLastMonthActiveClients` tinyint NOT NULL,
  `lastMonthLostClients` tinyint NOT NULL,
  `incLastMonthLostClients` tinyint NOT NULL,
  `lastMonthNewClients` tinyint NOT NULL,
  `incLastMonthNewClients` tinyint NOT NULL,
  `lastMonthWebBuyingRate` tinyint NOT NULL,
  `incLastMonthWebBuyingRate` tinyint NOT NULL,
  `productionHours__` tinyint NOT NULL,
  `dailyWorkersCost__` tinyint NOT NULL,
  `volumeM3__` tinyint NOT NULL,
  `salesValue__` tinyint NOT NULL,
  `valueM3__` tinyint NOT NULL,
  `hoursM3__` tinyint NOT NULL,
  `workerCostM3__` tinyint NOT NULL,
  `salesWorkersCostRate__` tinyint NOT NULL,
  `thisWeekSales` tinyint NOT NULL,
  `lastYearWeekSales` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `m3`
--

DROP TABLE IF EXISTS `m3`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `m3` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fecha` date NOT NULL,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '0',
  `m3` decimal(10,2) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  `month` int(11) DEFAULT NULL,
  `week` int(11) DEFAULT NULL,
  `day` int(11) DEFAULT NULL,
  `dayName` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  `euros` decimal(10,2) DEFAULT '0.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mermasCache__`
--

DROP TABLE IF EXISTS `mermasCache__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mermasCache__` (
  `Comprador` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `año` int(4) NOT NULL,
  `Valor_Compra` decimal(10,0) DEFAULT NULL,
  `Faltas` decimal(10,0) DEFAULT NULL,
  `Basura` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`Comprador`,`año`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `nightTask`
--

DROP TABLE IF EXISTS `nightTask`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nightTask` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `started` datetime DEFAULT NULL,
  `finished` datetime DEFAULT NULL,
  `lastFinished` datetime DEFAULT NULL,
  `order` int(11) DEFAULT NULL,
  `schema` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `procedure` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `error` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `errorCode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `bs`.`nightTaskBeforeInsert`
	BEFORE INSERT ON `nightTask`
	FOR EACH ROW
BEGIN

	IF NOT (NEW.`schema`REGEXP '^[0-9a-zA-Z_]+$') OR NOT (NEW.`procedure`REGEXP '^[0-9a-zA-Z_]+$') THEN

		CALL util.throw('ONLY_ALPHANUMERICS_ALLOWED');
		
	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 `bs`.`nightTaskBeforeUpdate`
	BEFORE UPDATE ON `nightTask`
	FOR EACH ROW
BEGIN

	IF NOT (NEW.`schema`REGEXP '^[0-9a-zA-Z_]+$') OR NOT (NEW.`procedure`REGEXP '^[0-9a-zA-Z_]+$') THEN

		CALL util.throw('ONLY_ALPHANUMERICS_ALLOWED');
		
	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 */ ;

--
-- Table structure for table `nightTaskConfig`
--

DROP TABLE IF EXISTS `nightTaskConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nightTaskConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `logMail` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `packingSpeed`
--

DROP TABLE IF EXISTS `packingSpeed`;
/*!50001 DROP VIEW IF EXISTS `packingSpeed`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `packingSpeed` (
  `hora` tinyint NOT NULL,
  `minuto` tinyint NOT NULL,
  `cm3` tinyint NOT NULL,
  `warehouse_id` tinyint NOT NULL,
  `odbc_date` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `payMethodClient`
--

DROP TABLE IF EXISTS `payMethodClient`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payMethodClient` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `payMethodFk` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `clientFk` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `FkPayMethod_idx` (`payMethodFk`),
  KEY `FkClientPayMethod_idx` (`clientFk`),
  KEY `FkDateClientPayMethod` (`dated`,`clientFk`),
  CONSTRAINT `FkClientPayMethod` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FkPayMethodClient` FOREIGN KEY (`payMethodFk`) REFERENCES `vn`.`payMethod` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `payMethodClientEvolution`
--

DROP TABLE IF EXISTS `payMethodClientEvolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payMethodClientEvolution` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `payMethodName` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `amountClient` int(11) NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `equalizationTax` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `produccion__`
--

DROP TABLE IF EXISTS `produccion__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `produccion__` (
  `dated` date NOT NULL,
  `m3` int(11) NOT NULL DEFAULT '0',
  `cost` int(11) NOT NULL DEFAULT '0',
  `eurosM3` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`dated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `s1_ticketDetail`
--

DROP TABLE IF EXISTS `s1_ticketDetail`;
/*!50001 DROP VIEW IF EXISTS `s1_ticketDetail`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `s1_ticketDetail` (
  `ticketFk` tinyint NOT NULL,
  `ticketAmount` tinyint NOT NULL,
  `ticketLines` tinyint NOT NULL,
  `ticketM3` tinyint NOT NULL,
  `shipped` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `s21_saleDetail`
--

DROP TABLE IF EXISTS `s21_saleDetail`;
/*!50001 DROP VIEW IF EXISTS `s21_saleDetail`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `s21_saleDetail` (
  `dia` tinyint NOT NULL,
  `año` tinyint NOT NULL,
  `mes` tinyint NOT NULL,
  `concepto` tinyint NOT NULL,
  `unidades` tinyint NOT NULL,
  `precio` tinyint NOT NULL,
  `venta` tinyint NOT NULL,
  `familia` tinyint NOT NULL,
  `comprador` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `volume` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `sale`
--

DROP TABLE IF EXISTS `sale`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sale` (
  `saleFk` int(11) NOT NULL,
  `amount` decimal(10,3) NOT NULL DEFAULT '0.000',
  `surcharge` decimal(10,3) NOT NULL DEFAULT '0.000',
  `dated` date NOT NULL,
  `typeFk` smallint(5) unsigned NOT NULL,
  `clientFk` int(11) NOT NULL DEFAULT '1',
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `margin` decimal(10,3) NOT NULL DEFAULT '0.000',
  PRIMARY KEY (`saleFk`),
  KEY `tip_to_tip_idx` (`typeFk`),
  KEY `clientes_bs_ventas_idx` (`clientFk`),
  KEY `empresa_bs_ventas_idx` (`companyFk`),
  KEY `fecha_bs` (`dated`,`clientFk`),
  CONSTRAINT `sale_FK` FOREIGN KEY (`saleFk`) REFERENCES `vn`.`sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sale_FK_1` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sale_FK_2` FOREIGN KEY (`companyFk`) REFERENCES `vn`.`company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sale_FK_3` FOREIGN KEY (`typeFk`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salePersonEvolution__`
--

DROP TABLE IF EXISTS `salePersonEvolution__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salePersonEvolution__` (
  `dated` date NOT NULL DEFAULT '0000-00-00',
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `equalizationTax` decimal(10,2) NOT NULL DEFAULT '0.00',
  `salesPersonFk` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`dated`,`salesPersonFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesByItemTypeDay`
--

DROP TABLE IF EXISTS `salesByItemTypeDay`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesByItemTypeDay` (
  `itemTypeFk` smallint(5) unsigned NOT NULL,
  `itemCategoryFk` int(10) unsigned NOT NULL,
  `dated` date NOT NULL,
  `netSale` int(11) NOT NULL DEFAULT '0',
  `stems` int(11) NOT NULL DEFAULT '0',
  `references` int(11) NOT NULL DEFAULT '0',
  `trash` int(11) NOT NULL DEFAULT '0',
  `faults` int(11) NOT NULL DEFAULT '0',
  `claimed` decimal(10,2) NOT NULL DEFAULT '0.00',
  `accepted` decimal(10,2) NOT NULL DEFAULT '0.00',
  `sale` decimal(10,2) NOT NULL DEFAULT '0.00',
  `buy` decimal(10,2) NOT NULL DEFAULT '0.00',
  `saleComponent` decimal(10,2) NOT NULL DEFAULT '0.00',
  `costComponent` decimal(10,2) NOT NULL DEFAULT '0.00',
  `marginComponent` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`itemTypeFk`,`dated`),
  KEY `itemTypeSalesByweek_itemCategoryFk_idx` (`itemCategoryFk`),
  KEY `itemTypeSalesByweek_period_idx` (`dated`),
  CONSTRAINT `itemTypeSalesByweek_itemCategoryFk` FOREIGN KEY (`itemCategoryFk`) REFERENCES `vn`.`itemCategory` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `itemTypeSalesByweek_itemTypeFk` FOREIGN KEY (`itemTypeFk`) REFERENCES `vn`.`itemType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ventas diarias agrupadas por reino y familia';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesByWeek`
--

DROP TABLE IF EXISTS `salesByWeek`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesByWeek` (
  `week` int(11) NOT NULL,
  `year` int(11) NOT NULL,
  `sales` double DEFAULT NULL,
  UNIQUE KEY `week` (`week`,`year`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesByclientSalesPerson`
--

DROP TABLE IF EXISTS `salesByclientSalesPerson`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesByclientSalesPerson` (
  `dated` date NOT NULL DEFAULT '0000-00-00',
  `salesPersonFk` int(10) unsigned DEFAULT NULL,
  `clientFk` int(11) NOT NULL,
  `amount` decimal(10,3) NOT NULL DEFAULT '0.000',
  `equalizationTax` decimal(10,3) NOT NULL DEFAULT '0.000',
  `amountNewBorn` decimal(10,3) NOT NULL DEFAULT '0.000',
  PRIMARY KEY (`dated`,`clientFk`),
  KEY `clientSalePersonEvolution_clientFk` (`clientFk`),
  KEY `salesByclientSalesPerson_salesPerson` (`salesPersonFk`),
  KEY `salesByclientSalesPerson_dated` (`dated`,`clientFk`,`amount`),
  CONSTRAINT `clientSalePersonEvolution_clientFk` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `salesByclientSalesPerson_salesPerson` FOREIGN KEY (`salesPersonFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ventas diarias por cliente y comercial';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesMonthlySnapshot`
--

DROP TABLE IF EXISTS `salesMonthlySnapshot`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesMonthlySnapshot` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `salesPersonName` varchar(100) COLLATE utf8_unicode_ci DEFAULT '',
  `teamName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  `month` int(11) DEFAULT NULL,
  `currentSale` decimal(10,3) DEFAULT NULL,
  `commissionSale` decimal(10,3) DEFAULT NULL,
  `individualPlus` decimal(10,3) DEFAULT NULL,
  `teamPlus` decimal(10,3) DEFAULT NULL,
  `teamScore` decimal(10,3) DEFAULT NULL,
  `newClientPlus` decimal(10,3) DEFAULT NULL,
  `newClientScore` decimal(10,3) DEFAULT NULL,
  `teamBossPlus` decimal(10,3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesMonthlySnapshot__`
--

DROP TABLE IF EXISTS `salesMonthlySnapshot__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesMonthlySnapshot__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(11) NOT NULL,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `departmentFk` int(11) NOT NULL,
  `ownSalesAmount` decimal(10,2) DEFAULT '0.00',
  `ownSalesPosition` int(11) DEFAULT NULL,
  `ownSalesBonus` int(11) DEFAULT NULL,
  `ownSalesScore` int(11) DEFAULT NULL,
  `newClientsSalesAmount` decimal(10,2) DEFAULT NULL,
  `newClientsSalesPosition` int(11) DEFAULT NULL,
  `newClientsSalesBonus` int(11) DEFAULT NULL,
  `newClientsScore` int(11) DEFAULT NULL,
  `teamSalesAmount` decimal(10,2) DEFAULT NULL,
  `teamSalesPosition` int(11) DEFAULT NULL,
  `teamSalesBonus` int(11) DEFAULT NULL,
  `teamSalesScore` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `workerFk_UNIQUE` (`workerFk`,`year`,`month`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='cada mes se guardan aqui los datos de forma estática, para consulta en grafana.';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesPerson`
--

DROP TABLE IF EXISTS `salesPerson`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesPerson` (
  `workerFk` int(10) unsigned NOT NULL,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `commission` decimal(10,2) DEFAULT NULL,
  `leasedCommission` decimal(10,2) DEFAULT NULL COMMENT 'comision proveniente de clientes que han sido donados. Ver tabla Clientes_cedidos',
  `cededCommission` decimal(10,2) DEFAULT NULL COMMENT 'comision generada por los clientes que han sido donados. Ver tabla Clientes_cedidos',
  `newCommission` decimal(10,2) DEFAULT NULL,
  `leasedReplacement` decimal(10,2) DEFAULT NULL,
  `itemTypeBorrowed` decimal(10,2) DEFAULT NULL,
  `portfolioWeight` decimal(10,2) DEFAULT NULL COMMENT 'Pero de la cartera del comercial a fecha vendedores.updated',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`workerFk`,`year`,`month`),
  CONSTRAINT `salesPerson_FK` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesPersonClient__`
--

DROP TABLE IF EXISTS `salesPersonClient__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesPersonClient__` (
  `salesPersonFk` int(11) NOT NULL,
  `clientFk` int(11) NOT NULL,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `comission` decimal(10,2) DEFAULT NULL,
  `comissionBorrowed` decimal(10,2) DEFAULT NULL,
  `comissionLended` decimal(10,2) DEFAULT NULL,
  `comissionNewClient` decimal(10,2) DEFAULT NULL,
  `substitutionBorrowed` decimal(10,2) DEFAULT NULL,
  `itemTypeBorrowed` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`salesPersonFk`,`clientFk`,`year`,`month`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ventas por comercial por cliente';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `salesPersonEvolution`
--

DROP TABLE IF EXISTS `salesPersonEvolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesPersonEvolution` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL DEFAULT '0000-00-00',
  `salesPersonFk` int(10) unsigned DEFAULT NULL,
  `amount` decimal(10,3) NOT NULL DEFAULT '0.000',
  `equalizationTax` decimal(10,3) NOT NULL DEFAULT '0.000',
  `amountNewBorn` decimal(10,3) NOT NULL DEFAULT '0.000',
  PRIMARY KEY (`id`),
  KEY `salesPersonEvolution_salesPerson` (`salesPersonFk`),
  CONSTRAINT `salesPersonEvolution_salesPerson` FOREIGN KEY (`salesPersonFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Evolución Comerciales';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `vendedores`
--

DROP TABLE IF EXISTS `vendedores`;
/*!50001 DROP VIEW IF EXISTS `vendedores`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `vendedores` (
  `Id_Trabajador` tinyint NOT NULL,
  `año` tinyint NOT NULL,
  `mes` tinyint NOT NULL,
  `importe` tinyint NOT NULL,
  `comision` tinyint NOT NULL,
  `comisionArrendada` tinyint NOT NULL,
  `comisionCedida` tinyint NOT NULL,
  `comisionNuevos` tinyint NOT NULL,
  `sustitucionArrendada` tinyint NOT NULL,
  `itemTypeBorrowed` tinyint NOT NULL,
  `portfolioWeight` tinyint NOT NULL,
  `updated` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `vendedores_evolution`
--

DROP TABLE IF EXISTS `vendedores_evolution`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vendedores_evolution` (
  `workerFk` int(10) unsigned NOT NULL,
  `year` int(11) NOT NULL,
  `sales` decimal(10,2) DEFAULT NULL,
  `month` int(11) NOT NULL,
  PRIMARY KEY (`workerFk`,`year`,`month`),
  CONSTRAINT `evo_vendedor_trabajador` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ventas`
--

DROP TABLE IF EXISTS `ventas`;
/*!50001 DROP VIEW IF EXISTS `ventas`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ventas` (
  `Id_Movimiento` tinyint NOT NULL,
  `importe` tinyint NOT NULL,
  `recargo` tinyint NOT NULL,
  `fecha` tinyint NOT NULL,
  `tipo_id` tinyint NOT NULL,
  `Id_Cliente` tinyint NOT NULL,
  `empresa_id` tinyint NOT NULL,
  `margen` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ventas_contables`
--

DROP TABLE IF EXISTS `ventas_contables`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ventas_contables` (
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `venta` decimal(10,2) DEFAULT NULL,
  `grupo` int(1) NOT NULL,
  `reino_id` int(10) unsigned NOT NULL,
  `tipo_id` smallint(5) unsigned NOT NULL,
  `empresa_id` int(4) NOT NULL,
  `gasto` varchar(10) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`year`,`month`,`grupo`,`reino_id`,`tipo_id`,`empresa_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `waste`
--

DROP TABLE IF EXISTS `waste`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `waste` (
  `buyer` varchar(30) CHARACTER SET utf8 NOT NULL,
  `year` int(4) NOT NULL,
  `week` int(2) NOT NULL,
  `family` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `itemFk` int(11) NOT NULL DEFAULT '0',
  `itemTypeFk` smallint(5) unsigned DEFAULT NULL,
  `saleTotal` decimal(16,0) DEFAULT NULL,
  `saleWaste` decimal(16,0) DEFAULT NULL,
  `rate` decimal(5,1) DEFAULT NULL,
  PRIMARY KEY (`buyer`,`year`,`week`,`family`,`itemFk`),
  KEY `waste_itemType_id` (`itemTypeFk`),
  KEY `waste_item_id` (`itemFk`),
  CONSTRAINT `waste_itemType_id` FOREIGN KEY (`itemTypeFk`) REFERENCES `vn`.`itemType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `waste_item_id` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerLabourDataByMonth`
--

DROP TABLE IF EXISTS `workerLabourDataByMonth`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerLabourDataByMonth` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `month` int(2) NOT NULL,
  `year` int(4) NOT NULL,
  `total` int(5) NOT NULL COMMENT 'Número de empleados',
  `permanent` int(5) NOT NULL COMMENT 'Número de empleados fijos',
  PRIMARY KEY (`id`),
  KEY `workerLabourDataByMonth_graph_idx` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerProductivity`
--

DROP TABLE IF EXISTS `workerProductivity`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerProductivity` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `volume` decimal(10,6) NOT NULL,
  `seconds` int(11) NOT NULL,
  `actionFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `workerProductivity_warehouseFk_idx` (`warehouseFk`),
  KEY `workerProductivity_workerFk_idx` (`workerFk`),
  KEY `workerProductivity_roleFk_idx` (`actionFk`),
  CONSTRAINT `workerProductivity_FK` FOREIGN KEY (`actionFk`) REFERENCES `vncontrol`.`accion` (`accion_id`) ON UPDATE CASCADE,
  CONSTRAINT `workerProductivity_warehouseFk` FOREIGN KEY (`warehouseFk`) REFERENCES `vn`.`warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `workerProductivity_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerProductivityConfig`
--

DROP TABLE IF EXISTS `workerProductivityConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerProductivityConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `minSeconsPackager` int(11) DEFAULT NULL,
  `minSeconsItemPicker` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerSpeed__`
--

DROP TABLE IF EXISTS `workerSpeed__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerSpeed__` (
  `workerCode` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `accion` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '1',
  `LitrosMinuto` decimal(10,1) DEFAULT NULL,
  `LitrosMinutoLastHour` decimal(10,1) DEFAULT NULL,
  `lastUpdated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`workerCode`,`warehouseFk`,`accion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zone_ETD__`
--

DROP TABLE IF EXISTS `zone_ETD__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zone_ETD__` (
  `zoneFk` int(11) DEFAULT NULL,
  `totalVolume` decimal(5,1) DEFAULT NULL,
  `remainingVolume` decimal(5,1) DEFAULT NULL,
  `speed` decimal(10,2) NOT NULL DEFAULT '0.00',
  `hourTheoretical` time DEFAULT NULL,
  `hourPractical` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zone_ETD_byTime`
--

DROP TABLE IF EXISTS `zone_ETD_byTime`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zone_ETD_byTime` (
  `theorical` time NOT NULL,
  `practical` time NOT NULL DEFAULT '00:00:00',
  `m3` decimal(10,1) NOT NULL DEFAULT '0.0',
  PRIMARY KEY (`theorical`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'bs'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `nightTask_launchAll` */;
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              = 'NO_ENGINE_SUBSTITUTION' */ ;;
/*!50003 SET @saved_time_zone      = @@time_zone */ ;;
/*!50003 SET time_zone             = 'SYSTEM' */ ;;
/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `nightTask_launchAll` ON SCHEDULE EVERY 1 DAY STARTS '2022-02-08 04:14:00' ON COMPLETION PRESERVE ENABLE DO CALL bs.nightTask_launchAll */ ;;
/*!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 `zone_ETD_byTime_Refresh` */;;
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 `zone_ETD_byTime_Refresh` ON SCHEDULE EVERY 5 MINUTE STARTS '2022-01-28 09:52:45' ON COMPLETION NOT PRESERVE ENABLE DO CALL bs.zone_ETD_byTime() */ ;;
/*!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 'bs'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `tramo` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `tramo`(vDateTime DATETIME) RETURNS varchar(20) CHARSET utf8 COLLATE utf8_unicode_ci
    NO SQL
BEGIN

	DECLARE vTramo VARCHAR(20);
    DECLARE vHour INT;
    
    SET vHour = HOUR(vDateTime) ;
    
    SET vTramo =
		CASE 		
			WHEN vHour BETWEEN 0 AND 14 THEN 'Mañana'
            WHEN vHour BETWEEN 15 AND 24 THEN 'Tarde'
		END ;

RETURN vTramo;
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 `bancos_evolution_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 `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, CURDATE());
	IF IFNULL(vStartingDate,0) < TIMESTAMPADD(YEAR, -5, 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 CURDATE() AND vMaxDate
			AND p.fecha BETWEEN 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 > CURDATE() AND r.Fechacobro <= vMaxDate
				AND t.dated BETWEEN 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 ;
/*!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 `campaignComparative` */;
/*!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 `campaignComparative`(vDateFrom DATE, vDateTo DATE)
BEGIN
	SELECT 
		workerName, 
		id, 
		name, 
		CAST(SUM(previousAmmount) AS DECIMAL(10, 0)) AS previousAmmount, 
		CAST(SUM(currentAmmount) AS DECIMAL(10, 0)) AS currentAmmount 
	FROM (
			(SELECT 
				 CONCAT(w.firstname, ' ', w.lastName) AS workerName,
				 c.id,
				 c.name,
				 SUM(v.importe) AS previousAmmount,
				 0 currentAmmount
			FROM bs.ventas v
				INNER JOIN vn.`client` c ON v.Id_Cliente = c.id
				INNER JOIN vn.worker w ON c.salesPersonFk = w.id
			WHERE v.fecha BETWEEN DATE_ADD(vDateFrom, INTERVAL - 1 YEAR) 
				AND DATE_ADD(vDateTo, INTERVAL - 1 YEAR)
				GROUP BY w.id, v.Id_Cliente)
			UNION ALL
			(SELECT 
				 CONCAT(w.firstname, ' ', w.lastName) AS workerName,
				 c.id,
				 c.name,
				 0 AS previousAmmount,
				 SUM(s.quantity * s.price) AS currentAmmount
			FROM vn.sale s
				JOIN vn.ticket t ON t.id = s.ticketFk
				JOIN vn.client c ON c.id = t.clientFk
				JOIN vn.worker w ON c.salesPersonFk = w.id
			WHERE t.shipped BETWEEN vDateFrom
				AND vDateTo
				GROUP BY w.id, c.id)
			) comparative
		GROUP BY workerName, id
		HAVING (previousAmmount <> 0 OR currentAmmount <> 0)
		ORDER BY workerName, 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 `carteras_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 `carteras_add`()
BEGIN
/**
 * Inserta en @bs.carteras.
 */
	DELETE FROM bs.carteras
		WHERE Año >= YEAR(CURDATE()) - 1;

	INSERT INTO bs.carteras(Año,Mes,CodigoTrabajador,Peso)
		SELECT t.year AS Año, t.month AS Mes, w.code AS CodigoTrabajador, SUM(v.importe) AS Peso
			FROM vn.time t
				JOIN bs.ventas v on t.dated = v.fecha
				JOIN vn.client c on c.id = v.Id_Cliente
				JOIN vn.worker w ON w.id = c.salesPersonFk 
			WHERE t.year >= YEAR(CURDATE()) - 1
			GROUP BY w.code, 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 `clean` */;
/*!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 `clean`()
BEGIN
	DECLARE vFourYearsAgo DATETIME;
	DECLARE vOneYearAgo DATETIME;
	DECLARE vTwoYearAgo DATETIME;
	DECLARE vThreeYearAgo DATETIME;


	SET vOneYearAgo = TIMESTAMPADD(YEAR, -1,CURDATE());
	SET vTwoYearAgo = TIMESTAMPADD(YEAR, -2,CURDATE());
	SET vThreeYearAgo = TIMESTAMPADD(YEAR, -3,CURDATE());
	SET vFourYearsAgo = TIMESTAMPADD(YEAR, -4,CURDATE());

    DELETE FROM bs.clientNewBorn
		WHERE lastShipped < vOneYearAgo;
        
	DELETE FROM ventas
		WHERE fecha < vFourYearsAgo;
	
	DELETE FROM payMethodClient
		WHERE dated < vOneYearAgo;

	DELETE FROM payMethodClientEvolution
		WHERE dated < vFourYearsAgo;

	DELETE FROM bs.salesByclientSalesPerson 
		WHERE dated < vFourYearsAgo;
    
	DELETE FROM bs.m3 
		WHERE fecha < vTwoYearAgo;

	DELETE FROM salesByItemTypeDay
		WHERE dated < vThreeYearAgo;	
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 `clientDied_recalc` */;
/*!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 `clientDied_recalc`()
BEGIN
		SET @primerAviso := TIMESTAMPADD(MONTH,-1,CURDATE());
		SET @segundoAviso := TIMESTAMPADD(MONTH,-2,CURDATE());
		SET @tercerAviso := TIMESTAMPADD(MONTH,-3,CURDATE());

		TRUNCATE TABLE bs.clientDied;

		INSERT INTO bs.clientDied
			SELECT 	c.id,
					c.name clientName,
					maxIssued lastInvoiced,
					w.code workerCode,
					b.code Boss,
				CASE
					WHEN IFNULL(maxIssued,'2000-01-01') < @tercerAviso THEN 'Tercer Aviso'
					WHEN maxIssued < @segundoAviso THEN 'Segundo Aviso'
					WHEN maxIssued < @primerAviso THEN 'Primer Aviso'
				END as Aviso
			FROM vn.client c
				JOIN vn.worker w ON w.id = c.salesPersonFk
				JOIN vn.worker b ON b.id = w.bossFk
				JOIN vn.workerMana wm ON wm.workerFk = c.salesPersonFk
				LEFT JOIN (SELECT clientFk, max(issued) as maxIssued FROM vn.invoiceOut GROUP BY clientFk) io ON io.clientFk = c.id
			WHERE (maxIssued IS NULL OR maxIssued < @primerAviso)
				AND c.created < @tercerAviso;

		DELETE cd.* FROM bs.clientDied cd
			JOIN vn.ticket t ON t.clientFk = cd.id
			WHERE t.refFk IS NULL
				AND t.shipped >=TIMESTAMPADD(MONTH,-1,CURDATE());
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 `clientNewBorn_recalc` */;
/*!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 `clientNewBorn_recalc`()
BLOCK1: BEGIN

	DECLARE vClientFk INT;
	DECLARE vShipped DATE; 
	DECLARE vPreviousShipped DATE;
	DECLARE vDone boolean;  
	DECLARE cur cursor for         
	 
	SELECT clientFk, firstShipped  
		FROM bs.clientNewBorn;  
        
	DECLARE continue HANDLER FOR NOT FOUND SET vDone = TRUE;      
	SET vDone := FALSE;  

	DELETE FROM	bs.clientNewBorn WHERE isModified = FALSE;

        INSERT INTO clientNewBorn(clientFk, firstShipped, lastShipped)
			SELECT  c.id, MAX(t.shipped), MAX(t.shipped)
				FROM vn.client c
					JOIN vn.ticket t on t.clientFk =  c.id
                    LEFT JOIN clientNewBorn cb on cb.clientFk = c.id
				WHERE t.shipped BETWEEN TIMESTAMPADD(YEAR, -1, CURDATE()) AND CURDATE() AND cb.isModified is null
				GROUP BY c.id;
	OPEN cur;
     
	LOOP1: LOOP
		SET vDone := FALSE;
		FETCH cur INTO vClientFk, vShipped;

		IF vDone THEN
			CLOSE cur;
			LEAVE LOOP1;
		END IF;

		BLOCK2: BEGIN
			DECLARE vCurrentShipped DATE;  
			DECLARE vDone2 boolean;  
			DECLARE cur2 CURSOR FOR
				SELECT shipped 
					FROM vn.ticket 
						WHERE clientFk = vClientFk AND shipped <=  CURDATE()
						ORDER BY shipped DESC;
		 
		   DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone2 = TRUE;
				SET vDone2 := FALSE;
		   OPEN cur2;
		   
			SET vPreviousShipped := vShipped;
			LOOP2: LOOP
				SET vDone2 := FALSE;
				FETCH cur2 INTO vCurrentShipped;
				
				IF DATEDIFF(vPreviousShipped,vCurrentShipped) > 365 THEN
					UPDATE bs.clientNewBorn 
						SET firstShipped = vPreviousShipped 
						WHERE clientFk= vClientFk;
					
					CLOSE cur2;
					LEAVE LOOP2;    
				END IF;
				
				SET vPreviousShipped := vCurrentShipped;

				IF vDone2 THEN
					UPDATE bs.clientNewBorn 
						SET firstShipped = vCurrentShipped 
						WHERE clientFk= vClientFk;
					CLOSE cur2;
					LEAVE LOOP2;
				END IF;

			END LOOP LOOP2;
		END BLOCK2;
	END LOOP LOOP1;

	UPDATE bs.clientNewBorn cnb 
		LEFT JOIN (SELECT DISTINCT t.clientFk
						FROM vn.ticket t
							JOIN vn.productionConfig pc
						WHERE t.shipped BETWEEN curdate() + INTERVAL -(`notBuyingMonths`) MONTH
						AND curdate() + INTERVAL -(`pc`.`rookieDays`) DAY) notRookie ON notRookie.clientFk = cnb.clientFk
		SET cnd.isRookie = ISNULL(notRookie.clientFk); 
	
END BLOCK1 ;;
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 `comercialesCompleto` */;
/*!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 `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.calidad,
		c.Cliente cliente,
		cr.recobro * 100 tarifa,
		c.Telefono telefono,
		c.movil,
		c.POBLACION poblacion,
		p.`name` provincia,
		vn2008.red(f.futur) futur,
		c.Credito credito,
		pm.`name` forma_pago,
		vn2008.red(c365 / 12) consumo_medio365,
		vn2008.red(c365) consumo365,
		vn2008.red(CmLy.peso) peso_mes_año_pasado,
		vn2008.red(CmLy.peso * 1.19) objetivo,
		tr.CodigoTrabajador,
		vn2008.red(mes_actual.consumo) consumoMes,
		vn2008.red(IFNULL(mes_actual.consumo, 0) - IFNULL(CmLy.peso * 1.19, 0)) como_lo_llevo,
		DATE(LastTicket) ultimo_ticket,
		dead.muerto,
		g.Greuge,
		cr.recobro
	FROM
		vn2008.Clientes c
			LEFT JOIN
			(SELECT g.Id_Cliente, CAST( SUM(Importe) as DECIMAL(12,2)) AS Greuge 
				FROM vn2008.Greuges g
					JOIN vn.`client` c ON c.id = g.Id_Cliente
					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.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
					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))
				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
						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
					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(Fecha) < DATE_FORMAT(TIMESTAMPADD(MONTH, - 1, vDate), '%Y- %m-01'), TRUE, FALSE) muerto
			FROM vn2008.Facturas f
				JOIN vn2008.Clientes c ON c.Id_cliente = f.Id_Cliente
				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 ;
/*!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 `compradores_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 `compradores_add`(IN vYear INT, IN vWeekFrom INT, IN vWeekTo INT)
BEGIN
/**
 * Sustituye los registros de "bs.compradores".
 * 
 * @param vYear: año ventas
 * @param vWeekFrom: semana desde
 * @param vWeekTo: semana hasta
 */
	REPLACE bs.compradores
		SELECT it.workerFk AS Id_Trabajador, vYear AS año, tm.week AS semana, SUM(importe) AS importe, 0 AS comision 
			FROM bs.ventas v
				JOIN vn.time tm ON tm.dated = v.fecha
				JOIN vn.itemType it ON it.id = v.tipo_id 
			WHERE tm.year = vYear 
				AND  tm.week BETWEEN vWeekFrom AND vWeekTo
				AND it.categoryFk != 6
			GROUP BY it.workerFk, tm.week;
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 `compradores_add_launcher` */;
/*!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 `compradores_add_launcher`()
BEGIN

	DECLARE vYear INT;
    DECLARE vWeek INT;
    DECLARE done BOOL DEFAULT FALSE;
	  
	DECLARE rs CURSOR FOR
		SELECT year, week
			FROM vn.time
            WHERE dated <= curdate() 
				AND year = vYear 
				AND week >= vWeek;
                
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  
    SELECT MAX(año) INTO vYear 
		FROM compradores;
        
	SELECT MAX(semana) INTO vWeek
		FROM compradores 
        WHERE año = vYear; 

	OPEN rs;

	FETCH rs INTO vYear, vWeek;

	WHILE NOT done DO

		CALL compradores_add(vYear, vWeek, vWeek);
		
		FETCH rs INTO vYear, vWeek;

	END WHILE;

	CLOSE rs;

	CALL compradores_evolution_add;
    
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 `compradores_evolution_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 `compradores_evolution_add`()
BEGIN
/*

Inserta en la tabla compradores_evolution las ventas acumuladas en los ultimos 365 dias

*/

DECLARE datFEC DATE;
DECLARE i INT DEFAULT 1;


SELECT TIMESTAMPADD(DAY,1,MAX(fecha)) INTO datFEC FROM bs.compradores_evolution;

		IF ISNULL(datFEC) THEN
        
			SELECT min(fecha) INTO datFEC 
				FROM bs.ventas;
            
            INSERT INTO bs.compradores_evolution(  Id_Trabajador
                                                     , fecha
                                                     , importe)
            SELECT Id_Trabajador, datFEC, sum(importe)
							FROM bs.ventas v
							JOIN vn2008.Tipos tp using(tipo_id)
							WHERE fecha = datFEC
                            GROUP BY Id_Trabajador;
                            
			SET datFEC = TIMESTAMPADD(DAY, 1, datFEC);
        
        END IF;

		WHILE datFEC < CURDATE() DO
        
					IF i mod 150 = 0 THEN 
						SELECT datFEC;
					END IF;
                    
                    SET i = i + 1;
                    
					REPLACE bs.compradores_evolution(  Id_Trabajador
                                                     , fecha
                                                     , importe)

					SELECT Id_Trabajador
                         , datFEC as fecha
                         , sum(importe) as importe
                         
                    FROM
                    (

							SELECT Id_Trabajador
								 , importe
							FROM bs.compradores_evolution
							WHERE fecha = TIMESTAMPADD(DAY,-1,datFEC)  -- las ventas acumuladas del dia anterior
			
							UNION ALL
							
							SELECT Id_Trabajador
								 , importe * IF(v.fecha < datFEC,-1,1)  -- se restan las ventas del año anterior y se suman las del actual
							FROM bs.ventas v
							JOIN vn2008.Tipos tp using(tipo_id)
							WHERE fecha IN (datFEC, TIMESTAMPADD(DAY,-365,datFEC))
							AND reino_id != 6
                            
					)sub 
                    GROUP BY Id_Trabajador;

					SET datFEC = TIMESTAMPADD(DAY,1,datFEC);

		END WHILE;


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 `fondo_evolution_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 `fondo_evolution_add`()
BEGIN
/**
 * Inserta en la tabla fondo_maniobra los saldos acumulados en los ultimos 365 dias
 */
	DECLARE datFEC DATE DEFAULT '2015-01-01';
	
	SELECT TIMESTAMPADD(DAY,1,MAX(fecha)) 
		INTO datFEC 
			FROM bs.fondo_maniobra;
	
	WHILE datFEC < CURDATE() DO
		
		IF DAY(datFEC) MOD 28 = 0 THEN  -- esto solo sirve para no aburrirse mientras esperamos...
           SELECT datFEC;
		END IF;
        
		REPLACE bs.fondo_maniobra(Fecha, clientes_facturas, clientes_cobros,proveedores_facturas,proveedores_pagos, fondo)
			SELECT datFEC AS Fecha, Facturas, Cobros,Recibidas,Pagos, Facturas + Cobros + Recibidas + Pagos
				FROM (
					SELECT SUM(io.amount) AS Facturas
						FROM vn.invoiceOut io
							JOIN vn.client c ON io.clientFk = c.id 
						WHERE c.isRelevant
							AND io.companyFk <> 1381 
							AND io.issued BETWEEN '2011-01-01' AND datFEC
				) fac
					JOIN (
						SELECT - SUM(r.amountPaid) AS Cobros
							FROM vn.receipt r 
								JOIN vn.client c ON r.clientFk = c.id 
							WHERE c.isRelevant 
								AND r.companyFk <> 1381
								AND r.payed BETWEEN '2011-01-01' AND datFEC
					) cob
					JOIN (
						SELECT - SUM(id.amount) AS Recibidas
							FROM vn.invoiceIn ii 
								JOIN vn.invoiceInDueDay id ON ii.id = id.invoiceInFk 
							WHERE ii.companyFk <> 1381
								AND ii.issued BETWEEN '2015-01-01' AND datFEC
					) rec
					JOIN (
						SELECT SUM(p.amount) AS Pagos
							FROM vn.payment p 
							WHERE p.companyFk <>1381 
								AND p.received BETWEEN '2015-01-01' AND datFEC
					) pag;
                              
		UPDATE bs.fondo_maniobra
        	JOIN (
        		SELECT AVG(fondo) AS media
			        FROM bs.fondo_maniobra
			        	WHERE fecha <= datFEC
			) sub
		SET fondo_medio = media WHERE fecha = datFEC;
			                            
		SET datFEC = TIMESTAMPADD(DAY,1,datFEC);

	END WHILE;


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 `fruitsEvolution` */;
/*!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 `fruitsEvolution`()
BEGIN
select Id_Cliente, 
		Cliente, count(semana) as semanas, (w.code IS NOT NULL) isWorker
from (
select distinct v.Id_Cliente, c.name as Cliente, week(fecha, 3) as semana
from bs.ventas  v
join vn.itemType it ON it.id = v.tipo_id
join vn.client c ON c.id = v.Id_Cliente
where it.categoryFk = 12
and v.fecha > '2020-01-01') sub
left join vn.worker w ON w.id = sub.Id_Cliente
group by Id_Cliente;

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 `indicatorsUpdate` */;
/*!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 `indicatorsUpdate`(vDated DATE)
BEGIN

	DECLARE oneYearBefore DATE DEFAULT TIMESTAMPADD(YEAR,-1, vDated);
	DECLARE twoMonthsBefore DATE DEFAULT TIMESTAMPADD(DAY,-60, vDated);
	DECLARE oneMonthBefore DATE DEFAULT TIMESTAMPADD(DAY,-30, vDated);
	DECLARE vWeek INT;

	REPLACE indicators(updated)
		VALUES(vDated);

	-- Ventas totales del ultimo año
	UPDATE indicators
		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
				WHERE fecha BETWEEN oneYearBefore AND vDated
					AND eg.grupo = 'Verdnatura'
			) 
		WHERE updated = vDated;
 
	-- Greuge total acumulado
	UPDATE indicators
		SET totalGreuge = 
			(SELECT SUM(amount)
				FROM vn.greuge
				WHERE shipped <= vDated
			) 
		WHERE updated = vDated;

	-- Tasa de morosidad con respecto a las ventas del último mes
	UPDATE indicators
		SET latePaymentRate = 
			(SELECT SUM(amount) 
				FROM bi.defaulters 
				WHERE date = vDated AND amount > 0)
			/
			(SELECT SUM(importe + recargo) 
				FROM ventas 
				WHERE fecha BETWEEN oneMonthBefore AND vDated)
		WHERE updated = vDated;

	-- Número de trabajadores activos
	UPDATE indicators
		SET countEmployee = 
			(SELECT CAST(SUM(cl.hours_week) / 40 AS DECIMAL (10, 2))
				FROM postgresql.business b
					JOIN postgresql.business_labour bl ON bl.business_id = b.business_id
					JOIN postgresql.calendar_labour_type cl ON cl.calendar_labour_type_id = bl.calendar_labour_type_id
				WHERE vDated BETWEEN b.date_start AND IFNULL(b.date_end, vDated)
					AND b.companyCodeFk = 'VNL'
			)
		WHERE updated = vDated;

	-- Maná medio acumulado por comercial
	UPDATE indicators
		SET averageMana =
			(SELECT AVG(amount)
				FROM vn.workerMana
			)
		WHERE updated = vDated;

	-- Número de clientes que han comprado en los últimos 30 dias
	UPDATE indicators
		SET lastMonthActiveClients = 
			(SELECT COUNT(DISTINCT t.clientFk)
				FROM vn.ticket t
					WHERE t.shipped BETWEEN oneMonthBefore AND vDated
			)
		WHERE updated = vDated;

	-- Número de clientes que no han comprado en los últimos 30 dias, pero compraron en los 30 anteriores
	UPDATE indicators
		SET lastMonthLostClients = 
			(SELECT COUNT(lm.clientFk)
				FROM 
					(SELECT DISTINCT t.clientFk
						FROM vn.ticket t
						WHERE t.shipped BETWEEN oneMonthBefore AND vDated
					) cm
					RIGHT JOIN
					(SELECT DISTINCT t.clientFk
						FROM vn.ticket t
						WHERE t.shipped >= twoMonthsBefore
							AND t.shipped < oneMonthBefore
					) lm ON lm.clientFk = cm.clientFk
				WHERE cm.clientFk IS NULL
			)
		WHERE updated = vDated;

	-- Número de clientes que han comprado en los últimos 30 dias, pero no compraron en los 30 anteriores
	UPDATE indicators
		SET lastMonthNewClients = 
			(SELECT COUNT(cm.clientFk)
				FROM 
					(SELECT DISTINCT t.clientFk
						FROM vn.ticket t
						WHERE t.shipped BETWEEN oneMonthBefore AND vDated
					) cm
					LEFT JOIN
					(SELECT DISTINCT t.clientFk
						FROM vn.ticket t
						WHERE t.shipped >= twoMonthsBefore
							AND t.shipped < oneMonthBefore
					) lm ON lm.clientFk = cm.clientFk
				WHERE lm.clientFk IS NULL
			)
		WHERE updated = vDated;

	-- Porcentaje de autopedidos sobre los pedidos totales
	UPDATE indicators
		SET lastMonthWebBuyingRate =
			(SELECT (SUM(source_app != '') - SUM(source_app = 'TPV')) / SUM(source_app != '')
				FROM hedera.`order`
				WHERE date_send BETWEEN oneMonthBefore AND vDated
			)
		WHERE updated = vDated;

	-- Cálculo de las ventas agrupado por semanas
	SELECT week INTO vWeek
		FROM vn.time 
		WHERE dated = vDated;

	TRUNCATE salesByWeek;

	INSERT INTO salesByWeek (week, year, sales)
		SELECT 	t.week, t.year, SUM(v.importe + v.recargo) sales
			FROM ventas v
				LEFT JOIN vn.time t ON t.dated = fecha
		GROUP BY t.week, t.year
		ORDER BY t.week, t.year;

	-- Indicador Ventas semana actual
	UPDATE indicators i
			JOIN salesByWeek s ON s.week= vWeek 
				AND s.year = YEAR(vDated)
		SET i.thisWeekSales = s.sales
		WHERE updated = vDated;

	-- Indicador ventas semana actual en el año pasado 
	UPDATE indicators i
			JOIN salesByWeek s ON s.week = vWeek
				AND s.year = YEAR(vDated)-1
		SET i.lastYearWeekSales = s.sales
		WHERE updated = vDated;

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 `indicatorsUpdateLauncher` */;
/*!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 `indicatorsUpdateLauncher`()
BEGIN

	DECLARE vDated DATE;

	SELECT IFNULL(TIMESTAMPADD(DAY,1,MAX(updated)), '2018-04-01')
		INTO vDated
		FROM bs.indicators;
		
	WHILE vDated < CURDATE() DO
    
		CALL indicatorsUpdate(vDated);
    
		SELECT TIMESTAMPADD(DAY,1,MAX(updated))
		INTO vDated
		FROM bs.indicators;
        
    END WHILE;

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 `inspeccionSS_2021_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 `inspeccionSS_2021_add`()
BEGIN

	TRUNCATE bs.inspeccionSS_2021;

	INSERT INTO bs.inspeccionSS_2021
	SELECT wbd.business_id , 
			w.id, 
			w.firstName, 
			w.lastName, 
			d.name , 
			wtc.timed , 
			cl.hours_week , 
			t.`year` , 
			t.week , 
			t.dated ,
			0 AS orden
	FROM vn.workerTimeControl wtc
		JOIN vn.worker w ON w.id = wtc.userFk
		JOIN vn.workerBusinessDated wbd ON wbd.workerFk = wtc.userFk AND wbd.dated = date(wtc.timed)
		JOIN vn.time t ON t.dated = wbd.dated
		JOIN postgresql.business_labour bl ON bl.business_id = wbd.business_id 
		JOIN postgresql.calendar_labour_type AS cl ON bl.calendar_labour_type_id = cl.calendar_labour_type_id			
		JOIN vn.department d ON d.id = bl.department_id 
		JOIN vn.department d2 ON d2.id = d.parentFk AND d2.name = 'PRODUCCION'
	    WHERE wtc.timed BETWEEN '2020-10-01' AND '2021-04-19'
	    	AND d.lft BETWEEN d2.lft AND d2.rgt
	    	AND lastName NOT LIKE 'FERRER%';
	    
	SET @orden := 1;
	SET @id := 0;
	SET @day := 0;

	UPDATE bs.inspeccionSS_2021
		SET orden = IF(id = @id AND day(timed) = @day, @orden := @orden + 1, @orden := 1),
			id = @id := id + (0 * @day := day(timed))
		ORDER BY id, timed;
    
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 `m3Add` */;
/*!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 `m3Add`()
BEGIN

	DECLARE datSTART DATE;
    DECLARE datEND DATE;
   
    SELECT TIMESTAMPADD(WEEK, -1,MAX(fecha)) INTO datSTART
		FROM bs.m3;
        
	SET datEND = TIMESTAMPADD(DAY,-1,CURDATE());
        
	DELETE FROM bs.m3 
    WHERE fecha >= datSTART;
   
	INSERT INTO bs.m3 (fecha, provinceFk, warehouseFk, m3, year, month, week, day, dayName, euros)
		SELECT v.fecha, a.provinceFk, t.warehouseFk, sum(s.quantity * ic.cm3delivery) / 1000000 AS m3,
				tm.year, tm.month, tm.week, tm.day, dayname(v.fecha), sum(importe)
		FROM vn.ticket t
			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 bs.ventas v ON v.Id_Movimiento = s.id -- Filtra solo por ventas "buenas"
            JOIN vn.time tm ON tm.dated = v.fecha
			JOIN vn.itemCost ic ON ic.itemFk = s.itemFk AND ic.warehouseFk = t.warehouseFk
			JOIN vn.address a ON a.id = t.addressFk
		WHERE v.fecha BETWEEN datSTART AND datEND
		AND s.quantity > 0 -- evita abonos
		AND t.companyFk = 442 -- Verdnatura
		GROUP BY t.warehouseFk, v.fecha, a.provinceFk;
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 `manaCustomerUpdate` */;
/*!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 `manaCustomerUpdate`()
BEGIN
	DECLARE vToDated DATE;
	DECLARE vFromDated DATE;
	DECLARE vForDeleteDated DATE;
	DECLARE vManaId INT;
    DECLARE vManaAutoId INT;
    DECLARE vClaimManaId INT;
    DECLARE vManaBankId INT;
    DECLARE vManaGreugeTypeId INT;

	SELECT id INTO vManaId 
			FROM vn.component WHERE code = 'mana';
		
	SELECT id INTO vManaAutoId 
		FROM vn.component WHERE code = 'autoMana';
	
	SELECT id INTO vClaimManaId
		FROM vn.component WHERE code = 'manaClaim';
	
	SELECT id INTO vManaBankId 
		FROM vn.bank WHERE code = 'mana';
	
	SELECT id INTO vManaGreugeTypeId 
		FROM vn.greugeType WHERE code = 'mana';

	SELECT IFNULL(MAX(dated), '2016-01-01')
            INTO vFromDated 
        FROM vn.clientManaCache;
	
    DELETE
		FROM vn.clientManaCache
		WHERE dated = vFromDated;

	SELECT IFNULL(MAX(dated), '2016-01-01')
            INTO vFromDated 
        FROM vn.clientManaCache;

    WHILE timestampadd(DAY,30,vFromDated) < CURDATE() DO

        SELECT
                timestampadd(DAY,30,vFromDated),
                timestampadd(DAY,-90,vFromDated) 
            INTO 
                vToDated,
                vForDeleteDated;
            
        DELETE FROM vn.clientManaCache
            WHERE dated <= vForDeleteDated;

        INSERT INTO vn.clientManaCache(clientFk, mana, dated)
            SELECT 
                    Id_Cliente,
                    cast(sum(mana) as decimal(10,2)) as mana,
                    vToDated as dated 
                FROM 
                (
                    SELECT cs.Id_Cliente, Cantidad * Valor as mana
                        FROM vn2008.Tickets t
                            JOIN vn2008.Consignatarios cs using(Id_Consigna)
                            JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
                            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
                    UNION ALL
                    SELECT r.Id_Cliente, - Entregado
                        FROM vn2008.Recibos r
                        WHERE Id_Banco = vManaBankId
                            AND Fechacobro > vFromDated 
                            AND Fechacobro <= vToDated
                    
                    UNION ALL
                    SELECT g.Id_Cliente, g.Importe
                        FROM vn2008.Greuges g
                        WHERE Greuges_type_id = vManaGreugeTypeId
                            AND Fecha > vFromDated 
                            AND Fecha <= 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;

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 `manaSpellers_actualize` */;
/*!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 `manaSpellers_actualize`()
BEGIN
/**	
 * Recalcula el valor del campo con el modificador de precio para el componente de maná automático.
 */

	UPDATE vn.workerMana wm
		JOIN
			(SELECT Id_Trabajador workerFk, FLOOR(SUM(importe)/12) pesoCarteraMensual
				FROM bs.vendedores
				WHERE año * 100 + mes >= (YEAR(CURDATE()) -1) * 100 + MONTH(CURDATE())
				GROUP BY workerFk
			) lastYearSales USING(workerFk)
		SET pricesModifierRate = GREATEST(minRate, LEAST(maxRate, ROUND(- amount/lastYearSales.pesoCarteraMensual,3)));
	
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 `nightTask_launchAll` */;
/*!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 `nightTask_launchAll`()
BEGIN
/**
 * Runs all nightly tasks.
 */
	DECLARE vDone BOOL;
	DECLARE vError VARCHAR(255);
	DECLARE vErrorCode VARCHAR(255);
	DECLARE vNErrors INT DEFAULT 0;
	DECLARE vSchema VARCHAR(255);
	DECLARE vProcedure VARCHAR(255);
	DECLARE vLogMail VARCHAR(255);
	DECLARE vId INT;

	DECLARE rs CURSOR FOR
		SELECT id, `schema`, `procedure` 
			FROM nightTask 
			WHERE finished <= CURDATE()
				OR finished IS NULL
			ORDER BY `order`;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	SET max_sp_recursion_depth = 3;
	OPEN rs;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH rs INTO vId, vSchema, vProcedure;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		UPDATE nightTask
			SET `started` = NOW(),
				`finished` = NULL,
				`error` = NULL,
				`errorCode` = NULL
			WHERE id = vId;

		SET vError = NULL;
		CALL nightTask_launchTask(
			vSchema,
			vProcedure,
			vError,
			vErrorCode
		);
		
		IF vError IS NOT NULL THEN
			SET vNErrors = vNErrors + 1;

			UPDATE nightTask
				SET `error` = vError,
					`errorCode` = vErrorCode
				WHERE id = vId;
		ELSE
			UPDATE nightTask
				SET finished = NOW(),
					lastFinished = NOW()
				WHERE id = vId;
		END IF;
	END LOOP;

	CLOSE rs;

	SELECT logMail INTO vLogMail
		FROM nightTaskConfig LIMIT 1;

	IF vNErrors > 0 AND vLogMail IS NOT NULL THEN
		CALL vn.mail_insert(
			vLogMail,
			NULL,
			'Nightly task failed',
			CONCAT(
				vNErrors, ' procedures of nightly tasks have failed. ',
				'Please, see `', SCHEMA() ,'`.`nightTask` table for more info.'
			)
		);
	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 `nightTask_launchTask` */;
/*!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 `nightTask_launchTask`(
	vSchema VARCHAR(255),
    vProcedure VARCHAR(255),
    OUT vError VARCHAR(255),
    OUT vErrorCode VARCHAR(255)
)
BEGIN
/**
 * Runs an specific procedure from nightly tasks, if an error
 * occurs, instead of throw it, #vError and #vErrorCode variables
 * are setted.
 *
 * @param vSchema The procedure schema
 * @param vProcedure The procedure name
 * @param vError The error message, if any
 * @param vErrorCode The error code, if any
 */
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
		GET DIAGNOSTICS CONDITION 1
			vError = MESSAGE_TEXT,
			vErrorCode = RETURNED_SQLSTATE;

	CALL util.exec(CONCAT('CALL `', vSchema ,'`.`', vProcedure ,'`')); 
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 `payMethodClientAdd` */;
/*!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 `payMethodClientAdd`()
BEGIN
	INSERT IGNORE INTO `bs`.`payMethodClient` (dated, payMethodFk, clientFk)  
		SELECT  CURDATE(), c.payMethodFk, c.id
			FROM vn.client c    
				JOIN vn.payMethod p ON c.payMethodFk = p.id;
	
    TRUNCATE  `bs`.`payMethodClientEvolution` ;
     
    INSERT INTO  `bs`.`payMethodClientEvolution` (dated, payMethodName, amountClient, amount, equalizationTax)
		SELECT p.dated, pm.name, COUNT(p.clientFk), SUM(sub.importe) , SUM(sub.recargo) 
			 FROM bs.payMethodClient p
			 JOIN  (SELECT SUM(v.importe) AS importe, SUM(v.recargo) as recargo, v.fecha, v.Id_cliente 
				 FROM bs.ventas v
				 WHERE v.fecha>= (SELECT MIN(dated) FROM bs. payMethodClient)
				 GROUP BY v.Id_cliente, v.fecha) sub ON sub.fecha = p.dated AND sub.Id_cliente = p.ClientFk
			 JOIN vn.payMethod pm ON p.payMethodFk = pm.id
		GROUP BY dated,payMethodFk;    			
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 `saleGraphic` */;
/*!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 `saleGraphic`(IN vItemFk INT, IN vTypeFk INT, IN vCategoryFk INT, IN vFromDate DATE,
                                             IN vToDate DATE, IN vProducerFk INT)
BEGIN
	
	DECLARE vFromDateLastYear DATE;
	DECLARE vToDateLastYear DATE;
	DECLARE	vFromDateTwoYearsAgo DATE;
	DECLARE vToDateTwoYearsAgo DATE;
	
	SET vItemFk = IFNULL(vItemFk,0);
	SET vTypeFk = IFNULL(vTypeFk, 0);
	SET vCategoryFk = IFNULL(vCategoryFk,0);
	SET vFromDate = IFNULL(vFromDate,CURDATE());
	SET vToDate = IFNULL(vToDate,CURDATE());
	SET vProducerFk = IFNULL(vProducerFk,0);

	SET vFromDateLastYear = TIMESTAMPADD(YEAR,-1,vFromDate);
	SET vToDateLastYear = TIMESTAMPADD(YEAR,-1,vToDate);
	SET vFromDateTwoYearsAgo = TIMESTAMPADD(YEAR,-2,vFromDate);
	SET vToDateTwoYearsAgo = TIMESTAMPADD(YEAR,-2,vToDate);

	SELECT s.quantity, CAST(v.importe AS DECIMAL(10,0)) importe, v.fecha
		FROM bs.ventas v
			JOIN vn.sale s ON s.id = v.Id_Movimiento 
			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 
		WHERE vItemFk IN (i.id, 0)
			AND vTypeFk IN (i.typeFk, 0)
			AND vCategoryFk IN (it.categoryFk, 0)
			AND vProducerFk IN (i.producerFk, 0)
			AND (v.fecha BETWEEN vFromDate AND vToDate
				OR v.fecha BETWEEN vFromDateLastYear AND vToDateLastYear
				OR v.fecha BETWEEN vFromDateTwoYearsAgo AND vToDateTwoYearsAgo	
				);
			
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 `salePersonEvolutionAdd` */;
/*!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 `salePersonEvolutionAdd`(IN vDateStart DATETIME)
BEGIN
	DELETE FROM bs.salePersonEvolution 
				WHERE  dated <=  DATE_SUB(CURDATE(), INTERVAL 1 YEAR);
    
    
    INSERT INTO bs.salePersonEvolution (dated, amount, equalizationTax, salesPersonFk)
		SELECT fecha dated, 
				CAST(SUM(importe) AS DECIMAL(10,2) ) amount, 
				CAST(SUM(recargo) AS DECIMAL(10,2) ) equalizationTax ,
				IFNULL(salesPersonFk,0) salesPersonFk
			FROM bs.ventas v
				JOIN vn.client c ON v.Id_Cliente = c.id 
				JOIN vn.company co ON co.id = v.empresa_id
			WHERE co.code = "VNL" AND fecha >= vDateStart
		 GROUP BY v.fecha,c.salesPersonFk
		 ORDER BY salesPersonFk,dated ASC;    
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 `salesByclientSalesPerson_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 `salesByclientSalesPerson_add`(vDatedFrom DATE)
BEGIN

	IF vDatedFrom IS NULL THEN
		SELECT CURDATE() - INTERVAL DAY(CURDATE())-1 DAY - INTERVAL 1 MONTH INTO vDatedFrom;
	END IF;
    
	INSERT INTO salesByclientSalesPerson( dated, salesPersonFk, clientFk, amount, equalizationTax)
		SELECT v.fecha,
				c.salesPersonFk,
				v.Id_Cliente,
				SUM(v.importe) amount,
				SUM(v.recargo) equalizationTax
			FROM ventas v
				JOIN vn.client c on v.Id_Cliente = c.id
			WHERE v.fecha >= vDatedFrom
			GROUP BY v.fecha,c.salesPersonFk,v.Id_Cliente
		ON DUPLICATE KEY UPDATE amount= VALUES(amount), equalizationTax= VALUES(equalizationTax);
     
	UPDATE salesByclientSalesPerson s
		JOIN vn.newBornSales n ON n.dated = s.dated AND
			n.clientFk = s.clientFk
		SET s.amountNewBorn = n.amount
		WHERE n.dated >= vDatedFrom; 
            
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 `salesByItemTypeDay_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 `salesByItemTypeDay_add`(vDateStart DATE, vDateEnd DATE)
BEGIN
/**
 * Almacena datos relativos a las ventas de artículos agrupados por reino y familia
 *
 * @param vDateStart 
 * @param vDateEnd 
 */
 
    DELETE FROM bs.salesByItemTypeDay 
		WHERE dated BETWEEN vDateStart AND vDateEnd;
   
    INSERT INTO bs.salesByItemTypeDay (itemTypeFk, itemCategoryFk, dated)
		SELECT id, categoryFk, dated 
			FROM vn.itemType
				JOIN vn.`time`
			WHERE dated BETWEEN vDateStart AND vDateEnd;
    
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id itemCategoryFk,	
						it.id itemTypeFk,
						bs.dated,
						SUM(bs.amount) netSale
					FROM bs.sale bs
						JOIN vn.itemType it ON it.id = bs.typeFk
						JOIN vn .itemCategory ic ON ic.id = it.categoryFk 
						JOIN vn.client c on c.id = bs.clientFk
						JOIN vn.sale s ON s.id = bs.saleFk
						JOIN vn.item i ON i.id = s.itemFk 
						JOIN vn.ticket t ON t.id = s.ticketFk 
						JOIN vn.`time` ti ON ti.dated = bs.dated
					WHERE ic.merchandise 
						AND bs.dated BETWEEN vDateStart AND vDateEnd
					GROUP BY ic.id, it.id, bs.dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.netSale = sub.netSale;
          
    
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id AS itemCategoryFk,	
						it.id AS itemTypeFk,
						bs.dated,
						SUM(i.stems * s.quantity) stems
					FROM bs.sale bs
						JOIN vn.itemType it ON it.id = bs.typeFk
						JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
						JOIN vn.sale s ON s.id = bs.saleFk
						JOIN vn.ticket t ON t.id = s.ticketFk 
						JOIN vn.item i ON i.id = s.itemFk 
                        JOIN vn.`time` tm ON tm.dated = bs.dated
					WHERE ic.merchandise  
						AND bs.dated BETWEEN vDateStart AND vDateEnd
					GROUP BY ic.id, it.id, bs.dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk    
		SET it.stems = sub.stems;
        
   
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id AS itemCategoryFk,	
						it.id AS itemTypeFk,
						DATE(t.shipped) dated,
						COUNT(DISTINCT(i.id)) `references`
					FROM vn.ticket t
						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 
					WHERE ic.merchandise 
						AND t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
					GROUP BY ic.id, it.id, dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.`references` = sub.`references`;
    
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id AS itemCategoryFk,	
						it.id AS itemTypeFk,
						DATE(t.shipped) dated,
						SUM(i.stems*s.quantity) AS trash
					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 
						JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
						JOIN vn.client c ON c.id = t.clientFk 
					WHERE c.name = 'BASURA' 
						AND t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
					GROUP BY ic.id, it.id, dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.trash = sub.trash;	
    
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id AS itemCategoryFk,	
						it.id AS itemTypeFk,
						DATE(t.shipped) dated,
						SUM(IFNULL(i.stems, 1) * s.quantity) AS faults
					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 
						JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
						JOIN vn.client c ON c.id = t.clientFk 
					WHERE c.name = 'FALTAS' 
						AND t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
					GROUP BY ic.id, it.id, dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.`faults` = sub.`faults`;	  
          
	UPDATE bs.salesByItemTypeDay it
			JOIN (SELECT ic.id AS itemCategoryFk,	
						it.id AS itemTypeFk,
						DATE(t.shipped) dated,
						SUM((cb.quantity * s.price * (100 - s.discount) / 100)  * ((cc.maxResponsibility - c.responsibility )/4 )) accepted, 
						SUM(cb.quantity * s.price * (100 - s.discount) / 100) claimed
					FROM vn.claim c
						JOIN vn.claimBeginning cb ON cb.claimFk = c.id
						JOIN vn.sale s ON s.id = cb.saleFk
						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 
						JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
						JOIN vn.claimConfig cc
					WHERE ic.merchandise 
                        AND t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
					GROUP BY ic.id, it.id, dated) sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.accepted = sub.accepted,
			it.claimed = sub.claimed;
    
	UPDATE bs.salesByItemTypeDay it
			JOIN(SELECT itemCategoryFk, 
						itemTypeFk, 
						dated, 
						CAST(SUM(sale) AS DECIMAL(10,2)) sale, 
						CAST(SUM(buy) AS DECIMAL(10,2))buy
					FROM(SELECT  ic.id itemCategoryFk,	
								it.id itemTypeFk,
								bs.dated,
								SUM(bs.amount) sale,
								0 buy
							FROM bs.sale bs
								JOIN vn.itemType it ON it.id = bs.typeFk
								JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
								JOIN vn.client c on c.id = bs.clientFk
								JOIN vn.`time` tm ON tm.dated = bs.dated
								JOIN vn.sale s ON s.id = bs.saleFk
								JOIN vn.item i ON i.id = s.itemFk 
							WHERE ic.merchandise 
								AND bs.dated BETWEEN vDateStart AND vDateEnd
							GROUP BY ic.id, it.id, bs.dated
						UNION ALL        	      
						SELECT  ic.id,	
								it.id,
								t.landed,
								0 ,
								SUM(b.buyingValue * b.quantity)
							FROM vn.entry e 
								JOIN vn.travel t ON t.id = e.travelFk 
								JOIN vn.buy b ON b.entryFk = e.id 
								JOIN vn.item i ON i.id = b.itemFk 
								JOIN vn.itemType it ON it.id = i.typeFk 
								JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
							 WHERE ic.merchandise
								AND t.landed BETWEEN vDateStart AND vDateEnd
							GROUP BY ic.id, it.id, t.landed) sub 
					GROUP BY itemCategoryFk, itemTypeFk, dated) sub2 ON sub2.dated = it.dated AND sub2.itemCategoryFk = it.itemCategoryFk AND sub2.itemTypeFk = it.itemTypeFk
		SET it.sale = sub2.sale,
			it.buy = sub2.buy;
           
	DROP TEMPORARY TABLE IF EXISTS tmp.`component`;
		CREATE TEMPORARY TABLE tmp.`component`
			(PRIMARY KEY (`itemTypeFk`,`dated`),
				KEY `salesByItemTypeDay_itemCategoryFk_idx` (`itemCategoryFk`),
				KEY `salesByItemTypeDay_dated_idx` (`dated`))
			ENGINE = MEMORY
		SELECT DATE(t.shipped) dated,
				ic.id itemCategoryFk,	
				it.id itemTypeFk,
				SUM(s.quantity * IF(c.code = 'purchaseValue', sc.value,0)) costComponent,
				SUM(s.quantity * IF(ct.isMargin, sc.value,0)) marginComponent
			FROM vn.ticket t
				JOIN vn.sale s ON t.id = s.ticketFk 
				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 
				STRAIGHT_JOIN vn.component c ON c.id = sc.componentFk 
				JOIN vn.componentType ct ON ct.id = c.typeFk 
			WHERE t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
			GROUP BY ic.id, it.id, dated;

    UPDATE bs.salesByItemTypeDay it
			JOIN tmp.`component` c ON c.dated = it.dated AND c.itemCategoryFk = it.itemCategoryFk AND c.itemTypeFk = it.itemTypeFk
		SET it.costComponent = c.costComponent,
			it.marginComponent = c.marginComponent,
            it.saleComponent = c.costComponent + c.marginComponent;
            
   	DROP TEMPORARY TABLE tmp.`component`;     
 
/*	UPDATE bs.salesByItemTypeDay it
			JOIN(SELECT DATE(t.shipped) dated,
						ic.id itemCategoryFk,	
						it.id itemTypeFk,
						SUM(s.quantity * IF(c.code = 'purchaseValue', sc.value,0)) costComponent,
						SUM(s.quantity * IF(ct.isMargin, sc.value,0)) marginComponent
					FROM vn.ticket t
						JOIN vn.sale s ON t.id = s.ticketFk 
						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 
						STRAIGHT_JOIN vn.component c ON c.id = sc.componentFk 
						JOIN vn.componentType ct ON ct.id = c.typeFk 
                        JOIN vn.`time` tm ON tm.dated = DATE(t.shipped)
					WHERE t.shipped BETWEEN vDateStart AND util.dayEnd(vDateEnd)
					GROUP BY ic.id, it.id, dated)sub ON sub.dated = it.dated AND sub.itemCategoryFk = it.itemCategoryFk AND sub.itemTypeFk = it.itemTypeFk
		SET it.costComponent = sub.costComponent,
			it.marginComponent = sub.marginComponent,
            it.saleComponent = sub.costComponent + sub.marginComponent;*/
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 `salesByItemTypeDay_addLauncher` */;
/*!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 `salesByItemTypeDay_addLauncher`()
BEGIN
	DECLARE vDateStart,vDateEnd INT;

	SELECT DATE_SUB(CURDATE(), INTERVAL 30 DAY), CURDATE() INTO vDateStart,vDateEnd;
	CALL bs.salesByItemTypeDay_add(vDateStart, vDateEnd);
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 `salesMonthlySnapshot_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 `salesMonthlySnapshot_add`()
BEGIN
	DECLARE vExecutionDay INT;
	DECLARE vPlusNewClient INT;
	DECLARE vPlusDifference INT;
	DECLARE	vScoreNewClient INT;
	DECLARE vScoreDifference INT;
	DECLARE vMaxWorkersWithPlusNewClient INT;
	DECLARE vRowCount INT DEFAULT 1;
	DECLARE vMaxRow INT;
	DECLARE vPreviusMonth DATETIME DEFAULT CURDATE();

	SELECT executionDay, maxPlusNewClient, plusDifference, maxScoreNewClient, scoreDifference, salesPersonWithPlusNewClient
		INTO vExecutionDay, vPlusNewClient, vPlusDifference, vScoreNewClient, vScoreDifference, vMaxWorkersWithPlusNewClient
		FROM vn.commissionConfig;

	IF(DAY(CURDATE()) = vExecutionDay) THEN
		-- COMERCIAL Y EQUIPO
		DROP TEMPORARY TABLE IF EXISTS tmp.salesPersons;
		CREATE TEMPORARY TABLE tmp.salesPersons
			ENGINE = MEMORY
				SELECT	u.id workerFk,
						u.name salesPersonName,
						d.name teamName
					FROM vn.department d
						JOIN vn.workerDepartment wd ON wd.departmentFk = d.id
						JOIN account.user u ON u.id = wd.workerFk
						JOIN vn.department d2 ON d2.id = d.parentFk 
					WHERE d2.code = 'VT';

		-- VENTA, COMISIÓN
		DROP TEMPORARY TABLE IF EXISTS tmp.sale;
		CREATE TEMPORARY TABLE tmp.sale
			ENGINE = MEMORY	
				SELECT	YEAR(s.dated) year,
						MONTH(s.dated) month,
						u.name,
						SUM(s.amount) currentSale,
						SUM(s.amount)*cc.rate commissionSale,
						s.salesPersonFk workerFk,
						cc.minimumSalesByQuarter/3 minimumSalesByMonth
						FROM
							bs.salesByclientSalesPerson s
							JOIN vn.client c ON c.id = s.salesPersonFk 
							JOIN account.user u ON u.id = s.salesPersonFk
							JOIN vn.commissionConfig cc
						WHERE dated BETWEEN util.firstDayOfMonth(vPreviusMonth) AND LAST_DAY(vPreviusMonth)
						GROUP BY year, month, workerFk;

		-- OBJETIVO EVALUABLE (GRUPO) Y OBJETIVO INCENTIVO (INDIVIDUAL)
		DROP TEMPORARY TABLE IF EXISTS tmp.objectives;
		CREATE TEMPORARY TABLE tmp.objectives
			ENGINE = MEMORY
				SELECT
					sg.rank,
					sg.goal goalGroup,
					sg4.goal goalIncentive,
					sub.walletWeigth,
					sub.walletWeigth*sg4.goal/100 AS incentiveObjective,
					sub.walletWeigth*sg.goal/100 AS evaluableObjective,
					sub.workerFk,
					rb.bonus
					FROM (
						SELECT  sg.`rank` ,
								u.id workerFk,
								IFNULL(v.portfolioWeight,0) AS walletWeigth
							FROM bs.vendedores v
								JOIN account.`user` u ON u.id = v.Id_Trabajador
								JOIN vn.saleGoal sg ON  sg.`year` = YEAR(vPreviusMonth) 
									AND sg.`month` = MONTH(vPreviusMonth) 
									AND v.portfolioWeight BETWEEN sg.walletWeightFrom AND sg.walletWeightTo
							WHERE v.año = YEAR(vPreviusMonth)-1 AND v.mes = MONTH(vPreviusMonth)
							GROUP BY u.id
					) sub
						JOIN vn.saleGoal sg ON sg.`rank` = sub.rank AND sg.goalType = '1' AND sg.`year` = YEAR(vPreviusMonth) AND sg.`month` = MONTH(vPreviusMonth)
						JOIN vn.saleGoal sg4 ON sg4.`rank` = sub.rank AND sg4.goalType = '4' AND sg4.`year` = YEAR(vPreviusMonth) AND sg4.`month` = MONTH(vPreviusMonth)
						LEFT JOIN account.`user` u2 ON u2.id = sub.workerFk
						JOIN vn.rankBonus rb ON rb.`rank` = sub.`rank`;

		-- PUNTUACIÓN EQUIPO, PLUS OBJETIVO EQUIPO
		DROP TEMPORARY TABLE IF EXISTS tmp.scoreTeam;
		CREATE TEMPORARY TABLE tmp.scoreTeam
			ENGINE = MEMORY
				SELECT 	*,
						IF(sub1.teamScore >= sub1.minScoreForPlusTeam, sub1.plusTeamValue, 0) teamPlus
					FROM (
						SELECT	*,
								(100/sub.countSalesPerson)*countGroupAchieved teamScore
							FROM (
								SELECT	COUNT(u.id) countSalesPerson,
										u.id workerFk,
										u.name salesPersonName,
										d3.workerFk bossFk,
										d.name teamName,
										cc.minScoreForPlusTeam,
										cc.minScoreForPlusBoss,
										cc.plusTeam plusTeamValue,
										cc.plusBoss,
										SUM(IF(s.currentSale > r.evaluableObjective, 1, 0)) countGroupAchieved
									FROM vn.department d
										JOIN vn.workerDepartment wd ON wd.departmentFk = d.id
										JOIN account.user u ON u.id = wd.workerFk
										JOIN tmp.sale s ON s.workerFk = wd.workerFk
										JOIN tmp.objectives r ON r.workerFk = wd.workerFk
										JOIN vn.commissionConfig cc
										JOIN vn.department d2 ON d2.id = d.parentFk
										JOIN vn.department d3 ON d3.name = d.name
									WHERE d2.code = 'VT'
									GROUP BY d.name
						) sub
				) sub1;

		-- PLUS VARIABLE JEFE DE EQUIPO
		DROP TEMPORARY TABLE IF EXISTS tmp.plusBoss;
		CREATE TEMPORARY TABLE tmp.plusBoss
		ENGINE = MEMORY
			SELECT 	d.workerFk,
					IF(st.teamScore >= st.minScoreForPlusBoss , st.countSalesPerson * st.plusBoss, 0) teamBossPlus
				FROM tmp.scoreTeam st
					JOIN vn.department d ON d.name = st.teamName;

		-- PLUS CLIENTES NUEVOS
		DROP TEMPORARY TABLE IF EXISTS tmp.newClients;
		CREATE TEMPORARY TABLE tmp.newClients (
			id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
			workerFk INTEGER(11),
			name VARCHAR(30),
			total DECIMAL(10,3),
			newClientPlus INTEGER(11),
			newClientScore INTEGER(11)
		);

		INSERT INTO tmp.newClients (workerFk, total, name, newClientPlus)
				SELECT u.id workerFk, u.name, SUM(v.importe) total, vPlusNewClient
					FROM bs.clientNewBorn cn
						JOIN bs.ventas v ON DATE_ADD(cn.firstShipped, INTERVAL 1 YEAR) > v.fecha AND v.Id_Cliente = cn.clientFk
						JOIN vn.client c ON c.id = v.Id_Cliente
						JOIN account.user u ON u.id = c.salesPersonFk
						JOIN vn.workerDepartment wd ON wd.workerFk = u.id
						JOIN vn.department d On d.id = wd.departmentFk
						JOIN vn.department d2 ON d2.id = d.parentFk
					WHERE v.fecha >= util.firstDayOfMonth(vPreviusMonth)
						AND cn.firstShipped >= util.firstDayOfMonth(DATE_ADD(vPreviusMonth, INTERVAL -1 year))
						AND d2.code = 'VT'
					GROUP BY u.id
					ORDER BY total DESC;

		SET vMaxRow = ROW_COUNT();

		my_loop: LOOP
			UPDATE tmp.newClients SET newClientPlus = vPlusNewClient WHERE id = vRowCount;
			UPDATE tmp.newClients SET newClientScore = vScoreNewClient WHERE id = vRowCount;

			IF (vRowCount <= vMaxWorkersWithPlusNewClient) THEN
				SET vPlusNewClient = vPlusNewClient - vPlusDifference;
			ELSE
				SET vPlusNewClient = 0;
			END IF;

			SET vScoreNewClient = vScoreNewClient - vScoreDifference;
			SET vRowCount = vRowCount + 1;

			IF vRowCount > vMaxRow THEN
				LEAVE my_loop;
			END IF;
		END LOOP my_loop;

		INSERT INTO bs.salesMonthlySnapshot (salesPersonName, teamName, `year`, `month`, currentSale, commissionSale, individualPlus, teamPlus, teamScore, newClientPlus, newClientScore, teamBossPlus)
		SELECT *
			FROM (
				SELECT 	sp.salesPersonName,
						sp.teamName,
						s.`year`,
						s.`month`,
						s.currentSale,
						s.commissionSale,
						IF(s.currentSale > s.minimumSalesByMonth AND s.currentSale > r.incentiveObjective, r.bonus, 0) individualPlus,
						np.teamPlus,
						np.teamScore,
						nc.newClientPlus,
						nc.newClientScore,
						pb.teamBossPlus
					FROM tmp.salesPersons sp
						LEFT JOIN tmp.sale s ON s.workerFk = sp.workerFk
						LEFT JOIN tmp.objectives r ON r.workerFk = sp.workerFk
						LEFT JOIN tmp.scoreTeam np ON np.teamName = sp.teamName
						LEFT JOIN tmp.plusBoss pb ON pb.workerFk = sp.workerFk
						LEFT JOIN tmp.newClients nc ON nc.workerFk = sp.workerFk
			) sub
			ORDER BY salesPersonName;
	
		DROP TEMPORARY TABLE
			tmp.salesPersons,
			tmp.sale,
			tmp.objectives,
			tmp.scoreTeam,
			tmp.newClients;
	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 `salesPersonEvolution_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 `salesPersonEvolution_add`()
BEGIN
	DECLARE vDated DATE;
	DECLARE vCont INT DEFAULT 1;

	SELECT TIMESTAMPADD(DAY,1,MAX(dated)) INTO vDated 
		FROM bs.salesPersonEvolution;

	IF ISNULL(vDated) THEN

		SELECT MIN(dated) INTO vDated 
			FROM salesByclientSalesPerson;
		
		INSERT INTO bs.salesPersonEvolution( salesPersonFk, dated, amount, equalizationTax, amountNewBorn )
			SELECT salesPersonFk, dated, amount, equalizationTax, amountNewBorn
				FROM salesByclientSalesPerson 
				WHERE dated = vDated
				GROUP BY salesPersonFk;
                            
		SET vDated = TIMESTAMPADD(DAY, 1, vDated);
	END IF;
 
	WHILE vDated < CURDATE() DO
		
        SET vCont = vCont + 1;
		
        REPLACE bs.salesPersonEvolution( salesPersonFk, dated, amount)
			SELECT salesPersonFk, vDated, SUM(amount) 
				FROM(SELECT salesPersonFk, amount
						FROM salesPersonEvolution 
						WHERE dated = TIMESTAMPADD(DAY,-1,vDated)  -- amount acumulado día anterior
					UNION ALL
					SELECT salesPersonFk, amount * IF(dated < vDated,-1,1)  -- suma amount año actual/ resta amount año anterior
						FROM salesByclientSalesPerson 
						WHERE dated IN (vDated, TIMESTAMPADD(DAY,-365,vDated))
					)sub
				GROUP BY salesPersonFk;
            
		SET vDated = TIMESTAMPADD(DAY,1,vDated);
        
	END WHILE;
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 `salesPerson_updatePortfolio` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `salesPerson_updatePortfolio`()
BEGIN
	/**
	 * Actualiza el campo portfolioWeight que indica el peso de la cartera del comercial
	 *
	 */  
	DECLARE vStarted DATE DEFAULT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -17 MONTH), '%Y-%m-01');
    
	UPDATE vendedores v
		JOIN vn.`time` t ON t.`year` = v.año AND t.`month` = v.mes 
	SET v.portfolioWeight = NULL	
	WHERE t.dated BETWEEN vStarted AND CURDATE();

	UPDATE vendedores v
		JOIN (
			SELECT c.lastSalesPersonFk
				, t.`year`
				, t.`month`
				, SUM(v.importe) importe
			FROM vn.`time` t
				STRAIGHT_JOIN bs.ventas v ON t.dated = v.fecha
				JOIN vn.`client` c ON c.id = v.Id_Cliente
			WHERE c.lastSalesPersonFk IS NOT NULL 
				AND v.fecha BETWEEN vStarted AND CURDATE()
			GROUP BY c.lastSalesPersonFk, t.`year`, t.`month`
		) sub ON sub.lastSalesPersonFk = v.Id_Trabajador AND sub.`year` = v.año AND sub.`month`= v.mes 
	SET v.portfolioWeight = sub.importe;
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 `vendedores_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 `vendedores_add`(intYEAR INT, vQuarter INT)
BEGIN

	DECLARE vCommissionRate DOUBLE;
           
	SELECT rate
		INTO vCommissionRate
		FROM vn.commissionConfig;
        
	-- vaciar tabla
    DELETE v.* FROM vendedores v
		JOIN vn.`time` t ON t.`year` = v.año AND t.`month` = v.mes
		WHERE t.`year` = intYEAR AND QUARTER(t.dated) = vQuarter;
        
	REPLACE vendedores(Id_Trabajador, año, mes, importe, comision, portfolioWeight)
		SELECT c.Id_Trabajador
			, intYEAR
			, MONTH(v.fecha) intMONTH
			, sum(v.importe) 
			, sum(v.importe) * vCommissionRate 
            , sum(v.importe) 
		FROM ventas v
			JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente
            JOIN vn.`time` t on t.dated = v.fecha
		WHERE c.Id_Trabajador is not null
			AND t.`year` = intYEAR AND QUARTER(t.dated) = vQuarter
		GROUP BY c.Id_Trabajador, t.`month`;
              
	-- Sustitucion cedidas - lended
	INSERT INTO vendedores (Id_Trabajador, mes, año, importe, comision)
		SELECT c.salesPersonFk
                 , t.`month`
                 , t.`year`
                 , - sum(importe)
				 , - sum(importe) * vCommissionRate as lended
			FROM ventas v
				JOIN vn.client c ON c.id = v.Id_Cliente
				JOIN vn.sharingCartDaily scd on scd.ownerFk = c.salesPersonFk AND scd.dated = v.fecha
				JOIN vn.`time` t ON t.dated = v.fecha
			WHERE t.`year` = intYEAR AND QUARTER(t.dated) = vQuarter
			GROUP BY c.salesPersonFk, t.`month`
	ON DUPLICATE KEY UPDATE comision = comision + VALUES(comision),
							importe = importe + VALUES(importe);
    
	-- Sustitucion arrendadas - borrowed
	INSERT INTO vendedores (Id_Trabajador, mes, año, importe, comision)
		SELECT scd.substituteFk
                 , t.`month`
                 , t.`year`
                 , sum(importe)
				 , sum(importe) * vCommissionRate as borrowed
			FROM ventas v
				JOIN vn.`client` c ON c.id = v.Id_Cliente
				JOIN vn.sharingCartDaily scd on scd.ownerFk = c.salesPersonFk AND scd.dated = v.fecha
				JOIN vn.`time` t ON t.dated = v.fecha
			WHERE t.`year` = intYEAR AND QUARTER(t.dated) = vQuarter
			GROUP BY scd.substituteFk, t.`month`
		ON DUPLICATE KEY UPDATE comision = comision + VALUES(comision),
							importe = importe + VALUES(importe);

	
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 `vendedores_add_launcher` */;
/*!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 `vendedores_add_launcher`()
BEGIN
	DECLARE vDatedFrom DATE;
	
	CALL bs.vendedores_add(YEAR(CURDATE()),QUARTER(CURDATE()));
	CALL bs.vendedores_evolution_add;
	SELECT util.firstDayOfMonth(CURDATE())- INTERVAL 1 MONTH INTO vDatedFrom;
	CALL bs.salesByclientSalesPerson_add(vDatedFrom);
	
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 `vendedores_evolution_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 `vendedores_evolution_add`()
BEGIN
/*
Inserta en la tabla compradores_evolution las ventas acumuladas en el ultimo mes
*/

	DECLARE vYear, vMonth INTEGER;
	DECLARE vCurYear, vCurMonth INTEGER;
	DECLARE vDateFrom DATE;
	DECLARE vDateTo DATE;

	SET vCurYear = year(CURDATE());
	SET vCurMonth = month(CURDATE());

	SELECT IFNULL(max(year),vCurYear-1), IFNULL(max(month),1)
		INTO vYear, vMonth
		FROM bs.vendedores_evolution;

	WHILE (vYear < vCurYear) OR (vYear = vCurYear AND vMonth < vCurMonth) DO
	
		SELECT max(dated), TIMESTAMPADD(DAY,-364,max(dated)) INTO vDateTo, vDateFrom
			FROM vn.time
            WHERE year = vYear
				AND month = vMonth;
            
		REPLACE bs.vendedores_evolution(  workerFk
										 , year
										 , month
										 , sales)
			SELECT c.salesPersonFk
				 , vYear as year
				 , vMonth as month
				 , sum(v.importe) as sales
				FROM bs.ventas v   
					JOIN vn.client c on c.id = v.Id_Cliente
				WHERE v.fecha BETWEEN vDateFrom AND vDateTo
					AND c.salesPersonFk is not null
				GROUP BY c.salesPersonFk;

		SET vMonth = vMonth + 1;
	
		IF vMonth = 13 THEN
			SET vMonth = 1;
            SET vYear = vYear + 1;
		END IF;
	END WHILE;

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 `ventas_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 `ventas_add`(
	IN vStarted DATETIME,
	IN vEnded DATETIME)
BEGIN
/**
* Añade las ventas que se realizaron de hace
* una semana hasta hoy
* 
* @param vStarted Fecha de inicio
* @param vEnded Fecha de finalizacion
*
**/
	DECLARE vStartingDate DATETIME;
	DECLARE vEndingDate DATETIME;

	IF vStarted < TIMESTAMPADD(YEAR,-5,CURDATE()) 
		OR vEnded < TIMESTAMPADD(YEAR,-5,CURDATE()) THEN
		CALL util.throw('fechaDemasiadoAntigua');
	END IF;

	SET vEnded = util.dayEnd(vEnded);
	SET vStartingDate = vStarted ;
	SET vEndingDate = vn2008.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 ;
/*!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 `ventas_add_launcher` */;
/*!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 `ventas_add_launcher`()
BEGIN
	
	/**
	 * Añade las ventas que se realizaron de hace
	 * una semana hasta hoy
	 *
	 **/

	CALL bs.ventas_add(timestampadd(week,-1,curdate()),curdate());

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 `ventas_contables_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 `ventas_contables_add`(IN vYear INT, IN vMonth INT)
BEGIN
	
	/**
	 * Reemplaza las ventas contables del último año.
	 * Es el origen de datos para el balance de Entradas
	 *
	 * @param vYear Año a reemplazar
	 * @param vMonth Mes a reemplazar
	 *
	 **/

	DECLARE TIPO_PATRIMONIAL INT DEFAULT 188;

	DELETE FROM bs.ventas_contables 
		WHERE year = vYear 
	    	AND month = vMonth;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
	CREATE TEMPORARY TABLE tmp.ticket_list
		(PRIMARY KEY (Id_Ticket))
		ENGINE = MEMORY
		SELECT Id_Ticket
			FROM vn2008.Tickets t
				JOIN vn2008.Facturas f ON f.Id_Factura = t.Factura
			WHERE year(f.Fecha) = vYear
				AND month(f.Fecha) = vMonth;   

	INSERT INTO bs.ventas_contables(year
								  , month
								  , venta
								  , grupo
								  , reino_id
								  , tipo_id
								  , empresa_id
								  , gasto)
	
		SELECT  vYear
			  , vMonth
			  , round(sum(Cantidad * Preu * (100 - m.Descuento)/100))
			  , IF(
				   e.empresa_grupo = e2.empresa_grupo
				  ,1
				  ,IF(e2.empresa_grupo,2,0)
				  ) as grupo
			  , tp.reino_id
			  , a.tipo_id
			  , t.empresa_id
			  , 7000000000 
				+ IF(e.empresa_grupo = e2.empresa_grupo
									  ,1
									  ,IF(e2.empresa_grupo,2,0)
									  ) * 1000000  
				+ tp.reino_id * 10000 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 vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente
				JOIN tmp.ticket_list tt on tt.Id_Ticket = t.Id_Ticket
				JOIN vn2008.Articles a on m.Id_Article = a.Id_Article
				JOIN vn2008.empresa e on e.id = t.empresa_id
				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;
		
	INSERT INTO bs.ventas_contables(year
								  , month
								  , venta
								  , grupo
								  , reino_id
								  , tipo_id
								  , empresa_id
								  , gasto)
		SELECT  vYear
			  , vMonth
			  , sum(ts.quantity * ts.price)
			  , IF(
				   c.companyGroupFk = c2.companyGroupFk
				  ,1
				  ,IF(c2.companyGroupFk, 2, 0)
				  ) as grupo
			  , NULL
			  , NULL
			  , t.companyFk 
			  , 7050000000
			FROM vn.ticketService ts 
				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 vn.company c on c.id = t.companyFk 
				LEFT JOIN vn.company c2 on c2.clientFk = cl.id
			GROUP BY grupo, t.companyFk ;	
		
	DROP TEMPORARY TABLE tmp.ticket_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 `ventas_contables_add_launcher` */;
/*!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 `ventas_contables_add_launcher`()
BEGIN
	
	/**
	 * Reemplaza las ventas contables del último año.
	 * Es el origen de datos para el balance de Entradas
	 *
	 **/
	
	CALL bs.ventas_contables_add(YEAR(TIMESTAMPADD(MONTH,-1,CURDATE())), MONTH(TIMESTAMPADD(MONTH,-1,CURDATE())));

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 `ventas_contables_por_cliente` */;
/*!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 `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_Ticket))
		SELECT Id_Ticket
			FROM vn2008.Tickets t
				JOIN vn2008.Facturas f ON f.Id_Factura = t.Factura
			WHERE year(f.Fecha) = vYear
				AND month(f.Fecha) = vMonth;   		
	            
	SELECT vYear Año,
			vMonth Mes,
			t.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
		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 vn2008.Clientes c ON c.Id_Cliente = cs.Id_Cliente
			JOIN tmp.ticket_list tt ON tt.Id_Ticket = t.Id_Ticket
			JOIN vn2008.Articles a ON m.Id_Article = a.Id_Article
			JOIN vn2008.empresa e ON e.id = t.empresa_id
			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;
	
	DROP TEMPORARY TABLE tmp.ticket_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 `vivosMuertos` */;
/*!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 `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,CURDATE());
		SET @datEND = TIMESTAMPADD(DAY,-DAY(CURDATE()),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, f.Id_Cliente , 1 as Compra
					FROM vn2008.Facturas f
			        	JOIN vn2008.time tm ON tm.date = f.Fecha
					WHERE Fecha 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, f.Id_Cliente 
			FROM vn2008.Facturas f
		        JOIN vn2008.time tm ON tm.date = f.Fecha
			WHERE Fecha BETWEEN @datSTART AND @datEND
		    GROUP BY f.Id_Cliente ) 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, f.Id_Cliente
			FROM vn2008.Facturas f
	        	JOIN vn2008.time tm ON tm.date = f.Fecha
			WHERE Fecha BETWEEN @datSTART AND @datEND
	        GROUP BY f.Id_Cliente ) 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 ;
/*!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 `waste_addSales` */;
/*!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 `waste_addSales`()
BEGIN
	DECLARE vWeek INT;
	DECLARE vYear INT;

	SELECT week, year
		INTO vWeek, vYear
	FROM vn.time
		WHERE dated =  CURDATE();
	
	REPLACE bs.waste
	SELECT *, 100 * mermas / total as porcentaje
	FROM (
		SELECT  buyer,  
				year, 
				week,
				family,
				itemFk,
				itemTypeFk,
				floor(sum(value)) as total, 
				floor(sum(IF(clientTypeFk = 'loses', value, 0))) as mermas
			FROM vn.saleValue 
			where year = vYear and week = vWeek
			
			GROUP BY family, itemFk
			
		) sub
		ORDER BY mermas DESC;
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 `workerLabour_getData` */;
/*!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 `workerLabour_getData`()
BEGIN
/**
 * Carga los datos de la plantilla de trabajadores, altas y bajas en la tabla workerLabourDataByMonth para facilitar el cálculo del gráfico en grafana.
 * Se carga el día 21 de cada mes, elimina los registros del último año y los vuelve a calcular
 */
	DECLARE vFristDay DATE;
	DECLARE vLastDay DATE;
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vDateStarted DATE;
	DECLARE vDateEnded DATE;

	DECLARE vCursor CURSOR FOR
		SELECT util.firstDayOfMonth(t.dated), LAST_DAY(t.dated) 
			FROM vn.time t
			WHERE t.dated BETWEEN vDateStarted AND vDateEnded
			GROUP BY  year,month;		

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	IF DAY(CURDATE()) = 21 THEN
    
		SELECT  util.firstDayOfMonth(DATE_SUB(CURDATE(), INTERVAL 12 MONTH)),
				LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
				INTO vDateStarted, 
					vDateEnded;
		
		DELETE FROM workerLabourDataByMonth  
			WHERE CONCAT(`year`, '-',`month`, '-01') BETWEEN vDateStarted AND vDateEnded;

		OPEN vCursor;

		l: LOOP
			SET vDone = FALSE;
		
			FETCH vCursor INTO vFristDay, vLastDay;
			
			IF vDone THEN
				LEAVE l;
			END IF;
			
			-- Altas periodo
			INSERT INTO workerLabourDataByMonth (code, month, year, total, permanent)						 
				SELECT 'hiring', MONTH(vFristDay), YEAR(vFristDay), COUNT(*), SUM(wbt.isPermanent) 
					FROM vn.workerLabour w
						JOIN vn.workCenter wc ON wc.id = w.workCenterFk
						JOIN postgresql.business_labour_payroll bl ON bl.business_id = w.businessFk
						LEFT JOIN vn.workerBusinessType wbt ON wbt.id = bl.cod_contrato
						LEFT JOIN (SELECT w.workerFk
										FROM vn.workerLabour w
											LEFT JOIN (SELECT ended, workerFk FROM vn.workerLabour) wl ON wl.ended = DATE_SUB(w.started, INTERVAL 1 DAY) 
												AND wl.workerFk = w.workerFk
										WHERE w.started BETWEEN vFristDay AND vLastDay AND wl.ended 
									)sub ON sub.workerFk = w.workerFk
					WHERE wc.payrollCenterFk IS NOT NULL
						AND w.started BETWEEN vFristDay AND vLastDay
						AND sub.workerFk IS NULL
						AND NOT w.isFreelance;	

			-- Bajas periodo
			INSERT INTO workerLabourDataByMonth (code, month, year, total, permanent)					
				SELECT 'layoffs', MONTH(vFristDay), YEAR(vFristDay), COUNT(*), SUM(wbt.isPermanent)  
					FROM vn.workerLabour w
						JOIN vn.workCenter wc ON wc.id = w.workCenterFk
						JOIN postgresql.business_labour_payroll bl ON bl.business_id = w.businessFk
						LEFT JOIN vn.workerBusinessType wbt ON wbt.id = bl.cod_contrato
						LEFT JOIN (SELECT started, workerFk FROM vn.workerLabour) wl ON wl.started >= w.ended
							AND wl.workerFk = w.workerFk
					WHERE wc.payrollCenterFk IS NOT NULL
						AND w.ended BETWEEN vFristDay AND vLastDay
						AND wl.started IS NULL
						AND NOT w.isFreelance;
						
			-- Anterior al periodo
			SET vLastDay = LAST_DAY(DATE_SUB(vFristDay, INTERVAL 1 DAY));

			INSERT INTO workerLabourDataByMonth (code, month, year, total, permanent)					
				SELECT 'staff', MONTH(vFristDay), YEAR(vFristDay), COUNT(*), SUM(wbt.isPermanent)  
					FROM vn.workerLabour w
						JOIN vn.workCenter wc ON wc.id = w.workCenterFk
						JOIN postgresql.business_labour_payroll bl ON bl.business_id = w.businessFk
						LEFT JOIN vn.workerBusinessType wbt ON wbt.id = bl.cod_contrato
					WHERE wc.payrollCenterFk IS NOT NULL
						AND vLastDay BETWEEN started AND IFNULL(ended, vLastDay)
						AND NOT w.isFreelance;

			-- Discapacidad
			INSERT INTO workerLabourDataByMonth (code, month, year, total, permanent)					
				SELECT 'disabled', MONTH(vFristDay), YEAR(vFristDay), COUNT(*), SUM(wbt.isPermanent)  
					FROM vn.workerLabour w
						JOIN vn.workCenter wc ON wc.id = w.workCenterFk
						JOIN postgresql.business_labour_payroll bl ON bl.business_id = w.businessFk
						LEFT JOIN vn.workerBusinessType wbt ON wbt.id = bl.cod_contrato
					WHERE wc.payrollCenterFk IS NOT NULL
						AND vLastDay BETWEEN started AND IFNULL(ended, vLastDay)
						AND w.isDisable
						AND NOT w.isFreelance;

		END LOOP;
		CLOSE vCursor;

	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 `workerProductivity_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 `workerProductivity_add`()
BEGIN
	DECLARE vDateFrom DATE;
	SELECT DATE_SUB(CURDATE(),INTERVAL 30 DAY) INTO vDateFrom;
	
	DELETE FROM workerProductivity 
		WHERE dated >= vDateFrom;
	
	-- SACADORES Y ARTIFICIAL
	INSERT INTO workerProductivity(dated, wareHouseFk, workerFk, volume, seconds, actionFk)
		SELECT  sub.dated,
				sub.warehouseFk,
				sub.workerFk,
				SUM(sub.volume),
				SUM(sub.seconds) ,
				sub.accion_id
			FROM(SELECT t.warehouseFk warehouseFk,
						st.workerFk,
						DATE(t.shipped) dated,
						SUM((ic.cm3delivery * s.quantity)/1000000) volume,
						TIME_TO_SEC(TIMEDIFF( MAX(st.created),MIN(st.created))) + w.minSeconsItemPicker seconds,
						a.accion_id 
					FROM vn.saleTracking st
						LEFT JOIN vn.salesPreviousPreparated sp ON sp.saleFk = st.saleFk
						JOIN vn.sale s ON s.id = st.saleFk
						JOIN vn.ticket t ON t.id = s.ticketFk
						JOIN vn.itemCost ic ON ic.warehouseFk = t.warehouseFk AND ic.itemFk = s.itemFk
						JOIN vn.worker w ON w.id = st.workerFk
						JOIN vncontrol.accion a ON a.accion_id = st.actionFk
						LEFT JOIN vn.workerDepartment wd ON wd.workerFk = st.workerFk
                        JOIN workerProductivityConfig w ON TRUE
					WHERE t.shipped  >= vDateFrom 
						AND ISNULL(sp.saleFk) 
						AND (a.accion = 'SACAR'
						OR a.accion = 'PRESACAR')
					GROUP BY t.id, t.warehouseFk, st.workerFk
				) sub
			GROUP BY sub.warehouseFk, sub.workerFk, sub.dated;
			
	-- ENCAJADORES
	INSERT INTO workerProductivity(dated, wareHouseFk, workerFk, volume, seconds, actionFk)
		SELECT  sub2.shipped,
				sub2.warehouseFk,
				sub2.workerFK, 
				SUM(sub2.volume), 
				SUM(sub2.seconds),
				a.accion_id 
			FROM (SELECT t.warehouseFk,      
						SUM(s.volume) volume,      
						sub.workerFk,  
						DATE(t.shipped) shipped,
						sub.seconds + w.minSeconsPackager seconds,
						s.saleFk 
					FROM vn.saleVolume s      
						JOIN vn.ticket t ON t.id = s.ticketFk     
						JOIN(SELECT e.workerFk, e.ticketFk,TIME_TO_SEC(TIMEDIFF( MAX(e.created), MIN(e.created))) seconds   
								FROM vn.expedition e
									JOIN vn.ticket t ON t.id = e.ticketFk
								WHERE e.workerFk IS NOT NULL AND
									t.shipped >= vDateFrom  
								GROUP BY e.ticketFk
							)sub ON sub.ticketFk = t.id
						JOIN workerProductivityConfig w ON TRUE
					GROUP BY s.ticketFk, t.warehouseFk   
				 )sub2
				JOIN vncontrol.accion a ON a.accion = 'ENCAJAR'
			GROUP BY sub2.warehouseFk,sub2.workerFk, sub2.shipped;
		
	-- REVISADORES
	INSERT INTO workerProductivity(dated, wareHouseFk, workerFk, volume, seconds, actionFk)
        SELECT  sub2.shipped,
            sub2.warehouseFk,
            sub2.workerFK, 
            SUM(sub2.volume), 
            SUM(sub2.seconds),
           	sub2.accion_id
        FROM (SELECT t.warehouseFk,      
                    SUM(s.volume) volume,      
                    sub.workerFk,  
                    DATE(t.shipped) shipped,
                    sub.seconds + w.minSeconsPackager seconds,
                    sub.accion_id
                FROM vn.saleVolume s      
                    JOIN vn.ticket t ON t.id = s.ticketFk
                    JOIN(SELECT st.workerFk, t.id ticketFk,TIME_TO_SEC(TIMEDIFF( MAX(st.created), MIN(st.created))) seconds, a.accion_id   
                            FROM vn.saleTracking st
								JOIN vncontrol.accion a ON a.accion_id = st.actionFk
                                JOIN vn.sale s ON s.id = st.saleFk
                                JOIN vn.ticket t ON s.ticketFk = t.id
                            WHERE a.accion = 'CONTROLAR'
                            	AND t.shipped >= vDateFrom  
                            GROUP BY t.id
                        )sub ON sub.ticketFk = t.id
                    JOIN workerProductivityConfig w ON TRUE
                GROUP BY s.ticketFk, t.warehouseFk   
             )sub2
        GROUP BY sub2.warehouseFk,sub2.workerFk, sub2.shipped;
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 `zone_ETD_byTime` */;
/*!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 `zone_ETD_byTime`()
BEGIN
	SET @m := 0;
	
	SELECT MAX(hourTheoretical) INTO @h 
		FROM vn.zoneEstimatedDelivery ze
		WHERE ze.remainingVolume ;

	DROP TEMPORARY TABLE IF EXISTS tmpZone;
	CREATE TEMPORARY TABLE tmpZone
		SELECT 	remainingVolume, 
				hourTheoretical, 
				@m := @m + minutesLess + HOUR(TIMEDIFF(@h, hourTheoretical)) * 60 + MINUTE(TIMEDIFF(@h, hourTheoretical)) totalMinutes,
				@h := hourTheoretical previousHourTheoretical
			FROM vn.zoneEstimatedDelivery ze
				WHERE ze.remainingVolume 
			ORDER BY ze.hourTheoretical DESC;

	TRUNCATE bs.zone_ETD_byTime ;

	INSERT INTO bs.zone_ETD_byTime(theorical, practical, m3)
		SELECT 	tz.hourTheoretical, 
				TIMESTAMPADD(MINUTE, MIN(totalMinutes), tz.hourTheoretical), 
				sum(tz.remainingVolume)
			FROM tmpZone tz
			GROUP BY tz.hourTheoretical;

	DROP TEMPORARY TABLE tmpZone;
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: `cache`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `cache` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `cache`;

--
-- Table structure for table `addressFriendship`
--

DROP TABLE IF EXISTS `addressFriendship`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `addressFriendship` (
  `addressFk1` int(11) NOT NULL DEFAULT '0',
  `addressFk2` int(11) NOT NULL DEFAULT '0',
  `friendship` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`addressFk1`,`addressFk2`),
  KEY `addressFriendship_fk2_idx` (`addressFk2`),
  CONSTRAINT `addressFriendship_fk1` FOREIGN KEY (`addressFk1`) REFERENCES `vn`.`address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `addressFriendship_fk2` FOREIGN KEY (`addressFk2`) REFERENCES `vn`.`address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `available`
--

DROP TABLE IF EXISTS `available`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `available` (
  `calc_id` int(10) unsigned NOT NULL,
  `item_id` int(11) NOT NULL,
  `available` int(11) NOT NULL,
  UNIQUE KEY `calc_id` (`item_id`,`calc_id`) USING HASH,
  KEY `calc_id_4` (`calc_id`) USING BTREE
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `availableNoRaids`
--

DROP TABLE IF EXISTS `availableNoRaids`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `availableNoRaids` (
  `calc_id` int(10) unsigned NOT NULL,
  `item_id` int(11) NOT NULL,
  `available` int(11) NOT NULL,
  UNIQUE KEY `calc_id` (`item_id`,`calc_id`),
  KEY `calc_id_4` (`calc_id`) USING BTREE
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cache`
--

DROP TABLE IF EXISTS `cache`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cache` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 NOT NULL,
  `lifetime` time NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cache_calc`
--

DROP TABLE IF EXISTS `cache_calc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cache_calc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `cache_id` int(10) unsigned NOT NULL,
  `cacheName` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `params` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `last_refresh` datetime DEFAULT NULL,
  `expires` datetime DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `connection_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `cache_name` (`cache_id`,`params`),
  KEY `cache_id` (`cache_id`),
  KEY `cacheName` (`cacheName`),
  KEY `expires` (`expires`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cache_valid`
--

DROP TABLE IF EXISTS `cache_valid`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cache_valid` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `valid` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MEMORYDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `departure_limit`
--

DROP TABLE IF EXISTS `departure_limit`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `departure_limit` (
  `warehouse_id` smallint(6) unsigned NOT NULL,
  `fecha` date NOT NULL,
  `hora` int(11) NOT NULL DEFAULT '0',
  `minSpeed` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`warehouse_id`,`fecha`),
  CONSTRAINT `warehouse_departure` FOREIGN KEY (`warehouse_id`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `last_buy`
--

DROP TABLE IF EXISTS `last_buy`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `last_buy` (
  `item_id` int(10) unsigned NOT NULL,
  `warehouse_id` smallint(5) unsigned NOT NULL,
  `buy_id` int(11) DEFAULT NULL,
  `landing` date DEFAULT NULL,
  UNIQUE KEY `item_id` (`item_id`,`warehouse_id`) USING HASH,
  KEY `buy_id` (`buy_id`),
  KEY `warehouse_id` (`warehouse_id`) USING BTREE,
  CONSTRAINT `last_buy_FK_1` FOREIGN KEY (`warehouse_id`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `prod_graphic_source`
--

DROP TABLE IF EXISTS `prod_graphic_source`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `prod_graphic_source` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `m3` double NOT NULL DEFAULT '0',
  `warehouse_id` int(11) NOT NULL,
  `hora` int(11) NOT NULL,
  `order` int(11) NOT NULL DEFAULT '0',
  `graphCategory` int(11) NOT NULL DEFAULT '0',
  `Agencia` varchar(45) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `stock`
--

DROP TABLE IF EXISTS `stock`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stock` (
  `warehouse_id` smallint(5) unsigned NOT NULL,
  `item_id` int(10) unsigned NOT NULL,
  `amount` int(11) NOT NULL,
  UNIQUE KEY `warehouse_id` (`warehouse_id`,`item_id`) USING HASH,
  KEY `warehouse_id_2` (`warehouse_id`) USING BTREE
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `visible`
--

DROP TABLE IF EXISTS `visible`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visible` (
  `calc_id` int(10) unsigned NOT NULL,
  `item_id` int(11) NOT NULL,
  `visible` int(11) NOT NULL,
  UNIQUE KEY `calc_id` (`calc_id`,`item_id`) USING HASH,
  KEY `id` (`item_id`) USING BTREE
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneAgencyFriendship`
--

DROP TABLE IF EXISTS `zoneAgencyFriendship`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneAgencyFriendship` (
  `agencyModeFk` int(11) NOT NULL,
  `zoneFk` int(11) NOT NULL,
  `friendship` bigint(21) NOT NULL DEFAULT '0',
  PRIMARY KEY (`agencyModeFk`,`zoneFk`),
  KEY `zoneAgencyFriendship_fk1_idx` (`zoneFk`),
  CONSTRAINT `zoneAgencyFriendship` FOREIGN KEY (`agencyModeFk`) REFERENCES `vn`.`agencyMode` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `zoneAgencyFriendship_fk1` FOREIGN KEY (`zoneFk`) REFERENCES `vn`.`zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'cache'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `cacheCalc_clean` */;
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 `cacheCalc_clean` ON SCHEDULE EVERY 30 MINUTE STARTS '2022-01-28 09:29:18' ON COMPLETION NOT PRESERVE ENABLE DO CALL cacheCalc_clean */ ;;
/*!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 `cache_clean` */;;
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 `cache_clean` ON SCHEDULE EVERY 5 MINUTE STARTS '2022-01-28 09:29:18' ON COMPLETION NOT PRESERVE ENABLE DO CALL cache_clean */ ;;
/*!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 'cache'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `addressFriendship_Update` */;
/*!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 `addressFriendship_Update`()
BEGIN

	REPLACE cache.addressFriendship 
		SELECT addressFk1, addressFk2, count(*) friendship
			FROM
				(
				SELECT t.routeFk, t.zoneFk, t.addressFk addressFk1, t2.addressFk addressFk2
					FROM vn.ticket t
						JOIN vn.ticket t2 USING(routeFk, zoneFk)
					WHERE t.shipped >= TIMESTAMPADD(MONTH,-3,CURDATE())
						AND t2.shipped >= TIMESTAMPADD(MONTH,-3,CURDATE())
						AND t.addressFk != t2.addressFk) sub
			GROUP BY addressFk1, addressFk2;
            
	REPLACE cache.zoneAgencyFriendship
		SELECT r.agencyModeFk, t.zoneFk, count(*) friendship
			FROM vn.route r
				JOIN vn.ticket t ON t.routeFk = r.id
			WHERE t.shipped >= TIMESTAMPADD(MONTH,-3,CURDATE())
				AND r.agencyModeFk
				AND t.routeFk
                AND t.zoneFk
			GROUP BY agencyModeFk, zoneFk;
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 `availableNoRaids_refresh` */;
/*!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 `availableNoRaids_refresh`(OUT `vCalc` INT, IN `vRefresh` INT, IN `vWarehouse` INT, IN `vDate` DATE)
proc: BEGIN
	DECLARE vStartDate DATE;
	DECLARE vEndDate DATETIME;
	DECLARE vReserveDate DATETIME;
	DECLARE vParams CHAR(100);
	DECLARE vInventoryDate DATE;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL cache_calc_unlock (vCalc);
		RESIGNAL;
	END;

	IF vDate < CURDATE() THEN
		LEAVE proc;
	END IF;

	CALL vn.itemStock (vWarehouse, vDate, NULL);

	SET vParams = CONCAT_WS('/', vWarehouse, vDate);
	CALL cache_calc_start (vCalc, vRefresh, 'availableNoRaids', vParams);

	IF !vRefresh THEN
		LEAVE proc;
	END IF;
	
	-- Calcula algunos parametros necesarios

	SET vStartDate = TIMESTAMP(vDate, '00:00:00');
	SET vEndDate = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDate), '23:59:59');

	SELECT inventoried INTO vInventoryDate FROM vn.config;

	SELECT SUBTIME(NOW(), reserveTime) INTO vReserveDate
		FROM hedera.orderConfig;

	-- Calcula el ultimo dia de vida para cada producto

	DROP TEMPORARY TABLE IF EXISTS item_range;
	CREATE TEMPORARY TABLE item_range
	(PRIMARY KEY (item_id))
	ENGINE = MEMORY
	SELECT c.item_id, IF(it.life IS NULL, NULL,
		TIMESTAMP(TIMESTAMPADD(DAY, it.life, c.landing), '23:59:59')) AS date_end
		FROM (
			SELECT b.itemFk item_id, MAX(t.landed) landing
				FROM vn.buy b
					JOIN vn.entry e ON b.entryFk = e.id
					JOIN vn.travel t ON t.id = e.travelFk
					JOIN vn.warehouse w ON w.id = t.warehouseInFk
					JOIN vn.supplier s ON s.id = e.supplierFk
				WHERE t.landed BETWEEN vInventoryDate AND vStartDate
					AND t.warehouseInFk = vWarehouse
					AND s.name != 'INVENTARIO'
					AND NOT e.isRaid
				GROUP BY b.itemFk 
		) c
			JOIN vn.item i ON i.id = c.item_id
			JOIN vn.itemType it ON it.id = i.typeFk
		HAVING date_end >= vStartDate OR date_end IS NULL;

	-- Replica la tabla item_range para poder usarla varias veces en la misma consulta

	DROP TEMPORARY TABLE IF EXISTS item_range_copy1;
	CREATE TEMPORARY TABLE item_range_copy1 LIKE item_range;
	INSERT INTO item_range_copy1 
		SELECT * FROM item_range;
		
	DROP TEMPORARY TABLE IF EXISTS item_range_copy2;
	CREATE TEMPORARY TABLE item_range_copy2 LIKE item_range;
	INSERT INTO item_range_copy2 
		SELECT * FROM item_range;
		
	DROP TEMPORARY TABLE IF EXISTS item_range_copy3;
	CREATE TEMPORARY TABLE item_range_copy3 LIKE item_range;
	INSERT INTO item_range_copy3 
		SELECT * FROM item_range;
		
	DROP TEMPORARY TABLE IF EXISTS item_range_copy4;
	CREATE TEMPORARY TABLE item_range_copy4 LIKE item_range;
	INSERT INTO item_range_copy4 
		SELECT * FROM item_range;

	-- Calcula el ATP

	DELETE FROM availableNoRaids WHERE calc_id = vCalc;

	INSERT INTO availableNoRaids (calc_id, item_id, available)
	SELECT vCalc, t.item_id, SUM(stock) amount FROM (	
		SELECT il.itemFk AS item_id, stock
			FROM tmp.itemList il
				JOIN item_range ir ON ir.item_id = il.itemFk 
		UNION ALL
		SELECT t.item_id, minacum(dt, amount, vDate) AS available FROM (
			SELECT itemFk AS item_id, DATE(dat) dt, SUM(quantity) amount FROM (
				SELECT i.itemFk, i.shipped AS dat, i.quantity
					FROM vn.itemTicketOut i
						JOIN item_range_copy1 ir ON ir.item_id = i.itemFk
					WHERE i.shipped >= vStartDate
						AND (ir.date_end IS NULL OR i.shipped <= ir.date_end)
						AND i.warehouseFk = vWarehouse
				UNION ALL
				SELECT i.itemFk, i.landed AS dat, i.quantity
					FROM vn.itemEntryIn i
						JOIN item_range_copy2 ir ON ir.item_id = i.itemFk
					WHERE i.landed >= vStartDate
						AND (ir.date_end IS NULL OR i.landed <= ir.date_end)
						AND i.warehouseInFk = vWarehouse
						AND i.isVirtualStock = FALSE
				UNION ALL
				SELECT i.itemFk, i.shipped AS dat, i.quantity
					FROM vn.itemEntryOut i
						JOIN item_range_copy3 ir ON ir.item_id = i.itemFk 
					WHERE i.shipped >= vStartDate 
						AND (ir.date_end IS NULL OR i.shipped <= ir.date_end)
						AND i.warehouseOutFk = vWarehouse
				UNION ALL
				SELECT r.item_id, r.shipment, -r.amount
					FROM hedera.order_row r
						JOIN hedera.`order` o ON o.id = r.order_id
						JOIN item_range_copy4 ir ON ir.item_id = r.item_id
					WHERE r.shipment >= vStartDate
						AND (ir.date_end IS NULL OR r.shipment <= ir.date_end)
						AND r.warehouse_id = vWarehouse
						AND r.created >= vReserveDate
						AND NOT o.confirmed
			) t
			GROUP BY item_id, dt
		) t
		GROUP BY t.item_id 
	) t GROUP BY t.item_id;

	DROP TEMPORARY TABLE IF EXISTS 
		tmp.itemList
		,item_range
		,item_range_copy1
		,item_range_copy2
		,item_range_copy3
		,item_range_copy4;

	CALL cache_calc_end (vCalc);
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 `available_clean` */;
/*!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 `available_clean`()
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tCalc;
	CREATE TEMPORARY TABLE tCalc
		(INDEX (id))
		ENGINE = MEMORY
		SELECT id FROM cache_calc;

	DELETE a
		FROM available a
			LEFT JOIN tCalc c ON c.id = a.calc_id
		WHERE c.id IS NULL;
	
	DELETE a
		FROM availableNoRaids a
			LEFT JOIN tCalc c ON c.id = a.calc_id
		WHERE c.id IS NULL;
		
	DROP TEMPORARY TABLE tCalc;
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 `available_refresh` */;
/*!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 `available_refresh`(OUT `vCalc` INT, IN `vRefresh` INT, IN `vWarehouse` INT, IN `vDate` DATE)
proc: BEGIN
	DECLARE vStartDate DATE;
	DECLARE vReserveDate DATETIME;
	DECLARE vParams CHAR(100);
	DECLARE vInventoryDate DATE;
	DECLARE vIsLogifloraDay BOOLEAN;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL cache_calc_unlock (vCalc);
		RESIGNAL;
	END;

	IF vDate < CURDATE() THEN
		LEAVE proc;
	END IF;

	CALL vn.itemStock (vWarehouse, vDate, NULL);

	SET vParams = CONCAT_WS('/', vWarehouse, vDate);
	CALL cache_calc_start (vCalc, vRefresh, 'available', vParams);

	IF !vRefresh THEN
		LEAVE proc;
	END IF;

	-- Invoca al procedimiento que genera el stock virtual de Logiflora, si coincide con la peticion de refresco del disponible
	IF vn.isLogifloraDay(vDate, vWarehouse) THEN

		-- CALL edi.floramondo_offerRefresh;
		SET vIsLogifloraDay = TRUE;

	ELSE

		SET vIsLogifloraDay = FALSE;

	END IF;

	-- Calcula algunos parámetros necesarios

	SET vStartDate = TIMESTAMP(vDate, '00:00:00');

	SELECT inventoried INTO vInventoryDate FROM vn.config;

	SELECT SUBTIME(NOW(), reserveTime) INTO vReserveDate
		FROM hedera.orderConfig;

	-- Calcula el ultimo dia de vida para cada producto

	DROP TEMPORARY TABLE IF EXISTS item_range;
	CREATE TEMPORARY TABLE item_range
	(PRIMARY KEY (item_id))
	ENGINE = MEMORY
	SELECT c.item_id, IF(it.life IS NULL, NULL,
		TIMESTAMP(TIMESTAMPADD(DAY, it.life, c.landing), '23:59:59')) AS date_end
		FROM (
			SELECT b.itemFk item_id, MAX(t.landed) landing
				FROM vn.buy b
					JOIN vn.entry e ON b.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 vInventoryDate AND vStartDate
					AND t.warehouseInFk = vWarehouse
					AND NOT e.isExcludedFromAvailable
				GROUP BY b.itemFk 
		) c
			JOIN vn.item i ON i.id = c.item_id
			JOIN vn.itemType it ON it.id = i.typeFk
		HAVING date_end >= vStartDate OR date_end IS NULL;

	-- Replica la tabla item_range para poder usarla varias veces en la misma consulta

	DROP TEMPORARY TABLE IF EXISTS item_range_copy1;
	CREATE TEMPORARY TABLE item_range_copy1 LIKE item_range;
	INSERT INTO item_range_copy1 
		SELECT * FROM item_range;

	DROP TEMPORARY TABLE IF EXISTS item_range_copy2;
	CREATE TEMPORARY TABLE item_range_copy2 LIKE item_range;
	INSERT INTO item_range_copy2 
		SELECT * FROM item_range;

	DROP TEMPORARY TABLE IF EXISTS item_range_copy3;
	CREATE TEMPORARY TABLE item_range_copy3 LIKE item_range;
	INSERT INTO item_range_copy3 
		SELECT * FROM item_range;

	DROP TEMPORARY TABLE IF EXISTS item_range_copy4;
	CREATE TEMPORARY TABLE item_range_copy4 LIKE item_range;
	INSERT INTO item_range_copy4 
		SELECT * FROM item_range;

	-- Calcula el ATP

	DELETE FROM available WHERE calc_id = vCalc;

	INSERT INTO available (calc_id, item_id, available)
	SELECT vCalc, t.item_id, SUM(stock) amount FROM (	
		SELECT il.itemFk AS item_id, stock
			FROM tmp.itemList il
				JOIN item_range ir ON ir.item_id = il.itemFk 
		UNION ALL
		SELECT t.item_id, minacum(dt, amount, vDate) AS available 
		FROM (
			SELECT itemFk AS item_id, DATE(dat) dt, SUM(quantity) amount 
			FROM (
				SELECT i.itemFk, i.shipped AS dat, i.quantity
					FROM vn.itemTicketOut i
						JOIN item_range_copy1 ir ON ir.item_id = i.itemFk
					WHERE i.shipped >= vStartDate
						AND (ir.date_end IS NULL OR i.shipped <= ir.date_end)
						AND i.warehouseFk = vWarehouse
				UNION ALL
				SELECT i.itemFk, i.landed AS dat, i.quantity
					FROM vn.itemEntryIn i
						JOIN item_range_copy2 ir ON ir.item_id = i.itemFk
						LEFT JOIN edi.warehouseFloramondo wf ON wf.entryFk = i.entryFk 
					WHERE i.landed >= vStartDate
						AND (ir.date_end IS NULL OR i.landed <= ir.date_end)
						AND i.warehouseInFk = vWarehouse
						AND (ISNULL(wf.entryFk) OR vIsLogifloraDay)
				UNION ALL
				SELECT i.itemFk, i.shipped AS dat, i.quantity
					FROM vn.itemEntryOut i
						JOIN item_range_copy3 ir ON ir.item_id = i.itemFk 
					WHERE i.shipped >= vStartDate 
						AND (ir.date_end IS NULL OR i.shipped <= ir.date_end)
						AND i.warehouseOutFk = vWarehouse
				UNION ALL
				SELECT r.item_id, r.shipment, -r.amount
					FROM hedera.order_row r
						JOIN hedera.`order` o ON o.id = r.order_id
						JOIN item_range_copy4 ir ON ir.item_id = r.item_id
					WHERE r.shipment >= vStartDate
						AND (ir.date_end IS NULL OR r.shipment <= ir.date_end)
						AND r.warehouse_id = vWarehouse
						AND r.created >= vReserveDate
						AND NOT o.confirmed
			) t
			GROUP BY item_id, dt
		) t
		GROUP BY t.item_id 
	) t GROUP BY t.item_id;

	DROP TEMPORARY TABLE IF EXISTS 
		tmp.itemList
		,item_range
		,item_range_copy1
		,item_range_copy2
		,item_range_copy3
		,item_range_copy4;

	CALL cache_calc_end (vCalc);
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 `cacheCalc_clean` */;
/*!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 `cacheCalc_clean`()
BEGIN
	DECLARE vCleanTime DATETIME DEFAULT TIMESTAMPADD(MINUTE, -5, NOW());
	DELETE FROM cache_calc WHERE expires < vCleanTime;
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 `cache_calc_end` */;
/*!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 `cache_calc_end`(IN `v_calc` INT)
BEGIN
	DECLARE v_cache_name VARCHAR(255);
	DECLARE v_params VARCHAR(255);

	-- Libera el bloqueo y actualiza la fecha de ultimo refresco.

	UPDATE cache_calc cc JOIN cache c ON c.id = cc.cache_id
		SET
			cc.last_refresh = NOW(),
			cc.expires = LEAST(ADDTIME(NOW(), c.lifetime), util.midNight()),
			cc.connection_id = NULL
				WHERE cc.id = v_calc;

	SELECT c.name, ca.params INTO v_cache_name, v_params
		FROM cache c
		JOIN cache_calc ca ON c.id = ca.cache_id
			WHERE ca.id = v_calc;

	IF v_cache_name IS NOT NULL THEN
		DO RELEASE_LOCK(CONCAT_WS('/', v_cache_name, IFNULL(v_params, '')));
	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 `cache_calc_start` */;
/*!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 `cache_calc_start`(OUT `v_calc` INT, INOUT `v_refresh` INT, IN `v_cache_name` VARCHAR(50), IN `v_params` VARCHAR(100))
proc: BEGIN
	DECLARE v_valid BOOL;
	DECLARE v_lock_id VARCHAR(100);
	DECLARE v_cache_id INT;
	DECLARE v_expires DATETIME;
	DECLARE v_clean_time DATETIME;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		IF v_lock_id IS NOT NULL THEN
			DO RELEASE_LOCK(v_lock_id);
        END IF;

		RESIGNAL;
	END;

	SET v_params = IFNULL(v_params, '');

	-- Si el servidor se ha reiniciado invalida todos los calculos.

	SELECT COUNT(*) > 0 INTO v_valid FROM cache_valid;

	IF !v_valid
	THEN
		DELETE FROM cache_calc;
		INSERT INTO cache_valid (valid) VALUES (TRUE);
	END IF;

	-- Obtiene un bloqueo exclusivo para que no haya problemas de concurrencia.

	SET v_lock_id = CONCAT_WS('/', v_cache_name, v_params);

	IF !GET_LOCK(v_lock_id, 30)
	THEN
		SET v_calc = NULL;
		SET v_refresh = FALSE;
		LEAVE proc;
	END IF;

	-- Comprueba si el calculo solicitado existe y esta actualizado.

	SELECT c.id, ca.id, ca.expires
		INTO v_cache_id, v_calc, v_expires
		FROM cache c
			LEFT JOIN cache_calc ca
				ON ca.cache_id = c.id AND ca.params = v_params COLLATE 'utf8_general_ci' 
		WHERE c.name = v_cache_name COLLATE 'utf8_general_ci';
				
	-- Si existe una calculo valido libera el bloqueo y devuelve su identificador.

	IF !v_refresh AND NOW() < v_expires
	THEN
		DO RELEASE_LOCK(v_lock_id);
		SET v_refresh = FALSE;
		LEAVE proc;
	END IF;

	-- Si el calculo no existe le crea una entrada en la tabla de calculos.

	IF v_calc IS NULL
	THEN
		INSERT INTO cache_calc SET
			cache_id = v_cache_id,
			cacheName = v_cache_name,
			params = v_params,
			last_refresh = NULL,
			expires = NULL,
			connection_id = CONNECTION_ID();

		SET v_calc = LAST_INSERT_ID();
	ELSE
		UPDATE cache_calc
			SET
				last_refresh = NULL,
				expires = NULL,
				connection_id = CONNECTION_ID()
			WHERE id = v_calc;
	END IF;

	-- Si se debe recalcular mantiene el bloqueo y devuelve su identificador.

	SET v_refresh = TRUE;
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 `cache_calc_unlock` */;
/*!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 `cache_calc_unlock`(IN `v_calc` INT)
proc: BEGIN
	DECLARE v_cache_name VARCHAR(50);
	DECLARE v_params VARCHAR(100);

	IF v_calc IS NULL THEN
		LEAVE proc;
	END IF;

	SELECT c.name, ca.params INTO v_cache_name, v_params
		FROM cache c
		JOIN cache_calc ca ON c.id = ca.cache_id
			WHERE ca.id = v_calc;
			
	DELETE FROM cache_calc WHERE id = v_calc;

	IF v_cache_name IS NOT NULL THEN
		DO RELEASE_LOCK(CONCAT_WS('/', v_cache_name, IFNULL(v_params, '')));
	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 `cache_clean` */;
/*!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 `cache_clean`()
    NO SQL
BEGIN
	CALL available_clean;
	CALL visible_clean;
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 `clean` */;
/*!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 `clean`()
BEGIN
  
    DECLARE vDateShort DATETIME; 

    SET vDateShort = TIMESTAMPADD(MONTH, -1, CURDATE());

    DELETE FROM cache.departure_limit WHERE Fecha < vDateShort;
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 `departure_timing` */;
/*!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 `departure_timing`(vWarehouseId INT)
BEGIN

DECLARE done BOOL DEFAULT FALSE;
DECLARE rsDeparture INT;
DECLARE rsHoras DECIMAL(5,2);
DECLARE rsInicio DECIMAL(5,2);
DECLARE resto DECIMAL(5,2);
DECLARE horasProd DECIMAL(5,2);
DECLARE inicioProd DECIMAL(5,2) DEFAULT 24.00;
DECLARE myTime DECIMAL(5,2);
DECLARE departureLimit INT;
DECLARE myMinSpeed DECIMAL(10,2);
DECLARE vLoadingDelay DECIMAL(5) DEFAULT 2;

DECLARE rs CURSOR FOR
	SELECT Departure
    , Sum(pb.m3)/(GREATEST(IFNULL(lhp.m3,0),IFNULL(dp.minSpeed,0))) AS Horas
	, curDate()+(Departure + vLoadingDelay -(Sum(pb.m3)/(GREATEST(IFNULL(lhp.m3,0),IFNULL(minSpeed,0))))/24) AS InicioPreparacion
	FROM tmp.production_buffer pb
	LEFT JOIN vn.lastHourProduction lhp ON lhp.warehouseFk = pb.warehouse_id
	LEFT JOIN cache.departure_limit dp ON dp.warehouse_id = pb.warehouse_id AND dp.fecha = CURDATE()
	WHERE pb.Fecha = CURDATE()
	AND pb.graphCategory > 1
	AND IFNULL(Departure,0) > 0
	GROUP BY Departure
	ORDER BY Departure DESC;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	SET myTime = HOUR(now()) + MINUTE(now()) / 60; 

	OPEN rs;

	FETCH rs INTO rsDeparture, rsHoras , rsInicio;

	WHILE NOT done DO

		SET resto = IF(inicioProd < rsDeparture, rsDeparture - inicioProd,0);
		
		SET inicioProd = rsDeparture - rsHoras;
		
		IF inicioProd - resto < myTime THEN
		
			SET done = TRUE;
			
		ELSE
		
			SET departureLimit = rsDeparture;
			
			FETCH rs INTO rsDeparture, rsHoras , rsInicio;
			
			-- SELECT rsDeparture, rsHoras , rsInicio;
			
		END IF;
		
	END WHILE;

	SET departureLimit = IFNULL(departureLimit,24);
	SET departureLimit = IF(departureLimit = 0, 24, departureLimit);

		SELECT minSpeed INTO myMinSpeed
		FROM cache.departure_limit
		WHERE warehouse_id = vWarehouseId
		AND fecha = CURDATE();

		REPLACE cache.departure_limit(warehouse_id, fecha, hora, minSpeed)
		VALUES (vWarehouseId, CURDATE(), departureLimit, IFNULL(myMinSpeed,0));

	CLOSE rs;

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 `last_buy_refresh` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `last_buy_refresh`(vRefresh BOOL)
proc: BEGIN
/**
 * Crea o actualiza la cache con la última compra y fecha de cada
 * artículo hasta ayer. Para obtener la última compra hasta una fecha
 * determinada utilizar el procedimiento vn.buyUltimate().
 *
 * @param vRefresh %TRUE para forzar el recálculo de la cache
 */
	DECLARE vCalc INT;
    DECLARE started DATE;
    DECLARE ended DATE;
    DECLARE vLastRefresh DATE;
	
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL cache_calc_unlock (vCalc);
		RESIGNAL;
	END;

    CALL cache_calc_start (vCalc, vRefresh, 'last_buy', NULL);

    IF !vRefresh
    THEN
		LEAVE proc;
	END IF;

	-- TODO: ¿Se puede usar la fecha del ultimo inventario?
    SELECT inventoried INTO started FROM vn.config LIMIT 1;
	SET ended = CURDATE(); -- TIMESTAMPADD(DAY, -1, CURDATE());

	CALL vn.buyUltimateFromInterval(NULL, started, ended);

	DELETE FROM last_buy;

	INSERT INTO last_buy (item_id, warehouse_id, buy_id, landing)
		SELECT itemFk, warehouseFk, buyFk, landed
			FROM tmp.buyUltimateFromInterval;

	DROP TEMPORARY TABLE tmp.buyUltimateFromInterval;

    CALL cache_calc_end (vCalc);
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 `prod_graphic_refresh` */;
/*!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 `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 = CURDATE()
    GROUP BY wh_id, graphCategory
    ;
    
    
    CALL cache_calc_end (v_calc);
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 `stock_refresh` */;
/*!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 `stock_refresh`(v_refresh BOOL)
proc: BEGIN
/**
 * Crea o actualiza la cache con el disponible hasta el día de 
 * ayer. Esta cache es usada como base para otros procedimientos
 * como el cáculo del visible o del ATP.
 *
 * @param v_refresh %TRUE para forzar el recálculo de la cache
 **/
	DECLARE v_calc INT;
	DECLARE v_date_inv DATE;
	DECLARE v_curdate DATE;
	DECLARE v_last_refresh DATETIME;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL cache_calc_unlock (v_calc);
		RESIGNAL;
	END;

	CALL cache_calc_start (v_calc, v_refresh, 'stock', NULL);

	IF !v_refresh
	THEN
		LEAVE proc;
	END IF;

	SET v_date_inv = (SELECT inventoried FROM vn.config LIMIT 1);
	SET v_curdate = CURDATE();
	
	DELETE FROM stock;
	
	INSERT INTO stock (item_id, warehouse_id, amount)
	SELECT item_id, warehouse_id, SUM(amount) amount FROM
	(
		SELECT itemFk AS item_id, warehouseFk AS warehouse_id, quantity AS amount 
			FROM vn.itemTicketOut
			WHERE shipped >= v_date_inv AND shipped < v_curdate
		UNION ALL
		SELECT itemFk ASitem_id, warehouseInFk AS warehouse_id, quantity AS amount 
			FROM vn.itemEntryIn
			WHERE landed >= v_date_inv AND landed < v_curdate AND isVirtualStock is FALSE
		UNION ALL
		SELECT itemFk AS item_id ,warehouseOutFk AS warehouse_id, quantity AS amount 
			FROM vn.itemEntryOut
			WHERE shipped >= v_date_inv AND shipped < v_curdate
	) t
	GROUP BY item_id, warehouse_id HAVING amount != 0;

    CALL cache_calc_end (v_calc);
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 `visible_clean` */;
/*!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 `visible_clean`()
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tCalc;
	CREATE TEMPORARY TABLE tCalc
		(INDEX (id))
		ENGINE = MEMORY
		SELECT id FROM cache_calc;
				
	DELETE v
		FROM visible v
			LEFT JOIN tCalc c ON c.id = v.calc_id
		WHERE c.id IS NULL;
		
	DROP TEMPORARY TABLE tCalc;
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 `visible_refresh` */;
/*!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 `visible_refresh`(OUT v_calc INT, v_refresh BOOL, v_warehouse INT)
proc: BEGIN
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		CALL cache_calc_unlock (v_calc);
		RESIGNAL;
	END;

    CALL cache_calc_start (v_calc, v_refresh, 'visible', v_warehouse);

	IF !v_refresh THEN
		LEAVE proc;
	END IF;
	
	-- Calculamos el stock hasta ayer
    
    CALL `cache`.stock_refresh(false);
    
	DROP TEMPORARY TABLE IF EXISTS vn2008.tmp_item;
	CREATE TEMPORARY TABLE vn2008.tmp_item
		(PRIMARY KEY (item_id))
		ENGINE = MEMORY
		SELECT item_id, amount stock, amount visible FROM `cache`.stock
			WHERE warehouse_id = v_warehouse;

	-- Calculamos los movimientos confirmados de hoy
	CALL vn.item_GetVisible(v_warehouse, NULL);	
	DELETE FROM visible WHERE calc_id = v_calc;
    
	INSERT INTO visible (calc_id, item_id,visible)
		SELECT v_calc, item_id, visible FROM vn2008.tmp_item;

    CALL cache_calc_end (v_calc);

	DROP TEMPORARY TABLE vn2008.tmp_item;
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: `edi`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `edi` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `edi`;

--
-- Table structure for table `PriceDetails`
--

DROP TABLE IF EXISTS `PriceDetails`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `PriceDetails` (
  `ID` int(11) NOT NULL,
  `SuplyResponseID` int(11) NOT NULL,
  `PriceType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Location` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Price` decimal(10,2) DEFAULT NULL,
  `BasisQuantitiy` int(11) DEFAULT NULL,
  `BasisQuantityType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `MinimumQuantity` int(11) DEFAULT NULL,
  `MinimumQuantityType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `MaximumQuantity Integer` int(11) DEFAULT NULL,
  `MaximumQuantityType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LatestDeliveryDateTime` datetime DEFAULT NULL,
  `EarliestDespatchDateTime` datetime DEFAULT NULL,
  `FirstOrderDateTime` datetime DEFAULT NULL,
  `LatestOrderDateTime` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `VMPSettings`
--

DROP TABLE IF EXISTS `VMPSettings`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `VMPSettings` (
  `VMPID` int(11) NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isEktSender` tinyint(4) NOT NULL DEFAULT '0',
  `MessageID` int(11) NOT NULL,
  `dateTimeTry` timestamp NULL DEFAULT NULL,
  `isVmpBA` tinyint(4) DEFAULT NULL COMMENT 'Basic authentication',
  `vmpVersion` int(11) DEFAULT NULL,
  `vmpUrl` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `loginName` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `loginPassword` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `refreshRate` int(11) DEFAULT NULL,
  `eanBuyer` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `eanSupplier` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `eanAgent` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dateTimeLastSync` timestamp NULL DEFAULT NULL,
  `closedFrom` int(11) DEFAULT NULL,
  `closedTo` int(11) DEFAULT NULL,
  `totalRefreshHours` int(11) DEFAULT NULL COMMENT 'Numero > 4 para no saturar, no repetir para que no solapen las actualizaciones',
  `UseSupplierEmbalageCode` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'vmp you want to see their embalage code',
  `firstSupplyResponseId` int(11) DEFAULT NULL,
  `ApiId` int(11) DEFAULT NULL,
  `ApiKey` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isBlocked` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'product source not allowed',
  `isVNHSupplier` tinyint(1) DEFAULT '0' COMMENT 'The account belongs to VNH',
  PRIMARY KEY (`VMPID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bucket`
--

DROP TABLE IF EXISTS `bucket`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bucket` (
  `bucket_id` int(11) unsigned NOT NULL,
  `bucket_type_id` mediumint(8) unsigned NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `x_size` mediumint(8) unsigned NOT NULL COMMENT 'mm',
  `y_size` mediumint(8) unsigned NOT NULL COMMENT 'mm',
  `z_size` mediumint(8) unsigned NOT NULL COMMENT 'mm',
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`bucket_id`),
  KEY `group_id` (`y_size`),
  KEY `plant_id` (`x_size`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/VBN020101/CK090916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bucket_type`
--

DROP TABLE IF EXISTS `bucket_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bucket_type` (
  `bucket_type_id` mediumint(8) unsigned NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`bucket_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/VBN020101/FB090916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientFHAdminNumber`
--

DROP TABLE IF EXISTS `clientFHAdminNumber`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientFHAdminNumber` (
  `fhAdminNumber` int(11) NOT NULL,
  `clientFk` int(11) NOT NULL,
  PRIMARY KEY (`clientFk`),
  KEY `clientFHAdminNumber_fk_idx` (`fhAdminNumber`),
  CONSTRAINT `clientFHAdminNumber_fk` FOREIGN KEY (`fhAdminNumber`) REFERENCES `vn`.`company` (`fhAdminNumber`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deliveryInformation`
--

DROP TABLE IF EXISTS `deliveryInformation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deliveryInformation` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `DeliveryType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Location` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `DeliveryPrice` decimal(10,2) DEFAULT NULL,
  `ChargeAmount` decimal(10,2) DEFAULT NULL,
  `BasisQuantitiy` int(11) DEFAULT NULL,
  `MinimumQuantity` int(11) DEFAULT NULL,
  `MaximumQuantity Integer` int(11) DEFAULT NULL,
  `LatestDeliveryDateTime` datetime DEFAULT NULL,
  `EarliestDespatchDateTime` datetime DEFAULT NULL,
  `FirstOrderDateTime` datetime DEFAULT NULL,
  `LatestOrderDateTime` datetime DEFAULT NULL,
  `supplyResponseID` int(11) DEFAULT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `deliveryInformation_UN` (`Location`,`LatestDeliveryDateTime`,`FirstOrderDateTime`,`LatestOrderDateTime`,`supplyResponseID`),
  KEY `fgbSupplyResponse_idx` (`supplyResponseID`),
  KEY `fgbSupplyResponse_idx2` (`FirstOrderDateTime`),
  KEY `fgbSupplyResponse_idx3` (`LatestOrderDateTime`) USING BTREE,
  KEY `deliveryInformation_updated_IDX` (`updated`) USING BTREE,
  CONSTRAINT `fgbSupplyResponse` FOREIGN KEY (`supplyResponseID`) REFERENCES `supplyResponse` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `di`
--

DROP TABLE IF EXISTS `di`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `di` (
  `ID` int(11) NOT NULL DEFAULT '0',
  `Location` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LatestDeliveryDateTime` datetime DEFAULT NULL,
  `FirstOrderDateTime` datetime DEFAULT NULL,
  `LatestOrderDateTime` datetime DEFAULT NULL,
  `supplyResponseID` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `di_UN` (`Location`,`LatestDeliveryDateTime`,`FirstOrderDateTime`,`LatestOrderDateTime`,`supplyResponseID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ekt`
--

DROP TABLE IF EXISTS `ekt`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ekt` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `barcode` char(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Generated auction barcode',
  `entryYear` smallint(5) unsigned NOT NULL COMMENT 'Transaction year',
  `batchNumber` bigint(20) unsigned DEFAULT NULL COMMENT 'RFF+BT',
  `deliveryNumber` bigint(20) unsigned DEFAULT NULL COMMENT 'RFF+AAJ',
  `vendorOrderNumber` bigint(20) unsigned DEFAULT NULL COMMENT 'RFF+VN',
  `fec` date DEFAULT NULL COMMENT 'DTM+97',
  `hor` time DEFAULT NULL COMMENT 'UNB',
  `now` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation time',
  `ptj` mediumint(8) unsigned DEFAULT NULL COMMENT 'NAD+BY',
  `ref` int(11) NOT NULL COMMENT 'LIN',
  `item` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'IMD+S99',
  `pac` int(11) DEFAULT '0' COMMENT 'QTY+52',
  `qty` int(10) NOT NULL COMMENT 'QTY+66',
  `ori` varchar(3) COLLATE utf8_unicode_ci DEFAULT 'NL' COMMENT 'IMD+S62',
  `cat` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'IMD+S98',
  `agj` int(11) DEFAULT NULL COMMENT 'RFF+AGJ',
  `kop` int(11) DEFAULT NULL COMMENT 'RFF+ADZ',
  `ptd` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'RFF+ACE',
  `sub` mediumint(8) unsigned DEFAULT NULL COMMENT 'RFF+CTS',
  `pro` mediumint(8) unsigned NOT NULL COMMENT 'NAD+MF',
  `pri` double NOT NULL COMMENT 'PRI+INV',
  `package` int(10) unsigned DEFAULT NULL COMMENT 'PAC',
  `auction` smallint(5) unsigned DEFAULT NULL COMMENT 'NAD+FLA',
  `klo` smallint(5) unsigned DEFAULT NULL COMMENT 'RFF+FAC',
  `k1` smallint(5) unsigned DEFAULT NULL COMMENT 'IMD+K01',
  `k2` smallint(5) unsigned DEFAULT NULL COMMENT 'IMD+K02',
  `k3` tinyint(3) unsigned DEFAULT NULL COMMENT 'IMD+P01',
  `k4` tinyint(3) unsigned DEFAULT NULL COMMENT 'IMD+P02',
  `s1` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s2` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s3` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s4` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s5` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s6` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ok` tinyint(4) NOT NULL DEFAULT '0',
  `trolleyFk` int(11) DEFAULT NULL,
  `putOrderFk` bigint(20) unsigned DEFAULT NULL COMMENT 'RFF+ON',
  `scanned` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Whether it''s been scanned',
  `cps` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Código alfanumérico de Floriday',
  `dp` int(11) DEFAULT NULL COMMENT 'NAD+DP',
  `sender` int(11) DEFAULT NULL COMMENT 'NAD+SE',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `barcode_year` (`barcode`,`entryYear`),
  UNIQUE KEY `entry_year` (`deliveryNumber`,`entryYear`) USING BTREE,
  KEY `ref` (`ref`),
  KEY `ptj` (`ptj`),
  KEY `pro` (`pro`),
  KEY `kop` (`kop`),
  KEY `barcode` (`barcode`),
  KEY `fec` (`fec`),
  KEY `putOrderFk` (`putOrderFk`),
  KEY `ekt_batchNumber` (`batchNumber`) USING BTREE,
  KEY `ekt_vendorOrderNumber` (`vendorOrderNumber`) USING BTREE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ektEntryAssign__`
--

DROP TABLE IF EXISTS `ektEntryAssign__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ektEntryAssign__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kop` int(11) DEFAULT NULL,
  `sub` mediumint(8) unsigned DEFAULT NULL,
  `warehouseOutFk` int(11) DEFAULT NULL,
  `warehouseInFk` int(11) DEFAULT NULL,
  `agencyModeFk` int(11) DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `entryFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='define las condiciones para asignar entradas a los ekt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `errorList`
--

DROP TABLE IF EXISTS `errorList`;
/*!50001 DROP VIEW IF EXISTS `errorList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `errorList` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `stock` tinyint NOT NULL,
  `error` tinyint NOT NULL,
  `deliveryInformationID` tinyint NOT NULL,
  `supplyResponseID` tinyint NOT NULL,
  `OrderTradeLineDateTime` tinyint NOT NULL,
  `EndUserPartyGLN` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `exchange`
--

DROP TABLE IF EXISTS `exchange`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exchange` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mailFk` int(10) unsigned NOT NULL,
  `typeFk` smallint(5) unsigned NOT NULL,
  `ektFk` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `type_id` (`typeFk`,`ektFk`),
  KEY `message_id` (`mailFk`),
  KEY `buy_edi_id` (`ektFk`),
  CONSTRAINT `exchange_ibfk_1` FOREIGN KEY (`mailFk`) REFERENCES `mail` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `exchange_ibfk_2` FOREIGN KEY (`ektFk`) REFERENCES `ekt` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `exchangeConfig`
--

DROP TABLE IF EXISTS `exchangeConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exchangeConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `logMail` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Mail where the log information is sent',
  `restrictToSenders` tinyint(4) NOT NULL COMMENT 'Whether to process mails only from known senders',
  `presaleFk` mediumint(8) unsigned DEFAULT NULL,
  `defaultKop` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `presale_id` (`presaleFk`),
  CONSTRAINT `exchangeConfig_ibfk_1` FOREIGN KEY (`presaleFk`) REFERENCES `exchangeType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `exchangeType`
--

DROP TABLE IF EXISTS `exchangeType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exchangeType` (
  `id` mediumint(8) unsigned NOT NULL,
  `description` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `feature`
--

DROP TABLE IF EXISTS `feature`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `feature` (
  `item_id` int(11) unsigned NOT NULL,
  `feature_type_id` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `feature_value` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `change_date_time` datetime NOT NULL,
  PRIMARY KEY (`item_id`,`feature_type_id`),
  KEY `feature_ix1` (`feature_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FF130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `fileConfig`
--

DROP TABLE IF EXISTS `fileConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fileConfig` (
  `name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `checksum` text COLLATE utf8_unicode_ci,
  `keyValue` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`name`),
  UNIQUE KEY `fileConfig_name_uindex` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `floraHollandConfig`
--

DROP TABLE IF EXISTS `floraHollandConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `floraHollandConfig` (
  `defaultAdminNumber` int(11) NOT NULL DEFAULT '66011',
  `floramondoMargin` decimal(10,2) NOT NULL DEFAULT '0.17'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ftpConfig`
--

DROP TABLE IF EXISTS `ftpConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ftpConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `host` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user` varchar(50) CHARACTER SET utf8 NOT NULL,
  `password` varchar(50) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `genus`
--

DROP TABLE IF EXISTS `genus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `genus` (
  `genus_id` mediumint(8) unsigned NOT NULL,
  `latin_genus_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  `isHazard` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`genus_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FG130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `goodCharacteristic`
--

DROP TABLE IF EXISTS `goodCharacteristic`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `goodCharacteristic` (
  `supplyResponse` varchar(26) COLLATE utf8_unicode_ci NOT NULL,
  `type` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'edi.type',
  `value` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'edi.value',
  PRIMARY KEY (`supplyResponse`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `imapConfig`
--

DROP TABLE IF EXISTS `imapConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `imapConfig` (
  `id` tinyint(3) unsigned NOT NULL,
  `environment` varchar(45) CHARACTER SET utf8 NOT NULL,
  `host` varchar(150) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'localhost',
  `user` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pass` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cleanPeriod` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'How long the old mails are preserved',
  `successFolder` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `errorFolder` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `imapConfig_environment` (`environment`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='IMAP configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item`
--

DROP TABLE IF EXISTS `item`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item` (
  `id` int(11) unsigned NOT NULL,
  `product_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `plant_id` mediumint(8) unsigned DEFAULT NULL,
  `group_id` int(11) unsigned DEFAULT NULL,
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `group_id` (`group_id`),
  KEY `plant_id` (`plant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FP130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item_defaultType`
--

DROP TABLE IF EXISTS `item_defaultType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_defaultType` (
  `item_id` int(11) NOT NULL,
  `itemTypeFk` int(11) NOT NULL,
  `bucket_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='guarda las excepciones de los item holandeses para asignarles nuestros cubos y nuestros tipos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item_feature`
--

DROP TABLE IF EXISTS `item_feature`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_feature` (
  `item_id` int(11) NOT NULL,
  `presentation_order` tinyint(11) unsigned NOT NULL,
  `feature` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `regulation_type` tinyint(3) unsigned NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime NOT NULL,
  PRIMARY KEY (`item_id`,`presentation_order`,`entry_date`,`change_date_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FY130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `edi`.`item_feature_bi`
	BEFORE INSERT ON `item_feature`
	FOR EACH ROW
BEGIN
	IF NEW.expiry_date = '0000-00-00' THEN
		SET NEW.expiry_date = NULL;
	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 */ ;

--
-- Table structure for table `item_free`
--

DROP TABLE IF EXISTS `item_free`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_free` (
  `id` int(11) NOT NULL,
  `token` int(11) DEFAULT NULL COMMENT 'campo para asegurar que solo el usuario coge uno de los valores',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item_group`
--

DROP TABLE IF EXISTS `item_group`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_group` (
  `group_code` int(11) unsigned NOT NULL,
  `dutch_group_description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `change_date_time` datetime NOT NULL,
  PRIMARY KEY (`group_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FO130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item_groupToOffer`
--

DROP TABLE IF EXISTS `item_groupToOffer`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_groupToOffer` (
  `group_code` int(11) unsigned NOT NULL,
  `itemTypeFk` smallint(5) unsigned NOT NULL,
  `intrastatFk` int(8) unsigned zerofill NOT NULL,
  `originFk` tinyint(2) unsigned NOT NULL DEFAULT '17',
  `expenseFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT '7001000000',
  PRIMARY KEY (`group_code`),
  KEY `item_groupToOffer_fk2_idx` (`itemTypeFk`),
  KEY `item_groupToOffer_fk3_idx` (`intrastatFk`),
  KEY `item_groupToOffer_fk4_idx` (`originFk`),
  CONSTRAINT `item_groupToOffer_fk2` FOREIGN KEY (`itemTypeFk`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `item_groupToOffer_fk3` FOREIGN KEY (`intrastatFk`) REFERENCES `vn`.`intrastat` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `item_groupToOffer_fk4` FOREIGN KEY (`originFk`) REFERENCES `vn`.`origin` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='se ofreceran para ser comprados';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item_track`
--

DROP TABLE IF EXISTS `item_track`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item_track` (
  `item_id` int(10) unsigned NOT NULL,
  `s1` tinyint(3) NOT NULL DEFAULT '0',
  `s2` tinyint(3) NOT NULL DEFAULT '0',
  `s3` tinyint(3) NOT NULL DEFAULT '0',
  `s4` tinyint(3) NOT NULL DEFAULT '0',
  `pac` tinyint(3) NOT NULL DEFAULT '0',
  `cat` tinyint(3) NOT NULL DEFAULT '0',
  `ori` tinyint(3) NOT NULL DEFAULT '0',
  `pro` tinyint(3) NOT NULL DEFAULT '0',
  `package` tinyint(3) NOT NULL DEFAULT '0',
  `s5` tinyint(3) NOT NULL DEFAULT '0',
  `s6` tinyint(3) NOT NULL DEFAULT '0',
  `kop` tinyint(3) NOT NULL DEFAULT '0',
  `sub` tinyint(3) NOT NULL DEFAULT '0',
  `item` tinyint(3) NOT NULL DEFAULT '0',
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `log`
--

DROP TABLE IF EXISTS `log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tableName` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `fieldName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `fieldValue` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mail`
--

DROP TABLE IF EXISTS `mail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mail` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `senderFk` int(10) unsigned DEFAULT NULL,
  `sender` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `messageId` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nExchanges` int(10) unsigned NOT NULL,
  `error` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `source` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mail_id` (`messageId`),
  KEY `sender_id` (`senderFk`),
  CONSTRAINT `mail_ibfk_2` FOREIGN KEY (`senderFk`) REFERENCES `mailSender` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailSender`
--

DROP TABLE IF EXISTS `mailSender`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailSender` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mail` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `kop` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mail` (`mail`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='List of allowed mailers';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `marketPlace`
--

DROP TABLE IF EXISTS `marketPlace`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `marketPlace` (
  `id` varchar(13) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `supplierFk` int(11) NOT NULL DEFAULT '1433',
  `isOffered` tinyint(2) NOT NULL DEFAULT '0',
  `MaxLatestDeliveryHour` int(11) DEFAULT NULL COMMENT 'Maxima hora para tener en cuenta la oferta',
  `isLatestOrderDateTimeRelevant` tinyint(2) DEFAULT '0' COMMENT 'Se tiene en cuenta para calcular el próximo travel posible',
  `isEarlyBird` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `marketPlaceisOfferedIdx` (`isOffered`),
  KEY `marketPlaceMaxLatestIdx` (`MaxLatestDeliveryHour`),
  KEY `marketPlace_isLatestOrderDateTimeRelevant_IDX` (`isLatestOrderDateTimeRelevant`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `offerList`
--

DROP TABLE IF EXISTS `offerList`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `offerList` (
  `supplier` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `total` int(11) DEFAULT NULL COMMENT 'Total de oferta',
  `filter` int(11) DEFAULT NULL COMMENT 'Total en edi.supplyOffer',
  `vnh` int(11) DEFAULT NULL COMMENT 'Total en la entrada de VNH',
  `algemesi` int(11) DEFAULT NULL COMMENT 'Total en la entrada de Algemesi',
  PRIMARY KEY (`supplier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de las ofertas para mostrar en grafana';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `param`
--

DROP TABLE IF EXISTS `param`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `param` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `subname` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `position` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `type` enum('INTEGER','DOUBLE','STRING','DATE','TIME') COLLATE utf8_unicode_ci NOT NULL,
  `required` tinyint(3) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`),
  UNIQUE KEY `name` (`name`,`subname`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Parameters to capture of every exchange';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `plant`
--

DROP TABLE IF EXISTS `plant`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `plant` (
  `plant_id` mediumint(8) unsigned NOT NULL,
  `genus_id` mediumint(8) unsigned NOT NULL,
  `specie_id` mediumint(8) unsigned DEFAULT NULL,
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`plant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FT130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `putOrder`
--

DROP TABLE IF EXISTS `putOrder`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `putOrder` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deliveryInformationID` int(11) DEFAULT NULL,
  `supplyResponseID` int(11) DEFAULT NULL,
  `orderTradelineItemID` int(11) DEFAULT NULL COMMENT 'ticketFk or EntryFk?',
  `OrderTradeLineDateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'fecha de creacion en la tabla',
  `quantity` int(11) DEFAULT NULL,
  `EndUserPartyID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EndUserPartyGLN` varchar(13) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The grower can use this reference in his EKT in the NAD (MA) segment.',
  `OrderStatus` int(11) DEFAULT '0' COMMENT '1 pending\n2 confirmed\n3 canceled',
  `isOrderProcessed` tinyint(4) DEFAULT NULL,
  `error` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `barcode` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `FHAdminNumber` int(11) DEFAULT '66011',
  `saleFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `orderTradelineItemID_UNIQUE` (`orderTradelineItemID`),
  KEY `deliveryInformationID_idx` (`deliveryInformationID`),
  KEY `supplyResponseID_idx` (`supplyResponseID`),
  KEY `putOrder_FK` (`saleFk`),
  CONSTRAINT `putOrder_FK` FOREIGN KEY (`saleFk`) REFERENCES `vn`.`sale` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `edi`.`putOrder_BEFORE_INSERT`
	BEFORE INSERT ON `putOrder`
	FOR EACH ROW
BEGIN

	DECLARE nextID INT;
	    
	SELECT 1 + MAX(id) INTO nextID FROM putOrder ;
    
    SET NEW.orderTradelineItemID  = nextID;

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 `edi`.`BEFORE UPDATE`
	BEFORE UPDATE ON `putOrder`
	FOR EACH ROW
BEGIN
	
	DECLARE vError VARCHAR(100) DEFAULT 'Orderregel niet meer teruggevonden op basis van de orderps';
    DECLARE vVmpIdError INT DEFAULT 7;
    DECLARE vVmpFk INT;
   	DECLARE vSupplyResponseNumberOfUnits INT;
       
   	SELECT sr.vmpID INTO vVmpFk 
		FROM edi.supplyResponse sr 
		WHERE sr.id = NEW.supplyResponseID;
		
		IF NEW.OrderStatus = 3 
			AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) 
			AND NEW.error = vError 
			AND vVmpFk = vVmpIdError 
		
		THEN 
		
			SET NEW.OrderStatus = 2;
		
		END IF;
	
	-- Error de disponible menor de lo solicitado
	IF NEW.error LIKE 'error2602%' THEN
	
		SELECT NumberOfUnits INTO vSupplyResponseNumberOfUnits
			FROM edi.supplyResponse sr 
			WHERE sr.ID = NEW.supplyResponseID;
		
		SET NEW.error = CONCAT('(',vSupplyResponseNumberOfUnits,') ', NEW.error);
	
	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 `edi`.`putOrder_AFTER_UPDATE`
	AFTER UPDATE ON `putOrder`
	FOR EACH ROW
BEGIN
	DECLARE vSaleFk INT;
	DECLARE vOrderStatusDenied INT DEFAULT 3;
	DECLARE vOrderStatusOK INT DEFAULT 2;
	DECLARE vIsEktSender BOOLEAN;

	IF NEW.OrderStatus = vOrderStatusDenied AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN
	
			SELECT s.id INTO vSaleFk
				FROM vn.sale s 
					JOIN vn.ticket t ON s.ticketFk = t.id
					JOIN vn.item i ON i.id = s.itemFk
					JOIN deliveryInformation di ON di.ID = NEW.deliveryInformationID
				WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= CURDATE()
					AND i.supplyResponseFk = NEW.supplyResponseID
				LIMIT 1;
			
			UPDATE vn.sale s
				JOIN vn.ticket t ON s.ticketFk = t.id
				JOIN vn.item i ON i.id = s.itemFk
				JOIN deliveryInformation di ON di.ID = NEW.deliveryInformationID
				SET s.quantity = 0
				WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= CURDATE()
					AND i.supplyResponseFk = NEW.supplyResponseID;
				
			INSERT INTO vn.mail (sender, `subject`, body)
				SELECT IF(u.id IS NOT NULL AND c.email IS NOT NULL,
							c.email,
							CONCAT(account.user_getNameFromId(c.salesPersonFk), '@verdnatura.es')
						 ),
						'Producto no disponible en Floramondo',
						CONCAT('El artículo ', s.concept, ' del ticket ', t.id , ' ha sido cancelado por Floramondo. ',
								' Se ha actualizado la cantidad de ', OLD.quantity,' a 0. ',
							IF (u.id IS NOT NULL AND c.email IS NOT NULL ,
								CONCAT('https://verdnatura.es/#!form=ecomerce%2Fticket&ticket=', t.id ),
								CONCAT('https://salix.verdnatura.es/#!/ticket/', t.id ,'/summary')))
					FROM vn.sale s 
						JOIN vn.ticket t ON t.id = s.ticketFk
						JOIN vn.`client` c ON c.id = t.clientFk
						LEFT JOIN account.user u ON u.id= c.salesPersonFk AND u.name IN ('ruben', 'ismaelalcolea')
					WHERE s.id = vSaleFk;
			
	END IF;


	IF NEW.OrderStatus = vOrderStatusOK AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN

		SELECT v.isEktSender INTO vIsEktSender 
			FROM edi.VMPSettings v
				JOIN edi.supplyResponse sr ON sr.vmpID = v.VMPID 
				WHERE sr.id = NEW.supplyResponseID;
		
		IF NOT vIsEktSender THEN

			CALL edi.ekt_add(NEW.id);
		
		END IF;

		IF NEW.barcode THEN

			INSERT IGNORE INTO vn.itemBarcode(itemFk, code)
				SELECT i.id, NEW.barcode
					FROM vn.item i
					WHERE i.supplyResponseFk = NEW.supplyResponseID;
		
		END IF;

	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 */ ;

--
-- Table structure for table `specie`
--

DROP TABLE IF EXISTS `specie`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `specie` (
  `specie_id` mediumint(8) unsigned NOT NULL,
  `genus_id` mediumint(8) unsigned NOT NULL,
  `latin_species_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date DEFAULT NULL,
  `expiry_date` date DEFAULT NULL,
  `change_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`specie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FS130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplier`
--

DROP TABLE IF EXISTS `supplier`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplier` (
  `supplier_id` int(10) unsigned NOT NULL COMMENT 'FHRegistrationNr',
  `glnAddressCode` varchar(13) COLLATE utf8_unicode_ci DEFAULT NULL,
  `company_name` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `change_date_time` datetime NOT NULL,
  `isAllowedDirectSales` tinyint(1) NOT NULL DEFAULT '0',
  `isBanned` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`supplier_id`),
  UNIQUE KEY `supplier_UN` (`glnAddressCode`),
  KEY `glnaddressCodeidx` (`glnAddressCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/FEC010104/CC090916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `supplyOffer`
--

DROP TABLE IF EXISTS `supplyOffer`;
/*!50001 DROP VIEW IF EXISTS `supplyOffer`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `supplyOffer` (
  `vmpID` tinyint NOT NULL,
  `diId` tinyint NOT NULL,
  `srId` tinyint NOT NULL,
  `Item_ArticleCode` tinyint NOT NULL,
  `product_name` tinyint NOT NULL,
  `company_name` tinyint NOT NULL,
  `Price` tinyint NOT NULL,
  `Quality` tinyint NOT NULL,
  `s1` tinyint NOT NULL,
  `s2` tinyint NOT NULL,
  `s3` tinyint NOT NULL,
  `s4` tinyint NOT NULL,
  `s5` tinyint NOT NULL,
  `s6` tinyint NOT NULL,
  `NumberOfUnits` tinyint NOT NULL,
  `EmbalageCode` tinyint NOT NULL,
  `LatestDeliveryDateTime` tinyint NOT NULL,
  `EarliestDespatchDateTime` tinyint NOT NULL,
  `FirstOrderDateTime` tinyint NOT NULL,
  `LatestOrderDateTime` tinyint NOT NULL,
  `NumberOfItemsPerCask` tinyint NOT NULL,
  `NumberOfLayersPerTrolley` tinyint NOT NULL,
  `MinimumNumberToOrder` tinyint NOT NULL,
  `MaximumNumberToOrder` tinyint NOT NULL,
  `IncrementalOrderableQuantity` tinyint NOT NULL,
  `PackingPrice` tinyint NOT NULL,
  `MarketPlaceID` tinyint NOT NULL,
  `PictureReference` tinyint NOT NULL,
  `supplyResponseUpdated` tinyint NOT NULL,
  `group_id` tinyint NOT NULL,
  `marketPlace` tinyint NOT NULL,
  `DeliveryPrice` tinyint NOT NULL,
  `ChargeAmount` tinyint NOT NULL,
  `MinimumQuantity` tinyint NOT NULL,
  `MaximumQuantity` tinyint NOT NULL,
  `OrderUnit` tinyint NOT NULL,
  `IncrementalOrderUnit` tinyint NOT NULL,
  `isEarlyBird` tinyint NOT NULL,
  `isVNHSupplier` tinyint NOT NULL,
  `expenseFk` tinyint NOT NULL,
  `intrastatFk` tinyint NOT NULL,
  `originFk` tinyint NOT NULL,
  `itemTypeFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `supplyResponse`
--

DROP TABLE IF EXISTS `supplyResponse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplyResponse` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NumberBunchesPerCask` int(11) DEFAULT NULL,
  `SupplierGLN` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `NewItem` tinyint(1) DEFAULT NULL,
  `SendererID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ItemSupplierID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TransactionDate` datetime DEFAULT NULL,
  `TransactionNumber` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `AuctionClockNumber` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `SupplierID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ItemDatesupplyResponsecol` datetime DEFAULT NULL,
  `Item_ArticleCode` int(11) DEFAULT NULL,
  `VBNOmschrijving` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ExtraRemark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ArtCodeType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `VBNGroupCode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `VBNGroupDescription` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TransactionTime` time DEFAULT NULL,
  `CountryOfOrigin` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `NumberOfItemsPerCask` int(11) DEFAULT NULL,
  `NumberOfLayersPerTrolley` int(11) DEFAULT NULL,
  `NumberOfUnits` int(11) DEFAULT NULL,
  `MinimumNumberToOrder` int(11) DEFAULT NULL,
  `MinimumOrderUnitType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Price` decimal(10,2) DEFAULT NULL,
  `Quality` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s1` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s2` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s3` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s4` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s5` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `s6` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ExaminiationCode1` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ExaminiationCode2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `OrderUnitType` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `EmbalageCode` int(11) DEFAULT NULL,
  `PictureReference` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `AgentGLN` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `MaximumNumberToOrder` int(11) DEFAULT NULL,
  `MaximumOrderType` tinyint(1) DEFAULT NULL COMMENT 'Unit: 1 = piece, 2 = bunch, 3 = box, 4 = layer, 5 = load carrier/trolley',
  `IncrementalOrderableQuantity` int(11) DEFAULT NULL,
  `IncrementalOrderableQuantityType` tinyint(1) DEFAULT NULL COMMENT 'Unit: 1 = piece, 2 = bunch, 3 = box, 4 = layer, 5 = load carrier/trolley',
  `PackingPrice` decimal(10,2) DEFAULT NULL,
  `PackingPriceType` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `PackingPriceQuantity` int(11) DEFAULT NULL,
  `PackingPriceQuantityType` tinyint(1) DEFAULT NULL COMMENT 'Unit: 1 = piece, 2 = bunch, 3 = box, 4 = layer, 5 = load carrier/trolley',
  `MarketPlaceID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `MarketFormCode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '"002" Standard Sales\n"005" Catalogue (optional)\n"001" Committed (optional)\n"003" Buffer (optional, Clock Pre Sales) ',
  `FlowerColor` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `vmpID` int(11) DEFAULT NULL,
  `widthMeasure` int(11) DEFAULT NULL COMMENT 'mm Embalage Width',
  `lengthMeasure` int(11) DEFAULT NULL COMMENT 'mm Embalage Length',
  `heightMeasure` int(11) DEFAULT NULL COMMENT 'mm Embalage Height',
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `EmbalageCodeSupplier` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`),
  KEY `IX_TransNumber` (`TransactionNumber`) COMMENT 'Agregado por Ernesto 11.6.2019\nSe ejecutaba 1 consulta por segundo desde MAIL y consumia un 20% de CPU de todo el servidor !!!!!\nCPU usada es mas estable que Indice en SendererID, cpu vs espacio que ocupa?\n',
  KEY `supplyResponse_Ix1` (`Item_ArticleCode`),
  KEY `supplyResponseMarcketIdx` (`MarketPlaceID`),
  KEY `supplyResponseNumberOfUnitsIdx` (`NumberOfUnits`),
  KEY `supplyResponseEmbalageCodeIdx` (`EmbalageCode`),
  KEY `supplyResponseputOrder_FK` (`vmpID`),
  KEY `supplyResponse_updated_IDX` (`updated`) USING BTREE,
  CONSTRAINT `supplyResponse_fk2` FOREIGN KEY (`MarketPlaceID`) REFERENCES `marketPlace` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `supplyResponseputOrder_FK` FOREIGN KEY (`vmpID`) REFERENCES `VMPSettings` (`VMPID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `edi`.`supplyResponse_AFTER_UPDATE`
	AFTER UPDATE ON `supplyResponse`
	FOR EACH ROW
BEGIN

	UPDATE vn.buy b
			JOIN vn.entry e ON e.id = b.entryFk
			JOIN vn.travel tr ON tr.id = e.travelFk 
			JOIN vn.agencyMode am ON am.id = tr.agencyModeFk 
			JOIN vn.item i ON i.id = b.itemFk
			JOIN edi.supplyResponse sr ON i.supplyResponseFk = sr.ID
		SET b.quantity = NEW.NumberOfItemsPerCask * NEW.NumberOfUnits,
			b.stickers = NEW.NumberOfUnits
		WHERE i.supplyResponseFk = NEW.ID
			AND am.name = 'LOGIFLORA'
			AND e.isRaid
			AND tr.landed >= CURDATE();
	
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 */ ;

--
-- Table structure for table `supplyResponseLog`
--

DROP TABLE IF EXISTS `supplyResponseLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplyResponseLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `supplyResponseFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `NumberOfUnitsOld` int(11) DEFAULT NULL,
  `NumberOfUnitsNew` int(11) DEFAULT NULL,
  `lastVMPUpdate` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `supplyResponseLog_FK` (`supplyResponseFk`),
  CONSTRAINT `supplyResponseLog_FK` FOREIGN KEY (`supplyResponseFk`) REFERENCES `supplyResponse` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Esta tabla la utiliza la empresa LOGIFLORA. No kkear.';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tableConfig`
--

DROP TABLE IF EXISTS `tableConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tableConfig` (
  `fileName` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `toTable` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `file` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `updated` date DEFAULT NULL,
  PRIMARY KEY (`fileName`),
  UNIQUE KEY `to_table` (`toTable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `type`
--

DROP TABLE IF EXISTS `type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `type` (
  `type_id` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `type_group_id` tinyint(3) unsigned NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `change_date_time` datetime NOT NULL,
  PRIMARY KEY (`type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FE130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `value`
--

DROP TABLE IF EXISTS `value`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `value` (
  `type_id` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `type_value` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `type_description` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
  `entry_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `change_date_time` datetime NOT NULL,
  PRIMARY KEY (`type_id`,`type_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='/tmp/floricode/florecompc2/FV130916.txt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `warehouseFloramondo`
--

DROP TABLE IF EXISTS `warehouseFloramondo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `warehouseFloramondo` (
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `travellingDays` int(11) NOT NULL DEFAULT '1',
  `entryFk` int(11) DEFAULT NULL,
  `isFV` int(11) DEFAULT NULL COMMENT 'NULL indiferente\n0 no\n1 si\n',
  `dayRange` int(11) NOT NULL DEFAULT '0' COMMENT 'dias de margen a futuro',
  PRIMARY KEY (`warehouseFk`),
  KEY `warehouseFloramondo_FK2_idx` (`entryFk`),
  CONSTRAINT `warehouseFloramondo_FK2` FOREIGN KEY (`entryFk`) REFERENCES `vn`.`entry` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `warehouseFloramondo_fk` FOREIGN KEY (`warehouseFk`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'edi'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `floramondo` */;
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 `floramondo` ON SCHEDULE EVERY 6 MINUTE STARTS '2022-01-28 09:52:45' ON COMPLETION NOT PRESERVE ENABLE DO CALL edi.floramondo_offerRefresh() */ ;;
/*!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 'edi'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `imageName` */;
/*!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 `imageName`(vPictureReference VARCHAR(255)) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	
	SET vPictureReference = REPLACE(vPictureReference,'.','');

	SET vPictureReference = REPLACE(vPictureReference,'/','');

	SET vPictureReference = REPLACE(vPictureReference,'%','');

	SET vPictureReference = REPLACE(vPictureReference,':','');

	SET vPictureReference = REPLACE(vPictureReference,'?','');

	SET vPictureReference = REPLACE(vPictureReference,'=','');
	
	RETURN vPictureReference;

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 `clean` */;
/*!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 `clean`()
BEGIN

	DECLARE vFourYearsAgo DATE DEFAULT TIMESTAMPADD(YEAR,-4,CURDATE());
    	DECLARE vOneWeekAgo DATE DEFAULT TIMESTAMPADD(WEEK,-1,CURDATE());

	DELETE FROM ekt WHERE fec < vFourYearsAgo;
    
	DELETE IGNORE sr.*
		FROM supplyResponse sr
			LEFT JOIN edi.deliveryInformation di ON sr.ID = di.supplyResponseID
		WHERE di.LatestOrderDateTime < vOneWeekAgo OR di.ID IS NULL;
	
	DELETE FROM putOrder 
		WHERE created < TIMESTAMPADD(MONTH,-1,CURDATE());
	
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 `deliveryInformation_Delete` */;
/*!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 `deliveryInformation_Delete`()
BEGIN
	
	DECLARE vID INT;
	DECLARE vGap INT DEFAULT 100;
	DECLARE vTope INT;
	
	SELECT MIN(ID), MAX(ID) 
		INTO vID, vTope
		FROM edi.deliveryInformation;

	WHILE vID <= vTope DO 
	
		SET vID = vID + vGap;
     
        DELETE 
        	FROM edi.deliveryInformation 
     		WHERE ID < vID
     			AND EarliestDespatchDateTime IS NULL;
     
  	END WHILE;
	
	
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 `ekt_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 `ekt_add`(vPutOrderFk INT)
BEGIN
	
/**
 *  Añade ekt para las ordenes de compra de proveedores que no envian el ekt por email
 * 
 * @param vPutOrderFk PutOrderId de donde coger los datos
 **/
	
	INSERT INTO edi.ekt(entryYear, 
						deliveryNumber, 
						fec,
						hor,
						item,
						pac,
						qty,
						ori,
						cat,
						pro,
						pri,
						package,
						s1,
						s2,
						s3,
						s4,
						s5,
						s6,
						putOrderFk,
						`ref`,
						kop)
		SELECT year(curdate()) entryYear,
				p.id deliveryNumber ,
				DATE(di.LatestDeliveryDateTime) fec,
				HOUR(di.LatestDeliveryDateTime) hor,
				i.longName item,
				sr.NumberOfItemsPerCask pac,
				p.quantity qty,
				o.code ori,
				i.category cat,
				mp.supplierFk pro,
				sr.Price pri,
				sr.EmbalageCode package,
				i.value5 s1,
				i.value6 s2,
				i.value7 s3,
				i.value8 s4,
				i.value9 s5,
				i.value10 s6,
				p.id putOrderFk,
				sr.Item_ArticleCode,
				sr.vmpID 
			FROM edi.putOrder p
				JOIN edi.supplyResponse sr ON sr.ID = p.supplyResponseID 
				JOIN edi.deliveryInformation di ON di.id = p.deliveryInformationID 
				JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID 
				JOIN vn.item i ON i.supplyResponseFk = sr.ID 
				JOIN vn.origin o ON o.id = i.originFk 
			WHERE p.id = vPutOrderFk;
				
	CALL edi.ekt_load(LAST_INSERT_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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `ekt_load` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ekt_load`(IN `vSelf` INT)
proc:BEGIN
	
	DECLARE vRef INT;
	DECLARE vBuy INT;
	DECLARE vItem INT;
	DECLARE vQty INT;
	DECLARE vPackage INT;
	DECLARE vPutOrderFk INT;
	DECLARE vIsLot BOOLEAN;
    DECLARE vForceToPacking INT DEFAULT 2;
    DECLARE vEntryFk INT;
   	DECLARE vHasToChangePackagingFk BOOLEAN;
    DECLARE vIsFloramondoDirect BOOLEAN;
    DECLARE vTicketFk INT;
	DECLARE vHasItemGroup BOOL;
	DECLARE vDescription VARCHAR(255);
	DECLARE vSaleFk INT;

	-- Carga los datos necesarios del EKT

	SELECT 	e.ref, qty, package, putOrderFk MOD 1000000, i2.id , NOT ISNULL(eea.addressFk), NOT ISNULL(igto.group_code),
			CONCAT(e.`ref`, ' ', e.item, ' ', e.sub, ' EktFk:', e.id)
		INTO vRef, vQty, vPackage, vPutOrderFk, vItem, vIsFloramondoDirect, vHasItemGroup, vDescription
		FROM edi.ekt e
			LEFT JOIN edi.item i ON e.ref = i.id
			LEFT JOIN edi.putOrder po ON po.id = e.putOrderFk
			LEFT JOIN vn.item i2 ON i2.supplyResponseFk = po.supplyResponseID 
			LEFT JOIN vn.ektEntryAssign eea ON eea.sub = e.sub
			LEFT JOIN edi.item_groupToOffer igto ON igto.group_code = i.group_id
		WHERE e.id = vSelf
			LIMIT 1;
        
	IF NOT vHasItemGroup THEN
	
		CALL vn.mail_insert('logistica@verdnatura.es', 'nocontestar@verdnatura.es', 'Nuevo grupo en Floramondo', vDescription);
	
		CALL vn.mail_insert('pako@verdnatura.es', 'nocontestar@verdnatura.es', CONCAT('Nuevo grupo en Floramondo: ', vDescription), vDescription);
	
		LEAVE proc;
	
	END IF;
		
	-- Asigna la entrada
    SELECT vn.ekt_getEntry(vSelf) INTO vEntryFk;
    																				
	-- Inserta el cubo si no existe

	IF vPackage = 800 THEN
	
		SET vHasToChangePackagingFk = TRUE;
	
		IF vItem THEN
		
			SELECT vn.item_getPackage(vItem) INTO vPackage ;
		
		ELSE
		
	 		SET vPackage = 8000 + vQty;

			INSERT IGNORE INTO vn.packaging(id, width, `depth`)
				SELECT vPackage, vc.ccLength / vQty, vc.ccWidth
				FROM vn.volumeConfig vc;
		
		END IF;
	
	ELSE
	
		INSERT IGNORE INTO vn2008.Cubos (Id_Cubo, X, Y, Z)
			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
				`subject` = 'Cubo añadido',
				`text` = CONCAT('Se ha añadido el cubo: ', vPackage),
				`to` = 'ekt@verdnatura.es';
		END IF;
	END IF;
    
	-- Si es una compra de Logiflora obtiene el articulo
	IF vPutOrderFk THEN
		
		SELECT i.id INTO vItem
			FROM edi.putOrder po
				JOIN vn.item i ON i.supplyResponseFk = po.supplyResponseID
			WHERE po.id = vPutOrderFk
			LIMIT 1;
		
	END IF;

	INSERT IGNORE INTO item_track SET
			item_id = vRef;
	
    IF IFNULL(vItem,0) = 0 THEN
    
		-- Intenta obtener el artículo en base a los atributos holandeses
		
		SELECT b.id, IFNULL(b.itemOriginalFk ,b.itemFk) INTO vBuy, vItem
			FROM edi.ekt e 
				JOIN edi.item_track t ON t.item_id = e.ref
				LEFT JOIN edi.ekt l ON l.ref = e.ref
				LEFT JOIN vn.buy b ON b.ektFk = l.id
				LEFT JOIN vn.item i ON i.id = b.itemFk
				JOIN vn2008.config cfg
			WHERE e.id = vSelf
				AND l.id != vSelf
				AND b.itemFk != cfg.generic_item
				AND IF(t.s1, l.s1 = e.s1, TRUE)
				AND IF(t.s2, l.s2 = e.s2, TRUE)
				AND IF(t.s3, l.s3 = e.s3, TRUE)
				AND IF(t.s4, l.s4 = e.s4, TRUE)
				AND IF(t.s5, l.s5 = e.s5, TRUE)
				AND IF(t.s6, l.s6 = e.s6, TRUE)
				AND IF(t.pac, l.pac = e.pac, TRUE)
				AND IF(t.cat, l.cat = e.cat, TRUE)
				AND IF(t.ori, l.ori = e.ori, TRUE)
				AND IF(t.pro, l.pro = e.pro, TRUE)
				AND IF(t.package, l.package = e.package, TRUE)
				AND IF(t.item, l.item = e.item, TRUE)
				AND  i.isFloramondo = vIsFloramondoDirect  				
			ORDER BY l.now DESC, b.id ASC 
			LIMIT 1;

	END IF;
    
	-- Si no encuentra el articulo lo crea en el caso de las compras directas en Floramondo
	IF ISNULL(vItem) AND vIsFloramondoDirect THEN
	
		CALL edi.item_getNewByEkt(vSelf, vItem);
	
	END IF;
	
    INSERT INTO vn.buy
	(
		 entryFk
		,ektFk
		,buyingValue
		,itemFk
        ,stickers
        ,packing
		,`grouping`
        ,quantity
		,groupingMode
        ,producer
		,packageFk
        ,weight
	)
	SELECT
		 vEntryFk
		,vSelf
		,(@t := IF(i.stems, i.stems, 1)) * e.pri / IFNULL(i.stemMultiplier, 1) buyingValue
		,IFNULL(vItem, cfg.generic_item) itemFk
        ,e.qty stickers
        ,@pac := IFNULL(i.stemMultiplier, 1) * e.pac / @t packing
        ,IFNULL(b.`grouping`, e.pac)
        ,@pac * e.qty 
		,vForceToPacking
		,s.`name`
		,IF(vHasToChangePackagingFk OR ISNULL(b.packageFk), vPackage, b.packageFk)
        ,i.density * (vn.item_getVolume(i.id, IFNULL(b.packageFk, e.package)) / 1000000)
		FROM edi.ekt e 
			LEFT JOIN vn.buy b ON b.id = vBuy
			LEFT JOIN vn.item i ON i.id = b.itemFk
			LEFT JOIN vn.supplier s ON e.pro = s.id
            JOIN vn2008.config cfg		
		WHERE e.id = vSelf
		LIMIT 1;

	DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;

	CREATE TEMPORARY TABLE tmp.buyRecalc
		SELECT buy.id
			FROM vn.buy 
			WHERE ektFk = vSelf;

	CALL vn.buy_recalcPrices();

	-- Si es una compra de Logiflora hay que informar la tabla vn.saleBuy
	IF vPutOrderFk THEN
	
		REPLACE vn.saleBuy(saleFk, buyFk, workerFk)
			SELECT po.saleFk, b.id, account.myUser_getId()
				FROM edi.putOrder po
					JOIN vn.buy b ON b.ektFk = vSelf
				WHERE po.id = vPutOrderFk;
	
	END IF;
	-- Si es una compra directa en Floramondo hay que añadirlo al ticket	

	IF vIsFloramondoDirect THEN

		SELECT t.id INTO vTicketFk
			FROM vn.ticket t
				JOIN vn.ektEntryAssign eea ON eea.addressFk = t.addressFk
				JOIN vn.warehouse w ON w.id = t.warehouseFk AND w.name = 'Floramondo'
				JOIN edi.ekt e ON e.sub = eea.sub AND e.id = vSelf
			WHERE e.fec = t.shipped
			LIMIT 1;
	
		IF ISNULL(vTicketFk) THEN

			INSERT INTO vn.ticket (
					clientFk,
					shipped,
					addressFk,
					agencyModeFk,
					nickname,
					warehouseFk,
					companyFk,
					landed,
					zoneFk,
					zonePrice,
					zoneBonus
				)
				SELECT
							a.clientFk,
							e.fec,
							a.id,
							a.agencyModeFk,
							a.nickname,
							w.id,
							c.id,
							e.fec,
							z.id,
							z.price,
							z.bonus
					FROM edi.ekt e 
						JOIN vn.ektEntryAssign eea ON eea.sub = e.sub 
						JOIN vn.address a ON a.id = eea.addressFk
						JOIN vn.warehouse w ON w.name = 'Floramondo'
						JOIN vn.company c ON c.code = 'VNL'
						JOIN vn.`zone` z ON z.code = 'FLORAMONDO'
					WHERE e.id = vSelf
					LIMIT 1;

			SET vTicketFk = LAST_INSERT_ID();
		
			INSERT INTO vn.ticketLog
			SET originFk = vTicketFk, 
				userFk = account.myUser_getId(), 
				`action` = 'insert', 
				description = CONCAT('EktLoad ha creado el ticket:', ' ', vTicketFk);

		END IF;

		INSERT INTO vn.sale (itemFk, ticketFk, concept, quantity, price)
			SELECT vItem, vTicketFk, e.item, e.qty * e.pac, e.pri * ( 1 + fhc.floramondoMargin )
				FROM edi.ekt e
					JOIN edi.floraHollandConfig fhc
					WHERE e.id = vSelf;
				
		SELECT LAST_INSERT_ID() INTO vSaleFk;
	
		REPLACE vn.saleBuy(saleFk, buyFk, workerFk)
			SELECT vSaleFk, b.id, account.myUser_getId()
				FROM vn.buy b
					WHERE b.ektFk = vSelf;

		INSERT INTO vn.saleComponent(saleFk, componentFk, value)
			SELECT vSaleFk, c.id, e.pri
				FROM edi.ekt e
					JOIN vn.component c ON c.code = 'purchaseValue'
					WHERE e.id = vSelf;
				
		INSERT INTO vn.saleComponent(saleFk, componentFk, value)
			SELECT vSaleFk, c.id, e.pri * fhc.floramondoMargin 
				FROM edi.ekt e
					JOIN edi.floraHollandConfig fhc
					JOIN vn.component c ON c.code = 'margin'
					WHERE e.id = vSelf;
	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 `ekt_loadNotBuy` */;
/*!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 `ekt_loadNotBuy`()
BEGIN
	
	/**
	 * Ejecuta ekt_load para aquellos ekt de hoy que no tienen vn.buy
	 */

	DECLARE vEktFk INTEGER;
	DECLARE done BOOL;


	DECLARE cursor1 CURSOR FOR SELECT e.id
								FROM edi.ekt e 
									LEFT JOIN vn.buy b ON b.ektFk = e.id 
								WHERE e.fec >= CURDATE() 
									AND ISNULL(b.ektFk);

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

	OPEN cursor1;
		bucle: LOOP
	
			FETCH cursor1 INTO vEktFk;
		
			IF done THEN
				LEAVE bucle;
			END IF;
		
				CALL edi.ekt_load(vEktFk);
	
		END LOOP bucle;
	CLOSE cursor1;

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 `ekt_refresh` */;
/*!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 `ekt_refresh`(
	`vSelf` INT, vMailFk INT)
BEGIN
/**
 * Updates a transaction, generates it's barcode.
 */
	DECLARE vRewriteKop INT DEFAULT NULL;
	DECLARE vTruncatePutOrder INT DEFAULT NULL;
	DECLARE vBarcode CHAR(15) DEFAULT NULL;
	DECLARE vAuction SMALLINT;
	DECLARE vClock SMALLINT;
	DECLARE vDate DATE;
	DECLARE vAgj INT;
	DECLARE vKop INT;
	DECLARE vPutOrderFk BIGINT;

	SELECT auction, klo, fec, agj, kop, putOrderFk
		INTO vAuction, vClock, vDate, vAgj, vKop, vPutOrderFk
		FROM ekt
		WHERE id = vSelf;

	-- Generates the barcode

	IF vAgj != 0 AND vAgj IS NOT NULL
	THEN
		SET vBarcode = CONCAT(
			LPAD(vAuction, 2, 0),
			LPAD(IFNULL(vClock, 99), 2, 0),
			LPAD(DAYOFYEAR(vDate), 3, 0),
			IF(vClock IS NULL OR vClock = 99,
				LPAD(vAgj, 8, 0),
				CONCAT(LPAD(vAgj, 5, 0), '010')
			)
		);
	END IF;

	-- Rewrites the kop parameter

	IF vKop IS NULL THEN
		SELECT defaultKop INTO vKop FROM exchangeConfig;
	END IF;

	SELECT e.kop INTO vRewriteKop
		FROM mailSender e
			JOIN mail m ON m.senderFk = e.id
		WHERE m.id = vMailFk;

	SET vKop = IFNULL(vRewriteKop, vKop);

	-- Format order id

	SET vTruncatePutOrder = vPutOrderFk MOD 1000000;

	-- Refresh EKT

	UPDATE ekt SET
		 barcode = vBarcode
		,kop = vKop
		,putOrderFk = vTruncatePutOrder
	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 `floramondo_offerRefresh` */;
/*!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 `floramondo_offerRefresh`()
proc: BEGIN
	DECLARE vLanded DATETIME;
	DECLARE done INT DEFAULT FALSE;
	DECLARE vFreeId INT;
	DECLARE vSupplyResponseFk INT;
	DECLARE vLastInserted DATETIME;
	DECLARE vIsAuctionDay BOOLEAN;
	DECLARE vMaxNewItems INT DEFAULT 10000;
	DECLARE vStartingTime DATETIME;
	DECLARE vAalsmeerMarketPlaceID VARCHAR(13) DEFAULT '8713783439043';

	DECLARE cur1 CURSOR FOR
		SELECT id
			FROM edi.item_free;

	DECLARE cur2 CURSOR FOR
		SELECT srId
			FROM itemToInsert;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	DECLARE EXIT HANDLER FOR SQLSTATE '45000'
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	IF 'test' = (SELECT environment FROM util.config) THEN
		LEAVE proc;
	END IF;

	SET vStartingTime = NOW();

	TRUNCATE edi.offerList ;

	INSERT INTO edi.offerList(supplier, total)
		SELECT v.name, COUNT(DISTINCT sr.ID) total
			FROM edi.supplyResponse sr
				JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
				WHERE sr.NumberOfUnits > 0
				AND sr.EmbalageCode != 999
				GROUP BY sr.vmpID;

	UPDATE edi.offerList o
		JOIN (SELECT v.name, COUNT(*) total
			FROM edi.supplyOffer sr
				JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
				GROUP BY sr.vmpID) sub ON o.supplier = sub.name
		SET o.`filter` = sub.total;

	-- Refresca las fotos de los items existentes, con prioridad baja (0.7 seg)
	INSERT IGNORE INTO vn.itemImageQueue(itemFk, url,priority)
		SELECT i.id, sr.PictureReference , 100
			FROM edi.supplyResponse sr
				JOIN vn.item i ON i.supplyResponseFk = sr.ID
			WHERE i.image != edi.imageName(sr.PictureReference)
			AND sr.NumberOfUnits > 0;

	-- Elimina de la lista de items libres aquellos que ya existen
	DELETE itf.*
		FROM edi.item_free itf
			JOIN vn.item i ON i.id = itf.id;

	DROP TEMPORARY TABLE IF EXISTS tmp;
	CREATE TEMPORARY TABLE tmp (INDEX (`Item_ArticleCode`)) ENGINE = MEMORY
		SELECT 	t.*
			FROM (
			SELECT *
				FROM edi.supplyOffer
				ORDER BY (MarketPlaceID = vAalsmeerMarketPlaceID) DESC, NumberOfUnits DESC LIMIT 10000000000000000000) t
		GROUP BY t.srId;

	DROP TEMPORARY TABLE IF EXISTS edi.offer;
	CREATE TEMPORARY TABLE edi.offer (INDEX (`srID`), INDEX (`EmbalageCode`),
		INDEX (`ef1`), INDEX (`ef2`), INDEX (`ef3`), INDEX (`ef4`),INDEX (`ef5`), INDEX (`ef6`),
		INDEX (`s1Value`), INDEX (`s2Value`), INDEX (`s3Value`), INDEX (`s4Value`),INDEX (`s5Value`), INDEX (`s6Value`))
	ENGINE = MEMORY
		SELECT so.*,
				ev1.type_description s1Value,
				ev2.type_description s2Value,
				ev3.type_description s3Value,
				ev4.type_description s4Value,
				ev5.type_description s5Value,
				ev6.type_description s6Value,
				eif1.feature ef1,
				eif2.feature ef2,
				eif3.feature ef3,
				eif4.feature ef4,
				eif5.feature ef5,
				eif6.feature ef6
			FROM tmp so
				LEFT JOIN edi.item_feature eif1 ON eif1.item_id = so.Item_ArticleCode
					AND eif1.presentation_order = 1 AND eif1.expiry_date IS NULL
				LEFT JOIN edi.item_feature eif2 ON eif2.item_id = so.Item_ArticleCode
					AND eif2.presentation_order = 2 AND eif2.expiry_date IS NULL
				LEFT JOIN edi.item_feature eif3 ON eif3.item_id = so.Item_ArticleCode
					AND eif3.presentation_order = 3 AND eif3.expiry_date IS NULL
				LEFT JOIN edi.item_feature eif4 ON eif4.item_id = so.Item_ArticleCode
					AND eif4.presentation_order = 4 AND eif4.expiry_date IS NULL
				LEFT JOIN edi.item_feature eif5 ON eif5.item_id = so.Item_ArticleCode
					AND eif5.presentation_order = 5 AND eif5.expiry_date IS NULL
				LEFT JOIN edi.item_feature eif6 ON eif6.item_id = so.Item_ArticleCode
					AND eif6.presentation_order = 6 AND eif6.expiry_date IS NULL
				LEFT JOIN edi.`value` ev1 ON ev1.type_id = eif1.feature AND so.s1 = ev1.type_value
				LEFT JOIN edi.`value` ev2 ON ev2.type_id = eif2.feature AND so.s2 = ev2.type_value
				LEFT JOIN edi.`value` ev3 ON ev3.type_id = eif3.feature AND so.s3 = ev3.type_value
				LEFT JOIN edi.`value` ev4 ON ev4.type_id = eif4.feature AND so.s4 = ev4.type_value
				LEFT JOIN edi.`value` ev5 ON ev5.type_id = eif5.feature AND so.s5 = ev5.type_value
				LEFT JOIN edi.`value` ev6 ON ev6.type_id = eif6.feature AND so.s6 = ev6.type_value
			ORDER BY Price;

	DROP TEMPORARY TABLE tmp;

	DELETE o
		FROM edi.offer o
			LEFT JOIN vn.tag t1 ON t1.ediTypeFk = o.ef1 AND t1.overwrite = 'size'
			LEFT JOIN vn.tag t2 ON t2.ediTypeFk = o.ef2 AND t2.overwrite = 'size'
			LEFT JOIN vn.tag t3 ON t3.ediTypeFk = o.ef3 AND t3.overwrite = 'size'
			LEFT JOIN vn.tag t4 ON t4.ediTypeFk = o.ef4 AND t4.overwrite = 'size'
			LEFT JOIN vn.tag t5 ON t5.ediTypeFk = o.ef5 AND t5.overwrite = 'size'
			LEFT JOIN vn.tag t6 ON t6.ediTypeFk = o.ef6 AND t6.overwrite = 'size'
			JOIN vn.floramondoConfig fc ON TRUE
		WHERE (t1.id IS NOT NULL AND CONVERT(s1Value, UNSIGNED) > fc.itemMaxSize)
			OR(t2.id IS NOT NULL AND CONVERT(s2Value, UNSIGNED) > fc.itemMaxSize)
			OR(t3.id IS NOT NULL AND CONVERT(s3Value, UNSIGNED) > fc.itemMaxSize)
			OR(t4.id IS NOT NULL AND CONVERT(s4Value, UNSIGNED) > fc.itemMaxSize)
			OR(t5.id IS NOT NULL AND CONVERT(s5Value, UNSIGNED) > fc.itemMaxSize)
			OR(t6.id IS NOT NULL AND CONVERT(s6Value, UNSIGNED) > fc.itemMaxSize);

	START TRANSACTION;

	-- Actualizamos el campo supplyResponseFk para aquellos articulos que ya estan creados y reutilizamos
	UPDATE IGNORE edi.offer o
			JOIN vn.item i
				ON i.name = o.product_name
				AND i.subname <=> o.company_name
				AND i.value5 <=> o.s1Value
				AND i.value6 <=> o.s2Value
				AND i.value7 <=> o.s3Value
				AND i.value8 <=> o.s4Value
				AND i.value9 <=> o.s5Value
				AND i.value10 <=> o.s6Value
				AND i.NumberOfItemsPerCask <=> o.NumberOfItemsPerCask
				AND i.EmbalageCode <=> o.EmbalageCode
				AND i.quality <=> o.Quality
			JOIN vn.itemType it ON it.id = i.typeFk
			LEFT JOIN vn.sale s ON s.itemFk = i.id
			LEFT JOIN vn.ticket t ON t.id = s.ticketFk AND t.shipped > TIMESTAMPADD(WEEK, -1, CURDATE())
			LEFT JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
			LEFT JOIN edi.deliveryInformation di ON di.supplyResponseID = sr.ID
			LEFT JOIN edi.putOrder po ON po.supplyResponseID = i.supplyResponseFk AND po.OrderTradeLineDateTime > TIMESTAMPADD(WEEK, -1, CURDATE())
		SET i.supplyResponseFk = o.srID
		WHERE (		sr.ID IS NULL
				OR 	sr.NumberOfUnits = 0
				OR 	di.LatestOrderDateTime < NOW()
				OR 	di.ID IS NULL)
			AND it.isInventory
			AND t.id IS NULL
			AND po.id IS NULL;
																						-- select now(),'Antes de crear ITO';
	DROP TEMPORARY TABLE IF EXISTS itemToInsert;
	CREATE TEMPORARY TABLE itemToInsert ENGINE = MEMORY
		SELECT o.*, CAST(NULL AS DECIMAL(6,0)) as itemFk
			FROM edi.offer o
				LEFT JOIN vn.item i ON i.supplyResponseFk = o.srId
		WHERE i.id IS NULL
	LIMIT vMaxNewItems;

	-- Reciclado de nº de item
	OPEN cur1;
	OPEN cur2;

	read_loop: LOOP

		FETCH cur2 INTO vSupplyResponseFk;
		FETCH cur1 INTO vFreeId;

		IF done THEN
			LEAVE read_loop;
		END IF;

		UPDATE itemToInsert
			SET itemFk = vFreeId
			WHERE srId = vSupplyResponseFk;

	END LOOP;

	CLOSE cur1;
	CLOSE cur2;

	-- Insertamos todos los items en Articles de la oferta
	INSERT INTO vn.item(id,
					`name`,
					longName,
					subName,
					expenceFk,
					typeFk,
					intrastatFk,
					originFk,
					supplyResponseFk,
							numberOfItemsPerCask,
							embalageCode,
							quality,
							isFloramondo)
		SELECT 	iti.itemFk,
				iti.product_name,
				iti.product_name,
					iti.company_name,
				iti.expenseFk,
				iti.itemTypeFk,
				iti.intrastatFk,
				iti.originFk,
				iti.`srId`,
				iti.NumberOfItemsPerCask,
					iti.EmbalageCode,
					iti.Quality,
					TRUE
		FROM itemToInsert iti;

	INSERT IGNORE INTO vn.itemImageQueue(itemFk, url)
		SELECT i.id, PictureReference
			FROM itemToInsert ii
				JOIN vn.item i ON i.supplyResponseFk = ii.srId
			WHERE PictureReference IS NOT NULL;

	INSERT INTO edi.log(tableName, fieldName,fieldValue)
		SELECT 'itemImageQueue','NumImagenesPtes', COUNT(*)
			FROM vn.itemImageQueue
			WHERE attempts = 0;

	-- Inserta si se añadiesen tags nuevos
	INSERT IGNORE INTO vn.tag (name, ediTypeFk)
		SELECT description, type_id FROM edi.type;

	-- Inserta los tags sólo en los articulos nuevos

	-- desabilita el trigger para recalcular los tags al final
		SET @isTriggerDisabled = TRUE;

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , ii.product_name, 1
			FROM itemToInsert ii
				JOIN vn.tag t ON t.`name` = 'Producto'
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
				WHERE NOT ISNULL(ii.product_name);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , ii.Quality, 3
			FROM itemToInsert ii
				JOIN vn.tag t ON t.`name` = 'Calidad'
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
				WHERE NOT ISNULL(ii.Quality);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , ii.company_name, 4
			FROM itemToInsert ii
				JOIN vn.tag t ON t.`name` = 'Productor'
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
				WHERE NOT ISNULL(ii.company_name);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s1Value, 5
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef1
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s1Value);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s2Value, 6
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef2
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s2Value);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s3Value, 7
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef3
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s3Value);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s4Value, 8
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef4
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s4Value);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s5Value, 9
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef5
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s5Value);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id , s6Value, 10
			FROM itemToInsert ii
				JOIN vn.tag t ON t.ediTypeFk = ii.ef6
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
			WHERE NOT ISNULL(s6Value);

	INSERT IGNORE INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT i.id, t.id, IFNULL(ink.name, ik.color), 11
			FROM itemToInsert ii
				JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
				JOIN vn.tag t ON t.`name` = 'Color'
				LEFT JOIN edi.feature f ON f.item_id = ii.Item_ArticleCode
				LEFT JOIN edi.`type` tp ON tp.type_id = f.feature_type_id AND tp.`description` = 'Hoofdkleur 1'
				LEFT JOIN vn.ink ON ink.dutchCode = f.feature_value
				LEFT JOIN vn.itemInk ik ON ik.longName = i.longName
			WHERE ink.name IS NOT NULL
				OR ik.color IS NOT NULL;

	UPDATE vn.item i
			JOIN itemToInsert ii ON i.supplyResponseFk = ii.`srId`
			JOIN vn.packaging p ON p.id LIKE ii.EmbalageCode -- AND hasCompressionVariations
			JOIN vn.itemTag it ON it.itemFk = i.id
			JOIN vn.tag tSize ON tSize.overwrite = 'size' AND tSize.id = it.tagFk
			JOIN vn.volumeConfig vc
		SET i.packingOut  = vc.standardFlowerBox * 1000
							*  ii.NumberOfItemsPerCask
							/ (p.width * p.depth * IFNULL(p.height, it.value ));

	DROP TABLE IF EXISTS tmp.item;
	CREATE TABLE tmp.item
		(PRIMARY KEY (id))
		SELECT i.id FROM vn.item i
			JOIN itemToInsert ii ON i.supplyResponseFk = ii.`srId`;

	CALL vn.item_refreshTags();

	SET @isTriggerDisabled = FALSE;

	SELECT MIN(LatestDeliveryDateTime) INTO vLanded
		FROM edi.supplyResponse sr
			JOIN edi.deliveryInformation di ON di.supplyResponseID = sr.ID
			JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
			JOIN vn.floramondoConfig fc
		WHERE mp.isLatestOrderDateTimeRelevant
			AND di.LatestOrderDateTime > IF(fc.MaxLatestOrderHour > HOUR(NOW()), CURDATE(), TIMESTAMPADD(DAY,1,CURDATE()));

	UPDATE vn.floramondoConfig
		SET nextLanded = vLanded
		WHERE vLanded IS NOT NULL;

	-- Elimina la oferta obsoleta
	UPDATE vn.buy b
			JOIN vn.entry e ON e.id = b.entryFk
			JOIN vn.travel tr ON tr.id = e.travelFk
			JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
			JOIN vn.item i ON i.id = b.itemFk
			LEFT JOIN edi.supplyResponse sr ON i.supplyResponseFk = sr.ID
			LEFT JOIN edi.deliveryInformation di ON di.ID = b.deliveryFk
		SET b.quantity = 0
		WHERE  (IFNULL(di.LatestOrderDateTime,NOW()) <= NOW()
			OR i.supplyResponseFk IS NULL
			OR sr.NumberOfUnits = 0)
			AND am.name = 'LOGIFLORA'
			AND e.isRaid;

	-- Localiza las entradas de cada almacen
	UPDATE edi.warehouseFloramondo
		SET entryFk = vn.entry_getForLogiflora(TIMESTAMPADD(DAY,travellingDays,vLanded), warehouseFk);


	IF vLanded IS NOT NULL THEN
			-- actualiza la oferta existente
		UPDATE vn.buy b
			JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
			JOIN vn.item i ON i.id = b.itemFk
			JOIN edi.offer o ON i.supplyResponseFk = o.`srId`
			SET b.quantity = o.NumberOfUnits * o.NumberOfItemsPerCask,
				b.buyingValue = o.price
			WHERE (b.quantity <> o.NumberOfUnits * o.NumberOfItemsPerCask OR b.buyingValue <> o.price);

		-- Se inserta el resto
		SET vLastInserted := NOW();

		-- Inserta la oferta
		INSERT INTO vn.buy(	entryFk,
						itemFk,
						quantity,
						buyingValue,
						stickers,
						packing,
						`grouping`,
						groupingMode,
						packageFk,
						deliveryFk)

		SELECT  	wf.entryFk,
				i.id,
				o.NumberOfUnits * o.NumberOfItemsPerCask as quantity,
				o.Price,
				o.NumberOfUnits as etiquetas,
				o.NumberOfItemsPerCask as packing,
				GREATEST(1, IFNULL(o.MinimumQuantity,0)) * o.NumberOfItemsPerCask as `grouping`,
				2, -- Obliga al Packing
				o.embalageCode,
				o.diId
			FROM edi.offer o
				JOIN vn.item i ON i.supplyResponseFk = o.srId
				JOIN edi.warehouseFloramondo wf
				JOIN vn.packaging p ON p.id LIKE o.embalageCode
				LEFT JOIN vn.buy b ON b.itemFk = i.id AND b.entryFk = wf.entryFk
			WHERE ISNULL(b.id); -- llevar esta linea i mirar de crear els packages a temps real

			DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;

			CREATE TEMPORARY TABLE tmp.buyRecalc
			SELECT b.id
				FROM vn.buy b
					JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
				WHERE b.created >= vLastInserted;

			CALL vn.buy_recalcPrices();

	UPDATE edi.offerList o
		JOIN (SELECT v.name, COUNT(DISTINCT b.itemFk) total
				FROM vn.buy b
					JOIN vn.item i ON i.id = b.itemFk
					JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
					JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
					JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
					JOIN vn.warehouse w ON w.id = wf.warehouseFk
					WHERE w.name = 'VNH'
						AND b.quantity > 0
				GROUP BY sr.vmpID) sub ON o.supplier = sub.name
		SET o.vnh = sub.total;

	UPDATE edi.offerList o
		JOIN (SELECT v.name, COUNT(DISTINCT b.itemFk) total
				FROM vn.buy b
					JOIN vn.item i ON i.id = b.itemFk
					JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
					JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID
					JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
					JOIN vn.warehouse w ON w.id = wf.warehouseFk
					WHERE w.name = 'ALGEMESI'
						AND b.quantity > 0
				GROUP BY sr.vmpID) sub ON o.supplier = sub.name
		SET o.algemesi = sub.total;


	END IF;

	DROP TEMPORARY TABLE
		edi.offer,
		itemToInsert;

	DROP TABLE tmp.item;

	COMMIT;

	-- Esto habria que pasarlo a procesos programados o trabajar con tags y dejar las familias
	UPDATE vn.item i
		SET typeFk = 121
		WHERE i.longName LIKE 'Rosa Garden %'
			AND typeFk = 17;

	UPDATE vn.item i
		SET typeFk = 156
		WHERE i.longName LIKE 'Rosa ec %'
			AND typeFk = 17;

	INSERT INTO edi.log(tableName, fieldName,fieldValue)
		VALUES('floramondo_offerRefresh','Tiempo de proceso',TIMEDIFF(NOW(),vStartingTime));
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 `item_freeAdd` */;
/*!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 `item_freeAdd`()
BEGIN
	
	/**
	 * Rellena la tabla item_free con los id ausentes en vn.item
	 * 
	 */
	
	DECLARE vCounter INT DEFAULT 400000;

	DECLARE vCounterNewItems INT DEFAULT 0;
	
	DECLARE vMaxItem INT;

	DECLARE vExists BOOLEAN DEFAULT FALSE;

	SELECT MAX(id)
		INTO vMaxItem 
		FROM vn.item;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.itemBusy;
	CREATE TEMPORARY TABLE tmp.itemBusy
	(id INT PRIMARY KEY)
		SELECT i.id 
			FROM vn.item i
			WHERE id >= 400000
		UNION ALL
		SELECT ifr.id 
			FROM edi.item_free ifr;
	
	WHILE vCounter < vMaxItem DO
	
		SET vCounter = vCounter + 1;
	
		SELECT count(*) INTO vExists
			FROM tmp.itemBusy
			WHERE id = vCounter;
	
		IF NOT vExists THEN
		
			SET vCounterNewItems = vCounterNewItems + 1;
		
			INSERT INTO edi.item_free(id)
			VALUES (vCounter);
		
		END IF;

	END WHILE;

	DROP TEMPORARY TABLE tmp.itemBusy;

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 `item_getNewByEkt` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `item_getNewByEkt`(vEktFk INT, OUT vItemFk INT)
BEGIN

/**
 *  Devuelve un número nuevo de item a partir de un registro de la tabla edi.ekt
 * 
 *  @param vEktFk Identificador de la tabla edi.ekt
 */

	START TRANSACTION;

	SELECT MIN(id) id INTO vItemFk
		FROM edi.item_free;

	DELETE FROM edi.item_free 
		WHERE id = vItemFk;
	
	COMMIT;
	
	IF ISNULL(vItemFk) THEN
		SELECT MAX(i.id) + 1
			INTO vItemFk
			FROM vn.item i;
	END IF;
	


	INSERT INTO vn.item(id,
						`name`,
						longName,
						subName,
						expenceFk,
						typeFk,
						intrastatFk,
						originFk,
						numberOfItemsPerCask,
						embalageCode,
						quality,
						isFloramondo)
		SELECT vItemFk,
			e.item,
			e.item,
			e.item,
			igto.expenseFk ,
			igto.itemTypeFk ,
			igto.intrastatFk ,
			igto.originFk,
			e.pac,
			least(IF((e.package = 800),((e.package * 10) + e.pac), e.package), ifnull(idt.bucket_id, '999')) packageFk,
			e.cat,
			TRUE
		FROM edi.ekt e 
			JOIN edi.item i ON i.id = e.`ref` 
			JOIN edi.item_groupToOffer igto ON igto.group_code = i.group_id 
			LEFT JOIN edi.item_defaultType idt ON idt.item_id = e.`ref` 
		WHERE e.id = vEktFk;

	SET @isTriggerDisabled = TRUE;
	
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.item , 1	
			FROM edi.ekt e 
				JOIN vn.tag t ON t.`name` = 'Producto'
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.item);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.cat , 3	
			FROM edi.ekt e 
				JOIN vn.tag t ON t.`name` = 'Calidad'
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.cat);
	
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , s.company_name , 4	
			FROM edi.ekt e 
				JOIN edi.supplier s ON s.supplier_id = e.pro
				JOIN vn.tag t ON t.`name` = 'Productor'
			WHERE e.id = vEktFk
				AND NOT ISNULL(s.company_name);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s1, 5	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 1 
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s1 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s1);
	
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s2, 6	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 2 
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s2 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s2);
		
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s3, 7	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 3 
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s3 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s3);
	
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s4, 8	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 4
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s4 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s4);
				
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s5, 9	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 5
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s5 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s5);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, t.id , e.s6, 10	
			FROM edi.ekt e
				LEFT JOIN edi.item_feature eif ON eif.item_id = e.`ref` 
					AND eif.presentation_order = 6
					AND eif.expiry_date IS NULL
				LEFT JOIN edi.`value` ev ON ev.type_id = eif.feature 
					AND e.s6 = ev.type_value
				JOIN vn.tag t ON t.ediTypeFk = eif.feature
			WHERE e.id = vEktFk
				AND NOT ISNULL(e.s6);

	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT  vItemFk, t.id, IFNULL(ink.name, ik.color), 11	
			FROM edi.ekt e				
				JOIN vn.tag t ON t.`name` = 'Color'
				LEFT JOIN edi.feature f ON f.item_id = e.`ref` 
				LEFT JOIN edi.`type` tp ON tp.type_id = f.feature_type_id AND tp.`description` = 'Hoofdkleur 1'
				LEFT JOIN vn.ink ON ink.dutchCode = f.feature_value
				LEFT JOIN vn.itemInk ik ON ik.longName = e.item
			WHERE e.id = vEktFk
				AND ( ink.name IS NOT NULL 
				OR ik.color IS NOT NULL)
			LIMIT 1;

	DROP TABLE IF EXISTS tmp.item;

	CREATE TABLE tmp.item
		(PRIMARY KEY (id))
		SELECT vItemFk id ;

	CALL vn.item_refreshTags();

	SET @isTriggerDisabled = FALSE; 	
		
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 `mail_new` */;
/*!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 `mail_new`(
	 vMessageId VARCHAR(100)
	,vSender VARCHAR(150)
    ,OUT vSelf INT
)
BEGIN
/**
 * Registers a mail message.
 *
 * @param vMessageId Message-ID of email
 * @param vSender Id of mail sender
 * @param vSelf The created message id
 */
	DECLARE vSenderId INT;
	DECLARE vIsDuplicated BOOL;
	DECLARE duplicateKey CONDITION FOR 1062;

	DECLARE CONTINUE HANDLER FOR duplicateKey
		SET vIsDuplicated = TRUE;

	SELECT id INTO vSenderId
		FROM mailSender
		WHERE mail = vSender;

	SET vIsDuplicated = FALSE;
	INSERT INTO mail SET
		sender = vSender,
		senderFk = vSenderId,
		messageId = vMessageId;
		
	IF vIsDuplicated THEN
		SELECT id INTO vSelf
			FROM mail
			WHERE messageId = vMessageId;
	ELSE
		SET vSelf = LAST_INSERT_ID();
	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 `ticket_calcCompByFloramondo` */;
/*!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_calcCompByFloramondo`(vSelf INT)
BEGIN
	
	/**
	 * Recalcula "a pelo" los componentes para un ticket de Floramondo
	 * 
	 * Pendiente de concretar la solución cuando Logiflora conteste.
	 * 
	 * @param vSelf Identificador de vn.ticket
	 */
	
	CALL cache.last_buy_refresh(TRUE);

	DELETE sc.* 
		FROM vn.saleComponent sc
			JOIN vn.sale s ON s.id = sc.saleFk 
		WHERE s.ticketFk = vSelf;

	UPDATE vn.sale s
		JOIN vn.item i ON i.id = s.itemFk 
		JOIN edi.floraHollandConfig fhc
		LEFT JOIN cache.last_buy lb ON lb.item_id = i.id 
		LEFT JOIN vn.buy b ON b.id = lb.buy_id
		LEFT JOIN vn.warehouse w ON w.id = lb.warehouse_id AND w.name = 'Floramondo'
		SET s.price = b.buyingValue * (1 + fhc.floramondoMargin)
		WHERE s.ticketFk = vSelf;

	INSERT INTO vn.saleComponent(saleFk, componentFk, value)
		SELECT s.id, c.id, MAX(b.buyingValue)
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk 
				LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
				LEFT JOIN vn.buy b ON b.id = lb.buy_id
				LEFT JOIN vn.warehouse w ON w.id = lb.warehouse_id AND w.name = 'Floramondo'
				JOIN vn.component c ON c.code = 'purchaseValue'
			WHERE s.ticketFk = vSelf
			GROUP BY s.id;
				
	INSERT INTO vn.saleComponent(saleFk, componentFk, value)
		SELECT s.id, c.id, MAX(b.buyingValue) * fhc.floramondoMargin 
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk 
				JOIN edi.floraHollandConfig fhc
				LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
				LEFT JOIN vn.buy b ON b.id = lb.buy_id
				LEFT JOIN vn.warehouse w ON w.id = lb.warehouse_id AND w.name = 'Floramondo'
				JOIN vn.component c ON c.code = 'margin'
				WHERE s.ticketFk = vSelf
				GROUP BY s.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 */ ;

--
-- Current Database: `hedera`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hedera` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `hedera`;

--
-- Table structure for table `androidUser`
--

DROP TABLE IF EXISTS `androidUser`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `androidUser` (
  `androidId` varchar(200) CHARACTER SET utf8 NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`userFk`,`androidId`),
  CONSTRAINT `androidUser_ibfk_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `basketOrder`
--

DROP TABLE IF EXISTS `basketOrder`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `basketOrder` (
  `clientFk` int(11) NOT NULL,
  `orderFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`orderFk`,`clientFk`),
  UNIQUE KEY `customer_id` (`clientFk`),
  CONSTRAINT `basketOrder_ibfk_1` FOREIGN KEY (`orderFk`, `clientFk`) REFERENCES `order` (`id`, `customer_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `basketOrder_ibfk_2` FOREIGN KEY (`orderFk`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `basketOrder_ibfk_3` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `browser`
--

DROP TABLE IF EXISTS `browser`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `browser` (
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Browser name in browscap',
  `version` float NOT NULL COMMENT 'Minimal version',
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='List of compatible web browsers and its version';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `defaultLang` char(2) CHARACTER SET utf8 NOT NULL COMMENT 'The default language if none is specified',
  `https` tinyint(3) unsigned NOT NULL COMMENT 'Wether to force de use of HTTPS',
  `cookieLife` smallint(5) unsigned NOT NULL COMMENT 'The cookies life, in days',
  `jwtKey` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The key used to encode/decode JWT tokens',
  `defaultForm` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Form loaded at web login',
  `restUri` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The URI  for rest service',
  `testRestUri` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The URI  for test rest service',
  `guestUser` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Guest user name',
  `testDomain` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The address for beta website',
  `productionDomain` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The address for production website',
  `pdfsDir` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Directory where PDFs are allocated',
  `dmsDir` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Directory where documents are allocated',
  PRIMARY KEY (`id`),
  KEY `jwtkey_IX` (`jwtKey`) COMMENT 'Prueba de Ernesto 3.8.2020. MySQL se queja de no tener indices. Si, se que solo tiene un registro pero molesta para depurar otros.'
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `contact`
--

DROP TABLE IF EXISTS `contact`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contact` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `recipient` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `image`
--

DROP TABLE IF EXISTS `image`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `image` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `collectionFk` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `updated` int(11) DEFAULT NULL,
  `nRefs` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of references, don''t modify this column manually',
  PRIMARY KEY (`id`),
  UNIQUE KEY `collection` (`collectionFk`,`name`),
  CONSTRAINT `image_ibfk_1` FOREIGN KEY (`collectionFk`) REFERENCES `imageCollection` (`name`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `imageCollection`
--

DROP TABLE IF EXISTS `imageCollection`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `imageCollection` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `desc` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `maxWidth` int(10) unsigned NOT NULL,
  `maxHeight` int(10) unsigned NOT NULL,
  `model` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `property` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `schema` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Deprecated',
  `table` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Deprecated',
  `column` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Deprecated',
  `readRoleFk` int(10) unsigned DEFAULT '1',
  `writeRoleFk` int(10) unsigned DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `role_id_writeRoleFk` (`writeRoleFk`),
  KEY `role_id_readRoleFk` (`readRoleFk`),
  CONSTRAINT `role_id_readRoleFk` FOREIGN KEY (`readRoleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `role_id_writeRoleFk` FOREIGN KEY (`writeRoleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `imageCollectionSize`
--

DROP TABLE IF EXISTS `imageCollectionSize`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `imageCollectionSize` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `collectionFk` int(10) unsigned NOT NULL,
  `width` int(10) unsigned NOT NULL,
  `height` int(10) unsigned NOT NULL,
  `crop` tinyint(3) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `image_schema_id` (`collectionFk`),
  CONSTRAINT `imageCollectionSize_ibfk_1` FOREIGN KEY (`collectionFk`) REFERENCES `imageCollection` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `imageConfig`
--

DROP TABLE IF EXISTS `imageConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `imageConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  `maxSize` int(10) unsigned NOT NULL COMMENT 'Maximun size for uploaded images in MB',
  `useXsendfile` tinyint(4) NOT NULL COMMENT 'Whether to use the apache module XSendfile',
  `url` varchar(255) NOT NULL COMMENT 'Public URL where image are hosted',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COMMENT='Global image parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `language`
--

DROP TABLE IF EXISTS `language`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `language` (
  `code` varchar(10) CHARACTER SET utf8 NOT NULL,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `orgName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `isActive` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `link`
--

DROP TABLE IF EXISTS `link`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `link` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `link` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `image` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`link_afterInsert`
	AFTER INSERT ON `link`
	FOR EACH ROW
BEGIN
	CALL image_ref('link', NEW.image);
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`.`link_afterUpdate`
	AFTER UPDATE ON `link`
	FOR EACH ROW
BEGIN
	IF !(NEW.image <=> OLD.image) THEN
		CALL image_unref('link', OLD.image);
		CALL image_ref('link', NEW.image);
	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 `hedera`.`link_afterDelete`
	AFTER DELETE ON `link`
	FOR EACH ROW
BEGIN
	CALL image_unref('link', OLD.image);
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 */ ;

--
-- Table structure for table `location`
--

DROP TABLE IF EXISTS `location`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `location` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `lat` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  `lng` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  `title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `address` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
  `postcode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `province` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `language` char(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mailConfig`
--

DROP TABLE IF EXISTS `mailConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  `host` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'localhost' COMMENT 'SMTP host',
  `port` smallint(6) NOT NULL DEFAULT '465' COMMENT 'SMTP port',
  `secure` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Wether to use a secure connection',
  `sender` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The sender mail address',
  `senderName` varchar(75) CHARACTER SET utf8 NOT NULL COMMENT 'The sender name',
  `user` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'SMTP user',
  `password` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'SMTP password, base64 encoded',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mainAccount`
--

DROP TABLE IF EXISTS `mainAccount`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mainAccount` (
  `accountFk` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`accountFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `mainAccountBank`
--

DROP TABLE IF EXISTS `mainAccountBank`;
/*!50001 DROP VIEW IF EXISTS `mainAccountBank`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `mainAccountBank` (
  `name` tinyint NOT NULL,
  `iban` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `menu`
--

DROP TABLE IF EXISTS `menu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `menu` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `path` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `roleFk` int(10) unsigned NOT NULL,
  `parentFk` int(10) unsigned DEFAULT NULL,
  `displayOrder` tinyint(4) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `group_id` (`roleFk`),
  KEY `parent` (`parentFk`),
  CONSTRAINT `menu_ibfk_1` FOREIGN KEY (`roleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `message`
--

DROP TABLE IF EXISTS `message`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `message` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `code` char(35) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `metatag`
--

DROP TABLE IF EXISTS `metatag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `metatag` (
  `id` int(11) NOT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `myAddress`
--

DROP TABLE IF EXISTS `myAddress`;
/*!50001 DROP VIEW IF EXISTS `myAddress`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myAddress` (
  `id` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `street` tinyint NOT NULL,
  `city` tinyint NOT NULL,
  `postalCode` tinyint NOT NULL,
  `provinceFk` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `isDefaultAddress` tinyint NOT NULL,
  `isActive` tinyint NOT NULL,
  `longitude` tinyint NOT NULL,
  `latitude` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myBasket`
--

DROP TABLE IF EXISTS `myBasket`;
/*!50001 DROP VIEW IF EXISTS `myBasket`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myBasket` (
  `id` tinyint NOT NULL,
  `made` tinyint NOT NULL,
  `sent` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `deliveryMethodFk` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL,
  `notes` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myBasketDefaults`
--

DROP TABLE IF EXISTS `myBasketDefaults`;
/*!50001 DROP VIEW IF EXISTS `myBasketDefaults`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myBasketDefaults` (
  `deliveryMethod` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `defaultAgencyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myBasketItem`
--

DROP TABLE IF EXISTS `myBasketItem`;
/*!50001 DROP VIEW IF EXISTS `myBasketItem`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myBasketItem` (
  `id` tinyint NOT NULL,
  `orderFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `price` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myClient`
--

DROP TABLE IF EXISTS `myClient`;
/*!50001 DROP VIEW IF EXISTS `myClient`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myClient` (
  `id` tinyint NOT NULL,
  `isToBeMailed` tinyint NOT NULL,
  `defaultAddressFk` tinyint NOT NULL,
  `credit` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myInvoice`
--

DROP TABLE IF EXISTS `myInvoice`;
/*!50001 DROP VIEW IF EXISTS `myInvoice`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myInvoice` (
  `id` tinyint NOT NULL,
  `ref` tinyint NOT NULL,
  `issued` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `hasPdf` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myMenu`
--

DROP TABLE IF EXISTS `myMenu`;
/*!50001 DROP VIEW IF EXISTS `myMenu`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myMenu` (
  `id` tinyint NOT NULL,
  `path` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `parentFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myOrder`
--

DROP TABLE IF EXISTS `myOrder`;
/*!50001 DROP VIEW IF EXISTS `myOrder`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myOrder` (
  `id` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `deliveryMethodFk` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL,
  `note` tinyint NOT NULL,
  `sourceApp` tinyint NOT NULL,
  `isConfirmed` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `firstRowStamp` tinyint NOT NULL,
  `confirmed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myOrderRow`
--

DROP TABLE IF EXISTS `myOrderRow`;
/*!50001 DROP VIEW IF EXISTS `myOrderRow`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myOrderRow` (
  `id` tinyint NOT NULL,
  `Fk` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `rate` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myOrderTicket`
--

DROP TABLE IF EXISTS `myOrderTicket`;
/*!50001 DROP VIEW IF EXISTS `myOrderTicket`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myOrderTicket` (
  `orderFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myTicket`
--

DROP TABLE IF EXISTS `myTicket`;
/*!50001 DROP VIEW IF EXISTS `myTicket`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myTicket` (
  `id` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL,
  `refFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `location` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myTicketRow`
--

DROP TABLE IF EXISTS `myTicketRow`;
/*!50001 DROP VIEW IF EXISTS `myTicketRow`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myTicketRow` (
  `id` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `discount` tinyint NOT NULL,
  `reserved` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myTicketService`
--

DROP TABLE IF EXISTS `myTicketService`;
/*!50001 DROP VIEW IF EXISTS `myTicketService`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myTicketService` (
  `id` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `taxClassFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `ticketServiceTypeFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myTicketState`
--

DROP TABLE IF EXISTS `myTicketState`;
/*!50001 DROP VIEW IF EXISTS `myTicketState`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myTicketState` (
  `id` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `agencyModeFk` tinyint NOT NULL,
  `refFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `location` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL,
  `alertLevel` tinyint NOT NULL,
  `code` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `myTpvTransaction`
--

DROP TABLE IF EXISTS `myTpvTransaction`;
/*!50001 DROP VIEW IF EXISTS `myTpvTransaction`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `myTpvTransaction` (
  `id` tinyint NOT NULL,
  `merchantFk` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `receiptFk` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `response` tinyint NOT NULL,
  `status` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `news`
--

DROP TABLE IF EXISTS `news`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `news` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `text` text COLLATE utf8_unicode_ci NOT NULL,
  `image` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `priority` tinyint(3) unsigned NOT NULL DEFAULT '3',
  `tag` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'new',
  PRIMARY KEY (`id`),
  KEY `user` (`userFk`),
  KEY `tag` (`tag`),
  CONSTRAINT `news_ibfk_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`account` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `news_ibfk_2` FOREIGN KEY (`tag`) REFERENCES `newsTag` (`name`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`news_afterInsert`
	AFTER INSERT ON `news`
	FOR EACH ROW
BEGIN
	CALL image_ref('news', NEW.image);
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`.`news_afterUpdate`
	AFTER UPDATE ON `news`
	FOR EACH ROW
BEGIN
	IF !(NEW.image <=> OLD.image) THEN
		CALL image_unref('news', OLD.image);
		CALL image_ref('news', NEW.image);
	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 `hedera`.`news_afterDelete`
	AFTER DELETE ON `news`
	FOR EACH ROW
BEGIN
	CALL image_unref('news', OLD.image);
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 */ ;

--
-- Table structure for table `newsTag`
--

DROP TABLE IF EXISTS `newsTag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `newsTag` (
  `name` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `order`
--

DROP TABLE IF EXISTS `order`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `order` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_send` date NOT NULL DEFAULT '0000-00-00',
  `customer_id` int(11) NOT NULL,
  `delivery_method_id` int(11) DEFAULT '3',
  `agency_id` int(11) DEFAULT '2',
  `address_id` int(11) DEFAULT NULL,
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '442',
  `note` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `source_app` set('WEB','ANDROID','IOS','SALIX','TPV','TABLET_VN','') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'TPV',
  `is_bionic` tinyint(1) NOT NULL DEFAULT '1',
  `confirmed` tinyint(1) NOT NULL DEFAULT '0',
  `date_make` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `first_row_stamp` datetime DEFAULT NULL,
  `confirm_date` datetime DEFAULT NULL,
  `taxableBase` decimal(10,2) NOT NULL,
  `tax` decimal(10,2) NOT NULL,
  `total` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `address` (`address_id`),
  KEY `delivery_method` (`delivery_method_id`),
  KEY `agency` (`agency_id`),
  KEY `customer_id` (`customer_id`),
  KEY `company_id` (`company_id`),
  KEY `id` (`id`,`customer_id`),
  KEY `source_app` (`source_app`),
  KEY `confirmed` (`confirmed`),
  CONSTRAINT `order_ibfk_5` FOREIGN KEY (`address_id`) REFERENCES `vn`.`address` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `order_ibfk_8` FOREIGN KEY (`delivery_method_id`) REFERENCES `vn`.`deliveryMethod` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `order_ibfk_9` FOREIGN KEY (`agency_id`) REFERENCES `vn`.`agencyMode` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`order_afterInsert`
	AFTER INSERT ON `order`
	FOR EACH ROW
BEGIN	    
	IF NEW.address_id = 2850 THEN
		-- Fallo que se insertan no se sabe como tickets en este cliente
		CALL vn.mail_insert(
			'jgallego@verdnatura.es',
			'noreply@verdnatura.es',
			'Creada 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 */ ;
/*!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`.`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;
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`.`order_beforeDelete`
	BEFORE DELETE ON `order`
	FOR EACH ROW
BEGIN
	DELETE FROM orderRow WHERE orderFk = 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 */ ;

--
-- Table structure for table `orderConfig`
--

DROP TABLE IF EXISTS `orderConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orderConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `employeeFk` int(10) unsigned NOT NULL,
  `defaultAgencyFk` int(11) DEFAULT NULL,
  `guestMethod` varchar(45) CHARACTER SET utf8 NOT NULL,
  `guestAgencyFk` int(11) NOT NULL,
  `guestAddressFk` int(11) NOT NULL,
  `reserveTime` time NOT NULL,
  `defaultCompanyFk` smallint(6) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `employeeFk` (`employeeFk`),
  KEY `guestAgencyFk` (`guestAgencyFk`),
  KEY `defaultCompanyFk` (`defaultCompanyFk`),
  KEY `guestMethod` (`guestMethod`),
  KEY `defaultAgencyFk` (`defaultAgencyFk`),
  KEY `guestAddressFk` (`guestAddressFk`),
  CONSTRAINT `orderConfig_ibfk_1` FOREIGN KEY (`employeeFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `orderConfig_ibfk_2` FOREIGN KEY (`defaultCompanyFk`) REFERENCES `vn`.`company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `orderConfig_ibfk_3` FOREIGN KEY (`guestAgencyFk`) REFERENCES `vn`.`agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `orderConfig_ibfk_4` FOREIGN KEY (`defaultAgencyFk`) REFERENCES `vn`.`agencyMode` (`id`),
  CONSTRAINT `orderConfig_ibfk_5` FOREIGN KEY (`guestAddressFk`) REFERENCES `vn`.`address` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_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`),
  CONSTRAINT `orderRecalc_ibfk_1` FOREIGN KEY (`orderFk`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_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`
--

DROP TABLE IF EXISTS `orderRow`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orderRow` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `orderFk` int(10) unsigned NOT NULL DEFAULT '0',
  `itemFk` int(11) NOT NULL DEFAULT '0',
  `warehouseFk` int(11) DEFAULT NULL,
  `shipment` date DEFAULT NULL,
  `amount` smallint(6) unsigned NOT NULL DEFAULT '0',
  `price` decimal(10,2) DEFAULT NULL,
  `rate` smallint(5) unsigned DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `saleFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `item` (`itemFk`),
  KEY `order_id` (`orderFk`),
  KEY `created` (`created`),
  KEY `warehouse_shipment` (`warehouseFk`,`shipment`),
  KEY `orderRow_ibfk_4` (`saleFk`),
  CONSTRAINT `orderRow_ibfk_2` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `orderRow_ibfk_3` FOREIGN KEY (`orderFk`) REFERENCES `order` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `orderRow_ibfk_4` FOREIGN KEY (`saleFk`) REFERENCES `vn`.`sale` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_beforeInsert`
	BEFORE INSERT ON `orderRow`
	FOR EACH ROW
BEGIN
	DECLARE vIsFirst BOOL;

	SELECT (first_row_stamp IS NULL) INTO vIsFirst  
		FROM `order` 
		WHERE id = NEW.orderFk;

	IF vIsFirst THEN
		UPDATE `order` SET first_row_stamp = NOW() 
			WHERE id = NEW.orderFk;
	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 `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 */ ;

--
-- Table structure for table `orderRowComponent`
--

DROP TABLE IF EXISTS `orderRowComponent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orderRowComponent` (
  `rowFk` int(10) unsigned NOT NULL,
  `componentFk` int(11) NOT NULL,
  `price` decimal(12,4) NOT NULL,
  PRIMARY KEY (`rowFk`,`componentFk`),
  KEY `component_id` (`componentFk`),
  CONSTRAINT `orderRowComponent_ibfk_1` FOREIGN KEY (`rowFk`) REFERENCES `orderRow` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `orderTicket`
--

DROP TABLE IF EXISTS `orderTicket`;
/*!50001 DROP VIEW IF EXISTS `orderTicket`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `orderTicket` (
  `orderFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `order_component`
--

DROP TABLE IF EXISTS `order_component`;
/*!50001 DROP VIEW IF EXISTS `order_component`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `order_component` (
  `order_row_id` tinyint NOT NULL,
  `component_id` tinyint NOT NULL,
  `price` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `order_row`
--

DROP TABLE IF EXISTS `order_row`;
/*!50001 DROP VIEW IF EXISTS `order_row`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `order_row` (
  `id` tinyint NOT NULL,
  `order_id` tinyint NOT NULL,
  `item_id` tinyint NOT NULL,
  `warehouse_id` tinyint NOT NULL,
  `shipment` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `rate` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `Id_Movimiento` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `restPriv`
--

DROP TABLE IF EXISTS `restPriv`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `restPriv` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `methodPath` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `role` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `role` (`role`),
  CONSTRAINT `restPriv_ibfk_1` FOREIGN KEY (`role`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `shelf`
--

DROP TABLE IF EXISTS `shelf`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shelf` (
  `id` int(10) unsigned NOT NULL,
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `nTrays` tinyint(3) unsigned NOT NULL,
  `trayheight` mediumint(8) unsigned NOT NULL,
  `topTrayHeight` mediumint(8) unsigned NOT NULL,
  `width` mediumint(8) unsigned NOT NULL,
  `depth` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Dimensiones de las estanterias';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `shelfConfig`
--

DROP TABLE IF EXISTS `shelfConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shelfConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `namePrefix` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `warehouse` smallint(5) unsigned NOT NULL,
  `family` smallint(5) unsigned NOT NULL,
  `shelf` int(10) unsigned NOT NULL,
  `maxAmount` smallint(5) unsigned DEFAULT NULL,
  `showPacking` tinyint(4) NOT NULL,
  `stack` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `shelf_id` (`shelf`),
  KEY `family_id` (`family`),
  KEY `warehouse_id` (`warehouse`),
  CONSTRAINT `shelfConfig_ibfk_1` FOREIGN KEY (`family`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `shelfConfig_ibfk_2` FOREIGN KEY (`shelf`) REFERENCES `shelf` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `shelfConfig_ibfk_3` FOREIGN KEY (`warehouse`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `social`
--

DROP TABLE IF EXISTS `social`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `social` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `link` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `icon` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `priority` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `priority` (`priority`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `survey`
--

DROP TABLE IF EXISTS `survey`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `survey` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `question` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `surveyAnswer`
--

DROP TABLE IF EXISTS `surveyAnswer`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `surveyAnswer` (
  `id` int(10) unsigned NOT NULL,
  `surveyFk` int(10) unsigned NOT NULL,
  `answer` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `votes` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `survey` (`surveyFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `surveyVote`
--

DROP TABLE IF EXISTS `surveyVote`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `surveyVote` (
  `surveyFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`surveyFk`,`userFk`),
  KEY `surveyVote_ibfk_2` (`userFk`),
  CONSTRAINT `surveyVote_ibfk_1` FOREIGN KEY (`surveyFk`) REFERENCES `survey` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `surveyVote_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvConfig`
--

DROP TABLE IF EXISTS `tpvConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `currency` smallint(5) unsigned NOT NULL,
  `terminal` tinyint(3) unsigned NOT NULL,
  `transactionType` tinyint(3) unsigned NOT NULL,
  `maxAmount` int(10) unsigned DEFAULT NULL,
  `employeeFk` int(10) unsigned NOT NULL,
  `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'The bank web service URL for production environment',
  `testMode` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'Whether test mode is enabled',
  `testUrl` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT 'The bank web service URL for test environment',
  `testKey` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT 'The bank secret key for test environment',
  `merchantUrl` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `employee_id` (`employeeFk`),
  CONSTRAINT `employee_id` FOREIGN KEY (`employeeFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Virtual TPV parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvError`
--

DROP TABLE IF EXISTS `tpvError`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvError` (
  `code` char(7) COLLATE utf8_unicode_ci NOT NULL,
  `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT=' List of possible TPV errors';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvImapConfig`
--

DROP TABLE IF EXISTS `tpvImapConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvImapConfig` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `host` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `user` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `pass` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `cleanPeriod` varchar(15) CHARACTER SET utf8 NOT NULL,
  `successFolder` varchar(150) CHARACTER SET utf8 DEFAULT NULL,
  `errorFolder` varchar(150) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='IMAP configuration parameters for virtual TPV';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvMerchant`
--

DROP TABLE IF EXISTS `tpvMerchant`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvMerchant` (
  `id` int(10) unsigned NOT NULL COMMENT 'Merchant identifier',
  `description` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Small description',
  `companyFk` smallint(6) unsigned DEFAULT NULL COMMENT 'Company associated with the merchant',
  `bankFk` int(10) NOT NULL COMMENT 'The bank where merchant receipts are created',
  `secretKey` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The merchant secret key to sign transactions',
  PRIMARY KEY (`id`),
  KEY `bank_id` (`bankFk`),
  KEY `company_id` (`companyFk`),
  KEY `id` (`id`,`companyFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Virtual TPV providers';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvMerchantEnable`
--

DROP TABLE IF EXISTS `tpvMerchantEnable`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvMerchantEnable` (
  `merchantFk` int(10) unsigned NOT NULL DEFAULT '0',
  `companyFk` smallint(6) unsigned NOT NULL,
  PRIMARY KEY (`merchantFk`,`companyFk`),
  UNIQUE KEY `company_id` (`companyFk`),
  CONSTRAINT `tpvMerchantEnable_ibfk_1` FOREIGN KEY (`merchantFk`, `companyFk`) REFERENCES `tpvMerchant` (`id`, `companyFk`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Virtual TPV enabled providers';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvResponse`
--

DROP TABLE IF EXISTS `tpvResponse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvResponse` (
  `id` smallint(5) unsigned NOT NULL,
  `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='List of possible TPV reponses';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tpvTransaction`
--

DROP TABLE IF EXISTS `tpvTransaction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tpvTransaction` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `merchantFk` int(10) unsigned NOT NULL,
  `clientFk` int(11) NOT NULL,
  `receiptFk` int(11) DEFAULT NULL,
  `amount` int(10) unsigned NOT NULL,
  `response` smallint(5) unsigned DEFAULT NULL COMMENT 'Status notified by bank: NULL if no notification, 0 if success, error otherwise',
  `errorCode` char(7) COLLATE utf8_unicode_ci DEFAULT NULL,
  `status` enum('started','ok','ko') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'started',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `merchant_id` (`merchantFk`),
  KEY `receipt_id` (`receiptFk`),
  KEY `user_id` (`clientFk`),
  KEY `response` (`response`),
  KEY `error_code` (`errorCode`),
  CONSTRAINT `receipt_id` FOREIGN KEY (`receiptFk`) REFERENCES `vn`.`receipt` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `tpvTransaction_ibfk_1` FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `tpvTransaction_ibfk_2` FOREIGN KEY (`merchantFk`) REFERENCES `tpvMerchant` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Transactions realized through the virtual TPV';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userSession`
--

DROP TABLE IF EXISTS `userSession`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userSession` (
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastUpdate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ssid` char(64) COLLATE utf8_unicode_ci NOT NULL,
  `data` text COLLATE utf8_unicode_ci,
  `userVisitFk` int(10) unsigned DEFAULT NULL,
  UNIQUE KEY `ssid` (`ssid`),
  KEY `userVisit` (`userVisitFk`),
  KEY `lastUpdate` (`lastUpdate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `visit`
--

DROP TABLE IF EXISTS `visit`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visit` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `firstAgentFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `firstAgent` (`firstAgentFk`),
  CONSTRAINT `visit_ibfk_1` FOREIGN KEY (`firstAgentFk`) REFERENCES `visitAgent` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `visitAccess`
--

DROP TABLE IF EXISTS `visitAccess`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visitAccess` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `agentFk` int(10) unsigned NOT NULL,
  `stamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `ip` int(10) unsigned DEFAULT NULL,
  `referer` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `visit_access_idx_agent` (`agentFk`),
  KEY `stamp` (`stamp`),
  CONSTRAINT `visitAccess_ibfk_1` FOREIGN KEY (`agentFk`) REFERENCES `visitAgent` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `visitAgent`
--

DROP TABLE IF EXISTS `visitAgent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visitAgent` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `visitFk` int(10) unsigned NOT NULL,
  `firstAccessFk` int(10) unsigned DEFAULT NULL,
  `platform` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `browser` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `version` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `javascript` tinyint(3) unsigned DEFAULT NULL,
  `cookies` tinyint(3) unsigned DEFAULT NULL,
  `agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `visit_id` (`visitFk`),
  KEY `firstAccess` (`firstAccessFk`),
  CONSTRAINT `visitAgent_ibfk_1` FOREIGN KEY (`visitFk`) REFERENCES `visit` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `visitAgent_ibfk_2` FOREIGN KEY (`firstAccessFk`) REFERENCES `visitAccess` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `visitUser`
--

DROP TABLE IF EXISTS `visitUser`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visitUser` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `accessFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `access_id` (`accessFk`),
  KEY `date_time` (`stamp`),
  KEY `user_id` (`userFk`),
  CONSTRAINT `visitUser_ibfk_1` FOREIGN KEY (`accessFk`) REFERENCES `visitAccess` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- 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 ENABLE 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'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `myBasket_getId` */;
/*!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 `MYBASKET_GETID`() RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vOrder INT;
    
    SELECT orderFk INTO vOrder FROM basketOrder
		WHERE clientFk = account.myUser_getId();

	RETURN vOrder;
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 `myClient_getDebt` */;
/*!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 `myClient_getDebt`(vDate DATE) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
/**
 * Calcula el saldo del cliente actual.
 *
 * @return Saldo del cliente
 */
	RETURN vn.clientGetDebt(account.myUser_getId(), vDate);
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 `myUser_checkRestPriv` */;
/*!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 `myUser_checkRestPriv`(vMethodPath VARCHAR(255)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Checks if the current user has permission to run a REST service.
 *
 * @param vMethodPath Route of the REST service
 * @return %TRUE if it has permissions, otherwise %FALSE
 */
	DECLARE vCount INT;
	DECLARE vHasRole INT DEFAULT NULL;

	SELECT COUNT(*) INTO vCount FROM restPriv
		WHERE methodPath = vMethodPath;

	IF vCount = 0 THEN
		RETURN FALSE;
	END IF; 

	SELECT COUNT(*) > 0
		INTO vHasRole
		FROM restPriv
		WHERE methodPath = vMethodPath
			AND (`role` IS NULL OR account.myUser_hasRoleId(`role`))
		LIMIT 1;

	RETURN vHasRole;
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 `order_getTotal` */;
/*!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 `order_getTotal`(vSelf INT) RETURNS decimal(10,2)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
* Obtiene el total de un pedido con el IVA y el recargo de
* equivalencia incluidos.
*
* @param vSelf El identificador del pedido
* @return El total del pedido
*/
	DECLARE vTotal DECIMAL(10,2);

	DROP TEMPORARY TABLE IF EXISTS tmp.`order`;
	CREATE TEMPORARY TABLE tmp.`order`
		ENGINE = MEMORY
		SELECT vSelf orderFk;

	CALL order_getTotal;

	SELECT total INTO vTotal FROM tmp.orderTotal;

	DROP TEMPORARY TABLE
		tmp.`order`,
		tmp.orderTotal;

	RETURN vTotal;
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 `catalog_calcFromMyAddress` */;
/*!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 `catalog_calcFromMyAddress`(vDelivery DATE, vAddress INT)
BEGIN
/**
 * Gets the available items list.
 *
 * @param vDelivery Delivery date
 * @param vAddress Address id
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */  
    DECLARE vAgencyMode INT;
    
	SELECT a.agencyModeFk
			INTO vAgencyMode
		FROM myClient c
			JOIN vn.address a ON a.clientFk = c.id
		WHERE a.id = vAddress;      

	CALL vn.available_calc(vDelivery, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		(INDEX (itemFk))
        ENGINE = MEMORY
		SELECT c.item_id itemFk
			FROM `cache`.available c
				JOIN tmp.availableCalc a ON a.calcFk = c.calc_id
			WHERE c.available > 0
			GROUP BY c.item_id;
 
	CALL vn.catalog_calculate(vDelivery, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE tmp.item;
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 `catalog_calcFromMyAddress_beta` */;
/*!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 `catalog_calcFromMyAddress_beta`(vDelivery DATE, vAddress INT)
BEGIN
/**
 * Gets the available items list.
 *
 * @param vDelivery Delivery date
 * @param vAddress Address id
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	DECLARE vAgencyMode INT;

	SELECT a.agencyModeFk
			INTO vAgencyMode
		FROM myClient c
			JOIN vn.address a ON a.clientFk = c.id
		WHERE a.id = vAddress;

	CALL vn.available_calc(vDelivery, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		(INDEX (itemFk))
		ENGINE = MEMORY
		SELECT c.item_id itemFk
			FROM `cache`.available c
				JOIN tmp.availableCalc a ON a.calcFk = c.calc_id
			WHERE c.available > 0
			GROUP BY c.item_id;
 
	CALL vn.catalog_calculate_beta(vDelivery, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE tmp.item;
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 `image_ref` */;
/*!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 `image_ref`(
    vCollection VARCHAR(255),
	vName VARCHAR(255)
)
proc: BEGIN
/**
 * Increases the reference count of an image.
 *
 * @param vCollection The collection name
 * @param vName The image name
 */
	IF vName IS NULL THEN
		LEAVE proc;
	END IF;

	INSERT INTO `image`
		SET `collectionFk` = vCollection,
			`name` = vName,
			`updated` = UNIX_TIMESTAMP(),
			`nRefs` = 1
		ON DUPLICATE KEY UPDATE
			`nRefs` = nRefs + 1;
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 `image_unref` */;
/*!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 `image_unref`(
    vCollection VARCHAR(255),
	vName VARCHAR(255)
)
BEGIN
/**
 * Decreases the reference count of an image.
 *
 * @param vCollection The collection name
 * @param vName The image name
 */
	UPDATE image SET nRefs = GREATEST(CAST(nRefs AS SIGNED) - 1, 0)
		WHERE `name` = vName
			AND collectionFk = vCollection;
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 `item_calcCatalog` */;
/*!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 `item_calcCatalog`(
	vSelf INT,
	vLanded DATE,
    vAddressFk INT,
    vAgencyModeFk INT)
BEGIN
/**
 * Calculates available and price for a single item.
 *
 * @param vItemFk The item id
 * @return List of available lots
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		ENGINE = MEMORY 
		SELECT vSelf itemFk;

	CALL vn.catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);

	SELECT l.warehouseFk, w.name warehouse,
			p.`grouping`, p.price, p.rate, l.available
		FROM tmp.ticketLot l
			JOIN tmp.ticketComponentPrice p ON p.warehouseFk = l.warehouseFk
			JOIN vn.warehouse w ON w.id = p.warehouseFk
		ORDER BY warehouseFk, `grouping`;

	DROP TEMPORARY TABLE
		tmp.ticketCalculateItem,
		tmp.ticketComponentPrice,
		tmp.ticketComponent,
		tmp.ticketLot,
		tmp.zoneGetShipped;
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 `item_getList` */;
/*!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 `item_getList`(IN `vWarehouse` SMALLINT, IN `vShipping` DATE, IN `vCategory` INT, IN `vRate` TINYINT)
BEGIN
	DECLARE vCalc INT;

	CALL cache.available_refresh(vCalc, FALSE, vWarehouse, vShipping);
	CALL vn.buyUltimate(vWarehouse, vShipping);

	SELECT a.id, a.`name`, a.category, a.size, a.stems, a.inkFk, a.typeFk, a.image,
			c.available, o.`name` origin, t.`name` `type`,
			CASE b.groupingMode
				WHEN 0 THEN 1
				WHEN 2 THEN b.packing
				ELSE b.`grouping`
			END AS `grouping`,
			CASE vRate
				WHEN 1 THEN b.price1
				WHEN 2 THEN b.price2
				WHEN 3 THEN b.price3
				ELSE NULL
			END AS price
		FROM cache.available c
			JOIN vn.item a ON a.id = c.item_id
			JOIN vn.itemType t ON t.id = a.typeFk
			JOIN vn.itemCategory r ON r.id = t.categoryFk
			LEFT JOIN vn.origin o ON o.id = a.originFk
			JOIN tmp.buyUltimate bu ON bu.itemFk = a.id
			JOIN vn.buy b ON b.id = bu.buyFk
		WHERE c.calc_id = vCalc
			AND c.available > 0
			AND a.id != 90
			AND r.display
			AND (vCategory IS NULL OR vCategory = r.id)
		ORDER BY a.typeFk, a.`name`, a.size;
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 `item_getVisible` */;
/*!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 `item_getVisible`(
	vWarehouse TINYINT,
    vDate DATE,
    vType INT,
    vPrefix VARCHAR(255))
BEGIN
	
/**
 * Gets visible items of the specified type at specified date.
 *
 * @param vWarehouse The warehouse id
 * @param vDate The visible date
 * @param vType The type id
 * @param vPrefix The article prefix to filter or %NULL for all
 * @return tmp.itemVisible Visible items
 */ 
	DECLARE vPrefixLen SMALLINT;
	DECLARE vFilter VARCHAR(255) DEFAULT NULL;
	DECLARE vDateInv DATE DEFAULT vn2008.date_inv();
	DECLARE EXIT HANDLER FOR 1114
		BEGIN
			GET DIAGNOSTICS CONDITION 1
        		@message = MESSAGE_TEXT;
			CALL vn.mail_insert(
				'cau@verdnatura.es', 
				NULL, 
			    CONCAT('hedera.item_getVisible error: ', @message),
			    CONCAT(
			    	'warehouse: ', IFNULL(vWarehouse, ''), 
			    	', Fecha:', IFNULL(vDate, ''), 
			    	', tipo: ', IFNULL(vType,''), 
			    	', prefijo: ', IFNULL(vPrefix,'')));
			RESIGNAL;
		END;
	SET vPrefixLen = IFNULL(LENGTH(vPrefix), 0) + 1;

	IF vPrefixLen > 1 THEN
		SET vFilter = CONCAT(vPrefix, '%');
	END IF;

	DROP TEMPORARY TABLE IF EXISTS `filter`;
	CREATE TEMPORARY TABLE `filter`
		(INDEX (itemFk))
		ENGINE = MEMORY
		SELECT id itemFk FROM vn.item
			WHERE typeFk = vType
				AND (vFilter IS NULL OR `name` LIKE vFilter);

	DROP TEMPORARY TABLE IF EXISTS currentStock;
	CREATE TEMPORARY TABLE currentStock
		(INDEX (itemFk))
		ENGINE = MEMORY
		SELECT itemFk, SUM(quantity) quantity
			FROM (
				SELECT b.itemFk, b.quantity
					FROM vn.buy b
						JOIN vn.entry e ON e.id = b.entryFk
						JOIN vn.travel t ON t.id = e.travelFk
					WHERE t.landed BETWEEN vDateInv AND vDate
						AND t.warehouseInFk = vWarehouse
						AND NOT e.isRaid
				UNION ALL
				SELECT b.itemFk, -b.quantity
					FROM vn.buy b
						JOIN vn.entry e ON e.id = b.entryFk
						JOIN vn.travel t ON t.id = e.travelFk
					WHERE t.shipped BETWEEN vDateInv AND CURDATE()
						AND t.warehouseOutFk = vWarehouse
						AND NOT e.isRaid
						AND t.isDelivered
				UNION ALL
				SELECT m.itemFk, -m.quantity
					FROM vn.sale m
						JOIN vn.ticket t ON t.id = m.ticketFk
						JOIN vn.ticketState s ON s.ticket = t.id
					WHERE t.shipped BETWEEN vDateInv AND CURDATE()
						AND t.warehouseFk = vWarehouse
						AND s.alertLevel = 3
			) t
			GROUP BY itemFk
				HAVING quantity > 0;

	DROP TEMPORARY TABLE IF EXISTS tmp;
	CREATE TEMPORARY TABLE tmp
		(INDEX (itemFk))
		ENGINE = MEMORY
		SELECT *
			FROM (
				SELECT b.itemFk, b.packageFk, b.packing
					FROM vn.buy b
						JOIN vn.entry e ON e.id = b.entryFk
						JOIN vn.travel t ON t.id = e.travelFk
					WHERE t.landed BETWEEN vDateInv AND vDate
						AND NOT b.isIgnored
						AND b.price2 >= 0
						AND b.packageFk IS NOT NULL
					ORDER BY t.warehouseInFk = vWarehouse DESC, t.landed DESC
					LIMIT 10000000000000000000
			) t GROUP BY itemFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.itemVisible;
	CREATE TEMPORARY TABLE tmp.itemVisible
		ENGINE = MEMORY
		SELECT i.id Id_Article,
				SUBSTRING(i.`name`, vPrefixLen) Article,
				t.packing, p.id Id_Cubo,
				IF(p.depth > 0, p.depth, 0) depth, p.width, p.height,
				CEIL(s.quantity / t.packing) etiquetas
			FROM vn.item i
				JOIN `filter` f ON f.itemFk = i.id 
				JOIN currentStock s ON s.itemFk = i.id
				LEFT JOIN tmp t ON t.itemFk = i.id
				LEFT JOIN vn.packaging p ON p.id = t.packageFk
			WHERE CEIL(s.quantity / t.packing) > 0
				-- FIXME: Column Cubos.box not included in view vn.packaging
				/* AND p.box */;

	DROP TEMPORARY TABLE
		`filter`,
		currentStock,
		tmp;
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 `item_listAllocation` */;
/*!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 `item_listAllocation`(IN `vWh` TINYINT, IN `vDate` DATE, IN `vType` INT, IN `vPrefix` VARCHAR(255), IN `vUseIds` BOOLEAN)
BEGIN
/**
 * Lists visible items and it's box sizes of the specified
 * type at specified date.
 *
 * @param vWh The warehouse id
 * @param vDate The visible date
 * @param vType The type id
 * @param vPrefix The article prefix to filter or %NULL for all
 * @param vUseIds Whether to order the result by item id
 * @select List of visible items with it's box sizes
 */
	CALL item_getVisible(vWh, vDate, vType, vPrefix);

	IF vUseIds
	THEN
		SELECT * FROM tmp.itemVisible
			ORDER BY Id_Article;
	ELSE
		SELECT * FROM tmp.itemVisible
			ORDER BY Article, packing;
	END IF;

	DROP TEMPORARY TABLE tmp.itemVisible;
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 `myBasket_addItem` */;
/*!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 `myBasket_addItem`(
	vWarehouse INT,
    vItem INT,
    vAmount INT)
BEGIN
	CALL order_addItem(myBasket_getId(), vWarehouse, vItem, vAmount);
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 `myBasket_calcCatalogFromItem` */;
/*!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 `myBasket_calcCatalogFromItem`(vItem INT)
BEGIN
/**
 * Gets the availability and prices for the given item
 * using current user basket parameters.
 *
 * @table tmp.item(itemFk)
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	CALL order_calcCatalogFromItem(myBasket_getId(), vItem);
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 `myBasket_calcCatalogFull` */;
/*!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 `myBasket_calcCatalogFull`()
BEGIN
/**
 * Gets the availability and prices for the given items
 * using current user basket parameters.
 *
 * @table tmp.item(itemFk)
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	CALL order_calcCatalogFull(myBasket_getId());
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 `myBasket_check` */;
/*!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 `myBasket_check`()
BEGIN
/**
 * Comprueba que la cesta esta creada y que su configuración es
 * correcta. Si la configuración es correcta pero lleva mucho
 * tiempo creada actualiza los precios y cantidades de los artículos.
 *
 * @select El id del pedido y el estado de la cesta
 */
	DECLARE vSelf INT;
	DECLARE vCreated DATETIME;
	DECLARE vStatus VARCHAR(15) DEFAULT 'OK';

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vStatus = 'NOT_EXISTS';
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET vStatus = 'BAD_CONFIG';

	SELECT id, made
		INTO vSelf, vCreated
		FROM myBasket;

	IF vStatus = 'OK'
	THEN
		CALL order_checkConfig(vSelf);
		
		IF vStatus = 'OK' AND vCreated < TIMESTAMPADD(DAY, -1, NOW())
		THEN
			CALL order_update(vSelf);
			SET vStatus = 'UPDATED';
		END IF;
	END IF;

	SELECT vStatus stat;
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 `myBasket_configure` */;
/*!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 `myBasket_configure`(
	vDelivery DATE,
    vDeliveryMethod VARCHAR(45),
    vAgency INT,
    vAddress INT)
BEGIN
/**
 * Configura la cesta de la compra utilizando los parámetros 
 * pasados. Si los parámetros no son válidos devuelve un error.
 *
 * @param vDelivery Fecha de recogida
 * @param vAgency Id de la agencia
 * @param vAddress Id de dirección de envío, @NULL si es recogida
 */
	DECLARE vSelf INT;
    DECLARE vCompany INT;
	DECLARE vDeliveryMethodId INT;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vSelf = NULL;
	DECLARE EXIT HANDLER FOR SQLSTATE '45000'
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	START TRANSACTION;

	SELECT id INTO vDeliveryMethodId
		FROM vn.deliveryMethod
			WHERE code = vDeliveryMethod;

	IF vDeliveryMethod = 'PICKUP' AND vAddress IS NULL
	THEN
		SELECT defaultAddressFk INTO vAddress
			FROM myClient;
	END IF;
        
	SET vSelf = myBasket_getId();

	IF vSelf IS NULL
	THEN
	
		SELECT defaultCompanyFk INTO vCompany
			FROM orderConfig;

		INSERT INTO `order`
			SET
				customer_id = account.myUser_getId(),
				date_send = vDelivery,
				delivery_method_id = vDeliveryMethodId,
				agency_id = vAgency,
				address_id = vAddress,
                source_app = 'WEB',
                company_id = vCompany;

		SET vSelf = LAST_INSERT_ID();
        
        INSERT INTO basketOrder SET
			clientFk = account.myUser_getId(),
            orderFk = vSelf;
	ELSE
		UPDATE `order`
			SET
				date_send = vDelivery,
				delivery_method_id = vDeliveryMethodId,
				agency_id = vAgency,
				address_id = vAddress
			WHERE
				id = vSelf;
                
		CALL order_update(vSelf);
	END IF;

	CALL order_checkConfig(vSelf);

	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 `myBasket_configureForGuest` */;
/*!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 `myBasket_configureForGuest`()
BEGIN
    DECLARE vMethod VARCHAR(255);
    DECLARE vAgency INT;
    DECLARE vAddress INT;
    DECLARE vDate DATE;
    
    SELECT guestMethod, guestAgencyFk, guestAddressFk
		INTO vMethod, vAgency, vAddress
        FROM orderConfig
        LIMIT 1;
        
	SET vDate = TIMESTAMPADD(DAY, 1, CURDATE());
    
    IF WEEKDAY(vDate) BETWEEN 5 AND 6 THEN
		SET vDate = TIMESTAMPADD(DAY, 7 - WEEKDAY(vDate), vDate);
	END IF;
    
    CALL myBasket_configure(vDate, vMethod, vAgency, vAddress);
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 `myBasket_confirm` */;
/*!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 `myBasket_confirm`()
BEGIN
	DECLARE vSelf INT DEFAULT myBasket_getId();

	IF vSelf IS NOT NULL THEN
		CALL order_confirm(vSelf);
		
		DELETE FROM basketOrder
			WHERE orderFk = vSelf;
	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 `myBasket_getAvailable` */;
/*!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 `myBasket_getAvailable`()
BEGIN
/**
 * Gets the available items list.
 *
 * @table tmp.itemAvailable
 */
	CALL order_getAvailable(myBasket_getId());
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 `myBasket_getTax` */;
/*!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 `myBasket_getTax`()
    READS SQL DATA
BEGIN
/**
 * Returns the taxes for the current client basket.
 *
 * @treturn tmp.orderTax
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.`order`;
	CREATE TEMPORARY TABLE tmp.`order`
		ENGINE = MEMORY
		SELECT myBasket_getId() orderFk;
        
	CALL order_getTax();
    
    DROP TEMPORARY TABLE IF EXISTS tmp.`order`;
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 `myOrder_addItem` */;
/*!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 `myOrder_addItem`(
	vSelf INT,
    vWarehouse INT,
    vItem INT,
    vAmount INT)
BEGIN
	DECLARE vIsMine BOOL;

	SELECT COUNT(*) INTO vIsMine
		FROM myOrder
		WHERE id = vSelf;
		
	IF vIsMine THEN
		CALL order_addItem(vSelf, vWarehouse, vItem, vAmount);
	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 `myOrder_confirm` */;
/*!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 `myOrder_confirm`(vSelf INT)
BEGIN
	DECLARE vIsMine BOOL;
    
    SELECT COUNT(*) INTO vIsMine 
		FROM myOrder
        WHERE id = vSelf;
        
	IF vIsMine THEN
		CALL order_confirm(vSelf);
	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 `myOrder_getAvailable` */;
/*!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 `myOrder_getAvailable`(vSelf INT)
BEGIN
/**
 * Gets the available items list.
 *
 * @param vSelf The order id
 * @table tmp.itemAvailable
 */
	DECLARE isMine BOOL;

	SELECT COUNT(*) INTO isMine
		FROM myOrder
		WHERE id = vSelf;
		
	IF isMine THEN
		CALL order_getAvailable(vSelf);
	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 `myOrder_newWithAddress` */;
/*!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 `myOrder_newWithAddress`(
	OUT vSelf INT,
    vLandingDate DATE,
    vAddressFk INT)
BEGIN
/**
 * Crea una nueva orden para el usuario actual especificando
 * una fecha de entrega.
 *
 * @param vSelf Id de la nueva orden
 * @param vLandingDate Fecha de entrega
 */
	DECLARE vCompany INT;
	DECLARE vDeliveryMethodId INT;
	DECLARE vAgencyMode INT;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vSelf = NULL;
	DECLARE EXIT HANDLER FOR SQLSTATE '45000'
	BEGIN
		ROLLBACK;
		SET vSelf = NULL;
		RESIGNAL;
	END;

	START TRANSACTION;

	SELECT a.agencyModeFk, a.id 
			INTO vAgencyMode, vAddressFk
		FROM vn.address a 
		WHERE a.id = vAddressFk;
				
	SELECT deliveryMethodFk INTO vDeliveryMethodId
		FROM vn.agencyMode am
		WHERE am.id = vAgencyMode;
		
	IF vCompany IS NULL
	THEN
		SELECT defaultCompanyFk INTO vCompany
			FROM orderConfig;
	END IF;

	INSERT INTO `order`
		SET
			customer_id = account.myUser_getId(),
			date_send = vLandingDate,
			delivery_method_id = vDeliveryMethodId,
			agency_id = vAgencyMode,
			address_id = vAddressFk,
			source_app = 'WEB',
			company_id = vCompany;

	SET vSelf = LAST_INSERT_ID();
	 
	CALL order_checkConfig(vSelf);

	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 `myOrder_newWithDate` */;
/*!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 `myOrder_newWithDate`(
	OUT vSelf INT,
    vLandingDate DATE)
BEGIN
/**
 * Crea una nueva orden para el usuario actual especificando
 * una fecha de entrega.
 *
 * @param vSelf Id de la nueva orden
 * @param vLandingDate Fecha de entrega
 */
	DECLARE vCompany INT;
	DECLARE vDeliveryMethodId INT;
	DECLARE vAgencyMode INT;
	DECLARE vAddress INT;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vSelf = NULL;
	DECLARE EXIT HANDLER FOR SQLSTATE '45000'
	BEGIN
		ROLLBACK;
		SET vSelf = NULL;
		RESIGNAL;
	END;

	START TRANSACTION;

	SELECT a.agencyModeFk, a.id 
			INTO vAgencyMode, vAddress
		FROM myClient c
			JOIN vn.address a ON a.id = c.defaultAddressFk;
				
	SELECT deliveryMethodFk INTO vDeliveryMethodId
		FROM vn.agencyMode am
		WHERE am.id = vAgencyMode;
		
	IF vCompany IS NULL
	THEN
		SELECT defaultCompanyFk INTO vCompany
			FROM orderConfig;
	END IF;

	INSERT INTO `order`
		SET
			customer_id = account.myUser_getId(),
			date_send = vLandingDate,
			delivery_method_id = vDeliveryMethodId,
			agency_id = vAgencyMode,
			address_id = vAddress,
			source_app = 'WEB',
			company_id = vCompany;

	SET vSelf = LAST_INSERT_ID();
	 
	CALL order_checkConfig(vSelf);

	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 `myTicket_get` */;
/*!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 `myTicket_get`(vSelf INT)
BEGIN
/**
 * Returns a current user ticket header.
 *
 * @param vSelf The ticket identifier
 */
	DECLARE vTaxBase DECIMAL(10,2);
	DECLARE vTax DECIMAL(10,2);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		ENGINE = MEMORY
		SELECT id ticketFk FROM myTicket
			WHERE id = vSelf;

	CALL vn.ticket_getTax(NULL);

	SELECT IFNULL(SUM(taxableBase), 0.0), IFNULL(SUM(tax), 0.0)
		INTO vTaxBase, vTax
		FROM tmp.ticketAmount;

	SELECT t.id, t.landed, t.shipped, t.refFk, t.nickname,
			ag.description agency, m.code method,
			a.street, a.postalCode, a.city, p.name province,
			vTaxBase taxBase, vTaxBase + vTax AS total
		FROM tmp.ticket v
			JOIN vn.ticket t ON t.id = v.ticketFk
			JOIN vn.address a ON a.id = t.addressFk
			JOIN vn.agencyMode ag ON ag.id = t.agencyModeFk
			LEFT JOIN vn.deliveryMethod m ON m.id = ag.deliveryMethodFk
			LEFT JOIN vn.province p ON p.id = a.provinceFk
		WHERE t.id = vSelf;

	DROP TEMPORARY TABLE
		tmp.ticket,
		tmp.ticketTax,
		tmp.ticketAmount;
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 `myTicket_getPackages` */;
/*!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 `myTicket_getPackages`(vSelf INT)
BEGIN
/**
 * Returns a current user ticket packages.
 *
 * @param vSelf The ticket identifier
 * @select The ticket packages
 */
	SELECT i.image, im.updated, i.id, i.name, tp.quantity
		FROM myTicket t
			JOIN vn.ticketPackaging tp ON tp.ticketFk = t.id
			JOIN vn.packaging p ON p.id = tp.packagingFk
			JOIN vn.item i ON i.id = p.itemFk
			LEFT JOIN image im
				ON im.collectionFk = 'catalog'
				AND im.name = i.image
		WHERE t.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 `myTicket_getRows` */;
/*!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 `myTicket_getRows`(vSelf INT)
BEGIN
	SELECT r.itemFk, r.quantity, r.concept, r.price, r.discount,
			i.category, i.size, i.stems, i.inkFk,
			i.tag5, i.value5, i.tag6, i.value6, i.tag7, i.value7,
            i.image, im.updated
		FROM myTicketRow r
			JOIN vn.item i ON i.id = r.itemFk
			LEFT JOIN image im
				ON im.collectionFk = 'catalog'
				AND im.name = i.image
		WHERE r.ticketFk = vSelf
		ORDER BY r.concept;
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 `myTicket_getServices` */;
/*!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 `myTicket_getServices`(vSelf INT)
BEGIN
/**
 * Returns a current user ticket services.
 *
 * @param vSelf The ticket identifier
 * @select The ticket services
 */
	SELECT id, description, quantity, price
		FROM myTicketService
		WHERE 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              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `myTicket_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 `myTicket_list`(vFrom DATE, vTo DATE)
BEGIN
/**
 * Returns the current user list of tickets between two dates reange.
 * Also returns the total price with tax of every ticket.
 *
 * @param vFrom From date, if %NULL current date minus 25 days
 * @param vTo To date, if %NULL current date
 * @select The tickets list
 */
	SET vFrom = IFNULL(vFrom, DATE_FORMAT(TIMESTAMPADD(MONTH, -3, CURDATE()), '%Y-%m-01'));
	SET vTo = IFNULL(vTo, TIMESTAMPADD(YEAR, 1, CURDATE()));

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		(KEY (ticketFk))
		ENGINE = MEMORY
		SELECT t.id ticketFk
			FROM myTicket t
			WHERE shipped BETWEEN TIMESTAMP(vFrom) AND TIMESTAMP(vTo, '23:59:59');
	
	CALL vn.ticketGetTotal;

	SELECT v.id, IFNULL(v.landed, v.shipped) landed,
			v.shipped, v.companyFk, v.nickname,
			a.city, ag.description agency, t.total
		FROM tmp.ticket i
			JOIN vn.ticket v ON v.id = i.ticketFk
			JOIN vn.address a ON a.id = v.addressFk
            JOIN vn.agencyMode ag ON ag.id = v.agencyModeFk
			JOIN tmp.ticketTotal t ON t.ticketFk = i.ticketFk
		ORDER BY IFNULL(v.landed, v.shipped) DESC, i.ticketFk DESC;

	DROP TEMPORARY TABLE
		tmp.ticket,
		tmp.ticketTotal;
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 `myTicket_logAccess` */;
/*!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 `myTicket_logAccess`(vSelf INT)
BEGIN
/**
 * Logs an access to a ticket.
 *
 * @param vSelf The ticket identifier
 */
	INSERT INTO vn.ticketLog
		(originFk, userFk, `action`, description)
		SELECT vSelf, account.myUser_getId(), 'select', 'Accede a ticket'
			FROM myTicket t
			WHERE t.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 `myTpvTransaction_end` */;
/*!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 `myTpvTransaction_end`(vSelf INT, vStatus VARCHAR(12))
BEGIN
/**
 * Finaliza una transaccción estableciendo su estado a 'ok' o
 * 'ko' en función de si esta se ha realizado correctamente.
 * Este procedimiento debe ser llamado directamente por el cliente
 * nada mas finalizar la transacción y solo tiene validez hasta que
 * llega la notificacion definitiva desde el banco.
 *
 * @param vSelf El identificador de la transacción
 * @param vStatus El estado, 'ok' o 'ko'
 */
	IF vStatus IN ('ok', 'ko')
	THEN
		UPDATE myTpvTransaction SET status = vStatus
			WHERE id = vSelf AND response IS NULL;
	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 `myTpvTransaction_start` */;
/*!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 `myTpvTransaction_start`(vAmount INT, vCompany INT)
BEGIN
/**
 * Inicia una nueva transacción con el TPV virtual, generando
 * un identificador de transacción y devolviendo con un SELECT
 * los parámetros que deben enviarse a la URL del servicio web
 * del banco.
 *
 * @param vAmount Cantidad a pagar en céntimos
 * @param vCompany El identificador de la empresa
 *
 * @select Los parámetros que deben pasarse al banco
 */
	DECLARE vSelf CHAR(12);
	DECLARE vMerchant INT;
	DECLARE vUrl VARCHAR(255);
	DECLARE vKey VARCHAR(50);
	DECLARE vEnvironment VARCHAR(255);

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	START TRANSACTION;

	IF vCompany IS NULL
	THEN
		SELECT companyFk INTO vCompany
			FROM tpvMerchantEnable LIMIT 1;
	END IF;

	SELECT merchantFk INTO vMerchant
		FROM tpvMerchantEnable WHERE companyFk = vCompany;

	SELECT environment INTO vEnvironment
		FROM util.config;

	IF vEnvironment = 'production'
	THEN
		SELECT c.url, m.secretKey INTO vUrl, vKey
			FROM tpvMerchant m
			JOIN tpvConfig c
				WHERE m.id = vMerchant;
	ELSE
		SELECT testUrl, testKey INTO vUrl, vKey
			FROM tpvConfig;
	END IF;

	INSERT INTO myTpvTransaction
	SET
		merchantFk = vMerchant
		,clientFk = account.myUser_getId()
		,amount = vAmount;

	SET vSelf = LAST_INSERT_ID();

	SELECT
		 vAmount amount
		,vSelf transactionId
		,vMerchant merchant
		,currency
		,transactionType
		,terminal
		,merchantUrl
		,vUrl url
		,vKey secretKey
		FROM tpvConfig;

	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 `order_addItem` */;
/*!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_addItem`(
	vSelf INT,
    vWarehouse INT,
    vItem INT,
	vAmount INT)
BEGIN
/**
 * Adds an item to the order, checking availability and grouping.
 *
 * @param vSelf The order id
 * @param vWarehouse The warehouse id
 * @param vItem The item id
 * @param vAmount The amount to add
 */
	DECLARE vRow INT;
	DECLARE vAdd INT;
	DECLARE vAvailable INT;
	DECLARE vDone BOOL;
	DECLARE vGrouping INT;
	DECLARE vRate INT;
	DECLARE vShipment DATE;
	DECLARE vPrice DECIMAL(10,2);
	DECLARE cur CURSOR FOR
		SELECT `grouping`, price, rate
			FROM tmp.ticketComponentPrice
			WHERE warehouseFk = vWarehouse
				AND itemFk = vItem
			ORDER BY `grouping` DESC;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	CALL order_calcCatalogFromItem(vSelf, vItem);
	START TRANSACTION;

	SELECT shipped INTO vShipment
		FROM tmp.zoneGetShipped
		WHERE warehouseFk = vWarehouse;

	SELECT available INTO vAvailable
		FROM tmp.ticketLot
		WHERE warehouseFk = vWarehouse
			AND itemFk = vItem;

	IF vAmount > IFNULL(vAvailable, 0) THEN
		CALL util.throw ('ORDER_ROW_UNAVAILABLE');
	END IF;

	OPEN cur;

	l: LOOP
		SET vDone = FALSE;
		FETCH cur INTO vGrouping, vPrice, vRate;

		IF vDone THEN
			LEAVE l;
		END IF;
		
		SET vAdd = vAmount - MOD(vAmount, vGrouping);
		SET vAmount = vAmount - vAdd;

		IF vAdd = 0 THEN
			ITERATE l;
		END IF;

		INSERT INTO orderRow SET
			orderFk = vSelf,
			itemFk = vItem,
			warehouseFk = vWarehouse,
			shipment = vShipment,
			rate = vRate,
			amount = vAdd,
			price = vPrice;
			
		SET vRow = LAST_INSERT_ID();

		INSERT INTO orderRowComponent (rowFk, componentFk, price)
			SELECT vRow, c.componentFk, c.cost
				FROM tmp.ticketComponent c
					JOIN vn.component t
						ON t.id = c.componentFk
						AND (t.classRate IS NULL OR t.classRate = vRate)
				WHERE c.warehouseFk = vWarehouse
					AND c.itemFk = vItem;
	END LOOP;

	CLOSE cur;

	IF vAmount > 0 THEN
		CALL util.throw ('AMOUNT_NOT_MATCH_GROUPING');
	END IF;
				
	COMMIT;
    CALL vn.ticketCalculatePurge;
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_calcCatalog` */;
/*!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_calcCatalog`(vSelf INT)
BEGIN
/**
 * Gets the availability and prices for order items.
 *
 * @param vSelf The order id
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 */
	DECLARE vDate DATE;
	DECLARE vAddress INT;
	DECLARE vAgencyMode INT;

	SELECT date_send, address_id, agency_id
		INTO vDate, vAddress, vAgencyMode
		FROM `order`
		WHERE id = vSelf;

	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		(PRIMARY KEY (itemFk))
		ENGINE = MEMORY
		SELECT itemFk FROM orderRow 
			WHERE orderFk = vSelf
			GROUP BY itemFk;
		
	CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE tmp.item;
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_calcCatalogFromItem` */;
/*!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_calcCatalogFromItem`(vSelf INT, vItem INT)
BEGIN
/**
 * Gets the availability and prices for the given item
 * using the order parameters.
 *
 * @param vSelf The order id
 * @table tmp.item(itemFk)
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	DECLARE vDate DATE;
	DECLARE vAddress INT;
	DECLARE vAgencyMode INT;

	SELECT date_send, address_id, agency_id
		INTO vDate, vAddress, vAgencyMode
		FROM `order`
		WHERE id = vSelf;

	CALL vn.catalog_calcFromItem(vDate, vAddress, vAgencyMode, vItem);
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_calcCatalogFull` */;
/*!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_calcCatalogFull`(vSelf INT)
BEGIN
/**
 * Gets the availability and prices for the given items
 * using the order parameters.
 *
 * @param vSelf The order id
 * @table tmp.item(itemFk)
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	DECLARE vDate DATE;
	DECLARE vAddress INT;
	DECLARE vAgencyMode INT;

	SELECT date_send, address_id, agency_id
		INTO vDate, vAddress, vAgencyMode
		FROM `order`
		WHERE id = vSelf;

	CALL vn.catalog_calculate(vDate, vAddress, vAgencyMode);

	IF account.myUser_getName() = 'visitor'
	THEN
		DROP TEMPORARY TABLE tmp.ticketComponent;
		UPDATE tmp.ticketCalculateItem SET price = NULL;
	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 `order_checkConfig` */;
/*!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_checkConfig`(vSelf INT)
BEGIN
/**
* Comprueba que la configuración del pedido es correcta.
*
* @param vSelf Identificador del pedido
*/
	DECLARE vDeliveryMethod VARCHAR(255);
	DECLARE vLanded DATE;
	DECLARE vAgencyMode INT;
	DECLARE vAddress INT;
	DECLARE vIsAvailable BOOL;
	DECLARE vIsActive BOOL;
	DECLARE vClientFk INT;

	-- Obtiene los datos del pedido

	SELECT d.code, o.date_send, o.agency_id, o.address_id
		INTO vDeliveryMethod, vLanded, vAgencyMode, vAddress
		FROM `order` o
			JOIN vn.deliveryMethod d ON d.id = o.delivery_method_id
		WHERE o.id = vSelf;

	-- Comprueba que se ha seleccionado una dirección

	IF vDeliveryMethod IN ('AGENCY', 'DELIVERY')
	AND vAddress IS NULL
	THEN
		CALL util.throw ('ORDER_EMPTY_ADDRESS');
	END IF;

	-- Comprueba que el cliente esté activo

	SELECT customer_id INTO vClientFk
		FROM hedera.`order`
		WHERE id = vSelf;

	SELECT isActive INTO vIsActive
		FROM vn.client
		WHERE id = vClientFk;

	IF NOT vIsActive THEN
		CALL util.throw ('CLIENT_NOT_ACTIVE');
	END IF;

	-- Comprueba que la agencia es correcta

	CALL vn.zone_getAgency(vAddress, vLanded);

	SELECT COUNT(*) > 0 INTO vIsAvailable
		FROM tmp.zoneGetAgency
		WHERE agencyModeFk = vAgencyMode;

	IF NOT vIsAvailable THEN
		CALL util.throw ('ORDER_INVALID_AGENCY');
	END IF;

	DROP TEMPORARY TABLE tmp.zoneGetAgency;
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_confirm` */;
/*!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_confirm`(vSelf INT)
BEGIN
/**
 * Confirms an order, creating each of its tickets on
 * the corresponding date and store.
 *
 * @param vSelf The order identifier
 */
	DECLARE vUser INT DEFAULT account.myUser_getId();
	CALL order_confirmWithUser(vSelf, vUser);
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_confirmWithUser` */;
/*!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_confirmWithUser`(IN `vOrder` INT, IN `vUserId` INT)
BEGIN
/**
 * Confirms an order, creating each of its tickets on the corresponding
 * date, store and user.
 *
 * @param vOrder The order identifier
 * @param vUser The user identifier
 */
	DECLARE vOk BOOL;
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vWarehouse INT;
	DECLARE vShipment DATE;
	DECLARE vTicket INT;
	DECLARE vNotes VARCHAR(255);
	DECLARE vItem INT;
	DECLARE vConcept VARCHAR(30);
	DECLARE vAmount INT;
	DECLARE vPrice DECIMAL(10,2);
	DECLARE vSale INT;
	DECLARE vRate INT;
	DECLARE vRowId INT;
	DECLARE vDelivery DATE;
	DECLARE vAddress INT;
	DECLARE vIsConfirmed BOOL;
	DECLARE vClientId INT;
	DECLARE vCompanyId INT;
	DECLARE vAgencyModeId INT;
	DECLARE TICKET_FREE INT DEFAULT 2;
	DECLARE vCalc INT;
	DECLARE vIsLogifloraItem BOOL;

	DECLARE cDates CURSOR FOR
		SELECT zgs.shipped, r.warehouse_id
			FROM `order` o
				JOIN order_row r ON r.order_id = o.id
				LEFT JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = r.warehouse_id
			WHERE o.id = vOrder AND r.amount != 0
			GROUP BY r.warehouse_id;

	DECLARE cRows CURSOR FOR
		SELECT r.id, r.item_id, i.name, r.amount, r.price, r.rate, i.isFloramondo
			FROM order_row r
				JOIN vn.item i ON i.id = r.item_id
			WHERE r.amount != 0
				AND r.warehouse_id = vWarehouse
				AND r.order_id = vOrder
			ORDER BY r.rate DESC;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	-- Carga los datos del pedido
	SELECT o.date_send, o.address_id, o.note,
			a.clientFk, o.company_id, o.agency_id
		INTO vDelivery, vAddress, vNotes,
			vClientId, vCompanyId, vAgencyModeId
		FROM hedera.`order` o
			JOIN vn.address a ON a.id = o.address_id
		WHERE o.id = vOrder;

	-- Carga las fechas de salida de cada almac?n
	CALL vn.zone_getShipped (vDelivery, vAddress, vAgencyModeId, FALSE);

	-- Trabajador que realiza la accion
	IF vUserId IS NULL THEN
		SELECT employeeFk INTO vUserId FROM orderConfig;
	END IF;

	START TRANSACTION;
	-- Comprueba que el pedido no esta confirmado
	SELECT o.confirmed INTO vIsConfirmed
		FROM hedera.`order` o
		WHERE o.id = vOrder
		FOR UPDATE;

	IF vIsConfirmed THEN
		CALL util.throw ('ORDER_ALREADY_CONFIRMED');
	END IF;

	-- Comprueba que el pedido no esta vacio
	SELECT COUNT(*) > 0 INTO vOk
		FROM order_row WHERE order_id = vOrder AND amount > 0;

	IF NOT vOk THEN
		CALL util.throw ('ORDER_EMPTY');
	END IF;

	-- Crea los tickets del pedido
	OPEN cDates;

	lDates:
	LOOP
		SET vTicket = NULL;
		SET vDone = FALSE;
		FETCH cDates INTO vShipment, vWarehouse;

		IF vDone THEN
			LEAVE lDates;
		END IF;

		-- Busca un ticket existente que coincida con los parametros

		SELECT t.id INTO vTicket
			FROM vn.ticket t
				LEFT JOIN vn.ticketState tls on tls.ticket = t.id
				JOIN `order` o
					ON o.address_id = t.addressFk
						AND vWarehouse = t.warehouseFk
						-- AND o.agency_id = t.agencyModeFk
						AND o.date_send = t.landed
						AND vShipment = DATE(t.shipped)
			WHERE o.id = vOrder
				AND t.refFk IS NULL
				AND IFNULL(tls.alertLevel,0) = 0
			LIMIT 1;

		-- Crea el ticket en el caso de no existir uno adecuado

		IF vTicket IS NULL
		THEN

			SET vShipment = IFNULL(vShipment, CURDATE());

			CALL vn.ticket_add(
				vClientId,
				vShipment,
				vWarehouse,
				vCompanyId,
				vAddress,
				vAgencyModeId,
				NULL,
				vDelivery,
				vUserId,
				TRUE,
				vTicket
			);
		ELSE
			INSERT INTO vncontrol.inter
				SET Id_Ticket = vTicket,
					Id_Trabajador = vUserId,
					state_id = TICKET_FREE;
		END IF;

		INSERT IGNORE INTO vn.orderTicket
			SET orderFk = vOrder,
				ticketFk = vTicket;

		-- Añade las notas

		IF vNotes IS NOT NULL AND vNotes != ''
		THEN
			INSERT INTO vn.ticketObservation SET
					ticketFk = vTicket,
					observationTypeFk = 4 /* salesperson */,
					`description` = vNotes
				ON DUPLICATE KEY UPDATE
					`description` = CONCAT(VALUES(`description`),'. ', `description`);
		END IF;

		-- Añade los movimientos y sus componentes

		OPEN cRows;

		lRows:
		LOOP

			SET vDone = FALSE;

			FETCH cRows INTO vRowId, vItem, vConcept, vAmount, vPrice, vRate, vIsLogifloraItem;

			IF vDone THEN
				LEAVE lRows;
			END IF;

			SET vSale = NULL;

			SELECT s.id INTO vSale
				FROM vn.sale s
				WHERE ticketFk = vTicket
					AND price = vPrice
					AND itemFk = vItem
					AND discount = 0
				LIMIT 1;

			IF vSale THEN
				UPDATE vn.sale
					SET quantity = quantity + vAmount
					WHERE id = vSale;
			ELSE
				INSERT INTO vn.sale
				SET
					itemFk = vItem,
					ticketFk = vTicket,
					concept = vConcept,
					quantity = vAmount,
					price = vPrice,
					priceFixed = FALSE,
					isPriceFixed = TRUE;

				SET vSale = LAST_INSERT_ID();

				INSERT INTO vn.saleComponent
					(saleFk, componentFk, `value`)
					SELECT vSale, cm.component_id, cm.price
						FROM order_component cm
							JOIN vn.component c ON c.id = cm.component_id
						WHERE cm.order_row_id = vRowId
						GROUP BY vSale, cm.component_id;
			END IF;
			UPDATE order_row SET Id_Movimiento = vSale
				WHERE id = vRowId;

			-- Inserta en putOrder si la compra es de Floramondo
			IF vIsLogifloraItem THEN

				CALL cache.availableNoRaids_refresh(vCalc,FALSE,vWarehouse,vShipment);

				SET @available := 0;

				SELECT GREATEST(0,available) INTO @available
					FROM cache.availableNoRaids
					WHERE calc_id = vCalc
						AND item_id = vItem;

				UPDATE cache.availableNoRaids
					SET available = GREATEST(0,available - vAmount)
					WHERE item_id = vItem
						AND calc_id = vCalc;

				INSERT INTO edi.putOrder (deliveryInformationID,
						supplyResponseId,
						quantity ,
						EndUserPartyId,
						EndUserPartyGLN,
						FHAdminNumber,
						saleFk)
					SELECT di.ID,
							i.supplyResponseFk,
							CEIL((vAmount - @available)/ sr.NumberOfItemsPerCask),
							o.address_id ,
							vClientId,
							IFNULL(ca.fhAdminNumber, fhc.defaultAdminNumber),
							vSale
						FROM edi.deliveryInformation di
							JOIN vn.item i ON i.supplyResponseFk = di.supplyResponseID
							JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
							LEFT JOIN edi.clientFHAdminNumber ca ON ca.clientFk = vClientId
							JOIN edi.floraHollandConfig fhc
							JOIN hedera.`order` o ON o.id = vOrder
						WHERE i.id = vItem
							AND di.LatestOrderDateTime > NOW()
							AND vAmount > @available
						LIMIT 1;

			END IF;

		END LOOP;

		CLOSE cRows;

		-- Fija el coste
		DROP TEMPORARY TABLE IF EXISTS tComponents;
		CREATE TEMPORARY TABLE tComponents
			(INDEX (saleFk))
			ENGINE = MEMORY
			SELECT SUM(sc.`value`) valueSum, sc.saleFk
				FROM vn.saleComponent sc
					JOIN vn.component c ON c.id = sc.componentFk
					JOIN vn.componentType ct ON ct.id = c.typeFk AND ct.isBase
					JOIN vn.sale s ON s.id = sc.saleFk
				WHERE s.ticketFk = vTicket
				GROUP BY sc.saleFk;

		UPDATE vn.sale s
			JOIN tComponents mc ON mc.saleFk = s.id
			SET s.priceFixed = valueSum;

		DROP TEMPORARY TABLE tComponents;
	END LOOP;

	CLOSE cDates;

	DELETE FROM basketOrder WHERE orderFk = vOrder;

	UPDATE `order` SET confirmed = TRUE, confirm_date = NOW()
		WHERE id = vOrder;

	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 `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 */ ;
/*!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_getAvailable`(vSelf INT)
BEGIN
/**
 * Gets the available items list.
 *
 * @param vSelf The order id
 * @table tmp.itemAvailable
 */
	DECLARE vDelivery DATE;
	DECLARE vAddress INT;
	DECLARE vAgencyMode INT;

	SELECT date_send, address_id, agency_id
		INTO vDelivery, vAddress, vAgencyMode
		FROM `order`
		WHERE id = vSelf;
		
	CALL vn.available_calc(vDelivery, vAddress, vAgencyMode);

	DROP TEMPORARY TABLE IF EXISTS tmp.itemAvailable;
	CREATE TEMPORARY TABLE tmp.itemAvailable
		(INDEX (id))
		ENGINE = MEMORY
		SELECT DISTINCT a.item_id id
			FROM `cache`.available a
				JOIN tmp.availableCalc c ON c.calcFk = a.calc_id
			WHERE a.available > 0;

	DROP TEMPORARY TABLE tmp.availableCalc;
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_getTax` */;
/*!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_getTax`()
    READS SQL DATA
BEGIN
/**
 * Calcula el IVA, y el recargo de equivalencia de un pedido
 * desglosados por tipos.
 *
 * @param vOrder El identificador del pedido
 * @return tmp.orderTax Bases imponibles, IVA y recargo de equivalencia
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
	CREATE TEMPORARY TABLE tmp.addressCompany
		(INDEX (addressFk, companyFk))
		ENGINE = MEMORY 
		SELECT DISTINCT o.address_id addressFk, o.company_id companyFk
			FROM tmp.`order` tmpOrder
				JOIN hedera.`order` o ON o.id = tmpOrder.orderFk;

	CALL vn.addressTaxArea;

	-- Calcula el IVA y el recargo desglosado.

	DROP TEMPORARY TABLE IF EXISTS tmp.orderTax;
	CREATE TEMPORARY TABLE tmp.orderTax
		(INDEX (orderFk))
		ENGINE = MEMORY
		SELECT o.id orderFk,
				tc.code,
				SUM(m.amount * m.price) taxableBase,
				pgc.rate
			FROM tmp.`order` tmpOrder
				JOIN `order` o ON o.id = tmpOrder.orderFk
				JOIN orderRow m ON m.orderFk = o.id
				JOIN vn.item i ON i.id = m.itemFk
				JOIN vn.`client` c ON c.id = o.customer_id
				JOIN vn.supplier s ON s.id = o.company_id
				JOIN tmp.addressTaxArea ata
					ON ata.addressFk = o.address_id AND ata.companyFk = o.company_id
				JOIN vn.itemTaxCountry itc
					ON itc.itemFk = i.id AND itc.countryFk = s.countryFk
				JOIN vn.bookingPlanner bp
					ON bp.countryFk = s.countryFk
						AND bp.taxAreaFk = ata.areaFk
						AND bp.taxClassFk = itc.taxClassFk
				JOIN vn.pgc ON pgc.`code` = bp.pgcFk
				JOIN vn.taxClass tc ON tc.id = bp.taxClassFk
			GROUP BY tmpOrder.orderFk, pgc.`code`, pgc.rate
			HAVING taxableBase != 0;
					
	DROP TEMPORARY TABLE IF EXISTS tmp.orderAmount;
	CREATE TEMPORARY TABLE tmp.orderAmount
		(INDEX (orderFk))
		ENGINE = MEMORY
		SELECT orderFk, taxableBase, `code`,
				SUM(CAST(taxableBase * rate / 100 AS DECIMAL(10, 2))) tax
			FROM tmp.orderTax
			GROUP BY orderFk, `code`;
		
	DROP TEMPORARY TABLE tmp.addressTaxArea;
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_getTotal` */;
/*!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_getTotal`()
BEGIN
/**
 * Calcula el total con IVA para un conjunto de orders.
 *
 * @table tmp.order(orderFk) Identificadores de las ordenes a calcular
 * @return tmp.orderTotal Total para cada orden
 */
	CALL order_getTax;

	DROP TEMPORARY TABLE IF EXISTS tmp.orderTotal;
	CREATE TEMPORARY TABLE tmp.orderTotal
		(INDEX (orderFk))
		ENGINE = MEMORY
		SELECT o.orderFk, IFNULL(SUM(ot.taxableBase + ot.tax), 0.0) AS total
			FROM tmp.`order` o
				LEFT JOIN tmp.orderAmount ot ON o.orderFk = ot.orderFk
			GROUP BY orderFk;

	DROP TEMPORARY TABLE
		tmp.orderTax,
        tmp.orderAmount;
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_recalc` */;
/*!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_recalc`(vSelf INT)
BEGIN
/**
 * Recalculates the order total.
 *
 * @param vSelf The order id
 */
	DECLARE vTaxableBase DECIMAL(10,2);
	DECLARE vTax DECIMAL(10,2);

	DROP TEMPORARY TABLE IF EXISTS tmp.`order`;
	CREATE TEMPORARY TABLE tmp.`order`
		ENGINE = MEMORY
		SELECT vSelf orderFk;
		
	CALL order_getTax;

	SELECT IFNULL(SUM(taxableBase), 0.0), IFNULL(SUM(tax), 0.0)
		INTO vTaxableBase, vTax
		FROM tmp.orderAmount;

	UPDATE `order`
		SET taxableBase = vTaxableBase,
			tax = vTax,
			total = vTaxableBase + vTax
		WHERE id = vSelf;

	DROP TEMPORARY TABLE
		tmp.`order`,
		tmp.orderTax;
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_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;

	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 */ ;
/*!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_update`(vSelf INT)
proc: BEGIN
/**
 * Actualiza las líneas de un pedido.
 *
 * @param vSelf Id del pedido
 */
	DECLARE vDate DATE;
	DECLARE vAddress INT;
	DECLARE vAgencyMode INT;
	DECLARE vNRows INT;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	START TRANSACTION;

	SELECT COUNT(*) INTO vNRows
		FROM orderRow WHERE orderFk = vSelf;

	IF vNRows > 0
	THEN
        CALL order_calcCatalog(vSelf);

		DELETE c
			FROM orderRow r
				JOIN orderRowComponent c ON c.rowFk = r.id
				WHERE r.orderFk = vSelf;
				
		UPDATE orderRow r
			LEFT JOIN tmp.ticketComponentPrice p
				ON p.warehouseFk = r.warehouseFk
					AND p.itemFk = r.itemFk
					AND p.rate = r.rate
			LEFT JOIN tmp.zoneGetShipped t
				ON t.warehouseFk = r.warehouseFk
			SET
				r.price = p.price,
				r.amount = IF(p.itemFk IS NOT NULL,
					r.amount + IF(@m := MOD(r.amount, p.`grouping`), p.`grouping` - @m, 0), 0),
				r.shipment = t.shipped
			WHERE r.orderFk = vSelf;

		INSERT INTO orderRowComponent(rowFk, componentFk, price)
			SELECT r.id, c.componentFk, c.cost
				FROM orderRow r
					JOIN tmp.ticketComponent c
						ON c.warehouseFk = r.warehouseFk
							AND c.itemFk = r.itemFk
					JOIN vn.component t
						ON t.id = c.componentFk
							AND (t.classRate IS NULL OR t.classRate = r.rate)
				WHERE r.orderFk = vSelf;
        
		CALL vn.ticketCalculatePurge;
	END IF;

	UPDATE `order` SET date_make = NOW()
		WHERE id = vSelf;

	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 `survey_vote` */;
/*!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 `survey_vote`(vAnswer INT)
BEGIN
	DECLARE vSurvey INT;
	DECLARE vCount TINYINT;
	DECLARE EXIT HANDLER FOR 1062
		CALL util.throw('You cannot vote twice to the same survey');

	SELECT durveyFk INTO vSurvey
		FROM surveyAnswer WHERE id = vAnswer;

	INSERT INTO surveyVote SET
		surveyFk = vSurvey,
        userFk = account.myUser_getId();

	UPDATE surveyAnswer SET votes = votes + 1
		WHERE id = vAnswer;
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 `tpvTransaction_confirm` */;
/*!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 `tpvTransaction_confirm`(
	 vAmount INT
	,vOrder INT
	,vMerchant INT
	,vCurrency INT
	,vResponse INT
    ,vErrorCode VARCHAR(10)
)
BEGIN
/**
 * Confirma una transacción previamente iniciada, reescribiendo
 * sus datos por los confirmados por el banco (solo si estos difieren).
 * Genera el recibo y su correspondiente entrada en caja.
 *
 * @param vAmount Cantidad confirmada
 * @param vOrder Identificador de transacción
 * @param vMerchant Identificador de comercio
 * @param vCurrency Identificador de moneda
 * @param vResponse Identificador de respuesta del banco
 * @param vErrorCode Código de error del banco, si lo hubiera
 */
	DECLARE vReceipt INT;
	DECLARE vStatus VARCHAR(10);
	DECLARE vCustomer INT;
	DECLARE vBank INT;
	DECLARE vCompany INT;
	DECLARE vEmployee INT;
	DECLARE vIsDuplicated BOOLEAN;
	DECLARE vDate DATE;
	DECLARE vConcept VARCHAR(25) DEFAULT 'Cobro Web';

    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
		ROLLBACK;
        RESIGNAL;
	END;

	START TRANSACTION;

	SELECT COUNT(*) > 0 INTO vIsDuplicated
		FROM tpvTransaction
		WHERE id = vOrder AND response IS NOT NULL
		FOR UPDATE;

	IF vIsDuplicated THEN
		CALL util.throw('Transaction already confirmed');
	END IF;

	IF vResponse BETWEEN 0 AND 99 THEN
		SELECT
			 t.clientFk
			,m.bankFk
			,m.companyFk
			,c.employeeFk
			,DATE(t.created)
		INTO
			 vCustomer
			,vBank
			,vCompany
			,vEmployee
			,vDate
			FROM tpvMerchant m
				JOIN tpvConfig c
				LEFT JOIN tpvTransaction t ON t.id = vOrder
			WHERE m.id = vMerchant;

		INSERT INTO vn.receipt
		SET
			 amountPaid = vAmount / 100
			,payed = vDate
			,workerFk = vEmployee
			,bankFk = vBank
			,clientFk = vCustomer
			,companyFk = vCompany
			,invoiceFk = vConcept
            ,isConciliate = TRUE;

		SET vReceipt = LAST_INSERT_ID();
		SET vStatus = 'ok';

		-- Código redundante

		DO vn.till_new(
			 vCustomer
			,vBank
			,vAmount / 100
			,vConcept
			,vDate
			,'A'
			,TRUE
			,vCustomer
			,vCompany
			,vEmployee
		);
	ELSE
		SET vReceipt = NULL;
		SET vStatus = 'ko';
	END IF;

	UPDATE tpvTransaction
		SET merchantFk = vMerchant
			,receiptFk = vReceipt
			,amount = vAmount
			,response = vResponse
	        ,errorCode = vErrorCode
			,status = vStatus
		WHERE id = vOrder;

	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 `tpvTransaction_confirmAll` */;
/*!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 `tpvTransaction_confirmAll`(vDate DATE)
BEGIN
/**
 * Confirma todas las transacciones confirmadas por el cliente pero no
 * por el banco para una fecha dada.
 *
 * @param vDate Fecha deseada
 */
	DECLARE vOrder INT;
	DECLARE vDone BOOLEAN DEFAULT FALSE;
	DECLARE vDateIni DATETIME DEFAULT TIMESTAMP(vDate, '00:00:00');
	DECLARE vDateEnd DATETIME DEFAULT TIMESTAMP(vDate, '23:59:59');

	DECLARE cTransactions CURSOR FOR
	SELECT id
		FROM tpvTransaction
			WHERE created BETWEEN vDateIni AND vDateEnd
			AND status = 'ok'
			AND response IS NULL;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	OPEN cTransactions;

	l: LOOP
		FETCH cTransactions INTO vOrder;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL tpvTransaction_confirmById (vOrder);
	END LOOP l;

	CLOSE cTransactions;
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 `tpvTransaction_confirmById` */;
/*!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 `tpvTransaction_confirmById`(vOrder INT)
BEGIN
/**
 * Confirma manualmente una transacción espedificando su identificador.
 *
 * @param vOrder Identificador de la transacción
 */
	DECLARE vAmount INT;
	DECLARE vMerchant INT;
	DECLARE vCurrency INT;

	SELECT amount, merchantFk, currency
		INTO vAmount, vMerchant, vCurrency
			FROM tpvTransaction t
			JOIN tpvMerchant m ON m.id = t.merchantFk
			JOIN tpvConfig c
				WHERE t.id = vOrder;

	CALL tpvTransaction_confirm(
		 vAmount
		,vOrder
		,vMerchant
		,vCurrency
		,0
		,NULL
	);
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 `tpvTransaction_undo` */;
/*!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 `tpvTransaction_undo`(vSelf INT)
p: BEGIN
	DECLARE vCustomer INT;
	DECLARE vAmount DOUBLE;
	DECLARE vReceipt INT;
	DECLARE vDate DATE;
	DECLARE vBank INT;
	DECLARE vAccount VARCHAR(12);
	DECLARE vSubaccount VARCHAR(12);

    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
		ROLLBACK;
        RESIGNAL;
	END;

	START TRANSACTION;

	SELECT
		 t.clientFk
		,t.amount / 100
		,t.receiptFk
		,DATE(t.created)
		,m.bankFk
	INTO
		 vCustomer
		,vAmount
		,vReceipt
		,vDate
		,vBank
		FROM tpvTransaction t
        JOIN tpvMerchant m ON m.id = t.merchantFk
		JOIN tpvConfig c
			WHERE t.id = vSelf
		FOR UPDATE;

	-- Elimina el recibo

	DELETE FROM vn.receipt
		WHERE id = vReceipt LIMIT 1;

	-- Elimina la entrada de cajas

	DELETE FROM vn.till
		WHERE bankFk = vBank
		AND DATE(dated) = vDate
		AND `in` = vAmount
			LIMIT 1;

	-- Elimina los asientos contables

	SELECT accountingAccount INTO vSubaccount
		 FROM vn.`client` WHERE id = vCustomer;

	SELECT account INTO vAccount
		FROM vn.bank WHERE id = vBank;

	DELETE FROM vn.XDiario
		WHERE SUBCTA = vSubaccount
		AND CONTRA = vAccount
		AND DATE(FECHA) = vDate
		AND EUROHABER = vAmount
			LIMIT 1;

	DELETE FROM vn.XDiario
		WHERE CONTRA = vSubaccount
		AND SUBCTA = vAccount
		AND DATE(FECHA) = vDate
		AND EURODEBE = vAmount
			LIMIT 1;
		
	-- Actualiza la transaccion

	UPDATE tpvTransaction
		SET response = NULL, status = 'started'
			WHERE id = vSelf;
	
	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 `visitUser_new` */;
/*!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 `visitUser_new`(
	 vAccess INT
	,vSsid VARCHAR(64)
)
BEGIN
	DECLARE vUserVisit INT;

	INSERT INTO visitUser SET
		accessFk = vAccess,
		userFk = account.myUser_getId();

	SET vUserVisit = LAST_INSERT_ID();

	UPDATE userSession SET userVisitFk = vUserVisit
		WHERE ssid = vSsid;
		
	DELETE FROM userSession
		WHERE lastUpdate < TIMESTAMPADD(HOUR, -1, NOW());
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 `visit_listByBrowser` */;
/*!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 `visit_listByBrowser`(vFrom DATE, vTo DATE)
BEGIN
/**
 * Lists visits grouped by browser.
 *
 * @param vFrom The from date
 * @param vTo The to date
 * @select The list of visits
 */
	SELECT browser,
			MIN(CAST(version AS DECIMAL(4, 1))) minVersion,
			MAX(CAST(version AS DECIMAL(4, 1))) maxVersion,
			MAX(c.stamp) lastVisit,
			COUNT(DISTINCT c.id) visits,
			SUM(a.firstAccessFk = c.id AND v.firstAgentFk = a.id) newVisits
		FROM visitUser e
			JOIN visitAccess c ON c.id = e.accessFk
			JOIN visitAgent a ON a.id = c.agentFk
			JOIN visit v ON v.id = a.visitFk
		WHERE c.stamp BETWEEN TIMESTAMP(vFrom,'00:00:00') AND TIMESTAMP(vTo,'23:59:59')
		GROUP BY browser ORDER BY visits DESC;
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 `visit_register` */;
/*!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 `visit_register`(
	 vVisit INT
	,vPlatform VARCHAR(30)
	,vBrowser VARCHAR(30)
	,vVersion VARCHAR(15)
	,vJavascript TINYINT
	,vCookies TINYINT
	,vAgent VARCHAR(255)
	,vIp INT
	,vReferer VARCHAR(255)
)
BEGIN
	DECLARE vFirstVisit TINYINT DEFAULT FALSE;
	DECLARE vFirstAgent TINYINT DEFAULT FALSE;
	DECLARE vAgentId INT DEFAULT NULL;
	DECLARE vAccessId INT DEFAULT NULL;

	-- Registers the visit

	IF vVisit IS NULL || (SELECT COUNT(*) FROM visit WHERE id = vVisit) = 0
	THEN
		INSERT INTO visit SET id = DEFAULT;
        SET vVisit = LAST_INSERT_ID();
		SET vFirstVisit = TRUE;
	END IF;

	SELECT id INTO vAgentId FROM visitAgent
		WHERE visitFk = vVisit
			AND (agent = vAgent OR (vAgent IS NULL AND agent IS NULL))
		LIMIT 1;

	-- Registers the user agent

	IF vAgentId IS NULL
	THEN
		INSERT INTO visitAgent SET
			 visitFk = vVisit
            ,platform = vPlatform
            ,browser = vBrowser
            ,version = vVersion
            ,javascript = vJavascript
            ,cookies = vCookies
            ,agent = vAgent;

        SET vAgentId = LAST_INSERT_ID();
		SET vFirstAgent = TRUE;
	END IF;

	IF vFirstVisit
    THEN
		UPDATE visit SET firstAgentFk = vAgentId
			WHERE id = vVisit;
	END IF;

	-- Registers the user access

	INSERT INTO visitAccess SET
		 agentFk = vAgentId
		,ip = vIp
        ,referer = vReferer;

	SET vAccessId = LAST_INSERT_ID();

	IF vFirstAgent
    THEN
		UPDATE visitAgent SET firstAccessFk = vAccessId
			WHERE id = vAgentId;
	END IF;
    
    -- Returns the visit info

	SELECT vVisit visit, vAccessId access;
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: `nst`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `nst` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `nst`;

--
-- Table structure for table `balance`
--

DROP TABLE IF EXISTS `balance`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `balance` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lft` int(11) NOT NULL,
  `rgt` int(11) NOT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `lft_UNIQUE` (`lft`),
  UNIQUE KEY `rgt_UNIQUE` (`rgt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `geo`
--

DROP TABLE IF EXISTS `geo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `geo` (
  `id` int(11) NOT NULL,
  `lft` int(11) DEFAULT NULL,
  `rgt` int(11) DEFAULT NULL,
  `depth` int(11) DEFAULT NULL,
  `sons` int(11) DEFAULT NULL,
  `item` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `lft_UNIQUE` (`lft`),
  UNIQUE KEY `rgt_UNIQUE` (`rgt`),
  CONSTRAINT `nst_geo_id` FOREIGN KEY (`id`) REFERENCES `nst` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `labourTree`
--

DROP TABLE IF EXISTS `labourTree`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `labourTree` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lft` int(11) NOT NULL,
  `rgt` int(11) NOT NULL,
  `depth` int(11) NOT NULL DEFAULT '0',
  `sons` int(11) NOT NULL DEFAULT '0',
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `nst`
--

DROP TABLE IF EXISTS `nst`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nst` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lft` int(11) NOT NULL,
  `rgt` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `lft_UNIQUE` (`lft`),
  UNIQUE KEY `rgt_UNIQUE` (`rgt`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'nst'
--

--
-- Dumping routines for database 'nst'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `nodeAdd` */;
/*!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 `nodeAdd`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45), IN `vParentFk` INT, IN `vChild` VARCHAR(100))
BEGIN
	DECLARE vSql TEXT;
	DECLARE vTableClone VARCHAR(45);

	SET vTableClone = CONCAT(vTable, 'Clone');
   
	CALL util.exec(CONCAT('DROP TEMPORARY TABLE IF EXISTS tmp.', vTableClone));
	CALL util.exec(CONCAT(
		'CREATE TEMPORARY TABLE tmp.', vTableClone,
		'	ENGINE = MEMORY',
		'	SELECT * FROM ', vScheme, '.', vTable
  	));
    
    CALL util.exec(CONCAT(
		'SELECT COUNT(c.id) INTO @childs',
		'	FROM ', vScheme, '.', vTable, ' p',
		'		LEFT JOIN tmp.', vTableClone, ' c ON c.depth = p.depth + 1',
		'			AND c.lft BETWEEN p.lft AND p.rgt AND c.id != ', vParentFk,
		'	WHERE p.id = ', vParentFk
  	));
    
    IF @childs = 0 THEN
		CALL util.exec(CONCAT(
			'SELECT lft, depth INTO @vLeft, @vDepth',
			'	FROM ', vScheme, '.', vTable, 
            '   WHERE id = ', vParentFk
		));
    ELSE      
        CALL util.exec(CONCAT(
			'SELECT c.rgt, p.depth INTO @vLeft, @vDepth',
			'	FROM ', vScheme, '.', vTable, ' p',
			'		JOIN tmp.', vTableClone, ' c ON c.depth = p.depth + 1'
            '       	AND c.lft BETWEEN p.lft AND p.rgt',
			'	WHERE p.id = ', vParentFk,
			'	ORDER BY c.lft',
			'	DESC LIMIT 1'
		));
    END IF;
    
    CALL util.exec(CONCAT(
		'UPDATE ', vScheme, '.', vTable, ' SET rgt = rgt + 2',
		'	WHERE rgt > @vLeft',
        '   ORDER BY rgt DESC'
	));
    CALL util.exec(CONCAT(
		'UPDATE ', vScheme, '.', vTable, ' SET lft = lft + 2',
		'	WHERE lft > @vLeft',
        '   ORDER BY lft DESC'
	));
    
    SET vChild = REPLACE(vChild, "'", "\\'");
    
    CALL util.exec(CONCAT(
		'INSERT INTO ', vScheme, '.', vTable, ' (name, lft, rgt, depth)',
		'	VALUES ("', vChild, '", @vLeft + 1, @vLeft + 2, @vDepth + 1)'
	));
  
   CALL util.exec(CONCAT('DROP TEMPORARY TABLE tmp.', vTableClone));
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 `nodeDelete` */;
/*!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 `nodeDelete`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45), IN `vNodeId` INT)
BEGIN
	DECLARE vMyRight INT;
	DECLARE vMyLeft INT;
	DECLARE vMyWidth INT;

     	CALL util.exec(CONCAT(
			'SELECT t.rgt, t.lft,  t.rgt - t.lft + 1',
			'		INTO @vMyRight, @vMyLeft, @vMyWidth',
			'	FROM ', vScheme, '.', vTable, ' t',
			'	WHERE t.id = ', vNodeId
		));

		CALL util.exec(CONCAT(
			'DELETE FROM ', vScheme, '.', vTable, 
			'	WHERE lft BETWEEN @vMyLeft AND @vMyRight'
		));

		CALL util.exec(CONCAT(
			'UPDATE ', vScheme, '.', vTable, ' SET rgt = rgt - @vMyWidth'
			'	WHERE rgt > @vMyRight ORDER BY rgt'
		));

		CALL util.exec(CONCAT(
			'UPDATE ', vScheme, '.', vTable, ' SET lft = lft - @vMyWidth'
			'	WHERE lft > @vMyRight ORDER BY lft'
		));
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 `nodeMove` */;
/*!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 `nodeMove`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45), IN `vNodeId` INT, IN `vFatherId` INT)
BEGIN
	-- Averiguamos el ancho de la rama 
	CALL util.exec (sql_printf (
		'SELECT t.rgt - t.lft +1 INTO @vMyWidth FROM %t.%t t WHERE t.id = %v'
        ,vScheme
        ,vTable
		,vNodeId
	));

	-- Averiguamos la posicion del nuevo padre

	CALL util.exec (sql_printf (
		'SELECT  t.rgt,  t.lft INTO @vFatherRight , @vFatherLeft FROM %t.%t t WHERE t.id = %v'
        ,vScheme
		,vTable
		,vFatherId
	));

	-- 1º Incrementamos los valores de todos los nodos a la derecha del punto de inserción (vFatherRight) , para hacer sitio

	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET rgt = rgt + @vMyWidth WHERE rgt >= @vFatherRight ORDER BY rgt DESC'
        ,vScheme
		,vTable
	));  

	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET lft = lft + @vMyWidth WHERE lft >= @vFatherRight ORDER BY lft DESC'
		,vScheme
		,vTable
	));  

	-- Es preciso recalcular los valores del nodo en el caso de que estuviera a la derecha del nuevo padre

	CALL util.exec (sql_printf (
		'SELECT  t.rgt, t.lft, @vFatherRight - t.lft INTO @vMyRight, @vMyLeft, @vGap FROM %t.%t t WHERE t.id = %v'
		,vScheme
		,vTable
		,vNodeId
	));
	-- 2º Incrementamos el valor de todos los nodos a trasladar hasta alcanzar su nueva posicion

	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET lft = lft + @vGap WHERE lft BETWEEN @vMyLeft AND @vMyRight ORDER BY lft DESC'
		,vScheme
		,vTable
	));       
	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET rgt = rgt + @vGap WHERE rgt BETWEEN @vMyLeft AND @vMyRight ORDER BY rgt DESC'
		,vScheme
		,vTable
	));

	-- 3º Restaremos a todos los nodos resultantes, a la derecha de la posicion arrancada el ancho de la rama escindida

	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET lft = lft - @vMyWidth WHERE lft > @vMyLeft ORDER BY lft'
		,vScheme
		,vTable
	));
	CALL util.exec (sql_printf (
		'UPDATE %t.%t SET rgt = rgt - @vMyWidth WHERE rgt > @vMyRight ORDER BY rgt'
		,vScheme
		,vTable
	));

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 `nodeRecalc` */;
/*!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 `nodeRecalc`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45))
BEGIN
	CALL util.exec(CONCAT (
		'UPDATE ', vScheme, '.', vTable, ' d',
		'	JOIN (SELECT',
		'			node.id,',
		'			COUNT(parent.id) - 1 as depth,',
		'			cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons',
		'		FROM ',
		'			', vScheme, '.', vTable, ' AS node,',
		'			', vScheme, '.', vTable, ' AS parent',
		'		WHERE node.lft BETWEEN parent.lft AND parent.rgt',
		'		GROUP BY node.id',
		'		ORDER BY node.lft) n ON n.id = d.id ',
		'	SET d.`depth` = n.depth, d.sons = n.sons'
	));
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 `nodeTree` */;
/*!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 `nodeTree`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45), IN `vGap` INT, IN `vShouldShow` BOOLEAN)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.nest;
	CALL util.exec (sql_printf (
		'CREATE TEMPORARY TABLE tmp.nest
			SELECT node.id
					,CONCAT( REPEAT(REPEAT(" ",%v), 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 %t.%t AS node,
					%t.%t AS parent
				WHERE node.lft BETWEEN parent.lft AND parent.rgt
				GROUP BY node.id
				ORDER BY node.lft'
        ,vGap
        ,vScheme
		,vTable
        ,vScheme
		,vTable
	));

	IF vShouldShow THEN
		SELECT * FROM tmp.nest;
	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 `nodeTree_pako` */;
/*!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 `nodeTree_pako`(IN `vScheme` VARCHAR(45), IN `vTable` VARCHAR(45), IN `vGap` INT, IN `vShouldShow` BOOLEAN)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.nest;
	CALL util.exec (sql_printf (
		'CREATE TEMPORARY TABLE tmp.nest
			SELECT node.id
					,CONCAT( REPEAT(REPEAT(" ",%v), 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
                    ,node.isSelected
				FROM %t.%t AS node,
					%t.%t AS parent
				WHERE node.lft BETWEEN parent.lft AND parent.rgt
				GROUP BY node.id
				ORDER BY node.lft'
        ,vGap
        ,vScheme
		,vTable
        ,vScheme
		,vTable
	));

	IF vShouldShow THEN
		SELECT * FROM tmp.nest;
	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 */ ;

--
-- Current Database: `pbx`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `pbx` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `pbx`;

--
-- Table structure for table `blacklist`
--

DROP TABLE IF EXISTS `blacklist`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `blacklist` (
  `phone` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Hangup input calls from this list';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `pbx`.`blacklist_beforeInsert`
	BEFORE INSERT ON `blacklist`
	FOR EACH ROW
BEGIN
	CALL phone_isValid(NEW.phone);
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 `pbx`.`blacklist_berforeUpdate`
	BEFORE UPDATE ON `blacklist`
	FOR EACH ROW
BEGIN
	CALL phone_isValid(NEW.phone);
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 */ ;

--
-- Table structure for table `cdr`
--

DROP TABLE IF EXISTS `cdr`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cdr` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `call_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `clid` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `src` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `dst` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `dcontext` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `channel` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `dst_channel` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `last_app` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `last_data` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `duration` int(11) NOT NULL DEFAULT '0',
  `billsec` int(11) NOT NULL DEFAULT '0',
  `disposition` varchar(45) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ama_flags` int(11) NOT NULL DEFAULT '0',
  `account_code` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `unique_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `user_field` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `calldate` (`call_date`),
  KEY `dst` (`dst`),
  KEY `accountcode` (`account_code`),
  KEY `dstchannel` (`dst_channel`),
  KEY `disposition` (`disposition`),
  KEY `src` (`src`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `cdrConf`
--

DROP TABLE IF EXISTS `cdrConf`;
/*!50001 DROP VIEW IF EXISTS `cdrConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `cdrConf` (
  `calldate` tinyint NOT NULL,
  `clid` tinyint NOT NULL,
  `src` tinyint NOT NULL,
  `dst` tinyint NOT NULL,
  `dcontext` tinyint NOT NULL,
  `channel` tinyint NOT NULL,
  `dstchannel` tinyint NOT NULL,
  `lastapp` tinyint NOT NULL,
  `lastdata` tinyint NOT NULL,
  `duration` tinyint NOT NULL,
  `billsec` tinyint NOT NULL,
  `disposition` tinyint NOT NULL,
  `amaflags` tinyint NOT NULL,
  `accountcode` tinyint NOT NULL,
  `uniqueid` tinyint NOT NULL,
  `userfield` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sundayFestive` tinyint(4) NOT NULL,
  `countryPrefix` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global configuration';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `followme`
--

DROP TABLE IF EXISTS `followme`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `followme` (
  `extension` varchar(128) CHARACTER SET utf8 NOT NULL,
  `phone` varchar(20) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`extension`),
  CONSTRAINT `followme_ibfk_1` FOREIGN KEY (`extension`) REFERENCES `sip` (`extension`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `pbx`.`followme_beforeInsert`
	BEFORE INSERT ON `followme`
	FOR EACH ROW
BEGIN
	CALL pbx.phone_isValid(NEW.phone);
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 `pbx`.`followme_beforeUpdate`
	BEFORE UPDATE ON `followme`
	FOR EACH ROW
BEGIN
	CALL pbx.phone_isValid(NEW.phone);
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 */ ;

--
-- Temporary table structure for view `followmeConf`
--

DROP TABLE IF EXISTS `followmeConf`;
/*!50001 DROP VIEW IF EXISTS `followmeConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `followmeConf` (
  `name` tinyint NOT NULL,
  `music` tinyint NOT NULL,
  `context` tinyint NOT NULL,
  `takecall` tinyint NOT NULL,
  `declinecall` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `followmeConfig`
--

DROP TABLE IF EXISTS `followmeConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `followmeConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `music` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `context` varchar(50) CHARACTER SET utf8 NOT NULL,
  `takeCall` char(1) CHARACTER SET utf8 NOT NULL,
  `declineCall` char(1) CHARACTER SET utf8 NOT NULL,
  `timeout` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `followmeNumberConf`
--

DROP TABLE IF EXISTS `followmeNumberConf`;
/*!50001 DROP VIEW IF EXISTS `followmeNumberConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `followmeNumberConf` (
  `name` tinyint NOT NULL,
  `ordinal` tinyint NOT NULL,
  `phonenumber` tinyint NOT NULL,
  `timeout` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `queue`
--

DROP TABLE IF EXISTS `queue`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `queue` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(128) CHARACTER SET utf8 NOT NULL,
  `name` varchar(128) CHARACTER SET utf8 NOT NULL,
  `config` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `description` (`description`),
  KEY `config` (`config`),
  CONSTRAINT `queue_ibfk_1` FOREIGN KEY (`config`) REFERENCES `queueConfig` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queues';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `pbx`.`queue_beforeInsert`
	BEFORE INSERT ON `queue`
	FOR EACH ROW
BEGIN
	CALL queue_isValid(NEW.`name`);
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 `pbx`.`queue_beforeUpdate`
	BEFORE UPDATE ON `queue`
	FOR EACH ROW
BEGIN
	CALL queue_isValid(NEW.`name`);
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 */ ;

--
-- Temporary table structure for view `queueConf`
--

DROP TABLE IF EXISTS `queueConf`;
/*!50001 DROP VIEW IF EXISTS `queueConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `queueConf` (
  `name` tinyint NOT NULL,
  `strategy` tinyint NOT NULL,
  `timeout` tinyint NOT NULL,
  `retry` tinyint NOT NULL,
  `weight` tinyint NOT NULL,
  `maxlen` tinyint NOT NULL,
  `ringinuse` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `queueConfig`
--

DROP TABLE IF EXISTS `queueConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `queueConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `strategy` varchar(128) CHARACTER SET utf8 NOT NULL,
  `timeout` int(10) unsigned NOT NULL,
  `retry` int(10) unsigned NOT NULL,
  `weight` int(10) unsigned NOT NULL,
  `maxLen` int(10) unsigned NOT NULL,
  `ringInUse` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Default values for queues configuration';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `queueMember`
--

DROP TABLE IF EXISTS `queueMember`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `queueMember` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `queue` varchar(128) CHARACTER SET utf8 NOT NULL,
  `extension` varchar(128) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `queue` (`queue`,`extension`),
  KEY `extension` (`extension`),
  CONSTRAINT `queueMember_ibfk_1` FOREIGN KEY (`queue`) REFERENCES `queue` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `queueMember_ibfk_2` FOREIGN KEY (`extension`) REFERENCES `sip` (`extension`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queue members';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `queueMemberConf`
--

DROP TABLE IF EXISTS `queueMemberConf`;
/*!50001 DROP VIEW IF EXISTS `queueMemberConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `queueMemberConf` (
  `uniqueid` tinyint NOT NULL,
  `queue_name` tinyint NOT NULL,
  `interface` tinyint NOT NULL,
  `paused` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `queuePhone`
--

DROP TABLE IF EXISTS `queuePhone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `queuePhone` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `queue` varchar(128) CHARACTER SET utf8 NOT NULL,
  `phone` varchar(128) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `queue` (`queue`,`phone`),
  CONSTRAINT `queuePhone_ibfk_1` FOREIGN KEY (`queue`) REFERENCES `queue` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `pbx`.`queuePhone_beforeInsert`
	BEFORE INSERT ON `queuePhone`
	FOR EACH ROW
BEGIN
	CALL phone_isValid(NEW.phone);
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 `pbx`.`queuePhone_beforeUpdate`
	BEFORE UPDATE ON `queuePhone`
	FOR EACH ROW
BEGIN
	CALL phone_isValid(NEW.phone);
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 */ ;

--
-- Table structure for table `schedule`
--

DROP TABLE IF EXISTS `schedule`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `schedule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `weekDay` tinyint(3) unsigned NOT NULL COMMENT '0 = Monday, 6 = Sunday',
  `timeStart` time NOT NULL,
  `timeEnd` time NOT NULL,
  `queue` varchar(128) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  KEY `queue` (`queue`),
  CONSTRAINT `schedule_ibfk_1` FOREIGN KEY (`queue`) REFERENCES `queue` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sip`
--

DROP TABLE IF EXISTS `sip`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sip` (
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The user id',
  `extension` varchar(128) CHARACTER SET utf8 NOT NULL COMMENT 'The softphone extension',
  `md5Secret` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'MD5 hash of extension and password',
  `secret` varchar(80) CHARACTER SET utf8 DEFAULT NULL COMMENT 'Deprecated',
  `caller_id` varchar(80) CHARACTER SET utf8 DEFAULT NULL COMMENT 'Deprecated',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `extension` (`extension`),
  CONSTRAINT `sip_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='SIP accounts';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `pbx`.`sip_beforeInsert`
	BEFORE INSERT ON `sip`
	FOR EACH ROW
BEGIN
	CALL sip_isValid(NEW.extension);
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 `pbx`.`sip_afterInsert`
	AFTER INSERT ON `sip`
	FOR EACH ROW
BEGIN
	INSERT INTO sipReg
		SET userId = NEW.user_id;

	INSERT IGNORE INTO `account`.userSync (`name`)
		SELECT `name` FROM `account`.`user`
			WHERE id = NEW.user_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 `pbx`.`sip_beforeUpdate`
	BEFORE UPDATE ON `sip`
	FOR EACH ROW
BEGIN
	CALL sip_isValid(NEW.extension);
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 `pbx`.`sip_afterUpdate`
	AFTER UPDATE ON `sip`
	FOR EACH ROW
BEGIN
	IF !(OLD.extension <=> NEW.extension)
	OR !(OLD.user_id <=> NEW.user_id) THEN
		INSERT IGNORE INTO `account`.userSync (`name`)
			SELECT `name` FROM `account`.`user`
				WHERE id = NEW.user_id;
	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 */ ;

--
-- Temporary table structure for view `sipConf`
--

DROP TABLE IF EXISTS `sipConf`;
/*!50001 DROP VIEW IF EXISTS `sipConf`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `sipConf` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `callbackextension` tinyint NOT NULL,
  `md5secret` tinyint NOT NULL,
  `callerid` tinyint NOT NULL,
  `host` tinyint NOT NULL,
  `deny` tinyint NOT NULL,
  `permit` tinyint NOT NULL,
  `type` tinyint NOT NULL,
  `context` tinyint NOT NULL,
  `incominglimit` tinyint NOT NULL,
  `pickupgroup` tinyint NOT NULL,
  `careinvite` tinyint NOT NULL,
  `insecure` tinyint NOT NULL,
  `transport` tinyint NOT NULL,
  `nat` tinyint NOT NULL,
  `ipaddr` tinyint NOT NULL,
  `regseconds` tinyint NOT NULL,
  `port` tinyint NOT NULL,
  `defaultuser` tinyint NOT NULL,
  `useragent` tinyint NOT NULL,
  `lastms` tinyint NOT NULL,
  `fullcontact` tinyint NOT NULL,
  `regserver` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `sipConfig`
--

DROP TABLE IF EXISTS `sipConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sipConfig` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `host` varchar(40) CHARACTER SET utf8 DEFAULT NULL,
  `deny` varchar(95) CHARACTER SET utf8 NOT NULL,
  `permit` varchar(95) CHARACTER SET utf8 NOT NULL,
  `type` enum('user','peer','friend') CHARACTER SET utf8 NOT NULL,
  `context` varchar(80) CHARACTER SET utf8 NOT NULL,
  `incomingLimit` varchar(10) CHARACTER SET utf8 NOT NULL,
  `pickupGroup` varchar(10) CHARACTER SET utf8 NOT NULL,
  `careInvite` varchar(10) CHARACTER SET utf8 NOT NULL,
  `insecure` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `transport` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `avpf` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `icesupport` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `encryption` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dtlsenable` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dtlverify` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dtlscertfile` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dtlsprivatekey` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dtlssetup` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nat` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Default values for SIP accounts';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sipReg`
--

DROP TABLE IF EXISTS `sipReg`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sipReg` (
  `userId` int(10) unsigned NOT NULL,
  `ipAddr` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  `regSeconds` bigint(20) unsigned DEFAULT NULL,
  `port` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `defaultUser` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `userAgent` varchar(80) CHARACTER SET utf8 DEFAULT NULL,
  `lastMs` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `fullContact` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `regServer` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`userId`),
  CONSTRAINT `sipReg_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `sip` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='SIP registrations';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'pbx'
--

--
-- Dumping routines for database 'pbx'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `clientFromPhone` */;
/*!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 `clientFromPhone`(vPhone VARCHAR(255)) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use vn.client_getFromPhone()
 */
	RETURN vn.client_getFromPhone(vPhone);
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 `phone_format` */;
/*!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 `phone_format`(vPhone VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
BEGIN
	DECLARE vI INT DEFAULT 0;
	DECLARE vChr VARCHAR(1);
	DECLARE vLen INT DEFAULT LENGTH(vPhone);
	DECLARE vNewPhone VARCHAR(255) DEFAULT '';

	WHILE vI < vLen
    DO
		SET vChr = SUBSTR(vPhone, vI + 1, 1);
    
		IF vChr REGEXP '^[0-9]$'
        THEN
			SET vNewPhone = CONCAT(vNewPhone, vChr);
		ELSEIF vChr = '+' AND vI = 0
        THEN
			SET vNewPhone = CONCAT(vNewPhone, '00');
		END IF;
        
        SET vI = vI + 1;
    END WHILE;

	IF vNewPhone REGEXP '^0+$' OR vNewPhone = '' THEN
		RETURN NULL;
	END IF;

	IF vNewPhone REGEXP '^0034' THEN
		SET vNewPhone = SUBSTR(vNewPhone, 5);
	END IF;

	RETURN vNewPhone;
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 `phone_isValid` */;
/*!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 `phone_isValid`(vPhone VARCHAR(255))
BEGIN
/**
 * Check if an phone has the correct format and
 * throws an exception if it hasn't.
 *
 * @param vPhone The phone number
 */
	DECLARE vIsValid BOOL;

	SET vIsValid = vPhone IS NULL
		OR (vPhone REGEXP '^[0-9]+$'
		AND vPhone NOT REGEXP '^0+$'
		AND vPhone NOT REGEXP '^0034');

	IF NOT vIsValid THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Phone format is invalid';
	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 `queue_isValid` */;
/*!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 `queue_isValid`(vQueue VARCHAR(255))
BEGIN
/**
 * Check if an queue has the correct format and
 * throws an exception if it hasn't.
 *
 * @param vQueue The queue number
 */
	DECLARE vIsValid BOOL;

	SET vIsValid = vQueue IS NULL
		OR vQueue REGEXP '^[1-9][0-9]00$';

	IF NOT vIsValid THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Queue format is invalid';
	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 `sip_getExtension` */;
/*!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 `sip_getExtension`(vUserId INT(10))
BEGIN
	
	 /*
	  * Devuelve la extensión pbx del usuario
	  * 
	  * @param vUserId Id del usuario 
	  * 
	  */

	SELECT extension
		FROM sip s 
	WHERE s.user_id = vUserId;
	
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 `sip_isValid` */;
/*!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 `sip_isValid`(vExtension VARCHAR(255))
BEGIN
/**
 * Check if an extension has the correct format and
 * throws an exception if it hasn't.
 *
 * @param vExtension The extension
 */
	DECLARE vIsValid BOOL;

	SET vIsValid =  vExtension IS NULL
		OR (vExtension REGEXP '^[0-9]{4}$'
		AND MOD(vExtension, 100) != 0);

	IF NOT vIsValid THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Extension format is invalid';
	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 `sip_setPassword` */;
/*!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 `sip_setPassword`(
	vUser VARCHAR(255),
    vPassword VARCHAR(255)
)
BEGIN
	UPDATE sip SET
		md5Secret = MD5(CONCAT(extension, ':asterisk:', vPassword))
        WHERE user_id = vUser;
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: `postgresql`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `postgresql` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `postgresql`;

--
-- Table structure for table `address`
--

DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
  `address_id` int(11) NOT NULL AUTO_INCREMENT,
  `town_id` int(11) NOT NULL,
  `address_type_id` int(11) NOT NULL,
  `name` varchar(40) DEFAULT NULL,
  `address1` varchar(255) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  `address2` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`address_id`),
  KEY `address_address_type_id_idx` (`address_type_id`),
  KEY `address_town_id_idx` (`town_id`),
  CONSTRAINT `address_ibfk_1` FOREIGN KEY (`address_type_id`) REFERENCES `address_type` (`address_type_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `address_ibfk_2` FOREIGN KEY (`town_id`) REFERENCES `townKk` (`town_id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `address_type`
--

DROP TABLE IF EXISTS `address_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address_type` (
  `address_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`address_type_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bank_account`
--

DROP TABLE IF EXISTS `bank_account`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bank_account` (
  `bank_account_id` int(11) NOT NULL AUTO_INCREMENT,
  `client_id__` int(11) DEFAULT NULL,
  `account` char(50) DEFAULT NULL,
  `bic` char(20) DEFAULT NULL,
  `bank_account_type_id` int(11) DEFAULT NULL,
  `nation_id` mediumint(8) unsigned DEFAULT NULL,
  `sortcode` char(50) DEFAULT NULL,
  `bank_name` char(30) DEFAULT NULL,
  `bank_adress` char(125) DEFAULT NULL,
  `bank_city` char(50) DEFAULT NULL,
  `bank_account_link_id` int(11) DEFAULT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`bank_account_id`),
  UNIQUE KEY `workerFk_UNIQUE` (`workerFk`),
  KEY `fki_business_account_fk` (`client_id__`),
  KEY `fki_person_account_fk` (`client_id__`),
  KEY `bank_account_bank_account_type` (`bank_account_type_id`),
  KEY `bank_account_nation_id` (`nation_id`),
  CONSTRAINT `bank_account_bank_account_type` FOREIGN KEY (`bank_account_type_id`) REFERENCES `bank_account_type` (`bank_account_type_id`) ON UPDATE CASCADE,
  CONSTRAINT `bank_account_nation_id` FOREIGN KEY (`nation_id`) REFERENCES `vn`.`country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `bank_account_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bank_account_type`
--

DROP TABLE IF EXISTS `bank_account_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bank_account_type` (
  `bank_account_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(15) DEFAULT NULL,
  PRIMARY KEY (`bank_account_type_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bank_bic__`
--

DROP TABLE IF EXISTS `bank_bic__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bank_bic__` (
  `nrbe` int(11) NOT NULL,
  `denominacion` varchar(255) DEFAULT NULL,
  `bic` char(11) DEFAULT NULL,
  `referenciaFTH` varchar(35) DEFAULT NULL,
  `referenciaVNL` varchar(35) DEFAULT NULL,
  PRIMARY KEY (`nrbe`),
  KEY `bankbic_ikey1` (`bic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `business`
--

DROP TABLE IF EXISTS `business`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `business` (
  `business_id` int(11) NOT NULL AUTO_INCREMENT,
  `client_id` int(11) DEFAULT NULL,
  `provider_id__` int(11) DEFAULT NULL,
  `companyCodeFk` char(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `date_start` date DEFAULT NULL,
  `date_end` date DEFAULT NULL,
  `workerBusiness` longtext,
  `reasonEndFk` int(11) DEFAULT NULL,
  `payedHolidays` int(11) DEFAULT NULL,
  `occupationCodeFk` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`business_id`),
  KEY `business_client` (`client_id`),
  KEY `business_occupationCodeFk` (`occupationCodeFk`),
  KEY `business_companyCodeFk` (`companyCodeFk`),
  CONSTRAINT `business_client` FOREIGN KEY (`client_id`) REFERENCES `profile` (`profile_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `business_companyCodeFk` FOREIGN KEY (`companyCodeFk`) REFERENCES `vn`.`company` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `business_occupationCodeFk` FOREIGN KEY (`occupationCodeFk`) REFERENCES `vn`.`occupationCode` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `postgresql`.`business_beforeUpdate`
	BEFORE UPDATE ON `business`
	FOR EACH ROW
BEGIN
    DECLARE isOverlapping BOOL;
	
	IF !(OLD.date_start <=> NEW.date_start AND OLD.date_end <=> NEW.date_end) THEN
		
		SELECT COUNT(*) > 0 INTO isOverlapping
			FROM business b
			WHERE (util.hasDateOverlapped(
					NEW.date_start, 
					IFNULL(NEW.date_end,b.date_start),
					b.date_start,
					IFNULL(b.date_end,NEW.date_start))
					OR (NEW.date_end <=> NULL AND b.date_end <=> NULL))
				AND b.business_id <> OLD.business_id
				AND client_id = OLD.client_id
				;
			
	    IF isOverlapping THEN 
	        CALL util.throw ('IS_OVERLAPPING');
	    END IF;
	   
	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 */ ;

--
-- Table structure for table `business_labour`
--

DROP TABLE IF EXISTS `business_labour`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `business_labour` (
  `business_id` int(11) NOT NULL,
  `notes` longtext,
  `department_id` int(11) NOT NULL,
  `professional_category_id` int(11) DEFAULT '0',
  `incentivo` double DEFAULT '0',
  `calendar_labour_type_id` int(11) DEFAULT '1',
  `porhoras` smallint(6) NOT NULL DEFAULT '0',
  `labour_agreement_id` int(11) DEFAULT NULL,
  `workcenter_id` int(11) NOT NULL,
  PRIMARY KEY (`business_id`),
  KEY `fki_business_labour_agreement` (`labour_agreement_id`),
  KEY `fki_workcenter_labour` (`workcenter_id`),
  KEY `horario_tipo` (`calendar_labour_type_id`),
  KEY `business_labour_department_idx` (`department_id`),
  CONSTRAINT `bus_restriction` FOREIGN KEY (`business_id`) REFERENCES `business` (`business_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `business_labour_FK` FOREIGN KEY (`workcenter_id`) REFERENCES `vn`.`workCenter` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `business_labour_agreement` FOREIGN KEY (`labour_agreement_id`) REFERENCES `labour_agreement` (`labour_agreement_id`) ON UPDATE CASCADE,
  CONSTRAINT `business_labour_department_id` FOREIGN KEY (`department_id`) REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `horario_tipo` FOREIGN KEY (`calendar_labour_type_id`) REFERENCES `calendar_labour_type` (`calendar_labour_type_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `business_labour_payroll`
--

DROP TABLE IF EXISTS `business_labour_payroll`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `business_labour_payroll` (
  `business_id` int(11) NOT NULL,
  `cod_tarifa` int(11) DEFAULT NULL,
  `cod_categoria` int(11) DEFAULT NULL,
  `cod_contrato` int(11) DEFAULT NULL,
  `importepactado` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`business_id`),
  KEY `business_labour_payroll_cod_categoria_idx` (`cod_categoria`),
  KEY `business_labour_payroll_FK` (`cod_contrato`),
  CONSTRAINT `business_labour_payroll_FK` FOREIGN KEY (`cod_contrato`) REFERENCES `vn`.`workerBusinessType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `business_labour_payroll_cod_categoria` FOREIGN KEY (`cod_categoria`) REFERENCES `vn2008`.`payroll_categorias` (`codcategoria`) ON UPDATE CASCADE,
  CONSTRAINT `business_labour_payroll_fk1` FOREIGN KEY (`business_id`) REFERENCES `business` (`business_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `calendar_employee`
--

DROP TABLE IF EXISTS `calendar_employee`;
/*!50001 DROP VIEW IF EXISTS `calendar_employee`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `calendar_employee` (
  `id` tinyint NOT NULL,
  `business_id` tinyint NOT NULL,
  `calendar_state_id` tinyint NOT NULL,
  `date` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `calendar_free__`
--

DROP TABLE IF EXISTS `calendar_free__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendar_free__` (
  `calendar_free_id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(20) NOT NULL,
  `rgb` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`calendar_free_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendar_labour__`
--

DROP TABLE IF EXISTS `calendar_labour__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendar_labour__` (
  `calendar_free_id` int(11) NOT NULL,
  `person_id` int(11) NOT NULL,
  `day` date NOT NULL,
  `calendar_labour_legend_id` int(11) DEFAULT NULL,
  `workcenter_id` int(11) NOT NULL,
  `calendar_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`calendar_id`),
  UNIQUE KEY `person_id_UNIQUE` (`person_id`,`day`,`workcenter_id`),
  KEY `calendar_labour_calendar_free_id_idx` (`calendar_free_id`),
  KEY `fki_calendar_labour_legend_id` (`calendar_labour_legend_id`),
  KEY `fki_calendar_labour_person_day` (`person_id`,`day`),
  KEY `fki_workcenter_calendar` (`workcenter_id`),
  CONSTRAINT `fk_calendar_labour_calendar_free1` FOREIGN KEY (`calendar_free_id`) REFERENCES `calendar_free__` (`calendar_free_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_calendar_labour_legend_id` FOREIGN KEY (`calendar_labour_legend_id`) REFERENCES `calendar_labour_legend__` (`calendar_labour_legend_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `workcenter_calendar` FOREIGN KEY (`workcenter_id`) REFERENCES `workcenter__` (`workcenter_id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendar_labour_legend__`
--

DROP TABLE IF EXISTS `calendar_labour_legend__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendar_labour_legend__` (
  `calendar_labour_legend_id` int(11) NOT NULL AUTO_INCREMENT,
  `descripcion` longtext,
  PRIMARY KEY (`calendar_labour_legend_id`),
  UNIQUE KEY `calendar_labour_legend_calendar_labour_legend_id_key` (`calendar_labour_legend_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendar_labour_type`
--

DROP TABLE IF EXISTS `calendar_labour_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendar_labour_type` (
  `calendar_labour_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `descripcion` varchar(50) DEFAULT NULL,
  `pausa_remunerada` time DEFAULT NULL,
  `hours_week` smallint(6) DEFAULT NULL,
  `isPartial` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`calendar_labour_type_id`),
  UNIQUE KEY `hours_labour_hours_labour_id_key` (`calendar_labour_type_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `currency__`
--

DROP TABLE IF EXISTS `currency__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `currency__` (
  `currency_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) NOT NULL,
  PRIMARY KEY (`currency_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `erte_COVID19`
--

DROP TABLE IF EXISTS `erte_COVID19`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `erte_COVID19` (
  `personFk` int(11) NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`personFk`),
  CONSTRAINT `erte_COVID19_FK` FOREIGN KEY (`personFk`) REFERENCES `vn`.`person__` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `income_employee`
--

DROP TABLE IF EXISTS `income_employee`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `income_employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `debe` decimal(10,2) NOT NULL DEFAULT '0.00',
  `haber` decimal(10,2) NOT NULL DEFAULT '0.00',
  `id_incomeType` int(11) DEFAULT NULL,
  `odbc_date` date DEFAULT NULL,
  `workerFk` int(11) unsigned NOT NULL,
  `person_id__` int(11) DEFAULT NULL,
  `concepto` longtext,
  PRIMARY KEY (`id`),
  KEY `income_employeeId_incomeType_idx` (`id_incomeType`),
  KEY `income_employee_workerFk_idx` (`workerFk`),
  CONSTRAINT `income_employeeId_incomeType` FOREIGN KEY (`id_incomeType`) REFERENCES `vn2008`.`payroll_conceptos` (`conceptoid`) ON UPDATE CASCADE,
  CONSTRAINT `income_employee_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `incometype_employee`
--

DROP TABLE IF EXISTS `incometype_employee`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `incometype_employee` (
  `id_incometype` int(11) NOT NULL,
  `descripcion` varchar(255) DEFAULT NULL,
  `nomina` smallint(6) DEFAULT '0',
  `isExtraSalarial` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_incometype`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `journey`
--

DROP TABLE IF EXISTS `journey`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `journey` (
  `journey_id` int(11) NOT NULL AUTO_INCREMENT,
  `day_id` smallint(6) NOT NULL DEFAULT '1' COMMENT 'Lunes = 1 \nDomingo = 7',
  `start` time DEFAULT NULL,
  `end` time DEFAULT NULL,
  `business_id` int(11) NOT NULL,
  PRIMARY KEY (`journey_id`),
  UNIQUE KEY `day_id` (`day_id`,`start`,`end`,`business_id`),
  KEY `fki_business_journey` (`business_id`),
  CONSTRAINT `business_journey` FOREIGN KEY (`business_id`) REFERENCES `business` (`business_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `labour_agreement`
--

DROP TABLE IF EXISTS `labour_agreement`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `labour_agreement` (
  `labour_agreement_id` int(11) NOT NULL AUTO_INCREMENT,
  `month_hollidays` double DEFAULT NULL,
  `year_hours` int(11) DEFAULT NULL,
  `name` char(50) DEFAULT NULL,
  `date_START` date DEFAULT NULL,
  `date_END` date DEFAULT NULL,
  PRIMARY KEY (`labour_agreement_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `media`
--

DROP TABLE IF EXISTS `media`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `media` (
  `media_id` int(11) NOT NULL AUTO_INCREMENT,
  `media_type_id` int(11) NOT NULL,
  `value` varchar(55) NOT NULL,
  `sort` int(11) DEFAULT NULL,
  PRIMARY KEY (`media_id`),
  KEY `media_media_type_id_idx` (`media_type_id`),
  CONSTRAINT `media_ibfk_1` FOREIGN KEY (`media_type_id`) REFERENCES `media_type` (`media_type_id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `media_type`
--

DROP TABLE IF EXISTS `media_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `media_type` (
  `media_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) NOT NULL,
  PRIMARY KEY (`media_type_id`),
  UNIQUE KEY `media_type_name_key` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `nation__`
--

DROP TABLE IF EXISTS `nation__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nation__` (
  `nation_id` int(11) NOT NULL AUTO_INCREMENT,
  `currency_id` int(11) NOT NULL DEFAULT '1',
  `name` varchar(20) NOT NULL,
  `brief` char(3) NOT NULL,
  `flag` longblob,
  PRIMARY KEY (`nation_id`),
  UNIQUE KEY `nation_name_key` (`name`),
  KEY `nation_currency_id_idx` (`currency_id`),
  CONSTRAINT `nation___ibfk_1` FOREIGN KEY (`currency_id`) REFERENCES `currency__` (`currency_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `periodos__`
--

DROP TABLE IF EXISTS `periodos__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `periodos__` (
  `fecha` date NOT NULL,
  `periodo` int(11) DEFAULT NULL,
  PRIMARY KEY (`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `person__`
--

DROP TABLE IF EXISTS `person__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `person__` (
  `person_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) NOT NULL,
  `nickname` varchar(15) DEFAULT NULL,
  `nif` varchar(15) DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `firstname` varchar(20) DEFAULT NULL,
  `p2` longtext,
  `nis` int(11) DEFAULT NULL,
  `id_trabajador` int(10) unsigned DEFAULT NULL,
  `isDisable` smallint(6) NOT NULL DEFAULT '0',
  `isFreelance` smallint(6) NOT NULL DEFAULT '0' COMMENT 'M Male\nF Female',
  `isSsDiscounted` smallint(6) NOT NULL DEFAULT '0',
  `sex` enum('M','F') NOT NULL DEFAULT 'F' COMMENT 'M Masculino  F Femenino',
  PRIMARY KEY (`person_id`),
  UNIQUE KEY `person_nis` (`person_id`),
  UNIQUE KEY `Index_unique_nif` (`nif`),
  UNIQUE KEY `person_nif_key` (`nif`),
  UNIQUE KEY `nis_UNIQUE` (`nis`),
  KEY `index1` (`person_id`,`name`,`nickname`,`firstname`),
  KEY `person_worker` (`id_trabajador`),
  CONSTRAINT `Person_ibfk_1` FOREIGN KEY (`id_trabajador`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `professional_category`
--

DROP TABLE IF EXISTS `professional_category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `professional_category` (
  `professional_category_id` int(11) NOT NULL AUTO_INCREMENT,
  `category_name` varchar(50) NOT NULL,
  `professional_levels_id` int(11) DEFAULT NULL,
  `fichajes` tinyint(4) NOT NULL DEFAULT '1',
  `holiday_days` decimal(3,1) DEFAULT NULL,
  `dayBreak` int(11) DEFAULT NULL,
  PRIMARY KEY (`professional_category_id`),
  UNIQUE KEY `professional_category_name_category_key` (`category_name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `professional_levels`
--

DROP TABLE IF EXISTS `professional_levels`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `professional_levels` (
  `professional_levels_id` int(11) NOT NULL AUTO_INCREMENT,
  `level_name` varchar(5) DEFAULT NULL,
  `price_overtime` double DEFAULT NULL,
  PRIMARY KEY (`professional_levels_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profile`
--

DROP TABLE IF EXISTS `profile`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profile` (
  `profile_id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id__` int(11) DEFAULT NULL,
  `profile_type_id` int(11) NOT NULL DEFAULT '1',
  `workerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`profile_id`),
  KEY `profile_person_id_idx` (`person_id__`),
  KEY `profile_profile_type_id_idx` (`profile_type_id`),
  KEY `profile_workerFk_idx` (`workerFk`),
  CONSTRAINT `profile_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profile_address`
--

DROP TABLE IF EXISTS `profile_address`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profile_address` (
  `profile_address_id` int(11) NOT NULL AUTO_INCREMENT,
  `profile_id` int(11) NOT NULL,
  `address_id` int(11) NOT NULL,
  PRIMARY KEY (`profile_address_id`),
  KEY `profile_address_address_id_idx` (`address_id`),
  KEY `profile_address_profile_id_idx` (`profile_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profile_media`
--

DROP TABLE IF EXISTS `profile_media`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profile_media` (
  `profile_media_id` int(11) NOT NULL AUTO_INCREMENT,
  `profile_id` int(11) NOT NULL,
  `media_id` int(11) NOT NULL,
  PRIMARY KEY (`profile_media_id`),
  KEY `profile_media_media_id_idx` (`media_id`),
  KEY `profile_media_profile_id_idx` (`profile_id`),
  CONSTRAINT `fk_profile_media_media1` FOREIGN KEY (`media_id`) REFERENCES `media` (`media_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `media_ibfk_20` FOREIGN KEY (`profile_id`) REFERENCES `profile` (`profile_id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profile_type`
--

DROP TABLE IF EXISTS `profile_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profile_type` (
  `profile_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) NOT NULL,
  PRIMARY KEY (`profile_type_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `province`
--

DROP TABLE IF EXISTS `province`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `province` (
  `province_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) NOT NULL,
  `nation_id` int(11) NOT NULL,
  PRIMARY KEY (`province_id`),
  UNIQUE KEY `province_name_key` (`name`),
  KEY `province_nation_id_idx` (`nation_id`),
  CONSTRAINT `fk_province_nation1` FOREIGN KEY (`nation_id`) REFERENCES `nation__` (`nation_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `townKk`
--

DROP TABLE IF EXISTS `townKk`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `townKk` (
  `town_id` int(11) NOT NULL AUTO_INCREMENT,
  `province_id` int(11) NOT NULL,
  `name` varchar(30) NOT NULL,
  `postal_code` varchar(8) NOT NULL,
  PRIMARY KEY (`town_id`),
  KEY `town_province_id_idx` (`province_id`),
  CONSTRAINT `townKk_ibfk_1` FOREIGN KEY (`province_id`) REFERENCES `province` (`province_id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workcenter__`
--

DROP TABLE IF EXISTS `workcenter__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workcenter__` (
  `workcenter_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` longtext,
  `center_id` int(11) DEFAULT NULL,
  `counter` bigint(20) DEFAULT NULL,
  `warehouseFk` smallint(6) DEFAULT NULL,
  `street` varchar(255) DEFAULT NULL,
  `geoFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`workcenter_id`),
  KEY `workcenter_geoFk_idx` (`geoFk`),
  CONSTRAINT `workCenter_geoFk` FOREIGN KEY (`geoFk`) REFERENCES `vn`.`zoneGeo` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlConfig__`
--

DROP TABLE IF EXISTS `workerTimeControlConfig__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlConfig__` (
  `id` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `warehouseFk_1_idx` (`warehouseFk`),
  CONSTRAINT `warehouseFk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `vn`.`warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasAbril`
--

DROP TABLE IF EXISTS `workers20190711_FichadasAbril`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasAbril` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'postgresql'
--

--
-- Dumping routines for database 'postgresql'
--

--
-- Current Database: `sage`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `sage` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `sage`;

--
-- Table structure for table `ClavesOperacion`
--

DROP TABLE IF EXISTS `ClavesOperacion`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ClavesOperacion` (
  `ClaveOperacionFactura_` varchar(1) NOT NULL,
  `Descripcion` varchar(250) NOT NULL,
  PRIMARY KEY (`ClaveOperacionFactura_`),
  UNIQUE KEY `ClaveOperacionFactura__UNIQUE` (`ClaveOperacionFactura_`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `Municipios`
--

DROP TABLE IF EXISTS `Municipios`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Municipios` (
  `Codigo` varchar(7) NOT NULL,
  `Municipio` varchar(25) NOT NULL,
  `Tipo` tinyint(4) NOT NULL,
  `Recargo` decimal(28,10) NOT NULL,
  `Deleg.` varchar(5) NOT NULL,
  `Provincia` tinyint(4) NOT NULL,
  `Autonomia` smallint(6) NOT NULL,
  `Nacion` tinyint(4) NOT NULL,
  PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `Naciones`
--

DROP TABLE IF EXISTS `Naciones`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Naciones` (
  `countryFk` mediumint(8) NOT NULL,
  `CodigoNacion` smallint(6) NOT NULL DEFAULT '108',
  `CodigoNacion347` smallint(6) NOT NULL DEFAULT '108',
  `Nacion` varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `SiglaNacion` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'ES',
  `TipoCodigo` varchar(1) CHARACTER SET utf8 NOT NULL DEFAULT 'A',
  `Longitud1` tinyint(4) NOT NULL DEFAULT '0',
  `Longitud2` tinyint(4) NOT NULL DEFAULT '0',
  `Longitud3` tinyint(4) NOT NULL DEFAULT '0',
  `Longitud4` tinyint(4) NOT NULL DEFAULT '0',
  `NacionCEE` smallint(6) NOT NULL DEFAULT '0',
  `FechaCEE` datetime DEFAULT NULL,
  `NacionISO` varchar(3) CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`countryFk`,`CodigoNacion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `Provincias`
--

DROP TABLE IF EXISTS `Provincias`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Provincias` (
  `provinceFk` smallint(6) NOT NULL,
  `CodigoProvincia` varchar(5) NOT NULL DEFAULT '',
  `CodigoMatricula` varchar(2) NOT NULL DEFAULT '',
  `Provincia` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `RecargoProvincial` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  PRIMARY KEY (`CodigoProvincia`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `TiposIva`
--

DROP TABLE IF EXISTS `TiposIva`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TiposIva` (
  `CodigoIva` smallint(6) NOT NULL DEFAULT '0',
  `CodigoTerritorio` smallint(6) NOT NULL DEFAULT '0',
  `Iva` varchar(30) NOT NULL DEFAULT '',
  `BaseCorrectora` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `PorcentajeIva` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `RecargoEquivalencia` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `CuentaIvaSoportado` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaRepercutido` varchar(15) NOT NULL DEFAULT '',
  `CuentaRecargo` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaNoDeducible` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaSoportadoANT_` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaRepercutidoANT_` varchar(15) NOT NULL DEFAULT '',
  `CuentaRecargoANT_` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaNoDeducibleANT_` varchar(15) NOT NULL DEFAULT '',
  `IdTiposIva` varchar(50) NOT NULL DEFAULT '',
  `CuentaIvaRepCaja` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVARepCajaPu` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVARepCajaVen` varchar(15) NOT NULL DEFAULT '',
  `CuentaIvaSopCaja` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVASopCajaPu` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVASopCajaVen` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVARecCaja` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVARecCajaPu` varchar(15) NOT NULL DEFAULT '',
  `CuentaIVARecCajaVen` varchar(15) NOT NULL DEFAULT '',
  `IGICImplicito` smallint(6) NOT NULL DEFAULT '0',
  `isIntracommunity` tinyint(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`CodigoIva`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `TiposRetencion`
--

DROP TABLE IF EXISTS `TiposRetencion`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TiposRetencion` (
  `CodigoRetencion` smallint(6) NOT NULL DEFAULT '0',
  `Retencion` varchar(50) NOT NULL DEFAULT '',
  `PorcentajeRetencion` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `CuentaCargo` varchar(15) DEFAULT NULL,
  `CuentaAbono` varchar(15) DEFAULT NULL,
  `ClaveIrpf` varchar(2) DEFAULT NULL,
  `CuentaCargoANT_` varchar(15) DEFAULT NULL,
  `CuentaAbonoANT_` varchar(15) DEFAULT NULL,
  `IdTipoRetencion` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`CodigoRetencion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `TiposTransacciones`
--

DROP TABLE IF EXISTS `TiposTransacciones`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TiposTransacciones` (
  `CodigoTransaccion` tinyint(4) NOT NULL DEFAULT '0',
  `Transaccion` varchar(50) NOT NULL DEFAULT '',
  `TipoFactura` varchar(1) NOT NULL DEFAULT '',
  `Autofactura` smallint(6) NOT NULL DEFAULT '0',
  `ClaveOperacionDefecto` varchar(1) NOT NULL DEFAULT '',
  PRIMARY KEY (`CodigoTransaccion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `clientLastTwoMonths`
--

DROP TABLE IF EXISTS `clientLastTwoMonths`;
/*!50001 DROP VIEW IF EXISTS `clientLastTwoMonths`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `clientLastTwoMonths` (
  `clientFk` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `clientesProveedores`
--

DROP TABLE IF EXISTS `clientesProveedores`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientesProveedores` (
  `CodigoEmpresa` smallint(6) NOT NULL,
  `ClienteOProveedor` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `CodigoClienteProveedor` int(11) NOT NULL,
  `RazonSocial` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  `RazonSocial2` varchar(40) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Nombre` varchar(35) COLLATE utf8_unicode_ci NOT NULL,
  `Domicilio` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  `Cargo1` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Nombre1` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Cargo2` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Nombre2` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCuenta` varchar(15) CHARACTER SET utf8 NOT NULL,
  `CifDni` varchar(13) COLLATE utf8_unicode_ci NOT NULL,
  `CifEuropeo` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `CodigoSigla` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ViaPublica` varchar(40) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Numero1` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Numero2` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Escalera` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Piso` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Puerta` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Letra` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoPostal` varchar(8) COLLATE utf8_unicode_ci NOT NULL,
  `CodigoMunicipio` varchar(7) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Municipio` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `ColaMunicipio` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoProvincia` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `Provincia` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `CodigoNacion` smallint(6) NOT NULL DEFAULT '0',
  `Nacion` varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Telefono` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `Telefono2` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `Telefono3` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Fax` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoTransaccion` tinyint(4) NOT NULL DEFAULT '0',
  `CodigoRetencion` smallint(6) NOT NULL,
  `Deducible` smallint(6) NOT NULL DEFAULT '0',
  `CodigoIva` smallint(6) NOT NULL DEFAULT '0',
  `Mediacion` smallint(6) NOT NULL DEFAULT '0',
  `Exclusion347` smallint(6) NOT NULL DEFAULT '0',
  `NumeroPlazos` tinyint(4) NOT NULL DEFAULT '1',
  `DiasPrimerPlazo` smallint(6) NOT NULL DEFAULT '0',
  `DiasEntrePlazos` smallint(6) NOT NULL DEFAULT '0',
  `DiasFijos1` tinyint(4) NOT NULL DEFAULT '0',
  `DiasFijos2` tinyint(4) NOT NULL DEFAULT '0',
  `DiasFijos3` tinyint(4) NOT NULL DEFAULT '0',
  `InicioNoPago` smallint(6) NOT NULL DEFAULT '0',
  `FinNoPago` smallint(6) NOT NULL DEFAULT '0',
  `ControlarFestivos` smallint(6) NOT NULL DEFAULT '0',
  `DiasRetroceso` tinyint(4) NOT NULL DEFAULT '0',
  `MesesComerciales` smallint(6) NOT NULL DEFAULT '0',
  `RemesaHabitual` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoTipoEfecto` smallint(6) NOT NULL DEFAULT '0',
  `Email1` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `Email2` varchar(250) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCategoriaCliente_` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'CLI',
  `IdDelegacion` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoMotivoBajaClienteLc` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoDepartamento` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCanal` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoBanco` varchar(6) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoAgencia` varchar(6) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `DC` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CCC` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `IBAN` varchar(34) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCondiciones` smallint(6) NOT NULL DEFAULT '0',
  `StatusTraspasadoIME` tinyint(4) NOT NULL DEFAULT '0',
  `TipoImportacionIME` tinyint(4) NOT NULL DEFAULT '2',
  `TipoPlanCuentaIME` smallint(6) NOT NULL DEFAULT '2',
  `Contrapartida` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCuentaImpagado` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoCuentaEfecto` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Comentarios` text COLLATE utf8_unicode_ci NOT NULL,
  `CodigoTerritorio` smallint(6) NOT NULL DEFAULT '0',
  `CodigoIdioma_` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `TarifaPrecio` smallint(6) NOT NULL DEFAULT '0',
  `%Descuento` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `%Rappel` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `%ProntoPago` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `%Financiacion` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `CodigoComisionista` int(11) NOT NULL DEFAULT '0',
  `TarifaDescuento` smallint(6) NOT NULL DEFAULT '0',
  `SiglaNacion` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `MarcaMenorSinNif` smallint(6) NOT NULL DEFAULT '0',
  `PersonaFisicaJuridica` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `SiglaNacionRepresentante` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CifDniRepresentante` varchar(13) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `NombreRepresentante` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `TipoDocumentoPersona` smallint(6) NOT NULL,
  `TipoCif` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `MotivoBajaClienteLc` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `PuntosSR` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `TarjetaSR` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `FechaNacimiento` datetime DEFAULT NULL,
  `Domicilio2` varchar(40) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CuentaProvision` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoTransportista` int(11) NOT NULL DEFAULT '0',
  `FormadePago` varchar(35) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ObservacionesCliente` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoTipoClienteLc` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `TipoCliente` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoActividadLc` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `Actividad` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `IndicadorIva` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoRuta_` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `NombreEmpleado` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `PrimerApellidoEmpleado` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `SegundoApellidoEmpleado` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `sysTick` int(11) NOT NULL DEFAULT '0',
  `RiesgoMaximo` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `PlazoMedioPCMA` smallint(6) NOT NULL DEFAULT '0',
  `CriterioIvaIME` smallint(6) NOT NULL DEFAULT '0',
  `ReferenciaMandato` varchar(35) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `%Comision` decimal(28,10) NOT NULL DEFAULT '0.0000000000',
  `CodigoZona` int(11) NOT NULL DEFAULT '0',
  `BloqueoAlbaran` smallint(6) NOT NULL DEFAULT '0',
  `CodigoSeccion` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoSector_` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CodigoProyecto` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`CodigoEmpresa`,`ClienteOProveedor`,`CodigoClienteProveedor`),
  KEY `CodigoCuenta` (`CodigoCuenta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `invoiceInList`
--

DROP TABLE IF EXISTS `invoiceInList`;
/*!50001 DROP VIEW IF EXISTS `invoiceInList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `invoiceInList` (
  `id` tinyint NOT NULL,
  `supplierRef` tinyint NOT NULL,
  `serial` tinyint NOT NULL,
  `supplierFk` tinyint NOT NULL,
  `issued` tinyint NOT NULL,
  `isVatDeductible` tinyint NOT NULL,
  `serialNumber` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `invoiceType`
--

DROP TABLE IF EXISTS `invoiceType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceType` (
  `code` varchar(11) NOT NULL,
  `codeSage` varchar(1) NOT NULL,
  PRIMARY KEY (`code`),
  UNIQUE KEY `code_UNIQUE` (`code`),
  UNIQUE KEY `codeSage_UNIQUE` (`codeSage`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `movContaIVA`
--

DROP TABLE IF EXISTS `movContaIVA`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `movContaIVA` (
  `id` int(11) NOT NULL,
  `CodigoDivisa` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `BaseIva1` double DEFAULT NULL,
  `PorBaseCorrectora1` double DEFAULT NULL,
  `PorIva1` double DEFAULT NULL,
  `CuotaIva1` double DEFAULT NULL,
  `PorRecargoEquivalencia1` double DEFAULT NULL,
  `RecargoEquivalencia1` double DEFAULT NULL,
  `CodigoTransaccion1` double NOT NULL DEFAULT '0',
  `CodigoIva1` smallint(6) NOT NULL,
  `BaseIva2` double DEFAULT NULL,
  `PorBaseCorrectora2` double DEFAULT NULL,
  `PorIva2` double DEFAULT NULL,
  `CuotaIva2` double DEFAULT NULL,
  `PorRecargoEquivalencia2` double DEFAULT NULL,
  `RecargoEquivalencia2` double DEFAULT NULL,
  `CodigoTransaccion2` double NOT NULL DEFAULT '0',
  `CodigoIva2` smallint(6) NOT NULL,
  `BaseIva3` double DEFAULT NULL,
  `PorBaseCorrectora3` double DEFAULT NULL,
  `PorIva3` double DEFAULT NULL,
  `CuotaIva3` double DEFAULT NULL,
  `PorRecargoEquivalencia3` double DEFAULT NULL,
  `RecargoEquivalencia3` double DEFAULT NULL,
  `CodigoTransaccion3` double NOT NULL DEFAULT '0',
  `CodigoIva3` smallint(6) NOT NULL,
  `BaseIva4` double DEFAULT NULL,
  `PorBaseCorrectora4` double DEFAULT NULL,
  `PorIva4` double DEFAULT NULL,
  `CuotaIva4` double DEFAULT NULL,
  `PorRecargoEquivalencia4` double DEFAULT NULL,
  `RecargoEquivalencia4` double DEFAULT NULL,
  `CodigoTransaccion4` double NOT NULL DEFAULT '0',
  `CodigoIva4` smallint(6) NOT NULL,
  `Año` int(11) DEFAULT NULL,
  `Serie` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Factura` int(11) DEFAULT NULL,
  `SuFacturaNo` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `FechaFactura` date DEFAULT NULL,
  `ImporteFactura` double DEFAULT NULL,
  `TipoFactura` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CodigoCuentaFactura` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CifDni` varchar(13) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Nombre` varchar(35) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CodigoRetencion` int(2) DEFAULT NULL,
  `BaseRetencion` double DEFAULT NULL,
  `PorRetencion` double DEFAULT NULL,
  `ImporteRetencion` double DEFAULT NULL,
  `SiglaNacion` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'ES',
  `EjercicioFactura` int(2) DEFAULT NULL,
  `FechaOperacion` date DEFAULT NULL,
  `Exclusion347` int(2) DEFAULT NULL,
  `MantenerAsiento` int(2) DEFAULT '-1',
  `Metalico347` int(2) DEFAULT NULL,
  `ClaveOperacionFactura` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TipoRectificativa` int(2) DEFAULT NULL,
  `FechaFacturaOriginal` date DEFAULT NULL,
  `CuotaIvaOriginal` double DEFAULT NULL,
  `BaseImponibleOriginal` double DEFAULT NULL,
  `ClaseAbonoRectificativas` int(2) DEFAULT NULL,
  `RecargoEquivalenciaOriginal` double DEFAULT NULL,
  `LibreA1` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `IvaDeducible1` int(2) NOT NULL DEFAULT '-1',
  `IvaDeducible2` int(2) NOT NULL DEFAULT '-1',
  `IvaDeducible3` int(2) NOT NULL DEFAULT '-1',
  `IvaDeducible4` int(2) NOT NULL DEFAULT '-1',
  `FechaGrabacion` date DEFAULT NULL,
  `Intracomunitaria` tinyint(1) DEFAULT '0',
  `moveData` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`id`),
  CONSTRAINT `movContaIVA_fk1` FOREIGN KEY (`id`) REFERENCES `vn`.`XDiario` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Informa del valor de los campos de IVA para enlazar en la tabla vn.movConta';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pgcToSage`
--

DROP TABLE IF EXISTS `pgcToSage`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pgcToSage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `taxCodeSage` int(11) NOT NULL,
  `transactionCode` int(11) NOT NULL,
  `accountTaxInput` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `accountTaxOutput` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COMMENT='Tabla relaciona cuentas pgc con Código de IVA y Código de Transacción en Sage';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `planCuentasPGC`
--

DROP TABLE IF EXISTS `planCuentasPGC`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `planCuentasPGC` (
  `CodigoEmpresa` smallint(6) NOT NULL,
  `CodigoCuenta` varchar(15) CHARACTER SET utf8 NOT NULL,
  `Cuenta` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `ClienteOProveedor` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `CodigoDivisa` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `IndicadorProrrata` smallint(6) NOT NULL DEFAULT '0',
  `TipoPlanCuentaIME` smallint(6) NOT NULL DEFAULT '2',
  `StatusAnalitica` smallint(6) NOT NULL DEFAULT '0',
  `AnaCodigoCuenta` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `StatusTraspasadoIME` tinyint(4) NOT NULL DEFAULT '0',
  `TipoImportacionIME` tinyint(4) NOT NULL DEFAULT '0',
  `CierrePatrimonio_` smallint(6) NOT NULL DEFAULT '0',
  `CuentaPatrimonio_` varchar(15) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `CuentaVarios` smallint(6) NOT NULL DEFAULT '0',
  `TodasLasActividades` smallint(6) NOT NULL DEFAULT '0',
  `ValorDelegacion` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ValorDepartamento` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ValorProyecto` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ValorCanal` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ValorSeccion` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`CodigoEmpresa`,`CodigoCuenta`),
  KEY `CodigoCuenta` (`CodigoCuenta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `supplierLastThreeMonths`
--

DROP TABLE IF EXISTS `supplierLastThreeMonths`;
/*!50001 DROP VIEW IF EXISTS `supplierLastThreeMonths`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `supplierLastThreeMonths` (
  `supplierFk` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Dumping events for database 'sage'
--

--
-- Dumping routines for database 'sage'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `accountingMovements_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 `accountingMovements_add`(vYear INT, vCompanyFk INT)
BEGIN
/**
 * Traslada la info de contabilidad generada en base a vn.XDiario a la tabla sage.movConta para poder ejecutar posteriormente el proceso de importación de datos de SQL Server
 * Solo traladará los asientos marcados con el campo vn.XDiario.enlazadoSage = FALSE
 * @vYear Año contable del que se quiere trasladar la información
 * @vCompanyFk Empresa de la que se quiere trasladar datos
 */
	DECLARE vDatedFrom DATETIME;
	DECLARE vDatedTo DATETIME;
	DECLARE vDuaTransactionFk INT;
	DECLARE vTaxImportFk INT;
	DECLARE vTaxImportReducedFk INT;
	DECLARE vTaxImportSuperReducedFk INT;
	DECLARE vTransactionExportFk INT;
	DECLARE vTransactionExportTaxFreeFk INT;
	DECLARE vSerialDua VARCHAR(1) DEFAULT 'D';
	DECLARE vInvoiceTypeInformativeCode VARCHAR(1);
	DECLARE vCountryCanariasCode, vCountryCeutaMelillaCode VARCHAR(2) ;
	DECLARE vBookEntries TEXT;

	SELECT SiglaNacion INTO vCountryCanariasCode
		FROM Naciones 
		WHERE Nacion ='ISLAS CANARIAS';

	SELECT SiglaNacion INTO vCountryCeutaMelillaCode
		FROM Naciones 
		WHERE Nacion ='CEUTA Y MELILLA';

	SELECT CodigoTransaccion INTO vDuaTransactionFk
		FROM TiposTransacciones
		WHERE Transaccion = 'Import. bienes y serv. corrientes pdte. liquidar';
	
	SELECT CodigoIva INTO vTaxImportFk 
		FROM TiposIva
		WHERE Iva = 'IVA 21% importaciones';		
		
	SELECT CodigoIva INTO vTaxImportReducedFk 
		FROM TiposIva
		WHERE Iva = 'IVA 10% importaciones';

	SELECT CodigoIva INTO vTaxImportSuperReducedFk 
		FROM TiposIva
		WHERE Iva = 'H.P. IVA Soportado Impor 4%';
		
	SELECT CodigoTransaccion INTO vTransactionExportFk
		FROM TiposTransacciones
		WHERE Transaccion = 'Exportaciones definitivas';

	SELECT CodigoTransaccion INTO vTransactionExportTaxFreeFk
		FROM TiposTransacciones
		WHERE Transaccion = 'Envíos definitivos a Canarias, Ceuta y Melilla';

	SELECT codeSage INTO vInvoiceTypeInformativeCode
		FROM invoiceType WHERE code ='informative';	

	SELECT CAST(CONCAT(vYear, '-01-01') AS DATETIME), util.dayEnd(CAST(CONCAT(vYear, '-12-31') AS DATE))
		INTO vDatedFrom, vDatedTo;
	
	TRUNCATE movContaIVA;
	
	DELETE FROM movConta 
		WHERE enlazadoSage = FALSE 
			AND Asiento <> 1 ;
			
	CALL clientSupplier_add(vCompanyFk);
	CALL pgc_add(vCompanyFk);
	CALL invoiceOut_manager(vYear, vCompanyFk);
 	CALL invoiceIn_manager(vYear, vCompanyFk);
 	
	INSERT INTO movConta(TipoEntrada,
						Ejercicio,
						CodigoEmpresa,
						Asiento,
						CargoAbono,
						CodigoCuenta,
						Contrapartida,
						FechaAsiento,
						Comentario,
						ImporteAsiento,
						NumeroPeriodo,
						FechaGrabacion,
						CodigoDivisa,
						ImporteCambio,
						ImporteDivisa,
						FactorCambio,
						IdProcesoIME,
						TipoCarteraIME,
						TipoAnaliticaIME,
						StatusTraspasadoIME,
						TipoImportacionIME,
						Metalico347,
						BaseIva1,
						PorBaseCorrectora1,
						PorIva1,
						CuotaIva1,
						PorRecargoEquivalencia1,
						RecargoEquivalencia1,
						CodigoTransaccion1,
						BaseIva2,
						PorBaseCorrectora2,
						PorIva2,
						CuotaIva2,
						PorRecargoEquivalencia2,
						RecargoEquivalencia2,
						CodigoTransaccion2,
						BaseIva3,
						PorBaseCorrectora3,
						PorIva3,
						CuotaIva3,
						PorRecargoEquivalencia3,
						RecargoEquivalencia3,
						CodigoTransaccion3,
						BaseIva4,
						PorBaseCorrectora4,
						PorIva4,
						CuotaIva4,
						PorRecargoEquivalencia4,
						RecargoEquivalencia4,
						CodigoTransaccion4,
						Año,
						Serie,
						Factura,
						SuFacturaNo,
						FechaFactura,
						ImporteFactura,
						TipoFactura,
						CodigoCuentaFactura,
						CifDni,
						Nombre,
						CodigoRetencion,
						BaseRetencion,
						PorRetencion,
						ImporteRetencion,
						SiglaNacion,
						EjercicioFactura,
						FechaOperacion,
						Exclusion347,
						MantenerAsiento,
						ClaveOperacionFactura_,
						TipoRectificativa,
						FechaFacturaOriginal,
						BaseImponibleOriginal,
						CuotaIvaOriginal,
						ClaseAbonoRectificativas,
						RecargoEquivalenciaOriginal, 
						LibreA1,
						CodigoIva1,
						CodigoIva2,
						CodigoIva3,
						CodigoIva4,
						IvaDeducible1,
						IvaDeducible2,
						IvaDeducible3,
						IvaDeducible4,
						Intracomunitaria
					)
		SELECT 'EN' TipoEntrada,
				YEAR(x.FECHA) Ejercicio, 
				IF (@@hostname = 'db', c.companyCode, companyCodeTest) AS CodigoEmpresa,					 
				x.ASIEN Asiento,
				IF(EURODEBE <> 0 OR (EURODEBE = 0 AND EUROHABER IS NULL), 'D', 'H') CargoAbono,
				x.SUBCTA CodigoCuenta,
				x.CONTRA Contrapartida,
				x.FECHA FechaAsiento,
				x.CONCEPTO Comentario,
				IF(x.EURODEBE, x.EURODEBE, x.EUROHABER) ImporteAsiento,
				MONTH(x.FECHA) NumeroPeriodo,
				IF(sub2.FECREGCON IS NULL, sub2.FECHA_EX, sub2.FECREGCON) FechaGrabacion,
				IF(x.CAMBIO, IFNULL(mci.CodigoDivisa, sub3.code), '') CodigoDivisa,
				x.CAMBIO ImporteCambio,
				IFNULL(x.DEBEME, x.HABERME) ImporteDivisa,
				IF(x.CAMBIO, TRUE, FALSE) FactorCambio,
				NULL IdProcesoIME,
				0 TipoCarteraIME,
				0 TipoAnaliticaIME,
				0 StatusTraspasadoIME,
				0 TipoImportacionIME,
				x.METAL Metalico347,
				mci.BaseIva1,
				mci.PorBaseCorrectora1,
				mci.PorIva1,
				mci.CuotaIva1,
				mci.PorRecargoEquivalencia1,
				mci.RecargoEquivalencia1,
				mci.CodigoTransaccion1,
				mci.BaseIva2,
				mci.PorBaseCorrectora2,
				mci.PorIva2,
				mci.CuotaIva2,
				mci.PorRecargoEquivalencia2,
				mci.RecargoEquivalencia2,
				mci.CodigoTransaccion2,
				mci.BaseIva3,
				mci.PorBaseCorrectora3,
				mci.PorIva3,
				mci.CuotaIva3,
				mci.PorRecargoEquivalencia3,
				mci.RecargoEquivalencia3,
				mci.CodigoTransaccion3,
				mci.BaseIva4,
				mci.PorBaseCorrectora4,
				mci.PorIva4,
				mci.CuotaIva4,
				mci.PorRecargoEquivalencia4,
				mci.RecargoEquivalencia4,
				mci.CodigoTransaccion4,
				mci.Año,
				mci.Serie,
				mci.Factura,
				mci.SuFacturaNo,
				mci.FechaFactura,
				mci.ImporteFactura,
				mci.TipoFactura,
				mci.CodigoCuentaFactura,
				mci.CifDni,
				mci.Nombre,
				mci.CodigoRetencion,
				mci.BaseRetencion,
				mci.PorRetencion,
				mci.ImporteRetencion,
				mci.SiglaNacion,
				mci.EjercicioFactura,
				mci.FechaOperacion,
				mci.Exclusion347,
				TRUE,
				mci.ClaveOperacionFactura,
				mci.TipoRectificativa,
				mci.FechaFacturaOriginal,
				mci.BaseImponibleOriginal,
				mci.CuotaIvaOriginal,
				mci.ClaseAbonoRectificativas,
				mci.RecargoEquivalenciaOriginal,
				mci.LibreA1,
				mci.CodigoIva1,
				mci.CodigoIva2,
				mci.CodigoIva3,
				mci.CodigoIva4,
				mci.IvaDeducible1,
				mci.IvaDeducible2,
				mci.IvaDeducible3,
				mci.IvaDeducible4,
				mci.Intracomunitaria
			FROM vn.XDiario x
				JOIN vn.company c ON c.id = x.empresa_id
				LEFT JOIN movContaIVA mci ON mci.id = x.id 
				LEFT JOIN (SELECT * 
							FROM (SELECT DISTINCT ASIEN, FECREGCON, FECHA_EX
									FROM vn.XDiario
										WHERE enlazadoSage = FALSE 
									ORDER BY ASIEN, FECREGCON DESC, FECHA_EX DESC
									LIMIT 10000000000000000000
								) sub GROUP BY ASIEN
						 )sub2 ON sub2.ASIEN = x.ASIEN 
				 LEFT JOIN ( SELECT DISTINCT(account),cu.code
								FROM vn.bank b
									JOIN vn.currency cu ON cu.id = b.currencyFk
								WHERE cu.code <> 'EUR' -- no se informa cuando la divisa en EUR
							)sub3 ON sub3.account = x.SUBCTA			 
			WHERE x.enlazadoSage = FALSE 
				AND x.empresa_id = vCompanyFk
				AND x.FECHA BETWEEN vDatedFrom AND vDatedTo;

-- Metálicos
	UPDATE movConta m
			JOIN (SELECT Asiento, 
						c.socialName name, 
						c.fi, 
						n.SiglaNacion, 
						m.CodigoCuenta, 
						m.Contrapartida
					FROM movConta m 
						LEFT JOIN vn.client c ON c.id = IF(m.CargoAbono = 'H',
							CAST(SUBSTRING(m.CodigoCuenta, 3, LENGTH(m.CodigoCuenta)) AS UNSIGNED),
							CAST(SUBSTRING(m.Contrapartida, 3, LENGTH(m.Contrapartida)) AS UNSIGNED))
						LEFT JOIN Naciones n ON n.countryFk = c.countryFk 
					WHERE m.Metalico347 = TRUE 
						AND m.enlazadoSage = FALSE 
				)sub ON m.Asiento = sub.Asiento 
		SET m.Metalico347 = TRUE,
			m.TipoFactura = vInvoiceTypeInformativeCode,
			m.CifDni = sub.fi,
			m.Nombre = sub.name,
			m.SiglaNacion = sub.SiglaNacion 
		WHERE m.enlazadoSage = FALSE;

	UPDATE movConta m
		SET m.Metalico347 = FALSE,
			m.TipoFactura = ''
		WHERE m.CargoAbono = 'D' 
			AND m.enlazadoSage = FALSE;	 

-- Elimina cuentas de cliente/proveedor que no se utilizarán en la importación
	DELETE cp 
		FROM clientesProveedores cp
			LEFT JOIN movConta mc ON mc.codigoCuenta = cp.codigoCuenta 
				AND mc.enlazadoSage = FALSE
		WHERE mc.codigoCuenta IS NULL;

-- Elimina cuentas contables que no se utilizarán en la importación
	DELETE pc 
		FROM planCuentasPGC pc 
			LEFT JOIN movConta mc ON mc.codigoCuenta = pc.codigoCuenta
				AND mc.enlazadoSage = FALSE
		WHERE mc.codigoCuenta IS NULL;

-- DUAS
	UPDATE movConta mci
			JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
			JOIN TiposIva ti ON ti.CodigoIva = x.IVA
			JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8_general_ci
		SET mci.BaseIva1 = x.BASEEURO,
			mci.PorIva1 = x.IVA,
			mci.CuotaIva1 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2)),
			mci.CodigoTransaccion1 = vDuaTransactionFk,
			mci.CodigoIva1 = vTaxImportReducedFk,
			mci.IvaDeducible1 = TRUE,
			mci.FechaFacturaOriginal = x.FECHA_EX,
			mci.SuFacturaNo = x.FACTURAEX,
			mci.FechaOperacion = x.FECHA_OP,
			mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
		WHERE pm.description = 'HP Iva pendiente'
			AND mci.enlazadoSage = FALSE
			AND x.SERIE = vSerialDua COLLATE utf8_general_ci
			AND ti.Iva = 'I.V.A. 10% Nacional';

	UPDATE movConta mci
			JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
			JOIN TiposIva ti ON ti.CodigoIva = x.IVA
			JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8_general_ci
		SET mci.BaseIva2 = x.BASEEURO ,
			mci.PorIva2 = x.IVA,
			mci.CuotaIva2 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10,2)),
			mci.CodigoTransaccion2 = vDuaTransactionFk ,
			mci.CodigoIva2 = vTaxImportFk,
			mci.IvaDeducible2 = TRUE,
			mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
		WHERE pm.description = 'HP Iva pendiente'
			AND mci.enlazadoSage = FALSE
			AND x.SERIE = vSerialDua COLLATE utf8_general_ci
			AND ti.Iva = 'I.V.A. 21%';
	
	UPDATE movConta mci
			JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
			JOIN TiposIva ti ON ti.CodigoIva = x.IVA
			JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8_general_ci
		SET mci.BaseIva3 = x.BASEEURO ,
			mci.PorIva3 = x.IVA,
			mci.CuotaIva3 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10,2)),
			mci.CodigoTransaccion3 = vDuaTransactionFk ,
			mci.CodigoIva3 = vTaxImportSuperReducedFk,
			mci.IvaDeducible3 = TRUE,
			mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
		WHERE pm.description = 'HP Iva pendiente'
			AND mci.enlazadoSage = FALSE
			AND x.SERIE = vSerialDua COLLATE utf8_general_ci
			AND ti.Iva = 'I.V.A. 4%';

-- Rectificativas
	UPDATE movConta mci 
			JOIN (SELECT x.ASIEN, x.FECHA_RT, x.SERIE_RT, x.FACTU_RT 
					FROM movConta mci 
						JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
					WHERE mci.TipoRectificativa > 0 
						AND	mci.enlazadoSage = FALSE 
						AND	x.FACTU_RT IS NOT NULL
					GROUP BY x.ASIEN
				) sub ON sub.ASIEN = mci.Asiento
		SET mci.EjercicioFacturaOriginal = YEAR(sub.FECHA_RT), 
			mci.SerieFacturaOriginal = sub.SERIE_RT,	
			mci.NumeroFacturaOriginal = sub.FACTU_RT	
		WHERE mci.TipoRectificativa > 0 AND 
			mci.enlazadoSage = FALSE ;

-- Exportaciones Andorras y Canarias cambia TT (la cuenta es compartida)
	UPDATE movConta mci
		SET CodigoTransaccion1 = vTransactionExportTaxFreeFk,
			CodigoTransaccion2 = IF(CodigoTransaccion2 = 0, 0, vTransactionExportTaxFreeFk),
			CodigoTransaccion3 = IF(CodigoTransaccion3 = 0, 0, vTransactionExportTaxFreeFk),
			CodigoTransaccion4 = IF(CodigoTransaccion4 = 0, 0, vTransactionExportTaxFreeFk)
		WHERE enlazadoSage = FALSE 
			AND (CodigoTransaccion1 = vTransactionExportFk 
				OR CodigoTransaccion2 = vTransactionExportFk 
				OR CodigoTransaccion3 = vTransactionExportFk 
				OR CodigoTransaccion4 = vTransactionExportFk) 
			AND SiglaNacion IN (vCountryCanariasCode COLLATE utf8_general_ci, vCountryCeutaMelillaCode COLLATE utf8_general_ci);

	UPDATE movConta mc
		SET CodigoDivisa = 'USD',
			FactorCambio = TRUE,
			ImporteCambio = ABS( CAST( IF( ImporteDivisa <> 0 AND ImporteCambio = 0, ImporteAsiento / ImporteDivisa, ImporteCambio) AS DECIMAL( 10, 2)))
		WHERE enlazadoSage = FALSE 
			AND (ImporteCambio <> 0 OR ImporteDivisa <> 0 OR FactorCambio);

	UPDATE movConta mc
		SET importeDivisa= -importeDivisa
		WHERE enlazadoSage = FALSE 
			AND importeDivisa > 0 
			AND ImporteAsiento < 0;

	-- Comprobación que los importes e ivas sean correctos, avisa vía CAU
	SELECT GROUP_CONCAT(Asiento ORDER BY Asiento ASC SEPARATOR ' \n\r') INTO vBookEntries
		FROM(SELECT sub.Asiento
				FROM (SELECT mc.Asiento, SUM(mc.ImporteAsiento) amount
						FROM movConta mc
						WHERE mc.enlazadoSage = FALSE
						GROUP BY mc.Asiento)sub
					JOIN (SELECT x.ASIEN, SUM(IFNULL(x.EURODEBE,0) + IFNULL(x.EUROHABER,0)) amount
							FROM vn.XDiario x 
								WHERE x.enlazadoSage = FALSE
							GROUP BY ASIEN)sub2 ON sub2.ASIEN = sub.Asiento
				WHERE sub.amount <> sub2.amount
			UNION ALL	
			SELECT sub.Asiento
				FROM (SELECT Asiento, SUM(BaseIva1 + BaseIva2 + BaseIva3 + BaseIva4) amountTaxableBase
						FROM movConta
						WHERE TipoFactura <> 'I'
							AND enlazadoSage = FALSE
						GROUP BY Asiento) sub
					JOIN (SELECT ASIEN, SUM(BASEEURO) amountTaxableBase
							FROM (SELECT ASIEN, SUM(BASEEURO) BASEEURO
									FROM vn.XDiario 
									WHERE FACTURA 
										AND auxiliar <> '*'
										AND enlazadoSage = FALSE
									GROUP BY FACTURA, ASIEN)sub3
							GROUP BY ASIEN) sub2 ON sub2.ASIEN = sub.Asiento
							WHERE sub.amountTaxableBase<>sub2.amountTaxableBase 
								AND sub.amountTaxableBase/2 <> sub2.amountTaxableBase) sub;

	IF vBookEntries IS NOT NULL THEN
		CALL vn.mail_insert('cau@verdnatura.es, administracion@verdnatura.es',
			'noreply@verdnatura.es',
			CONCAT('Asientos contables importados incorrectamente'),
			CONCAT('<div><h2>Existen asientos que difieren entre la info. de XDiario y la que se ha importado a Sage.</h2>
					Asientos nº ', vBookEntries, '</div>'));
	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 `clientSupplier_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 `clientSupplier_add`(vCompanyFk INT)
BEGIN
/**
 * Prepara los datos de clientes y proveedores para exportarlos a Sage 
 * @vCompanyFk Empresa dela que se quiere trasladar datos
 */
	DECLARE vCountryCeutaMelillaFk INT;
	DECLARE vCountryCanariasCode, vCountryCeutaMelillaCode VARCHAR(2);

	SELECT SiglaNacion INTO vCountryCanariasCode
		FROM Naciones 
		WHERE Nacion ='ISLAS CANARIAS';

	SELECT CodigoNacion, SiglaNacion INTO vCountryCeutaMelillaFk, vCountryCeutaMelillaCode
		FROM Naciones 
		WHERE Nacion ='CEUTA Y MELILLA';

	TRUNCATE TABLE clientesProveedores;

	INSERT INTO clientesProveedores
			(CodigoEmpresa,
			ClienteOProveedor,
			CodigoClienteProveedor,
			RazonSocial,
			Nombre,
			Domicilio,
			CodigoCuenta,
			CifDni,
			CifEuropeo,
			CodigoPostal,
			Municipio,
			CodigoProvincia,
			Provincia,
			CodigoNacion,
			SiglaNacion,
			PersonaFisicaJuridica,
			TipoDocumentoPersona,
			CodigoIva,
			Nacion,
			Telefono,
			Telefono2,
			CodigoTransaccion,
			CodigoRetencion,
			Email1,
			iban)
		SELECT 
			IF (@@hostname = 'db', co.companyCode, co.companyCodeTest),
			'C',
			c.id,
			c.socialName,
			c.socialName,
			IFNULL(c.street, ''),
			c.accountingAccount,
			TRIM(IF(cu.code = LEFT(c.fi, 2), MID(c.fi, 3, LENGTH(c.fi)-1), c.fi)),
			IF(n.NacionCEE,TRIM(IF(cu.code = LEFT(c.fi, 2), c.fi, CONCAT(cu.code,c.fi))) , ''),
			IFNULL(c.postcode, ''),
			IFNULL(c.city, ''),
			IFNULL(pr.CodigoProvincia, ''),
			IFNULL(p.name, ''),
			IF(n.SiglaNacion = vCountryCanariasCode COLLATE utf8_general_ci, IF(@isCeutaMelilla := IF(pr.Provincia IN ('CEUTA', 'MELILLA'), TRUE, FALSE), vCountryCeutaMelillaFk, IF (@isCanarias, vCountryCanariasCode, n.CodigoNacion)), n.CodigoNacion),
			IF(n.SiglaNacion = vCountryCanariasCode COLLATE utf8_general_ci, IF(@isCeutaMelilla, vCountryCeutaMelillaCode, IF (@isCanarias, vCountryCanariasCode, n.SiglaNacion)), n.SiglaNacion),
			IF((c.fi REGEXP '^([[:blank:]]|[[:digit:]])'), 'J','F'),
			IF(cu.code IN('ES','EX'), 
				1, 
				IF((cu.isUeeMember AND c.isVies), 2, 4)),
			IFNULL(c.taxTypeSageFk,0),
			IF(n.SiglaNacion = vCountryCanariasCode COLLATE utf8_general_ci, 
				IF(@isCeutaMelilla, 'CEUTA Y MELILLA', IF (@isCanarias, 'ISLAS CANARIAS', n.Nacion)), 
				n.Nacion),
			IFNULL(c.phone, ''),
			IFNULL(c.mobile, ''),
			IFNULL(c.transactionTypeSageFk, 0),
			'0',
			IFNULL(SUBSTR(c.email, 1, LOCATE(',', CONCAT(c.email, ','))-1), ''),
			IFNULL(c.iban, '')
		FROM vn.`client` c
			JOIN clientLastTwoMonths clm ON clm.clientFk = c.id
			JOIN vn.company co ON co.id = clm.companyFk
			LEFT JOIN vn.country cu ON cu.id = c.countryFk
			LEFT JOIN Naciones n ON n.countryFk = cu.id
			LEFT JOIN vn.province p ON p.id = c.provinceFk
			LEFT JOIN Provincias pr ON pr.provinceFk = p.id
		WHERE c.isRelevant 
			AND co.id = vCompanyFk
		UNION ALL
		SELECT IF (@@hostname = 'db', c.companyCode, companyCodeTest),
				'P',
				s.id,
				s.name,
				s.name,
				IFNULL(s.street, ''),
				s.account,
				TRIM(IF(co.code = LEFT(s.nif, 2), MID(s.nif, 3, LENGTH(s.nif) - 1), s.nif)),
				IF(n.NacionCEE, TRIM(CONCAT(co.code, IF(co.code = LEFT(s.nif, 2), MID(s.nif, 3, LENGTH(s.nif) - 1), s.nif))), ''),
				IFNULL(s.postCode,''),
				IFNULL(s.city, ''),
				IFNULL(pr.CodigoProvincia, ''),
				IFNULL(p.name, ''),
				n.CodigoNacion,
				n.SiglaNacion COLLATE utf8_general_ci,
				IF((s.nif REGEXP '^([[:blank:]]|[[:digit:]])'),'J','F'),
				IF(co.country IN ('España', 'España exento'), 1,IF(co.isUeeMember = 1, 2, 4)),
				IFNULL(s.taxTypeSageFk, 0),
				n.Nacion,
				IFNULL(sc.phone, ''),
				IFNULL(sc.mobile, ''),
				IFNULL(s.transactionTypeSageFk, 0),
				IFNULL(s.withholdingSageFk, '0'),
				IFNULL(SUBSTR(sc.email, 1, (COALESCE(NULLIF(LOCATE(',', sc.email), 0), 99) - 1)), ''),
				IFNULL(iban, '')
			FROM vn.supplier s
				JOIN supplierLastThreeMonths pl ON pl.supplierFk = s.id 
				LEFT JOIN vn.country co ON co.id = s.countryFk
				LEFT JOIN Naciones n ON n.countryFk = co.id
				LEFT JOIN vn.province p ON p.id = s.provinceFk
				LEFT JOIN Provincias pr ON pr.provinceFk = p.id
				LEFT JOIN vn.supplierContact sc ON sc.supplierFk = s.id
				LEFT JOIN vn.supplierAccount sa ON sa.supplierFk = s.id
				JOIN vn.company c ON c.id = pl.companyFk
			WHERE c.id = vCompanyFk AND 
				s.isActive AND 
				s.nif <> ''
			GROUP BY pl.supplierFk, pl.companyFk;
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 `invoiceIn_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 `invoiceIn_add`(vInvoiceInFk INT, vXDiarioFk INT)
BEGIN
/**
 * Traslada la info de contabilidad relacionada con las facturas recibidas
 * 
 * @vInvoiceInFk Factura recibida
 * @vXDiarioFk Id tabla XDiario
 */	
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vBase DOUBLE;
	DECLARE vVat DOUBLE;
	DECLARE vRate DOUBLE;
	DECLARE vTransactionCode INT;
	DECLARE vCounter INT DEFAULT 0;
	DECLARE vTransactionCodeOld INT;
	DECLARE vTaxCode INT;
	DECLARE vTaxCodeOld INT;
	DECLARE vOperationCode VARCHAR(1);
	DECLARE vIsIntracommunity BOOL DEFAULT FALSE;
	DECLARE vSerialDua VARCHAR(1) DEFAULT 'D';
	DECLARE vInvoiceTypeReceived VARCHAR(1);
	DECLARE vInvoiceTypeInformative VARCHAR(1);

	DECLARE vCursor CURSOR FOR 
		SELECT it.taxableBase,
				CAST((( it.taxableBase / 100) * t.PorcentajeIva) AS DECIMAL (10,2)),
				t.PorcentajeIva,
				it.transactionTypeSageFk,
				it.taxTypeSageFk,
				t.isIntracommunity,
				tt.ClaveOperacionDefecto 
			FROM vn.invoiceIn i
				JOIN vn.invoiceInTax it ON it.InvoiceInFk = i.id 
				JOIN TiposIva t ON t.CodigoIva = it.taxTypeSageFk
				JOIN TiposTransacciones tt ON tt.CodigoTransaccion = it.transactionTypeSageFk
				LEFT JOIN vn.dua d ON d.id = vInvoiceInFk
			WHERE i.id = vInvoiceInFk 
				AND d.id IS NULL;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	DELETE FROM movContaIVA
		WHERE id = vXDiarioFk;

	SELECT codeSage INTO vInvoiceTypeReceived
		FROM invoiceType WHERE code ='received';

	SELECT codeSage INTO vInvoiceTypeInformative
		FROM invoiceType WHERE code ='informative';

	INSERT INTO movContaIVA(id, LibreA1)
		VALUES (vXDiarioFk, vInvoiceInFk);

	OPEN vCursor;

	l: LOOP
		FETCH vCursor INTO vBase,
				vVat,
				vRate,
				vTransactionCode,
				vTaxCode,
				vIsIntracommunity,
				vOperationCode;
		
		IF vDone THEN 
			LEAVE l;
		END IF;

		SET vTransactionCodeOld = vTransactionCode; 
		SET vTaxCodeOld = vTaxCode; 

		IF vOperationCode IS NOT NULL THEN 
			UPDATE movContaIVA
				SET ClaveOperacionFactura = vOperationCode
				WHERE id = vXDiarioFk;
		END IF;
		
		SET vCounter = vCounter + 1;
		CASE vCounter 
			WHEN 1 THEN
				 UPDATE movContaIVA
					SET BaseIva1 = vBase,
						PorIva1 = vRate,
						CuotaIva1 = vVat,
						CodigoTransaccion1 = vTransactionCode,
						CodigoIva1 = vTaxCode
					WHERE id = vXDiarioFk;

			WHEN 2 THEN
				UPDATE movContaIVA
					SET BaseIva2 = vBase,
						PorIva2 = vRate,
						CuotaIva2 = vVat,
						CodigoTransaccion2 = vTransactionCode,
						CodigoIva2 = vTaxCode
					WHERE id = vXDiarioFk;
			WHEN 3 THEN
				UPDATE movContaIVA
					SET BaseIva3 = vBase,
						PorIva3 = vRate,
						CuotaIva3 = vVat,
						CodigoTransaccion3 = vTransactionCode,
						CodigoIva3 = vTaxCode
					WHERE id = vXDiarioFk;
			WHEN 4 THEN
				UPDATE movContaIVA
					SET BaseIva4 = vBase,
						PorIva4 = vRate,
						CuotaIva4 = vVat,
						CodigoTransaccion4 = vTransactionCode,
						CodigoIva4 = vTaxCode
					WHERE id = vXDiarioFk;
			ELSE
				SELECT vXDiarioFk INTO vXDiarioFk;
		END CASE; 

		IF vIsIntracommunity THEN
			UPDATE movContaIVA
				SET Intracomunitaria = TRUE
				WHERE id = vXDiarioFk;
		END IF;
	
		SET vTransactionCodeOld = vTransactionCode; 
		SET vTaxCodeOld = vTaxCode; 		
		
	END LOOP;

	CLOSE vCursor;
 
	UPDATE movContaIVA mci
			JOIN tmp.invoiceIn ii ON ii.id = vInvoiceInFk
			JOIN vn.XDiario x ON x.id = mci.id
			LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
			JOIN vn.supplier s ON s.id = ii.supplierFk
			JOIN Naciones n ON n.countryFk = s.countryFk
		SET mci.CodigoDivisa = ii.currencyFk,
			mci.Año = YEAR(ii.issued),
			mci.Serie = ii.serial,
			mci.Factura = ii.serialNumber,
			mci.FechaFactura = ii.issued,
			mci.ImporteFactura = IFNULL(mci.BaseIva1, 0) + IFNULL(mci.CuotaIva1, 0) + 
								 IFNULL(mci.BaseIva2, 0) + IFNULL(mci.CuotaIva2, 0) + 
								 IFNULL(mci.BaseIva3, 0) + IFNULL(mci.CuotaIva3, 0) + 
								 IFNULL(mci.BaseIva4, 0) + IFNULL(mci.CuotaIva4, 0),
			mci.TipoFactura = IF(id.id, IF( ii.serial = vSerialDua, vInvoiceTypeReceived, vInvoiceTypeInformative), vInvoiceTypeReceived), 
			mci.CodigoCuentaFactura = x.SUBCTA,
			mci.CifDni = IF(LEFT(TRIM(s.nif), 2) = n.SiglaNacion, SUBSTRING(TRIM(s.nif), 3), s.nif),
			mci.Nombre = s.name,
			mci.SiglaNacion = n.SiglaNacion,
			mci.EjercicioFactura = YEAR(ii.issued),
			mci.FechaOperacion = ii.issued,
			mci.MantenerAsiento = TRUE,
			mci.SuFacturaNo = ii.supplierRef,
			mci.IvaDeducible1 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva1, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
			mci.IvaDeducible2 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva2, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
			mci.IvaDeducible3 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva3, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
			mci.IvaDeducible4 = IF(id.id, FALSE, IF(IFNULL(mci.BaseIva4, FALSE) = FALSE, FALSE, ii.isVatDeductible)),
			mci.FechaFacturaOriginal = x.FECHA_EX
		WHERE mci.id = vXDiarioFk;

	-- RETENCIONES
	UPDATE movContaIVA mci
			JOIN vn.invoiceIn ii ON ii.id = vInvoiceInFk
			JOIN vn.XDiario x ON x.id = mci.id
			JOIN vn.supplier s ON s.id = supplierFk
			JOIN vn.invoiceInTax iit ON iit.invoiceInFk = ii.id
			JOIN vn.expence e ON e.id = iit.expenceFk
			JOIN TiposRetencion t ON t.CodigoRetencion = ii.withholdingSageFk
            LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
			JOIN (SELECT SUM(x2.BASEEURO) taxableBase, SUM(x2.EURODEBE) taxBase
					FROM vn.XDiario x1
						JOIN vn.XDiario x2 ON x1.ASIEN = x2.ASIEN
					WHERE x2.BASEEURO <> 0 
						AND x1.id = vXDiarioFk
				)sub
			JOIN ClavesOperacion co ON co.Descripcion = 'Arrendamiento de locales de negocio'
		SET mci.CodigoRetencion = t.CodigoRetencion,
			mci.ClaveOperacionFactura = IF( t.Retencion = 'ARRENDAMIENTO Y SUBARRENDAMIENTO', co.ClaveOperacionFactura_, mci.ClaveOperacionFactura),
			mci.BaseRetencion = IF (t.Retencion = 'ACTIVIDADES AGRICOLAS O GANADERAS', sub.taxableBase + sub.taxBase, sub.taxableBase),
			mci.PorRetencion = t.PorcentajeRetencion,
			mci.ImporteRetencion = iit.taxableBase * - 1 
		WHERE mci.id = vXDiarioFk 
			AND e.name = 'Retenciones'
            AND id.id IS NULL;

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 `invoiceIn_manager` */;
/*!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_manager`(vYear INT, vCompanyFk INT)
BEGIN
/**
 * Traslada la info de contabilidad relacionada con las facturas recibidas 
 * 
 * @vYear Año contable del que se quiere trasladar la información
 * @vCompany Empresa de la que se quiere trasladar datos 
 */
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vInvoiceFk INT;
	DECLARE vXDiarioFk INT;
	DECLARE vDatedFrom DATETIME;
	DECLARE vDatedTo DATETIME;
	DECLARE vSerialDua VARCHAR(1) DEFAULT 'D';
	DECLARE vAccountVNL VARCHAR(10);
	DECLARE vAccountTaxOutstanding VARCHAR(10);
	DECLARE vInvoiceTypeSended VARCHAR(1);
	DECLARE vCursor CURSOR FOR
		SELECT IFNULL(x.CLAVE, x.FACTURA) invoiceInFk, 
				x.id XDiarioFk
			FROM vn.XDiario x 
				JOIN(SELECT DISTINCT(x.ASIEN)
						FROM vn.XDiario x
							LEFT JOIN vn.invoiceIn ii ON x.CLAVE = ii.id
							LEFT JOIN vn.invoiceInTax it ON it.invoiceInFk = ii.id
						WHERE(it.taxTypeSageFk IS NOT NULL OR x.SERIE = vSerialDua COLLATE utf8_general_ci) 
							AND	x.enlazadoSage = FALSE 
							AND x.FECHA BETWEEN vDatedFrom AND vDatedTo
							AND x.empresa_id = vCompanyFk 
					) sub ON sub.ASIEN = x.ASIEN
			WHERE x.CLAVE IS NOT NULL;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	SELECT CAST(CONCAT(vYear, '-01-01') AS DATETIME), util.dayEnd(CAST(CONCAT(vYear, '-12-31') AS DATE))
		INTO vDatedFrom, vDatedTo;

	SELECT accountingAccount INTO vAccountVNL
		FROM vn.`client`
		WHERE name='VNL';

	SELECT code INTO vAccountTaxOutstanding
		FROM vn.pgcMaster
		WHERE description = 'HP Iva pendiente';

	SELECT codeSage INTO vInvoiceTypeSended
		FROM invoiceType WHERE `code` ='sended';
			
	DROP TEMPORARY TABLE IF EXISTS tmp.invoiceDua;
	CREATE TEMPORARY TABLE tmp.invoiceDua
		SELECT x.id 
			FROM vn.XDiario x
				JOIN vn.company c ON c.id = x.empresa_id
				JOIN (SELECT ASIEN
						FROM vn.XDiario x 
						WHERE x.enlazadoSage = FALSE 
							AND x.SUBCTA = vAccountTaxOutstanding COLLATE utf8_general_ci
							AND	x.FECHA BETWEEN vDatedFrom AND vDatedTo
					)sub ON sub.ASIEN = x.ASIEN
			WHERE NOT x.CONTRA <=> vAccountVNL;

	DROP TEMPORARY TABLE IF EXISTS tmp.invoiceIn;
	CREATE TEMPORARY TABLE tmp.invoiceIn
		SELECT i.id,
				i.supplierRef,
				i.serial COLLATE utf8_general_ci serial,
				i.supplierFk,
				i.issued,
				IF(expenceFkDeductible, FALSE, i.isVatDeductible) isVatDeductible,
				i.serialNumber,
				IF(c.code = 'EUR', '',c.`code`) currencyFk
			FROM vn.invoiceIn i
				JOIN vn.currency c ON c.id = i.currencyFk
			WHERE i.bookEntried  BETWEEN vDatedFrom AND vDatedTo
		UNION ALL 
		SELECT d.id,
				d.code,
				vSerialDua,
				d.companyFk ,
				d.issued,
				FALSE,
				d.id,
				'' -- EUROS
			FROM vn.dua d 
			WHERE d.issued IS NOT NULL 
				AND code IS NOT NULL;

	OPEN vCursor;

	l: LOOP
		FETCH vCursor INTO vInvoiceFk, vXDiarioFk;

		IF vDone THEN 
			LEAVE l;
		END IF;
		CALL invoiceIn_add(vInvoiceFk, vXDiarioFk);
	END LOOP;

	CLOSE vCursor;

	DROP TEMPORARY TABLE tmp.invoiceDua;
	DROP TEMPORARY TABLE tmp.invoiceIn;

	-- ASIENTOS CON IVA SOPORTADO 472. y 477. hay que informar 2 líneas la info de facturas una como tipo de factura emitida y otra como recibida
	DROP TEMPORARY TABLE IF EXISTS tmp.movContaIVA;
	CREATE TEMPORARY TABLE tmp.movContaIVA
		SELECT sub3.id,
			mci.CodigoDivisa,
			mci.BaseIva1,
			mci.PorBaseCorrectora1,
			mci.PorIva1,
			mci.CuotaIva1,
			mci.PorRecargoEquivalencia1,
			mci.RecargoEquivalencia1,
			mci.CodigoTransaccion1,
			mci.CodigoIva1,
			mci.BaseIva2,
			mci.PorBaseCorrectora2,
			mci.PorIva2,
			mci.CuotaIva2,
			mci.PorRecargoEquivalencia2,
			mci.RecargoEquivalencia2,
			mci.CodigoTransaccion2,
			mci.CodigoIva2,
			mci.BaseIva3,
			mci.PorBaseCorrectora3,
			mci.PorIva3,
			mci.CuotaIva3,
			mci.PorRecargoEquivalencia3,
			mci.RecargoEquivalencia3,
			mci.CodigoTransaccion3,
			mci.CodigoIva3,
			mci.BaseIva4,
			mci.PorBaseCorrectora4,
			mci.PorIva4,
			mci.CuotaIva4,
			mci.PorRecargoEquivalencia4,
			mci.RecargoEquivalencia4,
			mci.CodigoTransaccion4,
			mci.CodigoIva4,
			mci.Año,
			mci.Serie,
			mci.Factura,
			mci.SuFacturaNo,
			mci.FechaFactura,
			mci.ImporteFactura,
			vInvoiceTypeSended,
			mci.CodigoCuentaFactura,
			mci.CifDni,
			mci.Nombre,
			mci.CodigoRetencion,
			mci.BaseRetencion,
			mci.PorRetencion,
			mci.ImporteRetencion,
			mci.SiglaNacion,
			mci.EjercicioFactura,
			x.FECHA,
			mci.Exclusion347,
			mci.MantenerAsiento,
			mci.Metalico347,
			mci.ClaveOperacionFactura,
			mci.TipoRectificativa,
			mci.FechaFacturaOriginal,
			mci.CuotaIvaOriginal,
			mci.BaseImponibleOriginal,
			mci.ClaseAbonoRectificativas,
			mci.RecargoEquivalenciaOriginal,
			mci.LibreA1,
			mci.IvaDeducible1,
			mci.IvaDeducible2,
			mci.IvaDeducible3,
			mci.IvaDeducible4,
			mci.FechaGrabacion,
			mci.Intracomunitaria,
			mci.moveData
		FROM movContaIVA mci
			JOIN vn.XDiario x ON x.id = mci.id
			JOIN (SELECT x.ASIEN, x.id
					FROM vn.XDiario x
						JOIN(SELECT DISTINCT(x.ASIEN) ASIEN
								FROM vn.XDiario x 
									JOIN (SELECT DISTINCT(ASIEN)
											FROM vn.XDiario x
											WHERE SUBCTA LIKE '472%' 
												AND	x.enlazadoSage = FALSE
												AND x.empresa_id = vCompanyFk
												AND	x.FECHA BETWEEN vDatedFrom AND vDatedTo
										) sub ON sub.ASIEN = x.ASIEN
								WHERE x.SUBCTA LIKE '477%'
							)sub2 ON sub2.ASIEN = x.ASIEN
					WHERE x.CONTRA IS NOT NULL 
						AND x.SUBCTA LIKE '477%'
					GROUP BY x.ASIEN
				 )sub3 ON sub3.ASIEN = x.ASIEN;
	 
	 INSERT INTO movContaIVA
			(`id`,
			`CodigoDivisa`,
			`BaseIva1`,
			`PorBaseCorrectora1`,
			`PorIva1`,
			`CuotaIva1`,
			`PorRecargoEquivalencia1`,
			`RecargoEquivalencia1`,
			`CodigoTransaccion1`,
			`CodigoIva1`,
			`BaseIva2`,
			`PorBaseCorrectora2`,
			`PorIva2`,
			`CuotaIva2`,
			`PorRecargoEquivalencia2`,
			`RecargoEquivalencia2`,
			`CodigoTransaccion2`,
			`CodigoIva2`,
			`BaseIva3`,
			`PorBaseCorrectora3`,
			`PorIva3`,
			`CuotaIva3`,
			`PorRecargoEquivalencia3`,
			`RecargoEquivalencia3`,
			`CodigoTransaccion3`,
			`CodigoIva3`,
			`BaseIva4`,
			`PorBaseCorrectora4`,
			`PorIva4`,
			`CuotaIva4`,
			`PorRecargoEquivalencia4`,
			`RecargoEquivalencia4`,
			`CodigoTransaccion4`,
			`CodigoIva4`,
			`Año`,
			`Serie`,
			`Factura`,
			`SuFacturaNo`,
			`FechaFactura`,
			`ImporteFactura`,
			`TipoFactura`,
			`CodigoCuentaFactura`,
			`CifDni`,
			`Nombre`,
			`CodigoRetencion`,
			`BaseRetencion`,
			`PorRetencion`,
			`ImporteRetencion`,
			`SiglaNacion`,
			`EjercicioFactura`,
			`FechaOperacion`,
			`Exclusion347`,
			`MantenerAsiento`,
			`Metalico347`,
			`ClaveOperacionFactura`,
			`TipoRectificativa`,
			`FechaFacturaOriginal`,
			`CuotaIvaOriginal`,
			`BaseImponibleOriginal`,
			`ClaseAbonoRectificativas`,
			`RecargoEquivalenciaOriginal`,
			`LibreA1`,
			`IvaDeducible1`,
			`IvaDeducible2`,
			`IvaDeducible3`,
			`IvaDeducible4`,
			`FechaGrabacion`,
			`Intracomunitaria`,
			`moveData`)
		SELECT * 
			FROM tmp.movContaIVA;
			
	DROP TEMPORARY TABLE tmp.movContaIVA;

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 `invoiceOut_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 `invoiceOut_add`(IN vInvoiceOutFk INT, IN vXDiarioFk INT)
BEGIN
/**
 * Traslada la info de contabilidad relacionada con las facturas emitidas 
 * 
 * @vYear Año contable del que se quiere trasladar la información
 * @vCompany Empresa de la que se quiere trasladar datos 
 */
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vMaxLengthName INT DEFAULT 35;
	DECLARE vBase DOUBLE;
	DECLARE vVat DOUBLE;
	DECLARE vRate DOUBLE;
	DECLARE vMod347 DOUBLE;
	DECLARE vTaxEqu DOUBLE;
	DECLARE vRateEqu DOUBLE;
	DECLARE vTransactionCode INT;
	DECLARE vCounter INT DEFAULT 0;
	DECLARE vInvoiceOutCorrectedFk INT;
	DECLARE vTaxCode INT;
	DECLARE vIsIntracommunity BOOL DEFAULT FALSE;
	DECLARE vInvoiceTypeSended VARCHAR(1);
	DECLARE vOperationCode VARCHAR(1);
	
	DECLARE vCursor CURSOR FOR
		SELECT oit.taxableBase, 
				oit.vat, 
				pgc.rate, 
				pgc.mod347, 
				pgcRE.rate, 
				oitRE.vat, 
				tc.transactionCode,
				tc.taxCode,
				tc.isIntracommunity,
				tc.operationcode
			FROM vn.invoiceOutTax oit
				JOIN vn.pgc ON pgc.code = oit.pgcFk
				LEFT JOIN vn.pgcEqu e ON e.vatFk = oit.pgcFk
				LEFT JOIN vn.pgcEqu eRE ON eRE.equFk = oit.pgcFk
				LEFT JOIN vn.invoiceOutTax oitRE ON oitRE.invoiceOutFk = oit.invoiceOutFk 
					AND oitRE.pgcFk = e.equFk
				LEFT JOIN vn.pgc pgcRE ON pgcRE.code = oitRE.pgcFk
				LEFT JOIN vn.taxCode tc ON tc.code = pgc.code COLLATE 'utf8_general_ci'
			WHERE eRE.equFk IS NULL
				AND oit.invoiceOutFk = vInvoiceOutFk
			GROUP BY pgc.code;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	SELECT codeSage INTO vInvoiceTypeSended
		FROM invoiceType WHERE code ='sended';
	
	DELETE FROM movContaIVA
		WHERE id = vXDiarioFk;
	
	INSERT INTO movContaIVA(id) VALUES (vXDiarioFk);

	OPEN vCursor;

	l: LOOP
		FETCH vCursor INTO vBase,
							vVat,
							vRate,
							vMod347,
							vTaxEqu,
							vRateEqu,
							vTransactionCode,
							vTaxCode,
							vIsIntracommunity,
							vOperationCode;

		IF vDone THEN 
			LEAVE l;
		END IF;

		SET vCounter = vCounter + 1;
		
		CASE vCounter 
			WHEN 1 THEN
				UPDATE movContaIVA
					SET BaseIva1 = vBase,
						PorIva1 = vRate,
						CuotaIva1 = vVat,
						PorRecargoEquivalencia1 = vTaxEqu,
						RecargoEquivalencia1 = vRateEqu,
						CodigoTransaccion1 = vTransactionCode,
						CodigoIva1 = vTaxCode
					WHERE id = vXDiarioFk;
			WHEN 2 THEN
				UPDATE movContaIVA
					SET BaseIva2 = vBase,
						PorIva2 = vRate,
						CuotaIva2 = vVat,
						PorRecargoEquivalencia2 = vTaxEqu,
						RecargoEquivalencia2 =vRateEqu,
						CodigoTransaccion2 = vTransactionCode,
						CodigoIva2 = vTaxCode
					WHERE id = vXDiarioFk;
			WHEN 3 THEN
				UPDATE movContaIVA
					SET BaseIva3 = vBase,
						PorIva3 = vRate,
						CuotaIva3 = vVat,
						PorRecargoEquivalencia3 = vTaxEqu,
						RecargoEquivalencia3 = vRateEqu,
						CodigoTransaccion3 = vTransactionCode,
						CodigoIva3 = vTaxCode
					WHERE id = vXDiarioFk;
			WHEN 4 THEN
				UPDATE movContaIVA
					SET BaseIva4 = vBase,
						PorIva4 = vRate,
						CuotaIva4 = vVat,
						PorRecargoEquivalencia4 = vTaxEqu,
						RecargoEquivalencia4 = vRateEqu,
						CodigoTransaccion4 = vTransactionCode,
						CodigoIva4 = vTaxCode
					WHERE id = vXDiarioFk;
		END CASE; 

		UPDATE movContaIVA
			SET Exclusion347 = NOT vMod347,
				Intracomunitaria = vIsIntracommunity,
				ClaveOperacionFactura = vOperationCode
			WHERE id = vXDiarioFk;

	END LOOP;

	CLOSE vCursor;
	
	UPDATE movContaIVA mci
			JOIN vn.invoiceOut i ON i.id = vInvoiceOutFk
			LEFT JOIN vn.invoiceCorrection ic ON ic.correctedFk = vInvoiceOutFk
			LEFT JOIN vn.invoiceOut ioc ON ioc.id = ic.correctingFk
			JOIN vn.XDiario x ON x.id = mci.id
			JOIN vn.client c ON c.id = i.clientFk
			JOIN Naciones n ON n.countryFk = c.countryFk
			JOIN vn.invoiceOutSerial ios ON ios.code = i.serial
			JOIN vn.taxArea ta ON ta.code = ios.taxAreaFk
		SET mci.Año = YEAR(i.issued),
			mci.Serie = i.serial,
			mci.Factura = RIGHT(i.ref, LENGTH(i.ref) -1),
			mci.FechaFactura = i.issued,
			mci.ImporteFactura = i.amount,
			mci.TipoFactura = vInvoiceTypeSended,
			mci.CodigoCuentaFactura = x.SUBCTA,
			mci.CifDni = c.fi,
			mci.Nombre = SUBSTR(c.socialName, 1, vMaxLengthName),
			mci.SiglaNacion = n.SiglaNacion,
			mci.EjercicioFactura = YEAR(i.issued),
			mci.FechaOperacion = i.issued,
			mci.MantenerAsiento = TRUE,
			mci.FechaFacturaOriginal = x.FECHA_EX
		WHERE mci.id = vXDiarioFk;
		
	SELECT correctedFk INTO vInvoiceOutCorrectedFk
		FROM vn.invoiceCorrection
		WHERE correctingFk = vInvoiceOutFk;
	
	IF vInvoiceOutCorrectedFk THEN 
		UPDATE movContaIVA mci
				JOIN vn.invoiceOut i ON i.id = vInvoiceOutCorrectedFk
				JOIN vn.invoiceCorrection ic ON ic.correctedFk = vInvoiceOutCorrectedFk
				JOIN (SELECT SUM(IF(IFNULL(e.vatFk, TRUE), iot.taxableBase, 0)) taxableBase, 
							 SUM(IF(IFNULL(e.vatFk, TRUE), iot.vat, 0)) vat,
							 SUM(IF(IFNULL(e.vatFk, TRUE), 0, iot.vat)) equ
						FROM vn.invoiceOutTax iot
							LEFT JOIN vn.pgcEqu e ON e.vatFk = iot.pgcFk 
						WHERE iot.invoiceOutFk = vInvoiceOutCorrectedFk
					) tax
				JOIN ClavesOperacion co ON co.Descripcion = 'Factura rectificativa'
			SET mci.TipoRectificativa = 2,
				mci.ClaseAbonoRectificativas = 1, 
				mci.FechaFacturaOriginal = i.issued,
				mci.FechaOperacion = i.issued,
				mci.BaseImponibleOriginal = tax.taxableBase,
				mci.CuotaIvaOriginal = tax.vat,
				mci.RecargoEquivalenciaOriginal = tax.equ,
				mci.ClaveOperacionFactura = co.ClaveOperacionFactura_
			WHERE mci.id = vXDiarioFk
				AND i.id = vInvoiceOutCorrectedFk;

	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 `invoiceOut_manager` */;
/*!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 `invoiceOut_manager`(vYear INT, vCompanyFk INT)
BEGIN
/**
 * Traslada la info de contabilidad relacionada con las facturas emitidas 
 * 
 * @vYear Año contable del que se quiere trasladar la información
 * @vCompany Empresa de la que se quiere trasladar datos 
 */
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vInvoiceFk INT;
	DECLARE vXDiarioFk INT;
	DECLARE vDatedFrom DATETIME;
	DECLARE vDatedTo DATETIME;

	DECLARE vCursor CURSOR FOR
		 SELECT i.id,
				sub2.XDiarioFk
			FROM vn.invoiceOut i
				JOIN (SELECT MIN(x.id) XDiarioFk, x.ASIEN, sub.refFk
						FROM vn.XDiario x
							JOIN (SELECT x.ASIEN, CONCAT(x.SERIE, x.FACTURA) refFk
									FROM vn.XDiario x
									WHERE x.enlazadoSage = FALSE
										AND x.FACTURA 
										AND x.empresa_id = vCompanyFk
										AND x.FECHA BETWEEN vDatedFrom AND vDatedTo
									GROUP BY refFk
								 ) sub ON sub.ASIEN = x.ASIEN
						GROUP BY refFk
					 )sub2 ON sub2.refFk = i.ref;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	SELECT CAST(CONCAT(vYear, '-01-01') AS DATETIME), util.dayEnd(CAST(CONCAT(vYear, '-12-31') AS DATE))
		INTO vDatedFrom, vDatedTo;
	
	OPEN vCursor;

	l: LOOP
		FETCH vCursor INTO vInvoiceFk, vXDiarioFk;

		IF vDone THEN 
			LEAVE l;
		END IF;
		
		CALL invoiceOut_add(vInvoiceFk, vXDiarioFk);

	END LOOP;

	CLOSE vCursor;

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 `pgc_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 `pgc_add`(vCompanyFk INT)
BEGIN
/**
 * Añade cuentas del plan general contable para exportarlos a Sage 
 * @vCompanyFk Empresa de la que se quiere trasladar datos
 */
	TRUNCATE TABLE planCuentasPGC;

	INSERT INTO planCuentasPGC
			(CodigoEmpresa,
			CodigoCuenta,
			Cuenta,
			ClienteOProveedor)
		SELECT * 
			FROM (SELECT IF(@@hostname = 'db', c.companyCode, companyCodeTest) companyFk,
						e.id accountFk,
						UCASE(e.name),
						''
					FROM vn.expence e
						JOIN vn.company c
					WHERE c.id = vCompanyFk
					UNION 
					SELECT IF(@@hostname = 'db', c.companyCode, companyCodeTest),
							b.account, 
							UCASE(b.bank),
							'' 
						FROM vn.bank b
							JOIN vn.company c
						WHERE c.id = vCompanyFk
							AND b.isActive
							AND b.`account`
					UNION 
					SELECT CodigoEmpresa,
							CodigoCuenta,
							Nombre,
							ClienteOProveedor 
						FROM clientesProveedores)sub
		GROUP BY companyFk, accountFk;
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: `salix`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `salix` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `salix`;

--
-- Table structure for table `ACL`
--

DROP TABLE IF EXISTS `ACL`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ACL` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `model` varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  `property` varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  `accessType` set('READ','WRITE','*') COLLATE utf8_unicode_ci DEFAULT 'READ',
  `permission` set('DENY','ALLOW') COLLATE utf8_unicode_ci DEFAULT 'ALLOW',
  `principalType` set('ROLE','USER') COLLATE utf8_unicode_ci DEFAULT 'ROLE',
  `principalId` varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `model_ix` (`model`(255)) COMMENT 'ernesto 3.8.2020. Mysql pide indices',
  KEY `property_ix` (`property`(255)),
  KEY `accessType_ix` (`accessType`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `AccessToken`
--

DROP TABLE IF EXISTS `AccessToken`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `AccessToken` (
  `id` varchar(255) CHARACTER SET utf8 NOT NULL,
  `ttl` int(11) DEFAULT NULL,
  `scopes` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `userId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `Account`
--

DROP TABLE IF EXISTS `Account`;
/*!50001 DROP VIEW IF EXISTS `Account`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `Account` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `password` tinyint NOT NULL,
  `roleFk` tinyint NOT NULL,
  `active` tinyint NOT NULL,
  `email` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `updated` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `Role`
--

DROP TABLE IF EXISTS `Role`;
/*!50001 DROP VIEW IF EXISTS `Role`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `Role` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `modified` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `RoleMapping`
--

DROP TABLE IF EXISTS `RoleMapping`;
/*!50001 DROP VIEW IF EXISTS `RoleMapping`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `RoleMapping` (
  `id` tinyint NOT NULL,
  `principalType` tinyint NOT NULL,
  `principalId` tinyint NOT NULL,
  `roleId` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `User`
--

DROP TABLE IF EXISTS `User`;
/*!50001 DROP VIEW IF EXISTS `User`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `User` (
  `id` tinyint NOT NULL,
  `realm` tinyint NOT NULL,
  `username` tinyint NOT NULL,
  `password` tinyint NOT NULL,
  `email` tinyint NOT NULL,
  `emailVerified` tinyint NOT NULL,
  `verificationToken` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `defaultViewConfig`
--

DROP TABLE IF EXISTS `defaultViewConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `defaultViewConfig` (
  `tableCode` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `columns` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='The default configuration of columns for views';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `fieldAcl`
--

DROP TABLE IF EXISTS `fieldAcl`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fieldAcl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `model` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `property` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `actionType` set('insert','update','*') COLLATE utf8_unicode_ci DEFAULT '*',
  `role` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `module`
--

DROP TABLE IF EXISTS `module`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `module` (
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userConfigView`
--

DROP TABLE IF EXISTS `userConfigView`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userConfigView` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) unsigned NOT NULL,
  `tableCode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `configuration` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniqueUser_TableCode` (`userFk`,`tableCode`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'salix'
--

--
-- Dumping routines for database 'salix'
--

--
-- Current Database: `stock`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `stock` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `stock`;

--
-- Table structure for table `inbound`
--

DROP TABLE IF EXISTS `inbound`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inbound` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tableName` set('buy','sale') NOT NULL,
  `tableId` int(10) unsigned NOT NULL,
  `isSync` tinyint(4) NOT NULL,
  `isPicked` tinyint(4) NOT NULL DEFAULT '0',
  `warehouseFk` int(10) unsigned NOT NULL,
  `itemFk` int(10) unsigned NOT NULL,
  `dated` datetime NOT NULL,
  `expired` datetime DEFAULT NULL,
  `quantity` int(10) unsigned NOT NULL,
  `available` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `source` (`tableName`,`tableId`),
  KEY `warehouseFk` (`warehouseFk`,`itemFk`,`dated`,`expired`,`available`),
  KEY `isSync` (`isSync`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `stock`.`inbound_beforeInsert`
	BEFORE INSERT ON `inbound`
	FOR EACH ROW
BEGIN
	SET NEW.isPicked = NEW.isPicked OR NEW.dated < CURDATE();
    
    CALL visible_log(
		NEW.isPicked,
        NEW.warehouseFk,
        NEW.itemFk,
        NEW.quantity
	);
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 `stock`.`inbound_afterDelete`
	AFTER DELETE ON `inbound`
	FOR EACH ROW
BEGIN
	UPDATE outbound o
		JOIN inboundPick ou ON ou.outboundFk = o.id
		SET o.lack = o.lack + ou.quantity,
			o.isSync = FALSE
		WHERE ou.inboundFk = OLD.id;

	DELETE FROM inboundPick
		WHERE inboundFk = OLD.id;

    CALL visible_log(
		OLD.isPicked,
        OLD.warehouseFk,
        OLD.itemFk,
        -OLD.quantity
	);
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 */ ;

--
-- Table structure for table `inboundPick`
--

DROP TABLE IF EXISTS `inboundPick`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inboundPick` (
  `inboundFk` int(10) unsigned NOT NULL,
  `outboundFk` int(10) unsigned NOT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`inboundFk`,`outboundFk`,`quantity`),
  UNIQUE KEY `buyFk` (`inboundFk`,`outboundFk`),
  KEY `saleFk` (`outboundFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `log`
--

DROP TABLE IF EXISTS `log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `operation` set('insert','delete') NOT NULL,
  `tableName` varchar(255) NOT NULL,
  `tableId` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tableName` (`tableName`,`tableId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `outbound`
--

DROP TABLE IF EXISTS `outbound`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `outbound` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tableName` set('sale','buy','orderRow') NOT NULL,
  `tableId` int(10) unsigned NOT NULL,
  `isSync` tinyint(3) unsigned NOT NULL,
  `isPicked` tinyint(4) NOT NULL DEFAULT '0',
  `warehouseFk` int(10) unsigned NOT NULL,
  `itemFk` int(10) unsigned NOT NULL,
  `dated` datetime NOT NULL,
  `created` datetime NOT NULL,
  `expired` datetime DEFAULT NULL,
  `quantity` int(10) unsigned NOT NULL,
  `lack` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `source` (`tableName`,`tableId`),
  KEY `warehouseFk` (`warehouseFk`,`itemFk`,`dated`),
  KEY `expired` (`expired`),
  KEY `isSync` (`isSync`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `stock`.`outbound_beforeInsert`
	BEFORE INSERT ON `outbound`
	FOR EACH ROW
BEGIN
	SET NEW.lack = NEW.quantity;
	SET NEW.isPicked = NEW.isPicked OR NEW.dated < CURDATE();
    
    CALL visible_log(
		NEW.isPicked,
        NEW.warehouseFk,
        NEW.itemFk,
        -NEW.quantity
	);
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 `stock`.`outbound_afterDelete`
	AFTER DELETE ON `outbound`
	FOR EACH ROW
BEGIN
	UPDATE inbound i
		JOIN inboundPick ou ON ou.inboundFk = i.id
		SET i.available = i.available + ou.quantity,
			i.isSync = FALSE
		WHERE ou.outboundFk = OLD.id;

	DELETE FROM inboundPick
		WHERE outboundFk = OLD.id;

    CALL visible_log(
		OLD.isPicked,
        OLD.warehouseFk,
        OLD.itemFk,
        OLD.quantity
	);
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 */ ;

--
-- Table structure for table `visible`
--

DROP TABLE IF EXISTS `visible`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `visible` (
  `itemFk` int(10) unsigned NOT NULL,
  `warehouseFk` int(10) unsigned NOT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`itemFk`,`warehouseFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'stock'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `log_clean` */;
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 `log_clean` ON SCHEDULE EVERY 1 DAY STARTS '2022-01-28 09:29:18' ON COMPLETION PRESERVE ENABLE DO CALL log_clean */ ;;
/*!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 `log_syncNoWait` */;;
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 `log_syncNoWait` ON SCHEDULE EVERY 5 SECOND STARTS '2017-06-27 17:15:02' ON COMPLETION NOT PRESERVE DISABLE DO CALL log_syncNoWait */ ;;
/*!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 'stock'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `inbound_addPick` */;
/*!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 `inbound_addPick`(
	vSelf INT,
    vOutboundFk INT,
    vQuantity INT
)
BEGIN
	INSERT INTO inboundPick
		SET
			inboundFk = vSelf,
			outboundFk = vOutboundFk,
			quantity = vQuantity
		ON DUPLICATE KEY UPDATE
			quantity = quantity + vQuantity;
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 `inbound_removePick` */;
/*!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 `inbound_removePick`(
	vSelf INT,
    vOutboundFk INT,
    vQuantity INT,
    vTotalQuantity INT
)
BEGIN
	IF vQuantity < vTotalQuantity THEN
		UPDATE inboundPick
			SET quantity = quantity - vQuantity
			WHERE inboundFk = vSelf
				AND outboundFk = vOutboundFk;
	ELSE
		DELETE FROM inboundPick
			WHERE inboundFk = vSelf
				AND outboundFk = vOutboundFk;
	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 `inbound_requestQuantity` */;
/*!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 `inbound_requestQuantity`(
	vSelf INT,
    vRequested INT,
    vDated DATETIME,
    OUT vSupplied INT)
BEGIN
/**
 * Disassociates inbound picks after the given date until the
 * demanded quantity is satisfied.
 *
 * @param vSelf The inbound reference
 * @param vRequested The requested quantity
 * @param vDate The starting date for the associated outbounds
 * @param vSupplied The supplied quantity
 */
	DECLARE vOutboundFk INT;
	DECLARE vPickQuantity INT;
	DECLARE vPickGranted INT;
	DECLARE vDone BOOL;

	DECLARE vPicks CURSOR FOR
		SELECT p.outboundFk, p.quantity
			FROM inboundPick p
				JOIN outbound o ON o.id = p.outboundFk
			WHERE p.inboundFk = vSelf
				AND o.dated > vDated
			ORDER BY o.dated DESC, o.created DESC;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;
        
	SET vSupplied = 0;

	OPEN vPicks;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vPicks INTO vOutboundFk, vPickQuantity;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		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
			WHERE id = vOutboundFk;

		IF vSupplied >= vRequested THEN
			LEAVE myLoop;
		END IF;
	END LOOP;

	CLOSE vPicks;
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 `inbound_sync` */;
/*!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 `inbound_sync`(vSelf INT)
BEGIN
/**
 * Associates a inbound with their possible outbounds, updating it's available.
 *
 * @param vSelf The inbound identifier
 */
	DECLARE vDated DATETIME;
	DECLARE vExpired DATETIME;
	DECLARE vItem INT;
	DECLARE vWarehouse INT;
	DECLARE vQuantity INT;
	DECLARE vAvailable INT;
	DECLARE vSupplied INT;
	DECLARE vSuppliedFromRequest INT;
	DECLARE vOutboundFk INT;
	DECLARE vLack INT;
	DECLARE vHasPicks BOOL;
	DECLARE vDone BOOL;

	DECLARE vOutbounds CURSOR FOR
		SELECT id, lack, lack < quantity
			FROM outbound
			WHERE warehouseFk = vWarehouse
                AND itemFk = vItem
				AND dated >= vDated
				AND (vExpired IS NULL OR dated < vExpired)
			ORDER BY dated, created;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	SELECT warehouseFk, itemFk, available, quantity, expired, dated
		INTO vWarehouse, vItem, vAvailable, vQuantity, vExpired, vDated
		FROM inbound
		WHERE id = vSelf;

	IF vAvailable IS NULL THEN
		SET vAvailable = vQuantity;
	END IF;

	OPEN vOutbounds;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vOutbounds INTO vOutboundFk, vLack, vHasPicks;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		SET vSupplied = LEAST(vAvailable, vLack);
        
        IF vSupplied > 0 THEN
			SET vAvailable = vAvailable - vSupplied;
			UPDATE outbound
				SET lack = lack - vSupplied
				WHERE id = vOutboundFk;
		END IF;

		IF vHasPicks AND vAvailable > 0 THEN
			CALL outbound_requestQuantity(vOutboundFk, vAvailable, vDated, vSuppliedFromRequest);
			SET vSupplied = vSupplied + vSuppliedFromRequest;
			SET vAvailable = vAvailable - vSuppliedFromRequest;
		END IF;
        
        IF vSupplied > 0 THEN
			CALL inbound_addPick(vSelf, vOutboundFk, vSupplied);
		END IF;

		IF vAvailable <= 0 THEN
			LEAVE myLoop;
		END IF;
	END LOOP;

	CLOSE vOutbounds;

	UPDATE inbound
		SET isSync = TRUE,
			available = vAvailable
		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 `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 */ ;
/*!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_clean`()
BEGIN
	DELETE FROM inbound WHERE dated = vn.getInventoryDate();
	DELETE FROM outbound WHERE dated = vn.getInventoryDate();
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_delete` */;
/*!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_delete`(vTableName VARCHAR(255), vTableId INT)
proc: BEGIN
/**
 * Processes orphan transactions.
 */
	IF vTableName NOT IN ('buy', 'sale', 'orderRow') THEN
		LEAVE proc;
	END IF;

	DELETE FROM inbound
		WHERE tableName = vTableName COLLATE utf8_general_ci
			AND tableId = vTableId;

	DELETE FROM outbound
		WHERE tableName = vTableName COLLATE utf8_general_ci
			AND tableId = vTableId;
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_refreshAll` */;
/*!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_refreshAll`()
BEGIN
/**
 * Recalculates the entire cache. It takes a considerable time,
 * please avoid calls to this procedure from commonly used operations.
 */
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	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;

	TRUNCATE TABLE stock.`log`;
	TRUNCATE TABLE stock.`inbound`;
	TRUNCATE TABLE stock.`inboundPick`;
	TRUNCATE TABLE stock.`outbound`;
	TRUNCATE TABLE stock.`visible`;

	CALL log_refreshSale(NULL, NULL);
	CALL log_refreshBuy(NULL, NULL);
	CALL log_refreshOrder(NULL, NULL);

	UPDATE outbound SET isSync = TRUE;
	CALL log_sync(TRUE);

	DO RELEASE_LOCK('stock.log_sync');
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_refreshBuy` */;
/*!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_refreshBuy`(
    `vTableName` VARCHAR(255),
    `vTableId` INT)
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tValues;
	CREATE TEMPORARY TABLE tValues
		ENGINE = MEMORY
		SELECT
				b.id buyFk,
				e.id entryFk,
				t.id travelFk,
				b.itemFk,
                e.isRaid,
				ADDTIME(t.shipped,
					IFNULL(t.shipmentHour, '00:00:00')) shipped,
				t.warehouseOutFk,
				t.isDelivered,
				ADDTIME(t.landed,
					IFNULL(t.landingHour, '00:00:00')) landed,
				t.warehouseInFk,
				t.isReceived,
				tp.life,
				ABS(b.quantity) quantity,
				b.created,
				b.quantity > 0 isIn,
                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
				JOIN vn.item i ON i.id = b.itemFk
				JOIN vn.itemType tp ON tp.id = i.typeFk
			WHERE (
					vTableId IS NULL
					OR (vTableName = 'travel' AND t.id = vTableId)
					OR (vTableName = 'entry' AND e.id = vTableId)
					OR (vTableName = 'buy' AND b.id = vTableId)
				)
				AND t.landed >= vn.getInventoryDate()
				AND b.quantity != 0;

	REPLACE INTO inbound (
			tableName, tableId, warehouseFk, dated,
			itemFk, expired, quantity, isPicked
		)
		SELECT 'buy',
				buyFk,
				IF(isIn, warehouseInFk, warehouseOutFk),
				@dated := IF(isIn, landed, shipped),
				itemFk,
				TIMESTAMPADD(DAY, life, @dated),
				quantity,
				IF(isIn, isReceived, isDelivered) AND !isRaid
			FROM tValues
            WHERE isIn OR !lessThanInventory;

	REPLACE INTO outbound (
			tableName, tableId, warehouseFk, dated,
			itemFk, created, quantity, isPicked
		)
		SELECT 'buy',
				buyFk,
				IF(isIn, warehouseOutFk, warehouseInFk),
				IF(isIn, shipped, landed),
				itemFk,
				created,
				quantity,
				IF(isIn, isDelivered, isReceived) AND !isRaid
			FROM tValues
            WHERE !isIn OR !lessThanInventory;

	DROP TEMPORARY TABLE tValues;
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_refreshOrder` */;
/*!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_refreshOrder`(
    `vTableName` VARCHAR(255),
    `vTableId` INT)
BEGIN
	DECLARE vExpireTime INT DEFAULT 20;
	DECLARE vExpired DATETIME DEFAULT TIMESTAMPADD(MINUTE, -vExpireTime, NOW());

	DROP TEMPORARY TABLE IF EXISTS tValues;
    CREATE TEMPORARY TABLE tValues
		ENGINE = MEMORY
		SELECT
				r.id rowFk,
				r.itemFk,
				r.warehouseFk,
				r.shipment shipped,
				r.amount quantity,
				r.created
			FROM hedera.orderRow r
				JOIN hedera.`order` o ON o.id = r.orderFk
			WHERE (
					vTableId IS NULL
					OR (vTableName = 'order' AND o.id = vTableId)
					OR (vTableName = 'orderRow' AND r.id = vTableId)
				)
                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
		)
        SELECT 'orderRow',
				rowFk,
				warehouseFk,
				shipped,
				itemFk,
				created,
                TIMESTAMPADD(MINUTE, vExpireTime, created),
				quantity
            FROM tValues;

	DROP TEMPORARY TABLE tValues;
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_refreshSale` */;
/*!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_refreshSale`(
    `vTableName` VARCHAR(255),
    `vTableId` INT)
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tValues;
    CREATE TEMPORARY TABLE tValues
		ENGINE = MEMORY
		SELECT
				m.id saleFk,
				m.ticketFk,
				m.itemFk,
				t.warehouseFk,
				t.shipped,
				ABS(m.quantity) quantity,
				m.created,
                TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
				m.quantity < 0 isIn,
				m.isPicked OR s.alertLevel > 1 isPicked
			FROM vn.sale m
				JOIN vn.ticket t ON t.id = m.ticketFk
				JOIN vn.ticketState s ON s.ticketFk = t.id
				JOIN vn.item i ON i.id = m.itemFk
				JOIN vn.itemType tp ON tp.id = i.typeFk
			WHERE (
					vTableId IS NULL
					OR (vTableName = 'ticket' AND t.id = vTableId)
					OR (vTableName = 'sale' AND m.id = vTableId)
				)
				AND t.shipped >= vn.getInventoryDate()
				AND m.quantity != 0;

	REPLACE INTO inbound (
			tableName, tableId, warehouseFk, dated,
            itemFk, expired, quantity, isPicked
		)
        SELECT 'sale',
				saleFk,
				warehouseFk,
				shipped,
				itemFk,
                expired,
				quantity,
                isPicked
            FROM tValues
            WHERE isIn;

	REPLACE INTO outbound (
			tableName, tableId, warehouseFk, dated,
            itemFk, created, quantity, isPicked
		)
        SELECT 'sale',
				saleFk,
				warehouseFk,
				shipped,
				itemFk,
				created,
				quantity,
                isPicked
            FROM tValues
            WHERE !isIn;

	DROP TEMPORARY TABLE tValues;
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_sync` */;
/*!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_sync`(vSync BOOL)
proc: BEGIN
	DECLARE vDone BOOL;
	DECLARE vLogId INT;
	DECLARE vHasPendingSync BOOL;
	DECLARE vOperation VARCHAR(255);
	DECLARE vTableName VARCHAR(255);
	DECLARE vTableId VARCHAR(255);
	DECLARE vInboundFk INT;
	DECLARE vOutboundFk INT;

	DECLARE cInbound CURSOR FOR
		SELECT id FROM inbound
			WHERE !isSync
			ORDER BY dated;

	DECLARE cOutbound CURSOR FOR
		SELECT id FROM outbound
			WHERE !isSync
			ORDER BY dated;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	-- Applies changes

	opsLoop: LOOP
		START TRANSACTION;

		SET vDone = FALSE;
		SELECT id, operation, tableName, tableId
			INTO vLogId, vOperation, vTableName, vTableId
			FROM `log`
			ORDER BY id LIMIT 1
			FOR UPDATE;

		IF vDone THEN
			COMMIT;
			LEAVE opsLoop;
		END IF;

		CALL log_delete(vTableName, vTableId);

		IF vOperation = 'insert' THEN
			IF vTableName IN ('travel', 'entry', 'buy') THEN
				CALL log_refreshBuy(vTableName, vTableId);
			ELSEIF vTableName IN ('ticket', 'sale') THEN
				CALL log_refreshSale(vTableName, vTableId);
			ELSEIF vTableName IN ('order', 'orderRow') THEN
				CALL log_refreshOrder(vTableName, vTableId);
			END IF;
		END IF;

		DELETE FROM `log` WHERE id = vLogId;
		SET vSync = TRUE;

		COMMIT;
	END LOOP;

	IF !vSync THEN
		LEAVE proc;
	END IF;

	-- Deletes expired outbounds

	DELETE FROM outbound WHERE expired <= NOW();

	-- Attaches desync inbounds

	REPEAT
		OPEN cInbound;
		SET vHasPendingSync = FALSE;

		inboundLoop: LOOP
			SET vDone = FALSE;
			FETCH cInbound INTO vInboundFk;

			IF vDone THEN
				LEAVE inboundLoop;
			END IF;

			START TRANSACTION;
			CALL inbound_sync(vInboundFk);
			COMMIT;

			SET vHasPendingSync = TRUE;
		END LOOP;

		CLOSE cInbound;
	UNTIL !vHasPendingSync END REPEAT;

	-- Attaches desync outbounds

	REPEAT
		OPEN cOutbound;
		SET vHasPendingSync = FALSE;

		outboundLoop: LOOP
			SET vDone = FALSE;
			FETCH cOutbound INTO vOutboundFk;

			IF vDone THEN
				LEAVE outboundLoop;
			END IF;

			START TRANSACTION;
			CALL outbound_sync(vOutboundFk);
			COMMIT;

			SET vHasPendingSync = TRUE;
		END LOOP;

		CLOSE cOutbound;
	UNTIL !vHasPendingSync END REPEAT;
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_syncNoWait` */;
/*!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_syncNoWait`()
BEGIN
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		DO RELEASE_LOCK('stock.log_sync');
		RESIGNAL;
	END;

	IF GET_LOCK('stock.log_sync', 0) THEN
		CALL log_sync(FALSE);
	END IF;

	DO RELEASE_LOCK('stock.log_sync');
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 `outbound_requestQuantity` */;
/*!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 `outbound_requestQuantity`(
	vSelf INT,
    vRequested INT,
    vDated DATETIME,
    OUT vSupplied INT)
BEGIN
/**
 * Disassociates outbound picks after the given date until the
 * demanded quantity is satisfied.
 *
 * @param vSelf The outbound reference
 * @param vRequested The requested quantity
 * @param vDate The starting date for the associated inbounds
 * @param vSupplied The supplied quantity
 */
	DECLARE vInboundFk INT;
	DECLARE vPickQuantity INT;
	DECLARE vPickGranted INT;
	DECLARE vDone BOOL;

	DECLARE vPicks CURSOR FOR
		SELECT p.inboundFk, p.quantity
			FROM inboundPick p
				JOIN inbound i ON i.id = p.inboundFk
			WHERE p.outboundFk = vSelf
				AND i.dated > vDated
			ORDER BY i.dated DESC;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	SET vSupplied = 0;

	OPEN vPicks;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vPicks INTO vInboundFk, vPickQuantity;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
		SET vSupplied = vSupplied + vPickGranted;
		CALL inbound_removePick(vInboundFk, vSelf, vPickGranted, vPickQuantity);
		
		UPDATE inbound
			SET isSync = FALSE,
				available = available + vPickGranted
			WHERE id = vInboundFk;

		IF vSupplied >= vRequested THEN
			LEAVE myLoop;
		END IF;
	END LOOP;

	CLOSE vPicks;
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 `outbound_sync` */;
/*!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 `outbound_sync`(vSelf INT)
BEGIN
/**
 * Attaches a outbound with available inbounds.
 *
 * @param vSelf The outbound reference
 */
	DECLARE vDated DATETIME;
    DECLARE vItem INT;
	DECLARE vWarehouse INT;
	DECLARE vLack INT;
	DECLARE vSupplied INT;
	DECLARE vSuppliedFromRequest INT;
	DECLARE vInboundFk INT;
	DECLARE vAvailable INT;
	DECLARE vHasPicks BOOL;
	DECLARE vDone BOOL;

	DECLARE vInbounds CURSOR FOR
		SELECT id, available, available < quantity
			FROM inbound
			WHERE warehouseFk = vWarehouse
                AND itemFk = vItem
				AND dated <= vDated
				AND (expired IS NULL OR expired > vDated)
			ORDER BY dated;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	SELECT warehouseFk, itemFk, dated, lack
		INTO vWarehouse, vItem, vDated, vLack
		FROM outbound
		WHERE id = vSelf;

	OPEN vInbounds;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vInbounds INTO vInboundFk, vAvailable, vHasPicks;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		SET vSupplied = LEAST(vLack, vAvailable);

		IF vSupplied > 0 THEN
			SET vLack = vLack - vSupplied;
			UPDATE inbound
				SET available = available - vSupplied
				WHERE id = vInboundFk;
		END IF;

		IF vHasPicks AND vLack > 0 THEN
			CALL inbound_requestQuantity(vInboundFk, vLack, vDated, vSuppliedFromRequest);
			SET vSupplied = vSupplied + vSuppliedFromRequest;
			SET vLack = vLack - vSuppliedFromRequest;
		END IF;

		IF vSupplied > 0 THEN
			CALL inbound_addPick(vInboundFk, vSelf, vSupplied);
		END IF;

		IF vLack = 0 THEN
			LEAVE myLoop;
		END IF;
	END LOOP;

	CLOSE vInbounds;

	UPDATE outbound
		SET isSync = TRUE,
			lack = vLack
		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 `visible_log` */;
/*!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 `visible_log`(
	vIsPicked BOOL,
    vWarehouseFk INT,
    vItemFk INT,
    vQuantity INT
)
proc: BEGIN
	IF !vIsPicked THEN
		LEAVE proc;
	END IF;

    INSERT INTO visible
		SET itemFk = vItemFk,
			warehouseFk = vWarehouseFk,
			quantity = vQuantity
		ON DUPLICATE KEY UPDATE
			quantity = quantity + VALUES(quantity);
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: `util`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `util` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `util`;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dbVersion` char(11) CHARACTER SET utf8 DEFAULT NULL COMMENT 'The current database version',
  `hasTriggersDisabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Defines if triggers are disabled',
  `environment` varchar(45) CHARACTER SET utf8 DEFAULT NULL COMMENT 'The current Database environment',
  `lastDump` datetime DEFAULT NULL COMMENT 'Timestamp of the last data dump',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Global configuration table';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `debug`
--

DROP TABLE IF EXISTS `debug`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `debug` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `connectionId` int(10) unsigned DEFAULT NULL,
  `user` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `host` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `variable` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `created` (`created`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Log de depuración';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `version`
--

DROP TABLE IF EXISTS `version`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `version` (
  `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `number` char(11) COLLATE utf8_unicode_ci DEFAULT NULL,
  `gitCommit` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  `lastNumber` char(11) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `versionLog`
--

DROP TABLE IF EXISTS `versionLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `versionLog` (
  `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `number` char(11) COLLATE utf8_unicode_ci NOT NULL,
  `file` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `updated` datetime NOT NULL,
  `errorNumber` int(10) unsigned DEFAULT NULL,
  `errorMessage` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`,`number`,`file`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'util'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `slowLog_prune` */;
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 `slowLog_prune` ON SCHEDULE EVERY 1 DAY STARTS '2021-10-08 00:00:00' ON COMPLETION PRESERVE ENABLE DO CALL util.slowLog_prune */ ;;
/*!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 'util'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `accountShortToStandard` */;
/*!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 `accountShortToStandard`(vAccount VARCHAR(10)) RETURNS varchar(10) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	RETURN REPLACE(vAccount, '.', REPEAT('0', 11 - LENGTH(vAccount)));
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 */ ;
/*!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 `capitalizeFirst`(vString VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Pass the first letter of every word in a string to uppercase.
 *
 * @param vString String to tranform
 * @return Transformed string
 */
	DECLARE vNewString VARCHAR(255) DEFAULT '';
	DECLARE vI INT DEFAULT 1;
	DECLARE vSpaceIni, vWordIni INT;
	DECLARE vLen INT DEFAULT CHAR_LENGTH(vString);

	WHILE vI < vLen
	DO
		SET vSpaceIni = vI;
		
		WHILE MID(vString, vI, 1) REGEXP '[[:space:]]' DO
			SET vI = vI + 1;
		END WHILE;
		
		SET vWordIni = vI;
		SET vI = vWordIni + 1;

		WHILE vI <= vLen AND MID(vString, vI, 1) NOT REGEXP '[[:space:]]' DO
			SET vI = vI + 1;
		END WHILE;

		SET vNewString = CONCAT(vNewString
			,MID(vString, vSpaceIni, vWordIni - vSpaceIni)
			,UPPER(MID(vString, vWordIni, 1))
			,MID(vString, vWordIni + 1, vI - vWordIni - 1)
		);
	END WHILE;

	RETURN vNewString;
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 `crypt` */;
/*!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 `crypt`(vText VARCHAR(255), vKey VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
BEGIN

	DECLARE vResult VARCHAR(255);
    
    CALL vn.crypt(vText, vKey, vResult);

	RETURN vResult;
    
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 `cryptOff` */;
/*!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 `cryptOff`(vText VARCHAR(255), vKey VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
BEGIN

	DECLARE vResult VARCHAR(255);
    
    CALL vn.cryptOff(vText, vKey, vResult);

	RETURN vResult;
    
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 `dayEnd` */;
/*!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 `dayend`(vDated DATE) RETURNS datetime
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Formats a date to the end of the day.
 *
 * @param vDated The date to format
 * @return The formatted date
 */
	RETURN TIMESTAMP(vDated, '23:59:59');
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 `firstDayOfMonth` */;
/*!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 `firstDayOfMonth`(vDate DATE) RETURNS date
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns the date formatted to the first day of month.
 *
 * @param vDate The date to format
 * @return The formatted date
 */
	RETURN TIMESTAMPADD(DAY, - DAY(vDate) + 1, vDate) ;
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 `firstDayOfYear` */;
/*!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 `firstDayOfYear`(vDate DATE) RETURNS date
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns the date formatted to the first day of year.
 *
 * @param vDate The date to format
 * @return The formatted date
 */
	RETURN DATE_FORMAT(vDate, '%Y-01-01');
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 `formatRow` */;
/*!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 `formatRow`(vType CHAR(3), vValues VARCHAR(512)) RETURNS varchar(512) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	DECLARE vRow VARCHAR(512);

	IF vValues IS NOT NULL THEN
		SET vRow = CONCAT('
			<tr>
				<td>', vType ,'</td>
				<td>', REPLACE(vValues, ',', '</td><td>') ,'</td>
			</tr>
		');
	ELSE
		SET vRow = '';
	END IF;

	RETURN vRow;
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 `formatTable` */;
/*!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 `formatTable`(vFields VARCHAR(512), vOldValues VARCHAR(512), vNewValues VARCHAR(512)) RETURNS text CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	DECLARE vTable TEXT;

	SET vTable = CONCAT('
		<table>
			<thead><tr>
				<th>type</th>
				<th>', REPLACE(vFields, ',', '</th><th>') ,'
			</tr></thead>
			<tbody>
				', formatRow('old', vOldValues) ,'
				', formatRow('new', vNewValues) ,'
			</tbody>
		</table>
	');

	RETURN vTable;
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 `hasDateOverlapped` */;
/*!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 `hasDateOverlapped`(vSarted1 DATE, vEnded1 DATE, vSarted2 DATE, vEnded2 DATE) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN 

	RETURN GREATEST(vSarted1, vSarted2) <= LEAST(vEnded1,vEnded2);

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 `hmacSha2` */;
/*!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 `hmacSha2`(`vAlg` SMALLINT, `vMsg` MEDIUMBLOB, `vKey` MEDIUMBLOB) RETURNS varchar(128) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * HMAC function based on SHA2 algorythms.
 */
    DECLARE vHashlen INT UNSIGNED;
    DECLARE vOpad, vIpad TINYBLOB;
    
    CASE vAlg
        WHEN 224 THEN SET vHashlen = 64;
        WHEN 256 THEN SET vHashlen = 64;
        WHEN 384 THEN SET vHashlen = 128;
        WHEN 512 THEN SET vHashlen = 128;
        ELSE CALL throw ('WRONG_ALGORYTHM_IDENTIFICATOR_USED');
    END CASE;
    
    IF LENGTH(vKey) > vHashlen THEN
        SET vKey = UNHEX(SHA2(vKey, vAlg));
    END IF;
    
    SET vKey = RPAD(vKey, vHashlen, 0x00);
    
    SET vIpad = stringXor(vKey, 0x36);
    SET vOpad = stringXor(vKey, 0x5C);
    
    RETURN SHA2(CONCAT(vOpad, UNHEX(SHA2(CONCAT(vIpad, vMsg), vAlg))), vAlg);
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 `isLeapYear` */;
/*!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 `isLeapYear`(vYear INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN

	RETURN (DAYOFYEAR(CONCAT(vYear, "-02-29")) IS NOT NULL);
    
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 `lang` */;
/*!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 `lang`() RETURNS char(2) CHARSET utf8
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns the current language code.
 *
 * @return The language code
 */
	RETURN IFNULL(@lang, SUBSTR(@@lc_messages, 1, 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 `lastDayOfYear` */;
/*!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 `lastDayOfYear`(vDate DATE) RETURNS date
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns the date formatted to the first day of year.
 *
 * @param vDate The date to format
 * @return The formatted date
 */
	RETURN DATE_FORMAT(vDate, '%Y-12-31');
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 `midnight` */;
/*!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 `midnight`() RETURNS datetime
    READS SQL DATA
BEGIN
	
	RETURN TIMESTAMP(CURDATE(), '23:59:59');

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 `nextWeek` */;
/*!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 `nextWeek`(vYearWeek INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * A partir de un perido año/semana en formato AAAASS devuelve el siguiente
 * periodo. Esta función trabaja de la misma forma que la función WEEK() en
 * modo 3.
 */
	DECLARE vYear INT DEFAULT FLOOR(vYearWeek / 100);
    
    IF vYearWeek < YEARWEEK(CONCAT(vYear, '-12-31'), 3) THEN
		RETURN vYearWeek + 1;
	ELSE
		RETURN ((vYear + 1) * 100) + 1;
	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 FUNCTION IF EXISTS `quarterFirstDay` */;
/*!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 `quarterFirstDay`(vYear INT, vQuarter INT) RETURNS date
    DETERMINISTIC
BEGIN
	RETURN CONCAT(vYear,"-", ((vQuarter - 1) * 3) + 1, "-01");
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 `stringXor` */;
/*!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 `stringXor`(vString MEDIUMBLOB, vConst TINYINT UNSIGNED) RETURNS mediumblob
    NO SQL
    DETERMINISTIC
BEGIN
/**
 * Returns XOR of binary string and an 8-bit constant.
 */
    DECLARE vLen, vPos INT UNSIGNED;
    DECLARE vResult MEDIUMBLOB;
    
    SET vLen = LENGTH(vString);
    SET vPos = 1;
    SET vResult = '';
    
    WHILE vPos <= vLen DO
        SET vResult = CONCAT(vResult, LPAD(HEX( ORD(SUBSTR(vString, vPos, 1)) ^ vConst), 2, '0'));
        SET vPos = vPos + 1;
    END WHILE;
    
    RETURN UNHEX(vResult);
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 `today` */;
/*!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 `today`() RETURNS date
    DETERMINISTIC
BEGIN
/**
 * Devuelve la fecha actual. Usar en lugar de la función nativa
 * CURDATE() en aquellos que se necesite rendimiento ya que la
 * la última no es determinista.
 *
 * @return La fecha actual
 */
	RETURN CURDATE();
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 `tomorrow` */;
/*!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 `tomorrow`() RETURNS date
    DETERMINISTIC
BEGIN
/**
 * Devuelve la fecha de mañana.
 *
 * @return La fecha de mañana
 */
	RETURN TIMESTAMPADD(DAY, 1, CURDATE());
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 `twoDaysAgo` */;
/*!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 `twoDaysAgo`() RETURNS date
    DETERMINISTIC
BEGIN
/**
 * Devuelve la fecha de antes de ayer.
 *
 * @return La fecha de antes de ayer
 */
	RETURN TIMESTAMPADD(DAY, -2, CURDATE());
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 `yearRelativePosition` */;
/*!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 `yearRelativePosition`(vYear INT) RETURNS varchar(20) CHARSET utf8
    DETERMINISTIC
BEGIN
/**
 * Devuelve la posicion del año relativa al año actual.
 * Se utiliza como cabecera en informes de balances.
 *
 * @param vYear Año a evaluar
 * @return La posicion relativa del año
 */
	DECLARE vCurYear INT DEFAULT YEAR(CURDATE());

	IF vYear = vCurYear THEN
		RETURN 'curYear';
	END IF;
    
	IF vYear = vCurYear - 1 THEN
		RETURN 'lastYear';
	END IF;
	
	IF vYear = vCurYear - 2 THEN
		RETURN 'twoYearsAgo';
	END IF;

	RETURN 'other';
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 `yesterday` */;
/*!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 `yesterday`() RETURNS date
    DETERMINISTIC
BEGIN
/**
 * Devuelve la fecha de ayer.
 *
 * @return La fecha de ayer
 */
	RETURN TIMESTAMPADD(DAY, -1, CURDATE());
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 `compareObjects` */;
/*!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 `compareObjects`(vChain VARCHAR(45),vCompare VARCHAR(45))
    READS SQL DATA
BEGIN
/**
 * Devuelve un listado de todos los procedimientos, funciones
 * eventos, disparadores y vistas que estan incluidos en las dos cadenadas dadas.
 *
 * Es util para buscar una columna de una tabla en concreto
 * @param vChain Cadena a buscar
 * @param vCompare Cadena a buscar y comparar los resultados con la primera cadena
 * @select Listado de objetos
 */
	SET vChain = CONCAT('%', vChain, '%');
    SET vCompare = CONCAT('%', vCompare, '%');
	SELECT * FROM 
	(
		SELECT t1.* FROM
		( 
			SELECT
					`db`,
					`name`,
					`type`,
					`body`,
					`created`,
					`modified`
				FROM `mysql`.`proc`
				WHERE `body` LIKE vChain COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`db`,
					`name`,
					'EVENT',
					`body_utf8`,
					`created`,
					`modified`
				FROM `mysql`.`event`
				WHERE `body_utf8` LIKE vChain COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`EVENT_OBJECT_SCHEMA`,
					`TRIGGER_NAME`,
					'TRIGGER',
					`ACTION_STATEMENT`,
					NULL,
					NULL 
				FROM `information_schema`.`TRIGGERS`
				WHERE `ACTION_STATEMENT` LIKE vChain COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`TABLE_SCHEMA`,
					`TABLE_NAME`,
					'VIEW',
					`VIEW_DEFINITION`,
					NULL,
					NULL 
				FROM `information_schema`.`VIEWS`
				WHERE `VIEW_DEFINITION` LIKE vChain COLLATE utf8_general_ci
		) t1
        JOIN (
			SELECT
					`db`,
					`name`,
					`type`,
					`body`,
					`created`,
					`modified`
				FROM `mysql`.`proc`
				WHERE `body` LIKE vCompare COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`db`,
					`name`,
					'EVENT',
					`body_utf8`,
					`created`,
					`modified`
				FROM `mysql`.`event`
				WHERE `body_utf8` LIKE vCompare COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`EVENT_OBJECT_SCHEMA`,
					`TRIGGER_NAME`,
					'TRIGGER',
					`ACTION_STATEMENT`,
					NULL,
					NULL 
				FROM `information_schema`.`TRIGGERS`
				WHERE `ACTION_STATEMENT` LIKE vCompare COLLATE utf8_general_ci
			UNION ALL
			SELECT
					`TABLE_SCHEMA`,
					`TABLE_NAME`,
					'VIEW',
					`VIEW_DEFINITION`,
					NULL,
					NULL 
				FROM `information_schema`.`VIEWS`
				WHERE `VIEW_DEFINITION` LIKE vCompare COLLATE utf8_general_ci) t2 ON t2.name = t1.name
		ORDER BY t1.`db`, t1.`name`
	) t;
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 */ ;
/*!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 `debugAdd`(vVariable VARCHAR(255), vValue VARCHAR(255))
    MODIFIES SQL DATA
BEGIN
/**
 * Añade una entrada de depuración en la tabla @debug.
 *
 * @param vVariable Nombre de variable
 * @param vValue Valor de la variable
 */
	DECLARE vIndex INT DEFAULT INSTR(USER(), '@');
 
	INSERT INTO debug SET
		`connectionId` = CONNECTION_ID(),
        `user` = LEFT(USER(), vIndex - 1),
        `host` = RIGHT(USER(), CHAR_LENGTH(USER()) - vIndex),
        `variable` = vVariable,
        `value` = vValue;
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 `exec` */;
/*!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 `exec`(vSqlQuery TEXT)
BEGIN
/**
 * Executes a string with an SQL query.
 *
 * @param vSqlQuery The SQL string
 */
	SET @sqlQuery = vSqlQuery;

	PREPARE stmt FROM @sqlQuery;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;

    SET @sqlQuery = NULL;
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 `findObject` */;
/*!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 `findObject`(vChain VARCHAR(45))
    READS SQL DATA
BEGIN
/**
 * Devuelve un listado de todos los procedimientos, funciones
 * eventos, disparadores y vistas que inluyen una cadena dada.
 *
 * @param vChain Cadena a buscar
 * @select Listado de objetos
 */
	SET vChain = CONCAT('%', vChain, '%');

	SELECT * FROM
	( 
		SELECT
				`routine_schema` `schema`,
				`routine_name` `name`,
				`routine_type` `type`,
				`routine_definition` `definition`,
				`created`,
				`last_altered`
			FROM `information_schema`.`routines`
			WHERE `routine_definition` LIKE vChain COLLATE utf8_general_ci
		UNION ALL
		SELECT
				`event_schema`,
				`event_name`,
				'EVENT',
				`event_definition`,
				`created`,
				`last_altered`
			FROM `information_schema`.`events`
			WHERE `event_definition` LIKE vChain COLLATE utf8_general_ci
		UNION ALL
		SELECT
				`EVENT_OBJECT_SCHEMA`,
				`TRIGGER_NAME`,
				'TRIGGER',
				`ACTION_STATEMENT`,
				NULL,
				NULL 
			FROM `information_schema`.`TRIGGERS`
			WHERE `ACTION_STATEMENT` LIKE vChain COLLATE utf8_general_ci
		UNION ALL
		SELECT
				`TABLE_SCHEMA`,
				`TABLE_NAME`,
				'VIEW',
				`VIEW_DEFINITION`,
				NULL,
				NULL 
			FROM `information_schema`.`VIEWS`
			WHERE `VIEW_DEFINITION` LIKE vChain COLLATE utf8_general_ci
	) t
	ORDER BY `schema`, `name`;
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 `procNoOverlap` */;
/*!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 `procNoOverlap`(procName VARCHAR(255))
    SQL SECURITY INVOKER
proc: BEGIN
/**
 * call procedure without overlap
 */
    DECLARE vIsChanged BOOL;

	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK(procName);
        RESIGNAL;
	END;

	IF !GET_LOCK(procName, 0) THEN
		LEAVE proc;
	END IF;

	CALL exec(CONCAT('CALL ', procName));

	DO RELEASE_LOCK(procName);
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 `proc_changedPrivs` */;
/*!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 `proc_changedPrivs`()
BEGIN
	SELECT s.*
		FROM proc_privs s
			LEFT JOIN mysql.procs_priv p
				ON p.`Host` = s.`Host`
					AND p.`Host` = s.`Host`
					AND p.`Db` = s.`Db`
					AND p.`User` = s.`User`
					AND p.`Routine_name` = s.`Routine_name`
					AND p.`Routine_type` = s.`Routine_type`
		WHERE p.Proc_priv IS NULL;
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 `proc_restorePrivs` */;
/*!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 `proc_restorePrivs`()
BEGIN
/**
 * Restores the privileges saved by proc_savePrivs().
 * This procedure should be called after modifying a procedure,
 * for more info see proc_savePrivs().
 */
	INSERT IGNORE INTO mysql.procs_priv
		SELECT * FROM proc_privs;

	FLUSH PRIVILEGES;
	DROP TEMPORARY TABLE proc_privs;
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 `proc_savePrivs` */;
/*!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 `proc_savePrivs`()
BEGIN
/**
 * Saves routine privileges, used to simplify the task of keeping
 * routine privileges when they are modified due to the lack of
 * CREATE OR REPLACE [PROCEDURE|FUNCTION].
 * This procedure should be called before modifying a routine, to
 * restore the saved privileges use proc_restorePrivs().
 */
	CREATE TEMPORARY TABLE proc_privs
		ENGINE = MEMORY
		SELECT * FROM mysql.procs_priv;
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 `slowLog_prune` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `slowLog_prune`()
BEGIN
/**
 * Prunes MySQL slow query log table deleting all records older than one week.
 */
	DECLARE vSlowQueryLog INT DEFAULT @@slow_query_log;
	DECLARE vSqlLogBin INT DEFAULT @@SESSION.sql_log_bin;

	SET sql_log_bin = OFF;
	SET GLOBAL slow_query_log = OFF;

	RENAME TABLE `mysql`.`slow_log` TO `mysql`.`slow_log_temp`;

	DELETE FROM `mysql`.`slow_log_temp`
		WHERE start_time < TIMESTAMPADD(WEEK, -1, NOW());

	RENAME TABLE `mysql`.`slow_log_temp` TO `mysql`.`slow_log`;

	SET GLOBAL slow_query_log = vSlowQueryLog;
	SET sql_log_bin = vSqlLogBin;
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 `throw` */;
/*!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 `throw`(vMessage CHAR(55))
BEGIN
/**
 * Throws a user-defined exception.
 *
 * @param vMessage The error message
 */
	SIGNAL SQLSTATE '45000'
		SET MESSAGE_TEXT = vMessage;
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 `time_createTable` */;
/*!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 `time_createTable`(vStarted DATE, vEnded DATE)
BEGIN
	DECLARE vCurrentDate DATE;

	DROP TEMPORARY TABLE IF EXISTS tmp.time;
	CREATE TEMPORARY TABLE tmp.time (dated DATE PRIMARY KEY) ENGINE = MEMORY;
	SET vCurrentDate = vStarted;
	WHILE vCurrentDate <= vEnded DO
		INSERT INTO tmp.time (dated) VALUES (vCurrentDate);
		SET vCurrentDate = DATE_ADD(vCurrentDate, INTERVAL 1 DAY);
	END WHILE;
    
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 `warn` */;
/*!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 `warn`(vCode CHAR(35))
BEGIN
	DECLARE w VARCHAR(1) DEFAULT '__';
	SET @warn = vCode;
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: `vn`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `vn` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `vn`;

--
-- Temporary table structure for view `NewView`
--

DROP TABLE IF EXISTS `NewView`;
/*!50001 DROP VIEW IF EXISTS `NewView`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `NewView` (
  `clientFk` tinyint NOT NULL,
  `lastShipped` tinyint NOT NULL,
  `notBuyingMonths` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `XDiario`
--

DROP TABLE IF EXISTS `XDiario`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `XDiario` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ASIEN` double DEFAULT NULL,
  `FECHA` datetime DEFAULT NULL,
  `SUBCTA` varchar(12) CHARACTER SET utf8 DEFAULT NULL,
  `CONTRA` varchar(12) CHARACTER SET utf8 DEFAULT NULL,
  `CONCEPTO` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `EURODEBE` decimal(10,2) DEFAULT NULL,
  `EUROHABER` decimal(10,2) DEFAULT NULL,
  `BASEEURO` decimal(10,2) DEFAULT NULL,
  `SERIE` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `FACTURA` varchar(8) COLLATE utf8_unicode_ci DEFAULT '0',
  `BASEIMPO` decimal(10,2) DEFAULT NULL,
  `IVA` decimal(10,2) DEFAULT NULL,
  `RECEQUIV` decimal(10,2) DEFAULT '0.00',
  `DOCUMENTO` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `DEPARTA` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CLAVE` int(11) DEFAULT NULL,
  `ESTADO` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `NCASADO` decimal(10,2) DEFAULT NULL,
  `TCASADO` decimal(10,2) DEFAULT NULL,
  `TRANS` decimal(10,2) DEFAULT NULL,
  `CAMBIO` decimal(10,2) DEFAULT NULL,
  `DEBEME` decimal(10,2) DEFAULT NULL,
  `HABERME` decimal(10,2) DEFAULT NULL,
  `PTAHABER` decimal(10,2) DEFAULT NULL,
  `AUXILIAR` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `SUCURSAL` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
  `PTADEBE` decimal(10,2) DEFAULT NULL,
  `CODDIVISA` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `IMPAUXME` decimal(10,2) DEFAULT NULL,
  `MONEDAUSO` varchar(1) COLLATE utf8_unicode_ci DEFAULT '2',
  `NOCONV` tinyint(1) NOT NULL DEFAULT '0',
  `NUMEROINV` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TIPOOPE` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `NFACTICK` tinyint(1) NOT NULL DEFAULT '1',
  `TERIDNIF` tinyint(1) NOT NULL DEFAULT '2',
  `TERNIF` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'I.F.',
  `TERNOM` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Nombre Importador',
  `OPBIENES` tinyint(1) NOT NULL DEFAULT '1',
  `TIPOFAC` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TIPOIVA` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `L340` tinyint(2) NOT NULL DEFAULT '0',
  `enlazado` tinyint(1) NOT NULL DEFAULT '0',
  `FECHA_EX` date DEFAULT NULL COMMENT 'FEcha de expedicion de la factura',
  `LRECT349` tinyint(1) NOT NULL DEFAULT '0',
  `empresa_id` smallint(5) unsigned NOT NULL DEFAULT '442',
  `LDIFADUAN` tinyint(4) NOT NULL DEFAULT '0',
  `METAL` tinyint(1) NOT NULL DEFAULT '0',
  `METALIMP` decimal(10,2) NOT NULL DEFAULT '0.00',
  `CLIENTE` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  `METALEJE` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
  `FECHA_OP` date DEFAULT NULL COMMENT 'FEcha de operacion',
  `FACTURAEX` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Numero de factura del proveedor',
  `TIPOCLAVE` int(3) DEFAULT NULL,
  `TIPOEXENCI` int(3) DEFAULT NULL,
  `TIPONOSUJE` int(3) DEFAULT NULL,
  `TIPOFACT` int(3) DEFAULT NULL,
  `TIPORECTIF` int(3) DEFAULT NULL,
  `SERIE_RT` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `FACTU_RT` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `BASEIMP_RT` decimal(10,2) DEFAULT NULL,
  `BASEIMP_RF` decimal(10,2) DEFAULT NULL,
  `RECTIFICA` int(1) NOT NULL DEFAULT '0',
  `FECHA_RT` date DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `FECREGCON` date DEFAULT NULL,
  `enlazadoSage` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `empresa_id` (`empresa_id`),
  KEY `ASIENidx` (`id`,`ASIEN`),
  KEY `SERIEidx` (`ASIEN`,`SERIE`),
  KEY `XDiario` (`enlazado`),
  KEY `enlazadoSage` (`enlazadoSage`),
  CONSTRAINT `XDiario_ibfk_1` FOREIGN KEY (`empresa_id`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`XDiario_beforeInsert`
	BEFORE INSERT ON `XDiario`
	FOR EACH ROW
BEGIN
	IF (NOT isDateRangeAccounting(NEW.FECHA) AND NEW.FECHA IS NOT NULL) OR 
		(NOT isDateRangeAccounting(NEW.FECHA_EX) AND NEW.FECHA_EX IS NOT NULL) OR
		(NOT isDateRangeAccounting(NEW.FECHA_OP) AND NEW.FECHA_OP IS NOT NULL) OR
		(NOT isDateRangeAccounting(NEW.FECHA_RT) AND NEW.FECHA_RT IS NOT NULL) OR
		(NOT isDateRangeAccounting(NEW.FECREGCON) AND NEW.FECREGCON IS NOT NULL) THEN
		CALL util.throw ('Fecha fuera de rango');
	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`.`XDiario_beforeUpdate`
	BEFORE UPDATE ON `XDiario`
	FOR EACH ROW
BEGIN
	IF (!(NEW.FECHA <=> OLD.FECHA) AND NOT isDateRangeAccounting(NEW.FECHA)) OR 
		(!(NEW.FECHA_EX <=> OLD.FECHA_EX) AND NOT isDateRangeAccounting(NEW.FECHA_EX)) OR 
		(!(NEW.FECHA_OP <=> OLD.FECHA_OP) AND NOT isDateRangeAccounting(NEW.FECHA_OP)) OR 
		(!(NEW.FECHA_RT <=> OLD.FECHA_RT) AND NOT isDateRangeAccounting(NEW.FECHA_RT)) OR 
		(!(NEW.FECREGCON <=> OLD.FECREGCON) AND NOT isDateRangeAccounting(NEW.FECREGCON)) THEN
		CALL util.throw ('Fecha fuera de rango');
	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 */ ;

--
-- Temporary table structure for view `__coolerPathDetail`
--

DROP TABLE IF EXISTS `__coolerPathDetail`;
/*!50001 DROP VIEW IF EXISTS `__coolerPathDetail`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `__coolerPathDetail` (
  `id` tinyint NOT NULL,
  `coolerPathFk` tinyint NOT NULL,
  `hallway` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `absenceType`
--

DROP TABLE IF EXISTS `absenceType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `absenceType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `rgb` varchar(7) NOT NULL,
  `color` bigint(20) DEFAULT '0',
  `permissionRate` decimal(3,2) DEFAULT NULL,
  `code` varchar(45) DEFAULT NULL,
  `isAllowedToWork` tinyint(4) NOT NULL DEFAULT '0',
  `isPrintable` tinyint(1) NOT NULL DEFAULT '0',
  `discountRate` decimal(3,2) DEFAULT NULL,
  `holidayEntitlementRate` decimal(3,2) DEFAULT '1.00',
  `isNaturalDay` tinyint(1) DEFAULT '0' COMMENT 'Para el cálculo de los salarios de los repartidores',
  `isCalculate` tinyint(1) DEFAULT '0' COMMENT 'Para el cálculo de los salarios de los repartidores',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `accounting`
--

DROP TABLE IF EXISTS `accounting`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accounting` (
  `id` int(11) NOT NULL DEFAULT '0',
  `bank` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `account` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `accountingTypeFk` smallint(6) NOT NULL DEFAULT '0',
  `entityFk` int(10) unsigned DEFAULT NULL,
  `isActive` tinyint(4) NOT NULL DEFAULT '1',
  `currencyFk` tinyint(3) unsigned DEFAULT '1',
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `BancosBanco` (`bank`),
  KEY `fk_Bancos_entity1_idx` (`entityFk`),
  KEY `foreignkey1_idx` (`accountingTypeFk`),
  KEY `Bancoscurrency_idx` (`currencyFk`),
  CONSTRAINT `Bancoscurrency` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `accounting_FK` FOREIGN KEY (`entityFk`) REFERENCES `bankEntity` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `bank_FK` FOREIGN KEY (`accountingTypeFk`) REFERENCES `accountingType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Apunta a la vista vn.Accounting\nLa columna cash es la FK de vn.AccountingType';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `accountingConfig`
--

DROP TABLE IF EXISTS `accountingConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accountingConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `minDate` date NOT NULL,
  `maxDate` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `accountingType`
--

DROP TABLE IF EXISTS `accountingType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accountingType` (
  `id` smallint(6) NOT NULL DEFAULT '0',
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `receiptDescription` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Descripción por defecto al crear nuevo recibo',
  `code` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isAutoConciliated` tinyint(1) DEFAULT '1' COMMENT 'Si hay que marcar como conciliado el recibo al usar este tipo',
  `maxAmount` int(11) DEFAULT NULL,
  `daysInFuture` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `accountingType_code_IDX` (`code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='descripcio dels valors de la columna "cash" de la taula vn2008.Bancios';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `activeContrat__`
--

DROP TABLE IF EXISTS `activeContrat__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `activeContrat__` (
  `date` date NOT NULL,
  `business_id` int(11) NOT NULL,
  PRIMARY KEY (`date`,`business_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `activityTaxDismissed`
--

DROP TABLE IF EXISTS `activityTaxDismissed`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `activityTaxDismissed` (
  `clientFk` int(11) NOT NULL,
  `isNotified` tinyint(1) DEFAULT '0',
  `isDismissed` tinyint(1) DEFAULT '0',
  `notified` int(11) DEFAULT '0',
  PRIMARY KEY (`clientFk`),
  CONSTRAINT `clientFk` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `address`
--

DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `warehouseFk__` smallint(6) unsigned DEFAULT '1',
  `street` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `postalCode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nickname` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isDefaultAddress` tinyint(1) NOT NULL DEFAULT '0',
  `agencyModeFk` int(11) NOT NULL DEFAULT '2',
  `notes__` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hasInsurance__` tinyint(1) NOT NULL DEFAULT '0',
  `porte__` double DEFAULT NULL,
  `isActive` tinyint(4) NOT NULL DEFAULT '1',
  `postcodeOLD__` int(11) unsigned DEFAULT NULL,
  `longitude` decimal(11,7) DEFAULT NULL,
  `latitude` decimal(11,7) DEFAULT NULL,
  `codPosOld__` char(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isEqualizated` tinyint(1) DEFAULT NULL,
  `customsAgentFk` int(11) DEFAULT NULL,
  `incotermsFk` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isVilassarBuyer__` tinyint(4) NOT NULL DEFAULT '0',
  `isLogifloraAllowed` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `Id_Agencia` (`agencyModeFk`),
  KEY `Id_cliente` (`clientFk`),
  KEY `warehouse_id` (`warehouseFk__`),
  KEY `province_id` (`provinceFk`),
  KEY `telefono` (`phone`),
  KEY `movil` (`mobile`),
  KEY `CODPOSTAL` (`postalCode`),
  KEY `address_customsAgentFk_idx` (`customsAgentFk`),
  KEY `address_incotermsFk_idx` (`incotermsFk`),
  CONSTRAINT `address_customer_id` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `address_customsAgentFk` FOREIGN KEY (`customsAgentFk`) REFERENCES `customsAgent` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `address_ibfk_1` FOREIGN KEY (`warehouseFk__`) REFERENCES `warehouse` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `address_ibfk_3` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `address_ibfk_4` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `address_incotermsFk` FOREIGN KEY (`incotermsFk`) REFERENCES `incoterms` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`address_beforeInsert`
	BEFORE INSERT ON `address`
	FOR EACH ROW
BEGIN
	DECLARE vIsEqualizated BOOL;

	IF (NEW.phone <> '') THEN
		CALL pbx.phone_isValid(NEW.phone);
	END IF;

	IF (NEW.mobile <> '') THEN
		CALL pbx.phone_isValid(NEW.mobile);
	END IF;

	IF NEW.isEqualizated IS NULL THEN
		SELECT isEqualizated 
				INTO vIsEqualizated
			FROM client
			WHERE id = NEW.clientFk;
		
		SET NEW.isEqualizated = vIsEqualizated;
	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`.`address_beforeUpdate`
	BEFORE UPDATE ON `address`
	FOR EACH ROW
BEGIN
	
	IF !(NEW.phone <=> OLD.phone) AND (NEW.phone <> '') THEN
		CALL pbx.phone_isValid(NEW.phone);
	END IF;
    
    IF !(NEW.mobile <=> OLD.mobile) AND (NEW.mobile <> '')THEN
		CALL pbx.phone_isValid(NEW.mobile);
	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`.`address_afterUpdate`
	AFTER UPDATE ON `address`
	FOR EACH ROW
BEGIN
	-- Recargos de equivalencia distintos implican facturacion por consignatario
	IF NEW.isEqualizated != OLD.isEqualizated THEN
		IF 
			(SELECT COUNT(*) FROM
				(
					SELECT DISTINCT (isEqualizated = FALSE) as Equ
						FROM address 
						WHERE clientFk = NEW.clientFk
				) t1
			) > 1
		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;
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 */ ;

--
-- Table structure for table `addressFilter`
--

DROP TABLE IF EXISTS `addressFilter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `addressFilter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  `isLogifloraAllowed` tinyint(1) DEFAULT '0',
  `isVNHSupplier` tinyint(1) DEFAULT '0' COMMENT 'corresponde al campo edi.VMPSettings.isVNHSupplier',
  `isEarlyBird` tinyint(1) DEFAULT '0' COMMENT 'corresponde al campo edi.marketPlace.isEarlybird',
  `warehouseFk` smallint(5) unsigned DEFAULT NULL,
  `beforeDated` date DEFAULT NULL,
  `afterDated` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `addressFilter_FK` (`provinceFk`),
  KEY `addressFilter_FK_1` (`countryFk`),
  KEY `addressFilter_FK_2` (`warehouseFk`),
  CONSTRAINT `addressFilter_FK` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `addressFilter_FK_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `addressFilter_FK_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Establece los criterios para habilitar las compras directas a Logiflora';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `addressForPackaging`
--

DROP TABLE IF EXISTS `addressForPackaging`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `addressForPackaging` (
  `addressFk` int(11) NOT NULL,
  `packagingValue` decimal(10,2) NOT NULL DEFAULT '0.04',
  PRIMARY KEY (`addressFk`),
  CONSTRAINT `addresForPackaging_fk1` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `addressObservation`
--

DROP TABLE IF EXISTS `addressObservation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `addressObservation` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `addressFk` int(11) NOT NULL,
  `observationTypeFk` tinyint(3) unsigned NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Consigna` (`addressFk`,`observationTypeFk`),
  KEY `addressObservationFgn_idx` (`observationTypeFk`),
  CONSTRAINT `addressFgn` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `addressObservationFgn` FOREIGN KEY (`observationTypeFk`) REFERENCES `observationType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Observaciones de los consignatarios';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `agency`
--

DROP TABLE IF EXISTS `agency`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agency` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(5) unsigned DEFAULT NULL COMMENT 'A nulo si se puede enrutar desde todos los almacenes',
  `isVolumetric__` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Si el calculo del porte se hacer por volumen',
  `bankFk__` int(11) NOT NULL DEFAULT '8' COMMENT 'para realizar los reembolsos',
  `warehouseAliasFk` smallint(5) unsigned DEFAULT NULL,
  `isOwn` tinyint(1) NOT NULL DEFAULT '0',
  `labelZone__` tinyint(4) NOT NULL DEFAULT '0',
  `workCenterFk` int(11) DEFAULT NULL,
  `supplierFk__` int(11) DEFAULT NULL,
  `isAnyVolumeAllowed` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Permite vender productos que tengan vn.itemType.IsUnconventionalSize = TRUE',
  PRIMARY KEY (`id`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `Id_Banco` (`bankFk__`),
  KEY `agencias_alias_idx` (`warehouseAliasFk`),
  KEY `agency_ibfk_3_idx` (`workCenterFk`),
  KEY `agency_ibfk_4_idx` (`supplierFk__`),
  CONSTRAINT `agency_FK` FOREIGN KEY (`warehouseAliasFk`) REFERENCES `warehouseAlias` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `agency_ibfk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `agency_ibfk_2` FOREIGN KEY (`bankFk__`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `agency_ibfk_3` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`agency_afterInsert`
	AFTER INSERT ON `agency`
	FOR EACH ROW
BEGIN
	INSERT INTO agencyMode(name,agencyFk) VALUES(NEW.name,NEW.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 */ ;

--
-- Table structure for table `agencyExtraCharge`
--

DROP TABLE IF EXISTS `agencyExtraCharge`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agencyExtraCharge` (
  `id` int(11) NOT NULL,
  `agencyFk` smallint(5) unsigned NOT NULL,
  `sizeMin` int(11) NOT NULL COMMENT 'suma de x + y + z a partir del cual se cobrará el sobrecoste',
  `sizeMax` int(11) NOT NULL COMMENT 'suma de x + y + z a hasta el cual se cobrará el sobrecoste',
  `sinced` date NOT NULL COMMENT 'desde la cual se aplica',
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `agencyExtraChargeUniqueIdx` (`agencyFk`,`sinced`,`sizeMin`),
  CONSTRAINT `agencyExtraChargeFk1` FOREIGN KEY (`agencyFk`) REFERENCES `agency` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `agencyMode`
--

DROP TABLE IF EXISTS `agencyMode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agencyMode` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `deliveryMethodFk` int(11) DEFAULT NULL,
  `m3` double DEFAULT '0',
  `cod71__` tinyint(3) unsigned DEFAULT '0',
  `web` smallint(1) unsigned zerofill NOT NULL DEFAULT '0',
  `agencyFk` smallint(5) unsigned NOT NULL,
  `inflation` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT 'Este valor se utiliza para aumentar el valor del componente porte.',
  `isVolumetric` tinyint(1) NOT NULL DEFAULT '0',
  `reportMail` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `showAgencyName` tinyint(1) DEFAULT '1' COMMENT 'obsoleta',
  `isActive` tinyint(1) NOT NULL DEFAULT '1',
  `isExternalAgency` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'obsoleta',
  `flag` blob COMMENT 'obsoleta',
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isRiskFree` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `Agencias` (`name`),
  KEY `Vista` (`deliveryMethodFk`),
  KEY `agencyMode_agencyFk` (`agencyFk`),
  KEY `agencyMode_code` (`code`),
  CONSTRAINT `agencyMode_agencyFk` FOREIGN KEY (`agencyFk`) REFERENCES `agency` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `agencyMode_deliveryMethodFk` FOREIGN KEY (`deliveryMethodFk`) REFERENCES `deliveryMethod` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `agencyTerm`
--

DROP TABLE IF EXISTS `agencyTerm`;
/*!50001 DROP VIEW IF EXISTS `agencyTerm`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `agencyTerm` (
  `agencyFk` tinyint NOT NULL,
  `minimumPackages` tinyint NOT NULL,
  `kmPrice` tinyint NOT NULL,
  `packagePrice` tinyint NOT NULL,
  `routePrice` tinyint NOT NULL,
  `minimumKm` tinyint NOT NULL,
  `minimumM3` tinyint NOT NULL,
  `m3Price` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `agencyTermConfig`
--

DROP TABLE IF EXISTS `agencyTermConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agencyTermConfig` (
  `expenceFk` varchar(10) DEFAULT NULL,
  `vatAccountSupported` varchar(15) DEFAULT NULL,
  `vatPercentage` decimal(28,10) DEFAULT NULL,
  `transaction` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `alertLevel`
--

DROP TABLE IF EXISTS `alertLevel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `alertLevel` (
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `amortizationType`
--

DROP TABLE IF EXISTS `amortizationType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `amortizationType` (
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `annualAverageInvoiced`
--

DROP TABLE IF EXISTS `annualAverageInvoiced`;
/*!50001 DROP VIEW IF EXISTS `annualAverageInvoiced`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `annualAverageInvoiced` (
  `clientFk` tinyint NOT NULL,
  `invoiced` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `assignedTicketToWorker`
--

DROP TABLE IF EXISTS `assignedTicketToWorker`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `assignedTicketToWorker` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `idWorker` int(11) DEFAULT NULL,
  `idTicket` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idWorker_UNIQUE` (`idWorker`),
  UNIQUE KEY `idTicket_UNIQUE` (`idTicket`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla para relacionar un ticket con el sacador del altillo ';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `autoRadioConfig`
--

DROP TABLE IF EXISTS `autoRadioConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `autoRadioConfig` (
  `id` int(11) NOT NULL,
  `password` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `url` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
  `client` int(32) DEFAULT NULL,
  `center` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `autoRadioLogCall`
--

DROP TABLE IF EXISTS `autoRadioLogCall`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `autoRadioLogCall` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `response` longtext COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ticket_idx` (`ticketFk`),
  CONSTRAINT `ticket` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `autonomousRegion__`
--

DROP TABLE IF EXISTS `autonomousRegion__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `autonomousRegion__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 NOT NULL,
  `geoFk` int(11) DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `countryFk` (`countryFk`),
  CONSTRAINT `countryFk` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `autonomy`
--

DROP TABLE IF EXISTS `autonomy`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `autonomy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `countryFk` mediumint(8) unsigned NOT NULL,
  `geoFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `autonomy_FK` (`countryFk`),
  KEY `autonomy_FK_1` (`geoFk`),
  CONSTRAINT `autonomy_FK` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `autonomy_FK_1` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Comunidades autónomas o su equivalente en otros paises. Agrupación de provincias, en una categoria inferior a country.';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`autonomy_BI`
	BEFORE INSERT ON `autonomy`
	FOR EACH ROW
BEGIN 
	
	SET NEW.geoFk = zoneGeo_new('autonomy', NEW.`name`,	(SELECT geoFk FROM country WHERE id = NEW.countryFk));

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`.`autonomy_BU`
	BEFORE UPDATE ON `autonomy`
	FOR EACH ROW
BEGIN
	IF !(OLD.countryFk <=> NEW.countryFk) THEN
		CALL zoneGeo_setParent(NEW.geoFk,
			(SELECT geoFk FROM country WHERE id = NEW.countryFk));
	END IF;

	IF !(OLD.`name` <=> NEW.`name`) THEN
		UPDATE zoneGeo SET `name` = NEW.`name`
			WHERE id = NEW.geoFk;
	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`.`autonomy_AD`
	AFTER DELETE ON `autonomy`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_delete(OLD.geoFk); 
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 */ ;

--
-- Table structure for table `awb`
--

DROP TABLE IF EXISTS `awb`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `awb` (
  `id` smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
  `package` float unsigned NOT NULL,
  `weight` float unsigned DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `transitoryFk` int(11) DEFAULT NULL,
  `taxFk` int(10) unsigned DEFAULT '62',
  `duakk` varchar(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `docFk` int(11) DEFAULT NULL,
  `amount` double NOT NULL DEFAULT '0',
  `freightFk` int(11) DEFAULT NULL,
  `m3` double unsigned DEFAULT NULL,
  `stems` int(10) unsigned DEFAULT NULL,
  `flightFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `volumeWeight` float unsigned DEFAULT NULL,
  `hb` decimal(10,1) unsigned DEFAULT NULL,
  `rate` decimal(10,2) unsigned DEFAULT NULL,
  `booked` datetime DEFAULT NULL,
  `issued` datetime DEFAULT NULL,
  `operated` datetime DEFAULT NULL,
  `bookEntried` date DEFAULT NULL,
  `invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
  `isChecked` tinyint(3) DEFAULT '0',
  `isTransitoryChecked` tinyint(3) DEFAULT '0',
  `year` int(4) DEFAULT NULL,
  `observation` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hasFreightPrepaid` tinyint(3) DEFAULT '0',
  `invoiceInPaletizedFk` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `codigo_UNIQUE` (`code`,`year`),
  KEY `proveedor_id` (`transitoryFk`),
  KEY `iva_id` (`taxFk`),
  KEY `carguera_id` (`freightFk`),
  KEY `flight_id` (`flightFk`),
  KEY `awbInvoiceIn` (`invoiceInFk`),
  KEY `awb_FK` (`docFk`),
  KEY `awb_FK_3` (`invoiceInPaletizedFk`),
  CONSTRAINT `awbInvoiceIn` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `awbTransitoryFk` FOREIGN KEY (`transitoryFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `awb_FK` FOREIGN KEY (`docFk`) REFERENCES `dms` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `awb_FK_1` FOREIGN KEY (`flightFk`) REFERENCES `vn2008`.`flight` (`flight_id`) ON UPDATE CASCADE,
  CONSTRAINT `awb_FK_2` FOREIGN KEY (`freightFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `awb_FK_3` FOREIGN KEY (`invoiceInPaletizedFk`) REFERENCES `invoiceIn` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `awb_ibfk_1` FOREIGN KEY (`taxFk`) REFERENCES `taxCode` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`awb_bi`
	BEFORE INSERT ON `awb`
	FOR EACH ROW
BEGIN
	
	SET NEW.year= year(CURDATE());


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 */ ;

--
-- Temporary table structure for view `awbVolume`
--

DROP TABLE IF EXISTS `awbVolume`;
/*!50001 DROP VIEW IF EXISTS `awbVolume`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `awbVolume` (
  `awbFk` tinyint NOT NULL,
  `volume` tinyint NOT NULL,
  `buyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `bank`
--

DROP TABLE IF EXISTS `bank`;
/*!50001 DROP VIEW IF EXISTS `bank`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `bank` (
  `id` tinyint NOT NULL,
  `bank` tinyint NOT NULL,
  `account` tinyint NOT NULL,
  `cash` tinyint NOT NULL,
  `entityFk` tinyint NOT NULL,
  `isActive` tinyint NOT NULL,
  `currencyFk` tinyint NOT NULL,
  `code` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `bankEntity`
--

DROP TABLE IF EXISTS `bankEntity`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bankEntity` (
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `bic` varchar(11) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `bic_UNIQUE` (`bic`),
  KEY `fg_entity1_idx` (`countryFk`),
  CONSTRAINT `fg_entity1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Entidades bancarias	';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`bankEntity_beforeInsert`
	BEFORE INSERT ON `bankEntity`
	FOR EACH ROW
BEGIN
	CALL bankEntity_checkBic(NEW.bic);
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`.`bankEntity_beforeUpdate`
	BEFORE UPDATE ON `bankEntity`
	FOR EACH ROW
BEGIN
	IF NOT (NEW.bic <=> OLD.bic) THEN
		CALL bankEntity_checkBic(NEW.bic);
	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 */ ;

--
-- Table structure for table `bankEntityConfig`
--

DROP TABLE IF EXISTS `bankEntityConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bankEntityConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bicLength` tinyint(4) DEFAULT '11' COMMENT 'Tamaño del campo bic',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `bankPolicy`
--

DROP TABLE IF EXISTS `bankPolicy`;
/*!50001 DROP VIEW IF EXISTS `bankPolicy`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `bankPolicy` (
  `id` tinyint NOT NULL,
  `ref` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `balanceInterestDrawn` tinyint NOT NULL,
  `commissionAvailableBalances` tinyint NOT NULL,
  `openingCommission` tinyint NOT NULL,
  `started` tinyint NOT NULL,
  `ended` tinyint NOT NULL,
  `bankFk` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL,
  `supplierFk` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `hasGuarantee` tinyint NOT NULL,
  `dmsFk` tinyint NOT NULL,
  `notaryFk` tinyint NOT NULL,
  `currencyFk` tinyint NOT NULL,
  `amortizationTypeFk` tinyint NOT NULL,
  `periodicityTypeFk` tinyint NOT NULL,
  `insuranceExpired` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `beach`
--

DROP TABLE IF EXISTS `beach`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `beach` (
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(6) NOT NULL DEFAULT '60',
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ubicaciones respecto a la playa del almacén';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bionicConfig`
--

DROP TABLE IF EXISTS `bionicConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bionicConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `generalInflationCoeficient` double(10,2) NOT NULL,
  `minimumDensityVolumetricWeight` double(10,2) NOT NULL,
  `verdnaturaVolumeBox` int(11) NOT NULL,
  `itemCarryBox` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `bookingPlanner`
--

DROP TABLE IF EXISTS `bookingPlanner`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bookingPlanner` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `effectived` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `pgcFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `taxAreaFk` varchar(15) CHARACTER SET utf8 NOT NULL DEFAULT 'SPAIN',
  `priority` int(2) unsigned DEFAULT NULL,
  `taxClassFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `pgcFk_bookingPlanner_idx` (`pgcFk`),
  KEY `taxClassFk` (`taxClassFk`),
  KEY `countryFk` (`countryFk`),
  KEY `bookingPlannerIdx3` (`taxAreaFk`,`taxClassFk`,`countryFk`),
  CONSTRAINT `bookingPlannerTaxArea` FOREIGN KEY (`taxAreaFk`) REFERENCES `taxArea` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `bookingPlanner_ibfk_1` FOREIGN KEY (`pgcFk`) REFERENCES `pgc` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `bookingPlanner_ibfk_2` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `bookingPlanner_ibfk_3` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `botanicExport`
--

DROP TABLE IF EXISTS `botanicExport`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `botanicExport` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ediGenusFk` mediumint(8) unsigned NOT NULL,
  `ediSpecieFk` mediumint(8) unsigned DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  `restriction` enum('Sin restriccion','Importacion Prohibida','pasaporte fitosanitario','pasaporte individual','declaracion origen') CHARACTER SET utf8 NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isProtectedZone` tinyint(1) NOT NULL DEFAULT '0',
  `code` enum('importProhibited','phytosanitaryPassport','individualPassport') COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Id_Paises` (`countryFk`),
  KEY `botanicExport_ibfk_2_idx` (`ediGenusFk`),
  KEY `botanicExport_ibfk_3_idx` (`ediSpecieFk`),
  CONSTRAINT `botanicExport_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Especifica los generos y especies prohibidos en paises';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`botanicExport_beforeInsert`
	BEFORE INSERT ON `botanicExport`
	FOR EACH ROW
BEGIN
	IF (SELECT botanicExport_isUpdatable (NEW.ediGenusFk, NEW.ediSpecieFk, NEW.countryFk, NEW.restriction) ) > 0	THEN
		CALL util.throw ('Datos duplicados');
    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 */ ;

--
-- Table structure for table `budget`
--

DROP TABLE IF EXISTS `budget`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `budget` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `started` date DEFAULT NULL,
  `finished` date DEFAULT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `departmentFk` int(11) DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `photo` blob,
  `amount` decimal(10,2) DEFAULT NULL,
  `projectFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `budget_FK` (`projectFk`),
  KEY `budget_FK_1` (`userFk`),
  KEY `budget_FK_2` (`departmentFk`),
  KEY `budget_FK_3` (`supplierFk`),
  CONSTRAINT `budget_FK` FOREIGN KEY (`projectFk`) REFERENCES `project` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budget_FK_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budget_FK_2` FOREIGN KEY (`departmentFk`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budget_FK_3` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Master de presupuestos de project';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `budgetDms`
--

DROP TABLE IF EXISTS `budgetDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `budgetDms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `budgetFk` int(11) NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `budgetDms_FK` (`budgetFk`),
  KEY `budgetDms_FK_1` (`dmsFk`),
  CONSTRAINT `budgetDms_FK` FOREIGN KEY (`budgetFk`) REFERENCES `budget` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budgetDms_FK_1` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Gestion documental de budget';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `budgetInvoiceIn`
--

DROP TABLE IF EXISTS `budgetInvoiceIn`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `budgetInvoiceIn` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `budgetFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `budgetInvoiceIn_FK` (`budgetFk`),
  KEY `budgetInvoiceIn_FK_1` (`invoiceInFk`),
  CONSTRAINT `budgetInvoiceIn_FK` FOREIGN KEY (`budgetFk`) REFERENCES `budget` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budgetInvoiceIn_FK_1` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Facturas relativas al presupuesto';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `budgetNotes`
--

DROP TABLE IF EXISTS `budgetNotes`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `budgetNotes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `budgetFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `txt` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `budgetNotes_FK` (`budgetFk`),
  KEY `budgetNotes_FK_2` (`userFk`),
  CONSTRAINT `budgetNotes_FK` FOREIGN KEY (`budgetFk`) REFERENCES `budget` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `budgetNotes_FK_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Historico de budget';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`budgetNotes_BeforeInsert`
	BEFORE INSERT ON `budgetNotes`
	FOR EACH ROW
BEGIN
	
	IF ISNULL(NEW.userFk) THEN
	
		SET NEW.userFk = account.myUser_getId();
	
	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 */ ;

--
-- Temporary table structure for view `businessCalendar`
--

DROP TABLE IF EXISTS `businessCalendar`;
/*!50001 DROP VIEW IF EXISTS `businessCalendar`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `businessCalendar` (
  `id` tinyint NOT NULL,
  `businessFk` tinyint NOT NULL,
  `absenceTypeFk` tinyint NOT NULL,
  `dated` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `businessReasonEnd`
--

DROP TABLE IF EXISTS `businessReasonEnd`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `businessReasonEnd` (
  `id` tinyint(3) NOT NULL AUTO_INCREMENT,
  `reason` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `businessType`
--

DROP TABLE IF EXISTS `businessType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `businessType` (
  `code` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `buy`
--

DROP TABLE IF EXISTS `buy`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `buy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `entryFk` int(11) NOT NULL DEFAULT '0',
  `itemFk` int(11) NOT NULL DEFAULT '90',
  `quantity` int(11) DEFAULT '0',
  `dispatched` int(11) NOT NULL DEFAULT '0',
  `buyingValue` decimal(10,3) DEFAULT '0.000',
  `freightValue` decimal(10,3) DEFAULT '0.000',
  `isIgnored` tinyint(1) NOT NULL DEFAULT '0',
  `stickers` int(11) NOT NULL DEFAULT '0',
  `packing` int(11) DEFAULT '0',
  `grouping` smallint(5) unsigned NOT NULL DEFAULT '1',
  `groupingMode` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0=sin obligar 1=groping 2=packing',
  `containerFk` smallint(5) unsigned DEFAULT NULL,
  `comissionValue` decimal(10,3) DEFAULT '0.000',
  `packageValue` decimal(10,3) DEFAULT '0.000',
  `location` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `packageFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT '--',
  `price1` decimal(10,2) DEFAULT '0.00',
  `price2` decimal(10,2) DEFAULT '0.00',
  `price3` decimal(10,2) DEFAULT '0.00',
  `minPrice` decimal(10,2) DEFAULT '0.00',
  `producer` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `printedStickers` int(11) DEFAULT '0',
  `workerFk` int(11) DEFAULT '0',
  `isChecked` tinyint(1) NOT NULL DEFAULT '0',
  `isPickedOff` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Esta mercancia no va a la zona de picking.',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `__cm2` int(10) unsigned NOT NULL DEFAULT '0',
  `ektFk` int(11) DEFAULT NULL,
  `weight` decimal(10,2) unsigned DEFAULT NULL,
  `deliveryFk` int(11) DEFAULT NULL,
  `itemOriginalFk` int(11) DEFAULT NULL COMMENT 'Item original de la entrada',
  PRIMARY KEY (`id`),
  KEY `CompresId_Trabajador` (`workerFk`),
  KEY `Id_Cubo` (`packageFk`),
  KEY `Id_Entrada` (`entryFk`),
  KEY `container_id` (`containerFk`),
  KEY `buy_edi_id` (`ektFk`),
  KEY `itemFk_entryFk` (`itemFk`,`entryFk`),
  KEY `buy_fk_4_idx` (`deliveryFk`),
  KEY `buy_FK` (`itemOriginalFk`),
  CONSTRAINT `buy_FK` FOREIGN KEY (`itemOriginalFk`) REFERENCES `item` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `buy_FK_1` FOREIGN KEY (`containerFk`) REFERENCES `vn2008`.`container` (`container_id`) ON UPDATE CASCADE,
  CONSTRAINT `buy_ektFk` FOREIGN KEY (`ektFk`) REFERENCES `edi`.`ekt` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `buy_fk_4` FOREIGN KEY (`deliveryFk`) REFERENCES `edi`.`deliveryInformation` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL,
  CONSTRAINT `buy_ibfk_1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `buy_ibfk_2` FOREIGN KEY (`packageFk`) REFERENCES `packaging` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `buy_id` FOREIGN KEY (`entryFk`) REFERENCES `entry` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `buy_itemfk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`buy_beforeInsert`
	BEFORE INSERT ON `buy`
	FOR EACH ROW
trig: BEGIN
	DECLARE vWarehouse INT;
	DECLARE vLanding DATE;
	DECLARE vGrouping INT;
	DECLARE vGroupingMode TINYINT;
	DECLARE vGenericFk INT;
	DECLARE vGenericInDate BOOL;

	IF @isModeInventory THEN
		LEAVE trig;
	END IF;

	CALL buy_checkGrouping(NEW.`grouping`);
	SELECT t.warehouseInFk, t.landed INTO vWarehouse, vLanding
		FROM entry e
			JOIN travel t ON t.id = e.travelFk
		WHERE e.id = NEW.entryFk;
	SELECT b.`grouping`, b.groupingMode INTO vGrouping, vGroupingMode
		FROM buy b
			JOIN entry e ON e.id = b.entryFk
			JOIN travel t ON t.id = e.travelFk
		WHERE t.landed <= vLanding
			AND b.itemFk = NEW.itemFk
			AND !b.isIgnored
		ORDER BY t.warehouseInFk = vWarehouse DESC, t.landed DESC, b.id DESC
		LIMIT 1;
	IF NEW.`grouping` IS NULL THEN
		SET NEW.`grouping` = vGrouping;
	END IF;
	IF NEW.groupingMode IS NULL THEN
		SET NEW.groupingMode = vGroupingMode;
	END IF;
	-- Generics
	SELECT i.genericFk INTO vGenericFk
		FROM vn.item i
		WHERE i.id = NEW.itemFk;

	IF vGenericFk THEN

		SELECT COUNT(*) INTO vGenericInDate
			FROM vn.genericAllocation ga
				JOIN vn.entry e ON e.id = NEW.entryFk
				JOIN vn.travel tr on tr.id = e.travelFk
				WHERE ga.itemFk = vGenericFk
					AND tr.landed BETWEEN ga.startDated AND ga.endDated;
		IF vGenericInDate THEN
			SET NEW.itemOriginalFk = NEW.itemFk;

			SET NEW.itemFk = vGenericFk;
		END IF;

	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`.`buy_afterInsert`
	AFTER INSERT ON `buy`
	FOR EACH ROW
trig: BEGIN
	DECLARE vValues VARCHAR(255);

	CALL stock.log_add('buy', NEW.id, NULL);

	IF @isModeInventory THEN
		LEAVE trig;
	END IF;

	IF @isTriggerDisabled THEN 
		LEAVE trig;
	END IF;

	CALL buy_afterUpsert(NEW.id);

	/*IF entry_isInventoryOrPrevious(NEW.entryFk) THEN
		SET vValues = CONCAT_WS(',',
			NEW.entryFk,
			NEW.itemFk,
			NEW.quantity,
			NEW.price1,
			NEW.price2,
			NEW.price3
		);
		CALL entry_notifyChanged(NEW.entryFk, NEW.id, vValues, NULL);
	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`.`buy_beforeUpdate`
	BEFORE UPDATE ON `buy`
	FOR EACH ROW
trig:BEGIN
	DECLARE vGenericFk INT;
	DECLARE vGenericInDate BOOL;
	DECLARE vIsInventory BOOL;
	IF @isTriggerDisabled THEN
		LEAVE trig;
	END IF;
	IF !(NEW.`grouping` <=> OLD.`grouping`) THEN
		CALL buy_checkGrouping(NEW.`grouping`);
	END IF;
	-- Generics
	SELECT i.genericFk INTO vGenericFk
		FROM vn.item i
		WHERE i.id = NEW.itemFk;

	IF vGenericFk THEN
		SELECT COUNT(*) INTO vGenericInDate
			FROM vn.genericAllocation ga
				JOIN vn.entry e ON e.id = NEW.entryFk
				JOIN vn.travel tr on tr.id = e.travelFk
				WHERE ga.itemFk = vGenericFk
					AND tr.landed BETWEEN ga.startDated AND ga.endDated;
		IF vGenericInDate THEN
			SET NEW.itemOriginalFk = NEW.itemFk;
			SET NEW.itemFk = vGenericFk;
		END IF;
	END IF;
	SELECT COUNT(*) INTO vIsInventory
		FROM vn.entry e
			JOIN vn.supplier s ON s.id = e.supplierFk
			JOIN vn.entryConfig ec ON ec.inventorySupplierFk = e.supplierFk
		WHERE e.id = NEW.entryFk;

	IF vIsInventory THEN
		IF NOT NEW.printedStickers <=> OLD.printedStickers THEN
			CALL util.throw("Stickers cannot be modified if they are inventory");
		END IF;
	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`.`buy_afterUpdate`
	AFTER UPDATE ON `buy`
	FOR EACH ROW
trig: BEGIN
	DECLARE vLanded DATE;
	DECLARE vBuyerFk INT;
	DECLARE vIsBuyerToBeEmailed BOOL;
    DECLARE vItemName VARCHAR(50);
	DECLARE vNewValues VARCHAR(255);
	DECLARE vOldValues VARCHAR(255);
    
    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;
	
	IF @isModeInventory THEN
		LEAVE trig;
	END IF;

	IF @isTriggerDisabled THEN 
		LEAVE trig;
	END IF;

    CALL buy_afterUpsert(NEW.id);

	IF !(NEW.weight <=> OLD.weight) AND NEW.weight THEN
		UPDATE item
			SET density = NEW.weight / (item_getVolume(NEW.itemFk, NEW.packageFk) / 1000000)
			WHERE id = NEW.itemFk;
	END IF;
    
	SELECT w.isBuyerToBeEmailed, t.landed
		INTO vIsBuyerToBeEmailed, vLanded
		FROM entry e
			JOIN travel t ON t.id = e.travelFk
			JOIN warehouse w ON w.id = t.warehouseInFk 
		WHERE e.id = NEW.entryFk;
	
	SELECT it.workerFk, i.longName 
		INTO vBuyerFk, vItemName
		FROM itemCategory k
			JOIN itemType it ON it.categoryFk = k.id
			JOIN item i ON i.typeFk = it.id
		WHERE i.id = OLD.itemFk;
            
    IF vIsBuyerToBeEmailed AND	
	   vBuyerFk != account.myUser_getId() AND 
	   vLanded = CURDATE() THEN
			IF !(NEW.itemFk <=> OLD.itemFk) OR 
			   !(NEW.quantity <=> OLD.quantity) OR 
			   !(NEW.packing <=> OLD.packing) OR
			   !(NEW.grouping <=> OLD.grouping) OR 
			   !(NEW.packageFk <=> OLD.packageFk) OR 
			   !(NEW.weight <=> OLD.weight) THEN
					CALL vn.mail_insert(
						CONCAT(account.user_getNameFromId(vBuyerFk),'@verdnatura.es'),
						CONCAT(account.myUser_getName(),'@verdnatura.es'),
						CONCAT('E ', NEW.entryFk ,' Se ha modificado item ', NEW.itemFk, ' ', vItemName),
						'Este email se ha generado automáticamente'
					);
			END IF;
	END IF;
/*
	IF (!(NEW.entryFk <=> OLD.entryFk)
		OR !(NEW.quantity <=> OLD.quantity)
		OR !(NEW.price1 <=> OLD.price1)
		OR !(NEW.price2 <=> OLD.price2)
		OR !(NEW.price3 <=> OLD.price3))
	AND (entry_isInventoryOrPrevious(NEW.entryFk)
		OR entry_isInventoryOrPrevious(OLD.entryFk)) THEN
		SET vOldValues = CONCAT_WS(',',
			OLD.entryFk,
			OLD.itemFk,
			OLD.quantity,
			OLD.price1,
			OLD.price2,
			OLD.price3
		);
		SET vNewValues = CONCAT_WS(',',
			NEW.entryFk,
			NEW.itemFk,
			NEW.quantity,
			NEW.price1,
			NEW.price2,
			NEW.price3
		);
		CALL entry_notifyChanged(NEW.entryFk, NEW.id, vNewValues, vOldValues);
	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`.`buy_beforeDelete`
    BEFORE DELETE ON buy
    FOR EACH ROW
BEGIN 
	IF OLD.printedStickers <> 0 THEN
		CALL util.throw("it is not possible to delete buys with printed labels ");
	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`.`buy_afterDelete`
	AFTER DELETE ON `buy`
	FOR EACH ROW
trig: BEGIN 
	DECLARE vValues VARCHAR(255);

	IF @isTriggerDisabled THEN 
		LEAVE trig;
	END IF;

	CALL stock.log_add('buy', NULL, OLD.id);

	CALL util.debugAdd('buy_deleted', CONCAT(OLD.id,' ', OLD.itemFk,' ', vn.getWorkerCode()));

	/*IF entry_isInventoryOrPrevious(OLD.entryFk) THEN
		SET vValues = CONCAT_WS(',',
			OLD.entryFk,
			OLD.itemFk,
			OLD.quantity,
			OLD.price1,
			OLD.price2,
			OLD.price3
    	);
    	CALL entry_notifyChanged(OLD.entryFk, OLD.id, NULL, vValues);
	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 */ ;

--
-- Table structure for table `buyMark`
--

DROP TABLE IF EXISTS `buyMark`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `buyMark` (
  `id` int(11) NOT NULL,
  `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mark` tinyint(1) DEFAULT NULL,
  `odbcDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  CONSTRAINT `Compres_mark_ibfk_1` FOREIGN KEY (`id`) REFERENCES `buy` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `buyer`
--

DROP TABLE IF EXISTS `buyer`;
/*!50001 DROP VIEW IF EXISTS `buyer`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `buyer` (
  `userFk` tinyint NOT NULL,
  `nickname` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `buyerSales`
--

DROP TABLE IF EXISTS `buyerSales`;
/*!50001 DROP VIEW IF EXISTS `buyerSales`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `buyerSales` (
  `importe` tinyint NOT NULL,
  `comprador` tinyint NOT NULL,
  `año` tinyint NOT NULL,
  `semana` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `calendar`
--

DROP TABLE IF EXISTS `calendar`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `businessFk` int(11) NOT NULL,
  `dayOffTypeFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `business_id_date` (`businessFk`,`dated`),
  KEY `calendar_employee_business_labour_id_idx` (`businessFk`),
  KEY `calendar_employee_calendar_state_calendar_state_id_idx` (`dayOffTypeFk`),
  KEY `id_index` (`id`),
  CONSTRAINT `calendar_FK` FOREIGN KEY (`dayOffTypeFk`) REFERENCES `absenceType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `calendar_businessFk` FOREIGN KEY (`businessFk`) REFERENCES `postgresql`.`business` (`business_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendarHolidays`
--

DROP TABLE IF EXISTS `calendarHolidays`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendarHolidays` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `calendarHolidaysTypeFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `calendarHolidaysNameFk` int(11) DEFAULT NULL,
  `workCenterFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `calendarHolidays_UN` (`dated`,`workCenterFk`),
  KEY `calendarholidaystypeFk_idx` (`calendarHolidaysTypeFk`),
  KEY `calendarHolidaysNameFk_idx` (`calendarHolidaysNameFk`),
  KEY `workCenterFk_idx` (`workCenterFk`),
  CONSTRAINT `calendarHolidaysNameFk` FOREIGN KEY (`calendarHolidaysNameFk`) REFERENCES `calendarHolidaysName` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `calendarholidaystypeFk` FOREIGN KEY (`calendarHolidaysTypeFk`) REFERENCES `calendarHolidaysType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `workCenterFk` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendarHolidaysName`
--

DROP TABLE IF EXISTS `calendarHolidaysName`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendarHolidaysName` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `calendarHolidaysType`
--

DROP TABLE IF EXISTS `calendarHolidaysType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `calendarHolidaysType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `hexColour` char(7) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `campaign`
--

DROP TABLE IF EXISTS `campaign`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `campaign` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` enum('mothersDay','allSaints','valentinesDay') COLLATE utf8_unicode_ci NOT NULL,
  `dated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `scopeDays` int(11) NOT NULL DEFAULT '15',
  PRIMARY KEY (`id`),
  UNIQUE KEY `campaign_dated_uindex` (`dated`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `category`
--

DROP TABLE IF EXISTS `category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `nick` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `chain`
--

DROP TABLE IF EXISTS `chain`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chain` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `rappel` decimal(5,2) NOT NULL DEFAULT '0.00',
  `componentFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `chain_FK` (`componentFk`),
  CONSTRAINT `chain_FK` FOREIGN KEY (`componentFk`) REFERENCES `component` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Grupos de clientes';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `chat`
--

DROP TABLE IF EXISTS `chat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `senderFk` int(10) unsigned DEFAULT NULL,
  `recipient` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dated` datetime DEFAULT NULL,
  `checkUserStatus` tinyint(1) DEFAULT NULL,
  `message` text COLLATE utf8_unicode_ci,
  `status` tinyint(1) DEFAULT NULL,
  `attempts` int(1) DEFAULT NULL,
  `error` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `chat_FK` (`senderFk`),
  CONSTRAINT `chat_FK` FOREIGN KEY (`senderFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `chatConfig`
--

DROP TABLE IF EXISTS `chatConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chatConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `api` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claim`
--

DROP TABLE IF EXISTS `claim`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claim` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ticketCreated` date NOT NULL,
  `claimDepartmentFk__` tinyint(3) unsigned DEFAULT NULL,
  `claimStateFk` int(10) unsigned NOT NULL DEFAULT '1',
  `observation` text COLLATE utf8_unicode_ci,
  `clientFk` int(11) NOT NULL,
  `workerFk` int(11) NOT NULL,
  `responsibility` int(1) unsigned NOT NULL DEFAULT '3',
  `isChargedToMana` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ticketFk` int(11) DEFAULT NULL,
  `hasToPickUp` tinyint(1) NOT NULL,
  `packages` smallint(10) unsigned DEFAULT '0' COMMENT 'packages received by the client',
  PRIMARY KEY (`id`),
  KEY `cl_dep_id` (`claimDepartmentFk__`),
  KEY `cl_est_id` (`claimStateFk`),
  KEY `Id_Cliente` (`clientFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `cl_main_ticketFk_idx` (`ticketFk`),
  CONSTRAINT `cl_main_ticketFk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claim_ibfk_3` FOREIGN KEY (`claimStateFk`) REFERENCES `claimState` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claim_ibfk_4` FOREIGN KEY (`claimDepartmentFk__`) REFERENCES `vn2008`.`cl_dep` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claim_ibfk_5` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Reclamaciones, tabla principal';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimBeginning`
--

DROP TABLE IF EXISTS `claimBeginning`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimBeginning` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `claimFk` int(10) unsigned NOT NULL,
  `saleFk` int(11) DEFAULT NULL,
  `claimComplaintFk__` int(10) unsigned NOT NULL DEFAULT '1',
  `claimRequestFk__` int(1) unsigned NOT NULL DEFAULT '1',
  `quantity` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Id_Movimiento` (`saleFk`),
  KEY `cl_main_id` (`claimFk`),
  CONSTRAINT `claimBeginning_ibfk_7` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `claimBeginning_ibfk_8` FOREIGN KEY (`claimFk`) REFERENCES `claim` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Detalle de las reclamaciones';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`claimBeginning_afterInsert`
	AFTER INSERT ON `claimBeginning`
	FOR EACH ROW
BEGIN
	DECLARE vTicket INT;

	SELECT ticketFk INTO vTicket
		FROM sale
		WHERE id = NEW.saleFk;

	UPDATE claim 
		SET ticketFk = vTicket
		WHERE id = NEW.claimFk;
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 */ ;

--
-- Table structure for table `claimConfig`
--

DROP TABLE IF EXISTS `claimConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimConfig` (
  `id` int(11) NOT NULL,
  `pickupContact` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `maxResponsibility` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimDestination`
--

DROP TABLE IF EXISTS `claimDestination`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimDestination` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `addressFk` int(10) DEFAULT NULL COMMENT 'Indica el consignatario para el ticket que regulariza el inventario',
  PRIMARY KEY (`id`),
  KEY `clSolAddressFk_idx` (`addressFk`),
  CONSTRAINT `clSolAddressFk` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Solucion ofrecida a la reclamación';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimDevelopment`
--

DROP TABLE IF EXISTS `claimDevelopment`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimDevelopment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `claimFk` int(10) unsigned NOT NULL,
  `claimResponsibleFk` int(10) unsigned NOT NULL DEFAULT '1',
  `workerFk` int(10) unsigned DEFAULT NULL,
  `claimReasonFk` int(10) unsigned NOT NULL DEFAULT '1',
  `claimResultFk` int(10) unsigned NOT NULL DEFAULT '1',
  `claimRedeliveryFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `claimDestinationFk` tinyint(3) unsigned NOT NULL DEFAULT '2',
  PRIMARY KEY (`id`),
  KEY `cl_main_id` (`claimFk`),
  KEY `cl_res_id` (`claimResponsibleFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `cl_mot_id` (`claimReasonFk`),
  KEY `cl_con_id` (`claimResultFk`),
  KEY `cl_dev` (`claimRedeliveryFk`),
  KEY `cl_sol` (`claimDestinationFk`),
  CONSTRAINT `claimDevelopment_ibfk_10` FOREIGN KEY (`claimFk`) REFERENCES `claim` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_11` FOREIGN KEY (`claimRedeliveryFk`) REFERENCES `claimRedelivery` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_12` FOREIGN KEY (`claimDestinationFk`) REFERENCES `claimDestination` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_6` FOREIGN KEY (`claimResponsibleFk`) REFERENCES `claimResponsible` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_7` FOREIGN KEY (`claimReasonFk`) REFERENCES `claimReason` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_8` FOREIGN KEY (`claimResultFk`) REFERENCES `claimResult` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimDevelopment_ibfk_9` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Causas de las reclamaciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimDms`
--

DROP TABLE IF EXISTS `claimDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimDms` (
  `claimFk` int(10) unsigned NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`claimFk`,`dmsFk`),
  KEY `dmsFk_idx` (`dmsFk`),
  CONSTRAINT `claimFk` FOREIGN KEY (`claimFk`) REFERENCES `claim` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `dmsFk` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimEnd`
--

DROP TABLE IF EXISTS `claimEnd`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimEnd` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `saleFk` int(11) DEFAULT NULL,
  `claimFk` int(10) unsigned NOT NULL,
  `workerFk` int(10) unsigned NOT NULL DEFAULT '20',
  `claimDestinationFk` tinyint(4) DEFAULT NULL,
  `isGreuge` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `cl_main_id` (`claimFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `Id_Movimiento` (`saleFk`),
  KEY `cl_sol_id` (`claimDestinationFk`),
  CONSTRAINT `claimEnd_ibfk_1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `claimEnd_ibfk_3` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `claimEnd_ibfk_4` FOREIGN KEY (`claimFk`) REFERENCES `claim` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Acciones en respuesta a las reclamaciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimLog`
--

DROP TABLE IF EXISTS `claimLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `claimOriginFk` FOREIGN KEY (`originFk`) REFERENCES `claim` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `claimUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimRatio`
--

DROP TABLE IF EXISTS `claimRatio`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimRatio` (
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `yearSale` decimal(10,2) DEFAULT NULL,
  `claimAmount` decimal(10,2) DEFAULT NULL,
  `claimingRate` decimal(5,2) DEFAULT NULL,
  `priceIncreasing` decimal(5,2) DEFAULT NULL,
  `packingRate` decimal(5,2) NOT NULL DEFAULT '1.00',
  PRIMARY KEY (`clientFk`),
  CONSTRAINT `claimRatio_ibfk_1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimReason`
--

DROP TABLE IF EXISTS `claimReason`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimReason` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `isTired` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Motivos de las fallos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimRedelivery`
--

DROP TABLE IF EXISTS `claimRedelivery`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimRedelivery` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Método por el cual el cliente nos devuelve la mercancía';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimResponsible`
--

DROP TABLE IF EXISTS `claimResponsible`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimResponsible` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `responsability` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'if=1 >sensib >culpa',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Responsables de las causas';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimResult`
--

DROP TABLE IF EXISTS `claimResult`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimResult` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Consecuencias de los motivos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `claimState`
--

DROP TABLE IF EXISTS `claimState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `claimState` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  `description` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `roleFk` int(10) unsigned NOT NULL DEFAULT '1',
  `priority` int(11) NOT NULL DEFAULT '1',
  `hasToNotify` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `roleFgn_idx` (`roleFk`),
  CONSTRAINT `roleFgn` FOREIGN KEY (`roleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Estados posibles de las reclamaciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `client`
--

DROP TABLE IF EXISTS `client`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `client` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `discount__` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `defaultAddressFk` int(11) DEFAULT NULL,
  `street` longtext COLLATE utf8_unicode_ci,
  `fi` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `fax__` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'obsoleta (comprobar)',
  `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cc__` varchar(23) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'obsoleta (comprobar)',
  `dueDay` smallint(6) NOT NULL DEFAULT '5',
  `receipt__` int(11) DEFAULT '1' COMMENT 'obsoleta',
  `isOfficial__` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'obsoleta (comprobar)',
  `isTaxDataChecked` tinyint(1) NOT NULL DEFAULT '0',
  `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `accountingAccount` varchar(10) CHARACTER SET utf8 NOT NULL,
  `isEqualizated` tinyint(1) NOT NULL DEFAULT '0',
  `city` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `postcode` varchar(8) COLLATE utf8_unicode_ci DEFAULT NULL,
  `socialName` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
  `contact` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `wholesaler__` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `isReExpedition__` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `hasToInvoice` tinyint(1) NOT NULL DEFAULT '1',
  `notes__` text COLLATE utf8_unicode_ci COMMENT 'obsoleta (comprobar)',
  `administrativeNotes__` text COLLATE utf8_unicode_ci NOT NULL COMMENT 'obsoleta (comprobar)',
  `invoiceCopy__` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `hold__` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `isFreezed` tinyint(1) NOT NULL DEFAULT '0',
  `salesPersonFk` int(10) unsigned DEFAULT NULL,
  `credit` decimal(10,2) NOT NULL DEFAULT '0.00',
  `cyc__` double DEFAULT NULL COMMENT 'obsoleta (comprobar)',
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  `isActive` tinyint(1) NOT NULL DEFAULT '1',
  `gestdocFk` int(11) DEFAULT NULL,
  `quality` int(2) DEFAULT '11',
  `payMethodFk` tinyint(3) unsigned NOT NULL DEFAULT '5',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `isToBeMailed` tinyint(1) NOT NULL DEFAULT '1',
  `contactChannelFk` smallint(6) DEFAULT NULL,
  `isVies` tinyint(4) NOT NULL DEFAULT '0',
  `splitHolland__` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `sepaFth__` tinyint(1) DEFAULT '0' COMMENT 'campo para recibir los escritos de los clientes para el sepaobsoleta (comprobar)',
  `hasSepaVnl` tinyint(1) DEFAULT '0',
  `coreFth__` tinyint(1) DEFAULT '0' COMMENT 'obsoleta (comprobar)',
  `hasCoreVnl` tinyint(1) DEFAULT '0',
  `riskCalculated` date NOT NULL,
  `hasCoreVnh` tinyint(1) DEFAULT '0',
  `isRelevant` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Define los clientes cuyas ventas hay que tener en cuenta en los calculos estadisticos.',
  `clientTypeFk` int(11) NOT NULL DEFAULT '1',
  `postcodeOld__` int(11) unsigned DEFAULT NULL COMMENT 'obsoleta (comprobar)',
  `mailAddress` int(11) DEFAULT NULL,
  `codposOLD__` char(5) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'obsoleta (comprobar)',
  `creditInsurance` int(11) DEFAULT NULL,
  `eypbc` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Email\\nYesterday\\nPurchases\\nBy\\nConsigna',
  `hasToInvoiceByAddress` tinyint(1) DEFAULT '0',
  `cplusTerIdNifFk__` int(11) NOT NULL DEFAULT '1' COMMENT 'OBSOLETO',
  `isCreatedAsServed` tinyint(1) DEFAULT '0',
  `hasInvoiceSimplified` tinyint(1) NOT NULL DEFAULT '0',
  `iban` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  `hasLcr` tinyint(1) NOT NULL DEFAULT '0',
  `bankEntityFk` int(10) unsigned DEFAULT NULL,
  `typeFk` varchar(20) CHARACTER SET utf8 NOT NULL DEFAULT 'normal',
  `taxTypeSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipo de Iva por defecto asociado al cliente en SAGE',
  `transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Tipo de transacción  por defecto asociado al cliente en SAGE',
  `transferorFk` int(11) DEFAULT NULL COMMENT 'Cliente que le ha transmitido la titularidad de la empresa',
  `lastSalesPersonFk` int(10) unsigned DEFAULT NULL COMMENT 'ultimo comercial que tuvo, para el calculo del peso en los rankings de equipo',
  `businessTypeFk` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `IF` (`fi`),
  KEY `Id_Trabajador` (`salesPersonFk`),
  KEY `Id_Pais` (`countryFk`),
  KEY `pay_met_id` (`payMethodFk`),
  KEY `canal_nuevo_cliente` (`contactChannelFk`),
  KEY `Cuenta` (`accountingAccount`),
  KEY `province_id` (`provinceFk`),
  KEY `default_address` (`defaultAddressFk`),
  KEY `Telefono` (`phone`),
  KEY `movil` (`mobile`),
  KEY `tipos_de_cliente_idx` (`clientTypeFk`),
  KEY `codpos` (`codposOLD__`,`postcode`),
  KEY `fk_Clientes_entity_idx` (`bankEntityFk`),
  KEY `typeFk` (`typeFk`),
  KEY `client_taxTypeSageFk_idx` (`taxTypeSageFk`),
  KEY `client_transactionTypeSageFk_idx` (`transactionTypeSageFk`),
  KEY `client_FK` (`businessTypeFk`),
  KEY `client_lastSalesPersonFk_IDX` (`lastSalesPersonFk`) USING BTREE,
  KEY `client_FK_3` (`transferorFk`),
  CONSTRAINT `canal_nuevo_cliente` FOREIGN KEY (`contactChannelFk`) REFERENCES `contactChannel` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_FK` FOREIGN KEY (`businessTypeFk`) REFERENCES `businessType` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `client_FK_1` FOREIGN KEY (`bankEntityFk`) REFERENCES `bankEntity` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_FK_2` FOREIGN KEY (`lastSalesPersonFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_FK_3` FOREIGN KEY (`transferorFk`) REFERENCES `client` (`id`),
  CONSTRAINT `client_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_ibfk_2` FOREIGN KEY (`payMethodFk`) REFERENCES `payMethod` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_ibfk_3` FOREIGN KEY (`salesPersonFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `client_ibfk_4` FOREIGN KEY (`defaultAddressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `client_ibfk_5` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `client_taxTypeSageFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
  CONSTRAINT `client_transactionTypeSageFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
  CONSTRAINT `tipos_de_cliente` FOREIGN KEY (`clientTypeFk`) REFERENCES `clientType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `typeFk` FOREIGN KEY (`typeFk`) REFERENCES `clientType` (`code`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`client_beforeInsert`
	BEFORE INSERT ON `client`
	FOR EACH ROW
BEGIN

	IF (NEW.phone <> '') THEN
		CALL pbx.phone_isValid(NEW.phone);
	END IF;

	IF (NEW.mobile <> '') THEN
		CALL pbx.phone_isValid(NEW.mobile);
	END IF;

	SET NEW.accountingAccount = 4300000000 + NEW.id;
    
    SET NEW.lastSalesPersonFk = NEW.salesPersonFk;
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`.`client_beforeUpdate`
	BEFORE UPDATE ON `client`
	FOR EACH ROW
BEGIN
	DECLARE vText VARCHAR(255) DEFAULT NULL;
    DECLARE vPayMethodFk INT;
	-- Comprueba que el formato de los teléfonos es válido

	IF !(NEW.phone <=> OLD.phone) AND (NEW.phone <> '') THEN
		CALL pbx.phone_isValid(NEW.phone);
	END IF;
    
    IF !(NEW.mobile <=> OLD.mobile) AND (NEW.mobile <> '')THEN
		CALL pbx.phone_isValid(NEW.mobile);
	END IF;

	SELECT id INTO vPayMethodFk
		FROM vn.payMethod 
		WHERE code = 'bankDraft';
        
	IF NEW.payMethodFk = vPayMethodFk AND NEW.dueDay = 0 THEN
		SET NEW.dueDay = 5;
    END IF;
    
	-- Avisar al comercial si ha llegado la documentación sepa/core

	IF NEW.hasSepaVnl AND !OLD.hasSepaVnl THEN
		SET vText = 'Sepa de VNL';
	END IF;

	IF NEW.hasCoreVnl AND !OLD.hasCoreVnl THEN
		SET vText = 'Core de VNL';
	END IF;

	IF vText IS NOT NULL
    THEN
		INSERT INTO mail(receiver, replyTo, `subject`, body) 
			SELECT
					CONCAT(IF(ac.id,u.name, 'jgallego'), '@verdnatura.es'),
                    'administracion@verdnatura.es',
                    CONCAT('Cliente ', NEW.id),
					CONCAT('Recibida la documentación: ', vText)
				FROM worker w
					LEFT JOIN account.user u ON w.userFk = u.id AND u.active
					LEFT JOIN account.account ac ON ac.id = u.id
				WHERE w.id = NEW.salesPersonFk;
	END IF;
    
    IF NEW.salespersonFk IS NULL AND OLD.salespersonFk IS NOT NULL THEN
		IF (SELECT COUNT(clientFk) 
				FROM clientProtected
                WHERE clientFk = NEW.id
			) > 0 THEN
			CALL util.throw("HAS_CLIENT_PROTECTED");
		END IF;
	END IF;
    
    SET NEW.lastSalesPersonFk = IFNULL(NEW.salesPersonFk, OLD.salesPersonFk);

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`.`client_afterUpdate`
	AFTER UPDATE ON `client`
	FOR EACH ROW
BEGIN
	IF !(NEW.defaultAddressFk <=> OLD.defaultAddressFk) THEN
		UPDATE `address` SET isDefaultAddress = 0
			WHERE clientFk = NEW.id;
			
		UPDATE `address` SET isDefaultAddress = 1
			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
			WHERE id = NEW.id;
	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 */ ;

--
-- Table structure for table `clientChain`
--

DROP TABLE IF EXISTS `clientChain`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientChain` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `chainFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `clientChain_fk1_idx` (`clientFk`),
  KEY `clientChain_fk2_idx` (`chainFk`),
  CONSTRAINT `clientChain_fk1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientChain_fk2` FOREIGN KEY (`chainFk`) REFERENCES `chain` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientConfig`
--

DROP TABLE IF EXISTS `clientConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `riskTolerance` int(11) DEFAULT NULL COMMENT 'Maximo riesgo de un cliente para preparar su pedido',
  `maxCreditRows` int(11) DEFAULT NULL COMMENT 'Máximo número de registros a mantener en la tabla clientCredit',
  `maxPriceIncreasingRatio` decimal(2,2) NOT NULL DEFAULT '0.25' COMMENT 'máximo recobro permitido',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientContact`
--

DROP TABLE IF EXISTS `clientContact`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientContact` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientCredit`
--

DROP TABLE IF EXISTS `clientCredit`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientCredit` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `amount` double unsigned NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `workerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `workers_fk_idx` (`workerFk`),
  KEY `credit_ClienteFk` (`clientFk`),
  CONSTRAINT `credit_ClienteFk` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `workers_fk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER clientCredit_AfterInsert
AFTER INSERT
ON clientCredit FOR EACH ROW
BEGIN
	
	DECLARE vSender VARCHAR(50);

	SELECT u.name INTO vSender
		FROM account.`user` u
		WHERE u.id = NEW.workerFk;
	
	IF vSender IN ('juanvi','pepe') THEN
	
		CALL `vn`.`mail_insert`('pako@verdnatura.es',
								NULL,
								CONCAT('ClientCredit ',vSender, ' ', NEW.clientFk, ' ' , NEW.amount, ' €'),
								CONCAT('ClientCredit ',vSender, ' ', NEW.clientFk, ' ' , NEW.amount, ' €'));

	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 */ ;

--
-- Table structure for table `clientCreditLimit`
--

DROP TABLE IF EXISTS `clientCreditLimit`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientCreditLimit` (
  `id` int(11) NOT NULL,
  `maxAmount` int(10) unsigned NOT NULL,
  `roleFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `clientCreditLimit_FK_idx` (`roleFk`),
  CONSTRAINT `clientCreditLimit_FK` FOREIGN KEY (`roleFk`) REFERENCES `account`.`role` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientDms`
--

DROP TABLE IF EXISTS `clientDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientDms` (
  `clientFk` int(11) NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`dmsFk`),
  KEY `gest_doc_id` (`dmsFk`),
  KEY `fk_clientes_gestdoc_1_idx` (`clientFk`),
  CONSTRAINT `clientDms_ibfk_2` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_clientes_gestdoc_3` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientItemCategory`
--

DROP TABLE IF EXISTS `clientItemCategory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientItemCategory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `itemCategoryFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `clientItemCategory_FK` (`clientFk`),
  KEY `clientItemCategory_FK_1` (`itemCategoryFk`),
  CONSTRAINT `clientItemCategory_FK` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientItemCategory_FK_1` FOREIGN KEY (`itemCategoryFk`) REFERENCES `itemCategory` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientItemType`
--

DROP TABLE IF EXISTS `clientItemType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientItemType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `clientFk` int(11) NOT NULL,
  `itemTypeFk` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `isAllowed` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `clientItemType_FK` (`clientFk`),
  KEY `clientItemType_FK_1` (`itemTypeFk`),
  CONSTRAINT `clientItemType_FK` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientItemType_FK_1` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='son familias de productos que se quieren sustraer a la oferta del cliente';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientLog`
--

DROP TABLE IF EXISTS `clientLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `clientLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `clientLost`
--

DROP TABLE IF EXISTS `clientLost`;
/*!50001 DROP VIEW IF EXISTS `clientLost`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `clientLost` (
  `clientFk` tinyint NOT NULL,
  `lastShipped` tinyint NOT NULL,
  `notBuyingMonths` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `clientManaCache`
--

DROP TABLE IF EXISTS `clientManaCache`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientManaCache` (
  `clientFk` int(11) NOT NULL,
  `mana` decimal(10,0) NOT NULL DEFAULT '0',
  `dated` date NOT NULL,
  PRIMARY KEY (`clientFk`,`dated`),
  KEY `manaCustomerIdx1` (`dated`),
  CONSTRAINT `cliente_fk` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientObservation`
--

DROP TABLE IF EXISTS `clientObservation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientObservation` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `text` text COLLATE utf8_unicode_ci NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `Id_Cliente` (`clientFk`),
  KEY `clientObservation_created_IDX` (`created`) USING BTREE,
  CONSTRAINT `clientObservation_ibfk_1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientObservation_ibfk_2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Todas las observaciones referentes a un ticket';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientPackagingGifts`
--

DROP TABLE IF EXISTS `clientPackagingGifts`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientPackagingGifts` (
  `clientFk` int(11) NOT NULL,
  `giftFk` int(11) NOT NULL,
  `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`clientFk`,`giftFk`),
  KEY `clientPackagingGifts_FK_1` (`giftFk`),
  CONSTRAINT `clientPackagingGifts_FK` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`),
  CONSTRAINT `clientPackagingGifts_FK_1` FOREIGN KEY (`giftFk`) REFERENCES `packagingGifts` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `clientPhoneBook`
--

DROP TABLE IF EXISTS `clientPhoneBook`;
/*!50001 DROP VIEW IF EXISTS `clientPhoneBook`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `clientPhoneBook` (
  `clientFk` tinyint NOT NULL,
  `phone` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `clientProtected`
--

DROP TABLE IF EXISTS `clientProtected`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientProtected` (
  `clientFk` int(11) NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `isValidated__` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`clientFk`),
  KEY `clientProtected_fk2_idx` (`workerFk`),
  CONSTRAINT `clientProtected_fk1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientProtected_fk2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de clientes y comerciales que no se van a ver afectados por las desagsignaciones mensuales automaticas';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientRisk`
--

DROP TABLE IF EXISTS `clientRisk`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientRisk` (
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `companyFk` smallint(6) unsigned NOT NULL DEFAULT '0',
  `amount` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`clientFk`,`companyFk`),
  KEY `company_id` (`companyFk`),
  CONSTRAINT `clientRisk_ibfk_1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientRisk_ibfk_2` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Saldo de apertura < 2015-01-01';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientSample`
--

DROP TABLE IF EXISTS `clientSample`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientSample` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `clientFk` int(10) unsigned NOT NULL,
  `typeFk` int(10) unsigned NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `workerFk` int(10) unsigned NOT NULL,
  `balance` float NOT NULL,
  `companyFk` smallint(5) unsigned DEFAULT NULL,
  `userFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `empresa_id` (`companyFk`),
  CONSTRAINT `clientSample_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientType`
--

DROP TABLE IF EXISTS `clientType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(20) CHARACTER SET utf8 NOT NULL,
  `type` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `isCreatedAsServed` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Establece categorias para poder agrupar las ventas';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientUnpaid`
--

DROP TABLE IF EXISTS `clientUnpaid`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientUnpaid` (
  `clientFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `amount` double DEFAULT '0',
  PRIMARY KEY (`clientFk`),
  CONSTRAINT `clientUnpaid_clientFk` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `clientYoke`
--

DROP TABLE IF EXISTS `clientYoke`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientYoke` (
  `leftOx` int(11) NOT NULL,
  `rightOx` int(11) NOT NULL,
  PRIMARY KEY (`leftOx`,`rightOx`),
  KEY `clientYoke_fk2_idx` (`rightOx`),
  CONSTRAINT `clientYoke_fk1` FOREIGN KEY (`leftOx`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `clientYoke_fk2` FOREIGN KEY (`rightOx`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='emparejamiento de clientes a efectos de precios';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cmr`
--

DROP TABLE IF EXISTS `cmr`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cmr` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) DEFAULT NULL,
  `truckPlate` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `observations` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `senderInstruccions` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'Flowers 4º C. Plants 14º C',
  `paymentInstruccions` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'Carriage paid',
  `specialAgreements` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `companyFk` smallint(5) unsigned DEFAULT NULL,
  `addressToFk` int(11) DEFAULT NULL,
  `addressFromFk` int(11) DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `packagesList` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `merchandiseDetail` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `state` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `landed` datetime DEFAULT NULL COMMENT 'Hora de llegada a destino',
  `ead` datetime DEFAULT NULL COMMENT 'Estimated Arriving Date',
  PRIMARY KEY (`id`),
  KEY `cmr_fk1_idx` (`ticketFk`),
  KEY `cmr_fk2_idx` (`companyFk`),
  KEY `cmr_fk3_idx` (`addressToFk`),
  KEY `cm_fk4_idx` (`supplierFk`),
  KEY `cmr_FK` (`addressFromFk`),
  CONSTRAINT `cm_fk4` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `cmr_FK` FOREIGN KEY (`addressFromFk`) REFERENCES `address` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `cmr_fk1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `cmr_fk2` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `cmr_fk3` FOREIGN KEY (`addressToFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`cmr_BEFORE_INSERT`
	BEFORE INSERT ON `cmr`
	FOR EACH ROW
BEGIN

	DECLARE vLastSenderInstructions VARCHAR(255);
    DECLARE vLastId INT;
    DECLARE vCurrentAgency INT;
    
    SELECT am.agencyFk INTO vCurrentAgency
		FROM vn.agencyMode am
        JOIN vn.ticket t ON t.agencyModeFk = am.id
        WHERE t.id = NEW.ticketFk;
    
     SELECT MAX(cmr.id)  INTO vLastId
		FROM cmr
        JOIN vn.ticket t ON t.id = cmr.ticketFk
        JOIN vn.agencyMode am ON am.id = t.agencyModeFk
        WHERE am.agencyFk = vCurrentAgency 
        ;
        
    SELECT senderInstruccions INTO vLastSenderInstructions
		FROM cmr
        WHERE id = vLastId;
        
	SET NEW.senderInstruccions = vLastSenderInstructions;

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 */ ;

--
-- Table structure for table `cmrConfig`
--

DROP TABLE IF EXISTS `cmrConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cmrConfig` (
  `dayOfMonth` int(11) DEFAULT NULL,
  `landingDays` tinyint(4) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cmr_expeditionPallet`
--

DROP TABLE IF EXISTS `cmr_expeditionPallet`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cmr_expeditionPallet` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cmrFk` int(11) NOT NULL,
  `expeditionPalletFk` int(11) NOT NULL,
  `scanned` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `cmr_expeditionPallet_fk1_idx` (`cmrFk`),
  KEY `cmr_expeditionPallet_fk2_idx` (`expeditionPalletFk`),
  CONSTRAINT `cmr_expeditionPallet_fk1` FOREIGN KEY (`cmrFk`) REFERENCES `cmr` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `cmr_expeditionPallet_fk2` FOREIGN KEY (`expeditionPalletFk`) REFERENCES `expeditionPallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='relaciona los cmr con los pallets de expediciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `cmr_list`
--

DROP TABLE IF EXISTS `cmr_list`;
/*!50001 DROP VIEW IF EXISTS `cmr_list`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `cmr_list` (
  `cmrFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `truckPlate` tinyint NOT NULL,
  `observations` tinyint NOT NULL,
  `senderInstruccions` tinyint NOT NULL,
  `paymentInstruccions` tinyint NOT NULL,
  `specialAgreements` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `packagesList` tinyint NOT NULL,
  `clientName` tinyint NOT NULL,
  `clientPostalCode` tinyint NOT NULL,
  `clientStreet` tinyint NOT NULL,
  `clientCity` tinyint NOT NULL,
  `clientProvince` tinyint NOT NULL,
  `clientCountry` tinyint NOT NULL,
  `companyName` tinyint NOT NULL,
  `companyStreet` tinyint NOT NULL,
  `companyPostCode` tinyint NOT NULL,
  `companyCity` tinyint NOT NULL,
  `companyCountry` tinyint NOT NULL,
  `warehouseAddress` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `clientOficialName` tinyint NOT NULL,
  `supplierFk` tinyint NOT NULL,
  `carrierName` tinyint NOT NULL,
  `carrierStreet` tinyint NOT NULL,
  `carrierPostCode` tinyint NOT NULL,
  `carrierCity` tinyint NOT NULL,
  `carrierCountry` tinyint NOT NULL,
  `phone` tinyint NOT NULL,
  `mobile` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `stamp` tinyint NOT NULL,
  `merchandiseDetail` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `collection`
--

DROP TABLE IF EXISTS `collection`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `collection` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `stateFk` tinyint(3) unsigned DEFAULT NULL,
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `saleTotalCount` int(11) NOT NULL DEFAULT '0',
  `salePickedCount` int(11) NOT NULL DEFAULT '0',
  `trainFk` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `ticketCollection_idx` (`workerFk`),
  KEY `collection_id2_idx` (`stateFk`),
  KEY `collection_FK` (`itemPackingTypeFk`),
  KEY `collectionTrain_Fk` (`trainFk`),
  CONSTRAINT `collectionTrain_Fk` FOREIGN KEY (`trainFk`) REFERENCES `train` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `collection_id2` FOREIGN KEY (`stateFk`) REFERENCES `state` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `ticketCollection` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`collection_BEFORE_UPDATE`
	BEFORE UPDATE ON `collection`
	FOR EACH ROW
BEGIN
	
	DECLARE vStateFk INT;
	DECLARE vTotalLines INT;
	DECLARE vPickedLines INT;

	IF NEW.saleTotalCount <= NEW.salePickedCount 
		AND (NEW.saleTotalCount != OLD.saleTotalCount 
			OR NEW.salePickedCount != OLD.salePickedCount)
		THEN 
		
			SELECT id INTO vStateFk
				FROM vn.state 
				WHERE code = 'PREPARED';
			
			SET NEW.stateFk = vStateFk;
	
	END IF;

	IF NEW.saleTotalCount > NEW.salePickedCount 
		AND (NEW.saleTotalCount != OLD.saleTotalCount OR NEW.salePickedCount != OLD.salePickedCount) THEN 

		SELECT id INTO vStateFk
			FROM vn.state 
			WHERE code = 'ON_PREPARATION';
		
		SET NEW.stateFk = vStateFk;
	
	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 */ ;

--
-- Table structure for table `collectionColors`
--

DROP TABLE IF EXISTS `collectionColors`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `collectionColors` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `shelve` int(11) NOT NULL DEFAULT '1',
  `wagon` int(11) NOT NULL DEFAULT '1',
  `trainFk` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `collectionColors_FK` (`trainFk`),
  CONSTRAINT `collectionColors_FK` FOREIGN KEY (`trainFk`) REFERENCES `train` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Recoge los colores para las baldas de las colecciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `collectionSmartTag`
--

DROP TABLE IF EXISTS `collectionSmartTag`;
/*!50001 DROP VIEW IF EXISTS `collectionSmartTag`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `collectionSmartTag` (
  `code` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `level` tinyint NOT NULL,
  `wagon` tinyint NOT NULL,
  `shelvingFk` tinyint NOT NULL,
  `collectionFk` tinyint NOT NULL,
  `agencyFk` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `collectionSmartTag2`
--

DROP TABLE IF EXISTS `collectionSmartTag2`;
/*!50001 DROP VIEW IF EXISTS `collectionSmartTag2`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `collectionSmartTag2` (
  `code` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `level` tinyint NOT NULL,
  `wagon` tinyint NOT NULL,
  `shelvingFk` tinyint NOT NULL,
  `collectionFk` tinyint NOT NULL,
  `agencyFk` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `worker` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `landed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `collectionVolumetry`
--

DROP TABLE IF EXISTS `collectionVolumetry`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `collectionVolumetry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `level` int(10) unsigned NOT NULL DEFAULT '0',
  `lines` int(10) unsigned NOT NULL DEFAULT '1',
  `liters` int(10) unsigned NOT NULL DEFAULT '0',
  `height` int(10) unsigned NOT NULL DEFAULT '20',
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'H',
  `trainFk` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `collectionVolumetry_FK` (`itemPackingTypeFk`),
  KEY `collectionVolumetry_FK_1` (`trainFk`),
  CONSTRAINT `collectionVolumetry_FK` FOREIGN KEY (`itemPackingTypeFk`) REFERENCES `itemPackingType` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `collectionVolumetry_FK_1` FOREIGN KEY (`trainFk`) REFERENCES `train` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `commissionConfig`
--

DROP TABLE IF EXISTS `commissionConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `commissionConfig` (
  `rate` decimal(5,4) NOT NULL DEFAULT '0.0000',
  `plusTeamAmount` int(11) DEFAULT NULL,
  `plusNewBornAmount` int(11) DEFAULT NULL,
  `plusSalesAmount` int(11) DEFAULT NULL,
  `minimumSalesByQuarter` int(11) DEFAULT NULL,
  `plusTeamRange` int(11) DEFAULT NULL,
  `plusNewBornRange` int(11) DEFAULT NULL,
  `rankingSalesRange` int(11) DEFAULT NULL,
  `minScoreForPlusTeam` int(11) DEFAULT NULL,
  `minScoreForPlusBoss` int(11) DEFAULT NULL,
  `plusTeam` int(11) DEFAULT NULL,
  `plusBoss` int(11) DEFAULT NULL COMMENT 'Este campo se deberá multiplicar x el número de miembros del equipo',
  `executionDay` smallint(6) DEFAULT NULL,
  `salesPersonWithPlusNewClient` int(11) DEFAULT NULL,
  `maxPlusNewClient` int(11) DEFAULT NULL,
  `plusDifference` int(11) DEFAULT NULL,
  `maxScoreNewClient` int(11) DEFAULT NULL,
  `scoreDifference` int(11) DEFAULT NULL,
  PRIMARY KEY (`rate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `company`
--

DROP TABLE IF EXISTS `company`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `company` (
  `id` smallint(5) unsigned NOT NULL,
  `code` char(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `register` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
  `workerManagerFk` int(10) unsigned NOT NULL,
  `registered` date NOT NULL,
  `expired` date DEFAULT NULL,
  `logo` longblob,
  `isOfficial` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `hasCyc` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
  `rgb` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `stamp` blob,
  `created` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `clientFk` int(11) DEFAULT NULL,
  `sage200Company` int(2) DEFAULT NULL,
  `supplierAccountFk` mediumint(8) unsigned DEFAULT NULL,
  `isDefaulter` tinyint(4) NOT NULL DEFAULT '0',
  `companyGroupFk` int(11) NOT NULL DEFAULT '1' COMMENT 'usado para calcular los greuges ',
  `companyCode` int(2) DEFAULT NULL COMMENT 'Campo para movConta',
  `companyCodeTest` int(2) DEFAULT NULL,
  `footnotes` longtext COLLATE utf8_unicode_ci COMMENT 'pie de paginas en las facturas',
  `phytosanitary` longtext COLLATE utf8_unicode_ci,
  `fhAdminNumber` int(11) DEFAULT NULL COMMENT 'número de cliente en FloraHolland',
  PRIMARY KEY (`id`),
  UNIQUE KEY `companyCode_UNIQUE` (`code`),
  KEY `gerente_id` (`workerManagerFk`),
  KEY `empresa_cliente_idx` (`clientFk`),
  KEY `Id_Proveedores_account` (`supplierAccountFk`),
  KEY `empresa_grupo_fk_idx` (`companyGroupFk`),
  KEY `company_fhAdminNumber_IDX` (`fhAdminNumber`) USING BTREE,
  CONSTRAINT `company_ibfk_1` FOREIGN KEY (`workerManagerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `empresa_cliente` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `empresa_fk4` FOREIGN KEY (`supplierAccountFk`) REFERENCES `supplierAccount` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_empresa_grupo` FOREIGN KEY (`companyGroupFk`) REFERENCES `companyGroup` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `companyGroup`
--

DROP TABLE IF EXISTS `companyGroup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `companyGroup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `comparativeFilterType`
--

DROP TABLE IF EXISTS `comparativeFilterType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `comparativeFilterType` (
  `comparativeFilterFk` int(11) NOT NULL,
  `itemTypeFk` int(11) NOT NULL,
  PRIMARY KEY (`comparativeFilterFk`,`itemTypeFk`),
  CONSTRAINT `comparativeFilterType_FK` FOREIGN KEY (`comparativeFilterFk`) REFERENCES `comparativeFilter` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `component`
--

DROP TABLE IF EXISTS `component`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `component` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `typeFk` int(11) NOT NULL,
  `classRate` smallint(6) DEFAULT NULL,
  `tax` double DEFAULT NULL,
  `isRenewable` tinyint(2) NOT NULL DEFAULT '1',
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isRequired` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Son componentes imprescindibles en toda venta',
  PRIMARY KEY (`id`),
  KEY `series_componentes_idx` (`typeFk`),
  KEY `comp` (`classRate`),
  CONSTRAINT `serie_componente` FOREIGN KEY (`typeFk`) REFERENCES `componentType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `componentType`
--

DROP TABLE IF EXISTS `componentType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `componentType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `isBase` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Marca aquellas series que se utilizan para calcular el precio base de las ventas, a efectos estadisticos',
  `isMargin` tinyint(4) NOT NULL DEFAULT '0',
  `code` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Serie_UNIQUE` (`type`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Permite organizar de forma ordenada los distintos componentes';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `confectionType`
--

DROP TABLE IF EXISTS `confectionType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `confectionType` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ochoa` int(10) unsigned NOT NULL,
  `invoiceOutFk` int(11) DEFAULT '0',
  `bookFk__` int(11) DEFAULT '0',
  `serialAFk__` int(11) DEFAULT '0',
  `serialEFk__` int(11) DEFAULT '0',
  `serialRFk__` int(11) DEFAULT '0',
  `serialCFk__` int(11) DEFAULT '0',
  `serialHFk__` int(11) NOT NULL,
  `serialPFk__` int(11) DEFAULT '0',
  `serialTFk__` int(11) DEFAULT '0',
  `inventoried` datetime DEFAULT NULL,
  `serialMFk__` int(11) DEFAULT '0',
  `itemLog` int(11) DEFAULT '0',
  `weekGoal` int(11) DEFAULT NULL,
  `photosPath` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cashBoxNumber` int(11) DEFAULT '0',
  `redCode` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TabletTime` datetime DEFAULT NULL,
  `t0` int(11) NOT NULL DEFAULT '0',
  `t1` int(11) NOT NULL DEFAULT '0',
  `t2` int(11) NOT NULL DEFAULT '0',
  `t3` int(11) NOT NULL DEFAULT '0',
  `cc` double NOT NULL DEFAULT '0',
  `palet` double NOT NULL DEFAULT '0',
  `campaign` datetime NOT NULL,
  `campaignLife` tinyint(3) unsigned NOT NULL,
  `truckDays` tinyint(3) unsigned NOT NULL,
  `transportCharges` double NOT NULL,
  `escanerPath` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `printedTurn` int(4) DEFAULT NULL,
  `truckLength` int(11) DEFAULT '24',
  `fuelConsumption` int(11) DEFAULT NULL,
  `petrol` decimal(10,1) DEFAULT NULL,
  `maintenance` decimal(10,1) DEFAULT NULL,
  `hourPrice` decimal(10,1) DEFAULT NULL,
  `meterPrice` decimal(10,1) DEFAULT NULL,
  `kmPrice` decimal(10,1) DEFAULT NULL,
  `routeOption` int(11) DEFAULT '1',
  `dbproduccion` tinyint(1) NOT NULL DEFAULT '1',
  `mdbServer` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `fakeEmail` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `defaultersMaxAmount` int(10) DEFAULT '200' COMMENT 'maxima deuda permitida a partir de la cual se bloquea a un usuario',
  `ASIEN` bigint(20) DEFAULT NULL,
  `dayStartingHour` int(11) NOT NULL DEFAULT '3' COMMENT 'Hora a la que empieza una nueva jornada de producción',
  PRIMARY KEY (`id`),
  KEY `fechainv_idx` (`inventoried`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `contactChannel`
--

DROP TABLE IF EXISTS `contactChannel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contactChannel` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Canal por el que nos ha conocido un cliente y  se ha dado de';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `continent`
--

DROP TABLE IF EXISTS `continent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `continent` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(2) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `continent_name_uindex` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='World continents';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `contratos_subvencion_270619`
--

DROP TABLE IF EXISTS `contratos_subvencion_270619`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contratos_subvencion_270619` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `cod_centroFk` int(11) NOT NULL,
  `CodContratoFk` int(11) NOT NULL,
  `journey` decimal(5,2) NOT NULL DEFAULT '8.00',
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `nif` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `contratos_subvencion_270619_fk2_idx` (`cod_centroFk`),
  KEY `contratos_subvencion_270619_fk3_idx` (`CodContratoFk`),
  KEY `contratos_subvencion_270619_fk1_idx` (`workerFk`),
  CONSTRAINT `contratos_subvencion_270619_fk1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `contratos_subvencion_270619_fk2` FOREIGN KEY (`cod_centroFk`) REFERENCES `vn2008`.`payroll_centros` (`cod_centro`) ON UPDATE CASCADE,
  CONSTRAINT `contratos_subvencion_270619_fk3` FOREIGN KEY (`CodContratoFk`) REFERENCES `vn2008`.`payroll_contratos__` (`CodContrato`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Segun los informes de vida laboral aportados por la SS';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyor`
--

DROP TABLE IF EXISTS `conveyor`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyor` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `typeFk` int(11) NOT NULL,
  `stratum` int(11) NOT NULL DEFAULT '0',
  `length` int(11) DEFAULT NULL,
  `width` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  `x` int(11) DEFAULT NULL,
  `y` int(11) DEFAULT NULL,
  `freeSpace` int(11) NOT NULL DEFAULT '0',
  `isBusy` tinyint(1) NOT NULL DEFAULT '0',
  `tandem` int(11) DEFAULT NULL COMMENT 'agrupa conveyors para dividir las cajas por tipo en una misma ruta',
  `conveyorBuildingClassFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `conveyor_fk1_idx` (`typeFk`),
  CONSTRAINT `conveyor_fk1` FOREIGN KEY (`typeFk`) REFERENCES `conveyorType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyorBuildingClass`
--

DROP TABLE IF EXISTS `conveyorBuildingClass`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyorBuildingClass` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `priority` int(11) NOT NULL DEFAULT '0',
  `weightThreshold` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tipo de caja para el montaje de pallets';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyorConfig`
--

DROP TABLE IF EXISTS `conveyorConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyorConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemName` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `length` int(11) DEFAULT NULL,
  `width` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `itemName_UNIQUE` (`itemName`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyorExpedition`
--

DROP TABLE IF EXISTS `conveyorExpedition`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyorExpedition` (
  `expeditionFk` int(11) NOT NULL,
  `conveyorFk` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `conveyorBuildingClassFk` int(11) NOT NULL DEFAULT '1',
  `length` int(11) NOT NULL DEFAULT '1',
  `width` int(11) NOT NULL DEFAULT '1',
  `height` int(11) NOT NULL DEFAULT '1',
  `x` int(11) NOT NULL DEFAULT '18100',
  `y` int(11) NOT NULL DEFAULT '1',
  `routeFk` int(11) NOT NULL,
  `isIn` tinyint(4) NOT NULL DEFAULT '0',
  `productionMinute` int(11) DEFAULT NULL,
  `isOut` tinyint(4) NOT NULL DEFAULT '0',
  `truck` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `criterion` int(11) DEFAULT NULL,
  `isHeavy` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`expeditionFk`),
  KEY `conveyorExpedition_fk1_idx` (`conveyorFk`),
  KEY `conveyorExpedition_fk2_idx` (`conveyorBuildingClassFk`),
  CONSTRAINT `conveyorExpedition_fk1` FOREIGN KEY (`conveyorFk`) REFERENCES `conveyor` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `conveyorExpedition_fk2` FOREIGN KEY (`conveyorBuildingClassFk`) REFERENCES `conveyorBuildingClass` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyorMode`
--

DROP TABLE IF EXISTS `conveyorMode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyorMode` (
  `code` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `saturacion` int(11) NOT NULL,
  `gap` int(11) NOT NULL,
  `isActive` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `conveyorType`
--

DROP TABLE IF EXISTS `conveyorType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `conveyorType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `color` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `corridor`
--

DROP TABLE IF EXISTS `corridor`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `corridor` (
  `code` varchar(1) COLLATE utf8_unicode_ci NOT NULL COMMENT 'letra que da nombre al pasillo',
  `isAscendent` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'TRUE cuando se prepara de menor a mayor, FALSE cuando es a la inversa',
  `prepOrder` int(10) unsigned NOT NULL COMMENT 'orden de preparacion de los pasillos',
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='establece el orden y sentido de preparacion de los pasillos del parking';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `country`
--

DROP TABLE IF EXISTS `country`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `country` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `country` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `CEE` tinyint(1) NOT NULL DEFAULT '1',
  `code` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `currencyFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `politicalCountryFk` mediumint(8) unsigned NOT NULL COMMENT 'Pais Real(apaño por culpa del España Exento)',
  `geoFk` int(11) DEFAULT NULL,
  `hasDailyInvoice` tinyint(4) NOT NULL DEFAULT '0',
  `isUeeMember` tinyint(4) NOT NULL DEFAULT '0',
  `ibanLength` tinyint(4) DEFAULT NULL,
  `continentFk` tinyint(4) DEFAULT NULL,
  `a3Code` int(11) DEFAULT NULL COMMENT 'Código país para a3',
  PRIMARY KEY (`id`),
  KEY `Id_Paisreal` (`politicalCountryFk`),
  KEY `currency_id_fk_idx` (`currencyFk`),
  KEY `country_Ix4` (`country`),
  KEY `continent_id_fk_idx` (`continentFk`),
  KEY `country_FK_1` (`geoFk`),
  CONSTRAINT `continent_id_fk` FOREIGN KEY (`continentFk`) REFERENCES `continent` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `country_FK` FOREIGN KEY (`politicalCountryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `country_FK_1` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `currency_id_fk` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`country_beforeInsert`
	BEFORE INSERT ON `country`
	FOR EACH ROW
BEGIN
    SET NEW.geoFk = zoneGeo_new('country', NEW.country, NULL);
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`.`country_AFTER_INSERT`
	AFTER INSERT ON `country`
	FOR EACH ROW
BEGIN

	UPDATE sage.Naciones 
		SET countryFk = NEW.id
		WHERE Nacion = NEW.country;

	IF ROW_COUNT() = 0 THEN
		CALL mail_insert(
			'cau@verdnatura.es',
			NULL,
			'Actualizar tabla sage.Naciones',
			CONCAT('Se ha insertado un nuevo país en la tabla vn.conuntry. Para el correcto funcionamiento del sistema 
				de contabilidad es necesario actualizar la columna sage.Naciones.countryFk con el valor del nuevo país. 
			 Hay que buscar el nuevo país: ', NEW.country, ' en la tabla sage.Naciones y actualizar el campo sage.Naciones.countryFk con el valor ', NEW.id)
		);
	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`.`country_beforeUpdate`
	BEFORE UPDATE ON `country`
	FOR EACH ROW
BEGIN
	-- IF !(OLD.geoFk <=> NEW.geoFk) THEN
		-- CALL zoneGeo_throwNotEditable;
	-- 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`.`country_afterUpdate`
	AFTER UPDATE ON `country`
	FOR EACH ROW
BEGIN
	IF !(OLD.country <=> NEW.country) THEN
		UPDATE zoneGeo SET `name` = NEW.country
			WHERE id = NEW.geoFk;
	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`.`country_afterDelete`
	AFTER DELETE ON `country`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_delete(OLD.geoFk);
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 */ ;

--
-- Table structure for table `cplusCorrectingType`
--

DROP TABLE IF EXISTS `cplusCorrectingType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusCorrectingType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusInvoiceType472`
--

DROP TABLE IF EXISTS `cplusInvoiceType472`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusInvoiceType472` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*18) TIPO FACTURA (Asientos)SOPORTADO – DEDUCIBLE (472)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusInvoiceType477`
--

DROP TABLE IF EXISTS `cplusInvoiceType477`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusInvoiceType477` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*18) TIPO FACTURA (Asientos)REPERCUTIDO - DEVENGADO (477)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusRectificationType`
--

DROP TABLE IF EXISTS `cplusRectificationType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusRectificationType` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*20) TIPO RECTIFICATIVA (Asientos)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusSubjectOp`
--

DROP TABLE IF EXISTS `cplusSubjectOp`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusSubjectOp` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*17) TIPO OPERACIÓN SUJETA/NO SUJETA (Asientos)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusTaxBreak`
--

DROP TABLE IF EXISTS `cplusTaxBreak`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusTaxBreak` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*16) TIPO EXENCIÓN (Asientos)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusTerIdNif`
--

DROP TABLE IF EXISTS `cplusTerIdNif`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusTerIdNif` (
  `id` int(11) NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusTrascendency472`
--

DROP TABLE IF EXISTS `cplusTrascendency472`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusTrascendency472` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*15) CLAVE DE RÉGIMEN ESPECIAL O TRASCENDENCIA(Asientos)SOPORTADO – DEDUCIBLE (472)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `cplusTrascendency477`
--

DROP TABLE IF EXISTS `cplusTrascendency477`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cplusTrascendency477` (
  `id` int(10) unsigned NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='(*15) CLAVE DE RÉGIMEN ESPECIAL O TRASCENDENCIA(Asientos) REPERCUTIDO - DEVENGADO (477)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `creditClassification`
--

DROP TABLE IF EXISTS `creditClassification`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `creditClassification` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `client` int(11) NOT NULL,
  `dateStart` date NOT NULL,
  `dateEnd` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `creditClassifClientFk_idx` (`client`),
  KEY `creditClassifdateEnd_idx` (`dateEnd`),
  CONSTRAINT `creditClassifClientFk` FOREIGN KEY (`client`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`creditClassification_beforeUpdate`
	BEFORE UPDATE ON `creditClassification`
	FOR EACH ROW
BEGIN
	IF NEW.client <> OLD.client THEN
		CALL util.throw('NOT_ALLOWED_CHANGE_CLIENT');
    END IF;
    IF NEW.dateEnd IS NOT NULL AND OLD.dateEnd IS NULL THEN
		UPDATE `client` c
			SET creditInsurance = NULL WHERE c.id = NEW.client;
    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 */ ;

--
-- Table structure for table `creditInsurance`
--

DROP TABLE IF EXISTS `creditInsurance`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `creditInsurance` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `creditClassification` int(11) DEFAULT NULL,
  `credit` int(11) DEFAULT NULL,
  `creationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `grade` tinyint(1) DEFAULT NULL,
  `creditClassificationFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `CreditInsurance_Fk1_idx` (`creditClassification`),
  KEY `creditInsurance_creditClassificationFk` (`creditClassificationFk`),
  CONSTRAINT `CreditInsurance_Fk1` FOREIGN KEY (`creditClassification`) REFERENCES `creditClassification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `creditInsurance_creditClassificationFk` FOREIGN KEY (`creditClassificationFk`) REFERENCES `creditClassification` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Detalla los clientes que tienen seguro de credito';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`creditInsurance_beforeInsert`
	BEFORE INSERT ON `creditInsurance`
	FOR EACH ROW
BEGIN
	IF NEW.creditClassificationFk THEN
		SET NEW.creditClassification = NEW.creditClassificationFk;
	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`.`creditInsurance_afterInsert`
	AFTER INSERT ON `creditInsurance`
	FOR EACH ROW
BEGIN
	UPDATE `client` c
		JOIN vn.creditClassification  cc ON cc.client = c.id
        SET creditInsurance = NEW.credit WHERE cc.id = NEW.creditClassification;
        
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 */ ;

--
-- Table structure for table `currency`
--

DROP TABLE IF EXISTS `currency`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `currency` (
  `id` tinyint(3) unsigned NOT NULL,
  `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ratio` double NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `Moneda_UNIQUE` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `customsAgent`
--

DROP TABLE IF EXISTS `customsAgent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `customsAgent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fiscalName` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `street` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `nif` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phone` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `email` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nif_UNIQUE` (`nif`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dayMinute`
--

DROP TABLE IF EXISTS `dayMinute`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dayMinute` (
  `id` int(10) unsigned NOT NULL,
  `hh` int(10) unsigned NOT NULL,
  `mm` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `dayMinute_ix1` (`hh`),
  KEY `dayMinute_ix2` (`mm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='sirve de soporte para el calculo presencial de los trabjadores';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `defaulter`
--

DROP TABLE IF EXISTS `defaulter`;
/*!50001 DROP VIEW IF EXISTS `defaulter`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `defaulter` (
  `clientFk` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `defaulterSinced` tinyint NOT NULL,
  `hasChanged` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `delivery`
--

DROP TABLE IF EXISTS `delivery`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `delivery` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `longitude` decimal(11,7) DEFAULT NULL,
  `latitude` decimal(11,7) DEFAULT NULL,
  `dated` datetime DEFAULT NULL,
  `addressFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `delivery_FK` (`addressFk`),
  CONSTRAINT `delivery_FK` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Informa de los datos geográficos y temporales de las entregas de los repartidores';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deliveryMethod`
--

DROP TABLE IF EXISTS `deliveryMethod`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deliveryMethod` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deliveryPoint`
--

DROP TABLE IF EXISTS `deliveryPoint`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deliveryPoint` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `ubication` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `delivery_zip`
--

DROP TABLE IF EXISTS `delivery_zip`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `delivery_zip` (
  `postal_code` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `country_code` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `place_name` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `admin_name1` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `code_name1` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `admin_name2` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `code_name2` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `admin_name3` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `code_name3` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `latitude` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `longitude` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `accuracy` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `delivery_zipPK` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`delivery_zipPK`),
  KEY `country_code_idx` (`country_code`),
  KEY `place_name_idx` (`place_name`),
  KEY `postal_code_idx` (`postal_code`),
  KEY `admin_name3_idx` (`admin_name3`),
  KEY `admin_name2_idx` (`admin_name2`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `department`
--

DROP TABLE IF EXISTS `department`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `department` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `lft` int(11) DEFAULT NULL,
  `rgt` int(11) DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL COMMENT 'Id_Trabajador es el jefe del departamento',
  `companyFk` int(11) NOT NULL,
  `bossFk__` int(11) DEFAULT NULL,
  `x__` int(11) DEFAULT NULL,
  `y__` int(11) DEFAULT NULL,
  `isProduction` tinyint(4) NOT NULL DEFAULT '0',
  `isSelected` tinyint(1) NOT NULL DEFAULT '0',
  `depth` int(11) NOT NULL DEFAULT '0',
  `sons` decimal(10,0) NOT NULL DEFAULT '0',
  `parentFk` int(11) DEFAULT '1',
  `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `chatName` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isTeleworking` tinyint(1) DEFAULT '0',
  `notificationEmail` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hasToRefill` tinyint(1) DEFAULT '0' COMMENT 'Rellenar días sin fichadas presenciales',
  `hasToSendMail` tinyint(1) DEFAULT '0' COMMENT 'Para el envio de mail en el procedimiento workerTimeControl_sendMail()',
  `hasToCheckLogin` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Para comprobar en el login de la app',
  `hasToMistake` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Indica si al departamento pueden serles puestos errores',
  `clientFk` int(11) DEFAULT NULL COMMENT 'Cuenta de cliente que se utiliza para los compras de consumo departamental',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`),
  KEY `fk_department_Trabajadores1_idx` (`workerFk`),
  KEY `dep_org_ibfk_3_idx` (`companyFk`),
  KEY `lft_rgt_depth_idx` (`lft`,`rgt`,`depth`),
  KEY `department_FK` (`clientFk`),
  KEY `department_FK_1` (`parentFk`),
  CONSTRAINT `department_FK` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `department_FK_1` FOREIGN KEY (`parentFk`) REFERENCES `department` (`id`),
  CONSTRAINT `fk_department_Trabajadores1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`department_beforeInsert`
	BEFORE INSERT ON `department`
	FOR EACH ROW
BEGIN
	UPDATE vn.department_recalc SET isChanged = TRUE;
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`.`department_afterUpdate`
	AFTER UPDATE ON `department`
	FOR EACH ROW
BEGIN
	IF !(OLD.parentFk <=> NEW.parentFk) THEN
		UPDATE vn.department_recalc SET isChanged = TRUE;
	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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER department_beforeDelete
BEFORE DELETE
ON department FOR EACH ROW
BEGIN

	UPDATE postgresql.business_labour bl
		JOIN vn.department d ON d.id = bl.department_id
		SET bl.department_id = d.parentFk
		WHERE bl.department_id = 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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`department_afterDelete`
	AFTER DELETE ON `department`
	FOR EACH ROW
BEGIN
	
	UPDATE vn.department_recalc SET isChanged = TRUE;
	
	UPDATE postgresql.business_labour bl
		JOIN vn.department d ON d.id = bl.department_id
		SET bl.department_id = d.parentFk
		WHERE bl.department_id = 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 */ ;

--
-- Temporary table structure for view `departmentTree`
--

DROP TABLE IF EXISTS `departmentTree`;
/*!50001 DROP VIEW IF EXISTS `departmentTree`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `departmentTree` (
  `id` tinyint NOT NULL,
  `dep` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `department_recalc`
--

DROP TABLE IF EXISTS `department_recalc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `department_recalc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `isChanged` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `device`
--

DROP TABLE IF EXISTS `device`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `device` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sn` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `model` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `userFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `device_fk1_idx` (`userFk`),
  CONSTRAINT `device_fk1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deviceLog`
--

DROP TABLE IF EXISTS `deviceLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deviceLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `android_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `nameApp` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `versionApp` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `deviceLog_FK` (`userFk`),
  CONSTRAINT `deviceLog_FK` FOREIGN KEY (`userFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deviceProduction`
--

DROP TABLE IF EXISTS `deviceProduction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deviceProduction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imei` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `modelFk` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `macWifi` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `serialNumber` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `departmentFk` int(11) DEFAULT NULL,
  `isOutOfService` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0: Ok  - 1: No disponible  - 2: Sat',
  `android_id` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `purchased` date NOT NULL DEFAULT '1900-01-01' COMMENT 'Fecha de compra',
  PRIMARY KEY (`id`),
  UNIQUE KEY `device_id_UNIQUE` (`id`),
  UNIQUE KEY `sn_UNIQUE` (`imei`),
  UNIQUE KEY `serial_number_UN` (`serialNumber`),
  KEY `deviceProductionModelsFgn` (`modelFk`),
  KEY `departmentFgn` (`departmentFk`),
  CONSTRAINT `departmentFgn` FOREIGN KEY (`departmentFk`) REFERENCES `department` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `deviceProductionModelsFgn` FOREIGN KEY (`modelFk`) REFERENCES `deviceProductionModels` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deviceProductionConfig`
--

DROP TABLE IF EXISTS `deviceProductionConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deviceProductionConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `isAllUsersallowed` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Permite que cualquier usuario pueda loguearse',
  `isTractorHuntingMode` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Habilita el modo cazador para usuarios que no se han logeado un tractor para sacar',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`deviceProductionConfig_afterUpdate`
	AFTER UPDATE ON `deviceProductionConfig`
	FOR EACH ROW
BEGIN
	IF NEW.isAllUsersAllowed = 1 OR NEW.isAllUsersAllowed = -1 THEN
		SET @username := (SELECT account.myUser_getName());
		INSERT INTO vn.mail (receiver, subject, body)
		VALUES ('cau@verdnatura.es', 'Se ha activado la autenticación sin restricciones en la app',
		CONCAT('El usuario ', @username,' ha habilitado la opción para que todos los usuarios puedan acceder a la app sin restricciones'));
	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 */ ;

--
-- Table structure for table `deviceProductionModels`
--

DROP TABLE IF EXISTS `deviceProductionModels`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deviceProductionModels` (
  `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `deviceProductionUser`
--

DROP TABLE IF EXISTS `deviceProductionUser`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `deviceProductionUser` (
  `deviceProductionFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`deviceProductionFk`),
  UNIQUE KEY `deviceProductionUser_UN` (`userFk`),
  KEY `userFgn_idx` (`userFk`),
  CONSTRAINT `deviceProductionUser_FK` FOREIGN KEY (`deviceProductionFk`) REFERENCES `deviceProduction` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `deviceProductionUser_PK` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `disabilityGrade`
--

DROP TABLE IF EXISTS `disabilityGrade`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `disabilityGrade` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Grados de discapacidad Modelo 145 IRPF',
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dms`
--

DROP TABLE IF EXISTS `dms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dmsTypeFk` int(11) NOT NULL DEFAULT '1',
  `reference` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `hardCopyNumber` mediumint(8) unsigned DEFAULT NULL,
  `contentType` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `file` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hasFile` tinyint(4) NOT NULL DEFAULT '0',
  `workerFk` int(10) unsigned DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `warehouseFk` smallint(5) unsigned DEFAULT '60',
  PRIMARY KEY (`id`),
  UNIQUE KEY `emp_id` (`companyFk`,`hardCopyNumber`,`warehouseFk`),
  UNIQUE KEY `dms_hardCopyNumber_IDX` (`hardCopyNumber`,`warehouseFk`) USING BTREE,
  KEY `trabajador_id` (`workerFk`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `dms_dmsTypeFk_idx` (`dmsTypeFk`),
  CONSTRAINT `dms_companyFk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `dms_dmsTypeFk` FOREIGN KEY (`dmsTypeFk`) REFERENCES `dmsType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `dms_warehouseFk` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `dms_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='document managment system';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`dms_beforeInsert`
	BEFORE INSERT ON `dms`
	FOR EACH ROW
BEGIN
	DECLARE vHardCopyNumber INT;
	DECLARE vDmsTypeCode INT;
    	               
	IF (SELECT NOT hasDms FROM warehouse WHERE id = NEW.warehouseFk) THEN
		CALL util.throw('this warehouse has not dms');
	END IF;

	IF NEW.hasFile THEN
		SELECT 1 + MAX(hardCopyNumber) INTO vHardCopyNumber 
            FROM dms 
            WHERE warehouseFk = NEW.warehouseFk;
	
		SET NEW.hardCopyNumber = IFNULL(vHardCopyNumber,1);
    END IF;
    
	SELECT code INTO vDmsTypeCode 
		FROM dmsType WHERE NEW.dmsTypeFk = id;
	 IF (vDmsTypeCode ='ticket')  THEN
	  UPDATE ticket SET isSigned = 1 WHERE id = NEW.reference;
	 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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`dms_beforeUpdate`
	BEFORE UPDATE ON `dms`
	FOR EACH ROW
BEGIN
	DECLARE vHardCopyNumber INT;
	
	IF (NEW.hasFile <> 0) AND (OLD.hasFile = 0) AND (NEW.hardCopyNumber IS NULL)
		OR 
		(NEW.hardCopyNumber = OLD.hardCopyNumber AND OLD.warehouseFk <> NEW.warehouseFk) THEN
	
		IF (SELECT NOT hasDms FROM warehouse WHERE id = NEW.warehouseFk) THEN 
			SET NEW.warehouseFk = (SELECT id FROM warehouse WHERE name = 'Algemesi');
		END IF;
	
		SELECT 1 + MAX(hardCopyNumber) INTO vHardCopyNumber 
            FROM dms 
            WHERE warehouseFk = NEW.warehouseFk;
           
		SET NEW.hardCopyNumber = IFNULL(vHardCopyNumber,1);
    END IF;
   
	IF ((NEW.hardCopyNumber = 0) OR NEW.hardCopyNumber IS NULL) AND (OLD.hardCopyNumber <> 0)  THEN
    
		SET NEW.hasFile = 0;
    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`.`dms_beforeDelete`
	BEFORE DELETE ON `dms`
	FOR EACH ROW
BEGIN 
	DECLARE vCanNotBeDeleted INT;
	SELECT COUNT(*) INTO vCanNotBeDeleted 
		FROM dmsType dt 
		WHERE NOT (code <=> 'trash') 
			AND dt.id = OLD.dmsTypeFk;
			
	IF vCanNotBeDeleted THEN 
		CALL util.throw('A dms can not be deleted');
	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 */ ;

--
-- Table structure for table `dmsRecover`
--

DROP TABLE IF EXISTS `dmsRecover`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dmsRecover` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) DEFAULT NULL,
  `sign` text COLLATE utf8_unicode_ci,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `ticketFk_idx` (`ticketFk`),
  CONSTRAINT `ticketFk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dmsType`
--

DROP TABLE IF EXISTS `dmsType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dmsType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `writeRoleFk` int(10) unsigned DEFAULT NULL,
  `readRoleFk` int(10) unsigned DEFAULT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `monthToDelete` int(10) unsigned DEFAULT NULL COMMENT 'Meses en el pasado para ir borrando registros, dejar a null para no borrarlos nunca',
  PRIMARY KEY (`id`),
  KEY `readRoleFk` (`readRoleFk`),
  KEY `writeRoleFk` (`writeRoleFk`),
  CONSTRAINT `readRoleFk` FOREIGN KEY (`readRoleFk`) REFERENCES `account`.`role` (`id`),
  CONSTRAINT `writeRoleFk` FOREIGN KEY (`writeRoleFk`) REFERENCES `account`.`role` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dock`
--

DROP TABLE IF EXISTS `dock`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dock` (
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `description` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Se utiliza para el panel de grafana: https://grafana.verdnatura.es/d/w9w3Uo-7z/';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `docuware`
--

DROP TABLE IF EXISTS `docuware`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `docuware` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `fileCabinetName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dialogName` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `find` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `docuwareConfig`
--

DROP TABLE IF EXISTS `docuwareConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `docuwareConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
  `token` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dua`
--

DROP TABLE IF EXISTS `dua`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dua` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `awbFk` smallint(11) unsigned NOT NULL,
  `issued` date DEFAULT NULL,
  `operated` date DEFAULT NULL,
  `booked` date DEFAULT NULL,
  `bookEntried` date DEFAULT NULL,
  `gestdocFk` int(11) DEFAULT NULL,
  `customsValue` decimal(10,2) DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `ASIEN` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`),
  KEY `fk_awb_dua_awb_idx` (`awbFk`),
  KEY `fk_dua_gestdoc1_idx` (`gestdocFk`),
  KEY `dua_fk4_idx` (`companyFk`),
  CONSTRAINT `dua_fk1` FOREIGN KEY (`gestdocFk`) REFERENCES `dms` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `dua_fk2` FOREIGN KEY (`awbFk`) REFERENCES `awb` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `dua_fk4` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `duaEntry`
--

DROP TABLE IF EXISTS `duaEntry`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `duaEntry` (
  `duaFk` int(11) NOT NULL,
  `entryFk` int(11) NOT NULL,
  `value` decimal(10,2) DEFAULT NULL,
  `customsValue` decimal(10,2) DEFAULT NULL,
  `euroValue` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`duaFk`,`entryFk`),
  KEY `fk_duaEntry_dua1_idx` (`duaFk`),
  KEY `fk_duaEntry_Entradas1_idx` (`entryFk`),
  CONSTRAINT `fk_duaEntry_Entradas1` FOREIGN KEY (`entryFk`) REFERENCES `entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_duaEntry_dua1` FOREIGN KEY (`duaFk`) REFERENCES `dua` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `duaIntrastat`
--

DROP TABLE IF EXISTS `duaIntrastat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `duaIntrastat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `duaFk` int(11) NOT NULL,
  `intrastatFk` int(8) unsigned NOT NULL,
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`),
  KEY `duaIntrastat_fk1_idx` (`intrastatFk`),
  KEY `duaIntrastat_fk2_idx` (`duaFk`),
  CONSTRAINT `duaIntrastat_fk1` FOREIGN KEY (`intrastatFk`) REFERENCES `intrastat` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `duaIntrastat_fk2` FOREIGN KEY (`duaFk`) REFERENCES `dua` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `duaInvoiceIn`
--

DROP TABLE IF EXISTS `duaInvoiceIn`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `duaInvoiceIn` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `duaFk` int(11) NOT NULL,
  `invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `duaFk_UNIQUE` (`duaFk`,`invoiceInFk`),
  KEY `duaInvoiceIn_fk1_idx` (`duaFk`),
  KEY `duaInvoiceIn_fk2_idx` (`invoiceInFk`),
  CONSTRAINT `duaInvoiceIn_fk1` FOREIGN KEY (`duaFk`) REFERENCES `dua` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `duaInvoiceIn_fk2` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Facturas asociadas a la declaración aduanera, básicamente la del agente transitario';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `duaTax`
--

DROP TABLE IF EXISTS `duaTax`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `duaTax` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `duaFk` int(11) NOT NULL,
  `supplierFk` int(11) NOT NULL,
  `taxClassFk` tinyint(3) unsigned NOT NULL,
  `base` decimal(10,2) NOT NULL,
  `rate` decimal(5,2) NOT NULL,
  `tax` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_dua_tax_awb_dua1_idx` (`duaFk`),
  KEY `duaTax_fk2_idx` (`supplierFk`),
  KEY `duaTax_fk3_idx` (`taxClassFk`),
  CONSTRAINT `duaTax_fk1` FOREIGN KEY (`duaFk`) REFERENCES `dua` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `duaTax_fk2` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `duaTax_fk3` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`duaTax_BEFORE_INSERT`
	BEFORE INSERT ON `duaTax`
	FOR EACH ROW
BEGIN
	SET NEW.rate = duaTax_getRate(NEW.duaFk, NEW.taxClassFk);
	SET NEW.tax = NEW.base * NEW.rate / 100;
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`.`duaTax_BEFORE_UPDATE`
	BEFORE UPDATE ON `duaTax`
	FOR EACH ROW
BEGIN
	SET NEW.rate = duaTax_getRate(NEW.duaFk, NEW.taxClassFk);
	SET NEW.tax = NEW.base * NEW.rate / 100;
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 */ ;

--
-- Temporary table structure for view `ediGenus`
--

DROP TABLE IF EXISTS `ediGenus`;
/*!50001 DROP VIEW IF EXISTS `ediGenus`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ediGenus` (
  `id` tinyint NOT NULL,
  `latinGenusName` tinyint NOT NULL,
  `entried` tinyint NOT NULL,
  `dued` tinyint NOT NULL,
  `modified` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ediSpecie`
--

DROP TABLE IF EXISTS `ediSpecie`;
/*!50001 DROP VIEW IF EXISTS `ediSpecie`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ediSpecie` (
  `id` tinyint NOT NULL,
  `genusFk` tinyint NOT NULL,
  `latinSpeciesName` tinyint NOT NULL,
  `entried` tinyint NOT NULL,
  `dued` tinyint NOT NULL,
  `modified` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `educationLevel`
--

DROP TABLE IF EXISTS `educationLevel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `educationLevel` (
  `id` smallint(6) NOT NULL,
  `name` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Nivel de formación mismo de a3';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ektEntryAssign`
--

DROP TABLE IF EXISTS `ektEntryAssign`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ektEntryAssign` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kop` int(11) DEFAULT NULL,
  `sub` mediumint(8) unsigned DEFAULT NULL,
  `pro` mediumint(8) unsigned DEFAULT NULL,
  `auction` int(11) DEFAULT NULL,
  `warehouseOutFk` int(11) DEFAULT NULL,
  `warehouseInFk` int(11) DEFAULT NULL,
  `agencyModeFk` int(11) DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `entryFk` int(11) DEFAULT NULL,
  `ref` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `addressFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ektEntryAssign_ix1` (`kop`,`sub`,`pro`),
  KEY `ektEntryAssign_FK` (`addressFk`),
  CONSTRAINT `ektEntryAssign_FK` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='define las condiciones para asignar entradas a los ekt';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ektSubAddress`
--

DROP TABLE IF EXISTS `ektSubAddress`;
/*!50001 DROP VIEW IF EXISTS `ektSubAddress`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ektSubAddress` (
  `sub` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `emergencyMedia`
--

DROP TABLE IF EXISTS `emergencyMedia`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `emergencyMedia` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Table to save all emergency phones',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `energyInput`
--

DROP TABLE IF EXISTS `energyInput`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `energyInput` (
  `input` int(11) NOT NULL COMMENT 'The input number',
  `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `consumption` int(11) NOT NULL COMMENT 'Consumption in watts',
  PRIMARY KEY (`input`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Defines inputs and the power of each one';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `energyMeter`
--

DROP TABLE IF EXISTS `energyMeter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `energyMeter` (
  `input` int(11) NOT NULL COMMENT 'The input number',
  `period` datetime NOT NULL COMMENT 'Consumption period in hours interval',
  `activeTime` int(11) NOT NULL COMMENT 'Number of seconds active',
  `consumption` decimal(10,2) NOT NULL COMMENT 'Comsumption in watts',
  PRIMARY KEY (`input`,`period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='History of consumption of each input with one hour intervals';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `entry`
--

DROP TABLE IF EXISTS `entry`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `supplierFk` int(11) NOT NULL DEFAULT '644',
  `dated` datetime NOT NULL,
  `ref` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isBooked` tinyint(1) NOT NULL DEFAULT '0',
  `isExcludedFromAvailable` tinyint(1) NOT NULL DEFAULT '0',
  `notes` longtext COLLATE utf8_unicode_ci,
  `isConfirmed` tinyint(1) NOT NULL DEFAULT '0',
  `isOrdered` tinyint(1) NOT NULL DEFAULT '0',
  `isRaid` tinyint(1) NOT NULL DEFAULT '0',
  `commission` float DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `evaNotes` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `travelFk` int(11) unsigned DEFAULT NULL,
  `currencyFk` tinyint(3) unsigned DEFAULT '1',
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `gestDocFk` int(11) DEFAULT NULL,
  `invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
  `isBlocked` tinyint(4) NOT NULL DEFAULT '0',
  `loadPriority` int(11) DEFAULT NULL,
  `kop` int(11) DEFAULT NULL,
  `sub` mediumint(8) unsigned DEFAULT NULL,
  `pro` mediumint(8) unsigned DEFAULT NULL,
  `auction` int(11) DEFAULT NULL,
  `invoiceAmount` decimal(10,2) DEFAULT NULL,
  `buyerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Id_Proveedor` (`supplierFk`),
  KEY `Fecha` (`dated`),
  KEY `travel_id` (`travelFk`),
  KEY `empresa_id` (`companyFk`),
  KEY `gestdoc_id` (`gestDocFk`),
  KEY `recibida_id` (`invoiceInFk`),
  KEY `entry_FK` (`buyerFk`),
  CONSTRAINT `Entradas_fk8` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `entry_FK` FOREIGN KEY (`buyerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `entry_ibfk_1` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `entry_ibfk_6` FOREIGN KEY (`travelFk`) REFERENCES `travel` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `entry_ibfk_7` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='InnoDB free: 88064 kB; (`Id_Proveedor`) REFER `vn2008/Provee';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_beforeInsert`
	BEFORE INSERT ON `entry`
	FOR EACH ROW
BEGIN
    SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
    SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
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_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
BEGIN
    DECLARE vIsVirtual BOOL;
    DECLARE vPrintedCount INT;
    DECLARE vHasDistinctWarehouses BOOL;

	IF !(NEW.travelFk <=> OLD.travelFk) THEN
		SELECT COUNT(*) > 0 INTO vIsVirtual
			FROM entryVirtual WHERE entryFk = NEW.id;

		SELECT !(o.warehouseInFk <=> n.warehouseInFk)
			OR !(o.warehouseOutFk <=> n.warehouseOutFk)
			INTO vHasDistinctWarehouses
			FROM travel o, travel n
			WHERE o.id = OLD.travelFk
				AND n.id = NEW.travelFk;

		IF vIsVirtual AND vHasDistinctWarehouses THEN
			SIGNAL SQLSTATE '45000'
				SET MESSAGE_TEXT = 'A cloned entry cannot be moved to a travel with different warehouses';
		END IF;
        
        IF NEW.travelFk IS NULL THEN
			SELECT COUNT(*) INTO vPrintedCount
				FROM buy
                WHERE entryFk = OLD.id
					AND printedStickers > 0;

			IF vPrintedCount > 0 THEN
				SIGNAL SQLSTATE '45000'
					SET MESSAGE_TEXT = 'An entry that contains lines with printed labels cannot be deleted';
			END IF;
        END IF;
	END IF;

	IF !(NEW.supplierFk <=> OLD.supplierFk) THEN
		SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
	END IF;

    IF !(NEW.travelFk <=> OLD.travelFk)
	OR !(NEW.currencyFk <=> OLD.currencyFk) THEN 
		SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
	END IF;

	IF !(ABS(NEW.isBooked) <=> ABS(OLD.isBooked)) THEN
		INSERT INTO entryLog SET
			action = 'update',
            description = 'Cambia a Contabilizada',
            userFk = account.myUser_getId(),
            originFk = NEW.id;
	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`.`entry_afterUpdate`
	AFTER UPDATE ON `entry`
	FOR EACH ROW
BEGIN
	IF !(NEW.id <=> OLD.id)
    OR !(NEW.travelFk <=> OLD.travelFk)
    OR !(NEW.isRaid <=> OLD.isRaid) THEN
		CALL stock.log_add('entry', NEW.id, OLD.id);
	END IF;
	
	IF !(NEW.travelFk <=> OLD.travelFk) THEN
		CALL travel_requestRecalc(OLD.travelFk);
		CALL travel_requestRecalc(NEW.travelFk);
	END IF;

	IF NOT (NEW.invoiceAmount <=> OLD.invoiceAmount) THEN
        INSERT INTO vn.entryLog SET
            `action` = 'update',
            userFk = account.myUser_getId(),
            originFk = NEW.id,
            changedModel = 'Entry',
            oldInstance = CONCAT('{"old invoiceAmount":', OLD.invoiceAmount, '}'),
            newInstance = CONCAT('{"new invoiceAmount":', NEW.invoiceAmount, '}');
    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`.`entry_beforeDelete`
	BEFORE DELETE ON `entry`
	FOR EACH ROW
BEGIN
	DELETE FROM buy WHERE entryFk = 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`.`entry_afterDelete`
	AFTER DELETE ON `entry`
	FOR EACH ROW
BEGIN	
	CALL travel_requestRecalc(OLD.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 */ ;

--
-- Table structure for table `entryConfig`
--

DROP TABLE IF EXISTS `entryConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entryConfig` (
  `defaultEntry` int(11) NOT NULL,
  `mailToNotify` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `inventorySupplierFk` int(11) DEFAULT '4',
  PRIMARY KEY (`defaultEntry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `entryLog`
--

DROP TABLE IF EXISTS `entryLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entryLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `logEntry_ibfk_1` (`originFk`),
  KEY `entryLog_ibfk_2` (`userFk`),
  CONSTRAINT `entryLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `entryLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `entryObservation`
--

DROP TABLE IF EXISTS `entryObservation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entryObservation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `entryFk` int(11) NOT NULL,
  `observationTypeFk` tinyint(3) unsigned DEFAULT NULL,
  `description` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `entryFk_observationTypeFk_UNIQUE` (`entryFk`,`observationTypeFk`),
  KEY `observationType_id_observationTypeFk` (`observationTypeFk`),
  CONSTRAINT `entry_id_entryFk` FOREIGN KEY (`entryFk`) REFERENCES `entry` (`id`),
  CONSTRAINT `observationType_id_observationTypeFk` FOREIGN KEY (`observationTypeFk`) REFERENCES `observationType` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `entrySplit__`
--

DROP TABLE IF EXISTS `entrySplit__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entrySplit__` (
  `receivedFk` int(11) NOT NULL,
  `delayedFk` int(11) NOT NULL,
  PRIMARY KEY (`receivedFk`,`delayedFk`),
  KEY `entrySplit_fk2_idx` (`delayedFk`),
  CONSTRAINT `entrySplit_fk1` FOREIGN KEY (`receivedFk`) REFERENCES `entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `entrySplit_fk2` FOREIGN KEY (`delayedFk`) REFERENCES `entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `entryVirtual`
--

DROP TABLE IF EXISTS `entryVirtual`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entryVirtual` (
  `entryFk` int(11) NOT NULL,
  PRIMARY KEY (`entryFk`),
  CONSTRAINT `entryVirtual_ibfk_1` FOREIGN KEY (`entryFk`) REFERENCES `entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='entradas que se van moviendo automaticamente al futuro';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `envialiaAgency`
--

DROP TABLE IF EXISTS `envialiaAgency`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `envialiaAgency` (
  `id` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `route` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `agencyName` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`envialiaAgency_bd`
	BEFORE DELETE ON `envialiaAgency`
	FOR EACH ROW
BEGIN
	CALL util.debugAdd("envialiaAgency", 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 */ ;

--
-- Table structure for table `envialiaCity`
--

DROP TABLE IF EXISTS `envialiaCity`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `envialiaCity` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `postalCode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `agencyFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `agencyFk` (`agencyFk`),
  KEY `postalCode` (`postalCode`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`envialiaCity_bd`
	BEFORE DELETE ON `envialiaCity`
	FOR EACH ROW
BEGIN
	CALL util.debugAdd("envialiaCity", 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 */ ;

--
-- Table structure for table `envialiaConfig`
--

DROP TABLE IF EXISTS `envialiaConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `envialiaConfig` (
  `serviceType` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '024' COMMENT 'Tipo de servicio en horas. 024 -> servicio las 24h',
  `numBox` varchar(3) COLLATE utf8_unicode_ci DEFAULT '001' COMMENT 'cajas por envio',
  `startRange` bigint(25) DEFAULT NULL COMMENT 'Principio del rango que nos proporciona enviaría',
  `endRange` bigint(25) DEFAULT NULL COMMENT 'limite del rango que nos proporciona enviaría',
  `cargoAgency` varchar(25) COLLATE utf8_unicode_ci DEFAULT '004666' COMMENT 'numero de verdnatura dado por enviaría',
  `actualNumber` bigint(25) DEFAULT NULL COMMENT 'Numero actual de etiquetas imprimidas , comprimido entre startRange y endRange, ',
  `isAlreadyNotified` int(1) NOT NULL DEFAULT '0' COMMENT 'Booleano para que el evento vn.envialiaRangeChecker compruebe si se a enviado una notificación\n',
  `notificationThrehold` int(11) DEFAULT NULL COMMENT 'Umbral para avisar a enviaría de reseetar el startRange y endRange\nSe avisara a enviaría si el umbral + el actualNumber es superior a endRange\n',
  PRIMARY KEY (`serviceType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `errorLogApp`
--

DROP TABLE IF EXISTS `errorLogApp`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `errorLogApp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `error` varchar(55) COLLATE utf8_unicode_ci DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `workerFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Guarda un registro de errores e la app de almacén';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `errorProduction`
--

DROP TABLE IF EXISTS `errorProduction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `errorProduction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(11) DEFAULT NULL,
  `firstname` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastname` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `rol` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ticketNumber` int(11) DEFAULT NULL,
  `lineNumber` int(11) DEFAULT NULL,
  `error` int(11) DEFAULT NULL,
  `volume` double DEFAULT NULL,
  `hourStart` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hourEnd` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hourWorked` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dated` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `errorProduction__`
--

DROP TABLE IF EXISTS `errorProduction__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `errorProduction__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(11) DEFAULT NULL,
  `firstname` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastname` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `rol` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ticketNumber` int(11) DEFAULT NULL,
  `error` int(11) DEFAULT NULL,
  `ratio` double DEFAULT NULL,
  `volume` double DEFAULT NULL,
  `month` int(11) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `erte`
--

DROP TABLE IF EXISTS `erte`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `erte` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(11) NOT NULL,
  `started` date DEFAULT NULL,
  `ended` date DEFAULT NULL,
  `reduction` int(3) NOT NULL DEFAULT '1',
  `monday` tinyint(1) DEFAULT NULL,
  `tuesday` tinyint(1) DEFAULT NULL,
  `wednesday` tinyint(1) DEFAULT NULL,
  `thursday` tinyint(1) DEFAULT NULL,
  `friday` tinyint(1) DEFAULT NULL,
  `saturday` tinyint(1) DEFAULT NULL,
  `sunday` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `exchangeInsuranceEntry`
--

DROP TABLE IF EXISTS `exchangeInsuranceEntry`;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceEntry`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `exchangeInsuranceEntry` (
  `dated` tinyint NOT NULL,
  `Dolares` tinyint NOT NULL,
  `rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `exchangeInsuranceIn`
--

DROP TABLE IF EXISTS `exchangeInsuranceIn`;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceIn`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `exchangeInsuranceIn` (
  `dated` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `exchangeInsuranceOut`
--

DROP TABLE IF EXISTS `exchangeInsuranceOut`;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceOut`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `exchangeInsuranceOut` (
  `received` tinyint NOT NULL,
  `divisa` tinyint NOT NULL,
  `rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `exchangeReportSourcePrevious`
--

DROP TABLE IF EXISTS `exchangeReportSourcePrevious`;
/*!50001 DROP VIEW IF EXISTS `exchangeReportSourcePrevious`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `exchangeReportSourcePrevious` (
  `dated` tinyint NOT NULL,
  `amountIn` tinyint NOT NULL,
  `rateIn` tinyint NOT NULL,
  `amountOut` tinyint NOT NULL,
  `rateOut` tinyint NOT NULL,
  `amountEntry` tinyint NOT NULL,
  `rateEntry` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `excuse`
--

DROP TABLE IF EXISTS `excuse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `excuse` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `txt` varchar(255) CHARACTER SET latin1 NOT NULL,
  `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `expedition`
--

DROP TABLE IF EXISTS `expedition`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expedition` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `agencyModeFk` int(11) NOT NULL,
  `ticketFk` int(10) NOT NULL,
  `isBox` int(11) DEFAULT '1' COMMENT 'Este campo realmente en un campo itemFk, haciendo referencia al artículo que nos va a facturar el proveedor de transporte.\nSe debería llamar freightItemFk',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `isRefund__` bit(1) DEFAULT b'0' COMMENT 'Deprecado 01/06/2022',
  `isPickUp__` bit(1) DEFAULT b'0' COMMENT 'Deprecado 01/06/2022',
  `itemFk` int(11) DEFAULT NULL COMMENT 'Este campo hace referencia al artículo que habria que facturar si las cajas no fueran incluidos.\\nSe debería llamar packageItemFk',
  `counter` smallint(5) unsigned NOT NULL,
  `checked__` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Deprecado 01/06/2022',
  `workerFk` int(10) unsigned DEFAULT NULL,
  `externalId` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `packagingFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hostFk` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `stateTypeFk` int(11) DEFAULT NULL COMMENT 'Ultimo estado de la expedicion',
  `hasNewRoute` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`id`),
  KEY `index1` (`agencyModeFk`),
  KEY `index2` (`isBox`),
  KEY `index3` (`created`),
  KEY `index4` (`ticketFk`),
  KEY `expedition_fk3_idx` (`packagingFk`),
  KEY `expedition_itemPackingTypeFk` (`itemPackingTypeFk`),
  KEY `workerFk` (`workerFk`),
  KEY `expedition_FK` (`stateTypeFk`),
  CONSTRAINT `expedition_FK` FOREIGN KEY (`stateTypeFk`) REFERENCES `expeditionStateType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `expedition_fk1` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `expedition_fk2` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `expedition_fk3` FOREIGN KEY (`packagingFk`) REFERENCES `packaging` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `expedition_ibfk_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`),
  CONSTRAINT `expedition_itemPackingTypeFk` FOREIGN KEY (`itemPackingTypeFk`) REFERENCES `itemPackingType` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`expedition_beforeInsert`
	BEFORE INSERT ON `expedition`
	FOR EACH ROW
BEGIN
	
	DECLARE intcounter INT;

    DECLARE vShipFk INT;

	IF NEW.isBox > 0 THEN 

		UPDATE ticket SET packages = nz(packages) + 1 WHERE id = NEW.ticketFk;

		SELECT IFNULL(MAX(counter),0) +1 INTO intcounter 
            FROM expedition e 
				INNER JOIN ticket t1 ON e.ticketFk = t1.id 
                LEFT JOIN ticketState ts ON ts.ticket = t1.id
				INNER JOIN ticket t2 ON t2.addressFk = t1.addressFk AND DATE(t2.shipped) = DATE(t1.shipped) 
                    AND t1.warehouseFk = t2.warehouseFk
			WHERE t2.id = NEW.ticketFk AND ts.alertLevel < 3 AND t1.companyFk = t2.companyFk 
                AND t1.agencyModeFk = t2.agencyModeFk;

		SET NEW.`counter` = intcounter;
	END IF;
    
/*
    SELECT shipFk INTO vShipFk FROM stowaway WHERE id = NEW.ticketFk;

    IF vShipFk THEN
		CALL stowaway_unboarding(vShipFk, NEW.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`.`expedition_beforeUpdate`
	BEFORE UPDATE ON `expedition`
	FOR EACH ROW
BEGIN
	IF NEW.counter <> OLD.counter THEN
		IF (SELECT COUNT(*) FROM expedition e 
				INNER JOIN ticket t1 ON e.ticketFk = t1.id
				INNER JOIN ticket t2 ON t2.addressFk = t1.addressFk AND DATE(t2.shipped) = DATE(t1.shipped) 
			WHERE t1.id = NEW.ticketFk AND counter = NEW.counter) > 0 THEN
			SET NEW.id = NULL;
		END IF;
	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`.`expedition_beforeDelete`
	BEFORE DELETE ON `expedition`
	FOR EACH ROW
BEGIN
    UPDATE ticket t 
        SET packages = (SELECT COUNT(counter)-1 
		FROM expedition e WHERE e.ticketFk = OLD.ticketFk and e.isBox)
		WHERE t.id = OLD.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 */ ;

--
-- Table structure for table `expeditionBoxVol`
--

DROP TABLE IF EXISTS `expeditionBoxVol`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionBoxVol` (
  `boxFk` int(11) NOT NULL,
  `m3` double NOT NULL,
  `ratio` double NOT NULL,
  PRIMARY KEY (`boxFk`),
  CONSTRAINT `expeditionBoxVol_FK` FOREIGN KEY (`boxFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Establece el volumen de cada servicio para poder comparar el teorico y el real en el control de portes';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `expeditionCommon`
--

DROP TABLE IF EXISTS `expeditionCommon`;
/*!50001 DROP VIEW IF EXISTS `expeditionCommon`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionCommon` (
  `truckFk` tinyint NOT NULL,
  `etd` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `palletFk` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `scanFk` tinyint NOT NULL,
  `expeditionFk` tinyint NOT NULL,
  `expeditionTruckFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `lastPacked` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `expeditionPallet`
--

DROP TABLE IF EXISTS `expeditionPallet`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionPallet` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `truckFk` int(11) NOT NULL,
  `built` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `position` int(11) DEFAULT NULL,
  `isPrint` tinyint(4) NOT NULL DEFAULT '2',
  PRIMARY KEY (`id`),
  KEY `expeditionPallet_fk1_idx` (`truckFk`),
  CONSTRAINT `expeditionPallet_fk1` FOREIGN KEY (`truckFk`) REFERENCES `expeditionTruck` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`expeditionPallet_BEFORE_INSERT`
	BEFORE INSERT ON `expeditionPallet`
	FOR EACH ROW
BEGIN

	DECLARE vNewPosition INT;
    
	SELECT MAX(position) + 1 INTO vNewPosition
		FROM vn.expeditionPallet
        WHERE truckFk = NEW.truckFk;
   
	SET NEW.position = IFNULL(vNewPosition,1);
    
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.expeditionPallet_beforeDelete
BEFORE DELETE
ON expeditionPallet FOR EACH ROW
BEGIN
	DECLARE vIndex INT DEFAULT INSTR(USER(), '@');

	CALL util.debugAdd('expeditionPallet_deleted', CONCAT(OLD.id,' ', vn.getWorkerCode()));

	INSERT INTO util.debug(connectionId, `user`, host, variable, value)
		SELECT CONNECTION_ID(),
			LEFT(USER(), vIndex - 1),
			RIGHT(USER(), CHAR_LENGTH(USER()) - vIndex),
			'expeditionScan_deleted',
			es.id
			FROM vn.expeditionScan es
			WHERE es.palletFk = 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 */ ;

--
-- Temporary table structure for view `expeditionPallet_Print`
--

DROP TABLE IF EXISTS `expeditionPallet_Print`;
/*!50001 DROP VIEW IF EXISTS `expeditionPallet_Print`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionPallet_Print` (
  `truck` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `zone` tinyint NOT NULL,
  `eti` tinyint NOT NULL,
  `palletFk` tinyint NOT NULL,
  `isMatch` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `nombreDia` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionRoute_Monitor`
--

DROP TABLE IF EXISTS `expeditionRoute_Monitor`;
/*!50001 DROP VIEW IF EXISTS `expeditionRoute_Monitor`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionRoute_Monitor` (
  `routeFk` tinyint NOT NULL,
  `tickets` tinyint NOT NULL,
  `expeditions` tinyint NOT NULL,
  `scanned` tinyint NOT NULL,
  `lastPacked` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionRoute_freeTickets`
--

DROP TABLE IF EXISTS `expeditionRoute_freeTickets`;
/*!50001 DROP VIEW IF EXISTS `expeditionRoute_freeTickets`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionRoute_freeTickets` (
  `routeFk` tinyint NOT NULL,
  `ticket` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `almacen` tinyint NOT NULL,
  `updated` tinyint NOT NULL,
  `parkingCode` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `expeditionScan`
--

DROP TABLE IF EXISTS `expeditionScan`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionScan` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `expeditionFk` int(11) NOT NULL,
  `scanned` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `palletFk` int(11) NOT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `expeditionFk_UNIQUE` (`expeditionFk`),
  KEY `expeditionScan_fk1_idx` (`expeditionFk`),
  KEY `expeditionScan_fk2_idx` (`palletFk`),
  KEY `expeditionScan_fk3_idx` (`workerFk`),
  CONSTRAINT `expeditionScan_fk1` FOREIGN KEY (`expeditionFk`) REFERENCES `expedition` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `expeditionScan_fk2` FOREIGN KEY (`palletFk`) REFERENCES `expeditionPallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `expeditionScan_fk3` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`expeditionScan_BEFORE_INSERT`
	BEFORE INSERT ON `expeditionScan`
	FOR EACH ROW
BEGIN

	SET NEW.workerFk = vn.getUser();
    
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.expeditionScan_afterDelete
AFTER DELETE
ON expeditionScan FOR EACH ROW
BEGIN

	CALL util.debugAdd('expeditionScan_deleted', CONCAT(OLD.id,' ', vn.getWorkerCode()));

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 */ ;

--
-- Temporary table structure for view `expeditionScan_Monitor`
--

DROP TABLE IF EXISTS `expeditionScan_Monitor`;
/*!50001 DROP VIEW IF EXISTS `expeditionScan_Monitor`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionScan_Monitor` (
  `truckFk` tinyint NOT NULL,
  `ETD` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `palletFk` tinyint NOT NULL,
  `position` tinyint NOT NULL,
  `built` tinyint NOT NULL,
  `scanFk` tinyint NOT NULL,
  `expeditionFk` tinyint NOT NULL,
  `scanned` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `expeditionState`
--

DROP TABLE IF EXISTS `expeditionState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionState` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `expeditionFk` int(11) NOT NULL,
  `typeFk` int(11) NOT NULL,
  `userFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `expeditionState_FK` (`expeditionFk`),
  KEY `expeditionState_FK_1` (`typeFk`),
  CONSTRAINT `expeditionState_FK` FOREIGN KEY (`expeditionFk`) REFERENCES `expedition` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `expeditionState_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `expeditionStateType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Historico de estados de las expediciones';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER expeditionState_BeforeInsert
BEFORE INSERT
ON expeditionState FOR EACH ROW
BEGIN
	
	SET NEW.userFk = account.myUser_getId();
	
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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER expeditionState_AfterInsert
AFTER INSERT
ON expeditionState FOR EACH ROW
BEGIN

	UPDATE vn.expedition e
		SET e.stateTypeFk = NEW.typeFk
		WHERE e.id = NEW.expeditionFk;
	
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 */ ;

--
-- Table structure for table `expeditionStateType`
--

DROP TABLE IF EXISTS `expeditionStateType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionStateType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Posibles estados de una expedición';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `expeditionSticker`
--

DROP TABLE IF EXISTS `expeditionSticker`;
/*!50001 DROP VIEW IF EXISTS `expeditionSticker`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionSticker` (
  `expeditionFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `addressFk` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `street` tinyint NOT NULL,
  `postalCode` tinyint NOT NULL,
  `city` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `beachFk` tinyint NOT NULL,
  `zona` tinyint NOT NULL,
  `province` tinyint NOT NULL,
  `phone` tinyint NOT NULL,
  `workerCode` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionTicket_NoBoxes`
--

DROP TABLE IF EXISTS `expeditionTicket_NoBoxes`;
/*!50001 DROP VIEW IF EXISTS `expeditionTicket_NoBoxes`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionTicket_NoBoxes` (
  `ticketFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `description` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionTimeExpended`
--

DROP TABLE IF EXISTS `expeditionTimeExpended`;
/*!50001 DROP VIEW IF EXISTS `expeditionTimeExpended`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionTimeExpended` (
  `ticketFk` tinyint NOT NULL,
  `started` tinyint NOT NULL,
  `finished` tinyint NOT NULL,
  `cajas` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `expeditionTruck`
--

DROP TABLE IF EXISTS `expeditionTruck`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expeditionTruck` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ETD` datetime DEFAULT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `bufferFk` int(11) DEFAULT NULL COMMENT 'buffer destino de las cajas',
  PRIMARY KEY (`id`),
  KEY `expeditionTruck_idx1` (`ETD`),
  KEY `expeditionTruck_FK` (`bufferFk`),
  CONSTRAINT `expeditionTruck_FK` FOREIGN KEY (`bufferFk`) REFERENCES `srt`.`buffer` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`expeditionTruck_BEFORE_INSERT`
	BEFORE INSERT ON `expeditionTruck`
	FOR EACH ROW
BEGIN

	SET NEW.description = UCASE(NEW.description);

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`.`expeditionTruck_BEFORE_UPDATE`
	BEFORE UPDATE ON `expeditionTruck`
	FOR EACH ROW
BEGIN

	SET NEW.description = UCASE(NEW.description);

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 */ ;

--
-- Temporary table structure for view `expeditionTruck_Control`
--

DROP TABLE IF EXISTS `expeditionTruck_Control`;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionTruck_Control` (
  `id` tinyint NOT NULL,
  `ETD` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `ticketsSinBultos` tinyint NOT NULL,
  `pallets` tinyint NOT NULL,
  `routes` tinyint NOT NULL,
  `scans` tinyint NOT NULL,
  `expeditions` tinyint NOT NULL,
  `fallos` tinyint NOT NULL,
  `lastPacked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionTruck_Control_Detail`
--

DROP TABLE IF EXISTS `expeditionTruck_Control_Detail`;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control_Detail`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionTruck_Control_Detail` (
  `id` tinyint NOT NULL,
  `ETD` tinyint NOT NULL,
  `destino` tinyint NOT NULL,
  `pallet` tinyint NOT NULL,
  `routes` tinyint NOT NULL,
  `scans` tinyint NOT NULL,
  `destinos` tinyint NOT NULL,
  `fallos` tinyint NOT NULL,
  `lastPacked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `expeditionTruck_Control_Detail_Pallet`
--

DROP TABLE IF EXISTS `expeditionTruck_Control_Detail_Pallet`;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control_Detail_Pallet`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `expeditionTruck_Control_Detail_Pallet` (
  `id` tinyint NOT NULL,
  `ETD` tinyint NOT NULL,
  `destino` tinyint NOT NULL,
  `pallet` tinyint NOT NULL,
  `route` tinyint NOT NULL,
  `scans` tinyint NOT NULL,
  `destinos` tinyint NOT NULL,
  `fallos` tinyint NOT NULL,
  `expeditionTruckFk` tinyint NOT NULL,
  `lastPacked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `expence`
--

DROP TABLE IF EXISTS `expence`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expence` (
  `id` varchar(10) NOT NULL,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `isWithheld` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `expence__`
--

DROP TABLE IF EXISTS `expence__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `expence__` (
  `id` varchar(10) NOT NULL,
  `taxTypeFk` tinyint(4) NOT NULL,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `isConbase` tinyint(4) NOT NULL DEFAULT '1',
  `isWithheld` tinyint(4) NOT NULL DEFAULT '0',
  `isForSale` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`,`taxTypeFk`),
  KEY `iva_tipo_id` (`taxTypeFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `firstTicketShipped`
--

DROP TABLE IF EXISTS `firstTicketShipped`;
/*!50001 DROP VIEW IF EXISTS `firstTicketShipped`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `firstTicketShipped` (
  `shipped` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `floraHollandBuyedItems`
--

DROP TABLE IF EXISTS `floraHollandBuyedItems`;
/*!50001 DROP VIEW IF EXISTS `floraHollandBuyedItems`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `floraHollandBuyedItems` (
  `itemFk` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `buyingValue` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `companyFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `floramondoConfig`
--

DROP TABLE IF EXISTS `floramondoConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `floramondoConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nextLanded` datetime DEFAULT NULL,
  `warehouseInFk` smallint(6) unsigned DEFAULT NULL,
  `warehouseOutFk__` smallint(6) unsigned DEFAULT NULL,
  `agencyModeFk__` int(11) DEFAULT NULL,
  `MaxLatestDeliveryHour` int(11) DEFAULT NULL,
  `MaxLatestOrderHour` int(11) DEFAULT '12' COMMENT 'Hora máxima para aceptar pedidos hoy',
  `LastUpdated` datetime DEFAULT NULL,
  `itemMaxSize` int(11) DEFAULT NULL COMMENT 'tamaño maximo de los articulos a mostrar',
  PRIMARY KEY (`id`),
  KEY `floramondoConfigWarehouseIn_idx` (`warehouseInFk`),
  KEY `floramondoConfigWarehouseOut_idx` (`warehouseOutFk__`),
  KEY `floramondoConfigAgencyModeFk_idx` (`agencyModeFk__`),
  CONSTRAINT `floramondoConfigAgencyModeFk` FOREIGN KEY (`agencyModeFk__`) REFERENCES `agencyMode` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `floramondoConfigWarehouseInFk` FOREIGN KEY (`warehouseInFk`) REFERENCES `warehouse` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `floramondoConfigWarehouseOutFk` FOREIGN KEY (`warehouseOutFk__`) REFERENCES `warehouse` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`floramondoConfig_AFTER_INSERT`
	AFTER INSERT ON `floramondoConfig`
	FOR EACH ROW
BEGIN
	CALL util.throw ("Tabla config no permite añadir más registros");
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 */ ;

--
-- Table structure for table `floramondoNotOfferDay__`
--

DROP TABLE IF EXISTS `floramondoNotOfferDay__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `floramondoNotOfferDay__` (
  `dated` date NOT NULL,
  `warehouseFk` int(11) NOT NULL DEFAULT '60',
  PRIMARY KEY (`dated`,`warehouseFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='no muestra oferta en floramondo para ese dia y almacen';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `fuelType`
--

DROP TABLE IF EXISTS `fuelType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fuelType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `gateArea`
--

DROP TABLE IF EXISTS `gateArea`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `gateArea` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `genericAllocation`
--

DROP TABLE IF EXISTS `genericAllocation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `genericAllocation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `typeFk` smallint(5) unsigned NOT NULL COMMENT ' vn.itemType.id',
  `origin` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `color` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quality` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `numFlores` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `category` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `productor` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `longName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `size` int(11) DEFAULT NULL,
  `startDated` date DEFAULT NULL,
  `endDated` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `genericAllocation_FK` (`itemFk`),
  KEY `genericAllocation_FK_1` (`typeFk`),
  KEY `genericAllocation_origin_IDX` (`origin`) USING BTREE,
  KEY `genericAllocation_color_IDX` (`color`) USING BTREE,
  KEY `genericAllocation_quality_IDX` (`quality`) USING BTREE,
  KEY `genericAllocation_numFlores_IDX` (`numFlores`) USING BTREE,
  KEY `genericAllocation_category_IDX` (`category`) USING BTREE,
  KEY `genericAllocation_productor_IDX` (`productor`) USING BTREE,
  KEY `genericAllocation_longName_IDX` (`longName`) USING BTREE,
  KEY `genericAllocation_size_IDX` (`size`) USING BTREE,
  CONSTRAINT `genericAllocation_FK` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena los filtros para asignar códigos genéricos a los items';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `genus`
--

DROP TABLE IF EXISTS `genus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `genus` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `genus_PK2` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `glsConfig`
--

DROP TABLE IF EXISTS `glsConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `glsConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `service` int(1) DEFAULT NULL,
  `schedule` int(1) DEFAULT NULL,
  `token` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `labelType` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `package` int(1) DEFAULT NULL,
  `refund` int(1) DEFAULT NULL,
  `weight` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `glsExpedition__`
--

DROP TABLE IF EXISTS `glsExpedition__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `glsExpedition__` (
  `expeditionFk` int(11) NOT NULL,
  `barcode` bigint(20) unsigned DEFAULT NULL,
  `uid` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `codexp` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`expeditionFk`),
  CONSTRAINT `glsInfo_FK` FOREIGN KEY (`expeditionFk`) REFERENCES `expedition` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `greuge`
--

DROP TABLE IF EXISTS `greuge`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `greuge` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `clientFk` int(10) unsigned NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `shipped` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `greugeTypeFk` int(11) DEFAULT NULL,
  `ticketFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `greuges_type_fk_idx` (`greugeTypeFk`),
  KEY `Id_Ticket_Greuge_Ticket_idx` (`ticketFk`),
  KEY `Greuges_cliente_idx` (`clientFk`),
  KEY `greuge_shipped_IDX` (`shipped`) USING BTREE,
  CONSTRAINT `Id_Ticket_Greuge_Ticket` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `greuges_type_fk` FOREIGN KEY (`greugeTypeFk`) REFERENCES `greugeType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`greuge_beforeUpdate`
	BEFORE UPDATE ON `greuge`
	FOR EACH ROW
BEGIN
	DECLARE vMaxDate DATETIME DEFAULT TIMESTAMPADD(YEAR,1,CURDATE());

    IF NEW.shipped > vMaxDate THEN
		SET NEW.shipped = vMaxDate;    
	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 */ ;

--
-- Table structure for table `greugeConfig`
--

DROP TABLE IF EXISTS `greugeConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `greugeConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `freightPickUpPrice` decimal(10,2) NOT NULL,
  `yearsToDelete` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `greugeType`
--

DROP TABLE IF EXISTS `greugeType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `greugeType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `host`
--

DROP TABLE IF EXISTS `host`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `host` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(30) CHARACTER SET utf8 NOT NULL,
  `description` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `windowsSerial` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `printerFk` tinyint(3) unsigned DEFAULT NULL,
  `itemPackingTypeFk__` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `packingSite__` tinyint(3) unsigned DEFAULT NULL,
  `warehouseFk` smallint(5) unsigned DEFAULT '60',
  `companyFk` smallint(5) unsigned DEFAULT '442',
  `bankFk` int(11) DEFAULT '13',
  `routeDaysBefore` smallint(6) DEFAULT '2',
  `routeDaysAfter` smallint(6) DEFAULT '1',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `host_UN` (`code`),
  KEY `configHost_FK_3` (`companyFk`),
  KEY `configHost_FK` (`printerFk`),
  KEY `configHost_FK_1` (`itemPackingTypeFk__`),
  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_1` FOREIGN KEY (`itemPackingTypeFk__`) REFERENCES `itemPackingType` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `configHost_FK_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `configHost_FK_3` FOREIGN KEY (`companyFk`) REFERENCES `company` (`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`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`host_beforeUpdate`
	BEFORE UPDATE ON `host`
	FOR EACH ROW
BEGIN
    SET new.updated = NOW();
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 */ ;

--
-- Table structure for table `improvedGeneralLog`
--

DROP TABLE IF EXISTS `improvedGeneralLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `improvedGeneralLog` (
  `user` char(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `db` char(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `tables` char(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `type` set('Select','Insert','Update','Delete') COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`user`,`db`,`tables`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `improvedGeneralLogProcedures`
--

DROP TABLE IF EXISTS `improvedGeneralLogProcedures`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `improvedGeneralLogProcedures` (
  `user` char(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `db` varchar(250) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `routine` char(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `type` enum('FUNCTION','PROCEDURE') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`user`,`db`,`routine`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `incoterms`
--

DROP TABLE IF EXISTS `incoterms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `incoterms` (
  `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Internacional Commercial Terms';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ink`
--

DROP TABLE IF EXISTS `ink`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ink` (
  `id` char(3) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `picture` blob NOT NULL,
  `showOrder` int(11) NOT NULL,
  `ball` blob,
  `isCargex` tinyint(4) NOT NULL DEFAULT '0',
  `dutchCode` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hex` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isRealColor` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `dutchCode_UNIQUE` (`dutchCode`),
  CONSTRAINT `ink_fk1` FOREIGN KEY (`dutchCode`) REFERENCES `edi`.`feature` (`feature_value`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `inkI18n`
--

DROP TABLE IF EXISTS `inkI18n`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inkI18n` (
  `inkFk` char(3) COLLATE utf8_unicode_ci NOT NULL,
  `lang` char(2) CHARACTER SET utf8 NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`inkFk`,`lang`),
  CONSTRAINT `inkI18n_FK` FOREIGN KEY (`inkFk`) REFERENCES `ink` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `inkL10n`
--

DROP TABLE IF EXISTS `inkL10n`;
/*!50001 DROP VIEW IF EXISTS `inkL10n`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `inkL10n` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `intrastat`
--

DROP TABLE IF EXISTS `intrastat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `intrastat` (
  `id` int(8) unsigned zerofill NOT NULL,
  `description` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `import__` tinyint(4) NOT NULL DEFAULT '0',
  `taxClassFk` tinyint(3) unsigned NOT NULL DEFAULT '2',
  `taxCodeFk` tinyint(2) unsigned NOT NULL DEFAULT '64',
  PRIMARY KEY (`id`),
  KEY `iva_group_id` (`taxClassFk`),
  CONSTRAINT `intrastat_ibfk_1` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `inventoryFailure`
--

DROP TABLE IF EXISTS `inventoryFailure`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inventoryFailure` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `itemFk` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  `value` decimal(10,2) NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `throwerFk` int(10) unsigned DEFAULT NULL,
  `guiltyFk` int(10) unsigned DEFAULT NULL,
  `causeFk` int(11) DEFAULT NULL,
  `explanation` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `inventoryFailure_fk1_idx` (`itemFk`),
  KEY `inventoryFailure_fk2_idx` (`throwerFk`),
  KEY `inventoryFailure_fk_idx` (`guiltyFk`),
  KEY `inventoryFailure_fk4_idx` (`warehouseFk`),
  KEY `inventoryFailure_fk5_idx` (`causeFk`),
  CONSTRAINT `inventoryFailure_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `inventoryFailure_fk2` FOREIGN KEY (`throwerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `inventoryFailure_fk3` FOREIGN KEY (`guiltyFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `inventoryFailure_fk4` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `inventoryFailure_fk5` FOREIGN KEY (`causeFk`) REFERENCES `inventoryFailureCause` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `inventoryFailureCause`
--

DROP TABLE IF EXISTS `inventoryFailureCause`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inventoryFailureCause` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceCorrection`
--

DROP TABLE IF EXISTS `invoiceCorrection`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceCorrection` (
  `correctingFk` int(10) unsigned NOT NULL COMMENT 'Factura rectificativa',
  `correctedFk` int(10) unsigned NOT NULL COMMENT 'Factura rectificada',
  `cplusRectificationTypeFk` int(10) unsigned NOT NULL,
  `cplusInvoiceType477Fk` int(10) unsigned NOT NULL,
  `invoiceCorrectionTypeFk` int(11) NOT NULL DEFAULT '3',
  PRIMARY KEY (`correctingFk`),
  KEY `correctedFk_idx` (`correctedFk`),
  KEY `invoiceCorrection_ibfk_1_idx` (`cplusRectificationTypeFk`),
  KEY `cplusInvoiceTyoeFk_idx` (`cplusInvoiceType477Fk`),
  KEY `invoiceCorrectionTypeFk_idx` (`invoiceCorrectionTypeFk`),
  CONSTRAINT `corrected_fk` FOREIGN KEY (`correctedFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `correcting_fk` FOREIGN KEY (`correctingFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `cplusInvoiceTyoeFk` FOREIGN KEY (`cplusInvoiceType477Fk`) REFERENCES `cplusInvoiceType477` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceCorrectionType_Fk33` FOREIGN KEY (`invoiceCorrectionTypeFk`) REFERENCES `invoiceCorrectionType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceCorrection_ibfk_1` FOREIGN KEY (`cplusRectificationTypeFk`) REFERENCES `cplusRectificationType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Relacion entre las facturas rectificativas y las rectificadas.';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `invoiceCorrectionDataSource`
--

DROP TABLE IF EXISTS `invoiceCorrectionDataSource`;
/*!50001 DROP VIEW IF EXISTS `invoiceCorrectionDataSource`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `invoiceCorrectionDataSource` (
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `discount` tinyint NOT NULL,
  `refFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `invoiceCorrectionType`
--

DROP TABLE IF EXISTS `invoiceCorrectionType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceCorrectionType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `description_UNIQUE` (`description`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceIn`
--

DROP TABLE IF EXISTS `invoiceIn`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceIn` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `serialNumber` mediumint(11) unsigned DEFAULT NULL COMMENT 'insertado por Trigger',
  `serial` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'R',
  `supplierFk` int(11) NOT NULL,
  `issued` date DEFAULT NULL COMMENT 'Fecha de emision de la factura',
  `supplierRef` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isBooked` tinyint(1) NOT NULL DEFAULT '0',
  `currencyFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `docFk` int(11) DEFAULT NULL,
  `booked` date DEFAULT NULL COMMENT 'Fecha de contabilizacion',
  `operated` date DEFAULT NULL COMMENT 'Fecha de entrega de la mercancia o el suministro',
  `cplusInvoiceType472Fk` int(10) unsigned DEFAULT '1',
  `cplusRectificationTypeFk` int(10) unsigned DEFAULT '1',
  `cplusSubjectOpFk` int(10) unsigned DEFAULT '1',
  `cplusTaxBreakFk` int(10) unsigned DEFAULT '1',
  `cplusTrascendency472Fk` int(10) unsigned DEFAULT '1',
  `bookEntried` date DEFAULT NULL COMMENT 'Fecha Asiento',
  `isVatDeductible` tinyint(1) NOT NULL DEFAULT '1',
  `withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
  `expenceFkDeductible` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `proveedor_id` (`supplierFk`),
  KEY `empresa_id` (`companyFk`),
  KEY `serie` (`serial`),
  KEY `num_recibida_2` (`serialNumber`),
  KEY `gestdoc_id` (`docFk`),
  KEY `fecha` (`issued`),
  KEY `recibida_ibfk_3_idx` (`cplusSubjectOpFk`),
  KEY `recibida_ibfk_4_idx` (`cplusTaxBreakFk`),
  KEY `recibida_ibfk_5_idx` (`cplusInvoiceType472Fk`),
  KEY `recibida_ibfk_6` (`cplusRectificationTypeFk`),
  KEY `recibida_ibfk_7` (`cplusTrascendency472Fk`),
  KEY `invoiceIn_withholdingFk_idx` (`withholdingSageFk`),
  KEY `invoiceIn_expenceFkDeductible_idx` (`expenceFkDeductible`),
  CONSTRAINT `invoiceIn_expenceFkDeductible` FOREIGN KEY (`expenceFkDeductible`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_1` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_2` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_3` FOREIGN KEY (`cplusSubjectOpFk`) REFERENCES `cplusSubjectOp` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_4` FOREIGN KEY (`cplusTaxBreakFk`) REFERENCES `cplusTaxBreak` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_5` FOREIGN KEY (`cplusInvoiceType472Fk`) REFERENCES `cplusInvoiceType472` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_6` FOREIGN KEY (`cplusRectificationTypeFk`) REFERENCES `cplusRectificationType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_ibfk_7` FOREIGN KEY (`cplusTrascendency472Fk`) REFERENCES `cplusTrascendency472` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceIn_withholdingFk` FOREIGN KEY (`withholdingSageFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_bi`
	BEFORE INSERT ON `invoiceIn`
	FOR EACH ROW
BEGIN
	DECLARE vSerie CHAR(1) DEFAULT 'R';
	DECLARE vNumReceived INT;
	DECLARE vIssuingCountry, vhostCountry INT;
	DECLARE vActive TINYINT;
	DECLARE vWithholdingSageFk INT;
	
	SELECT  withholdingSageFk INTO  vWithholdingSageFk 
		FROM vn.supplier 
		WHERE id = NEW.supplierFk;

	SET NEW.withholdingSageFk = vWithholdingSageFk; 
	
	SELECT countryFk, isActive INTO vIssuingCountry, vActive 
		FROM vn.supplier 
		WHERE id = NEW.supplierFk;
	
	SELECT countryFk INTO vhostCountry 
		FROM vn.supplier 
		WHERE id = NEW.companyFk;

	IF vActive = 0 THEN
		CALL util.throw('INACTIVE_PROVIDER');
	END IF;
        
    IF (SELECT COUNT(*) FROM vn.invoiceIn 
    		WHERE supplierRef = NEW.supplierRef 
    			AND supplierFk = NEW.supplierFk 
    			AND YEAR(issued) = YEAR(NEW.issued)
    ) THEN
		CALL util.throw('reference duplicated');
    END IF;
    
	SELECT CASE WHEN (SELECT account FROM vn.supplier  where id = NEW.supplierFk) LIKE '___3______' THEN 'C'
				WHEN (SELECT vIssuingCountry=vhostCountry from vn.country p1 join vn.country p2 ON p2.id = vhostCountry AND p1.id = vIssuingCountry 
							where p1.CEE < 2 and p2.CEE < 2) = 1 THEN 'R'
				WHEN (SELECT vIssuingCountry <> vhostCountry from vn.country p1 join vn.country p2 ON p2.id = vhostCountry AND p1.id = vIssuingCountry 
							where p1.CEE < 2 and p2.CEE < 2) = 1 THEN 'E' 
				WHEN (SELECT vIssuingCountry<>vhostCountry from vn.country p1 join vn.country p2 ON p2.id = vhostCountry AND p1.id = vIssuingCountry
							where NOT p1.CEE < 2 AND not p1.id = 1) = 1 THEN 'W'	
			END INTO vSerie;
	
	SET NEW.serial =  IFNULL(vSerie,'R');

	IF vSerie LIKE 'W' THEN
		SELECT IFNULL(MAX(serialNumber) + 1,1) INTO vNumReceived 
			FROM invoiceIn 
			WHERE `serial` LIKE NEW.serial AND 
				  YEAR(issued) = YEAR(NEW.issued) AND 
				  companyFk = NEW.companyFk;
		SET NEW.serialNumber = vNumReceived;
	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`.`invoiceIn_bu`
	BEFORE UPDATE ON `invoiceIn`
	FOR EACH ROW
BEGIN

	DECLARE vWithholdingSageFk INT;

	IF (SELECT COUNT(*) FROM vn.invoiceIn 
			WHERE supplierRef = NEW.supplierRef 
				AND supplierFk = NEW.supplierFk 
				AND YEAR(issued) = YEAR(NEW.issued)
				AND id <> NEW.id
	) THEN
		CALL util.throw('reference duplicated');
	END IF;

	IF 	NEW.supplierFk != OLD.supplierFk THEN
		SELECT withholdingSageFk INTO vWithholdingSageFk
				FROM vn.supplier 
				WHERE id = NEW.supplierFk;
		SET NEW.withholdingSageFk = vWithholdingSageFk;
	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`.`invoiceIn_au`
	AFTER UPDATE ON `invoiceIn`
	FOR EACH ROW
BEGIN

	IF NEW.issued != OLD.issued    
		OR NEW.currencyFk != OLD.currencyFk THEN

		UPDATE invoiceInTax iit
				JOIN invoiceIn ii ON ii.id = iit.invoiceInFk
				LEFT JOIN referenceRate rr ON rr.dated = ii.issued
					AND rr.currencyFk = ii.currencyFk 
			SET iit.taxableBase = IF(iit.foreignValue IS NULL, iit.taxableBase, iit.foreignValue / rr.value)
			WHERE ii.id = NEW.id;
		
		UPDATE invoiceInDueDay iidd
				JOIN invoiceIn ii ON ii.id = iidd.invoiceInFk
				LEFT JOIN referenceRate rr ON rr.dated = ii.issued
					AND rr.currencyFk = ii.currencyFk 
			SET iidd.amount = IF(iidd.foreignValue IS NULL, iidd.amount, iidd.foreignValue / rr.value)
			WHERE ii.id = NEW.id;    
        
    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 */ ;

--
-- Table structure for table `invoiceInDueDay`
--

DROP TABLE IF EXISTS `invoiceInDueDay`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInDueDay` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `dueDated` date NOT NULL,
  `bankFk` int(11) NOT NULL DEFAULT '3117',
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `foreignValue` decimal(10,2) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `recibida_id` (`invoiceInFk`),
  KEY `banco_id` (`bankFk`),
  CONSTRAINT `invoiceInDueDay_ibfk_6` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInDueDay_ibfk_7` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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;
    
    SELECT isNotified INTO vIsNotified 
		FROM vn.invoiceIn ii 
			JOIN vn.supplier s ON s.id = ii.supplierFk
            JOIN vn.payMethod pm ON pm.id = s.payMethodFk
		WHERE ii.id = NEW.invoiceInFk;
        
	IF (NEW.dueDated <= CURDATE() AND vIsNotified)
    THEN
		CALL mail_insert(
			'begonya@verdnatura.es',
            'begonya@verdnatura.es',
            'Añadido vencimiento en el pasado',
			CONCAT(
				account.myUser_getName(), ' ha añadido un vencimiento de ', 
            	NEW.amount, '€ en una fecha pasada en la recibida ', NEW.invoiceInFk
            )
        );
	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`.`invoiceInDueDay_beforeUpdate`
	BEFORE UPDATE ON `invoiceInDueDay`
	FOR EACH ROW
BEGIN
	DECLARE vIsNotified BOOLEAN;
    
    SELECT isNotified INTO vIsNotified 
		FROM vn.invoiceIn ii 
			JOIN vn.supplier s ON s.id = ii.supplierFk
            JOIN vn.payMethod pm ON pm.id = s.payMethodFk
		WHERE ii.id = NEW.invoiceInFk;
        
	IF (NEW.dueDated <= CURDATE() AND vIsNotified)
    THEN
		CALL mail_insert(
			'begonya@verdnatura.es',
            'begonya@verdnatura.es',
            'Añadido vencimiento en el pasado',
			CONCAT(
				account.myUser_getName(), ' ha añadido un vencimiento de ', 
            	NEW.amount,'€ en una fecha pasada en la recibida ',NEW.invoiceInFk
            )
		);
	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 */ ;

--
-- Table structure for table `invoiceInIntrastat`
--

DROP TABLE IF EXISTS `invoiceInIntrastat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInIntrastat` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `net` decimal(10,2) DEFAULT NULL,
  `intrastatFk` int(8) unsigned zerofill NOT NULL DEFAULT '06049190',
  `amount` double NOT NULL,
  `stems` int(11) NOT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  `dated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `statisticalValue` double NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `intrastat_id` (`intrastatFk`),
  KEY `invoiceInIntrastat_FK` (`invoiceInFk`),
  CONSTRAINT `invoiceInIntrastat_FK` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE,
  CONSTRAINT `invoiceInIntrastat_ibfk_1` FOREIGN KEY (`intrastatFk`) REFERENCES `intrastat` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInIntrastat__`
--

DROP TABLE IF EXISTS `invoiceInIntrastat__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInIntrastat__` (
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `intrastatFk` int(8) unsigned zerofill NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  PRIMARY KEY (`invoiceInFk`,`intrastatFk`),
  KEY `Codintrastat` (`intrastatFk`),
  KEY `recibida_id` (`invoiceInFk`),
  CONSTRAINT `invoiceInIntrastat___ibfk_1` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceInIntrastat___ibfk_2` FOREIGN KEY (`intrastatFk`) REFERENCES `intrastat` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInLog`
--

DROP TABLE IF EXISTS `invoiceInLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInLog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `originFk` mediumint(8) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `invoiceInLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceInLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInSage`
--

DROP TABLE IF EXISTS `invoiceInSage`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInSage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `taxClassFk` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `invoiceInSerialFk` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `taxTypeSageFk` smallint(6) NOT NULL,
  `transactionTypeSageFk` tinyint(4) NOT NULL,
  `isService` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Para diferenciar producto de servicio',
  `expenceFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `withholdingSageFk` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `invoiceInSafe_unique` (`taxClassFk`,`invoiceInSerialFk`,`isService`,`withholdingSageFk`),
  KEY `invoiceInSage_withholdingSageFk` (`withholdingSageFk`),
  KEY `invoiceInSage_taxClassFk` (`taxClassFk`),
  KEY `invoiceInSage_invoiceInSerialFk` (`invoiceInSerialFk`),
  KEY `invoiceInSage_taxTypeSageFk` (`taxTypeSageFk`),
  KEY `invoiceInSage_transactionTypeSageFk` (`transactionTypeSageFk`),
  KEY `invoiceInSage_idx` (`expenceFk`),
  CONSTRAINT `invoiceInSage_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInSage_invoiceInSerialFk` FOREIGN KEY (`invoiceInSerialFk`) REFERENCES `invoiceInSerial` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInSage_taxClassFk` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInSage_taxTypeSageFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInSage_transactionTypeSageFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInSage_withholdingSageFk` FOREIGN KEY (`withholdingSageFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Relaciones de entrelas series de facturas recibidas y sus tipo de IVA con código Iva y codigo de Transación en Sage. Para precontabilizadar facturas recibidas';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInSerial`
--

DROP TABLE IF EXISTS `invoiceInSerial`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInSerial` (
  `code` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cplusTerIdNifFk` int(11) NOT NULL DEFAULT '1',
  `taxAreaFk` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`code`),
  KEY `InvoiceInSerial_Fk1_idx` (`cplusTerIdNifFk`),
  KEY `InvoiceInSerialTaxArea_idx` (`taxAreaFk`),
  CONSTRAINT `InvoiceInSerialTaxArea` FOREIGN KEY (`taxAreaFk`) REFERENCES `taxArea` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `InvoiceInSerial_Fk1` FOREIGN KEY (`cplusTerIdNifFk`) REFERENCES `cplusTerIdNif` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInTax`
--

DROP TABLE IF EXISTS `invoiceInTax`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInTax` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `taxCodeFk` int(10) DEFAULT NULL,
  `taxableBase` decimal(10,2) NOT NULL,
  `expenceFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `foreignValue` decimal(10,2) DEFAULT NULL,
  `taxTypeSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipo de IVA SAGE',
  `transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Tipo de transacción SAGE',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `recibida_id` (`invoiceInFk`),
  KEY `recibida_iva_ibfk_2` (`taxCodeFk`),
  KEY `recibida_iva_taxTypeSageFk` (`taxTypeSageFk`),
  KEY `invoiceInTax_transactionTypeSageFk_idx` (`transactionTypeSageFk`),
  KEY `invoiceInTax_idx` (`expenceFk`),
  CONSTRAINT `invoiceInTax_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInTax_ibfk_5` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceInTax_transactionTypeSageFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
  CONSTRAINT `recibida_iva_taxTypeSageFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceInTaxBookingAccount`
--

DROP TABLE IF EXISTS `invoiceInTaxBookingAccount`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceInTaxBookingAccount` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `effectived` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `account` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `taxAreaFk` varchar(15) CHARACTER SET utf8 NOT NULL,
  `priority` int(2) unsigned DEFAULT NULL,
  `taxClassFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  `rate` decimal(5,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`),
  KEY `invoiceInTaxBookingAccount_fk1_idx` (`taxAreaFk`),
  KEY `invoiceInTaxBookingAccount_fk2_idx` (`taxClassFk`),
  KEY `invoiceInTaxBookingAccount_fk3_idx` (`countryFk`),
  CONSTRAINT `invoiceInTaxBookingAccount_fk1` FOREIGN KEY (`taxAreaFk`) REFERENCES `taxArea` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceInTaxBookingAccount_fk2` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceInTaxBookingAccount_fk3` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceOut`
--

DROP TABLE IF EXISTS `invoiceOut`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOut` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ref` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `serial` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `issued` date DEFAULT NULL,
  `amount` decimal(12,2) DEFAULT '0.00',
  `dued` datetime DEFAULT NULL,
  `bankFk` int(11) DEFAULT NULL,
  `clientFk` int(11) DEFAULT '0',
  `taxableBase7__` decimal(12,2) DEFAULT '0.00',
  `taxableBase16__` decimal(12,2) DEFAULT '0.00',
  `equ1__` decimal(12,2) DEFAULT '0.00',
  `equ4__` decimal(12,2) DEFAULT '0.00',
  `vat7__` decimal(12,2) DEFAULT '0.00',
  `vat16__` decimal(12,2) DEFAULT '0.00',
  `workerFk__` int(11) DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `hasPdf` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `booked` date DEFAULT NULL,
  `cplusInvoiceType477Fk` int(10) unsigned NOT NULL DEFAULT '1',
  `cplusTaxBreakFk` int(10) unsigned NOT NULL DEFAULT '1',
  `cplusSubjectOpFk` int(10) unsigned NOT NULL DEFAULT '1',
  `cplusTrascendency477Fk` int(10) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`,`ref`),
  UNIQUE KEY `Id_Factura` (`ref`),
  KEY `Id_Banco` (`bankFk`),
  KEY `Id_Cliente` (`clientFk`),
  KEY `Id_Trabajador` (`workerFk__`),
  KEY `empresa_id` (`companyFk`),
  KEY `Fecha` (`issued`),
  KEY `Facturas_ibfk_2_idx` (`cplusInvoiceType477Fk`),
  KEY `Facturas_ibfk_3_idx` (`cplusSubjectOpFk`),
  KEY `Facturas_ibfk_4_idx` (`cplusTaxBreakFk`),
  KEY `Facturas_ibfk_5_idx` (`cplusTrascendency477Fk`),
  KEY `Facturas_idx_Vencimiento` (`dued`),
  KEY `invoiceOut_serial` (`serial`),
  CONSTRAINT `invoiceOut_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceOut_ibfk_2` FOREIGN KEY (`cplusInvoiceType477Fk`) REFERENCES `cplusInvoiceType477` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceOut_ibfk_3` FOREIGN KEY (`cplusSubjectOpFk`) REFERENCES `cplusSubjectOp` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceOut_ibfk_4` FOREIGN KEY (`cplusTaxBreakFk`) REFERENCES `cplusTaxBreak` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoiceOut_serial` FOREIGN KEY (`serial`) REFERENCES `invoiceOutSerial` (`code`),
  CONSTRAINT `invoice_bank_id` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `invoice_customer_id` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`invoiceOut_beforeInsert`
	BEFORE INSERT ON `invoiceOut`
	FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN
	DECLARE vRef CHAR(10) ;
	
	IF YEAR(NEW.issued) <= 2021 THEN
	
		SELECT CONCAT(NEW.serial,
				IFNULL(RIGHT(MAX(i.ref), LENGTH(i.ref)-1) , 
					RPAD(CONCAT(c.sage200Company, RIGHT(YEAR(CURDATE()), 2)), 7,'0')) + 1) INTO vRef
			FROM invoiceOut i
				LEFT JOIN company c ON c.id = i.companyFk
			WHERE i.serial = NEW.serial
				AND i.issued BETWEEN util.firstDayOfYear(NEW.issued) AND util.dayEnd(util.lastDayOfYear(NEW.issued)) 
				AND c.id = NEW.companyFk;
	ELSE
	
		SELECT CONCAT(NEW.serial,
				IFNULL(RIGHT(MAX(i.ref), LENGTH(i.ref)-1) , 
					RPAD(CONCAT(c.sage200Company, RIGHT(YEAR(CURDATE()), 2)), 8,'0')) + 1) INTO vRef
			FROM invoiceOut i
				LEFT JOIN company c ON c.id = i.companyFk
			WHERE i.serial = NEW.serial
				AND i.issued BETWEEN util.firstDayOfYear(NEW.issued) AND util.dayEnd(util.lastDayOfYear(NEW.issued)) 
				AND c.id = NEW.companyFk;
	END IF;
	
	SET NEW.ref = vRef;
	
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`.`invoiceOut_afterInsert`
	AFTER INSERT ON `invoiceOut`
	FOR EACH ROW
BEGIN
	CALL clientRisk_update(NEW.clientFk, NEW.companyFk, NEW.amount);
	IF (SELECT COUNT(*) 
			FROM client 
			WHERE id = NEW.clientFk 
				AND businessTypeFk = 'officialOrganism'
	) THEN
		CALL mail_insert('administracion@verdnatura.es',
    		NULL,
    		CONCAT('Se ha emitido una factura al organismo: ', NEW.clientFk),
    		CONCAT('Presentar factura en FACE https://salix.verdnatura.es/#!/invoice-out/', 
    			NEW.id,
    			'/summary'));
	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`.`invoiceOut_beforeUpdate`
	BEFORE UPDATE ON `invoiceOut`
	FOR EACH ROW
BEGIN
CALL clientRisk_update (OLD.clientFk, OLD.companyFk, -OLD.amount);
CALL clientRisk_update (NEW.clientFk, NEW.companyFk, NEW.amount);
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`.`invoiceOut_beforeDelete`
	BEFORE DELETE ON `invoiceOut`
	FOR EACH ROW
BEGIN
	CALL clientRisk_update (OLD.clientFk, OLD.companyFk, -OLD.amount);
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 */ ;

--
-- Table structure for table `invoiceOutExpence`
--

DROP TABLE IF EXISTS `invoiceOutExpence`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOutExpence` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `invoiceOutFk` int(10) unsigned NOT NULL,
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `expenceFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `invoiceOutExpence_FK_1_idx` (`invoiceOutFk`),
  KEY `invoiceOutExpence_expenceFk_idx` (`expenceFk`),
  CONSTRAINT `invoiceOutExpence_FK_1` FOREIGN KEY (`invoiceOutFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceOutExpence_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Desglosa la base imponible de una factura en funcion del tipo de gasto/venta';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceOutSerial`
--

DROP TABLE IF EXISTS `invoiceOutSerial`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOutSerial` (
  `code` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isTaxed` tinyint(1) NOT NULL DEFAULT '1',
  `taxAreaFk` varchar(15) CHARACTER SET utf8 NOT NULL DEFAULT 'NATIONAL',
  `isCEE` tinyint(1) NOT NULL DEFAULT '0',
  `cplusInvoiceType477Fk` int(10) unsigned DEFAULT '1',
  `footNotes` longtext COLLATE utf8_unicode_ci,
  `isRefEditable` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`code`),
  KEY `taxAreaFk_idx` (`taxAreaFk`),
  CONSTRAINT `invoiceOutSeriaTaxArea` FOREIGN KEY (`taxAreaFk`) REFERENCES `taxArea` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceOutTax`
--

DROP TABLE IF EXISTS `invoiceOutTax`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOutTax` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `invoiceOutFk` int(10) unsigned NOT NULL,
  `taxableBase` decimal(10,2) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `vat` decimal(10,2) NOT NULL DEFAULT '0.00',
  `pgcFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0000000000',
  PRIMARY KEY (`id`),
  UNIQUE KEY `invoiceOutTax_Resctriccion` (`invoiceOutFk`,`pgcFk`),
  KEY `invoiceOutFk_idx` (`invoiceOutFk`),
  KEY `pgcFk` (`pgcFk`),
  CONSTRAINT `invoiceOutFk` FOREIGN KEY (`invoiceOutFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `invoiceOutTax_ibfk_1` FOREIGN KEY (`pgcFk`) REFERENCES `pgc` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceOutTaxConfig`
--

DROP TABLE IF EXISTS `invoiceOutTaxConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOutTaxConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `taxClassCodeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `taxTypeSageFk` smallint(6) DEFAULT NULL,
  `transactionTypeSageFk` tinyint(4) DEFAULT NULL,
  `isService` tinyint(1) DEFAULT '0',
  `expenceFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `invoiceOutTaxConfig_FK` (`taxClassCodeFk`),
  KEY `invoiceOutTaxConfig_FK_1` (`taxTypeSageFk`),
  KEY `invoiceOutTaxConfig_FK_2` (`transactionTypeSageFk`),
  CONSTRAINT `invoiceOutTaxConfig_FK` FOREIGN KEY (`taxClassCodeFk`) REFERENCES `taxClass` (`code`),
  CONSTRAINT `invoiceOutTaxConfig_FK_1` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`),
  CONSTRAINT `invoiceOutTaxConfig_FK_2` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `invoiceOut_queue`
--

DROP TABLE IF EXISTS `invoiceOut_queue`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoiceOut_queue` (
  `invoiceFk` int(10) unsigned NOT NULL,
  `queued` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `printed` datetime DEFAULT NULL,
  `status` varchar(50) COLLATE utf8_unicode_ci DEFAULT '',
  PRIMARY KEY (`invoiceFk`),
  CONSTRAINT `invoiceOut_queue_invoiceOut_id_fk` FOREIGN KEY (`invoiceFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queue for PDF invoicing';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `item`
--

DROP TABLE IF EXISTS `item`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `equivalent` int(11) unsigned DEFAULT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `size` int(10) unsigned DEFAULT NULL,
  `stems` int(11) DEFAULT '1',
  `minPrice` double DEFAULT '0',
  `isToPrint` tinyint(1) NOT NULL DEFAULT '0',
  `isDeliveryNote__` tinyint(1) NOT NULL DEFAULT '0',
  `taxClassFk__` tinyint(4) unsigned NOT NULL DEFAULT '1',
  `family` varchar(3) CHARACTER SET utf8 NOT NULL DEFAULT 'VT',
  `box` tinyint(1) NOT NULL DEFAULT '0',
  `category` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `originFk` tinyint(2) unsigned NOT NULL,
  `doPhoto` tinyint(4) NOT NULL DEFAULT '0',
  `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `inkFk` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `niche__` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `intrastatFk` int(8) unsigned zerofill NOT NULL DEFAULT '06039010',
  `hasMinPrice` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `isOnOffer__` tinyint(4) NOT NULL DEFAULT '0',
  `isBargain__` tinyint(4) NOT NULL DEFAULT '0',
  `comment` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `typeFk` smallint(5) unsigned NOT NULL,
  `generic` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
  `producerFk` mediumint(3) unsigned DEFAULT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `density` int(11) NOT NULL DEFAULT '167' COMMENT 'Almacena la densidad en kg/m3 para el calculo de los portes, si no se especifica se pone por defecto la del tipo en un trigger',
  `relevancy` tinyint(1) NOT NULL DEFAULT '0',
  `expenceFk` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '7001000000',
  `isActive` tinyint(1) NOT NULL DEFAULT '1',
  `longName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `subName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag5` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value5` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag6` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value6` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag7` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value7` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag8` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value8` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag9` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value9` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `tag10` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value10` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `compression__` decimal(5,2) NOT NULL DEFAULT '1.00' COMMENT 'Relacion de compresividad entre el volumen de las entradas en Silla y el empaquetado en los envios a clientes.',
  `minimum` decimal(10,0) unsigned NOT NULL DEFAULT '3' COMMENT 'Cantidad máxima de cajas / cubos que cabe en un nicho',
  `upToDown` decimal(10,0) unsigned NOT NULL DEFAULT '0' COMMENT 'Se muestra el precio por kilo ',
  `supplyResponseFk` int(11) DEFAULT NULL,
  `hasKgPrice` tinyint(1) NOT NULL DEFAULT '0',
  `sectorFk__` int(11) DEFAULT NULL,
  `isFloramondo` tinyint(1) NOT NULL DEFAULT '0',
  `isFragile` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'articulos solo para recogidas por su fragilidad',
  `numberOfItemsPerCask` int(11) DEFAULT NULL COMMENT 'Campo para Floramondo',
  `embalageCode` int(11) DEFAULT NULL COMMENT 'Campo para Floramondo',
  `quality` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Campo para Floramondo',
  `stars` int(11) DEFAULT NULL,
  `stemMultiplier` double NOT NULL DEFAULT '1' COMMENT 'este valor multiplica las unidades y divide los precios en el procedimiento edi.ekt_load',
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `packingOut` decimal(10,2) DEFAULT NULL COMMENT 'cantidad que cabe en una caja de verdnatura',
  `genericFk` int(11) DEFAULT NULL COMMENT 'Item genérico',
  `packingShelve` int(11) DEFAULT NULL COMMENT 'unidades que caben en una bandeja, en el caso de los sacadores',
  `isLaid` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Indica si el producto se puede tumbar a efectos del transporte desde Holanda',
  `lastUsed` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `item_supplyResponseFk_idx` (`supplyResponseFk`),
  KEY `Color` (`inkFk`),
  KEY `id_origen` (`originFk`),
  KEY `Codintrastat` (`intrastatFk`),
  KEY `iva_group_id` (`taxClassFk__`),
  KEY `tipo_id` (`typeFk`),
  KEY `producer_id` (`producerFk`),
  KEY `ArticlesIsActive_idx` (`isActive`),
  KEY `item_ibfk_6_idx` (`sectorFk__`),
  KEY `Article` (`name`,`subName`,`value5`,`value6`,`value7`,`value8`,`value9`,`value10`),
  KEY `item_id10` (`embalageCode`),
  KEY `item_id11` (`numberOfItemsPerCask`),
  KEY `item_id12` (`quality`),
  KEY `item_family` (`family`),
  KEY `item_FK` (`genericFk`),
  KEY `item_size_IDX` (`size`) USING BTREE,
  KEY `item_size_IDX2` (`longName`) USING BTREE,
  KEY `item_lastUsed_IDX` (`lastUsed`) USING BTREE,
  KEY `item_expenceFk_idx` (`expenceFk`),
  CONSTRAINT `item_FK` FOREIGN KEY (`genericFk`) REFERENCES `item` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `item_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `item_family` FOREIGN KEY (`family`) REFERENCES `itemFamily` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `item_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `origin` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `item_ibfk_2` FOREIGN KEY (`intrastatFk`) REFERENCES `intrastat` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `item_ibfk_4` FOREIGN KEY (`taxClassFk__`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `item_ibfk_5` FOREIGN KEY (`typeFk`) REFERENCES `itemType` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `itemsupplyResponseFk` FOREIGN KEY (`supplyResponseFk`) REFERENCES `edi`.`supplyResponse` (`ID`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `producer_id` FOREIGN KEY (`producerFk`) REFERENCES `producer` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`item_beforeInsert`
	BEFORE INSERT ON `item`
	FOR EACH ROW
BEGIN
	DECLARE vDensity DOUBLE;
	DECLARE vItemPackingType VARCHAR(1);

	IF NEW.density IS NULL THEN
		SELECT density INTO vDensity
			FROM itemType WHERE id = NEW.typeFk;

		SET NEW.density = vDensity;
	END IF;

	IF NEW.itemPackingTypeFk IS NULL THEN
	
		SELECT itemPackingTypeFk INTO vItemPackingType
			FROM vn.itemType it 
			WHERE id = NEW.typeFk;

		SET NEW.itemPackingTypeFk = vItemPackingType;
	
	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_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`item_afterInsert`
	AFTER INSERT ON `item`
	FOR EACH ROW
BEGIN

	CALL hedera.image_ref('catalog', NEW.image);

	INSERT INTO vn.itemTaxCountry(itemFk, countryFk)
		SELECT NEW.id, 1;

	INSERT INTO vn.itemTaxCountry(itemFk, countryFk)
		SELECT NEW.id, 5;

	INSERT INTO vn.itemTaxCountry(itemFk, countryFk)
		SELECT NEW.id, 30;

	DELETE ifr.*
		FROM edi.item_free ifr
		WHERE ifr.id = NEW.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`.`item_beforeUpdate`
	BEFORE UPDATE ON `item`
	FOR EACH ROW
BEGIN
	
	DECLARE vNewPackingShelve INT;

	IF ISNULL(NEW.packingShelve) AND NOT ISNULL(NEW.packingOut) THEN 
	
		SELECT NEW.packingOut * vc.shelveVolume / vc.standardFlowerBox 
			INTO vNewPackingShelve
			FROM vn.volumeConfig vc;
	
		SET NEW.packingShelve = vNewPackingShelve;
	
	END IF;

	IF NEW.itemPackingTypeFk = '' THEN

		SET NEW.itemPackingTypeFk = NULL;
	
	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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`item_afterUpdate`
	AFTER UPDATE ON `item`
	FOR EACH ROW
BEGIN
	IF !(NEW.image <=> OLD.image) THEN
		CALL hedera.image_unref('catalog', OLD.image);
		CALL hedera.image_ref('catalog', NEW.image);
	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`.`item_afterDelete`
	AFTER DELETE ON `item`
	FOR EACH ROW
BEGIN
	CALL hedera.image_unref('catalog', OLD.image);
	IF OLD.id > 400000 THEN
		INSERT IGNORE edi.item_free (id)
			VALUES (OLD.id);
	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 */ ;

--
-- Table structure for table `itemBarcode`
--

DROP TABLE IF EXISTS `itemBarcode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemBarcode` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `code` varchar(22) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`),
  UNIQUE KEY `Id_Article_2` (`itemFk`,`code`),
  KEY `Id_Article` (`itemFk`),
  CONSTRAINT `itemBarcode_ibfk_1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemBotanical`
--

DROP TABLE IF EXISTS `itemBotanical`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemBotanical` (
  `itemFk` int(11) NOT NULL,
  `botanical__` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `genusFk` int(11) NOT NULL,
  `specieFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`itemFk`),
  KEY `genusFgn_idx` (`genusFk`),
  KEY `specieFgn_idx` (`specieFk`),
  CONSTRAINT `itemBotanicalItemFkFk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemBotanical_FK` FOREIGN KEY (`specieFk`) REFERENCES `specie` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `itemBotanical_FK_1` FOREIGN KEY (`genusFk`) REFERENCES `genus` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Sustituye a antiguo NomBotanic de Articles';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemBotanicalWithGenus`
--

DROP TABLE IF EXISTS `itemBotanicalWithGenus`;
/*!50001 DROP VIEW IF EXISTS `itemBotanicalWithGenus`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemBotanicalWithGenus` (
  `itemFk` tinyint NOT NULL,
  `ediBotanic` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemCategory`
--

DROP TABLE IF EXISTS `itemCategory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemCategory` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `order` int(10) unsigned DEFAULT NULL,
  `display` tinyint(4) NOT NULL DEFAULT '1',
  `color` char(6) COLLATE utf8_unicode_ci DEFAULT NULL,
  `shortLife` int(11) NOT NULL DEFAULT '0' COMMENT 'Sirve para filtrar aquellos reinos que tienen precios estables',
  `merchandise` tinyint(1) NOT NULL DEFAULT '1',
  `icon` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isReclining` tinyint(4) NOT NULL DEFAULT '1',
  `departmentFk` int(11) DEFAULT NULL COMMENT 'Departamento responsable del manufacturado de esta categoria',
  PRIMARY KEY (`id`),
  UNIQUE KEY `reino_UNIQUE` (`name`),
  KEY `itemCategory_idx3` (`merchandise`),
  KEY `itemCategoryDisplayIdx` (`display`),
  KEY `itemCategory_FK` (`departmentFk`),
  CONSTRAINT `itemCategory_FK` FOREIGN KEY (`departmentFk`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemCategory_AFTER_INSERT`
	AFTER INSERT ON `itemCategory`
	FOR EACH ROW
BEGIN
	CALL mail_insert('cau@verdnatura.es',
		NULL,
		CONCAT('Se ha añadido la familia: ', NEW.name),
		'Hay que añadir la familia en el formulario gastos');
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 */ ;

--
-- Table structure for table `itemCategoryI18n`
--

DROP TABLE IF EXISTS `itemCategoryI18n`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemCategoryI18n` (
  `categoryFk` int(10) unsigned NOT NULL,
  `lang` char(2) CHARACTER SET utf8 NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`categoryFk`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemCategoryL10n`
--

DROP TABLE IF EXISTS `itemCategoryL10n`;
/*!50001 DROP VIEW IF EXISTS `itemCategoryL10n`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemCategoryL10n` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemCleanConfig`
--

DROP TABLE IF EXISTS `itemCleanConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemCleanConfig` (
  `id` int(11) NOT NULL,
  `step` int(11) NOT NULL COMMENT 'Indica los items que procesa en cada ciclo',
  `quantity` int(11) NOT NULL COMMENT 'Indica el número de items que va a procesar',
  `isStop` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemCleanCount`
--

DROP TABLE IF EXISTS `itemCleanCount`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemCleanCount` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFrom` int(11) DEFAULT NULL COMMENT 'Indica el item por donde ha empezado',
  `itemDeleted` int(11) DEFAULT NULL COMMENT 'Indica la cantidad de items que ha eliminado',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemColor`
--

DROP TABLE IF EXISTS `itemColor`;
/*!50001 DROP VIEW IF EXISTS `itemColor`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemColor` (
  `itemFk` tinyint NOT NULL,
  `color` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemConfig`
--

DROP TABLE IF EXISTS `itemConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemConfig` (
  `isItemTagTriggerDisabled` tinyint(1) NOT NULL DEFAULT '1',
  `monthToDeactivate` int(3) NOT NULL DEFAULT '24'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemConversor__`
--

DROP TABLE IF EXISTS `itemConversor__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemConversor__` (
  `espItemFk` int(11) NOT NULL,
  `genItemFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`espItemFk`),
  KEY `itemConversor_fk2_idx` (`genItemFk`),
  CONSTRAINT `itemConversor_fk1` FOREIGN KEY (`espItemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemConversor_fk2` FOREIGN KEY (`genItemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Relaciona los item específicos con los genéricos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemCost`
--

DROP TABLE IF EXISTS `itemCost`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemCost` (
  `itemFk` int(11) NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `quantity` int(10) NOT NULL DEFAULT '0',
  `rotation` decimal(10,4) NOT NULL DEFAULT '0.0000',
  `cm3` int(11) NOT NULL DEFAULT '0',
  `storage` decimal(10,4) NOT NULL DEFAULT '0.0000',
  `handling` decimal(10,4) NOT NULL DEFAULT '0.0000',
  `extraCharge` decimal(10,4) NOT NULL DEFAULT '0.0000',
  `wasted` decimal(10,4) NOT NULL DEFAULT '0.0000',
  `cm3delivery` int(11) NOT NULL DEFAULT '0',
  `grams` int(11) NOT NULL DEFAULT '0' COMMENT 'peso en gramos de una unidad de venta',
  PRIMARY KEY (`itemFk`,`warehouseFk`),
  KEY `warehouse_id_rotacion_idx` (`warehouseFk`),
  CONSTRAINT `id_article_rotaci` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `warehouse_id_rotaci` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena los valores de rotacion en los ultimos 365 dias';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemCost_beforeInsert`
	BEFORE INSERT ON `itemCost`
	FOR EACH ROW
BEGIN
	IF NEW.itemFk IN (95, 98) THEN
		SET NEW.cm3 = 0;
    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`.`itemCost_beforeUpdate`
	BEFORE UPDATE ON `itemCost`
	FOR EACH ROW
BEGIN
	IF NEW.itemFk IN (95, 98) THEN
		SET NEW.cm3 = 0;
    END IF;
    
	IF !(NEW.cm3delivery <=> OLD.cm3delivery) THEN
		INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
			SELECT r.id 
				FROM vn.itemCost ic
					JOIN vn.sale s ON s.itemFk = ic.itemFk
					JOIN vn.ticket t ON t.id = s.ticketFk  AND t.warehouseFk = ic.warehouseFk 
					JOIN vn.route r ON r.id = t.routeFk
				WHERE r.isOk = FALSE 
					AND ic.itemFk = NEW.itemFk
					AND r.created >= CURDATE()
				GROUP BY r.id;
		IF NEW.cm3Delivery = 0 AND NEW.warehouseFk = 60 THEN
			CALL mail_insert(
				'jgallego@verdnatura.es',
    			NULL,
    			'update cm3Delivery',
    			CONCAT('articulo: ', NEW.itemFk));
		END IF;
	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 */ ;

--
-- Temporary table structure for view `itemEntryIn`
--

DROP TABLE IF EXISTS `itemEntryIn`;
/*!50001 DROP VIEW IF EXISTS `itemEntryIn`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemEntryIn` (
  `warehouseInFk` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `isReceived` tinyint NOT NULL,
  `isVirtualStock` tinyint NOT NULL,
  `entryFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemEntryOut`
--

DROP TABLE IF EXISTS `itemEntryOut`;
/*!50001 DROP VIEW IF EXISTS `itemEntryOut`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemEntryOut` (
  `warehouseOutFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `isDelivered` tinyint NOT NULL,
  `entryFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemFamily`
--

DROP TABLE IF EXISTS `itemFamily`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemFamily` (
  `code` varchar(3) CHARACTER SET utf8 NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemImageQueue`
--

DROP TABLE IF EXISTS `itemImageQueue`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemImageQueue` (
  `itemFk` int(11) NOT NULL,
  `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `error` text COLLATE utf8_unicode_ci,
  `attempts` int(11) DEFAULT '0',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `priority` int(11) DEFAULT '99',
  PRIMARY KEY (`itemFk`),
  CONSTRAINT `itemImageQueueItemIdx` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Cola para añadir las imagenes al campo vn.item.image a partir de una url';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemInk`
--

DROP TABLE IF EXISTS `itemInk`;
/*!50001 DROP VIEW IF EXISTS `itemInk`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemInk` (
  `longName` tinyint NOT NULL,
  `inkFk` tinyint NOT NULL,
  `color` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemLabel`
--

DROP TABLE IF EXISTS `itemLabel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemLabel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) DEFAULT NULL,
  `itemName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `labels` int(11) DEFAULT NULL COMMENT 'Tabla hecha para Ruben Espinosa, para sacar etiquetas en Holanda para un cliente.',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemLog`
--

DROP TABLE IF EXISTS `itemLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `itemLogItemFk_idx` (`originFk`),
  KEY `itemLogUserFk_idx` (`userFk`),
  CONSTRAINT `itemLogItemFk` FOREIGN KEY (`originFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemLogUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemMatchProperties`
--

DROP TABLE IF EXISTS `itemMatchProperties`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemMatchProperties` (
  `itemFk` int(11) NOT NULL,
  `name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `producer` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `size` int(11) NOT NULL,
  PRIMARY KEY (`itemFk`,`name`,`producer`,`size`),
  CONSTRAINT `itemFk___fk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Propiedades para encontrar articulos equivalentes en verdnatura';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemPackingType`
--

DROP TABLE IF EXISTS `itemPackingType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemPackingType` (
  `code` varchar(1) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Define la linea de encajado para cada producto';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemPlacementSupply`
--

DROP TABLE IF EXISTS `itemPlacementSupply`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemPlacementSupply` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `quantity` decimal(10,0) NOT NULL DEFAULT '0',
  `priority` int(10) unsigned NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(10) unsigned NOT NULL COMMENT 'Persona que crea la orden',
  `repoUserFk` int(10) unsigned DEFAULT NULL COMMENT 'Reponedor que la tiene asignada',
  `sectorFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `itemPlacementSupply_fk1_idx` (`itemFk`),
  KEY `itemPlacementSupply_fk2_idx` (`userFk`),
  KEY `itemPlacementSupply_fk2_idx1` (`repoUserFk`),
  KEY `itemPlacementSupply_fk4_idx` (`sectorFk`),
  CONSTRAINT `itemPlacementSupply_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemPlacementSupply_fk2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemPlacementSupply_fk3` FOREIGN KEY (`repoUserFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemPlacementSupply_fk4` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de nichos de picking que hay que reponer';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemPlacementSupplyList`
--

DROP TABLE IF EXISTS `itemPlacementSupplyList`;
/*!50001 DROP VIEW IF EXISTS `itemPlacementSupplyList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemPlacementSupplyList` (
  `id` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `priority` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `userFk` tinyint NOT NULL,
  `repoUserFk` tinyint NOT NULL,
  `saldo` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `subName` tinyint NOT NULL,
  `size` tinyint NOT NULL,
  `workerCode` tinyint NOT NULL,
  `repoCode` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemPlacement__`
--

DROP TABLE IF EXISTS `itemPlacement__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemPlacement__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '1',
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `modificationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `reserve` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pickable` int(11) unsigned NOT NULL DEFAULT '0',
  `sectorFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Article_UNIQUE` (`itemFk`,`warehouseFk`),
  KEY `Articles_nicho_wh_fk` (`warehouseFk`),
  KEY `itemPlacement_fk3_idx` (`id`,`sectorFk`),
  KEY `itemPlacement_fk3_idx1` (`sectorFk`),
  CONSTRAINT `Articles_nicho_wh_fk` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `Articles_nichos_fk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemPlacement_fk3` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemPlacement_BEFORE_INSERT`
	BEFORE INSERT ON `itemPlacement__` FOR EACH ROW
BEGIN
	IF LENGTH(NEW.code) < 3 THEN
		CALL util.throw('code too short');
    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`.`itemPlacement_BEFORE_UPDATE`
	BEFORE UPDATE ON `itemPlacement__` FOR EACH ROW
BEGIN
	IF LENGTH(NEW.code) < 3 THEN
		CALL util.throw('code too short');
    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 */ ;

--
-- Temporary table structure for view `itemProductor`
--

DROP TABLE IF EXISTS `itemProductor`;
/*!50001 DROP VIEW IF EXISTS `itemProductor`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemProductor` (
  `itemFk` tinyint NOT NULL,
  `productor` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemProposal`
--

DROP TABLE IF EXISTS `itemProposal`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemProposal` (
  `itemFk` int(11) NOT NULL,
  `mateFk` int(11) NOT NULL,
  `counter` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`itemFk`,`mateFk`),
  KEY `itemProposal_fk2_idx` (`mateFk`),
  CONSTRAINT `itemProposal_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemProposal_fk2` FOREIGN KEY (`mateFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='almacena los cambios realizados de unos items por otros, cuando faltaban los primeros';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemRepo__`
--

DROP TABLE IF EXISTS `itemRepo__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemRepo__` (
  `itemFk` int(11) NOT NULL,
  `quantity` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`itemFk`),
  CONSTRAINT `itemRepo_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemSearch`
--

DROP TABLE IF EXISTS `itemSearch`;
/*!50001 DROP VIEW IF EXISTS `itemSearch`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemSearch` (
  `itemFk` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `shipped` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemShelving`
--

DROP TABLE IF EXISTS `itemShelving`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemShelving` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `shelvingFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `shelve` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'A',
  `deep__` int(11) unsigned NOT NULL DEFAULT '1',
  `quantity__` int(11) NOT NULL DEFAULT '0',
  `visible` int(11) NOT NULL DEFAULT '0',
  `available__` int(11) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `priority` int(11) unsigned DEFAULT NULL COMMENT 'El 0 es la mínima prioridad',
  `grouping` smallint(5) unsigned DEFAULT NULL,
  `packing` int(11) unsigned DEFAULT NULL,
  `packagingFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `level__` varchar(45) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1',
  `userFk` int(10) unsigned DEFAULT NULL,
  `stars` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `itemShelving_fk1_idx` (`itemFk`),
  KEY `itemShelving_fk2_idx` (`shelvingFk`),
  KEY `itemShelving_fk3_idx` (`packagingFk`),
  KEY `itemShelving_fk3_idx1` (`userFk`),
  CONSTRAINT `itemShelving_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemShelving_fk2` FOREIGN KEY (`shelvingFk`) REFERENCES `shelving` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemShelving_fk3` FOREIGN KEY (`packagingFk`) REFERENCES `packaging` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla utilizada para localizar los artículos dentro de los carros. Usado para la gestión del almacén en el altillo ';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemShelving_BEFORE_INSERT`
	BEFORE INSERT ON `itemShelving`
	FOR EACH ROW
BEGIN
	
	SET NEW.userFk = account.myUser_getId();

	
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`.`itemShelving_AFTER_INSERT`
	AFTER INSERT ON `itemShelving`
	FOR EACH ROW
INSERT INTO vn.itemShelvingLog(	itemShelvingFk,
								workerFk,
								accion,
								itemFk,
								shelvingFk,
								visible,
								`grouping`,
								packing,
								stars)
	VALUES( NEW.id,
			NEW.userFk,
			'CREA REGISTRO',
			NEW.itemFk,
			NEW.shelvingFk,
			NEW.visible,
			NEW.`grouping`,
			NEW.packing,
			NEW.stars
			) */;;
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`.`itemShelving_BEFORE_UPDATE`
	BEFORE UPDATE ON `itemShelving`
	FOR EACH ROW
BEGIN
	SET NEW.userFk = account.myUser_getId();
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`.`itemShelving_AFTER_UPDATE`
	AFTER UPDATE ON `itemShelving`
	FOR EACH ROW
INSERT INTO vn.itemShelvingLog(	itemShelvingFk,
								workerFk,
								accion,
								itemFk,
								shelvingFk,
								visible,
								`grouping`,
								packing,
								stars)
	VALUES( NEW.id,
			account.myUser_getId(),
			'CAMBIO',
			NEW.itemFk,
			NEW.shelvingFk,
			NEW.visible,
			NEW.`grouping`,
			NEW.packing,
			NEW.stars
			) */;;
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`.`itemShelving_BEFORE_DELETE`
	BEFORE DELETE ON `itemShelving`
	FOR EACH ROW
INSERT INTO vn.itemShelvingLog(itemShelvingFk, 
									workerFk, 
									accion,
									shelvingFk,
									itemFk)
						VALUES(	OLD.id,
								account.myUser_getId(),
								'ELIMINADO',
								OLD.shelvingFk,
								OLD.itemFk) */;;
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 */ ;

--
-- Temporary table structure for view `itemShelvingAvailable`
--

DROP TABLE IF EXISTS `itemShelvingAvailable`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingAvailable`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingAvailable` (
  `saleFk` tinyint NOT NULL,
  `Modificado` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `size` tinyint NOT NULL,
  `Estado` tinyint NOT NULL,
  `sectorProdPriority` tinyint NOT NULL,
  `available` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL,
  `matricula` tinyint NOT NULL,
  `parking` tinyint NOT NULL,
  `itemShelving` tinyint NOT NULL,
  `Agency` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `grouping` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `hour` tinyint NOT NULL,
  `isPreviousPreparable` tinyint NOT NULL,
  `physicalVolume` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemShelvingList`
--

DROP TABLE IF EXISTS `itemShelvingList`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingList` (
  `shelvingFk` tinyint NOT NULL,
  `visible` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `parking` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `size` tinyint NOT NULL,
  `subName` tinyint NOT NULL,
  `parked` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemShelvingLog`
--

DROP TABLE IF EXISTS `itemShelvingLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemShelvingLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemShelvingFk` int(10) unsigned DEFAULT NULL,
  `workerFk` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `accion` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `itemFk` int(11) DEFAULT NULL,
  `shelvingFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quantity` int(11) DEFAULT NULL,
  `visible` int(11) DEFAULT NULL,
  `available` int(11) DEFAULT NULL,
  `grouping` int(11) DEFAULT NULL,
  `packing` int(11) DEFAULT NULL,
  `stars` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `itemShelving_Log_FK` (`itemShelvingFk`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemShelvingPlacementSupply`
--

DROP TABLE IF EXISTS `itemShelvingPlacementSupply`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemShelvingPlacementSupply` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `itemShelvingFk` int(10) unsigned NOT NULL,
  `itemPlacementSupplyFk` int(10) unsigned NOT NULL,
  `quantity` decimal(10,0) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(10) unsigned NOT NULL,
  `isPicked` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `itemShelvingPlacementSupply_fk1_idx` (`itemShelvingFk`),
  KEY `itemShelvingPlacementSupply_fk2_idx` (`itemPlacementSupplyFk`),
  KEY `itemShelvingPlacementSupply_fk3_idx` (`userFk`),
  CONSTRAINT `itemShelvingPlacementSupply_fk1` FOREIGN KEY (`itemShelvingFk`) REFERENCES `itemShelving` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemShelvingPlacementSupply_fk2` FOREIGN KEY (`itemPlacementSupplyFk`) REFERENCES `itemPlacementSupply` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Detalle de los itemShelving afectados por las ordenes de reposicion de nicho';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemShelvingPlacementSupplyStock`
--

DROP TABLE IF EXISTS `itemShelvingPlacementSupplyStock`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingPlacementSupplyStock`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingPlacementSupplyStock` (
  `itemShelvingFk` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `stock` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `size` tinyint NOT NULL,
  `subName` tinyint NOT NULL,
  `shelving` tinyint NOT NULL,
  `parking` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `priority` tinyint NOT NULL,
  `parkingFk` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemShelvingSale`
--

DROP TABLE IF EXISTS `itemShelvingSale`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemShelvingSale` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemShelvingFk` int(10) unsigned NOT NULL,
  `saleFk` int(11) NOT NULL,
  `quantity` decimal(10,0) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `itemShelvingSale_fk1_idx` (`itemShelvingFk`),
  KEY `itemShelvingSale_fk2_idx` (`saleFk`),
  KEY `itemShelvingSale_fk3_idx` (`userFk`),
  CONSTRAINT `itemShelvingSale_fk1` FOREIGN KEY (`itemShelvingFk`) REFERENCES `itemShelving` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemShelvingSale_fk2` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemShelvingSale_fk3` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Detalle del producto que se retira de los carros, relacionando la linea de movimiento correspondiente';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemShelvingSale_AFTER_INSERT`
	AFTER INSERT ON `itemShelvingSale`
	FOR EACH ROW
BEGIN

	UPDATE vn.sale
		SET isPicked = TRUE 
        WHERE id = NEW.saleFk;

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 */ ;

--
-- Temporary table structure for view `itemShelvingSaleSum`
--

DROP TABLE IF EXISTS `itemShelvingSaleSum`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingSaleSum`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingSaleSum` (
  `id` tinyint NOT NULL,
  `itemShelvingFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemShelvingStock`
--

DROP TABLE IF EXISTS `itemShelvingStock`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStock`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingStock` (
  `itemFk` tinyint NOT NULL,
  `visible` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `grouping` tinyint NOT NULL,
  `sector` tinyint NOT NULL,
  `visibleOriginal` tinyint NOT NULL,
  `removed` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `shelvingFk` tinyint NOT NULL,
  `parkingCode` tinyint NOT NULL,
  `parkingFk` tinyint NOT NULL,
  `itemShelvingFk` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `isPreviousPrepared` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemShelvingStockFull`
--

DROP TABLE IF EXISTS `itemShelvingStockFull`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStockFull`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingStockFull` (
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `grouping` tinyint NOT NULL,
  `sector` tinyint NOT NULL,
  `removed` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `shelvingFk` tinyint NOT NULL,
  `parkingCode` tinyint NOT NULL,
  `parkingFk` tinyint NOT NULL,
  `itemShelvingFk` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemShelvingStockRemoved`
--

DROP TABLE IF EXISTS `itemShelvingStockRemoved`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStockRemoved`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingStockRemoved` (
  `itemShelvingFk` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `removed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `itemShelvingStock_byWarehouse`
--

DROP TABLE IF EXISTS `itemShelvingStock_byWarehouse`;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStock_byWarehouse`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemShelvingStock_byWarehouse` (
  `itemFk` tinyint NOT NULL,
  `visible` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemTag`
--

DROP TABLE IF EXISTS `itemTag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemTag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `tagFk` int(11) NOT NULL,
  `value` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `intValue` int(11) DEFAULT NULL,
  `priority` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `itemTagItemUq` (`itemFk`,`tagFk`),
  UNIQUE KEY `itemTagItemPriority` (`itemFk`,`priority`),
  KEY `tagFk` (`tagFk`,`value`),
  KEY `priorityItem` (`priority`,`itemFk`),
  KEY `value` (`value`),
  KEY `itemFk_2` (`itemFk`,`tagFk`,`intValue`),
  CONSTRAINT `itemTagItemFk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `itemTagTagFk` FOREIGN KEY (`tagFk`) REFERENCES `tag` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemTag_beforeInsert`
	BEFORE INSERT ON `itemTag`
	FOR EACH ROW
BEGIN
	SET NEW.intValue = itemTag_getIntValue(NEW.`value`);
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`.`itemTag_AFTER_INSERT`
	AFTER INSERT ON `itemTag`
	FOR EACH ROW
trig: BEGIN
	DECLARE vItemFk INT;
	DECLARE visTriggerDisabled BOOL;

	SELECT isItemTagTriggerDisabled INTO visTriggerDisabled
		FROM vn.itemConfig;

	IF @isTriggerDisabled OR visTriggerDisabled THEN
		LEAVE trig;
	END IF;
	
    SET vItemFk = NEW.itemFk;
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		SELECT vItemFk id;
	CALL item_refreshTags();
	DROP TEMPORARY TABLE tmp.item;
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`.`itemTag_beforeUpdate`
	BEFORE UPDATE ON `itemTag`
	FOR EACH ROW
BEGIN 
    IF !(OLD.`value` <=> NEW.`value`)
    OR !(OLD.intValue <=> NEW.intValue) THEN
		SET NEW.intValue = itemTag_getIntValue(NEW.`value`);
    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`.`itemTag_afterUpdate`
	AFTER UPDATE ON `itemTag`
	FOR EACH ROW
trig: BEGIN
	DECLARE vItemFk INT;
	DECLARE visTriggerDisabled BOOL;

	SELECT isItemTagTriggerDisabled INTO visTriggerDisabled
		FROM vn.itemConfig;

	IF @isTriggerDisabled OR visTriggerDisabled THEN
		LEAVE trig;
	END IF;
 	
	SET vItemFk = NEW.itemFk;
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
  	CREATE TEMPORARY TABLE tmp.item
		SELECT vItemFk id;

	CALL item_refreshTags();
	DROP TEMPORARY TABLE tmp.item;
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`.`itemTag_afterDelete`
	AFTER DELETE ON `itemTag`
	FOR EACH ROW
trig: BEGIN
	DECLARE vItemFk INT;
	DECLARE visTriggerDisabled BOOL;

	SELECT isItemTagTriggerDisabled INTO visTriggerDisabled
		FROM vn.itemConfig;

	IF @isTriggerDisabled OR visTriggerDisabled THEN
		LEAVE trig;
	END IF;
	
	SET vItemFk = OLD.itemFk;
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		SELECT vItemFk id;
	CALL item_refreshTags();
	DROP TEMPORARY TABLE tmp.item;
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 */ ;

--
-- Temporary table structure for view `itemTagged`
--

DROP TABLE IF EXISTS `itemTagged`;
/*!50001 DROP VIEW IF EXISTS `itemTagged`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemTagged` (
  `itemFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemTaxCountry`
--

DROP TABLE IF EXISTS `itemTaxCountry`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemTaxCountry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  `taxClassFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `effectived` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `itemFk_UNIQUE` (`itemFk`,`countryFk`),
  KEY `taxClassFK_idx` (`taxClassFk`),
  KEY `countryFK_paises_idx` (`countryFk`),
  CONSTRAINT `countryFK_paises` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `itemFK_Article` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `taxClassFK_Iva_Group` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Define la clase de iva por artículo y pais';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemTicketOut`
--

DROP TABLE IF EXISTS `itemTicketOut`;
/*!50001 DROP VIEW IF EXISTS `itemTicketOut`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemTicketOut` (
  `warehouseFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL,
  `reserved` tinyint NOT NULL,
  `refFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemType`
--

DROP TABLE IF EXISTS `itemType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemType` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `gramsMin__` int(11) DEFAULT NULL,
  `gramsMax` int(11) DEFAULT NULL,
  `order` int(11) DEFAULT '0',
  `categoryFk` int(10) unsigned NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `isInventory` tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Se utiliza tanto en el cálculo del inventario, como en el del informe del inventario valorado',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `f11__` tinyint(4) NOT NULL DEFAULT '0',
  `transaction` tinyint(4) NOT NULL DEFAULT '0',
  `making` int(10) unsigned DEFAULT NULL COMMENT 'Son productos de confección propia',
  `location` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `life` smallint(5) unsigned DEFAULT NULL,
  `maneuver` double NOT NULL DEFAULT '0.21',
  `target` double NOT NULL DEFAULT '0.15',
  `topMargin` double NOT NULL DEFAULT '0.3',
  `profit` double NOT NULL DEFAULT '0.02',
  `density` double NOT NULL DEFAULT '167' COMMENT 'Almacena el valor por defecto de la densidad en kg/m3 para el calculo de los portes aereos, en articulos se guarda la correcta',
  `promo` double NOT NULL DEFAULT '0',
  `isPackaging` tinyint(1) NOT NULL DEFAULT '0',
  `hasComponents` tinyint(1) NOT NULL DEFAULT '1',
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '60',
  `compression` decimal(5,2) DEFAULT '1.00',
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `temperatureFk` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `isUnconventionalSize` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'familia con productos cuyas medidas no son aptas para la cinta transportadora o paletizar',
  `isLaid` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Indica si el producto se puede tumbar a efectos del transporte desde Holanda',
  `maxRefs` int(10) unsigned DEFAULT NULL COMMENT 'Indica el número máximo de referencias',
  PRIMARY KEY (`code`),
  UNIQUE KEY `tipo_id_UNIQUE` (`id`),
  UNIQUE KEY `Tipo_UNIQUE` (`name`,`categoryFk`),
  KEY `Trabajador` (`workerFk`),
  KEY `reino_id` (`categoryFk`),
  KEY `Tipos_fk3_idx` (`making`),
  KEY `warehouseFk5_idx` (`warehouseFk`),
  KEY `temperatureFk` (`temperatureFk`),
  CONSTRAINT `Tipos_fk3` FOREIGN KEY (`making`) REFERENCES `confectionType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `Trabajador` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `itemType_ibfk_1` FOREIGN KEY (`categoryFk`) REFERENCES `itemCategory` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `temperatureFk` FOREIGN KEY (`temperatureFk`) REFERENCES `temperature` (`code`),
  CONSTRAINT `warehouseFk5` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Protege la tabla tipos de updates para los 4 parámetros de los compradores, en funcion del valor del campo CodigoRojo de tblContadores.';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`itemType_beforeUpdate`
	BEFORE UPDATE ON `itemType`
	FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN
	
	IF NEW.itemPackingTypeFk = '' THEN 
	
		SET NEW.itemPackingTypeFk = NULL;
	
	END IF;

	IF NEW.itemPackingTypeFk != OLD.itemPackingTypeFk THEN 
	
		UPDATE vn.item 
			SET itemPackingTypeFk = NEW.itemPackingTypeFk
			WHERE typeFk = NEW.id;
		
	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 */ ;

--
-- Table structure for table `itemTypeI18n`
--

DROP TABLE IF EXISTS `itemTypeI18n`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemTypeI18n` (
  `typeFk` smallint(5) unsigned NOT NULL,
  `lang` char(2) CHARACTER SET utf8 NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`typeFk`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `itemTypeL10n`
--

DROP TABLE IF EXISTS `itemTypeL10n`;
/*!50001 DROP VIEW IF EXISTS `itemTypeL10n`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `itemTypeL10n` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `itemTypeRestriction`
--

DROP TABLE IF EXISTS `itemTypeRestriction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemTypeRestriction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemTypeFk` smallint(5) unsigned NOT NULL,
  `dated` date NOT NULL,
  `minAmount` decimal(10,2) NOT NULL COMMENT 'importe mínimo en la linea de venta',
  PRIMARY KEY (`id`),
  UNIQUE KEY `itemTypeRestriction_UN` (`itemTypeFk`,`dated`),
  KEY `itemTypeRestriction_dated_IDX` (`dated`,`itemTypeFk`) USING BTREE,
  CONSTRAINT `itemTypeRestriction_itemType_id_fk` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemTypeTag`
--

DROP TABLE IF EXISTS `itemTypeTag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemTypeTag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemTypeFk` smallint(5) unsigned NOT NULL,
  `tagFk` int(11) NOT NULL,
  `priority` int(2) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `itemTypeFk_UNIQUE` (`itemTypeFk`,`tagFk`),
  KEY `itemTypeTagTipo_idx` (`itemTypeFk`),
  KEY `itemTypeTagTag_idx` (`tagFk`),
  CONSTRAINT `itemTypeTagTag` FOREIGN KEY (`tagFk`) REFERENCES `tag` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `itemTypeTagTipos` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `itemVerdecora__`
--

DROP TABLE IF EXISTS `itemVerdecora__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `itemVerdecora__` (
  `itemFk` int(11) NOT NULL,
  `codin` int(11) DEFAULT NULL,
  PRIMARY KEY (`itemFk`),
  CONSTRAINT `itemVerdecora_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Relaciona nuestros articulos con los de Verdecora';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `item_Free_Id`
--

DROP TABLE IF EXISTS `item_Free_Id`;
/*!50001 DROP VIEW IF EXISTS `item_Free_Id`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `item_Free_Id` (
  `newId` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `labelInfo`
--

DROP TABLE IF EXISTS `labelInfo`;
/*!50001 DROP VIEW IF EXISTS `labelInfo`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `labelInfo` (
  `itemId` tinyint NOT NULL,
  `itemName` tinyint NOT NULL,
  `stickers` tinyint NOT NULL,
  `life` tinyint NOT NULL,
  `colorCode` tinyint NOT NULL,
  `stems` tinyint NOT NULL,
  `category` tinyint NOT NULL,
  `productor` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `warehouse_id` tinyint NOT NULL,
  `size` tinyint NOT NULL,
  `isPickedOff` tinyint NOT NULL,
  `notes` tinyint NOT NULL,
  `wh_in` tinyint NOT NULL,
  `entryId` tinyint NOT NULL,
  `buyId` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `labourTree`
--

DROP TABLE IF EXISTS `labourTree`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `labourTree` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `lft` int(11) NOT NULL,
  `rgt` int(11) NOT NULL,
  `depth` bigint(22) NOT NULL DEFAULT '0',
  `sons` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `lastHourProduction`
--

DROP TABLE IF EXISTS `lastHourProduction`;
/*!50001 DROP VIEW IF EXISTS `lastHourProduction`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `lastHourProduction` (
  `warehouseFk` tinyint NOT NULL,
  `m3` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `lastPurchases`
--

DROP TABLE IF EXISTS `lastPurchases`;
/*!50001 DROP VIEW IF EXISTS `lastPurchases`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `lastPurchases` (
  `landed` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `warehouse` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `subName` tinyint NOT NULL,
  `entryFk` tinyint NOT NULL,
  `stickers` tinyint NOT NULL,
  `packing` tinyint NOT NULL,
  `ref` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `pro` tinyint NOT NULL,
  `ektRef` tinyint NOT NULL,
  `agj` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `lastTopClaims`
--

DROP TABLE IF EXISTS `lastTopClaims`;
/*!50001 DROP VIEW IF EXISTS `lastTopClaims`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `lastTopClaims` (
  `itemFk` tinyint NOT NULL,
  `itemName` tinyint NOT NULL,
  `itemTypeName` tinyint NOT NULL,
  `claimsNumber` tinyint NOT NULL,
  `claimedAmount` tinyint NOT NULL,
  `totalAmount` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ledgerConfig`
--

DROP TABLE IF EXISTS `ledgerConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ledgerConfig` (
  `lastBookEntry` int(11) NOT NULL,
  PRIMARY KEY (`lastBookEntry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `lungSize`
--

DROP TABLE IF EXISTS `lungSize`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `lungSize` (
  `hora` time NOT NULL,
  `size` decimal(5,0) NOT NULL,
  `dia` date NOT NULL,
  PRIMARY KEY (`hora`,`size`,`dia`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `machine`
--

DROP TABLE IF EXISTS `machine`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `machine` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `plate` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `serialNumber` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `maker` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `model` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `purchased` date DEFAULT NULL,
  `warehouseFk` int(11) DEFAULT NULL,
  `departmentFk` int(11) DEFAULT NULL,
  `type` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `use` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `productionYear` int(11) DEFAULT NULL,
  `photo` blob,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `ppeFk` int(11) DEFAULT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `plate` (`plate`),
  UNIQUE KEY `serialNumber` (`serialNumber`),
  KEY `machine_FK` (`ppeFk`),
  KEY `machine_FK_2` (`supplierFk`),
  KEY `machine_FK_1` (`workerFk`),
  CONSTRAINT `machine_FK` FOREIGN KEY (`ppeFk`) REFERENCES `ppe` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `machine_FK_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `machine_FK_2` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Maquinaria industrial, vehículos y demás elementos amortizables';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`machine_BI`
	BEFORE INSERT ON `machine`
	FOR EACH ROW
BEGIN
	
	SET NEW.workerFk = vn.getUser();

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 */ ;

--
-- Table structure for table `machineDetail`
--

DROP TABLE IF EXISTS `machineDetail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `machineDetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `machineFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `action` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `value` decimal(10,2) DEFAULT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `dmsFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `machineDetail_FK` (`machineFk`),
  KEY `machineDetail_FK_2` (`dmsFk`),
  KEY `machineDetail_FK_1` (`workerFk`),
  CONSTRAINT `machineDetail_FK` FOREIGN KEY (`machineFk`) REFERENCES `machine` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `machineDetail_FK_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `machineDetail_FK_2` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `machineDms`
--

DROP TABLE IF EXISTS `machineDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `machineDms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `machineFk` int(11) NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `machineDms_UN` (`machineFk`,`dmsFk`),
  KEY `machineDms_FK` (`dmsFk`),
  CONSTRAINT `machineDms_FK` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `machineDms_FK_1` FOREIGN KEY (`machineFk`) REFERENCES `machine` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `machineWorker`
--

DROP TABLE IF EXISTS `machineWorker`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `machineWorker` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `machineFk` int(11) NOT NULL,
  `inTimed` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `outTimed` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `machineWorker_FK_1` (`machineFk`),
  KEY `machineWorker_FK` (`workerFk`),
  CONSTRAINT `machineWorker_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `machineWorker_FK_1` FOREIGN KEY (`machineFk`) REFERENCES `machine` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Registros horarios de vehículos de almacén por empleado';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `machineWorkerConfig`
--

DROP TABLE IF EXISTS `machineWorkerConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `machineWorkerConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `maxHours` smallint(5) unsigned NOT NULL COMMENT 'Indicates how many hours a user record is reviewed to update or insert',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mail`
--

DROP TABLE IF EXISTS `mail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mail` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `receiver` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `sender` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `replyTo` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `subject` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `body` text COLLATE utf8_unicode_ci NOT NULL,
  `sent` tinyint(2) NOT NULL DEFAULT '0',
  `creationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `attachment` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `status` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'OK',
  `senderFk` int(10) unsigned DEFAULT NULL,
  `recipientFk` int(10) unsigned DEFAULT NULL,
  `plainTextBody` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `sent_idx` (`sent`),
  KEY `creation_idx` (`creationDate`),
  KEY `mail_FK_1` (`recipientFk`),
  KEY `mail_FK` (`senderFk`),
  CONSTRAINT `mail_FK` FOREIGN KEY (`senderFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `mail_FK_1` FOREIGN KEY (`recipientFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`mail_beforeInsert`
	BEFORE INSERT ON `mail`
	FOR EACH ROW
BEGIN

	IF NEW.sender IS NOT NULL THEN
	
		SET NEW.receiver = NEW.sender;
	
	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 */ ;

--
-- Table structure for table `mailTemplates`
--

DROP TABLE IF EXISTS `mailTemplates`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mailTemplates` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 NOT NULL,
  `attachmentPath` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mandate`
--

DROP TABLE IF EXISTS `mandate`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mandate` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL,
  `companyFk` smallint(5) unsigned NOT NULL,
  `code` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `finished` timestamp NULL DEFAULT NULL,
  `mandateTypeFk` smallint(5) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `mandato_fgkey1_idx` (`clientFk`),
  KEY `mandato_fgkey2_idx` (`companyFk`),
  KEY `mandato_fgkey3_idx` (`mandateTypeFk`),
  CONSTRAINT `mandato_fgkey1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `mandato_fgkey2` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `mandato_fgkey3` FOREIGN KEY (`mandateTypeFk`) REFERENCES `mandateType` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`mandate_beforeInsert`
	BEFORE INSERT ON `mandate`
	FOR EACH ROW
BEGIN
	IF (NEW.code IS NULL) THEN
		SET NEW.code=CONCAT(NEW.clientFk,'-',(SELECT AUTO_INCREMENT 
		    FROM information_schema.TABLES 
		    WHERE TABLE_SCHEMA='vn' and TABLE_NAME='mandate'));
    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 */ ;

--
-- Table structure for table `mandateType`
--

DROP TABLE IF EXISTS `mandateType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mandateType` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `manuscript`
--

DROP TABLE IF EXISTS `manuscript`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `manuscript` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mdbBranch`
--

DROP TABLE IF EXISTS `mdbBranch`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mdbBranch` (
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mdbVersion`
--

DROP TABLE IF EXISTS `mdbVersion`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mdbVersion` (
  `app` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `branchFk` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `version` int(11) DEFAULT NULL,
  PRIMARY KEY (`app`,`branchFk`),
  KEY `mdbVersion_branchFk` (`branchFk`),
  CONSTRAINT `mdbVersion_branchFk` FOREIGN KEY (`branchFk`) REFERENCES `mdbBranch` (`name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `medicalCenter`
--

DROP TABLE IF EXISTS `medicalCenter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `medicalCenter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `medicalReview`
--

DROP TABLE IF EXISTS `medicalReview`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `medicalReview` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `centerFk` int(11) NOT NULL,
  `date` date DEFAULT NULL,
  `time` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isFit` tinyint(1) DEFAULT NULL,
  `amount` double DEFAULT NULL,
  `invoice` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `remark` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `frgcenter_idx` (`centerFk`),
  KEY `frgnkWorker_idx` (`workerFk`),
  CONSTRAINT `frgcenter` FOREIGN KEY (`centerFk`) REFERENCES `medicalCenter` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `frgnkWorker` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `message`
--

DROP TABLE IF EXISTS `message`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uuid` varchar(50) CHARACTER SET utf8 NOT NULL,
  `sender` varchar(50) CHARACTER SET utf8 NOT NULL,
  `recipient` varchar(50) CHARACTER SET utf8 NOT NULL,
  `message` longtext CHARACTER SET utf8,
  `sendDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `sender` (`sender`),
  KEY `recipient` (`recipient`),
  KEY `uuid` (`uuid`(8))
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `messageInbox`
--

DROP TABLE IF EXISTS `messageInbox`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `messageInbox` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uuid` varchar(50) CHARACTER SET utf8 NOT NULL,
  `sender` varchar(50) CHARACTER SET utf8 NOT NULL,
  `recipient` varchar(45) CHARACTER SET utf8 NOT NULL,
  `finalRecipient` varchar(50) CHARACTER SET utf8 NOT NULL,
  `message` longtext CHARACTER SET utf8,
  `sendDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `read` varchar(45) CHARACTER SET utf8 NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `uuid` (`uuid`(8)),
  KEY `finalRecipient` (`finalRecipient`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `mistake`
--

DROP TABLE IF EXISTS `mistake`;
/*!50001 DROP VIEW IF EXISTS `mistake`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `mistake` (
  `revisador` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `sacador` tinyint NOT NULL,
  `firstName` tinyint NOT NULL,
  `lastName` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `mistakeRatio`
--

DROP TABLE IF EXISTS `mistakeRatio`;
/*!50001 DROP VIEW IF EXISTS `mistakeRatio`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `mistakeRatio` (
  `revisador` tinyint NOT NULL,
  `sacador` tinyint NOT NULL,
  `firstName` tinyint NOT NULL,
  `lastName` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `mistakeType`
--

DROP TABLE IF EXISTS `mistakeType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mistakeType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mobileAppVersionControl`
--

DROP TABLE IF EXISTS `mobileAppVersionControl`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mobileAppVersionControl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `appName` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `version` varchar(45) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  `isVersionCritical` tinyint(1) DEFAULT '0',
  `urlProduction` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `urlBeta` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `versionBeta` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isVersionBetaCritical` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla para llevar el control de las Versions de las aplicaciones móvil ';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mrw`
--

DROP TABLE IF EXISTS `mrw`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mrw` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `counter` smallint(5) unsigned DEFAULT NULL,
  `shipped` date DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mrwService`
--

DROP TABLE IF EXISTS `mrwService`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mrwService` (
  `agencyModeCodeFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `clientType` int(11) unsigned NOT NULL,
  `serviceType` int(11) unsigned DEFAULT NULL,
  PRIMARY KEY (`agencyModeCodeFk`),
  CONSTRAINT `mrwService_agencyModeCodeFk` FOREIGN KEY (`agencyModeCodeFk`) REFERENCES `agencyMode` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Configuración de los servicios de MRW';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `mrwServiceWeekday`
--

DROP TABLE IF EXISTS `mrwServiceWeekday`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mrwServiceWeekday` (
  `agencyModeCodeFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `weekdays` set('mon','tue','wed','thu','fri','sat','sun') COLLATE utf8_unicode_ci NOT NULL,
  `serviceType` int(11) unsigned NOT NULL,
  `params` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`agencyModeCodeFk`),
  CONSTRAINT `mrwServiceWeekday_agencyModeCodeFk` FOREIGN KEY (`agencyModeCodeFk`) REFERENCES `agencyMode` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Configuración de los servicios en relación con el día de la semana para MRW';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `newBornSales`
--

DROP TABLE IF EXISTS `newBornSales`;
/*!50001 DROP VIEW IF EXISTS `newBornSales`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `newBornSales` (
  `amount` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `userFk` tinyint NOT NULL,
  `dated` tinyint NOT NULL,
  `firstShipped` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `noticeCategory`
--

DROP TABLE IF EXISTS `noticeCategory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `noticeCategory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `keyName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `subject` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `isEnabled` tinyint(1) NOT NULL DEFAULT '1',
  `requiredRole` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `keyName_UNIQUE` (`keyName`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `noticeSubscription`
--

DROP TABLE IF EXISTS `noticeSubscription`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `noticeSubscription` (
  `noticeCategoryFk` int(11) NOT NULL DEFAULT '0',
  `userFk` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`noticeCategoryFk`,`userFk`),
  KEY `noticeSubscription_ibfk_2` (`userFk`),
  CONSTRAINT `noticeSubscription_ibfk_1` FOREIGN KEY (`noticeCategoryFk`) REFERENCES `noticeCategory` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `noticeSubscription_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `observationType`
--

DROP TABLE IF EXISTS `observationType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `observationType` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `hasNewBornMessage` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Indica aquellos que deben de recibir un mensaje advirtiendo de un cliente nuevo',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `occupationCode`
--

DROP TABLE IF EXISTS `occupationCode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `occupationCode` (
  `code` varchar(1) CHARACTER SET utf8 NOT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Código de ocupación de la seguridad social';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `orderTicket`
--

DROP TABLE IF EXISTS `orderTicket`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orderTicket` (
  `orderFk` int(10) unsigned NOT NULL,
  `ticketFk` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ticketFk`,`orderFk`),
  KEY `order_id` (`orderFk`),
  CONSTRAINT `hedera_id` FOREIGN KEY (`orderFk`) REFERENCES `hedera`.`order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `idTicketFk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `origin`
--

DROP TABLE IF EXISTS `origin`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `origin` (
  `id` tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(5) unsigned DEFAULT '4',
  `flag__` blob,
  `nl__` tinyint(4) NOT NULL DEFAULT '0',
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `Abreviatura` (`code`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `Id_Paises` (`countryFk`),
  CONSTRAINT `origin_ibfk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `originI18n`
--

DROP TABLE IF EXISTS `originI18n`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `originI18n` (
  `originFk` tinyint(2) unsigned NOT NULL,
  `lang` char(2) CHARACTER SET utf8 NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`originFk`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `originL10n`
--

DROP TABLE IF EXISTS `originL10n`;
/*!50001 DROP VIEW IF EXISTS `originL10n`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `originL10n` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `outgoingInvoiceVat`
--

DROP TABLE IF EXISTS `outgoingInvoiceVat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `outgoingInvoiceVat` (
  `outgoingInvoice` mediumint(8) NOT NULL,
  `taxBase` decimal(12,2) DEFAULT NULL,
  `equalizationTax` decimal(12,2) DEFAULT NULL,
  `Vat` decimal(12,2) DEFAULT NULL,
  PRIMARY KEY (`outgoingInvoice`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packageChecked`
--

DROP TABLE IF EXISTS `packageChecked`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packageChecked` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `entryFk_UNIQUE` (`itemFk`),
  KEY `fkItem_idx` (`itemFk`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packageEquivalent`
--

DROP TABLE IF EXISTS `packageEquivalent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packageEquivalent` (
  `packagingFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `equivalentFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`packagingFk`,`equivalentFk`),
  KEY `packageEquivalent_fk2_idx` (`equivalentFk`),
  CONSTRAINT `packageEquivalent_fk1` FOREIGN KEY (`packagingFk`) REFERENCES `packaging` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `packageEquivalent_fk2` FOREIGN KEY (`equivalentFk`) REFERENCES `packaging` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='recoge los modelos de cubos que se han de sustituir a efectos de presentar informes resumidos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `packageEquivalentItem`
--

DROP TABLE IF EXISTS `packageEquivalentItem`;
/*!50001 DROP VIEW IF EXISTS `packageEquivalentItem`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `packageEquivalentItem` (
  `itemFk` tinyint NOT NULL,
  `equivalentFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `packaging`
--

DROP TABLE IF EXISTS `packaging`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packaging` (
  `id` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `volume` decimal(10,2) DEFAULT '0.00',
  `width` decimal(10,2) DEFAULT '0.00',
  `depth` decimal(10,2) DEFAULT '0.00',
  `height` decimal(10,2) DEFAULT '0.00',
  `value` decimal(10,2) DEFAULT '0.00',
  `isPackageReturnable` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `packagingReturnFk` int(11) DEFAULT NULL,
  `lower` int(11) DEFAULT NULL,
  `upload` int(11) DEFAULT NULL,
  `base` decimal(10,2) DEFAULT NULL,
  `itemFk` int(11) DEFAULT NULL,
  `price` decimal(10,2) NOT NULL,
  `isBox` tinyint(1) NOT NULL DEFAULT '0',
  `cubicPackage` decimal(10,2) DEFAULT NULL,
  `returnCost` decimal(10,2) NOT NULL DEFAULT '0.00',
  `cmrName` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `freightItemFk` int(11) DEFAULT NULL,
  `hasCompressionVariations` tinyint(1) DEFAULT '0' COMMENT 'Floramondo puede servirlos no llenos del todo',
  `conveyorBuildingClassFk` int(11) DEFAULT NULL,
  `isTrolley` tinyint(1) NOT NULL DEFAULT '0',
  `isPallet` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `packaging_fk1` (`itemFk`),
  KEY `packaging_fk2_idx` (`freightItemFk`),
  KEY `packaging_FK` (`conveyorBuildingClassFk`),
  KEY `packaging_FK_1` (`packagingReturnFk`),
  CONSTRAINT `packaging_FK` FOREIGN KEY (`conveyorBuildingClassFk`) REFERENCES `conveyorBuildingClass` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `packaging_FK_1` FOREIGN KEY (`packagingReturnFk`) REFERENCES `vn2008`.`Cubos_Retorno` (`idCubos_Retorno`) ON UPDATE CASCADE,
  CONSTRAINT `packaging_fk1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `packaging_fk2` FOREIGN KEY (`freightItemFk`) REFERENCES `item` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packagingConfig`
--

DROP TABLE IF EXISTS `packagingConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packagingConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `upperGap` int(11) NOT NULL,
  `previousPreparationMinimumSize` int(11) NOT NULL,
  `defaultConveyorBuildingClass` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Altura mínima para preparar pedidos en preparacion previa';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packagingGifts`
--

DROP TABLE IF EXISTS `packagingGifts`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packagingGifts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `photo` blob,
  `started` date NOT NULL,
  `ended` date NOT NULL,
  `warehouseFk` smallint(5) unsigned DEFAULT NULL,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `PackagingGifts_FK_2` (`countryFk`),
  KEY `PackagingGifts_FK` (`provinceFk`),
  KEY `PackagingGifts_FK_1` (`warehouseFk`),
  CONSTRAINT `PackagingGifts_FK` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`),
  CONSTRAINT `PackagingGifts_FK_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`),
  CONSTRAINT `PackagingGifts_FK_2` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packingSite`
--

DROP TABLE IF EXISTS `packingSite`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packingSite` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hostFk` int(11) NOT NULL,
  `printerFk` tinyint(3) unsigned DEFAULT NULL,
  `collectionFk` int(11) DEFAULT NULL COMMENT 'Last collection packed on this site',
  PRIMARY KEY (`id`),
  UNIQUE KEY `packingSite_UN` (`code`),
  KEY `packingSite_FK_1` (`printerFk`),
  KEY `packingSite_FK` (`hostFk`),
  KEY `packingSite_FK_2` (`collectionFk`),
  CONSTRAINT `packingSite_FK` FOREIGN KEY (`hostFk`) REFERENCES `host` (`id`),
  CONSTRAINT `packingSite_FK_1` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`),
  CONSTRAINT `packingSite_FK_2` FOREIGN KEY (`collectionFk`) REFERENCES `collection` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packingSiteLog`
--

DROP TABLE IF EXISTS `packingSiteLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packingSiteLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `packingSiteFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hostFk` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `printerModelFk` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `typeErrorFk` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `packingSiteLog_UN` (`id`),
  KEY `packingSiteLog_FK` (`workerFk`),
  KEY `packingSiteLog_FK_4` (`typeErrorFk`),
  KEY `packingSiteLog_FK_1` (`printerModelFk`),
  KEY `packingSiteLog_FK_2` (`packingSiteFk`),
  CONSTRAINT `packingSiteLog_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`),
  CONSTRAINT `packingSiteLog_FK_1` FOREIGN KEY (`printerModelFk`) REFERENCES `printerModel` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `packingSiteLog_FK_2` FOREIGN KEY (`packingSiteFk`) REFERENCES `packingSite` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `packingSiteLog_FK_4` FOREIGN KEY (`typeErrorFk`) REFERENCES `packingSiteTypeError` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `packingSiteTypeError`
--

DROP TABLE IF EXISTS `packingSiteTypeError`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `packingSiteTypeError` (
  `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `parking`
--

DROP TABLE IF EXISTS `parking`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `parking` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `column` varchar(5) CHARACTER SET utf8 DEFAULT '--',
  `row` varchar(5) CHARACTER SET utf8 DEFAULT '--',
  `sectorFk` int(11) NOT NULL DEFAULT '2',
  `code` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
  `pickingOrder` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`),
  KEY `parking_fk1_idx` (`sectorFk`),
  CONSTRAINT `parking_fk1` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla con los parkings del altillo';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`parking_BEFORE_INSERT`
	BEFORE INSERT ON `parking`
	FOR EACH ROW
BEGIN

	-- SET new.`code` = CONCAT(new.`column`,' - ',new.`row`) ;

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`.`parking_BEFORE_UPDATE`
	BEFORE UPDATE ON `parking`
	FOR EACH ROW
BEGIN

	-- SET new.`code` = CONCAT(new.`column`,' - ',new.`row`) ;
    
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 */ ;

--
-- Table structure for table `payDem`
--

DROP TABLE IF EXISTS `payDem`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payDem` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `payDem` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `payDemDetail`
--

DROP TABLE IF EXISTS `payDemDetail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payDemDetail` (
  `id` tinyint(3) unsigned NOT NULL,
  `detail` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`,`detail`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `payMethod`
--

DROP TABLE IF EXISTS `payMethod`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payMethod` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `solution` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `outstandingDebt` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000',
  `graceDays` int(11) unsigned NOT NULL DEFAULT '0',
  `isIbanRequiredForClients` tinyint(3) DEFAULT '0',
  `isIbanRequiredForSuppliers` tinyint(3) DEFAULT '0',
  `isNotified` tinyint(3) NOT NULL DEFAULT '1',
  `hasVerified` tinyint(1) DEFAULT '0',
  `graceMonthsDisableChecked` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Deshabilita la comprobación de los datos bancarios de todos aquellos proveedores que no hayan recibido un pago en los meses especificados',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `payment`
--

DROP TABLE IF EXISTS `payment`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `payment` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `received` date NOT NULL,
  `supplierFk` int(11) NOT NULL,
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `currencyFk` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `divisa` decimal(10,2) DEFAULT NULL,
  `bankFk` int(11) NOT NULL DEFAULT '0',
  `payMethodFk` tinyint(3) unsigned NOT NULL,
  `bankingFees` double(6,2) unsigned NOT NULL DEFAULT '0.00',
  `concept` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `isConciliated` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
  `exchangeInsuranceFk__` int(11) DEFAULT NULL,
  `dueDated` date DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `empresa_id` (`companyFk`),
  KEY `id_banco` (`bankFk`),
  KEY `id_moneda` (`currencyFk`),
  KEY `pay_met` (`payMethodFk`),
  KEY `fk_pago_pago_sdc1_idx` (`exchangeInsuranceFk__`),
  KEY `pagoDueDatedIdx` (`dueDated`),
  KEY `pago_ibfk_3` (`supplierFk`),
  KEY `payment_FK` (`workerFk`),
  CONSTRAINT `pago_ibfk_3` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pago_moneda_1` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pago_pay_met` FOREIGN KEY (`payMethodFk`) REFERENCES `payMethod` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `payment_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`),
  CONSTRAINT `payment_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `payment_ibfk_2` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `payment_beforeInsert` BEFORE INSERT ON `payment` FOR EACH ROW
BEGIN
		DECLARE cuenta_banco,cuenta_proveedor DOUBLE;
		DECLARE vNewBookEntry INT;
		DECLARE bolCASH BOOLEAN;
		DECLARE isSupplierActive BOOLEAN;

		-- PAK 10/02/15 No se asientan los pagos directamente, salvo en el caso de las cajas de CASH
		SELECT (at2.code = 'cash') INTO bolCASH
			FROM vn.bank b
				JOIN vn.accountingType at2 ON at2.id = b.cash
			WHERE b.id = NEW.bankFk;

		IF bolCASH  THEN

			SELECT account INTO cuenta_banco
				FROM bank
				WHERE id = NEW.bankFk;
				
			SELECT account INTO cuenta_proveedor
				FROM supplier
				WHERE id = NEW.supplierFk;
			
			CALL vn.ledger_next(vNewBookEntry);
			
			INSERT INTO XDiario (	ASIEN,
									FECHA,
									SUBCTA,
									CONTRA,
									CONCEPTO,
									EURODEBE,
									EUROHABER,
									empresa_id)
				SELECT 	vNewBookEntry,
						NEW.received,
						SUBCTA,
						CONTRA,
						NEW.concept,
						EURODEBE,
						EUROHABER,
						NEW.companyFk
					FROM (	SELECT 	cuenta_banco SUBCTA,
									cuenta_proveedor CONTRA,
									0 EURODEBE,
									NEW.amount + NEW.bankingFees EUROHABER
							UNION ALL
							SELECT 	cuenta_proveedor SUBCTA,
									cuenta_banco CONTRA,
									NEW.amount EURODEBE,
									0 EUROHABER) gf;
				
			IF NEW.bankingFees <> 0 THEN
				INSERT INTO XDiario (	ASIEN,
										FECHA,
										SUBCTA,
										CONTRA,
										CONCEPTO,
										EURODEBE,
										EUROHABER,
										empresa_id)
					SELECT 	vNewBookEntry,
							NEW.received,
							IF(c.id = 1,6260000002,
							IF(CEE = 1,6260000003,6260000004)),
							cuenta_banco,
							NEW.concept,
							NEW.bankingFees,
							0,
							NEW.companyFk
						FROM supplier s
							JOIN country c ON s.countryFk = c.id
						WHERE s.id = NEW.supplierFk;
			END IF;		
		END IF;

		SET NEW.dueDated = IFNULL(NEW.dueDated, NEW.received);

		SELECT isActive INTO isSupplierActive
			FROM supplier
			WHERE id = NEW.supplierFk;
			
		IF isSupplierActive = FALSE THEN
			CALL util.throw('SUPPLIER_INACTIVE');
		END IF;
	
		IF ISNULL(NEW.workerFk) THEN
			SET NEW.workerFk = account.myUser_getId();
		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`.`payment_afterInsert`
	AFTER INSERT ON `payment`
	FOR EACH ROW
BEGIN
	DECLARE vIsPayMethodChecked BOOLEAN;
	DECLARE vEmail VARCHAR(150);
		
	SELECT isPayMethodChecked INTO vIsPayMethodChecked
			FROM supplier
			WHERE id = NEW.supplierFk;
			
	
	IF vIsPayMethodChecked = FALSE THEN

		SELECT notificationEmail INTO vEmail
			FROM department
				WHERE name = 'FINANZAS';

        CALL mail_insert(
			vEmail,
       		NULL,
       		'Pago con método sin verificar',
       		CONCAT(
				'Se ha realizado el pago ',
				NEW.id,
       			' al proveedor ',
       			NEW.supplierFk,
       			' con el método de pago sin verificar.'
       		)
       	);
    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_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER payment_beforeUpdate BEFORE UPDATE ON payment FOR EACH ROW
BEGIN
	IF ISNULL(NEW.workerFk) THEN
		SET NEW.workerFk = account.myUser_getId();
	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 */ ;

--
-- Table structure for table `pcs`
--

DROP TABLE IF EXISTS `pcs`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pcs` (
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `routeFk` int(10) unsigned DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pallet` int(11) DEFAULT NULL,
  `box` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pcs_graf`
--

DROP TABLE IF EXISTS `pcs_graf`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pcs_graf` (
  `id` int(11) NOT NULL DEFAULT '0',
  `dia` date DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `box` decimal(4,0) DEFAULT NULL,
  `pallet` decimal(2,0) DEFAULT NULL,
  `routeFk` int(10) unsigned DEFAULT NULL,
  `hh` int(11) DEFAULT NULL,
  `mm` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pcs_graf_index1` (`hh`),
  KEY `pcs_graf_index2` (`mm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pedidosInternos`
--

DROP TABLE IF EXISTS `pedidosInternos`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pedidosInternos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `idArticle` int(11) DEFAULT NULL,
  `quantity` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `periodicityType`
--

DROP TABLE IF EXISTS `periodicityType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `periodicityType` (
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `personMedia`
--

DROP TABLE IF EXISTS `personMedia`;
/*!50001 DROP VIEW IF EXISTS `personMedia`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `personMedia` (
  `workerFk` tinyint NOT NULL,
  `mediaValue` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `person__`
--

DROP TABLE IF EXISTS `person__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `person__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `surnames` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `fi` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `readerId__` int(11) DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `isDisable` tinyint(1) NOT NULL DEFAULT '0',
  `isFreelance` tinyint(1) NOT NULL DEFAULT '0',
  `isSsDiscounted` tinyint(1) NOT NULL DEFAULT '0',
  `nickname` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `p2` longtext COLLATE utf8_unicode_ci,
  `sex` enum('M','F') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'F' COMMENT 'M Masculino F Femenino',
  PRIMARY KEY (`id`),
  UNIQUE KEY `nif` (`fi`),
  UNIQUE KEY `person_UN` (`readerId__`),
  KEY `nifIndex` (`fi`),
  KEY `workerFk_idx` (`workerFk`),
  CONSTRAINT `Person_ibfk_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `personalProtectionEquipment`
--

DROP TABLE IF EXISTS `personalProtectionEquipment`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `personalProtectionEquipment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pgc`
--

DROP TABLE IF EXISTS `pgc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pgc` (
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `rate` decimal(10,2) NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cplusTaxBreakFk` int(10) unsigned DEFAULT '1',
  `mod340` tinyint(1) NOT NULL DEFAULT '0',
  `mod347` tinyint(1) NOT NULL DEFAULT '0',
  `cplusTrascendency477Fk` int(10) unsigned DEFAULT '1',
  `isEqualizated` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`code`),
  KEY `pgc_fk1_idx` (`cplusTaxBreakFk`),
  KEY `pgc_fk2_idx` (`cplusTrascendency477Fk`),
  CONSTRAINT `pgc_fk1` FOREIGN KEY (`cplusTaxBreakFk`) REFERENCES `cplusTaxBreak` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pgc_fk2` FOREIGN KEY (`cplusTrascendency477Fk`) REFERENCES `cplusTrascendency477` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Plan General Contable';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pgcEqu`
--

DROP TABLE IF EXISTS `pgcEqu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pgcEqu` (
  `vatFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Cuenta de IVA',
  `equFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Cuenta de recargo de equivalencia',
  PRIMARY KEY (`vatFk`,`equFk`),
  KEY `pgcEqu_fk2_idx` (`equFk`),
  CONSTRAINT `pgcEqu_fk1` FOREIGN KEY (`vatFk`) REFERENCES `pgc` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `pgcEqu_fk2` FOREIGN KEY (`equFk`) REFERENCES `pgc` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Recoge las cuentas contables con recargo de equivalencia e identifica a la que corresponde al iva y la que corresponde al recargo';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `pgcMaster`
--

DROP TABLE IF EXISTS `pgcMaster`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pgcMaster` (
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='tan solo tiene las cuentas de contaplus';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `phoneBook`
--

DROP TABLE IF EXISTS `phoneBook`;
/*!50001 DROP VIEW IF EXISTS `phoneBook`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `phoneBook` (
  `Tipo` tinyint NOT NULL,
  `Id` tinyint NOT NULL,
  `Cliente` tinyint NOT NULL,
  `Telefono` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `plantpassport`
--

DROP TABLE IF EXISTS `plantpassport`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `plantpassport` (
  `producerFk` mediumint(3) unsigned NOT NULL,
  `plantpassportAuthorityFk` mediumint(3) unsigned NOT NULL,
  `number` varchar(25) CHARACTER SET utf8 DEFAULT NULL,
  `isRequested` tinyint(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`producerFk`,`plantpassportAuthorityFk`),
  KEY `plantpassport_authority_idx` (`plantpassportAuthorityFk`),
  KEY `producer_id_idx` (`producerFk`),
  CONSTRAINT `plantpassport_authority` FOREIGN KEY (`plantpassportAuthorityFk`) REFERENCES `plantpassportAuthority` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `producer` FOREIGN KEY (`producerFk`) REFERENCES `producer` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='tiene la asignacion de cada productor con la autoridad certificadora';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `plantpassportAuthority`
--

DROP TABLE IF EXISTS `plantpassportAuthority`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `plantpassportAuthority` (
  `id` mediumint(3) unsigned NOT NULL,
  `denomination` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `denomination_UNIQUE` (`denomination`),
  KEY `Pais_id_idx` (`countryFk`),
  CONSTRAINT `Pais_id` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='entidades certificadoras';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `postCode`
--

DROP TABLE IF EXISTS `postCode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `postCode` (
  `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `townFk` int(11) NOT NULL,
  `geoFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`code`,`townFk`),
  KEY `postCodeTownFk_idx` (`townFk`),
  CONSTRAINT `postCodeTownFk` FOREIGN KEY (`townFk`) REFERENCES `town` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`postCode_beforeInsert`
	BEFORE INSERT ON `postCode`
	FOR EACH ROW
BEGIN
    SET NEW.geoFk = zoneGeo_new('postCode', NEW.`code`,
		(SELECT geoFk FROM town WHERE id = NEW.townFk));
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`.`postCode_beforeUpdate`
	BEFORE UPDATE ON `postCode`
	FOR EACH ROW
BEGIN
	-- IF !(OLD.geoFk <=> NEW.geoFk) THEN
	-- 	CALL zoneGeo_throwNotEditable;
	-- 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`.`postCode_afterUpdate`
	AFTER UPDATE ON `postCode`
	FOR EACH ROW
BEGIN
	IF !(OLD.townFk <=> NEW.townFk) THEN
		CALL zoneGeo_setParent(NEW.geoFk,
			(SELECT geoFk FROM town WHERE id = NEW.townFk));
	END IF;

	IF !(OLD.`code` <=> NEW.`code`) THEN
		UPDATE zoneGeo SET `name` = NEW.`code`
			WHERE id = NEW.geoFk;
	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`.`postCode_afterDelete`
	AFTER DELETE ON `postCode`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_delete(OLD.geoFk);
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 */ ;

--
-- Table structure for table `ppe`
--

DROP TABLE IF EXISTS `ppe`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amortization` decimal(10,2) NOT NULL DEFAULT '0.00',
  `firstAmortizated` date DEFAULT NULL,
  `lastAmortizated` date DEFAULT NULL,
  `finished` date DEFAULT NULL,
  `value` decimal(10,2) NOT NULL DEFAULT '0.00',
  `planFk` int(11) NOT NULL,
  `groupFk` int(11) DEFAULT NULL,
  `account` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `endowment` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `elementAccount` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nature` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `location` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `discharged` date DEFAULT NULL,
  `cause` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `photo` blob,
  `isInvestmentAsset` tinyint(4) NOT NULL DEFAULT '0',
  `workerFk` int(10) unsigned DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ppe_fk1_idx` (`workerFk`),
  KEY `ppe_fk2_idx` (`planFk`),
  KEY `ppe_fk3_idx` (`groupFk`),
  KEY `ppe_fk4_idx` (`companyFk`),
  KEY `ppe_fk5_idx` (`account`),
  KEY `ppe_fk6` (`endowment`),
  KEY `ppe_fk7` (`elementAccount`),
  KEY `ppe_FK` (`location`),
  CONSTRAINT `ppe_FK` FOREIGN KEY (`location`) REFERENCES `ppeLocation` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk2` FOREIGN KEY (`planFk`) REFERENCES `ppePlan` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk3` FOREIGN KEY (`groupFk`) REFERENCES `ppeGroup` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk4` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk5` FOREIGN KEY (`account`) REFERENCES `pgcMaster` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk6` FOREIGN KEY (`endowment`) REFERENCES `pgcMaster` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `ppe_fk7` FOREIGN KEY (`elementAccount`) REFERENCES `pgcMaster` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Property, plant & equipment\nInmvolizado, en español';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ppeComponent`
--

DROP TABLE IF EXISTS `ppeComponent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppeComponent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ppeFk` int(11) NOT NULL,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`),
  KEY `ppeComponent_fk1_idx` (`ppeFk`),
  KEY `ppeComponent_fk2_idx` (`invoiceInFk`),
  CONSTRAINT `ppeComponent_fk1` FOREIGN KEY (`ppeFk`) REFERENCES `ppe` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ppeComponent_fk2` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ppeDMS`
--

DROP TABLE IF EXISTS `ppeDMS`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppeDMS` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dmsFk` int(11) NOT NULL,
  `ppeFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ppeDMS_fk1_idx` (`dmsFk`),
  KEY `ppeDMS_fk2_idx` (`ppeFk`),
  CONSTRAINT `ppeDMS_fk1` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ppeDMS_fk2` FOREIGN KEY (`ppeFk`) REFERENCES `ppe` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ppeGroup`
--

DROP TABLE IF EXISTS `ppeGroup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppeGroup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tipo de inmovilizado';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ppeLocation`
--

DROP TABLE IF EXISTS `ppeLocation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppeLocation` (
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `description` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ppePlan`
--

DROP TABLE IF EXISTS `ppePlan`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ppePlan` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rate` decimal(3,2) NOT NULL DEFAULT '1.00',
  `days` int(11) NOT NULL DEFAULT '365',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Plan de amortizacion para la tabla ppe';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `priceFixed`
--

DROP TABLE IF EXISTS `priceFixed`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `priceFixed` (
  `itemFk` int(10) NOT NULL,
  `rate0` double NOT NULL,
  `rate1` double NOT NULL,
  `rate2` double NOT NULL,
  `rate3` double NOT NULL,
  `started` date NOT NULL,
  `ended` date NOT NULL,
  `bonus` double NOT NULL DEFAULT '0',
  `warehouseFk` smallint(5) unsigned NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `grouping` smallint(5) DEFAULT NULL,
  `packing` int(11) DEFAULT NULL,
  `box` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`itemFk`,`started`,`ended`,`warehouseFk`),
  UNIQUE KEY `price_fixed_id_UNIQUE` (`id`),
  KEY `item_id` (`itemFk`),
  KEY `date_start` (`started`),
  KEY `date_end` (`ended`),
  KEY `warehouse_id` (`warehouseFk`),
  CONSTRAINT `priceFixed_ibfk_1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `priceFixed_ibfk_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`priceFixed_beforeInsert`
	BEFORE INSERT ON `priceFixed`
	FOR EACH ROW
BEGIN
	DECLARE vDated DATE;
	IF NEW.started > NEW.ended THEN
		SET vDated = NEW.started;
		SET NEW.started = NEW.ended;
		SET NEW.ended = vDated;
	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`.`priceFixed_beforeUpdate`
	BEFORE UPDATE ON `priceFixed`
	FOR EACH ROW
BEGIN
	DECLARE vDated DATE;
	IF NEW.started > NEW.ended THEN
		SET vDated = NEW.started;
		SET NEW.started = NEW.ended;
		SET NEW.ended = vDated;
	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 */ ;

--
-- Table structure for table `printQueue`
--

DROP TABLE IF EXISTS `printQueue`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printQueue` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `printerFk` tinyint(3) 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') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'queued',
  `started` datetime DEFAULT NULL,
  `finished` datetime DEFAULT NULL,
  `workerFk` int(11) DEFAULT NULL,
  `error` text COLLATE utf8_unicode_ci,
  `errorNumber` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `statusCode` (`statusCode`),
  KEY `printerFk` (`printerFk`),
  KEY `priorityFk` (`priorityFk`),
  KEY `workerFk` (`workerFk`),
  KEY `printQueue_report` (`reportFk`),
  CONSTRAINT `printQueue_printerFk` 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=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `printQueueArgs`
--

DROP TABLE IF EXISTS `printQueueArgs`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printQueueArgs` (
  `printQueueFk` int(10) unsigned NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  KEY `printQueueArgs_printQueueFk_idx` (`printQueueFk`),
  CONSTRAINT `printQueueArgs_printQueueFk` FOREIGN KEY (`printQueueFk`) REFERENCES `printQueue` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Argumentos que se pasarán al informe para generarlos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `printQueueConfig`
--

DROP TABLE IF EXISTS `printQueueConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printQueueConfig` (
  `networkDrive` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'X:\\',
  `dmsPath` varchar(45) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' \\\\server\\dms',
  `printQueueLimit` int(11) NOT NULL DEFAULT '30' COMMENT 'Número máximo de filas de la cola de impresión  a mostrar al enviar correo a través del evento vn.printQueue_check'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `printServerQueue2__`
--

DROP TABLE IF EXISTS `printServerQueue2__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printServerQueue2__` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `printerFk` tinyint(3) unsigned DEFAULT NULL,
  `priorityFk` tinyint(3) unsigned DEFAULT NULL,
  `reportFk` tinyint(3) unsigned DEFAULT '0',
  `statusFk` tinyint(3) unsigned DEFAULT '1',
  `started` datetime DEFAULT NULL,
  `finished` datetime DEFAULT NULL,
  `param1` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `workerFk` int(11) DEFAULT NULL,
  `param2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `param3` text COLLATE utf8_unicode_ci,
  `error` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Impresora_2` (`printerFk`,`priorityFk`,`reportFk`,`statusFk`,`param1`,`workerFk`,`param2`),
  KEY `Id_estado` (`statusFk`),
  KEY `Id_Impresora` (`printerFk`),
  KEY `Id_Informe` (`reportFk`),
  KEY `Id_Prioridad` (`priorityFk`),
  KEY `Id_Trabajador` (`workerFk`),
  CONSTRAINT `printServerQueue2_FK_1` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`),
  CONSTRAINT `printServerQueue2_FK_2` FOREIGN KEY (`priorityFk`) REFERENCES `queuePriority` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_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` tinyint(3) unsigned NOT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `path` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `modelFk` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `macWifi` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ipAddress` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `reference` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isLabeler` tinyint(1) DEFAULT '0' COMMENT 'Indica si es impresora de etiquetas',
  `sectorFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `printer_UN` (`reference`),
  UNIQUE KEY `printer_UN1` (`macWifi`),
  UNIQUE KEY `printer_UN2` (`name`),
  KEY `printer_FK` (`modelFk`),
  KEY `printer_sectorFk_idx` (`id`,`sectorFk`),
  KEY `printer_sectorFk` (`sectorFk`),
  CONSTRAINT `printer_FK` FOREIGN KEY (`modelFk`) REFERENCES `printerModel` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `printer_sectorFk` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `printerModel`
--

DROP TABLE IF EXISTS `printerModel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printerModel` (
  `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `printingQueueCheck`
--

DROP TABLE IF EXISTS `printingQueueCheck`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `printingQueueCheck` (
  `lastCount` int(11) unsigned NOT NULL DEFAULT '0',
  `lastCheckSum` int(11) unsigned NOT NULL DEFAULT '0',
  `isAlreadyNotified` tinyint(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`lastCount`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Comprueba que el servidor de impresion no esta parado';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `producer`
--

DROP TABLE IF EXISTS `producer`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `producer` (
  `id` mediumint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isVisible` tinyint(1) NOT NULL DEFAULT '1',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`producer_afterInsert`
	AFTER INSERT ON `producer`
	FOR EACH ROW
BEGIN	
	CALL util.debugAdd('producer_insert',CONCAT(NEW.name, NEW.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 producer_beforeDelete
BEFORE DELETE
ON producer FOR EACH ROW
BEGIN
	CALL util.debugAdd('producer_delete',CONCAT(OLD.name, 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 */ ;

--
-- Table structure for table `productionConfig`
--

DROP TABLE IF EXISTS `productionConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `productionConfig` (
  `isPreviousPreparationRequired` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Impide que los sacadores reciban tickets que tengan productos de prep previa',
  `ticketPrintedMax` int(10) unsigned NOT NULL DEFAULT '8' COMMENT 'numero máxido de tickets por carro que se ponen en impreso al pedir colección',
  `ticketTrolleyMax` int(10) unsigned NOT NULL DEFAULT '4' COMMENT 'numero máximo de tickets por carro para asignar baldas en una colección',
  `rookieDays` int(11) NOT NULL DEFAULT '3' COMMENT 'dias en que se cuida con especial cuidado los pedidos de un cliente por ser nuevo o recuperado',
  `notBuyingMonths` int(11) NOT NULL DEFAULT '3' COMMENT 'numero de meses que han de pasar desde su ultima compra para considerar nueva la siguiente compra',
  `id` int(11) NOT NULL DEFAULT '1',
  `isZoneClosedByExpeditionActivated` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'activa el procedimiento vn.zone_getClosed',
  `maxNotReadyCollections` int(11) NOT NULL DEFAULT '5',
  `minTicketsToCloseZone` int(11) DEFAULT '15' COMMENT 'mínimo numero de tickets que deben de tener expediciones para cerrar una zona',
  `movingTicketDelRoute` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Si está activo, al cambiar la fecha de un ticket desde el F11, le quita la ruta',
  `defaultZone` int(11) NOT NULL DEFAULT '697',
  `defautlAgencyMode` int(11) NOT NULL DEFAULT '1328' COMMENT 'SENDING',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Recoge los parámetros que condicionan la producción';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `productionVolume`
--

DROP TABLE IF EXISTS `productionVolume`;
/*!50001 DROP VIEW IF EXISTS `productionVolume`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `productionVolume` (
  `hora` tinyint NOT NULL,
  `minuto` tinyint NOT NULL,
  `cm3` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `productionVolume_LastHour`
--

DROP TABLE IF EXISTS `productionVolume_LastHour`;
/*!50001 DROP VIEW IF EXISTS `productionVolume_LastHour`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `productionVolume_LastHour` (
  `m3` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `professionalCategory`
--

DROP TABLE IF EXISTS `professionalCategory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `professionalCategory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `salary` decimal(10,2) DEFAULT NULL,
  `salaryorSeniority` decimal(10,2) DEFAULT NULL,
  `year` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profile`
--

DROP TABLE IF EXISTS `profile`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `personFk` int(11) DEFAULT NULL,
  `profileTypeFk` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `personFk` (`personFk`),
  KEY `profileTypeFk` (`profileTypeFk`),
  CONSTRAINT `profile_ibfk_1` FOREIGN KEY (`personFk`) REFERENCES `person__` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `profile_ibfk_2` FOREIGN KEY (`profileTypeFk`) REFERENCES `profileType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `profileType`
--

DROP TABLE IF EXISTS `profileType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profileType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `project`
--

DROP TABLE IF EXISTS `project`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `project` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `photo` blob,
  `started` date DEFAULT NULL,
  `finished` date DEFAULT NULL,
  `userFk` int(11) unsigned NOT NULL,
  `departmentFk` int(11) DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `location` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `amount` decimal(15,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `project_FK` (`userFk`),
  KEY `project_FK_1` (`departmentFk`),
  KEY `project_FK_2` (`companyFk`),
  CONSTRAINT `project_FK` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `project_FK_1` FOREIGN KEY (`departmentFk`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `project_FK_2` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla master de proyectos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `projectNotes`
--

DROP TABLE IF EXISTS `projectNotes`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `projectNotes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `txt` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `projectFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `projectNotes_FK` (`projectFk`),
  KEY `projectNotes_FK_1` (`userFk`),
  CONSTRAINT `projectNotes_FK` FOREIGN KEY (`projectFk`) REFERENCES `project` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `projectNotes_FK_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Historico de notas para project';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER projectNotes_BeforeInsert
BEFORE INSERT
ON projectNotes FOR EACH ROW
BEGIN
	
	IF ISNULL(NEW.userFk) THEN
	
		SET NEW.userFk = account.myUser_getId();
	
	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 */ ;

--
-- Table structure for table `property`
--

DROP TABLE IF EXISTS `property`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `property` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `cadaster` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `smallholding` int(11) DEFAULT NULL,
  `area` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `townFk` int(11) NOT NULL,
  `registry` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `volume` int(11) DEFAULT NULL,
  `book` int(11) DEFAULT NULL,
  `page` int(11) DEFAULT NULL,
  `farm` int(11) DEFAULT NULL,
  `registration` int(11) DEFAULT NULL,
  `value` int(11) DEFAULT NULL,
  `propertyGroupFk` int(11) NOT NULL,
  `companyFk` smallint(5) unsigned NOT NULL,
  `photo` blob,
  `allocation` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `m2` decimal(10,2) DEFAULT NULL,
  `tome` int(11) DEFAULT NULL,
  `url` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `protocol` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'numero de protocolo notarial de la escritura de compra venta',
  PRIMARY KEY (`id`),
  KEY `property_FK` (`propertyGroupFk`),
  KEY `property_FK_1` (`townFk`),
  KEY `property_company` (`companyFk`),
  CONSTRAINT `property_FK` FOREIGN KEY (`propertyGroupFk`) REFERENCES `propertyGroup` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `property_FK_1` FOREIGN KEY (`townFk`) REFERENCES `town` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `property_company` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `propertyDms`
--

DROP TABLE IF EXISTS `propertyDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `propertyDms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dmsFk` int(11) NOT NULL,
  `propertyFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `propertyDms_FK` (`dmsFk`),
  KEY `propertyDms_FK_1` (`propertyFk`),
  CONSTRAINT `propertyDms_FK` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `propertyDms_FK_1` FOREIGN KEY (`propertyFk`) REFERENCES `property` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `propertyGroup`
--

DROP TABLE IF EXISTS `propertyGroup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `propertyGroup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `propertyNotes`
--

DROP TABLE IF EXISTS `propertyNotes`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `propertyNotes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `propertyFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `note` text COLLATE utf8_unicode_ci NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `propertyNotes_FK_1` (`userFk`),
  KEY `propertyNotes_FK` (`propertyFk`),
  CONSTRAINT `propertyNotes_FK` FOREIGN KEY (`propertyFk`) REFERENCES `property` (`id`),
  CONSTRAINT `propertyNotes_FK_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `province`
--

DROP TABLE IF EXISTS `province`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `province` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `countryFk` mediumint(8) unsigned NOT NULL,
  `warehouseFk` smallint(6) unsigned DEFAULT NULL COMMENT 'warehouse responsable de las rutas',
  `zoneFk` tinyint(4) DEFAULT NULL,
  `geoFk` int(11) DEFAULT NULL,
  `autonomyFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `Paises_Id` (`countryFk`),
  KEY `warehouse_Id` (`warehouseFk`),
  KEY `provicne_zone_fk_idx` (`zoneFk`),
  KEY `province_FK` (`autonomyFk`),
  CONSTRAINT `province_FK` FOREIGN KEY (`autonomyFk`) REFERENCES `autonomy` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `province_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `province_zone_fk` FOREIGN KEY (`zoneFk`) REFERENCES `vn2008`.`zones` (`zone_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `warehouse_Id` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`province_beforeInsert`
	BEFORE INSERT ON `province`
	FOR EACH ROW
BEGIN
	
    SET NEW.geoFk = zoneGeo_new('province', NEW.`name`,
		(SELECT geoFk FROM autonomy WHERE id = NEW.autonomyFk));
	
	SET NEW.countryFk = (SELECT a.countryFk FROM vn.autonomy a WHERE a.id = NEW.autonomyFk);

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`.`province_beforeUpdate`
	BEFORE UPDATE ON `province`
	FOR EACH ROW
BEGIN 
	
	IF !(OLD.autonomyFk <=> NEW.autonomyFk) THEN
	
		SET NEW.countryFk = (SELECT a.countryFk FROM vn.autonomy a WHERE a.id = NEW.autonomyFk);

	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`.`province_afterUpdate`
	AFTER UPDATE ON `province`
	FOR EACH ROW
BEGIN
	IF !(OLD.autonomyFk <=> NEW.autonomyFk) THEN
		CALL zoneGeo_setParent(NEW.geoFk,
			(SELECT geoFk FROM autonomy WHERE id = NEW.autonomyFk));
	END IF;

	IF !(OLD.`name` <=> NEW.`name`) THEN
		UPDATE zoneGeo SET `name` = NEW.`name`
			WHERE id = NEW.geoFk;
	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`.`province_afterDelete`
	AFTER DELETE ON `province`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_delete(OLD.geoFk); 
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 */ ;

--
-- Table structure for table `punchState`
--

DROP TABLE IF EXISTS `punchState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `punchState` (
  `workerFk` int(11) NOT NULL,
  `state` tinyint(4) DEFAULT '1',
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`workerFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Table for storing punches that have cars with errors';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `queuePriority`
--

DROP TABLE IF EXISTS `queuePriority`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `queuePriority` (
  `id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `priority` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `code` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `rankBonus`
--

DROP TABLE IF EXISTS `rankBonus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `rankBonus` (
  `rank` int(11) DEFAULT NULL,
  `bonus` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `rate`
--

DROP TABLE IF EXISTS `rate`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `rate` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `rate0` double NOT NULL,
  `rate1` double NOT NULL,
  `rate2` double NOT NULL,
  `rate3` double NOT NULL,
  PRIMARY KEY (`id`),
  KEY `tarifa_warehouse` (`warehouseFk`),
  CONSTRAINT `tarifa_warehouse` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `rateConfig`
--

DROP TABLE IF EXISTS `rateConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `rateConfig` (
  `id` int(11) NOT NULL,
  `rate0` int(11) DEFAULT NULL,
  `rate1` int(11) DEFAULT NULL,
  `rate2` int(11) DEFAULT NULL,
  `rate3` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `receipt`
--

DROP TABLE IF EXISTS `receipt`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `receipt` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `invoiceFk` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'nombre incorrecto, renombrar a description',
  `amountPaid` decimal(10,2) NOT NULL DEFAULT '0.00',
  `amountUnpaid__` decimal(10,2) NOT NULL DEFAULT '0.00',
  `payed` datetime DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `bankFk` int(11) DEFAULT '0',
  `clientFk` int(11) DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `isConciliate` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
  PRIMARY KEY (`Id`),
  KEY `Id_Banco` (`bankFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `empresa_id` (`companyFk`),
  KEY `clientDate` (`clientFk`,`payed`),
  KEY `id_factura` (`invoiceFk`),
  KEY `payed` (`payed`),
  CONSTRAINT `receiptWorkerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `receipt_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `receipt_ibfk_2` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `recibo_customer_id` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`receipt_beforeInsert`
	BEFORE INSERT ON `receipt`
	FOR EACH ROW
BEGIN
	DECLARE vIsAutoConciliated BOOLEAN;

	IF NEW.isConciliate = FALSE THEN
		SELECT isAutoConciliated INTO vIsAutoConciliated
			FROM accounting a
				JOIN accountingType at2 ON at2.id = a.accountingTypeFk
			WHERE a.id = NEW.bankFk;
	
		SET NEW.isConciliate = vIsAutoConciliated;
	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`.`receipt_afterInsert`
	AFTER INSERT ON `receipt`
	FOR EACH ROW
CALL clientRisk_update(NEW.clientFk, NEW.companyFk, -NEW.amountPaid) */;;
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`.`receipt_beforeUpdate`
	BEFORE UPDATE ON `receipt`
	FOR EACH ROW
BEGIN
	CALL clientRisk_update(OLD.clientFk, OLD.companyFk, OLD.amountPaid);
	CALL clientRisk_update(NEW.clientFk, NEW.companyFk, -NEW.amountPaid);
	SET NEW.workerFk = account.myUser_getId();
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`.`receipt_afterUpdate`
	AFTER UPDATE ON `receipt`
	FOR EACH ROW
BEGIN
	IF NEW.isConciliate = FALSE AND NEW.payed > OLD.payed THEN
		CALL mail_insert(
			'finanzas@verdnatura.es',
			NULL,
			CONCAT('Cambios de recibos del cliente: ', NEW.clientFk),
            CONCAT('Se ha cambiado el recibo: ', NEW.Id, ' de ', OLD.payed, ' a ', NEW.payed)
        );
	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`.`receipt_beforeDelete`
	BEFORE DELETE ON `receipt`
	FOR EACH ROW
CALL clientRisk_update(OLD.clientFk, OLD.companyFk, OLD.amountPaid) */;;
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 */ ;

--
-- Table structure for table `recipe`
--

DROP TABLE IF EXISTS `recipe`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `recipe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL COMMENT 'bouquet al que hace referencia la receta',
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `size` int(10) unsigned DEFAULT NULL,
  `originFk` tinyint(2) unsigned DEFAULT NULL,
  `typeFk` smallint(5) unsigned DEFAULT NULL,
  `longName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quantity` int(11) NOT NULL DEFAULT '1',
  `element` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `inkFk` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `recipe_ix_1` (`element`),
  KEY `recipe_ix_2` (`itemFk`),
  KEY `recipe_FK` (`inkFk`),
  CONSTRAINT `recipe_FK` FOREIGN KEY (`inkFk`) REFERENCES `ink` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `recipe_log`
--

DROP TABLE IF EXISTS `recipe_log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `recipe_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `recipe_ItemFk` int(11) NOT NULL,
  `element` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `selected_ItemFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `recipe_log_ix1` (`recipe_ItemFk`),
  KEY `recipe_log_ix2` (`element`),
  KEY `recipe_log_ix3` (`selected_ItemFk`),
  CONSTRAINT `recipe_log_FK` FOREIGN KEY (`recipe_ItemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `recipe_log_FK_1` FOREIGN KEY (`selected_ItemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena las decisiones tomadas al generar recetas';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `recovery`
--

DROP TABLE IF EXISTS `recovery`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `recovery` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `started` date NOT NULL COMMENT 'Fecha a partir de la que comienza el recobro',
  `finished` date DEFAULT NULL COMMENT 'Fecha en la que acaba',
  `amount` double NOT NULL,
  `period` tinyint(3) unsigned NOT NULL DEFAULT '7' COMMENT 'numero de dias que indica cada cuanto hare el recobro',
  PRIMARY KEY (`id`),
  KEY `cliente_idx` (`clientFk`),
  CONSTRAINT `cliente333` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `cliente_cliente` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='En esta tabla apuntaremos los acuerdos de recobro semanal a ';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `referenceCurrent`
--

DROP TABLE IF EXISTS `referenceCurrent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `referenceCurrent` (
  `dated` date NOT NULL,
  `value` decimal(10,4) NOT NULL,
  `currencyFk` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`dated`,`currencyFk`),
  KEY `referenceCurrent_currencyFk _idx` (`currencyFk`),
  CONSTRAINT `referenceCurrent_currencyFk ` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `referenceRate`
--

DROP TABLE IF EXISTS `referenceRate`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `referenceRate` (
  `currencyFk` tinyint(3) unsigned NOT NULL,
  `dated` date NOT NULL,
  `value` float unsigned NOT NULL,
  PRIMARY KEY (`currencyFk`,`dated`),
  KEY `date` (`dated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `referenceRateConfig`
--

DROP TABLE IF EXISTS `referenceRateConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `referenceRateConfig` (
  `simulatedValue` float unsigned NOT NULL DEFAULT '1.2309',
  PRIMARY KEY (`simulatedValue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `report`
--

DROP TABLE IF EXISTS `report`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `report` (
  `id` tinyint(3) unsigned NOT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `returnBuckets`
--

DROP TABLE IF EXISTS `returnBuckets`; 
/*!50001 DROP VIEW IF EXISTS `returnBuckets`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `returnBuckets` (
  `id` tinyint NOT NULL,
  `freightContainerType` tinyint NOT NULL,
  `freightPackagingEmpty` tinyint NOT NULL,
  `freightPackagingFull` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `role`
--

DROP TABLE IF EXISTS `role`;
/*!50001 DROP VIEW IF EXISTS `role`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `role` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `hasLogin` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `route`
--

DROP TABLE IF EXISTS `route`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `route` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `created` date NOT NULL,
  `vehicleFk` int(10) unsigned DEFAULT NULL,
  `agencyModeFk` int(11) DEFAULT NULL,
  `time` datetime DEFAULT NULL,
  `isOk` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `kmStart` mediumint(9) DEFAULT NULL,
  `kmEnd` mediumint(9) DEFAULT NULL,
  `started` datetime NOT NULL,
  `finished` datetime NOT NULL,
  `gestdocFk` int(11) DEFAULT NULL,
  `cost` double unsigned DEFAULT NULL,
  `m3` decimal(10,1) unsigned DEFAULT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `zoneFk` int(11) DEFAULT NULL,
  `priority` int(11) NOT NULL DEFAULT '0',
  `invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
  `beachFk` int(11) DEFAULT NULL,
  `commissionWorkCenterFk` int(11) DEFAULT NULL COMMENT 'WorkerCenter que gestiona la ruta',
  PRIMARY KEY (`id`),
  KEY `Id_Agencia` (`agencyModeFk`),
  KEY `Fecha` (`created`),
  KEY `gestdoc_id` (`gestdocFk`),
  KEY `route_ibfk_2_idx` (`workerFk`),
  KEY `fk_route_1_idx` (`zoneFk`),
  KEY `asdfasdf_idx` (`invoiceInFk`),
  KEY `route_idxIsOk` (`isOk`),
  KEY `route_WorkCenterFk_idx` (`commissionWorkCenterFk`),
  CONSTRAINT `fk_route_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `route_WorkCenterFk` FOREIGN KEY (`commissionWorkCenterFk`) REFERENCES `workCenter` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `route_fk5` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `route_ibfk_1` FOREIGN KEY (`gestdocFk`) REFERENCES `dms` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `route_ibfk_2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `route_invoiceInFk` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`route_beforeInsert`
	BEFORE INSERT ON `route`
	FOR EACH ROW
BEGIN
	SET NEW.commissionWorkCenterFk = (
			SELECT IFNULL(wl.workCenterFK, r.defaultWorkCenterFk)
				FROM vn.routeConfig r
					LEFT JOIN vn.workerLabour wl ON wl.workerFk = account.myUser_getId()
						AND NEW.created BETWEEN wl.started AND IFNULL(wl.ended, NEW.created));
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`.`route_beforeUpdate`
	BEFORE UPDATE ON `route`
	FOR EACH ROW
BEGIN
	DECLARE vKmMax INT;
	
	IF NEW.isOk <> FALSE AND OLD.isOk = FALSE THEN
			SET NEW.m3 = ( SELECT SUM(litros)/1000 
								FROM  vn.saleVolume s 
									JOIN vn.ticket t ON s.ticketFk = t.id 
								WHERE t.routeFk = NEW.id);
	END IF;
   
    IF NEW.kmEnd < NEW.kmStart AND NEW.kmEnd <> 0 THEN
        CALL util.throw ('KmEnd menor que kmStart');
    END IF;

	SELECT kmMax INTO vKmMax
		FROM routeConfig rc;

	IF ((NEW.kmEnd - NEW.kmStart) > vKmMax) AND NEW.kmEnd <> 0 THEN
		CALL util.throw (CONCAT('The km can not exceed ', vKmMax));
	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`.`route_afterUpdate`
	AFTER UPDATE ON `route`
	FOR EACH ROW
BEGIN

	IF IFNULL(NEW.gestdocFk,0) <> IFNULL(OLD.gestdocFk,0) AND NEW.gestdocFk > 0 THEN
		-- JGF 09/09/14 cuando se añade un gestdoc a una ruta, se le asigna automagicamente a todos sus Tickets
		
		-- Inserta el gestdoc en todos los tickets de la ruta
		INSERT INTO ticketDms(ticketFk,dmsFk)
			SELECT id, NEW.gestdocFk FROM ticket WHERE routeFk = NEW.id
		ON DUPLICATE KEY UPDATE dmsFk = NEW.gestdocFk;

		-- Update del firmado 
		UPDATE ticket t 
            JOIN ticketDms tg ON t.id = tg.ticketFk 
			SET isSigned = 1  WHERE t.routeFk = NEW.id;
	END IF;

	IF !(NEW.kmStart <=> OLD.kmStart)
		OR !(NEW.kmEnd <=> OLD.kmEnd)
		OR !(NEW.workerFk <=> OLD.workerFk)
		OR !(NEW.m3 <=> OLD.m3)
		OR !(NEW.agencyModeFk <=> OLD.agencyModeFk)THEN
			CALL route_calcCommission(NEW.id);
	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 */ ;

--
-- Table structure for table `routeAction`
--

DROP TABLE IF EXISTS `routeAction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeAction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeCommission`
--

DROP TABLE IF EXISTS `routeCommission`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeCommission` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `routeFk` int(10) unsigned NOT NULL,
  `workCenterFk` int(11) DEFAULT NULL,
  `km` decimal(5,2) DEFAULT NULL,
  `m3` decimal(5,2) DEFAULT NULL,
  `yearlyKm` decimal(5,2) DEFAULT NULL,
  `yearlyM3` decimal(5,2) DEFAULT NULL,
  `cat4m3` decimal(5,2) DEFAULT NULL,
  `cat5m3` decimal(5,2) DEFAULT NULL,
  `freelanceYearlyM3` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `routeCommission_routeFk_idx` (`routeFk`),
  KEY `routeCommission_workCenterFk_idx` (`workCenterFk`),
  CONSTRAINT `routeCommission_routeFk` FOREIGN KEY (`routeFk`) REFERENCES `route` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `routeCommission_workCenterFk` FOREIGN KEY (`workCenterFk`) REFERENCES `workCenter` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeComplement`
--

DROP TABLE IF EXISTS `routeComplement`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeComplement` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `routeActionFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fgn_workerFk_idx` (`workerFk`),
  KEY `fgn_routeActionFk_idx` (`routeActionFk`),
  CONSTRAINT `fgn_routeActionFk` FOREIGN KEY (`routeActionFk`) REFERENCES `routeAction` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fgn_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeConfig`
--

DROP TABLE IF EXISTS `routeConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeConfig` (
  `id` int(10) unsigned NOT NULL,
  `kmRate` decimal(10,4) DEFAULT NULL,
  `kmTruckRate` decimal(10,4) DEFAULT NULL,
  `m3Distribution` decimal(10,4) DEFAULT NULL,
  `m3Management` decimal(10,2) DEFAULT NULL,
  `m3Palletization` decimal(10,2) DEFAULT NULL,
  `load1m3` decimal(10,4) DEFAULT NULL,
  `load2m3` decimal(10,4) DEFAULT NULL,
  `load3m3` decimal(10,4) DEFAULT NULL,
  `load4m3` decimal(10,4) DEFAULT NULL,
  `load5m3` decimal(10,4) DEFAULT NULL,
  `load6m3` decimal(10,4) DEFAULT NULL,
  `rateHoliday` decimal(5,2) DEFAULT NULL,
  `plusCategory1` decimal(5,2) DEFAULT NULL,
  `plusCategory2` decimal(5,2) DEFAULT NULL,
  `maxSalaryCategory1` decimal(6,2) DEFAULT NULL,
  `maxSalaryCategory2` decimal(6,2) DEFAULT NULL,
  `distributionM3Category1` decimal(5,2) DEFAULT NULL,
  `distributionM3Category2` decimal(5,2) DEFAULT NULL,
  `plusCategory1Concept` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `plusCategory2Concept` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `defaultCompanyFk` smallint(5) unsigned DEFAULT '442',
  `kmHeavy` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por kilometro vehículo pesado',
  `kmLight` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por kilometro vehículo ligero',
  `kmYearly` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por kilometro objetivo anual',
  `m3Yearly` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por m3 objetivo anual',
  `deliveryM3Cat4` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por m3 repartido Cat.IV',
  `deliveryM3Cat5` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por m3 repartido Cat. V',
  `plusCat2Fixed` decimal(5,2) DEFAULT NULL COMMENT 'Plus fijo Cat.II vehículo ligero',
  `plusCat2Variable` decimal(5,2) DEFAULT NULL COMMENT 'Plus variable Cat.II vehículo ligero',
  `plusCat3Fixed` decimal(5,2) DEFAULT NULL COMMENT 'Plus fijo Cat.III vehículo pesado',
  `plusCat3Variable` decimal(5,2) DEFAULT NULL COMMENT 'Plus variable Cat.III vehículo pesado',
  `distributionCat4M3` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por gestión de la distribución Cat IV',
  `distributionCat5M3` decimal(5,2) DEFAULT NULL COMMENT 'Comisión por gestión de la distribución Cat V',
  `rateCat4` decimal(5,2) DEFAULT NULL COMMENT 'Ratio aplicado a la media de venta de los repartidores para el cálculo de las comisiones de enrutadores Cat IV',
  `rateCat5` decimal(5,2) DEFAULT NULL COMMENT 'Ratio aplicado a la media de venta de los repartidores para el cálculo de las comisiones de enrutadores Cat V',
  `freelanceM3` decimal(5,2) DEFAULT NULL COMMENT 'Comisión para enrutadores sobre rutas de autónomos',
  `freelanceMinM3` decimal(5,2) DEFAULT NULL COMMENT 'Metros mínimos para considerar las rutas de autónomos',
  `mainlineDelivered` decimal(5,2) DEFAULT NULL COMMENT 'Comisión para entregas troncales',
  `cutoffDated` date DEFAULT NULL COMMENT 'Fecha a partir de la cual se autoriza calcular la comisión',
  `defaultWorkCenterFk` int(11) DEFAULT '9' COMMENT 'Para el cálculo de las comisiones, en caso de el creador de la ruta no tenga workCenter',
  `kmMax` int(11) DEFAULT '4000' COMMENT 'Máximo número de km validos para una ruta',
  PRIMARY KEY (`id`),
  KEY `routeConfig_FK` (`defaultCompanyFk`),
  CONSTRAINT `routeConfig_FK` FOREIGN KEY (`defaultCompanyFk`) REFERENCES `company` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeGate__`
--

DROP TABLE IF EXISTS `routeGate__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeGate__` (
  `deviceId` varchar(30) CHARACTER SET utf8 NOT NULL,
  `displayText` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `status` set('idle','doing','done','') CHARACTER SET utf8 DEFAULT 'idle',
  `gateAreaFk` int(11) NOT NULL DEFAULT '1',
  `routeFk` int(11) NOT NULL,
  `freeTickets` int(11) DEFAULT NULL,
  `expeditions` int(11) DEFAULT NULL,
  `scanned` int(11) DEFAULT NULL,
  `flag` blob,
  `pallets` int(11) DEFAULT NULL,
  `lastScanned` datetime DEFAULT NULL,
  `ready` tinyint(4) NOT NULL DEFAULT '0',
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
  UNIQUE KEY `routeFk_UNIQUE` (`routeFk`),
  KEY `routeGate_fk1_idx` (`gateAreaFk`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`routeGateBeforeUpdate`
	BEFORE UPDATE ON `routeGate__` FOR EACH ROW
BEGIN
	IF (NOT (NEW.expeditions <=> OLD.expeditions)
		OR NOT (NEW.scanned <=> OLD.scanned))
		AND NEW.status <=> OLD.status
	THEN
		IF NEW.expeditions = 0
        THEN
			SET NEW.status = 'idle';
		ELSEIF NEW.expeditions = NEW.scanned
        THEN
			SET NEW.status = 'done';
        ELSE
			SET NEW.status = 'doing';
        END IF;
	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 */ ;

--
-- Table structure for table `routeLoadWorker`
--

DROP TABLE IF EXISTS `routeLoadWorker`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeLoadWorker` (
  `routeFk` int(10) unsigned NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`routeFk`,`workerFk`),
  KEY `frmWorker_idx` (`workerFk`),
  CONSTRAINT `frmRutas` FOREIGN KEY (`routeFk`) REFERENCES `route` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `frmWorker` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeLog`
--

DROP TABLE IF EXISTS `routeLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `routeLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `route` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `routeLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeRecalc`
--

DROP TABLE IF EXISTS `routeRecalc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeRecalc` (
  `routeFk` int(11) NOT NULL,
  PRIMARY KEY (`routeFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Queue of changed volume to recalc route volumen';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routeUserPercentage`
--

DROP TABLE IF EXISTS `routeUserPercentage`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routeUserPercentage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `percentage` decimal(10,2) NOT NULL,
  `dated` date NOT NULL,
  PRIMARY KEY (`id`),
  KEY `routeUserPercentageFk_idx` (`workerFk`),
  CONSTRAINT `routeUserPercentageFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `routesMonitor`
--

DROP TABLE IF EXISTS `routesMonitor`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `routesMonitor` (
  `routeFk` int(10) unsigned NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `beachFk` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ticketPacked` int(11) DEFAULT NULL,
  `ticketFree` int(11) DEFAULT NULL,
  `ticketProduction` int(11) DEFAULT NULL,
  `packages` int(11) DEFAULT NULL,
  `note` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dated` date DEFAULT NULL,
  `dockFk` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `m3` decimal(10,1) DEFAULT NULL,
  `priority` int(11) NOT NULL DEFAULT '0',
  `etd` time DEFAULT NULL,
  `expeditionTruckFk` int(11) DEFAULT NULL,
  `m3boxes` decimal(10,1) DEFAULT NULL,
  `bufferFk` int(11) DEFAULT NULL COMMENT 'Buffer del sorter por el que se quiere sacar esa ruta',
  `isPickingAllowed` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Los tickets de esta ruta se pueden preparar',
  PRIMARY KEY (`routeFk`),
  KEY `routesMonitor_FK` (`bufferFk`),
  KEY `routesMonitor_FK_2` (`beachFk`),
  KEY `routesMonitor_FK_1` (`dockFk`),
  CONSTRAINT `routesMonitor_FK` FOREIGN KEY (`bufferFk`) REFERENCES `srt`.`buffer` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `routesMonitor_FK_1` FOREIGN KEY (`dockFk`) REFERENCES `dock` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `routesMonitor_FK_2` FOREIGN KEY (`beachFk`) REFERENCES `beach` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `routesReduced`
--

DROP TABLE IF EXISTS `routesReduced`;
/*!50001 DROP VIEW IF EXISTS `routesReduced`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `routesReduced` (
  `description` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `ETD` tinyint NOT NULL,
  `bufferFk` tinyint NOT NULL,
  `beachFk` tinyint NOT NULL,
  `itempackingTypeFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `sale`
--

DROP TABLE IF EXISTS `sale`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sale` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemFk` int(11) NOT NULL,
  `ticketFk` int(11) NOT NULL,
  `concept` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quantity` decimal(10,2) NOT NULL DEFAULT '0.00',
  `originalQuantity` double(9,1) DEFAULT NULL,
  `price` decimal(10,2) DEFAULT '0.00',
  `discount` tinyint(2) unsigned NOT NULL DEFAULT '0',
  `priceFixed` decimal(10,2) NOT NULL DEFAULT '0.00',
  `reserved` tinyint(1) NOT NULL DEFAULT '0',
  `isPicked` tinyint(1) NOT NULL DEFAULT '0',
  `isPriceFixed` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `isAdded` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `Id_Ticket` (`ticketFk`),
  KEY `itemFk_ticketFk` (`itemFk`,`ticketFk`),
  CONSTRAINT `movement_ticket_id` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sale_ibfk_1` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`sale_afterInsert`
	AFTER INSERT ON `sale`
	FOR EACH ROW
BEGIN
	
	IF (SELECT COUNT(*) from item i WHERE id = NEW.itemFk AND family = 'SER') THEN
		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
			JOIN vn.item i ON i.id = NEW.itemFk 
							AND (c.itemPackingTypeFk = i.itemPackingTypeFk 
								OR ISNULL(c.itemPackingTypeFk))
			SET c.saleTotalCount = c.saleTotalCount + 1;
	
		INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
			SELECT r.id 
				FROM  vn.sale s
					JOIN vn.ticket t ON t.id = s.ticketFk
					JOIN vn.route r ON r.id = t.routeFk
				WHERE r.isOk = FALSE 
					AND s.id = NEW.id
					AND r.created >= CURDATE()
				GROUP BY r.id;
	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`.`sale_beforeUpdate`
	BEFORE UPDATE ON `sale`
	FOR EACH ROW
BEGIN
/*		
	IF (SELECT COUNT(*) from item i WHERE id = NEW.itemFk AND family = 'SER') THEN
		CALL util.throw('Cannot insert a service item into a ticket');
	END IF;
*/
	IF NEW.discount > 100 THEN
		SET NEW.discount = 0;
	END IF;

	IF old.discount > 0 AND  NEW.discount = 0 THEN
        INSERT INTO ticketLog
		SET originFk = NEW.ticketFk, userFk = account.myUser_getId(), `action` = 'insert', 
			description = CONCAT('Cambio de descuento del item :', ' ', new.itemFk, ' de ', old.discount ,' a 0 ');
	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`.`sale_afterUpdate`
	AFTER UPDATE ON `sale`
	FOR EACH ROW
BEGIN
	DECLARE  vIsToSendMail BOOL;
	DECLARE vPickedLines INT;
	DECLARE vCollectionFk INT;
	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;
	END IF;
	
	SELECT account.myUser_getName() INTO vUserRole;
	SELECT account.user_getMysqlRole(vUserRole) INTO vUserRole;

	IF !(OLD.quantity <=> NEW.quantity) THEN
		SELECT COUNT(*) INTO vIsToSendMail 
			FROM vncontrol.inter i
				JOIN vn.state s ON s.id = i.state_id
			WHERE s.code='PACKED' 
				AND i.Id_Ticket = OLD.ticketFk
				AND vUserRole IN ('salesPerson', 'salesBoss')
			LIMIT 1;
		    
		IF vIsToSendMail THEN 
			CALL vn.mail_insert('jefesventas@verdnatura.es',
								'noreply@verdnatura.es',
								CONCAT('Ticket ', OLD.ticketFk ,' modificada cantidad tras encajado'),
								CONCAT('Ticket <a href="https://salix.verdnatura.es/#!/ticket/', OLD.ticketFk ,'/log">', OLD.ticketFk ,'</a>. <br>',
									'Modificada la catidad de ', OLD.quantity, ' a ' , NEW.quantity, 
									' del artículo ', OLD.itemFk, ' tras estado encajado del ticket. <br>',
									'Este email se ha generado automáticamente' )
								);
		END IF; 
		IF (OLD.quantity > NEW.quantity) THEN
			INSERT INTO saleComponent(saleFk, componentFk, value)
				SELECT NEW.id, cm.id, sc.value 
					FROM saleComponent sc
		                    JOIN component cd ON cd.id = sc.componentFk
		                    JOIN component cm ON cm.code = 'mana'
		                WHERE saleFk = NEW.id AND cd.code = 'lastUnitsDiscount'
	            ON DUPLICATE KEY UPDATE value = sc.value + VALUES(value);
	           
			DELETE sc.* 
				FROM vn.saleComponent sc
	                JOIN component c ON c.id = sc.componentFk
	            WHERE saleFk = NEW.id AND c.code = 'lastUnitsDiscount';
		END IF;	
    	INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
			SELECT r.id 
				FROM  vn.sale s
					JOIN vn.ticket t ON t.id = s.ticketFk
					JOIN vn.route r ON r.id = t.routeFk
				WHERE r.isOk = FALSE 
					AND s.id = NEW.id
					AND r.created >= CURDATE()
				GROUP BY r.id;
	END IF;

	IF !(ABS(NEW.isPicked) <=> ABS(OLD.isPicked)) AND NEW.quantity > 0 THEN
	
		UPDATE vn.collection c
			JOIN vn.ticketCollection tc ON tc.collectionFk = c.id AND tc.ticketFk = NEW.ticketFk
			SET c.salePickedCount = c.salePickedCount + IF(NEW.isPicked != 0, 1, -1);
		
	END IF;

	IF !(NEW.quantity <=> OLD.quantity) AND (NEW.quantity = 0 OR OLD.quantity = 0) THEN
	
		UPDATE vn.collection c
			JOIN vn.ticketCollection tc ON tc.collectionFk = c.id AND tc.ticketFk = NEW.ticketFk
			SET c.saleTotalCount = c.saleTotalCount + IF(OLD.quantity = 0, 1, -1);
		
	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`.`sale_BEFORE_DELETE`
	BEFORE DELETE ON `sale`
	FOR EACH ROW
BEGIN
	IF OLD.quantity > 0 THEN
		INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`)
			SELECT r.id 
				FROM  vn.sale s
					JOIN vn.ticket t ON t.id = s.ticketFk
					JOIN vn.route r ON r.id = t.routeFk
				WHERE r.isOk = FALSE 
					AND s.id = OLD.id
					AND r.created >= CURDATE()
				GROUP BY r.id;
	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`.`sale_afterDelete`
	AFTER DELETE ON `sale`
	FOR EACH ROW
BEGIN	
	DECLARE vIsToSendMail BOOL;
	DECLARE vUserRole VARCHAR(255);
   
	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;

	SELECT COUNT(*) INTO vIsToSendMail 
		FROM vncontrol.inter i
			JOIN vn.state s ON s.id = i.state_id
		WHERE s.code='PACKED' 
			AND i.Id_Ticket = OLD.ticketFk
			AND vUserRole IN ('salesPerson', 'salesBoss')
	    LIMIT 1;

	IF vIsToSendMail THEN 
		CALL vn.mail_insert('jefesventas@verdnatura.es',
							'noreply@verdnatura.es',
							CONCAT('Ticket ', OLD.ticketFk ,' eliminado artículo tras encajado' ),
							CONCAT('Ticket <a href="https://salix.verdnatura.es/#!/ticket/', OLD.ticketFk ,'/log">', OLD.ticketFk ,'</a>. <br>',
								'Eliminado artículo ', OLD.itemFk, ' tras estado encajado del ticket. <br> Este email se ha generado automáticamente' )
								);
	END IF;    
	   
   	IF OLD.quantity > 0 THEN
	
		UPDATE vn.collection c
			JOIN vn.ticketCollection tc ON tc.collectionFk = c.id AND tc.ticketFk = OLD.ticketFk
			JOIN vn.item i ON i.id = OLD.itemFk 
				AND (c.itemPackingTypeFk = i.itemPackingTypeFk 
					OR ISNULL(c.itemPackingTypeFk))
			SET c.saleTotalCount = c.saleTotalCount - 1,
				c.salePickedCount = c.salePickedCount - ABS(OLD.isPicked);
		
	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 */ ;

--
-- Table structure for table `saleBuy`
--

DROP TABLE IF EXISTS `saleBuy`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleBuy` (
  `saleFk` int(11) NOT NULL,
  `buyFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `workerFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`saleFk`),
  KEY `saleBuy_FK` (`buyFk`),
  CONSTRAINT `saleBuy_FK` FOREIGN KEY (`buyFk`) REFERENCES `buy` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleBuy_FK_1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`BEFORE_INSERT`
	BEFORE INSERT ON `saleBuy`
	FOR EACH ROW
BEGIN 
		
		SET NEW.workerFk = vn.getUser();
	
	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`.`saleBuy_AI`
	AFTER INSERT ON `saleBuy`
	FOR EACH ROW
BEGIN 
/* Activar de nuevo cuando volvamos a vender fruta y verdura
 * 
	UPDATE vn.sale s
		SET s.concept = CONCAT(s.concept, ' Lote: ', NEW.buyFk)
		WHERE s.id = NEW.saleFk;
*/	
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 */ ;

--
-- Table structure for table `saleChecked`
--

DROP TABLE IF EXISTS `saleChecked`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleChecked` (
  `saleFk` int(11) NOT NULL,
  `isChecked` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`saleFk`),
  CONSTRAINT `fk_Movimientos_checked_1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleCloned`
--

DROP TABLE IF EXISTS `saleCloned`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleCloned` (
  `saleClonedFk` int(11) NOT NULL,
  `saleOriginalFk` int(11) NOT NULL,
  PRIMARY KEY (`saleClonedFk`),
  KEY `saleOriginalFk_idx` (`saleOriginalFk`),
  CONSTRAINT `saleClonedFk_fk2` FOREIGN KEY (`saleClonedFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleOriginalFk_fk1` FOREIGN KEY (`saleOriginalFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleComponent`
--

DROP TABLE IF EXISTS `saleComponent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleComponent` (
  `saleFk` int(11) NOT NULL,
  `componentFk` int(11) NOT NULL,
  `value` double NOT NULL,
  `isGreuge` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Indica si ya se ha tenido en cuenta para calcular el greuge',
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`saleFk`,`componentFk`),
  KEY `fk_mov_comp_idx` (`componentFk`),
  CONSTRAINT `mc_fk1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `mc_fk2` FOREIGN KEY (`componentFk`) REFERENCES `component` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `saleCost`
--

DROP TABLE IF EXISTS `saleCost`;
/*!50001 DROP VIEW IF EXISTS `saleCost`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleCost` (
  `itemFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `discount` tinyint NOT NULL,
  `price` tinyint NOT NULL,
  `component` tinyint NOT NULL,
  `coste` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `saleGoal`
--

DROP TABLE IF EXISTS `saleGoal`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleGoal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `month` int(11) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  `rank` smallint(6) NOT NULL,
  `walletWeightFrom` int(11) NOT NULL,
  `walletWeightTo` int(11) DEFAULT NULL,
  `goal` decimal(10,2) DEFAULT NULL,
  `goalType` smallint(6) DEFAULT NULL COMMENT 'grado',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleGroup`
--

DROP TABLE IF EXISTS `saleGroup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleGroup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(11) DEFAULT NULL,
  `parkingFk` int(11) DEFAULT NULL,
  `sectorFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='agrupa lineas de venta';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleGroupDetail`
--

DROP TABLE IF EXISTS `saleGroupDetail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleGroupDetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `saleFk` int(11) NOT NULL,
  `saleGroupFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `saleGroupDetail_FK` (`saleFk`),
  KEY `saleGroupDetail_FK_1` (`saleGroupFk`),
  CONSTRAINT `saleGroupDetail_FK` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleGroupDetail_FK_1` FOREIGN KEY (`saleGroupFk`) REFERENCES `saleGroup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='relaciona sale y saleGroup';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleItemShelving__`
--

DROP TABLE IF EXISTS `saleItemShelving__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleItemShelving__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `saleFk` int(11) NOT NULL,
  `itemShelvingFk` int(10) unsigned NOT NULL,
  `quantity` int(11) NOT NULL DEFAULT '0',
  `isPicked` tinyint(4) NOT NULL DEFAULT '0',
  `ubication` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `saleItemShelving_fk1_idx` (`itemShelvingFk`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `saleLabel`
--

DROP TABLE IF EXISTS `saleLabel`;
/*!50001 DROP VIEW IF EXISTS `saleLabel`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleLabel` (
  `saleFk` tinyint NOT NULL,
  `label` tinyint NOT NULL,
  `stem` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `saleMistake`
--

DROP TABLE IF EXISTS `saleMistake`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleMistake` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `saleFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL COMMENT 'Controlador',
  `typeFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `saleMistake_fk1_idx` (`saleFk`),
  KEY `saleMistake_fk2_idx` (`userFk`),
  KEY `saleMistake_fk3_idx` (`typeFk`),
  CONSTRAINT `saleMistake_fk1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleMistake_fk2` FOREIGN KEY (`userFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleMistake_fk3` FOREIGN KEY (`typeFk`) REFERENCES `mistakeType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `saleMistakeList`
--

DROP TABLE IF EXISTS `saleMistakeList`;
/*!50001 DROP VIEW IF EXISTS `saleMistakeList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleMistakeList` (
  `saleFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `sacador` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `revisador` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `controlled` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `saleMistake_list__2`
--

DROP TABLE IF EXISTS `saleMistake_list__2`;
/*!50001 DROP VIEW IF EXISTS `saleMistake_list__2`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleMistake_list__2` (
  `saleFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `sacador` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `revisador` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  `controlled` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `saleParking__`
--

DROP TABLE IF EXISTS `saleParking__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleParking__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `saleFk` int(11) NOT NULL,
  `parkingFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `saleParking_FK` (`saleFk`),
  KEY `saleParking_FK_1` (`parkingFk`),
  CONSTRAINT `saleParking_FK` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleParking_FK_1` FOREIGN KEY (`parkingFk`) REFERENCES `parking` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ubica las lineas de venta preparadas previamente';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `saleSaleTracking`
--

DROP TABLE IF EXISTS `saleSaleTracking`;
/*!50001 DROP VIEW IF EXISTS `saleSaleTracking`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleSaleTracking` (
  `saleFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `saleState`
--

DROP TABLE IF EXISTS `saleState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleState` (
  `saleFk` int(11) NOT NULL,
  `stateFk` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`saleFk`),
  KEY `saleState_fk2_idx` (`stateFk`),
  CONSTRAINT `saleState_fk1` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleState_fk2` FOREIGN KEY (`stateFk`) REFERENCES `state` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='cahce para el estado de la linea';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `saleTracking`
--

DROP TABLE IF EXISTS `saleTracking`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `saleTracking` (
  `saleFk` int(11) NOT NULL,
  `isChecked` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `originalQuantity` double DEFAULT NULL,
  `workerFk` int(11) NOT NULL,
  `actionFk` int(11) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stateFk` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `saleTracking_UN` (`saleFk`,`workerFk`,`actionFk`,`stateFk`),
  KEY `Id_Movimiento` (`saleFk`),
  KEY `fgnStateFk_idx` (`stateFk`),
  KEY `saleTracking_idx5` (`created`),
  KEY `saleTracking_fk2_idx` (`actionFk`),
  CONSTRAINT `fgnStateFk` FOREIGN KEY (`stateFk`) REFERENCES `state` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `saleTracking_FK` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `saleTracking_FK_1` FOREIGN KEY (`actionFk`) REFERENCES `vncontrol`.`accion` (`accion_id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`saleTracking_beforeInsert`
	BEFORE INSERT ON `saleTracking`
	FOR EACH ROW
BEGIN
	IF(NEW.stateFk = 14) THEN
		SET NEW.actionFk = 3;
	END IF;

	IF(NEW.stateFk = 8) THEN
		SET NEW.actionFk = 4;
	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`.`saleTracking_After_Insert`
	AFTER INSERT ON `saleTracking`
	FOR EACH ROW
BEGIN
	
	IF NEW.isChecked THEN 
	
		UPDATE vn.sale s
			SET s.isPicked = TRUE 
			WHERE s.id = NEW.saleFk
				AND s.isPicked = 0;
	
	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 */ ;

--
-- Temporary table structure for view `saleValue`
--

DROP TABLE IF EXISTS `saleValue`;
/*!50001 DROP VIEW IF EXISTS `saleValue`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleValue` (
  `warehouse` tinyint NOT NULL,
  `client` tinyint NOT NULL,
  `clientTypeFk` tinyint NOT NULL,
  `buyer` tinyint NOT NULL,
  `itemTypeFk` tinyint NOT NULL,
  `family` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `cost` tinyint NOT NULL,
  `value` tinyint NOT NULL,
  `year` tinyint NOT NULL,
  `week` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `saleVolume`
--

DROP TABLE IF EXISTS `saleVolume`;
/*!50001 DROP VIEW IF EXISTS `saleVolume`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleVolume` (
  `ticketFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL,
  `litros` tinyint NOT NULL,
  `routeFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `volume` tinyint NOT NULL,
  `physicalWeight` tinyint NOT NULL,
  `weight` tinyint NOT NULL,
  `physicalVolume` tinyint NOT NULL,
  `freight` tinyint NOT NULL,
  `zoneFk` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL,
  `eurosValue` tinyint NOT NULL,
  `itemPackingTypeFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `saleVolume_Today_VNH`
--

DROP TABLE IF EXISTS `saleVolume_Today_VNH`;
/*!50001 DROP VIEW IF EXISTS `saleVolume_Today_VNH`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `saleVolume_Today_VNH` (
  `Cliente` tinyint NOT NULL,
  `Provincia` tinyint NOT NULL,
  `Pais` tinyint NOT NULL,
  `volume` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `sale_freightComponent`
--

DROP TABLE IF EXISTS `sale_freightComponent`;
/*!50001 DROP VIEW IF EXISTS `sale_freightComponent`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `sale_freightComponent` (
  `ticketFk` tinyint NOT NULL,
  `amount` tinyint NOT NULL,
  `shipped` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `salesPersonGoal`
--

DROP TABLE IF EXISTS `salesPersonGoal`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salesPersonGoal` (
  `salesPersonName` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `month` int(11) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  `goal` int(11) DEFAULT NULL,
  PRIMARY KEY (`salesPersonName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `salesPersonSince`
--

DROP TABLE IF EXISTS `salesPersonSince`;
/*!50001 DROP VIEW IF EXISTS `salesPersonSince`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `salesPersonSince` (
  `workerFk` tinyint NOT NULL,
  `started` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `salesPreparedLastHour`
--

DROP TABLE IF EXISTS `salesPreparedLastHour`;
/*!50001 DROP VIEW IF EXISTS `salesPreparedLastHour`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `salesPreparedLastHour` (
  `warehouseFk` tinyint NOT NULL,
  `saleFk` tinyint NOT NULL,
  `isChecked` tinyint NOT NULL,
  `originalQuantity` tinyint NOT NULL,
  `accion` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `firstname` tinyint NOT NULL,
  `lastName` tinyint NOT NULL,
  `workerCode` tinyint NOT NULL,
  `litros` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `departmentName` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `salesPreviousPreparated`
--

DROP TABLE IF EXISTS `salesPreviousPreparated`;
/*!50001 DROP VIEW IF EXISTS `salesPreviousPreparated`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `salesPreviousPreparated` (
  `saleFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `sample`
--

DROP TABLE IF EXISTS `sample`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sample` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(25) CHARACTER SET utf8 NOT NULL,
  `description` varchar(105) COLLATE utf8_unicode_ci NOT NULL,
  `isVisible` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `hasCompany` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `hasPreview` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `datepickerEnabled` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sector`
--

DROP TABLE IF EXISTS `sector`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sector` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '1',
  `isPreviousPreparedByPacking` tinyint(4) NOT NULL DEFAULT '1',
  `code` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pickingPlacement__` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `path__` int(11) DEFAULT NULL,
  `isPreviousPrepared` tinyint(1) NOT NULL DEFAULT '0',
  `isPackagingArea` tinyint(1) NOT NULL DEFAULT '0',
  `reportFk` tinyint(3) unsigned DEFAULT NULL,
  `sonFk` int(11) DEFAULT NULL,
  `isMain` tinyint(1) NOT NULL DEFAULT '0',
  `itemPackingTypeFk` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `workerFk` int(11) DEFAULT NULL,
  `labelReport__` tinyint(3) DEFAULT NULL,
  `printerFk` tinyint(3) unsigned 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',
  PRIMARY KEY (`id`,`warehouseFk`),
  UNIQUE KEY `code_UNIQUE` (`code`),
  KEY `sector_fk1_idx` (`warehouseFk`),
  KEY `sector_report` (`reportFk`),
  KEY `sector_FK` (`sonFk`,`warehouseFk`),
  CONSTRAINT `sector_FK` FOREIGN KEY (`sonFk`, `warehouseFk`) REFERENCES `sector` (`id`, `warehouseFk`) 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=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sectorCollection`
--

DROP TABLE IF EXISTS `sectorCollection`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sectorCollection` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(10) unsigned NOT NULL,
  `sectorFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `sectorCollection_FK` (`userFk`),
  KEY `sectorCollection_FK_2` (`sectorFk`),
  CONSTRAINT `sectorCollection_FK` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sectorCollection_FK_1` FOREIGN KEY (`sectorFk`) REFERENCES `sector` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Las lineas de preparacion de pedidos por sectores se agrupan bajo el identificador de esta tabla';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sectorCollectionSaleGroup`
--

DROP TABLE IF EXISTS `sectorCollectionSaleGroup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sectorCollectionSaleGroup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `sectorCollectionFk` int(11) NOT NULL,
  `saleGroupFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `sectorCollectionSaleGroup_UN` (`sectorCollectionFk`,`saleGroupFk`),
  KEY `sectorCollectionSaleGroup_FK_1` (`saleGroupFk`),
  CONSTRAINT `sectorCollectionSaleGroup_FK` FOREIGN KEY (`sectorCollectionFk`) REFERENCES `sectorCollection` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sectorCollectionSaleGroup_FK_1` FOREIGN KEY (`saleGroupFk`) REFERENCES `saleGroup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Relaciona las lineas de venta con la coleccion del sector';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sectorProductivity`
--

DROP TABLE IF EXISTS `sectorProductivity`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sectorProductivity` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(11) DEFAULT NULL,
  `firstName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `sector` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ticketCount` int(11) DEFAULT NULL,
  `saleCount` int(11) DEFAULT NULL,
  `error` int(11) DEFAULT NULL,
  `volume` decimal(10,6) DEFAULT NULL,
  `hourWorked` decimal(10,2) DEFAULT NULL,
  `dated` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sharingCart`
--

DROP TABLE IF EXISTS `sharingCart`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sharingCart` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `started` date NOT NULL,
  `ended` date NOT NULL,
  `workerSubstitute` int(10) unsigned NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `workerFk_UNIQUE` (`workerFk`,`started`,`ended`,`workerSubstitute`),
  KEY `Suplent` (`workerSubstitute`),
  CONSTRAINT `Suplent_key` FOREIGN KEY (`workerSubstitute`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `Trabajador_key` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`sharingCart_beforeInsert`
	BEFORE INSERT ON `sharingCart`
	FOR EACH ROW
BEGIN
	IF NEW.workerFk = NEW.workerSubstitute THEN
		CALL util.throw ('worker and workerSubstitute must be different');
	ELSE
		 INSERT IGNORE INTO sharingCartDaily (ownerFk, substituteFk, dated) 
			SELECT NEW.workerFk, NEW.workerSubstitute, dated 
				FROM time 
                WHERE dated BETWEEN NEW.started AND NEW.ended;
    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`.`sharingCart_beforeUpdate`
	BEFORE UPDATE ON `sharingCart`
	FOR EACH ROW
BEGIN
	IF NEW.workerFk = NEW.workerSubstitute THEN
		CALL util.throw ('worker and workerSubstitute must be different');
	ELSE
		DELETE sc FROM sharingCartDaily sc  
			WHERE sc.dated BETWEEN OLD.started AND OLD.ended AND 
				  sc.ownerFk = OLD.workerFk AND 
				  sc.substituteFk = OLD.workerSubstitute;
                  
        INSERT IGNORE INTO sharingCartDaily (ownerFk, substituteFk, dated) 
			SELECT NEW.workerFk, NEW.workerSubstitute, dated 
				FROM time 
                WHERE dated BETWEEN NEW.started AND NEW.ended;

    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`.`sharingCart_beforeDelete`
	BEFORE DELETE ON `sharingCart`
	FOR EACH ROW
BEGIN
	DELETE sc FROM sharingCartDaily sc  
		WHERE sc.dated BETWEEN OLD.started AND OLD.ended AND 
			  sc.ownerFk = OLD.workerFk AND 
			  sc.substituteFk = OLD.workerSubstitute;
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 */ ;

--
-- Table structure for table `sharingCartDaily`
--

DROP TABLE IF EXISTS `sharingCartDaily`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sharingCartDaily` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ownerFk` int(10) unsigned NOT NULL,
  `substituteFk` int(10) unsigned NOT NULL,
  `dated` date NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `sharingCartDailyWorker_idx` (`ownerFk`,`dated`),
  KEY `sharingCartDailySubstitute_idx` (`substituteFk`),
  CONSTRAINT `sharingCartDailySubstitute` FOREIGN KEY (`substituteFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sharingCartDailyWorker` FOREIGN KEY (`ownerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='para calcular las comisiones de las sustituciones de los comerciales';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sharingClient`
--

DROP TABLE IF EXISTS `sharingClient`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sharingClient` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `started` date NOT NULL,
  `ended` date NOT NULL,
  `clientFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `Worker` (`workerFk`),
  KEY `Client` (`clientFk`),
  CONSTRAINT `Clients_key` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `Trabajadores_key` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`sharingClient_beforeInsert`
	BEFORE INSERT ON `sharingClient`
	FOR EACH ROW
BEGIN
	SET NEW.ended = GREATEST(CURDATE(),NEW.ended);
	SET NEW.started = GREATEST(CURDATE(),NEW.started);
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`.`sharingClient_beforeUpdate`
	BEFORE UPDATE ON `sharingClient`
	FOR EACH ROW
BEGIN
	SET NEW.ended = GREATEST(CURDATE(),NEW.ended);
	SET NEW.started = GREATEST(CURDATE(),NEW.started);
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 */ ;

--
-- Table structure for table `shelving`
--

DROP TABLE IF EXISTS `shelving`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shelving` (
  `code` varchar(10) CHARACTER SET utf8 NOT NULL,
  `parkingFk` int(11) DEFAULT NULL,
  `isPrinted` tinyint(4) NOT NULL DEFAULT '0',
  `priority` int(11) NOT NULL DEFAULT '0',
  `parked` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `userFk` int(10) unsigned DEFAULT NULL,
  `isSpam` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'señala las matrículas con producto que se puede llevar a la reserva',
  `isRecyclable` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'las matrículas marcadas como reciclables se liberan cada noche desde vn.shelving_clean para poder volver a utilizarlas',
  PRIMARY KEY (`code`),
  KEY `shelving_fk1_idx` (`parkingFk`),
  KEY `shelving_fk2_idx` (`userFk`),
  CONSTRAINT `shelving_fk1` FOREIGN KEY (`parkingFk`) REFERENCES `parking` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `shelving_fk2` FOREIGN KEY (`userFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla usada para localizar el carro en el parking del altillo';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`shelving_beforeInsert`
	BEFORE INSERT ON `shelving`
	FOR EACH ROW
BEGIN

	IF NEW.code = "" THEN
	
		CALL util.throw('NOT_EMPTY_CODE_ALLOWED');
	
	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`.`shelving_BEFORE_UPDATE`
	BEFORE UPDATE ON `shelving`
	FOR EACH ROW
BEGIN
   
   	IF NEW.code = "" THEN
   	
		CALL util.throw('NOT_EMPTY_CODE_ALLOWED');
	
	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 */ ;

--
-- Table structure for table `shelvingLog`
--

DROP TABLE IF EXISTS `shelvingLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shelvingLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userFk` (`userFk`),
  KEY `originFk` (`originFk`),
  CONSTRAINT `shelvingLog_FK_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `shelving` (`code`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `shelvingLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `silexACL`
--

DROP TABLE IF EXISTS `silexACL`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `silexACL` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `module` varchar(50) NOT NULL,
  `method` varchar(50) NOT NULL,
  `role` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `module_UNIQUE` (`module`,`method`) USING BTREE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sinister`
--

DROP TABLE IF EXISTS `sinister`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sinister` (
  `id` int(11) NOT NULL,
  `supplierFk` int(11) NOT NULL,
  `clientFk` int(11) NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `insureRate` decimal(3,2) NOT NULL DEFAULT '0.75',
  `isBooked` tinyint(4) NOT NULL DEFAULT '0',
  `workerFk` int(10) unsigned NOT NULL,
  `companyFk` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `sinister_fk1_idx` (`supplierFk`),
  KEY `sinister_fk2_idx` (`clientFk`),
  KEY `sinister_fk3_idx` (`workerFk`),
  KEY `sinister_fk4_idx` (`companyFk`),
  CONSTRAINT `sinister_fk1` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `sinister_fk2` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sinister_fk3` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `sinister_fk4` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Impago de cliente asegurado';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sinisterDetail`
--

DROP TABLE IF EXISTS `sinisterDetail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sinisterDetail` (
  `id` int(11) NOT NULL,
  `sinisterFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `amountIn` decimal(10,2) DEFAULT NULL,
  `amountOut` decimal(10,2) DEFAULT NULL,
  `isConciliated` tinyint(1) NOT NULL DEFAULT '0',
  `workerFk` int(10) unsigned NOT NULL,
  `bankFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `sinisterDetail_fk1_idx` (`sinisterFk`),
  KEY `sinisterDetail_fk2_idx` (`workerFk`),
  KEY `sinisterDetail_fk3_idx` (`bankFk`),
  CONSTRAINT `sinisterDetail_fk1` FOREIGN KEY (`sinisterFk`) REFERENCES `sinister` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `sinisterDetail_fk2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `sinisterDetail_fk3` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `smartTag`
--

DROP TABLE IF EXISTS `smartTag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `smartTag` (
  `code` varchar(12) CHARACTER SET utf8 NOT NULL,
  `shelvingFk` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `level` int(11) DEFAULT NULL,
  PRIMARY KEY (`code`),
  KEY `smartTag_shelving_fk` (`shelvingFk`),
  CONSTRAINT `smartTag_shelving_fk` FOREIGN KEY (`shelvingFk`) REFERENCES `shelving` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sms`
--

DROP TABLE IF EXISTS `sms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sms` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `senderFk` int(10) unsigned NOT NULL,
  `destinationFk__` int(11) DEFAULT NULL,
  `sender` varchar(15) CHARACTER SET utf8 NOT NULL DEFAULT '693474205',
  `destination` varchar(15) CHARACTER SET utf8 NOT NULL,
  `message` varchar(160) COLLATE utf8_unicode_ci NOT NULL,
  `statusCode` smallint(9) DEFAULT '0',
  `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'OK',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `sms_FK` (`senderFk`),
  CONSTRAINT `sms_FK` FOREIGN KEY (`senderFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `smsConfig`
--

DROP TABLE IF EXISTS `smsConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `smsConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uri` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user__` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `password__` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `apiKey` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='SMS configuration parameters';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `solunionCAP`
--

DROP TABLE IF EXISTS `solunionCAP`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `solunionCAP` (
  `creditInsurance` int(11) NOT NULL,
  `dateStart` date NOT NULL,
  `dateEnd` date NOT NULL,
  `dateLeaving` date DEFAULT NULL,
  PRIMARY KEY (`creditInsurance`,`dateStart`),
  KEY `solunionCAPdateLeavingIdx` (`dateLeaving`),
  CONSTRAINT `solunionCAP` FOREIGN KEY (`creditInsurance`) REFERENCES `creditInsurance` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`solunionCAP_AFTER_INSERT`
	AFTER INSERT ON `solunionCAP`
	FOR EACH ROW
BEGIN
	UPDATE vn2008.Clientes c
		JOIN creditClassification cc ON c.Id_Cliente = cc.client 
		JOIN creditInsurance ci ON ci.creditClassification = cc.id
	SET creditInsurance = ci.credit * 2 WHERE ci.id = NEW.creditInsurance;
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`.`solunionCAP_AFTER_UPDATE`
	AFTER UPDATE ON `solunionCAP`
	FOR EACH ROW
BEGIN
	IF NEW.dateLeaving IS NOT NULL THEN
		UPDATE vn2008.Clientes c
			JOIN creditClassification cc ON c.Id_Cliente = cc.client 
			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 
			JOIN creditInsurance ci ON ci.creditClassification = cc.id
		SET creditInsurance = ci.credit * 2 WHERE ci.id = OLD.creditInsurance;
	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`.`solunionCAP_BEFORE_DELETE`
	BEFORE DELETE ON `solunionCAP`
	FOR EACH ROW
BEGIN
	UPDATE vn2008.Clientes c
		JOIN creditClassification cc ON c.Id_Cliente = cc.client 
		JOIN creditInsurance ci ON ci.creditClassification = cc.id
	SET creditInsurance = ci.credit  WHERE ci.id = OLD.creditInsurance;
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 */ ;

--
-- Table structure for table `sorter`
--

DROP TABLE IF EXISTS `sorter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `sorter` (
  `id` int(11) NOT NULL DEFAULT '0',
  `created` datetime NOT NULL,
  `routeFk` int(10) unsigned NOT NULL,
  `ticketFk` int(10) NOT NULL,
  `isBox` int(11) DEFAULT '1',
  `itemFk` int(11) DEFAULT NULL,
  `width` decimal(10,2) DEFAULT '0.00',
  `depth` decimal(10,2) DEFAULT '0.00',
  `height` decimal(10,2) DEFAULT '0.00',
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '1',
  `weight` decimal(5,2) NOT NULL DEFAULT '0.00',
  `buildingOrder` int(5) NOT NULL DEFAULT '0',
  `ETD` time NOT NULL DEFAULT '23:59:00',
  `palletOrder` int(5) DEFAULT NULL,
  `lungGrow` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `specialLabels`
--

DROP TABLE IF EXISTS `specialLabels`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `specialLabels` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `reportName` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `isVisible` tinyint(1) NOT NULL DEFAULT '0',
  `image` blob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `specialPrice`
--

DROP TABLE IF EXISTS `specialPrice`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `specialPrice` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `itemFk` int(11) NOT NULL DEFAULT '0',
  `value` double NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Cliente_2` (`clientFk`,`itemFk`),
  KEY `Id_Article` (`itemFk`),
  KEY `Id_Cliente` (`clientFk`),
  CONSTRAINT `sp_article_id` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `sp_customer_id` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `specie`
--

DROP TABLE IF EXISTS `specie`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `specie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `specie_UN` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`specie_BEFORE_INSERT`
	BEFORE INSERT ON `specie`
	FOR EACH ROW
BEGIN
	SET NEW.name = LCASE(NEW.name);
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`.`specie_BEFORE_UPDATE`
	BEFORE UPDATE ON `specie`
	FOR EACH ROW
BEGIN
	SET NEW.name = LCASE(NEW.name);
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 */ ;

--
-- Table structure for table `specieGeoInvasive`
--

DROP TABLE IF EXISTS `specieGeoInvasive`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `specieGeoInvasive` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `genusFk` int(11) NOT NULL,
  `specieFk` int(11) NOT NULL,
  `zoneGeofk` int(11) NOT NULL,
  `isForbidden` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `specieGeoInvasive_FK` (`genusFk`),
  KEY `specieGeoInvasive_FK_1` (`specieFk`),
  KEY `specieGeoInvasive_FK_2` (`zoneGeofk`),
  CONSTRAINT `specieGeoInvasive_FK` FOREIGN KEY (`genusFk`) REFERENCES `genus` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `specieGeoInvasive_FK_1` FOREIGN KEY (`specieFk`) REFERENCES `specie` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `specieGeoInvasive_FK_2` FOREIGN KEY (`zoneGeofk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Esta tabla recoge las prohibiciones de comerciar con especies invasoras de acuerdo con el Catálogo de Especies Exóticas Invasoras publicado por el Estado Español';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `splitFilter`
--

DROP TABLE IF EXISTS `splitFilter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `splitFilter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `autonomyFk` int(11) DEFAULT NULL,
  `clientFk` int(11) DEFAULT NULL,
  `nickname` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `splitFilter_UN` (`autonomyFk`),
  UNIQUE KEY `splitFilter_UN1` (`clientFk`),
  KEY `splitFilter_FK` (`autonomyFk`),
  KEY `splitFilter_FK_1` (`clientFk`),
  CONSTRAINT `splitFilter_FK` FOREIGN KEY (`autonomyFk`) REFERENCES `autonomy` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `splitFilter_FK_1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='define los clientes que tienen split y el nombre a mostrar en la etiqueta';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `starredModule`
--

DROP TABLE IF EXISTS `starredModule`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `starredModule` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `moduleFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `position` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `starred_workerFk` (`workerFk`),
  KEY `starred_moduleFk` (`moduleFk`),
  CONSTRAINT `starred_moduleFk` FOREIGN KEY (`moduleFk`) REFERENCES `salix`.`module` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `starred_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `state`
--

DROP TABLE IF EXISTS `state`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `state` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `order` tinyint(3) unsigned DEFAULT NULL,
  `alertLevel` int(11) NOT NULL DEFAULT '0',
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `sectorProdPriority` tinyint(3) DEFAULT NULL,
  `nextStateFk` tinyint(3) unsigned NOT NULL COMMENT 'Estado al que tiene que cambiar el ticket despues de preparacion previa',
  `isPreviousPreparable` tinyint(1) NOT NULL DEFAULT '0',
  `isPicked` tinyint(1) NOT NULL DEFAULT '0',
  `isPreparable` tinyint(1) NOT NULL DEFAULT '0',
  `semaphore` int(11) NOT NULL DEFAULT '0',
  `isPrintable` tinyint(4) NOT NULL DEFAULT '0',
  `isOK` tinyint(4) NOT NULL DEFAULT '0',
  `graphCategory` int(11) NOT NULL DEFAULT '0',
  `isNotValidated` tinyint(1) DEFAULT '0' COMMENT 'Los tienen que ser validados por un comercial para prepararse',
  `classColor` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`),
  KEY `state_id3` (`semaphore`),
  KEY `alertLevel` (`alertLevel`),
  KEY `state_FK` (`nextStateFk`),
  CONSTRAINT `state_FK` FOREIGN KEY (`nextStateFk`) REFERENCES `state` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `state_ibfk_1` FOREIGN KEY (`alertLevel`) REFERENCES `alertLevel` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `stockBuyed`
--

DROP TABLE IF EXISTS `stockBuyed`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stockBuyed` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user` int(10) unsigned DEFAULT NULL,
  `buyed` decimal(10,2) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `reserved` decimal(10,2) DEFAULT NULL,
  `requested` decimal(10,2) DEFAULT NULL,
  `description` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `stockBuyed_user_idx` (`user`),
  CONSTRAINT `stockBuyedUserFk` FOREIGN KEY (`user`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `stowaway`
--

DROP TABLE IF EXISTS `stowaway`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stowaway` (
  `id` int(11) NOT NULL COMMENT 'ticket pequeño',
  `shipFk` int(11) NOT NULL COMMENT 'ticket grande',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tickets polizones y sus naves de embarque';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplier`
--

DROP TABLE IF EXISTS `supplier`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplier` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `account` varchar(10) DEFAULT NULL,
  `street` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `provinceFk` smallint(5) unsigned DEFAULT NULL,
  `countryFk` mediumint(8) unsigned DEFAULT NULL,
  `nif` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `isOfficial` tinyint(1) NOT NULL DEFAULT '1',
  `isFarmer` tinyint(1) NOT NULL DEFAULT '0',
  `retAccount` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `Fax__` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `commission` float NOT NULL DEFAULT '0',
  `nickname` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `payMethodFk` tinyint(3) unsigned NOT NULL,
  `payDay` tinyint(4) unsigned DEFAULT NULL,
  `payDemFk` tinyint(3) unsigned NOT NULL DEFAULT '7',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `isSerious` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `note` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  `postcodeFk` int(11) unsigned DEFAULT NULL,
  `postCode` char(8) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `isActive` tinyint(4) DEFAULT '1',
  `taxTypeSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipo de IVA SAGE',
  `withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
  `transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Ti po de transacción SAGE',
  `isTrucker` tinyint(1) NOT NULL DEFAULT '0',
  `workerFk` int(10) unsigned DEFAULT NULL COMMENT 'Responsible for approving invoices',
  `supplierActivityFk` varchar(45) NOT NULL DEFAULT 'flowersPlants',
  `healthRegister` varchar(45) DEFAULT NULL,
  `isPayMethodChecked` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Se ha validado la forma de pago',
  PRIMARY KEY (`id`),
  UNIQUE KEY `cuenta` (`account`),
  UNIQUE KEY `NIF` (`nif`),
  KEY `pais_id` (`countryFk`),
  KEY `pay_met_id` (`payMethodFk`),
  KEY `province_id` (`provinceFk`),
  KEY `pay_dem_id` (`payDemFk`),
  KEY `codpos` (`postCode`),
  KEY `supplier_taxTypeFk_idx` (`taxTypeSageFk`),
  KEY `supplier_withholdingFk_idx` (`withholdingSageFk`),
  KEY `supplier_transactionFk_idx` (`transactionTypeSageFk`),
  KEY `suppplier_supplierActivityFk` (`supplierActivityFk`),
  KEY `supplier_workerFk` (`workerFk`),
  CONSTRAINT `Id_Pais` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pay_dem_id` FOREIGN KEY (`payDemFk`) REFERENCES `payDem` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pay_met_id` FOREIGN KEY (`payMethodFk`) REFERENCES `payMethod` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `province_id` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `supplier_taxTypeFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
  CONSTRAINT `supplier_transactionFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
  CONSTRAINT `supplier_withholdingFk` FOREIGN KEY (`withholdingSageFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON UPDATE CASCADE,
  CONSTRAINT `supplier_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `suppplier_supplierActivityFk` FOREIGN KEY (`supplierActivityFk`) REFERENCES `supplierActivity` (`code`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`supplier_beforeUpdate`
	BEFORE UPDATE ON `supplier`
	FOR EACH ROW
BEGIN
	DECLARE vHasChange BOOL DEFAULT FALSE;
	DECLARE vPayMethodHasVerified BOOL;

	SELECT hasVerified INTO vPayMethodHasVerified
		FROM payMethod
			WHERE id = NEW.payMethodFk;

	SET vHasChange =  (NEW.payDemFk <> OLD.payDemFk) OR (NEW.payDay <> OLD.payDay);

	IF vPayMethodHasVerified AND !vHasChange THEN
		SET vHasChange = (NEW.payMethodFk <> OLD.payMethodFk);
	END IF;
	
	IF vHasChange THEN
		SET NEW.isPayMethodChecked = FALSE;
	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 */ ;

--
-- Table structure for table `supplierAccount`
--

DROP TABLE IF EXISTS `supplierAccount`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierAccount` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `supplierFk` int(11) DEFAULT NULL,
  `iban` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
  `office` varchar(4) CHARACTER SET utf8 DEFAULT NULL,
  `DC` varchar(2) CHARACTER SET utf8 DEFAULT NULL,
  `number` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'obsoleta(comprobar)',
  `bicSufix` varchar(3) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `bankEntityFk` int(10) unsigned DEFAULT NULL,
  `bankFk` int(11) DEFAULT NULL COMMENT 'obsoleta(comprobar)',
  `beneficiary` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_proveedores_proveedores_account_idx` (`supplierFk`),
  KEY `fk_Proveedores_account_entity1_idx` (`bankEntityFk`),
  KEY `fk_banco_prov_account_idx` (`bankFk`),
  CONSTRAINT `supplierAccount_FK` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `supplierAccount_FK_1` FOREIGN KEY (`bankEntityFk`) REFERENCES `bankEntity` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER supplierAccount_afterUpdate
	AFTER UPDATE ON supplierAccount
	FOR EACH ROW
BEGIN
	DECLARE vPayMethodHasVerified BOOL;

	SELECT pm.hasVerified INTO vPayMethodHasVerified
		FROM vn.supplier s
			JOIN vn.payMethod pm ON pm.id = s.payMethodFk
		WHERE s.id = OLD.supplierFk;
	
	IF OLD.iban <> NEW.iban OR OLD.bankEntityFk <> NEW.bankEntityFk AND vPayMethodHasVerified THEN
		UPDATE vn.supplier
			SET isPayMethodChecked = FALSE
			WHERE id = OLD.supplierFk;
	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 */ ;

--
-- Table structure for table `supplierActivity`
--

DROP TABLE IF EXISTS `supplierActivity`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierActivity` (
  `code` varchar(45) CHARACTER SET utf8 NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplierAddress`
--

DROP TABLE IF EXISTS `supplierAddress`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierAddress` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `supplierFk` int(11) DEFAULT NULL,
  `nickname` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `street` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `provinceFk` smallint(6) unsigned DEFAULT NULL,
  `postalCode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `supplierAddress_province_fk` (`provinceFk`),
  CONSTRAINT `supplierAddress_province_fk` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplierAgencyTerm`
--

DROP TABLE IF EXISTS `supplierAgencyTerm`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierAgencyTerm` (
  `agencyFk` smallint(5) unsigned NOT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `minimumPackages` int(11) NOT NULL DEFAULT '0' COMMENT 'numero minimo de bultos',
  `kmPrice` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT 'precio extra por km',
  `packagePrice` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT 'precio extra por bulto',
  `routePrice` decimal(10,2) DEFAULT NULL COMMENT 'precio fijo por ruta',
  `minimumKm` int(11) NOT NULL DEFAULT '0',
  `minimumM3` decimal(10,2) NOT NULL DEFAULT '0.00',
  `m3Price` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`agencyFk`),
  KEY `agencyTerm_FK_1` (`supplierFk`),
  CONSTRAINT `agencyTerm_FK` FOREIGN KEY (`agencyFk`) REFERENCES `agency` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `agencyTerm_FK_1` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplierContact`
--

DROP TABLE IF EXISTS `supplierContact`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierContact` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `supplierFk` int(11) DEFAULT NULL,
  `phone` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mobile` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `observation` text COLLATE utf8_unicode_ci,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `supplier_id` (`supplierFk`),
  CONSTRAINT `supplier_id` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplierExpense`
--

DROP TABLE IF EXISTS `supplierExpense`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierExpense` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `supplierFk` int(11) NOT NULL,
  `currencyFk` tinyint(3) unsigned NOT NULL DEFAULT '2',
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `description` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `dmsFk` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `isConciliated` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
  `dueDated` date NOT NULL,
  PRIMARY KEY (`id`),
  KEY `empresa_id` (`companyFk`),
  KEY `supplierExDated` (`dated`),
  KEY `id_moneda` (`currencyFk`),
  KEY `proveedor_pago` (`supplierFk`),
  KEY `gestdoc_id` (`dmsFk`),
  KEY `dueDatedIdx` (`dueDated`),
  CONSTRAINT `gestdoc_fk` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pago_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `pago_moneda` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `proveedor_pago` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `supplierLog`
--

DROP TABLE IF EXISTS `supplierLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `supplierLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `logSupplier_ibfk_1` (`originFk`),
  KEY `supplierLog_ibfk_2` (`userFk`),
  CONSTRAINT `supplierLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `supplier` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `supplierLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `supplierPackaging`
--

DROP TABLE IF EXISTS `supplierPackaging`;
/*!50001 DROP VIEW IF EXISTS `supplierPackaging`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `supplierPackaging` (
  `supplierFk` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `longName` tinyint NOT NULL,
  `supplier` tinyint NOT NULL,
  `entryFk` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `out` tinyint NOT NULL,
  `in` tinyint NOT NULL,
  `warehouse` tinyint NOT NULL,
  `buyingValue` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `tablet`
--

DROP TABLE IF EXISTS `tablet`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tablet` (
  `uuid` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `place` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `macwifi` varchar(45) COLLATE utf8_unicode_ci DEFAULT '0',
  PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tabletDepartment`
--

DROP TABLE IF EXISTS `tabletDepartment`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tabletDepartment` (
  `tabletFk` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `departmentFk` int(11) NOT NULL,
  PRIMARY KEY (`tabletFk`,`departmentFk`),
  KEY `departmentFk_idx` (`departmentFk`),
  CONSTRAINT `departmentFk` FOREIGN KEY (`departmentFk`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `tablet_uuid` FOREIGN KEY (`tabletFk`) REFERENCES `tablet` (`uuid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tag`
--

DROP TABLE IF EXISTS `tag`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  `name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `isFree` tinyint(1) NOT NULL DEFAULT '1',
  `isQuantitatif` tinyint(4) NOT NULL DEFAULT '0',
  `sourceTable` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `unit` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ediTypeFk` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `overwrite` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'nombre del campo de item a sobreescribir con el valor del tag, hay que añadir el código correspondiente en item_refreshTags',
  PRIMARY KEY (`id`),
  UNIQUE KEY `tagNameIdx` (`name`,`ediTypeFk`),
  UNIQUE KEY `tagEdiTypeFkIdx` (`ediTypeFk`),
  CONSTRAINT `fgnTag` FOREIGN KEY (`ediTypeFk`) REFERENCES `edi`.`type` (`type_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Categorias para etiquetar los productos';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`tag_BEFORE_INSERT`
	BEFORE INSERT ON `tag`
	FOR EACH ROW
BEGIN
	IF NEW.ediTypeFk IS NULL AND (SELECT COUNT(*) FROM tag WHERE `name` = NEW.`name`) THEN
		CALL util.throw('name duplicated');
    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 */ ;

--
-- Table structure for table `tagAbbreviation`
--

DROP TABLE IF EXISTS `tagAbbreviation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tagAbbreviation` (
  `value` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `abbreviation` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `tagFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`value`),
  KEY `tagAbbreviation_FK` (`tagFk`),
  CONSTRAINT `tagAbbreviation_FK` FOREIGN KEY (`tagFk`) REFERENCES `tag` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `tagI18n`
--

DROP TABLE IF EXISTS `tagI18n`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tagI18n` (
  `tagFk` int(10) unsigned NOT NULL,
  `lang` char(2) CHARACTER SET utf8 NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`tagFk`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `tagL10n`
--

DROP TABLE IF EXISTS `tagL10n`;
/*!50001 DROP VIEW IF EXISTS `tagL10n`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `tagL10n` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `taxArea`
--

DROP TABLE IF EXISTS `taxArea`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `taxArea` (
  `code` varchar(15) CHARACTER SET utf8 NOT NULL,
  `ClaveOperacionFactura` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CodigoTransaccion` int(2) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `taxClass`
--

DROP TABLE IF EXISTS `taxClass`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `taxClass` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'R',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code_UNIQUE` (`code`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `taxClassCode`
--

DROP TABLE IF EXISTS `taxClassCode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `taxClassCode` (
  `taxClassFk` tinyint(3) unsigned NOT NULL,
  `effectived` date NOT NULL,
  `taxCodeFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`taxClassFk`,`effectived`,`taxCodeFk`),
  KEY `iva_codigo_id` (`taxCodeFk`),
  CONSTRAINT `taxClassCode_ibfk_1` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `taxClassCode_ibfk_2` FOREIGN KEY (`taxCodeFk`) REFERENCES `taxCode` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `taxCode`
--

DROP TABLE IF EXISTS `taxCode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `taxCode` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `code` varchar(10) CHARACTER SET utf8 NOT NULL,
  `taxTypeFk` tinyint(2) NOT NULL,
  `rate` decimal(4,1) NOT NULL DEFAULT '0.0',
  `equalizationTax` decimal(4,1) NOT NULL DEFAULT '0.0',
  `type` char(1) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Solo rellenar si en el asiento ira en el DEBE',
  `link` tinyint(4) unsigned DEFAULT '0' COMMENT 'las que tienen el mismo valor se contabilizan emparejadas',
  `isActive` tinyint(2) NOT NULL DEFAULT '1',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `transactionCode` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Código de Transacción de SAGE',
  `operationCode` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Código de operaciones de SAGE',
  `taxCode` int(4) DEFAULT NULL COMMENT 'Código de IVA SAGE',
  `isIntracommunity` tinyint(2) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `taxCode_dated_IDX` (`dated`,`taxTypeFk`,`type`,`link`) USING BTREE,
  KEY `iva_tipo_id` (`taxTypeFk`),
  KEY `codigo` (`code`),
  KEY `tipo_index` (`type`),
  CONSTRAINT `taxCode_ibfk_1` FOREIGN KEY (`taxTypeFk`) REFERENCES `taxType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `taxType`
--

DROP TABLE IF EXISTS `taxType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `taxType` (
  `id` tinyint(2) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `isAccrued` tinyint(4) NOT NULL DEFAULT '0',
  `serial` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TIPOOPE` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' ' COMMENT 'respetar el nombre de la columna, se utiliza en contaplus',
  `description` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `countryFk` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `serie_id` (`serial`),
  KEY `Id_Pais` (`countryFk`),
  CONSTRAINT `taxType_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `temperature`
--

DROP TABLE IF EXISTS `temperature`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `temperature` (
  `code` varchar(10) CHARACTER SET utf8 NOT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `name` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `thermograph`
--

DROP TABLE IF EXISTS `thermograph`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `thermograph` (
  `id` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `model` enum('TL30','SENSITECH','TREKVIEW1','TREKVIEW2','DISPOSABLE','TEMPMATE') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticket`
--

DROP TABLE IF EXISTS `ticket`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticket` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clientFk` int(11) NOT NULL DEFAULT '0',
  `warehouseFk` smallint(6) unsigned NOT NULL DEFAULT '1',
  `shipped` datetime NOT NULL,
  `nickname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `notes__` longtext COLLATE utf8_unicode_ci,
  `refFk` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `invoiceOutFk__` int(10) unsigned DEFAULT NULL COMMENT 'eliminar',
  `isBooked__` tinyint(1) NOT NULL DEFAULT '0',
  `addressFk` int(11) NOT NULL DEFAULT '0',
  `workerFk` int(11) DEFAULT NULL,
  `observations` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'eliminar',
  `isSigned` tinyint(1) NOT NULL DEFAULT '0',
  `isLabeled` tinyint(1) NOT NULL DEFAULT '0',
  `isPrinted` tinyint(1) NOT NULL DEFAULT '0',
  `packages` smallint(10) unsigned DEFAULT '0',
  `location` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hour` int(11) DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `isBlocked` tinyint(1) NOT NULL DEFAULT '1',
  `solution` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `routeFk` int(10) unsigned DEFAULT NULL,
  `priority` tinyint(3) unsigned DEFAULT NULL,
  `hasPriority` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `agencyModeFk` int(11) DEFAULT NULL,
  `landed` date DEFAULT NULL,
  `isBoxed` tinyint(2) NOT NULL DEFAULT '0',
  `isDeleted` tinyint(2) NOT NULL DEFAULT '0',
  `zoneFk` int(11) DEFAULT NULL,
  `collectionFk__` int(11) DEFAULT NULL,
  `zonePrice` decimal(10,2) DEFAULT NULL,
  `zoneBonus` decimal(10,2) DEFAULT NULL,
  `totalWithVat` decimal(10,2) DEFAULT NULL COMMENT 'cache calculada del total con iva',
  `totalWithoutVat` decimal(10,2) DEFAULT NULL COMMENT 'cache calculada del total sin iva',
  `weight` decimal(10,2) DEFAULT NULL COMMENT 'En caso de informar, se utilizará su valor para calcular el peso de la factura',
  PRIMARY KEY (`id`),
  KEY `Id_Cliente` (`clientFk`),
  KEY `Id_Consigna` (`addressFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `empresa_id` (`companyFk`),
  KEY `Id_Agencia` (`agencyModeFk`),
  KEY `Factura` (`refFk`),
  KEY `Id_Ruta` (`routeFk`),
  KEY `warehouse_date` (`warehouseFk`,`shipped`),
  KEY `Fecha` (`shipped`,`clientFk`),
  KEY `tickets_zone_fk_idx` (`zoneFk`),
  KEY `tickets_fk11_idx` (`collectionFk__`),
  CONSTRAINT `ticket_FK` FOREIGN KEY (`refFk`) REFERENCES `invoiceOut` (`ref`) ON UPDATE CASCADE,
  CONSTRAINT `ticket_customer_id` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticket_ibfk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticket_ibfk_5` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticket_ibfk_6` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticket_ibfk_8` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`),
  CONSTRAINT `ticket_ibfk_9` FOREIGN KEY (`routeFk`) REFERENCES `route` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `tickets_fk11` FOREIGN KEY (`collectionFk__`) REFERENCES `collection` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `tickets_zone_fk` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`ticket_afterInsert`
	AFTER INSERT ON `ticket`
	FOR EACH ROW
BEGIN
	
	DECLARE vClientType VARCHAR(255);
	DECLARE vStateCode VARCHAR(255);
	DECLARE vTransferorFirstShipped DATE;
	
	-- Borrar cuando se cambie el insert ticket en la APP móvil

	SELECT typeFk INTO vClientType
		FROM vn.`client` WHERE id = NEW.clientFk;

	IF vClientType = 'loses' THEN
		SET vStateCode = 'DELIVERED';
	ELSE
		SET vStateCode = 'FREE';
	END IF;

	INSERT INTO vncontrol.inter(Id_Ticket, state_id, Id_Trabajador)
		SELECT NEW.id, id, account.myUser_getId() 
			FROM state 
			WHERE `code` = vStateCode COLLATE utf8_general_ci;

	IF YEAR(NEW.shipped) > 2000 THEN

		SELECT cnb.firstShipped INTO vTransferorFirstShipped
				FROM bs.clientNewBorn cnb
					JOIN `client` c ON c.transferorFk = cnb.clientFk
				WHERE c.id = NEW.clientFk;

		INSERT INTO bs.clientNewBorn(clientFk, firstShipped, lastShipped)
			VALUES(NEW.clientFk, IFNULL(vTransferorFirstShipped, CURDATE()), CURDATE())
		ON DUPLICATE KEY UPDATE lastShipped = CURDATE();
	
	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`.`ticket_beforeUpdate`
	BEFORE UPDATE ON `ticket`
	FOR EACH ROW
BEGIN
	DECLARE vNewTime TIME;
    
	IF !(NEW.routeFk <=> OLD.routeFk) THEN
		INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`) 
			SELECT r.id 
				FROM vn.route r
				WHERE r.isOk = FALSE 
					AND r.id IN (OLD.routeFk,NEW.routeFk)
					AND r.created >= CURDATE()
				GROUP BY r.id;
		call util.debugAdd(NEW.id,CONCAT(OLD.routeFk,' ',NEW.routeFk));
    END IF;
    
	IF !(DATE(NEW.shipped) <=> DATE(OLD.shipped)) THEN
		IF YEAR(NEW.shipped) < 2000 THEN
			SIGNAL SQLSTATE '46000'
				SET MESSAGE_TEXT = 'Year cannot be lesser than 2000';
		END IF;

		IF YEAR(NEW.shipped) = 2000 THEN
			SET NEW.isDeleted = TRUE;
		END IF;

	END IF;
	
	IF !(NEW.isDeleted <=> OLD.isDeleted) AND NEW.isDeleted THEN
		INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`) 
			SELECT r.id 
				FROM vn.ticket t
					JOIN vn.route r ON r.id = t.routeFk
				WHERE r.isOk = FALSE 
					AND t.id = NEW.id
					AND r.created >= CURDATE()
				GROUP BY r.id;
		SET NEW.shipped = DATE_FORMAT(NEW.shipped, '2000-%m-%d %T');
		SET NEW.landed = DATE_FORMAT(NEW.landed, '2000-%m-%d %T');
		SET NEW.routeFk = NULL;
        SET NEW.zoneFk = NULL;
	END IF;

    IF NEW.routeFk  AND NEW.isDeleted   THEN 
		CALL util.throw ('This ticket is deleted');
	END IF;

	IF !(NEW.routeFk <=> OLD.routeFk) AND NEW.routeFk IS NOT NULL THEN
		SELECT MAX(TIME(shipped)) INTO vNewTime
			FROM vn.ticket
			WHERE routeFk = NEW.routeFk
			HAVING MAX(TIME(shipped)) > TIME(NEW.shipped);
	
		IF vNewTime THEN
			SET NEW.shipped = TIMESTAMP(DATE(NEW.shipped), vNewTime);
			INSERT INTO vn.ticketLog
				SET originFk = NEW.id, 
					userFk = account.myUser_getId(), 
					`action` = 'update', 
					description = CONCAT('Cambia la hora por cambio de ruta de ',
									TIME(OLD.shipped),
									' a ',
									TIME(NEW.shipped));
		END IF;
		INSERT IGNORE INTO zoneAgencyMode (agencyModeFk,zoneFk)
			SELECT r.agencyModeFk, NEW.zoneFk FROM route r 
				WHERE r.id = NEW.routeFk;
                
		CALL vn.routeUpdateM3(NEW.routeFk);
	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`.`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.clientFk = 2067 AND !(NEW.clientFk <=> OLD.clientFk)  THEN
		-- Fallo que se insertan no se sabe como tickets en este cliente
		CALL mail_insert(
			'jgallego@verdnatura.es',
			'jgallego@verdnatura.es',
			'Modificado ticket al cliente 2067',
			CONCAT(account.myUser_getName(), ' ha modificado el ticket ',NEW.id)
		);
    END IF;
   
	IF NEW.routeFk <> OLD.routeFk THEN

		UPDATE expedition 
			SET hasNewRoute = TRUE
			WHERE ticketFk = NEW.id;

	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`.`ticket_beforeDelete`
	BEFORE DELETE ON `ticket`
	FOR EACH ROW
BEGIN	
	INSERT IGNORE INTO `vn`.`routeRecalc` (`routeFk`) 
		SELECT r.id 
			FROM vn.route r
			WHERE r.isOk = FALSE 
				AND r.id = OLD.routeFk
				AND r.created >= CURDATE()
			GROUP BY r.id;

	DELETE FROM sale WHERE ticketFk = OLD.id;

    DELETE FROM ticketDms WHERE ticketFk = 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 */ ;

--
-- Table structure for table `ticketCollection`
--

DROP TABLE IF EXISTS `ticketCollection`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketCollection` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `collectionFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `level` int(11) DEFAULT NULL,
  `wagon` int(11) NOT NULL DEFAULT '0',
  `smartTagFk` varchar(12) CHARACTER SET utf8 DEFAULT NULL,
  `usedShelves` int(11) DEFAULT NULL COMMENT 'número de bandejas que ocupa un ticket en el carro',
  `itemCount` int(11) DEFAULT NULL COMMENT 'número de productos distintos en el pedido',
  `liters` int(11) DEFAULT NULL COMMENT 'volumen del pedido en litros',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ticketCollection_UN` (`ticketFk`,`collectionFk`),
  KEY `ticketCollection_fk1_idx` (`collectionFk`),
  KEY `ticketCollection_fk2_idx` (`ticketFk`),
  KEY `ticketCollection_smartTagFk_IDX` (`smartTagFk`) USING BTREE,
  KEY `ticketCollection_created_IDX` (`created`) USING BTREE,
  CONSTRAINT `ticketCollection_FK` FOREIGN KEY (`smartTagFk`) REFERENCES `smartTag` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `ticketCollection_fk1` FOREIGN KEY (`collectionFk`) REFERENCES `collection` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketCollection_fk2` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER ticketCollection_afterDelete
AFTER DELETE
ON ticketCollection FOR EACH ROW
BEGIN 
	
	DECLARE vSalesRemaining INT;

	SELECT count(*) INTO vSalesRemaining
		FROM vn.ticketCollection tc
			JOIN sale s ON s.ticketFk = tc.ticketFk 
		WHERE collectionFk = OLD.collectionFk
			AND tc.id != OLD.id;
		
	IF NOT vSalesRemaining THEN
	
		DELETE FROM vn.collection WHERE id = OLD.collectionFk;
	
	ELSE
	
		UPDATE vn.collection 
			SET saleTotalCount = vSalesRemaining
			WHERE id = OLD.collectionFk;
		
	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 */ ;

--
-- Table structure for table `ticketConfig`
--

DROP TABLE IF EXISTS `ticketConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `scopeDays` tinyint(3) DEFAULT NULL,
  `pickingDelay` int(11) NOT NULL DEFAULT '10' COMMENT 'minutos de cortesia desde que se crea un ticket hasta que se puede preparar',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketDms`
--

DROP TABLE IF EXISTS `ticketDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketDms` (
  `ticketFk` int(11) NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`ticketFk`,`dmsFk`),
  KEY `gestdoc_id` (`dmsFk`),
  CONSTRAINT `ticketDms_dmsFk` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketDms_ticketFk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`ticketDms_beforeDelete`
	BEFORE DELETE ON `ticketDms`
	FOR EACH ROW
BEGIN
    UPDATE dms 
        SET dmsTypeFk = (SELECT id 
							FROM dmsType 
                            WHERE `code` = 'trash'
						)
		WHERE id = OLD.dmsFk AND ( SELECT IF(COUNT(*) > 0, FALSE, TRUE) 
										FROM ticketDms 
										WHERE dmsFk = OLD.dmsFk
								  ) ;
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 */ ;

--
-- Table structure for table `ticketDocumentation`
--

DROP TABLE IF EXISTS `ticketDocumentation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketDocumentation` (
  `ticketFk` int(11) NOT NULL,
  PRIMARY KEY (`ticketFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Marca si se ha revisado el ticket para aportar la documentación CRM/DUA (relativa al trasporte internacional de mercancias)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketDown`
--

DROP TABLE IF EXISTS `ticketDown`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketDown` (
  `ticketFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `selected` int(11) NOT NULL DEFAULT '0',
  `collectionFk` int(11) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
  KEY `created_idx` (`created`),
  KEY `selected_idx` (`selected`),
  KEY `ticketDown_FK` (`collectionFk`),
  CONSTRAINT `ticketDown_FK` FOREIGN KEY (`collectionFk`) REFERENCES `collection` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketDown_fk1` FOREIGN KEY (`selected`) REFERENCES `ticketDown_SelectionType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Cola de impresion para los tickets que se van a solicitar al altillo';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketDown_SelectionType`
--

DROP TABLE IF EXISTS `ticketDown_SelectionType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketDown_SelectionType` (
  `id` int(11) NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `description_UNIQUE` (`description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketLastState`
--

DROP TABLE IF EXISTS `ticketLastState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketLastState` (
  `ticketFk` int(11) NOT NULL DEFAULT '0',
  `ticketTrackingFk` int(11) NOT NULL,
  `name` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`ticketFk`),
  KEY `double_foreign` (`ticketFk`,`ticketTrackingFk`),
  CONSTRAINT `Id_Ticket` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `double_foreign` FOREIGN KEY (`ticketFk`, `ticketTrackingFk`) REFERENCES `vncontrol`.`inter` (`Id_Ticket`, `inter_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ticketLastUpdated`
--

DROP TABLE IF EXISTS `ticketLastUpdated`;
/*!50001 DROP VIEW IF EXISTS `ticketLastUpdated`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketLastUpdated` (
  `ticketFk` tinyint NOT NULL,
  `lastUpdated` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ticketLastUpdatedList`
--

DROP TABLE IF EXISTS `ticketLastUpdatedList`;
/*!50001 DROP VIEW IF EXISTS `ticketLastUpdatedList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketLastUpdatedList` (
  `ticketFk` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ticketLocation`
--

DROP TABLE IF EXISTS `ticketLocation`;
/*!50001 DROP VIEW IF EXISTS `ticketLocation`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketLocation` (
  `ticketFk` tinyint NOT NULL,
  `longitude` tinyint NOT NULL,
  `latitude` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ticketLog`
--

DROP TABLE IF EXISTS `ticketLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete','select') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `logTicketoriginFk` (`originFk`),
  KEY `logTicketuserFk` (`userFk`),
  CONSTRAINT `ticketLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketLog_user` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ticketMRW`
--

DROP TABLE IF EXISTS `ticketMRW`;
/*!50001 DROP VIEW IF EXISTS `ticketMRW`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketMRW` (
  `id_Agencia` tinyint NOT NULL,
  `empresa_id` tinyint NOT NULL,
  `Consignatario` tinyint NOT NULL,
  `DOMICILIO` tinyint NOT NULL,
  `POBLACION` tinyint NOT NULL,
  `CODPOSTAL` tinyint NOT NULL,
  `telefono` tinyint NOT NULL,
  `movil` tinyint NOT NULL,
  `IF` tinyint NOT NULL,
  `Id_Ticket` tinyint NOT NULL,
  `warehouse_id` tinyint NOT NULL,
  `Id_Consigna` tinyint NOT NULL,
  `CodigoPais` tinyint NOT NULL,
  `Fecha` tinyint NOT NULL,
  `province_id` tinyint NOT NULL,
  `landing` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ticketNotInvoiced`
--

DROP TABLE IF EXISTS `ticketNotInvoiced`;
/*!50001 DROP VIEW IF EXISTS `ticketNotInvoiced`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketNotInvoiced` (
  `companyFk` tinyint NOT NULL,
  `companyCode` tinyint NOT NULL,
  `clientFk` tinyint NOT NULL,
  `clientName` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `value` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ticketObservation`
--

DROP TABLE IF EXISTS `ticketObservation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketObservation` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `observationTypeFk` tinyint(3) unsigned NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Ticket` (`ticketFk`,`observationTypeFk`),
  KEY `observation_type_id` (`observationTypeFk`),
  CONSTRAINT `ticketObservation_ibfk_1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketObservation_ibfk_2` FOREIGN KEY (`observationTypeFk`) REFERENCES `observationType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Todas las observaciones referentes a un ticket';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketPackage`
--

DROP TABLE IF EXISTS `ticketPackage`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketPackage` (
  `ticket` int(11) NOT NULL,
  `counter` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`ticket`),
  CONSTRAINT `ticketPackage_ticketFk` FOREIGN KEY (`ticket`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketPackaging`
--

DROP TABLE IF EXISTS `ticketPackaging`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketPackaging` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `packagingFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `quantity` int(10) DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `pvp` double DEFAULT NULL,
  `workerFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ticketPackaging_fk1_idx` (`ticketFk`),
  KEY `ticketPackaging_fk2_idx` (`packagingFk`),
  KEY `ticketPackaging_fk3_idx` (`workerFk`),
  CONSTRAINT `ticketPackaging_fk1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketPackaging_fk2` FOREIGN KEY (`packagingFk`) REFERENCES `packaging` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticketPackaging_fk3` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`ticketPackaging_BEFORE_INSERT`
	BEFORE INSERT ON `ticketPackaging`
	FOR EACH ROW
BEGIN

	SET NEW.workerFk = account.myUser_getId();

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 */ ;

--
-- Table structure for table `ticketPackagingStartingStock`
--

DROP TABLE IF EXISTS `ticketPackagingStartingStock`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketPackagingStartingStock` (
  `clientFk` int(11) NOT NULL,
  `packagingFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `itemFk` int(11) NOT NULL,
  `sent` int(11) DEFAULT NULL,
  `returned` int(11) DEFAULT NULL,
  `isForgetable` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`clientFk`,`packagingFk`),
  KEY `ticketPackagingStartingStock_fk2_idx` (`packagingFk`),
  KEY `ticketPackagingStartingStock_fk3_idx` (`itemFk`),
  CONSTRAINT `ticketPackagingStartingStock_fk1` FOREIGN KEY (`clientFk`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketPackagingStartingStock_fk2` FOREIGN KEY (`packagingFk`) REFERENCES `packaging` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketPackagingStartingStock_fk3` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ticketPackingList`
--

DROP TABLE IF EXISTS `ticketPackingList`;
/*!50001 DROP VIEW IF EXISTS `ticketPackingList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketPackingList` (
  `nickname` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `agencyMode` tinyint NOT NULL,
  `flag` tinyint NOT NULL,
  `province` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL,
  `concept` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `litros` tinyint NOT NULL,
  `observaciones` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ticketParking`
--

DROP TABLE IF EXISTS `ticketParking`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketParking` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticketFk` int(11) NOT NULL,
  `parkingFk` int(11) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `workerFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ticketParking_idx1` (`ticketFk`,`parkingFk`),
  UNIQUE KEY `ticketFk_UNIQUE` (`ticketFk`),
  KEY `ticketParking_fk1_idx` (`parkingFk`),
  CONSTRAINT `ticketParking_fk1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketParking_fk2` FOREIGN KEY (`parkingFk`) REFERENCES `parking` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena los distintos lugares donde puede estar aparcado cada uno de los prepedidos';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`ticketParking_BEFORE_INSERT`
	BEFORE INSERT ON `ticketParking`
	FOR EACH ROW
BEGIN

	SET NEW.workerFk = vn.getUser();
    
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 */ ;

--
-- Temporary table structure for view `ticketPreviousPreparingList`
--

DROP TABLE IF EXISTS `ticketPreviousPreparingList`;
/*!50001 DROP VIEW IF EXISTS `ticketPreviousPreparingList`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketPreviousPreparingList` (
  `ticketFk` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `saleLines` tinyint NOT NULL,
  `alreadyMadeSaleLines` tinyint NOT NULL,
  `madeRate` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `parking` tinyint NOT NULL,
  `sectorFk` tinyint NOT NULL,
  `alertCode` tinyint NOT NULL
) ENGINE=MyISAM */;
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`),
  CONSTRAINT `ticketRecalc_ibfk_1` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queue of changed tickets to recalc its total';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketRefund`
--

DROP TABLE IF EXISTS `ticketRefund`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketRefund` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `refundTicketFk` int(11) NOT NULL,
  `originalTicketFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ticketRefund_FK` (`refundTicketFk`),
  KEY `ticketRefund_FK_1` (`originalTicketFk`),
  CONSTRAINT `ticketRefund_FK` FOREIGN KEY (`refundTicketFk`) REFERENCES `ticket` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticketRefund_FK_1` FOREIGN KEY (`originalTicketFk`) REFERENCES `ticket` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`ticketRefund_beforeInsert`
	BEFORE INSERT ON `ticketRefund`
	FOR EACH ROW
BEGIN
		CALL ticketRefund_beforeUpsert(NEW.refundTicketFk, NEW.originalTicketFk);
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`.`ticketRefund_beforeUpdate`
	BEFORE UPDATE ON `ticketRefund`
	FOR EACH ROW
BEGIN
		CALL ticketRefund_beforeUpsert(NEW.refundTicketFk, NEW.originalTicketFk);
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 */ ;

--
-- Table structure for table `ticketRequest`
--

DROP TABLE IF EXISTS `ticketRequest`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketRequest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ordered` datetime DEFAULT NULL,
  `shipped` datetime DEFAULT NULL,
  `salesPersonCode` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `buyerCode` varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NOE',
  `quantity` int(11) DEFAULT NULL,
  `price` double DEFAULT NULL,
  `price__` double DEFAULT NULL,
  `itemFk` double DEFAULT NULL,
  `clientFk` int(11) DEFAULT NULL,
  `response` longtext COLLATE utf8_unicode_ci,
  `ok__` tinyint(1) NOT NULL DEFAULT '0',
  `total` int(11) DEFAULT NULL,
  `buyed` datetime DEFAULT NULL,
  `ko__` tinyint(1) NOT NULL DEFAULT '0',
  `saleFk` int(11) DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `isOk` tinyint(1) DEFAULT NULL,
  `requesterFk` int(10) unsigned DEFAULT NULL,
  `attenderFk` int(10) unsigned DEFAULT NULL,
  `ticketFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Id_Movimiento_UNIQUE` (`saleFk`),
  KEY `Id_ARTICLE` (`itemFk`),
  KEY `Id_CLIENTE` (`clientFk`),
  KEY `Id_Comprador` (`buyerCode`),
  KEY `Id_Movimiento` (`saleFk`),
  KEY `Id_Vendedor` (`salesPersonCode`),
  KEY `fgnRequester_idx` (`requesterFk`),
  KEY `fgnAtender_idx` (`attenderFk`),
  KEY `fgnTicket_idx` (`ticketFk`),
  CONSTRAINT `fgbMovimiento` FOREIGN KEY (`saleFk`) REFERENCES `sale` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fgnAtender` FOREIGN KEY (`attenderFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `fgnRequester` FOREIGN KEY (`requesterFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `fgnTicket` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`ticketRequest_beforeInsert`
	BEFORE INSERT ON `ticketRequest`
	FOR EACH ROW
BEGIN
    IF NEW.ticketFk IS NULL THEN
        SET NEW.ticketFk = (SELECT s.ticketFk FROM sale s WHERE s.id = NEW.saleFk);
    END IF;

    IF NEW.requesterFk IS NULL THEN
        SET NEW.requesterFk = (SELECT w.id FROM worker w WHERE w.code = NEW.salesPersonCode);
    END IF;

    IF NEW.attenderFk IS NULL THEN
        SET NEW.attenderFk = (SELECT w.id FROM worker w WHERE w.code = NEW.buyerCode);
    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`.`ticketRequest_beforeUpdate`
	BEFORE UPDATE ON `ticketRequest`
	FOR EACH ROW
BEGIN
    IF NEW.saleFk <> OLD.saleFk THEN
        SET NEW.ticketFk = (SELECT s.ticketFk FROM sale s WHERE s.id = NEW.saleFk);
    END IF;

    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 ;
/*!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 */ ;

--
-- Table structure for table `ticketService`
--

DROP TABLE IF EXISTS `ticketService`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketService` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quantity` int(11) NOT NULL DEFAULT '0',
  `price` decimal(10,2) NOT NULL DEFAULT '0.00',
  `taxClassFk` tinyint(3) unsigned NOT NULL DEFAULT '2',
  `ticketFk` int(11) NOT NULL,
  `ticketServiceTypeFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ticketServiceIvaGroup_idx` (`taxClassFk`),
  KEY `fgn_ticketFk_idx` (`ticketFk`),
  KEY `ticketService_ticketServiceType_idx` (`ticketServiceTypeFk`),
  CONSTRAINT `fgn_ticketFk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `ticketServiceIvaGroup` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `ticketService_ticketServiceType` FOREIGN KEY (`ticketServiceTypeFk`) REFERENCES `ticketServiceType` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servicios asociadas a un ticket';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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_ai`
	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_au`
	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_ad`
	AFTER DELETE ON `ticketService`
	FOR EACH ROW
BEGIN

	CALL ticket_requestRecalc(OLD.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 */ ;

--
-- Table structure for table `ticketServiceType`
--

DROP TABLE IF EXISTS `ticketServiceType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketServiceType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `expenceFk` varchar(10) NOT NULL DEFAULT '7050000000',
  PRIMARY KEY (`id`),
  KEY `ticketServiceType_expenceFk_idx` (`expenceFk`),
  CONSTRAINT `ticketServiceType_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COMMENT='Lista de los posibles servicios a elegir';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `ticketState`
--

DROP TABLE IF EXISTS `ticketState`;
/*!50001 DROP VIEW IF EXISTS `ticketState`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketState` (
  `updated` tinyint NOT NULL,
  `stateFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `state` tinyint NOT NULL,
  `productionOrder` tinyint NOT NULL,
  `alertLevel` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `ticket` tinyint NOT NULL,
  `worker` tinyint NOT NULL,
  `isPreviousPreparable` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ticketStateToday`
--

DROP TABLE IF EXISTS `ticketStateToday`;
/*!50001 DROP VIEW IF EXISTS `ticketStateToday`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketStateToday` (
  `ticket` tinyint NOT NULL,
  `state` tinyint NOT NULL,
  `productionOrder` tinyint NOT NULL,
  `alertLevel` tinyint NOT NULL,
  `worker` tinyint NOT NULL,
  `code` tinyint NOT NULL,
  `updated` tinyint NOT NULL,
  `isPicked` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `ticketTracking`
--

DROP TABLE IF EXISTS `ticketTracking`;
/*!50001 DROP VIEW IF EXISTS `ticketTracking`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ticketTracking` (
  `id` tinyint NOT NULL,
  `stateFk` tinyint NOT NULL,
  `created` tinyint NOT NULL,
  `ticketFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `ticketTrolley`
--

DROP TABLE IF EXISTS `ticketTrolley`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketTrolley` (
  `ticket` int(11) NOT NULL,
  `labelCount` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ticket`),
  CONSTRAINT `fk_ticketTrolley_vs_ticket` FOREIGN KEY (`ticket`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketUpdateAction`
--

DROP TABLE IF EXISTS `ticketUpdateAction`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketUpdateAction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='En esta tabla pondremos las distintas opciones que se ofrecen al comecial o al cliente al cambiar alguno de los parametros básicos de un ticket';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `ticketWeekly`
--

DROP TABLE IF EXISTS `ticketWeekly`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ticketWeekly` (
  `ticketFk` int(11) NOT NULL AUTO_INCREMENT,
  `weekDay` tinyint(1) NOT NULL COMMENT 'funcion de mysql Lunes = 0, Domingo = 6\nShipped, dia de preparacion del pedido',
  `agencyModeFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`ticketFk`),
  KEY `agencyModeFk_idx` (`agencyModeFk`),
  CONSTRAINT `Id_Ticket_fk` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `agencyModeFk` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `till`
--

DROP TABLE IF EXISTS `till`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `till` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `isAccountable` tinyint(1) NOT NULL DEFAULT '0',
  `serie` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  `concept` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `in` decimal(10,2) DEFAULT NULL,
  `out` decimal(10,2) DEFAULT NULL,
  `bankFk` int(11) DEFAULT '1',
  `workerFk` int(10) unsigned DEFAULT NULL,
  `companyFk` smallint(5) unsigned DEFAULT '442' COMMENT 'kakear',
  `isLinked` tinyint(4) DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `isOk` tinyint(4) NOT NULL DEFAULT '0',
  `warehouseFk` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'to kak\\n',
  `isConciliate` tinyint(4) NOT NULL DEFAULT '0',
  `supplierAccountFk` mediumint(8) unsigned NOT NULL,
  `calculatedCode` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `InForeignValue` decimal(10,2) DEFAULT NULL,
  `OutForeignValue` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_calculated_UNIQUE` (`calculatedCode`),
  KEY `CajasCajafecha` (`dated`),
  KEY `Id_Banco` (`bankFk`),
  KEY `Id_Trabajador` (`workerFk`),
  KEY `empresa_id` (`companyFk`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `fk_Cajas_Proveedores_account1_idx` (`supplierAccountFk`),
  CONSTRAINT `till_ibfk_2` FOREIGN KEY (`bankFk`) REFERENCES `accounting` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `till_ibfk_3` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`till_beforeInsert`
	BEFORE INSERT ON `till`
	FOR EACH ROW
BEGIN
	IF IFNULL(NEW.concept,"") = "" THEN
		CALL util.throw ('Error. El concepto esta vacío');
    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 */ ;

--
-- Table structure for table `tillConfig`
--

DROP TABLE IF EXISTS `tillConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tillConfig` (
  `id` int(11) NOT NULL,
  `openingBalance` decimal(10,2) NOT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `time`
--

DROP TABLE IF EXISTS `time`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `time` (
  `dated` date NOT NULL,
  `period` int(6) NOT NULL,
  `month` int(2) NOT NULL,
  `year` int(4) NOT NULL,
  `day` int(2) NOT NULL,
  `week` int(2) NOT NULL,
  `yearMonth` int(6) NOT NULL,
  `salesYear` int(4) NOT NULL COMMENT 'año para los calculos de las comisiones ventas',
  PRIMARY KEY (`dated`),
  KEY `day_index` (`day`) USING HASH,
  KEY `week_index` (`week`) USING HASH,
  KEY `year_index` (`year`) USING HASH,
  KEY `month_index` (`month`) USING HASH,
  KEY `periodo` (`period`) USING HASH,
  KEY `yearMonth` (`yearMonth`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Tabla de referencia para las semanas, años y meses';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`time_AFTER_UPDATE`
	AFTER UPDATE ON `time`
	FOR EACH ROW
BEGIN
	/*INSERT INTO vn.mail SET
			`sender` = 'jgallego@verdnatura.es',
			`replyTo` = 'jgallego@verdnatura.es',
			`subject` = 'tabla time modificada',
			`body` = CONCAT(account.myUser_getName(), ' ha modificado la tabla time ',
				NEW.`dated`);*/
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 */ ;

--
-- Table structure for table `town`
--

DROP TABLE IF EXISTS `town`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `town` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `provinceFk` smallint(6) unsigned NOT NULL,
  `geoFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_idx` (`name`),
  KEY `townProvinceFk` (`provinceFk`),
  CONSTRAINT `townProvinceFk` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`town_beforeInsert`
	BEFORE INSERT ON `town`
	FOR EACH ROW
BEGIN
    SET NEW.geoFk = zoneGeo_new('town', NEW.`name`,
		(SELECT geoFk FROM province WHERE id = NEW.provinceFk));
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`.`town_beforeUpdate`
	BEFORE UPDATE ON `town`
	FOR EACH ROW
BEGIN
	-- IF !(OLD.geoFk <=> NEW.geoFk) THEN
	-- 	CALL zoneGeo_throwNotEditable;
	-- 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`.`town_afterUpdate`
	AFTER UPDATE ON `town`
	FOR EACH ROW
BEGIN
	IF !(OLD.provinceFk <=> NEW.provinceFk) THEN
		CALL zoneGeo_setParent(NEW.geoFk,
			(SELECT geoFk FROM province WHERE id = NEW.provinceFk));
	END IF;

	IF !(OLD.`name` <=> NEW.`name`) THEN
		UPDATE zoneGeo SET `name` = NEW.`name`
			WHERE id = NEW.geoFk;
	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`.`town_afterDelete`
	AFTER DELETE ON `town`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_delete(OLD.geoFk);
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 */ ;

--
-- Temporary table structure for view `tr2`
--

DROP TABLE IF EXISTS `tr2`;
/*!50001 DROP VIEW IF EXISTS `tr2`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `tr2` (
  `id` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `shipmentHour` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `landingHour` tinyint NOT NULL,
  `warehouseInFk` tinyint NOT NULL,
  `warehouseOutFk` tinyint NOT NULL,
  `agencyFk` tinyint NOT NULL,
  `ref` tinyint NOT NULL,
  `isDelivered` tinyint NOT NULL,
  `isReceived` tinyint NOT NULL,
  `m3` tinyint NOT NULL,
  `kg` tinyint NOT NULL,
  `cargoSupplierFk` tinyint NOT NULL,
  `totalEntries` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `traceabilityBuy`
--

DROP TABLE IF EXISTS `traceabilityBuy`;
/*!50001 DROP VIEW IF EXISTS `traceabilityBuy`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `traceabilityBuy` (
  `buyFk` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `landed` tinyint NOT NULL,
  `warehouseName` tinyint NOT NULL,
  `entryFk` tinyint NOT NULL,
  `supplierName` tinyint NOT NULL,
  `itemFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `traceabilitySale`
--

DROP TABLE IF EXISTS `traceabilitySale`;
/*!50001 DROP VIEW IF EXISTS `traceabilitySale`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `traceabilitySale` (
  `ticketFk` tinyint NOT NULL,
  `buyFk` tinyint NOT NULL,
  `shipped` tinyint NOT NULL,
  `nickname` tinyint NOT NULL,
  `quantity` tinyint NOT NULL,
  `worker` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `train`
--

DROP TABLE IF EXISTS `train`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `train` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Define la configuración de los carros que se utilizan para sacar pedidos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `trainingCenter`
--

DROP TABLE IF EXISTS `trainingCenter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `trainingCenter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `trainingCourse`
--

DROP TABLE IF EXISTS `trainingCourse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `trainingCourse` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `trainingCourseTypeFk` int(11) NOT NULL,
  `centerFk` int(11) DEFAULT NULL,
  `started` datetime NOT NULL,
  `ended` datetime NOT NULL,
  `invoice` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `amount` double DEFAULT NULL,
  `remark` longtext COLLATE utf8_unicode_ci,
  `hasDiscount` tinyint(1) NOT NULL DEFAULT '0',
  `hasDiploma` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `frgnWorker_idx` (`workerFk`),
  KEY `frgnCenter_idx` (`centerFk`),
  KEY `frgnTrainingCourseType_idx` (`trainingCourseTypeFk`),
  CONSTRAINT `frgnCenter` FOREIGN KEY (`centerFk`) REFERENCES `trainingCenter` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `frgnTrainingCourseType` FOREIGN KEY (`trainingCourseTypeFk`) REFERENCES `trainingCourseType` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `frgnWorker` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de trabajadores que han realizado una formación';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `trainingCourseType`
--

DROP TABLE IF EXISTS `trainingCourseType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `trainingCourseType` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Lista de las formaciones';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `travel`
--

DROP TABLE IF EXISTS `travel`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `travel` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `shipped` date DEFAULT NULL,
  `shipmentHour` time DEFAULT NULL,
  `landed` date NOT NULL,
  `landingHour` time DEFAULT NULL,
  `warehouseInFk` smallint(6) unsigned DEFAULT NULL,
  `warehouseOutFk` smallint(6) unsigned DEFAULT NULL,
  `agencyFk` int(11) DEFAULT NULL,
  `ref` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isDelivered` tinyint(1) NOT NULL DEFAULT '0',
  `isReceived` tinyint(1) NOT NULL DEFAULT '0',
  `m3` decimal(10,2) unsigned DEFAULT NULL,
  `kg` decimal(10,0) unsigned DEFAULT NULL,
  `cargoSupplierFk` int(11) DEFAULT NULL,
  `totalEntries` tinyint(4) unsigned DEFAULT '0',
  `appointment` datetime DEFAULT NULL,
  `agencyModeFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `shipment_1` (`shipped`,`landed`,`warehouseInFk`,`warehouseOutFk`,`agencyFk`,`agencyModeFk`,`ref`),
  KEY `agency_id` (`agencyFk`),
  KEY `shipment` (`shipped`),
  KEY `landing` (`landed`),
  KEY `warehouse_landing` (`warehouseInFk`,`landed`),
  KEY `warehouse_out_shipment` (`warehouseOutFk`,`shipped`),
  KEY `travel_ibfk_4_idx` (`cargoSupplierFk`),
  KEY `travel_FK` (`agencyModeFk`),
  CONSTRAINT `travel_FK` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travel_ibfk_1` FOREIGN KEY (`warehouseInFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travel_ibfk_2` FOREIGN KEY (`warehouseOutFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travel_ibfk_3` FOREIGN KEY (`agencyFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`travel_beforeInsert`
	BEFORE INSERT ON `travel`
	FOR EACH ROW
BEGIN
	CALL travel_checkDates(NEW.shipped, NEW.landed);

	-- Actualizar agencyFk y agencyModeFk
    IF NEW.agencyFk THEN
        SET NEW.agencyModeFk = NEW.agencyFk;
    END IF;

    IF NEW.agencyModeFk THEN
        SET NEW.agencyFk = NEW.agencyModeFk;
    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`.`travel_beforeUpdate`
	BEFORE UPDATE ON `travel`
	FOR EACH ROW
BEGIN
	IF !(NEW.landed <=> OLD.landed)
	OR !(NEW.shipped <=> OLD.shipped) THEN
		CALL travel_checkDates(NEW.shipped, NEW.landed);
	END IF;

	 -- Actualizar agencyFk y agencyModeFk
    IF !(NEW.agencyFk <=> OLD.agencyFk)THEN
        SET NEW.agencyModeFk = NEW.agencyFk;
    END IF;

    IF !(NEW.agencyModeFk <=> OLD.agencyModeFk) THEN
        SET NEW.agencyFk = NEW.agencyModeFk;
    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`.`travel_afterUpdate`
	AFTER UPDATE ON `travel`
	FOR EACH ROW
BEGIN
	CALL stock.log_add('travel', NEW.id, OLD.id);

    IF !(NEW.shipped <=> OLD.shipped) THEN
		UPDATE entry 
            SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
			WHERE travelFk = NEW.id;
    END IF;
/*
	IF !(ABS(NEW.isDelivered) <=> ABS(OLD.isDelivered))
    THEN
		INSERT INTO vn2008.travel_dits SET
			idaccion_dits = 89,
			Id_Trabajador = account.myUser_getId(),
            Id_Ticket = NEW.id,
            value_old = OLD.isDelivered,
            value_new = NEW.isDelivered;
	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 */ ;

--
-- Table structure for table `travelClonedWeekly`
--

DROP TABLE IF EXISTS `travelClonedWeekly`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `travelClonedWeekly` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `weekStart` tinyint(3) unsigned NOT NULL,
  `weekEnd` tinyint(3) unsigned NOT NULL,
  `warehouseOutFk` smallint(6) unsigned NOT NULL,
  `warehouseInFk` smallint(6) unsigned NOT NULL,
  `agencyModeFk` int(11) NOT NULL,
  `weekDay` tinyint(3) unsigned NOT NULL,
  `duration` tinyint(3) unsigned NOT NULL,
  `ref` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `supplierFk` int(11) DEFAULT NULL,
  `kg` decimal(10,0) unsigned DEFAULT NULL,
  `travelFk` int(11) unsigned DEFAULT NULL COMMENT 'Travel origen para clonar ademas sus entradas',
  PRIMARY KEY (`id`),
  KEY `travelClonedWeekly_FK` (`warehouseOutFk`),
  KEY `travelClonedWeekly_FK_1` (`warehouseInFk`),
  KEY `travelClonedWeekly_FK_2` (`agencyModeFk`),
  KEY `travelClonedWeekly_FK_3` (`supplierFk`),
  KEY `travelClonedWeekly_FK_4` (`travelFk`),
  CONSTRAINT `travelClonedWeekly_FK` FOREIGN KEY (`warehouseOutFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travelClonedWeekly_FK_1` FOREIGN KEY (`warehouseInFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travelClonedWeekly_FK_2` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travelClonedWeekly_FK_3` FOREIGN KEY (`supplierFk`) REFERENCES `supplier` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `travelClonedWeekly_FK_4` FOREIGN KEY (`travelFk`) REFERENCES `travel` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `travelLog`
--

DROP TABLE IF EXISTS `travelLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `travelLog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `originFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `travelLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `travel` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `travelLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `travelObservation`
--

DROP TABLE IF EXISTS `travelObservation`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `travelObservation` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(11) NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_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=utf8 COLLATE=utf8_unicode_ci COMMENT='Travels to recalc it''s entry count';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `travelThermograph`
--

DROP TABLE IF EXISTS `travelThermograph`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `travelThermograph` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `thermographFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `created` date NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `travelFk` int(10) unsigned DEFAULT NULL,
  `temperature__` enum('COOL','WARM','DRY') COLLATE utf8_unicode_ci DEFAULT NULL,
  `result` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `dmsFk` int(11) DEFAULT NULL,
  `temperatureFk` varchar(10) CHARACTER SET utf8 DEFAULT 'cool' COMMENT 'En la versión de Agosto de Salix se empezará a usar este campo y se actualizaran los anteriores mirando temperature.',
  PRIMARY KEY (`id`),
  KEY `thermograph_fk_idx` (`thermographFk`),
  KEY `gestdoc_fk_idx` (`dmsFk`),
  KEY `travel_id` (`travelFk`),
  KEY `warehouse_id` (`warehouseFk`),
  KEY `travelThermographTemperatureFgn` (`temperatureFk`),
  CONSTRAINT `travelThermographDmsFgn` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travelThermographTemperatureFgn` FOREIGN KEY (`temperatureFk`) REFERENCES `temperature` (`code`),
  CONSTRAINT `travelThermographThermographFgn` FOREIGN KEY (`thermographFk`) REFERENCES `thermograph` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `travelThermographTravelFgn` FOREIGN KEY (`travelFk`) REFERENCES `travel` (`id`),
  CONSTRAINT `travelThermographWarehouseFgn` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Registra cada termografo que se ha introducido en cada travel';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `trolley`
--

DROP TABLE IF EXISTS `trolley`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `trolley` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned DEFAULT NULL,
  `coupled` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `trolley_FK` (`workerFk`),
  CONSTRAINT `trolley_FK` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `user`
--

DROP TABLE IF EXISTS `user`;
/*!50001 DROP VIEW IF EXISTS `user`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `user` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `password` tinyint NOT NULL,
  `role` tinyint NOT NULL,
  `active` tinyint NOT NULL,
  `recoverPass` tinyint NOT NULL,
  `lastPassChange` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `userConfig`
--

DROP TABLE IF EXISTS `userConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userConfig` (
  `userFk` int(10) unsigned NOT NULL,
  `warehouseFk` smallint(6) DEFAULT NULL,
  `companyFk` smallint(5) unsigned DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `darkMode` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Salix interface dark mode',
  PRIMARY KEY (`userFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Configuración de usuario en Salix';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userLog`
--

DROP TABLE IF EXISTS `userLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `userLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `userLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userPhone`
--

DROP TABLE IF EXISTS `userPhone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userPhone` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) unsigned NOT NULL,
  `typeFk` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `phone` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UserFk_Phone` (`userFk`,`typeFk`,`phone`),
  KEY `fgnTypeFk` (`typeFk`),
  CONSTRAINT `fgnTypeFk` FOREIGN KEY (`typeFk`) REFERENCES `userPhoneType` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `fgnUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `userPhoneType`
--

DROP TABLE IF EXISTS `userPhoneType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `userPhoneType` (
  `code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicle`
--

DROP TABLE IF EXISTS `vehicle`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicle` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `numberPlate` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `model` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `tradeMark` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `companyFk` smallint(5) unsigned NOT NULL DEFAULT '442',
  `m3` double DEFAULT NULL,
  `isActive` tinyint(4) NOT NULL DEFAULT '1',
  `warehouseFk` smallint(6) unsigned DEFAULT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `deliveryPointFk` int(11) DEFAULT '6' COMMENT 'Direccion para Buscaman',
  `isKmTruckRate` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Computar km como camión en el cálculo de salario de reparto',
  `photo` blob,
  `chassis` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'numero de bastidor',
  `fuelTypeFk` int(11) DEFAULT NULL,
  `ppeFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `empresa_id` (`companyFk`),
  KEY `provinceFk_idx` (`warehouseFk`),
  KEY `vehicle_deliveryPointFk_idx` (`deliveryPointFk`),
  KEY `vehicle_FK` (`fuelTypeFk`),
  KEY `vehicle_FK_1` (`ppeFk`),
  CONSTRAINT `provinceFk` FOREIGN KEY (`warehouseFk`) REFERENCES `province` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `vehicle_FK` FOREIGN KEY (`fuelTypeFk`) REFERENCES `fuelType` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `vehicle_FK_1` FOREIGN KEY (`ppeFk`) REFERENCES `ppe` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `vehicle_deliveryPointFk` FOREIGN KEY (`deliveryPointFk`) REFERENCES `deliveryPoint` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `vehicle_ibfk_1` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicleDms`
--

DROP TABLE IF EXISTS `vehicleDms`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicleDms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vehicleFk` int(10) unsigned NOT NULL,
  `dmsFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `vehicleDms_FK` (`vehicleFk`),
  KEY `vehicleDms_FK_1` (`dmsFk`),
  CONSTRAINT `vehicleDms_FK` FOREIGN KEY (`vehicleFk`) REFERENCES `vehicle` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `vehicleDms_FK_1` FOREIGN KEY (`dmsFk`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Gestion documental de vehicle';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicleEvent`
--

DROP TABLE IF EXISTS `vehicleEvent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicleEvent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `started` date DEFAULT NULL,
  `finished` date DEFAULT NULL,
  `vehicleStateFk` int(11) DEFAULT NULL,
  `description` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `vehicleFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `vehicleEvent_FK` (`vehicleStateFk`),
  KEY `vehicleEvent_FK_1` (`userFk`),
  CONSTRAINT `vehicleEvent_FK` FOREIGN KEY (`vehicleStateFk`) REFERENCES `vehicleState` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `vehicleEvent_FK_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicleInvoiceIn`
--

DROP TABLE IF EXISTS `vehicleInvoiceIn`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicleInvoiceIn` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vehicleFk` int(10) unsigned NOT NULL,
  `invoiceInFk` mediumint(8) unsigned NOT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `vehicleInvoiceIn_FK` (`vehicleFk`),
  KEY `vehicleInvoiceIn_FK_1` (`invoiceInFk`),
  CONSTRAINT `vehicleInvoiceIn_FK` FOREIGN KEY (`vehicleFk`) REFERENCES `vehicle` (`id`),
  CONSTRAINT `vehicleInvoiceIn_FK_1` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicleNotes`
--

DROP TABLE IF EXISTS `vehicleNotes`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicleNotes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vehicleFk` int(10) unsigned NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `note` text COLLATE utf8_unicode_ci NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `vehicleNotes_FK_1` (`userFk`),
  KEY `vehicleNotes_FK` (`vehicleFk`),
  CONSTRAINT `vehicleNotes_FK` FOREIGN KEY (`vehicleFk`) REFERENCES `vehicle` (`id`),
  CONSTRAINT `vehicleNotes_FK_1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `vehicleState`
--

DROP TABLE IF EXISTS `vehicleState`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vehicleState` (
  `id` int(11) NOT NULL,
  `state` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `volumeConfig`
--

DROP TABLE IF EXISTS `volumeConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `volumeConfig` (
  `palletM3` decimal(10,2) DEFAULT NULL COMMENT 'metros cúbicos',
  `trolleyM3` decimal(10,2) DEFAULT NULL COMMENT 'metros cúbicos',
  `dutchCompressionRate` double NOT NULL DEFAULT '1',
  `standardFlowerBox` int(11) NOT NULL COMMENT 'en litros',
  `minCompressionRate` decimal(10,2) DEFAULT '0.30' COMMENT 'minimo permitido por la empresa',
  `ccLength` int(11) NOT NULL DEFAULT '130' COMMENT 'longitud útil para la carga de un CC, en cm',
  `ccWidth` int(11) NOT NULL DEFAULT '60' COMMENT 'ancho útil para la carga en un CC, en cm',
  `sorterPallet_m3` decimal(5,1) NOT NULL DEFAULT '2.0' COMMENT 'volumen minimo para extraer pallet del sorter',
  `minTicketVolume` int(11) NOT NULL DEFAULT '75' COMMENT 'volumen mínimo, en litros, para que un pedido sea preparable',
  `shelveVolume` int(11) DEFAULT '200' COMMENT 'volumen en litros de una bandeja standard, a efectos de los sacadores',
  `minTicketValue` int(11) NOT NULL DEFAULT '50'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='almacena el valor standard para volumenes convencionales de Verdnatura, en metros cúbicos';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `wagon`
--

DROP TABLE IF EXISTS `wagon`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wagon` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `volume` int(11) NOT NULL DEFAULT '150' COMMENT 'Volumen en litros',
  `plate` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Matrícula',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `wagonVolumetry`
--

DROP TABLE IF EXISTS `wagonVolumetry`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `wagonVolumetry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `level` int(10) unsigned NOT NULL DEFAULT '0',
  `lines` int(10) unsigned NOT NULL DEFAULT '1',
  `liters` int(10) unsigned NOT NULL DEFAULT '0',
  `height` int(10) unsigned NOT NULL DEFAULT '20',
  `wagonFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `wagonVolumetry_FK` (`wagonFk`),
  CONSTRAINT `wagonVolumetry_FK` FOREIGN KEY (`wagonFk`) REFERENCES `wagon` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `warehouse`
--

DROP TABLE IF EXISTS `warehouse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `warehouse` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `isFeedStock` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `addressName` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `delay` double NOT NULL DEFAULT '0.004',
  `hasAvailable` tinyint(4) NOT NULL DEFAULT '0',
  `isForTicket` tinyint(2) unsigned zerofill NOT NULL DEFAULT '00',
  `countryFk` mediumint(8) unsigned NOT NULL DEFAULT '1',
  `labelZone` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'almacenes donde hay produccion',
  `hasComission` tinyint(4) NOT NULL DEFAULT '0',
  `isInventory` tinyint(2) NOT NULL DEFAULT '0',
  `isComparative` tinyint(2) NOT NULL DEFAULT '0' COMMENT 'Si esta a true,en la comparativa muestra el stock de este almacen, cuando no se especifica almacen.',
  `valuatedInventory` tinyint(2) NOT NULL DEFAULT '0' COMMENT 'Determina si se incluye en el informe de inventario valorado',
  `isManaged` tinyint(2) NOT NULL DEFAULT '0' COMMENT 'Se añaden los cubos de expedition a la tabla ticketPackaging',
  `hasConfectionTeam` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `hasStowaway` tinyint(1) NOT NULL DEFAULT '0',
  `hasDms` tinyint(1) NOT NULL DEFAULT '0',
  `pickUpAgencyModeFk` int(11) DEFAULT NULL,
  `isBuyerToBeEmailed` tinyint(2) NOT NULL DEFAULT '0',
  `aliasFk` smallint(5) unsigned DEFAULT NULL,
  `labelReport` int(11) DEFAULT NULL,
  `hasUbications` tinyint(1) NOT NULL DEFAULT '1',
  `hasProduction` tinyint(1) NOT NULL DEFAULT '0',
  `addressFk` int(11) DEFAULT NULL,
  `hasMachine` tinyint(1) NOT NULL DEFAULT '0',
  `isLogiflora` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Este almacén acepta productos de Logiflora',
  `isBionic` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`),
  KEY `Id_Paises` (`countryFk`),
  KEY `isComparativeIdx` (`isComparative`),
  KEY `warehouse_ibfk_1_idx` (`aliasFk`),
  KEY `warehouse_FK` (`addressFk`),
  KEY `warehouse_FK_1` (`pickUpAgencyModeFk`),
  CONSTRAINT `warehouse_FK` FOREIGN KEY (`addressFk`) REFERENCES `address` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `warehouse_FK_1` FOREIGN KEY (`pickUpAgencyModeFk`) REFERENCES `agencyMode` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `warehouse_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`),
  CONSTRAINT `warehouse_ibfk_2` FOREIGN KEY (`aliasFk`) REFERENCES `warehouseAlias` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`warehouse_afterInsert`
	AFTER INSERT ON `warehouse`
	FOR EACH ROW
BEGIN
	IF NEW.isFeedStock THEN
		INSERT INTO warehouseAlias(`name`) VALUES(NEW.`name`);
		INSERT INTO warehouseJoined(warehouseFk, warehouseAliasFk)  
			VALUES(NEW.id,LAST_INSERT_ID());
	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`.`warehouse_afterUpdate`
	AFTER UPDATE ON `warehouse`
	FOR EACH ROW
BEGIN
	IF NEW.isFeedStock IS TRUE and OLD.isFeedStock IS FALSE then
		INSERT INTO warehouseAlias(`name`) VALUES(NEW.`name`);
		INSERT INTO warehouseJoined(warehouseFk, warehouseAliasFk) 
			VALUES(NEW.id,LAST_INSERT_ID());
	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 */ ;

--
-- Table structure for table `warehouseAlias`
--

DROP TABLE IF EXISTS `warehouseAlias`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `warehouseAlias` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workCenter`
--

DROP TABLE IF EXISTS `workCenter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workCenter` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(255) DEFAULT NULL,
  `payrollCenterFk` int(11) DEFAULT NULL COMMENT 'Campo workcenter en A3',
  `counter` bigint(20) DEFAULT NULL,
  `warehouseFk` smallint(6) DEFAULT NULL,
  `street` varchar(255) DEFAULT NULL,
  `geoFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `workCenter_geoFk_idx` (`geoFk`),
  CONSTRAINT `workCenter_geoFk` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workCenterHoliday`
--

DROP TABLE IF EXISTS `workCenterHoliday`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workCenterHoliday` (
  `workCenterFk` int(11) NOT NULL,
  `days` double NOT NULL,
  `year` smallint(6) NOT NULL,
  PRIMARY KEY (`workCenterFk`,`year`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `worker`
--

DROP TABLE IF EXISTS `worker`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `worker` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `firstName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastName` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `sub` int(11) unsigned DEFAULT NULL,
  `photo` blob,
  `phone` varchar(9) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mobileExtension` int(4) DEFAULT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `bossFk` int(11) NOT NULL DEFAULT '103',
  `fiDueDate` datetime DEFAULT NULL,
  `hasMachineryAuthorized` tinyint(2) DEFAULT '0',
  `seniority` date DEFAULT NULL,
  `isTodayRelative` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Para el F11. Calcula los problemas de visiblidad en funcion del dia actual',
  `isF11Allowed` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Usuario autorizado para abrir el F11',
  `sectorFk` int(11) DEFAULT NULL COMMENT 'Sector que tiene asociado el trabajador.',
  `maritalStatus` enum('S','M') COLLATE utf8_unicode_ci NOT NULL,
  `labelerFk` tinyint(3) unsigned DEFAULT NULL,
  `originCountryFk` mediumint(8) unsigned DEFAULT NULL COMMENT 'País de origen',
  `educationLevelFk` smallint(6) DEFAULT NULL,
  `SSN` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `fi` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `isDisable` tinyint(1) NOT NULL DEFAULT '0',
  `isFreelance` tinyint(1) NOT NULL DEFAULT '0',
  `isSsDiscounted` tinyint(1) NOT NULL DEFAULT '0',
  `sex` enum('M','F') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'F' COMMENT 'M Masculino F Femenino',
  PRIMARY KEY (`id`),
  UNIQUE KEY `CodigoTrabajador_UNIQUE` (`code`),
  UNIQUE KEY `user_id_UNIQUE` (`userFk`),
  KEY `sub` (`sub`),
  KEY `boss_idx` (`bossFk`),
  KEY `worker_FK` (`labelerFk`),
  KEY `worker_FK_2` (`educationLevelFk`),
  KEY `worker_FK_1` (`originCountryFk`),
  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_ibfk_1` FOREIGN KEY (`id`) REFERENCES `account`.`user` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerAppTester`
--

DROP TABLE IF EXISTS `workerAppTester`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerAppTester` (
  `workerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`workerFk`),
  KEY `workerAppTester_FK` (`workerFk`),
  CONSTRAINT `workerAppTester_FK_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='La tabla incluye usuarios testers que actualizarán a una versión diferente que el resto para testear los cambios nuevos en las app';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerBosses`
--

DROP TABLE IF EXISTS `workerBosses`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerBosses` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `bossFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `workerFk_UNIQUE` (`workerFk`,`bossFk`),
  KEY `fg_worker_worker_idx` (`workerFk`),
  KEY `fg_bossFk_worker_idx` (`bossFk`),
  CONSTRAINT `fg_bossFk_worker` FOREIGN KEY (`bossFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fg_workerFk_worker` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerBusinessDated`
--

DROP TABLE IF EXISTS `workerBusinessDated`;
/*!50001 DROP VIEW IF EXISTS `workerBusinessDated`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerBusinessDated` (
  `dated` tinyint NOT NULL,
  `business_id` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerBusinessType`
--

DROP TABLE IF EXISTS `workerBusinessType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerBusinessType` (
  `id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `isFullTime` tinyint(1) NOT NULL DEFAULT '1',
  `isPermanent` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Contrato fijo',
  `hasHolidayEntitlement` tinyint(1) DEFAULT '1' COMMENT 'Tiene derecho a vacaciones',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerCalendar`
--

DROP TABLE IF EXISTS `workerCalendar`;
/*!50001 DROP VIEW IF EXISTS `workerCalendar`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerCalendar` (
  `businessFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `absenceTypeFk` tinyint NOT NULL,
  `dated` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerClockLog`
--

DROP TABLE IF EXISTS `workerClockLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerClockLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(11) NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `action` set('insert','update','delete','select') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `logWorkerClockoriginFk` (`originFk`),
  KEY `logWorkerClockuserFk` (`userFk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerConfig__`
--

DROP TABLE IF EXISTS `workerConfig__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerConfig__` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `defaultWorkerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `defaultWorkerFk` (`defaultWorkerFk`),
  CONSTRAINT `workerConfig___ibfk_1` FOREIGN KEY (`defaultWorkerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerDepartment`
--

DROP TABLE IF EXISTS `workerDepartment`;
/*!50001 DROP VIEW IF EXISTS `workerDepartment`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerDepartment` (
  `workerFk` tinyint NOT NULL,
  `departmentFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerDisableExcluded`
--

DROP TABLE IF EXISTS `workerDisableExcluded`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerDisableExcluded` (
  `workerFk` int(10) unsigned NOT NULL,
  `dated` date DEFAULT NULL,
  PRIMARY KEY (`workerFk`),
  CONSTRAINT `workerDisableExcludedFk1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='No se deshabilitan hasta la fecha especificada';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerDistributionCategory`
--

DROP TABLE IF EXISTS `workerDistributionCategory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerDistributionCategory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `category` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `workerDistributionCategory_workerFk_idx` (`workerFk`),
  CONSTRAINT `workerDistributionCategory_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerDocument`
--

DROP TABLE IF EXISTS `workerDocument`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerDocument` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `worker` int(10) unsigned DEFAULT NULL,
  `document` int(11) DEFAULT NULL,
  `isReadableByWorker` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Indica si el empleado tiene permiso para acceder al documento',
  PRIMARY KEY (`id`),
  KEY `workerDocument_ibfk_1` (`worker`),
  KEY `workerDocument_ibfk_2` (`document`),
  CONSTRAINT `workerDocument_ibfk_1` FOREIGN KEY (`worker`) REFERENCES `worker` (`userFk`) ON UPDATE CASCADE,
  CONSTRAINT `workerDocument_ibfk_2` FOREIGN KEY (`document`) REFERENCES `dms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerEmergencyBoss`
--

DROP TABLE IF EXISTS `workerEmergencyBoss`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerEmergencyBoss` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `value` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Table to save all responsible people phones',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerHourPrice`
--

DROP TABLE IF EXISTS `workerHourPrice`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerHourPrice` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dated` date NOT NULL,
  `holidayInc` decimal(4,2) DEFAULT NULL,
  `nightInc` decimal(4,2) DEFAULT NULL,
  `extraInc` decimal(4,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Recoge los acuerdos de los distintos convenios';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerIrpf`
--

DROP TABLE IF EXISTS `workerIrpf`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerIrpf` (
  `workerFk` int(10) unsigned NOT NULL,
  `spouseNif` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `geographicMobilityDate` date DEFAULT NULL,
  `disabilityGradeFk` int(11) DEFAULT NULL,
  `isDependend` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Acredita la necesidad de ayuda de terceras personas o movilidad reducida',
  `familySituation` enum('1','2','3') COLLATE utf8_unicode_ci DEFAULT '1',
  `spousePension` decimal(10,2) DEFAULT NULL COMMENT 'Apartado 4 - Pensión compensatoria en favor del conyuge ',
  `childPension` decimal(10,2) DEFAULT NULL COMMENT 'Apartado 4 - Anualidades por alimentos en favor de los hijos',
  `hasHousingPaymentBefore` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Apartado 5 - Pagos por adquisición o rehabilitación de la vivienda habitual utilizando financiación ajena, con derecho a deducción del IRPF',
  `hasHousingPaymentAfter` tinyint(1) NOT NULL DEFAULT '0',
  `hasExtendedWorking` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Aprtado 1 - prolongar la actividad laboral',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`workerFk`),
  KEY `workerIrpf_disabilityGradeFk` (`disabilityGradeFk`),
  CONSTRAINT `workerIrpf_disabilityGradeFk` FOREIGN KEY (`disabilityGradeFk`) REFERENCES `disabilityGrade` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `workerIrpf_wokerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Modelo 145 IRPF apartado 1 - 4 y 5 ';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerJourney`
--

DROP TABLE IF EXISTS `workerJourney`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerJourney` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) unsigned NOT NULL,
  `dated` date NOT NULL,
  `total` decimal(5,2) NOT NULL DEFAULT '0.00',
  `priceOrdinaryHour` decimal(5,2) NOT NULL DEFAULT '0.00',
  `nocturn` decimal(5,2) NOT NULL DEFAULT '0.00',
  `priceNocturnHour` decimal(5,2) NOT NULL DEFAULT '0.00',
  `holiday` decimal(5,2) NOT NULL DEFAULT '0.00',
  `priceHolidayHour` decimal(5,2) NOT NULL DEFAULT '0.00',
  `lunch` decimal(5,2) NOT NULL DEFAULT '0.00',
  `priceExtraHour` decimal(5,2) NOT NULL DEFAULT '0.00',
  `extra` decimal(5,2) NOT NULL DEFAULT '0.00',
  `contractJourney` decimal(5,2) NOT NULL DEFAULT '0.00',
  `priceExtraHoliday` decimal(5,2) NOT NULL DEFAULT '0.00',
  `businessFk` int(11) DEFAULT NULL,
  `isPaid` tinyint(1) NOT NULL DEFAULT '0',
  `isUpdated` tinyint(1) NOT NULL DEFAULT '0',
  `permission` decimal(5,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `userFk_UNIQUE` (`userFk`,`dated`),
  KEY `fk_workerJourney_user_idx` (`userFk`),
  KEY `workerJourney_businessFk_idx` (`businessFk`),
  KEY `workerJourney_dated_idx` (`dated`),
  CONSTRAINT `fk_workerJourney_user` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `workerJourney_businessFk` FOREIGN KEY (`businessFk`) REFERENCES `postgresql`.`business` (`business_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerLabour`
--

DROP TABLE IF EXISTS `workerLabour`;
/*!50001 DROP VIEW IF EXISTS `workerLabour`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerLabour` (
  `businessFk` tinyint NOT NULL,
  `workerFk` tinyint NOT NULL,
  `workCenterFk` tinyint NOT NULL,
  `started` tinyint NOT NULL,
  `ended` tinyint NOT NULL,
  `departmentFk` tinyint NOT NULL,
  `payedHolidays` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerLog`
--

DROP TABLE IF EXISTS `workerLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originFk` int(10) unsigned NOT NULL,
  `userFk` int(10) unsigned NOT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `workerFk_idx` (`originFk`),
  KEY `userFk_idx` (`userFk`),
  CONSTRAINT `userFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `workerFk` FOREIGN KEY (`originFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerMana`
--

DROP TABLE IF EXISTS `workerMana`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerMana` (
  `workerFk` int(10) unsigned NOT NULL,
  `size` int(11) NOT NULL DEFAULT '300',
  `amount` int(11) NOT NULL DEFAULT '0',
  `pricesModifierRate` double NOT NULL DEFAULT '0',
  `isPricesModifierActivated` tinyint(1) NOT NULL DEFAULT '1',
  `minRate` decimal(3,2) NOT NULL DEFAULT '-0.05',
  `maxRate` decimal(3,2) NOT NULL DEFAULT '0.05',
  PRIMARY KEY (`workerFk`),
  KEY `fk_mana_spellers_Trabajadores_idx` (`workerFk`),
  CONSTRAINT `fk_mana_spellers_Trabajadores` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerManaExcluded`
--

DROP TABLE IF EXISTS `workerManaExcluded`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerManaExcluded` (
  `workerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`workerFk`),
  CONSTRAINT `mana_spellers_excluded_fk1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Usuarios que tienen que estar excluidos del cálculo del maná';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerMedia`
--

DROP TABLE IF EXISTS `workerMedia`;
/*!50001 DROP VIEW IF EXISTS `workerMedia`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerMedia` (
  `workerFk` tinyint NOT NULL,
  `mediaValue` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerMistake`
--

DROP TABLE IF EXISTS `workerMistake`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerMistake` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) unsigned NOT NULL,
  `workerMistakeTypeFk` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `workerMistake_fk1_idx` (`userFk`),
  KEY `workerMistake_fk2_idx` (`workerMistakeTypeFk`),
  CONSTRAINT `workerMistake_fk1` FOREIGN KEY (`userFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `workerMistake_fk2` FOREIGN KEY (`workerMistakeTypeFk`) REFERENCES `workerMistakeType` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerMistakeType`
--

DROP TABLE IF EXISTS `workerMistakeType`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerMistakeType` (
  `code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerRelatives`
--

DROP TABLE IF EXISTS `workerRelatives`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerRelatives` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `isDescendant` tinyint(1) DEFAULT '1' COMMENT 'Descendientes - Ascendientes',
  `disabilityGradeFk` int(11) DEFAULT NULL,
  `birthed` int(4) NOT NULL,
  `adoptionYear` int(4) DEFAULT NULL COMMENT 'Solo en el caso de descendientes',
  `isDependend` tinyint(1) DEFAULT '0',
  `isJointCustody` tinyint(1) DEFAULT '0' COMMENT 'Solo en el caso de descendientes',
  `updated` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `workerRelatives_disabilityGradeFk` (`disabilityGradeFk`),
  KEY `workerRelatives_workerFk` (`workerFk`),
  CONSTRAINT `workerRelatives_disabilityGradeFk` FOREIGN KEY (`disabilityGradeFk`) REFERENCES `disabilityGrade` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `workerRelatives_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `workerIrpf` (`workerFk`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Modelo 145 IRPF apartado 2 y 3';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerShelving`
--

DROP TABLE IF EXISTS `workerShelving`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerShelving` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `shelvingFk` varchar(10) CHARACTER SET utf8 NOT NULL,
  `collectionFk` int(11) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `workerShelving_shelving_fk` (`shelvingFk`),
  KEY `workerShelving_FK` (`workerFk`),
  KEY `workerShelving_FK_1` (`collectionFk`),
  CONSTRAINT `workerShelving_FK` FOREIGN KEY (`collectionFk`) REFERENCES `collection` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `workerShelving_shelving_fk` FOREIGN KEY (`shelvingFk`) REFERENCES `shelving` (`code`) ON UPDATE CASCADE,
  CONSTRAINT `workerShelving_worker_fk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='utilizaremos el id para establecer la prioridad de los carros a asignar';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerSpeedExpedition`
--

DROP TABLE IF EXISTS `workerSpeedExpedition`;
/*!50001 DROP VIEW IF EXISTS `workerSpeedExpedition`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerSpeedExpedition` (
  `ticketFk` tinyint NOT NULL,
  `litros` tinyint NOT NULL,
  `literLastHour` tinyint NOT NULL,
  `litersByMinute` tinyint NOT NULL,
  `workerCode` tinyint NOT NULL,
  `cajas` tinyint NOT NULL,
  `warehouseFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `workerSpeedSaleTracking`
--

DROP TABLE IF EXISTS `workerSpeedSaleTracking`;
/*!50001 DROP VIEW IF EXISTS `workerSpeedSaleTracking`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerSpeedSaleTracking` (
  `warehouseFk` tinyint NOT NULL,
  `accion` tinyint NOT NULL,
  `workerCode` tinyint NOT NULL,
  `sumaLitros` tinyint NOT NULL,
  `started` tinyint NOT NULL,
  `finished` tinyint NOT NULL,
  `sumaLitrosLastHour` tinyint NOT NULL,
  `litersByMinute` tinyint NOT NULL,
  `departmentName` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerTeam`
--

DROP TABLE IF EXISTS `workerTeam`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTeam` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `team` int(11) NOT NULL,
  `workerFk` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_idx` (`workerFk`),
  KEY `team_idx` (`team`),
  CONSTRAINT `user_team` FOREIGN KEY (`workerFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerTeamCollegues`
--

DROP TABLE IF EXISTS `workerTeamCollegues`;
/*!50001 DROP VIEW IF EXISTS `workerTeamCollegues`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerTeamCollegues` (
  `workerFk` tinyint NOT NULL,
  `collegueFk` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workerTimeControl`
--

DROP TABLE IF EXISTS `workerTimeControl`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) unsigned NOT NULL,
  `timed` datetime NOT NULL,
  `manual` tinyint(4) NOT NULL DEFAULT '0',
  `order` int(11) DEFAULT NULL,
  `warehouseFk` smallint(6) unsigned DEFAULT NULL,
  `direction` enum('in','out','middle') COLLATE utf8_unicode_ci DEFAULT 'middle',
  `isSendMail` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Fichadas generadas autómaticamente con el procedimiento vn.workerTimeControl_sendMail',
  PRIMARY KEY (`id`),
  UNIQUE KEY `userFk_Timed_uniq` (`userFk`,`timed`),
  KEY `warehouseFkfk1_idx` (`warehouseFk`),
  KEY `timed_idx` (`timed`),
  CONSTRAINT `warehouseFk_1` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `workerTimeControl_fk1` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Fichadas';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `vn`.`workerTimeControl_AI`
	AFTER INSERT ON `workerTimeControl`
	FOR EACH ROW
BEGIN
	IF NEW.timed > DATE_ADD(NOW(), INTERVAL 1 DAY) THEN 
		CALL util.throw('date in the future');
	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 */ ;

--
-- Table structure for table `workerTimeControlConfig`
--

DROP TABLE IF EXISTS `workerTimeControlConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlConfig` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dayBreak` int(11) NOT NULL,
  `dayBreakDriver` int(11) NOT NULL,
  `shortWeekBreak` int(11) NOT NULL,
  `longWeekBreak` int(11) NOT NULL,
  `weekScope` int(11) NOT NULL,
  `mailPass` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailHost` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailSuccessFolder` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailErrorFolder` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailUser` varchar(45) COLLATE utf8_bin NOT NULL,
  `minHoursToBreak` decimal(5,2) unsigned NOT NULL COMMENT 'Horas mínimas que se deben trabajar para añadir descanso remunerado',
  `breakHours` decimal(5,2) unsigned NOT NULL COMMENT 'Descanso remunerado',
  `hoursCompleteWeek` int(10) unsigned NOT NULL COMMENT 'Horas a realizar por semana para que se considere jornada completa',
  `startNightlyHours` time NOT NULL,
  `endNightlyHours` time NOT NULL,
  `maxTimePerDay` int(11) unsigned NOT NULL COMMENT 'Maximo tiempo transcurrido en segundos desde que se inicia la jornada hasta que se termina',
  `breakTime` int(11) DEFAULT NULL COMMENT 'Tiempo de descanso expresado en segundos',
  `timeToBreakTime` int(11) DEFAULT NULL COMMENT 'Tiempo mínimo que se debe trabajar para añadir descanso, expresado en segundos',
  `dayMaxTime` int(11) DEFAULT NULL COMMENT 'Tiempo máximo desde la entrada hasta la salida, expresado en segundos',
  `shortWeekDays` int(11) DEFAULT NULL COMMENT 'Días a tener en cuenta para calcular el descanso corto',
  `longWeekDays` int(11) DEFAULT NULL COMMENT 'Días a tener en cuenta para calcular el descanso largo',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='All values in seconds';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlConfig_`
--

DROP TABLE IF EXISTS `workerTimeControlConfig_`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlConfig_` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  `host` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `warehouseFk_1_idx` (`warehouseFk`),
  CONSTRAINT `warehouseFk_2` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlLog`
--

DROP TABLE IF EXISTS `workerTimeControlLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlLog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userFk` int(10) NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `description` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Log de fichadas, se rellena cuando el fichador(tablet) no autoriza el fichaje (PROC:vn.workerTimeControl_check)';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlMail`
--

DROP TABLE IF EXISTS `workerTimeControlMail`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlMail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `workerFk` int(10) unsigned NOT NULL,
  `year` int(4) NOT NULL,
  `week` int(2) NOT NULL,
  `state` enum('SENDED','CONFIRMED','REVISE') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'SENDED',
  `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Fecha/hora último cambio de estado',
  `sendedCounter` int(3) NOT NULL DEFAULT '1' COMMENT 'Número de veces que se ha enviado el correo',
  `emailResponse` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  UNIQUE KEY `workerFk_UNIQUE` (`workerFk`,`year`,`week`),
  KEY `workerFk_idx` (`workerFk`),
  CONSTRAINT `workerTimeControlMail_workerFk` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Guarda las respuestas de mail de los correos generados automáticamente por la procedimiento workerTimeControl_sendMail';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlParams`
--

DROP TABLE IF EXISTS `workerTimeControlParams`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlParams` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dayBreak` int(11) NOT NULL,
  `weekBreak` int(11) NOT NULL,
  `weekScope` int(11) NOT NULL,
  `dayWorkMax` int(11) NOT NULL,
  `dayStayMax` int(11) NOT NULL,
  `weekMaxBreak` int(11) NOT NULL,
  `weekMaxScope` int(11) NOT NULL,
  `askInOut` int(11) NOT NULL COMMENT 'Tiempo desde la última fichada que determinará si se pregunta al usuario por la dirección de la fichada',
  `mailPass` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailHost` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailSuccessFolder` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailErrorFolder` varchar(45) COLLATE utf8_bin NOT NULL,
  `mailUser` varchar(45) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='All values in seconds';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlPin`
--

DROP TABLE IF EXISTS `workerTimeControlPin`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlPin` (
  `workerFk` int(10) unsigned NOT NULL,
  `pin` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`workerFk`),
  CONSTRAINT `workerFk_.1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workerTimeControlSchedule`
--

DROP TABLE IF EXISTS `workerTimeControlSchedule`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workerTimeControlSchedule` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `time` time DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `punique_trhf` (`time`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `workerTimeControlUserInfo`
--

DROP TABLE IF EXISTS `workerTimeControlUserInfo`;
/*!50001 DROP VIEW IF EXISTS `workerTimeControlUserInfo`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerTimeControlUserInfo` (
  `userFk` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `surname` tinyint NOT NULL,
  `user` tinyint NOT NULL,
  `password` tinyint NOT NULL,
  `bcryptPassword` tinyint NOT NULL,
  `departmentFk` tinyint NOT NULL,
  `dni` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `workerTimeControlWorking`
--

DROP TABLE IF EXISTS `workerTimeControlWorking`;
/*!50001 DROP VIEW IF EXISTS `workerTimeControlWorking`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerTimeControlWorking` (
  `userFk` tinyint NOT NULL,
  `timed` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `surname` tinyint NOT NULL,
  `phone` tinyint NOT NULL,
  `workerPhone` tinyint NOT NULL,
  `department` tinyint NOT NULL,
  `workerCenter` tinyint NOT NULL,
  `maxOrder` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `workerTimeJourneyNG`
--

DROP TABLE IF EXISTS `workerTimeJourneyNG`;
/*!50001 DROP VIEW IF EXISTS `workerTimeJourneyNG`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerTimeJourneyNG` (
  `userFk` tinyint NOT NULL,
  `dated` tinyint NOT NULL,
  `Journey` tinyint NOT NULL,
  `dayName` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `firstname` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Temporary table structure for view `workerWithoutTractor`
--

DROP TABLE IF EXISTS `workerWithoutTractor`;
/*!50001 DROP VIEW IF EXISTS `workerWithoutTractor`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `workerWithoutTractor` (
  `workerFk` tinyint NOT NULL,
  `Trabajador` tinyint NOT NULL,
  `Colecciones` tinyint NOT NULL,
  `created` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `workers20190711`
--

DROP TABLE IF EXISTS `workers20190711`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711` (
  `person_id` int(11) NOT NULL DEFAULT '0',
  `business_id` int(11) NOT NULL DEFAULT '0',
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha_Inicio` date DEFAULT NULL,
  `Fecha_Fin` date DEFAULT NULL,
  `departamento` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `Jornada_Semanal` smallint(6) DEFAULT NULL,
  `Codigo_Contrato` int(11) DEFAULT NULL,
  `userFk` int(11) NOT NULL,
  PRIMARY KEY (`person_id`),
  UNIQUE KEY `userFk_UNIQUE` (`userFk`),
  UNIQUE KEY `nif_UNIQUE` (`nif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasAbril`
--

DROP TABLE IF EXISTS `workers20190711_FichadasAbril`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasAbril` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasJulio11`
--

DROP TABLE IF EXISTS `workers20190711_FichadasJulio11`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasJulio11` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasJunio`
--

DROP TABLE IF EXISTS `workers20190711_FichadasJunio`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasJunio` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasMayo`
--

DROP TABLE IF EXISTS `workers20190711_FichadasMayo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasMayo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_FichadasOctubre`
--

DROP TABLE IF EXISTS `workers20190711_FichadasOctubre`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_FichadasOctubre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workers20190711_Garrote`
--

DROP TABLE IF EXISTS `workers20190711_Garrote`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workers20190711_Garrote` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `person_id` int(11) NOT NULL DEFAULT '0',
  `nif` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `Apellidos` varchar(60) CHARACTER SET utf8 NOT NULL,
  `Nombre` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `Fecha` date DEFAULT NULL,
  `Hora` int(2) DEFAULT NULL,
  `Minuto` int(2) DEFAULT NULL,
  `sumable` double DEFAULT NULL,
  `jornada` decimal(5,2) NOT NULL DEFAULT '8.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `workingHours`
--

DROP TABLE IF EXISTS `workingHours`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `workingHours` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `timeIn` datetime NOT NULL,
  `timeOut` datetime DEFAULT NULL,
  `userId` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_working_hour_idx` (`userId`),
  CONSTRAINT `user_working_hour` FOREIGN KEY (`userId`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Almacena horas de Entrada y de Salida del personal';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`workingHoursBeforeInsert`
	BEFORE INSERT ON `workingHours`
	FOR EACH ROW
BEGIN
	IF (SELECT COUNT(*) FROM workingHours WHERE userId = NEW.userId AND DATE(timeIn) = CURDATE()) > 0 THEN
		CALL util.throw ('ALREADY_LOGGED');
    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 */ ;

--
-- Table structure for table `zone`
--

DROP TABLE IF EXISTS `zone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zone` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `hour` datetime NOT NULL,
  `warehouseFk__` smallint(6) unsigned DEFAULT NULL,
  `agencyModeFk` int(11) NOT NULL,
  `travelingDays` int(11) NOT NULL DEFAULT '1',
  `price` double NOT NULL DEFAULT '0',
  `bonus` double NOT NULL DEFAULT '0',
  `isVolumetric` tinyint(1) NOT NULL DEFAULT '0',
  `inflation` decimal(5,2) NOT NULL DEFAULT '1.00',
  `m3Max` decimal(10,2) unsigned DEFAULT NULL,
  `itemMaxSize` int(11) DEFAULT NULL COMMENT 'tamaño maximo de los articulos que esa ruta puede transportar',
  `code` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_zone_1_idx` (`warehouseFk__`),
  KEY `fk_zone_2_idx` (`agencyModeFk`),
  KEY `zone_name_idx` (`name`),
  CONSTRAINT `fk_zone_1` FOREIGN KEY (`warehouseFk__`) REFERENCES `warehouse` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `fk_zone_2` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneAgencyMode`
--

DROP TABLE IF EXISTS `zoneAgencyMode`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneAgencyMode` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `agencyModeFk` int(11) NOT NULL,
  `zoneFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zoneAgencyMode_UN` (`agencyModeFk`,`zoneFk`),
  KEY `zoneAgencyMode_FK_1` (`zoneFk`),
  CONSTRAINT `zoneAgencyMode_FK` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `zoneAgencyMode_FK_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='junta agencias con zonas para que al enrutar se puedan proponer tickets.';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneClosure`
--

DROP TABLE IF EXISTS `zoneClosure`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneClosure` (
  `zoneFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `hour` time NOT NULL,
  PRIMARY KEY (`zoneFk`,`dated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneConfig`
--

DROP TABLE IF EXISTS `zoneConfig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneConfig` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `scope` int(10) unsigned NOT NULL,
  `forwardDays` int(10) NOT NULL DEFAULT '7' COMMENT 'days forward to show zone_upcomingDeliveries',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Temporary table structure for view `zoneEstimatedDelivery`
--

DROP TABLE IF EXISTS `zoneEstimatedDelivery`;
/*!50001 DROP VIEW IF EXISTS `zoneEstimatedDelivery`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `zoneEstimatedDelivery` (
  `zoneFk` tinyint NOT NULL,
  `hourTheoretical` tinyint NOT NULL,
  `totalVolume` tinyint NOT NULL,
  `remainingVolume` tinyint NOT NULL,
  `speed` tinyint NOT NULL,
  `hourEffective` tinyint NOT NULL,
  `minutesLess` tinyint NOT NULL,
  `etc` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Table structure for table `zoneEvent`
--

DROP TABLE IF EXISTS `zoneEvent`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneEvent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zoneFk` int(11) NOT NULL,
  `type` enum('day','indefinitely','range') NOT NULL,
  `dated` date DEFAULT NULL,
  `started` date DEFAULT NULL,
  `ended` date DEFAULT NULL,
  `weekDays` set('mon','tue','wed','thu','fri','sat','sun') NOT NULL,
  `hour` datetime DEFAULT NULL,
  `travelingDays` int(11) DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `bonus` decimal(10,2) DEFAULT NULL,
  `m3Max` decimal(10,2) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zoneFk` (`zoneFk`,`type`,`dated`),
  CONSTRAINT `zoneEvent_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneExclusion`
--

DROP TABLE IF EXISTS `zoneExclusion`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneExclusion` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zoneFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userFk` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zoneFk_2` (`zoneFk`,`dated`),
  KEY `zoneFk` (`zoneFk`),
  CONSTRAINT `zoneExclusion_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`zoneExclusion_BI`
	BEFORE INSERT ON `zoneExclusion`
	FOR EACH ROW
BEGIN 
	
	SET NEW.userFk = account.myUser_getId();
	
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`.`zoneExclusion_BU`
	BEFORE UPDATE ON `zoneExclusion`
	FOR EACH ROW
BEGIN 
	
	SET NEW.userFk = account.myUser_getId();
	
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 */ ;

--
-- Table structure for table `zoneExclusionGeo`
--

DROP TABLE IF EXISTS `zoneExclusionGeo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneExclusionGeo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zoneExclusionFk` int(11) NOT NULL,
  `geoFk` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zoneExclusionGeo_UN` (`zoneExclusionFk`,`geoFk`),
  KEY `zoneExclusionGeo2_FK_1` (`geoFk`),
  CONSTRAINT `zoneExclusionGeo_FK` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `zoneExclusionGeo_FK_1` FOREIGN KEY (`zoneExclusionFk`) REFERENCES `zoneExclusion` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneFilter`
--

DROP TABLE IF EXISTS `zoneFilter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneFilter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zoneFk` int(11) NOT NULL,
  `sizeMax` int(11) DEFAULT NULL COMMENT 'altura máxima en cm',
  `itemTypeFk` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `zoneFilter_FK` (`zoneFk`),
  KEY `zoneFilter_FK_1` (`itemTypeFk`),
  CONSTRAINT `zoneFilter_FK` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `zoneFilter_FK_1` FOREIGN KEY (`itemTypeFk`) REFERENCES `itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='recoge los parámetros para filtrar determinados productos según la zona';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneGeo`
--

DROP TABLE IF EXISTS `zoneGeo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneGeo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` set('country','province','town','postCode','autonomy') CHARACTER SET utf8 NOT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `parentFk` int(10) unsigned DEFAULT NULL,
  `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lft` int(11) DEFAULT NULL,
  `rgt` int(11) DEFAULT NULL,
  `depth` bigint(22) NOT NULL DEFAULT '0',
  `sons` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `lft_rgt_depth_idx` (`lft`,`rgt`,`depth`),
  KEY `name_idx` (`name`),
  KEY `parentFk` (`parentFk`),
  KEY `path` (`path`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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`.`zoneGeo_beforeInsert`
	BEFORE INSERT ON `zoneGeo`
	FOR EACH ROW
BEGIN
	CALL zoneGeo_checkName(NEW.`name`);
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`.`zoneGeo_beforeUpdate`
	BEFORE UPDATE ON `zoneGeo`
	FOR EACH ROW
BEGIN
	IF !(OLD.`name` <=> NEW.`name`) THEN
		CALL zoneGeo_checkName(NEW.`name`);
	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 */ ;

--
-- Table structure for table `zoneGeoRecalc`
--

DROP TABLE IF EXISTS `zoneGeoRecalc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneGeoRecalc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `isChanged` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneIncluded`
--

DROP TABLE IF EXISTS `zoneIncluded`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneIncluded` (
  `zoneFk` int(11) NOT NULL,
  `geoFk` int(11) NOT NULL,
  `isIncluded` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`zoneFk`,`geoFk`),
  KEY `geoFk_idx` (`geoFk`),
  CONSTRAINT `zoneFk2` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `zoneGeoFk2` FOREIGN KEY (`geoFk`) REFERENCES `zoneGeo` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneLog`
--

DROP TABLE IF EXISTS `zoneLog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneLog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `originFk` int(10) NOT NULL,
  `userFk` int(10) unsigned DEFAULT NULL,
  `action` set('insert','update','delete') COLLATE utf8_unicode_ci NOT NULL,
  `creationDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `description` text CHARACTER SET utf8,
  `changedModel` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `oldInstance` text COLLATE utf8_unicode_ci,
  `newInstance` text COLLATE utf8_unicode_ci,
  `changedModelId` int(11) DEFAULT NULL,
  `changedModelValue` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `originFk` (`originFk`),
  KEY `userFk` (`userFk`),
  CONSTRAINT `zoneLog_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `zoneLog_ibfk_2` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zonePromo__`
--

DROP TABLE IF EXISTS `zonePromo__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zonePromo__` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `zoneFk` int(11) NOT NULL,
  `dated` date NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `isDone` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `zonePromo_fk1_idx` (`zoneFk`),
  CONSTRAINT `zonePromo_fk1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `zoneWarehouse`
--

DROP TABLE IF EXISTS `zoneWarehouse`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zoneWarehouse` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `zoneFk` int(11) NOT NULL,
  `warehouseFk` smallint(6) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zoneFk` (`zoneFk`,`warehouseFk`),
  KEY `warehouseFk` (`warehouseFk`),
  CONSTRAINT `zoneWarehouse_fk_warehouse` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `zoneWarehouse_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping events for database 'vn'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `department_doCalc` */;
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 `department_doCalc` ON SCHEDULE EVERY 15 SECOND STARTS '2019-11-15 00:00:00' ON COMPLETION PRESERVE ENABLE DO CALL vn.department_doCalc */ ;;
/*!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 `envialiaThreHoldChecker` */;;
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 `envialiaThreHoldChecker` ON SCHEDULE EVERY 1 DAY STARTS '2022-01-28 09:52:46' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
	DECLARE vActualNumber BIGINT;
	DECLARE vEndRange BIGINT;
    DECLARE vIsAlreadyNotified BOOLEAN;
    DECLARE vNotificationThrehold INT;

	SELECT actualNumber, endRange, isAlreadyNotified, notificationThrehold 
			INTO vActualNumber, vEndRange, vIsAlreadyNotified, vNotificationThrehold
		FROM envialiaConfig;
    
	IF (vActualNumber+vNotificationThrehold) >= vEndRange AND
        vIsAlreadyNotified = FALSE
	THEN
		CALL mail_insert( 
		 	'cau@verdnatura.es',
		 	NULL,
			'Hablar con envialia, acercandonos al numero final del rango permitido para las etiquetas',
            CONCAT('Numero actual: ', vActualNumber, ' , numero final: ',vEndRange)
		); 
		UPDATE envialiaConfig SET isAlreadyNotified = TRUE;
	END IF;
    
	IF (vActualNumber+vNotificationThrehold) < vEndRange AND
        vIsAlreadyNotified = TRUE
	THEN
		UPDATE envialiaConfig SET isAlreadyNotified = FALSE;
	END IF;
    
END */ ;;
/*!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 `mysqlConnectionsSorter_kill` */;;
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 `mysqlConnectionsSorter_kill` ON SCHEDULE EVERY 1 MINUTE STARTS '2021-10-28 09:56:27' ON COMPLETION NOT PRESERVE ENABLE DO CALL mysqlConnectionsSorter_kill() */ ;;
/*!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 `printQueue_check` */;;
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 `printQueue_check` ON SCHEDULE EVERY 10 MINUTE STARTS '2022-01-28 09:52:46' ON COMPLETION PRESERVE ENABLE DO BEGIN

	DECLARE vCurrentCount INT;
	DECLARE vCheckSum INT;
	DECLARE vIsAlreadyNotified BOOLEAN;
	DECLARE vTableQueue TEXT;
	DECLARE vLineQueue TEXT;
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vPrintQueueLimit INT;

	DECLARE vCur CURSOR FOR 
		SELECT CONCAT('<tr>
							<td>', IFNULL(pq.id, ''), '</td>
							<td>', IFNULL(p.path, ''),'</td>
							<td>', IFNULL(r.name, ''),'</td>
							<td>', IFNULL(pq.statusCode, ''),'</td>
							<td>', IFNULL(w.firstname, ''), " ", IFNULL(w.lastName, ''),'</td>
							<td>', IFNULL(pq.`error`, ''),'</td>
						</tr>')
			FROM printQueue pq
				LEFT JOIN worker w ON w.id = pq.workerFk
				LEFT JOIN printer p ON p.id = pq.printerFk
				LEFT JOIN report r ON r.id = pq.reportFk
				JOIN printQueueConfig 
			LIMIT vPrintQueueLimit;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
	SET vDone = TRUE;

	SELECT printQueueLimit INTO vPrintQueueLimit 
		FROM printQueueConfig;

	SELECT COUNT(*), IFNULL(SUM(id),0) INTO vCurrentCount, vCheckSum
		FROM printQueue WHERE statusCode = 'queued';

	SELECT isAlreadyNotified INTO vIsAlreadyNotified 
		FROM printingQueueCheck;
		
	IF (SELECT lastCount FROM printingQueueCheck) = vCurrentCount AND
		(SELECT lastCheckSum FROM printingQueueCheck) = vCheckSum AND
		vIsAlreadyNotified = FALSE AND vCurrentCount  > 0
	THEN

		SELECT  '<table  cellspacing="10">
					<tr>
						<td>Id Cola</td>
						<td>Ruta Impresora</td>
						<td>Informe</td>
						<td>Estado</td>
						<td>Trabajador</td>
						<td>Error</td>
					</tr>' INTO vTableQueue;
			
		OPEN vCur;

		l: LOOP
			
			SET vDone = FALSE;

			FETCH vCur INTO vLineQueue;

			IF vDone THEN
				LEAVE l;
			END IF;

			SELECT CONCAT(vTableQueue, vLineQueue) INTO vTableQueue;
			
		END LOOP;

		CLOSE vCur;

		CALL mail_insert(
			'cau@verdnatura.es',
			NULL,
			'Servidor de impresion parado', 
			CONCAT('Hay ', vCurrentCount, ' lineas bloqueadas', vTableQueue, '</table>')
		);

			UPDATE printingQueueCheck SET isAlreadyNotified = TRUE; 
	END IF;

	IF (SELECT lastCount FROM printingQueueCheck) > vCurrentCount AND
		vIsAlreadyNotified = TRUE
	THEN
		UPDATE printingQueueCheck SET isAlreadyNotified = FALSE;
	END IF;

	UPDATE printingQueueCheck
		SET lastCount = vCurrentCount,
			lastCheckSum = vCheckSum;
			
END */ ;;
/*!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 */ ;;
/*!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 `route_doRecalc` ON SCHEDULE EVERY 10 SECOND STARTS '2021-07-08 07:32:23' ON COMPLETION PRESERVE ENABLE DO CALL route_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 `sale_checkWithoutComponents` */;;
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 `sale_checkWithoutComponents` ON SCHEDULE EVERY 10 MINUTE STARTS '2020-05-04 11:56:23' ON COMPLETION PRESERVE DISABLE DO call sale_checkNoComponents(DATE_ADD(NOW(), INTERVAL -10 MINUTE),DATE_ADD(NOW(), INTERVAL -1 MINUTE)) */ ;;
/*!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 `ticketClosure` */;;
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 `ticketClosure` ON SCHEDULE EVERY 1 DAY STARTS '2017-09-18 00:30:00' ON COMPLETION NOT PRESERVE DISABLE COMMENT 'Realiza el cierre de todos los almacenes del dia actual' DO CALL ticketClosureMultiWarehouse(DATE_ADD(CURDATE(), INTERVAL -1 DAY)) */ ;;
/*!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 `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  = 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 `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  = 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 `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 `workerTimeControl_sendMail` */;;
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 `workerTimeControl_sendMail` ON SCHEDULE EVERY 1 WEEK STARTS '2020-11-25 08:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
	DECLARE vWeek,vYear INT;

	SELECT week,year INTO vWeek,vYear
		FROM vn.time 
		WHERE dated IN (DATE_ADD(CURDATE(), INTERVAL -10 DAY), DATE_ADD(CURDATE(), INTERVAL -4 DAY))
		GROUP BY year,week
		LIMIT 1;
 
	CALL vn.workerTimeControl_sendMail(vWeek, vYear, NULL);
END */ ;;
/*!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 `zoneGeo_doCalc` */;;
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 `zoneGeo_doCalc` ON SCHEDULE EVERY 15 SECOND STARTS '2019-09-13 15:30:47' ON COMPLETION PRESERVE ENABLE DO CALL vn.zoneGeo_doCalc */ ;;
/*!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 'vn'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP FUNCTION IF EXISTS `addressTaxArea` */;
/*!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 `addressTaxArea`(vAddresId INT, vCompanyId INT) RETURNS varchar(25) CHARSET utf8
    DETERMINISTIC
BEGIN
/**
 * Devuelve el area de un Consignatario, 
 * intracomunitario, extracomunitario, nacional o recargo de equivalencia.
 * Asumimos que no tenemos ninguna empresa 
 *
 * @param vAddresId Id del Consignatario
 * @param vCompanyId Compañia desde la que se factura
 * @return Código de area
 */
    DECLARE vTaxArea VARCHAR(25);

    DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
    CREATE TEMPORARY TABLE tmp.addressCompany
        SELECT vAddresId addressFk, vCompanyId companyFk;

    CALL vn.addressTaxArea();
    SELECT areaFk INTO vTaxArea FROM tmp.addressTaxArea;
    DROP TEMPORARY TABLE
        tmp.addressCompany,
        tmp.addressTaxArea;

    RETURN vTaxArea;
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 `address_getGeo` */;
/*!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 `address_getGeo`(vSelf INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Returns the geo for the passed address.
 *
 * @param vSelf The address id
 * @return The geo id
 */
 	DECLARE vGeoFk INT;

	SELECT p.geoFk INTO vGeoFk
		FROM address a 
			JOIN town t ON t.provinceFk = a.provinceFk
			JOIN postCode p ON p.townFk = t.id AND p.`code` = a.postalCode
		WHERE a.id = vSelf
		ORDER BY (a.city SOUNDS LIKE t.`name`) DESC
		LIMIT 1;

	RETURN vGeoFk;
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 FUNCTION IF EXISTS `barcodeToItem` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `barcodeToItem`(vBarcode VARCHAR(22)) RETURNS int(11)
    DETERMINISTIC
BEGIN
	
/**
 * Obtiene el id del artículo
 *
 * @param vBarcode código de barras
 * 
 * return id del item
 */

	DECLARE vItemFk INT;

	SELECT id INTO vItemFk
		FROM vn.item
        WHERE id = vBarcode OR comment = vBarcode
       	LIMIT 1;
        
	IF vItemFk THEN 
		RETURN vItemFk;
	END IF;

	SELECT itemFk INTO vItemFk 
		FROM buy 
        WHERE id = vBarcode;
	
    IF vItemFk THEN 
		RETURN vItemFk;
	END IF;
    
	SELECT itemFk INTO vItemFk 
		FROM itemBarcode 
        WHERE code = vBarcode;
       
   IF vItemFk THEN 
		RETURN vItemFk;
	END IF;

	SELECT i.id INTO vItemFk 
	        	FROM vn.item i
	        	WHERE i.name LIKE CONCAT('%',vBarcode,'%')
	        	ORDER BY i.id ASC
	       		LIMIT 1;
	       
	RETURN vItemFk;
    
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 `botanicExport_isUpdatable` */;
/*!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 `botanicExport_isUpdatable`(vEdiGenusFk MEDIUMINT,vEdiSpecieFk MEDIUMINT,
	vCountryFk MEDIUMINT,vRestriction MEDIUMINT) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vIsUpdatable INTEGER;
	SELECT COUNT(*) INTO vIsUpdatable 
		FROM botanicExport 
		WHERE ediGenusFk = vEdiGenusFk 
			AND (vEdiSpecieFk = ediSpecieFk OR IFNULL(vEdiSpecieFk,ediSpecieFk) IS NULL)
            AND (vCountryFk = countryFk OR IFNULL(vCountryFk,countryFk) IS NULL)
            AND vRestriction = restriction;
RETURN vIsUpdatable;
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 `buy_getUnitVolume` */;
/*!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 `buy_getUnitVolume`(vSelf INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Calculates the unit volume occupied by a buy.
 *
 * @param vSelf The buy id
 * @return The unit volume in cubic centimeters
 */
	DECLARE vItem INT;
	DECLARE vPackaging VARCHAR(10);
	DECLARE vPacking INT;

	SELECT itemFk, packageFk, packing
		INTO vItem, vPackaging, vPacking
		FROM buy
		WHERE id = vSelf;

	RETURN IFNULL(ROUND(item_getVolume(vItem, vPackaging) / vPacking), 0);
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 `buy_getVolume` */;
/*!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 `buy_getVolume`(vSelf INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Calculates the volume occupied by a buy.
 *
 * @param vSelf The buy id
 * @return The volume in cubic centimeters
 */
	DECLARE vItem INT;
	DECLARE vPackaging VARCHAR(10);

	SELECT itemFk, packageFk INTO vItem, vPackaging
		FROM buy
		WHERE id = vSelf;

	RETURN item_getVolume(vItem, vPackaging);
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 `catalog_componentReverse` */;
/*!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 `catalog_componentReverse`(vWarehouse INT,
    vCost DECIMAL(10,3),
    vM3 DECIMAL(10,3),
    vAddressFk INT,
    vZoneFk INT) RETURNS decimal(10,3)
    DETERMINISTIC
BEGIN
	/* Calcula los componentes para un cliente a partir de un coste y volumen
	* @param vWarehouse 
	* @param vCost Valor de coste del articulo
	* @param vM3 m3 del articulo
    * @param vAddressFk 
    * @param vZoneFk
	* @return vRetailedPrice precio de venta sin iva 
	* @return tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
	*/
    
    DECLARE vBoxVolume BIGINT;    
    DECLARE vCustomer INT;
    DECLARE vComponentRecovery INT DEFAULT 17;
	DECLARE vComponentMana INT DEFAULT 39;
	DECLARE vDeliveryComponent INT DEFAULT 15;
	DECLARE vComponentMargin INT DEFAULT 29;
	DECLARE vComponentCost INT DEFAULT 28;
    DECLARE vRetailedPrice DECIMAL(10,2);
	DECLARE vItem INT DEFAULT 98;
    
	SELECT volume INTO vBoxVolume
		FROM vn.packaging
        WHERE id = '94';
    
    SELECT clientFk INTO vCustomer FROM address WHERE id = vAddressFk;

    DROP TEMPORARY TABLE IF EXISTS tmp.catalog_component;
    CREATE TEMPORARY TABLE tmp.catalog_component (
		`warehouseFk` INT UNSIGNED NOT NULL,
		`itemFk` INT NOT NULL,
		`componentFk` INT UNSIGNED NOT NULL,
		`cost` DECIMAL(10,4) NOT NULL,
		INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
		UNIQUE INDEX `itemWarehouseComponent` (`itemFk` ASC, `warehouseFk` ASC, `componentFk` ASC));

	-- Cost
	INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
		SELECT vWarehouse, vItem, vComponentCost, vCost
			FROM vn.rate
				WHERE dated <= CURDATE()
					AND warehouseFk = vWarehouse
				ORDER BY dated DESC
				LIMIT 1;

	-- Margen
	-- No se aplica margen, cau 12589
/*	INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
		SELECT vWarehouse, vItem, vComponentMargin, (vCost / ((100 - rate2) / 100)) - vCost 
			FROM vn.rate
				WHERE dated <= CURDATE()
					AND warehouseFk = vWarehouse
				ORDER BY dated DESC
				LIMIT 1;
		*/
	-- Recobro
	INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
		SELECT vWarehouse, vItem, vComponentRecovery, ROUND(LEAST(recobro,0.25), 3) 
			FROM bi.claims_ratio
				WHERE Id_Cliente = vCustomer AND recobro > 0.009;

	-- Componente de maná automático, en función del maná acumulado por el comercial.
	INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
		SELECT vWarehouse, vItem, vComponentMana, ROUND(wm.pricesModifierRate, 3)
			FROM client c
				JOIN vn.workerMana wm ON c.salesPersonFk = wm.workerFk
			WHERE wm.isPricesModifierActivated AND c.id = vCustomer LIMIT 1;

	-- Reparto
	INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
		SELECT vWarehouse, vItem, vDeliveryComponent,
				ROUND(
						vM3
						* (z.price - z.bonus)
						* z.inflation 
						/ vBoxVolume, 4
						)
			FROM zone z
            WHERE z.id = vZoneFk;

    -- Precio de venta
	SELECT SUM(cost) INTO vRetailedPrice
		FROM tmp.catalog_component;

	RETURN vRetailedPrice;
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 `clientGetDebt` */;
/*!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 `clientGetDebt`(`vClient` INT, `vDate` DATE) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
/**
 * Devuelve el saldo de un cliente.
 *
 * @param vClient Identificador del cliente
 * @param vDate Fecha hasta la que tener en cuenta
 * @return Saldo del cliente
 */
	DECLARE vDateEnd DATETIME;
	DECLARE vDateIni DATETIME;
	DECLARE vDebt DECIMAL(10,2);
    DECLARE vHasDebt BOOLEAN;

	SELECT COUNT(*) INTO vHasDebt
		FROM `client` c
		WHERE c.id = vClient AND c.typeFk = 'normal';
	
	IF NOT vHasDebt THEN
		RETURN 0;
	END IF;

	SET vDate = IFNULL(vDate, CURDATE());
					
	SET vDateIni = TIMESTAMPADD(MONTH, -2, CURDATE());
	SET vDateEnd = TIMESTAMP(vDate, '23:59:59');

	SELECT IFNULL(SUM(t.amount), 0) INTO vDebt
		FROM ( 
			SELECT SUM(IFNULL(totalWithVat,0)) amount
				FROM ticket
				WHERE clientFk = vClient
					AND refFk IS NULL
					AND shipped BETWEEN vDateIni AND vDateEnd
			UNION ALL 
			SELECT SUM(amountPaid) amount
				FROM receipt
				WHERE clientFk = vClient
					AND payed > vDateEnd
			UNION ALL
			SELECT SUM(amount)
				FROM clientRisk 
				WHERE clientFk = vClient
			UNION ALL
			SELECT CAST(-SUM(amount) / 100 AS DECIMAL(10,2))
				FROM hedera.tpvTransaction
				WHERE clientFk = vClient
					AND receiptFk IS NULL
					AND `status` = 'ok'
		) t;

	RETURN vDebt;
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 `clientGetMana` */;
/*!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 `clientGetMana`(vClient INT) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
/**
 * Devuelve el mana del cliente.
 *
 * @param vClient Id del cliente
 * @return Mana del cliente
 */
	DECLARE vMana DECIMAL(10,2);
	DECLARE vFromDated DATE;
    DECLARE vHasMana BOOLEAN;
	DECLARE vManaComponent INT;
	DECLARE vAutoManaComponent INT;
    DECLARE vManaBank INT;
    DECLARE vManaGreugeType INT;
    
    SELECT id INTO vManaGreugeType FROM greugeType WHERE code = 'mana';
    SELECT id INTO vManaBank FROM bank WHERE code = 'mana';
    SELECT id INTO vManaComponent FROM component WHERE code = 'mana';
    SELECT id INTO vAutoManaComponent FROM component WHERE code = 'autoMana';
    
	SELECT COUNT(*) INTO vHasMana
		FROM `client` c
		WHERE c.id = vClient AND c.typeFk = 'normal';
	
	IF NOT vHasMana THEN
		RETURN 0;
	END IF;
	
	SELECT max(dated) INTO vFromDated
	FROM clientManaCache;

	SELECT sum(mana) INTO vMana
		FROM 
			(
			SELECT mana
				FROM clientManaCache
				WHERE clientFk = vClient
				AND dated = vFromDated			
			UNION ALL
			SELECT s.quantity * value
				 FROM ticket t
					JOIN address a ON a.id = t.addressFk
					JOIN sale s on s.ticketFk = t.id
					JOIN saleComponent sc on sc.saleFk = s.id
						WHERE sc.componentFk IN (vManaComponent, vAutoManaComponent)
							AND t.shipped > vFromDated 
							AND t.shipped < TIMESTAMPADD(DAY,1,CURDATE())
							AND a.clientFk = vClient
			UNION ALL
			SELECT - amountPaid
				FROM receipt r
					JOIN `client` c ON c.id = r.clientFk
				WHERE r.bankFk = vManaBank
					AND r.payed > vFromDated
					AND r.payed <= CURDATE()
					AND c.id = vClient
			UNION ALL
			SELECT  g.amount
				FROM greuge g
					JOIN `client` c ON c.id = g.clientFk
				WHERE g.greugeTypeFk = vManaGreugeType
					AND g.shipped > vFromDated
					AND g.shipped <= CURDATE()
					AND c.id = vClient
			) sub;
	RETURN IFNULL(vMana,0);
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 `clientGetSalesPerson` */;
/*!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 `clientGetSalesPerson`(vClientFk INT, vDated DATE) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * DEPRECATED: use client_getSalesPerson
 **/
	RETURN client_getSalesPerson(vClientFk, vDated);
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 `clientTaxArea` */;
/*!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 `clientTaxArea`(vClientId INT, vCompanyId INT) RETURNS varchar(25) CHARSET utf8
    READS SQL DATA
BEGIN
/**
 * Devuelve el area de un cliente, 
 * intracomunitario, extracomunitario o nacional.
 *
 * @param vClient Id del cliente
 * @param vCompanyFk Compañia desde la que se factura
 * @return Código de area
 */
    DECLARE vTaxArea VARCHAR(25);

    SELECT addressTaxArea(defaultAddressFk, vCompanyId)
        INTO vTaxArea
        FROM client
        WHERE id = vClientId;

    RETURN vTaxArea;
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 `client_getFromPhone` */;
/*!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 `client_getFromPhone`(vPhone VARCHAR(255)) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Searchs a customer associated to the phone number.
 *
 * @param vPhone The phone number
 * @return The client id or %NULL if not found
 */
	DECLARE vClient INT DEFAULT NULL;

	-- SET vPhone = vPhone COLLATE 'utf8_unicode_ci';

	DROP TEMPORARY TABLE IF EXISTS tClient;
	CREATE TEMPORARY TABLE tClient
		ENGINE = MEMORY
		SELECT id clientFk
			FROM `client`
			WHERE phone = vPhone
				OR mobile = vPhone
		UNION
		SELECT clientFk
			FROM address
			WHERE phone = vPhone
				OR mobile = vPhone
		UNION
		SELECT clientFk
			FROM vn.clientContact
			WHERE phone = vPhone;

	SELECT t.clientFk INTO vClient
		FROM tClient t
			JOIN `client` c ON c.id = t.clientFk
		WHERE c.isActive
		LIMIT 1;

	DROP TEMPORARY TABLE tClient;

	RETURN vClient;
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 `client_getSalesPerson` */;
/*!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 `client_getSalesPerson`(vClientFk INT, vDated DATE) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Dado un id cliente y una fecha, devuelve su comercial para ese dia, teniendo 
 * en cuenta la jerarquía de las tablas: 1º la de sharingclient, 2º la de 
 * sharingcart y tercero la de clientes.
 *
 * @param vClientFk El id del cliente
 * @param vDated Fecha a comprobar
 * @return El id del comercial para la fecha dada
 **/
	DECLARE vSalesPersonFk INT DEFAULT NULL;
	DECLARE vWorkerSubstituteFk INT DEFAULT NULL;
	DECLARE vLoop BOOLEAN;

	-- Obtiene el comercial original y el de sharingclient

	SELECT c.salesPersonFk, s.workerFk
		INTO vSalesPersonFk, vWorkerSubstituteFk
		FROM client c
			LEFT JOIN sharingClient s
				ON c.id = s.clientFk
					AND vDated BETWEEN s.started AND s.ended
		WHERE c.id = vClientFk
		ORDER BY s.id
        LIMIT 1;

	-- Si no hay ninguno en sharingclient busca en sharingcart

	IF vWorkerSubstituteFk IS NOT NULL
	THEN
		SET vSalesPersonFk = vWorkerSubstituteFk;
	ELSEIF vSalesPersonFk IS NOT NULL
	THEN
		DROP TEMPORARY TABLE IF EXISTS tmp.stack;
		CREATE TEMPORARY TABLE tmp.stack
			(INDEX (substitute))
			ENGINE = MEMORY
			SELECT vSalesPersonFk substitute;

		l: LOOP
			SELECT workerSubstitute INTO vWorkerSubstituteFk
				FROM sharingCart 
				WHERE curdate() BETWEEN started AND ended
					AND workerFk = vSalesPersonFk
				ORDER BY id
				LIMIT 1;
				
			IF vWorkerSubstituteFk IS NULL THEN
				LEAVE l;
			END IF;
				
			SELECT COUNT(*) > 0 INTO vLoop
				FROM tmp.stack WHERE substitute = vWorkerSubstituteFk;

			IF vLoop THEN
				LEAVE l;
			END IF;
			
			INSERT INTO tmp.stack SET
				substitute = vWorkerSubstituteFk;
			
			SET vSalesPersonFk = vWorkerSubstituteFk;
		END LOOP;
		
		DROP TEMPORARY TABLE tmp.stack;
	END IF;

	RETURN vSalesPersonFk;
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 `client_getSalesPersonByTicket` */;
/*!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 `client_getSalesPersonByTicket`(vTicketFk INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Dado un id ticket, devuelve su comercial.
 * Para más información ir a client_getSalesPerson()
 *
 * @param vClientFk El id del cliente
 * @param vDated Fecha a comprobar
 * @return El id del comercial para la fecha dada
 **/
    DECLARE vClientFk INT;
    DECLARE vDated DATE;
    
    SELECT clientFk, shipped
		INTO vClientFk, vDated
        FROM ticket WHERE id = vTicketFk;
        
	RETURN client_getSalesPerson(vClientFk, vDated);
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 `client_getSalesPersonCode` */;
/*!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 `client_getSalesPersonCode`(vClientFk INT, vDated DATE) RETURNS varchar(3) CHARSET utf8
    DETERMINISTIC
BEGIN
/**
 * Dado un id cliente y una fecha, devuelve su comercial.
 * Para más información ir a client_getSalesPerson()
 *
 * @param vClientFk El id del cliente
 * @param vDated Fecha a comprobar
 * @return El código del comercial para la fecha dada
 **/
    DECLARE vWorkerCode CHAR(3);
    DECLARE vSalesPersonFk INT;
    
    SET vSalesPersonFk = client_getSalesPerson(vClientFk, vDated);

	SELECT code
		INTO vWorkerCode
		FROM worker 
		WHERE id = vSalesPersonFk;

	RETURN vWorkerCode;
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 `client_getSalesPersonCodeByTicket` */;
/*!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 `client_getSalesPersonCodeByTicket`(vTicketFk INT) RETURNS varchar(3) CHARSET utf8
    DETERMINISTIC
BEGIN
/**
 * Dado un id ticket, devuelve su comercial.
 * Para más información ir a client_getSalesPerson()
 *
 * @param vClientFk El id del cliente
 * @param vDated Fecha a comprobar
 * @return El código del comercial para la fecha dada
 **/
    DECLARE vClientFk INT;
    DECLARE vDated DATE;
    
    SELECT clientFk, shipped
		INTO vClientFk, vDated
        FROM ticket WHERE id = vTicketFk;
        
	RETURN client_getSalesPersonCode(vClientFk, vDated);
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 `collectionExpeditionLacks` */;
/*!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 `collectionExpeditionLacks`(vCollectionFk INT) RETURNS varchar(100) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
/**
 * Return message with tickets and collection if there is tickets of a collection without expeditions.
 *
 * @param vCollectionFk The collection to check
 * @return An array with collection and tickets without expeditions
 */
	DECLARE vAnswer VARCHAR(100) DEFAULT '';

	IF collection_isPacked(vCollectionFk) = FALSE THEN
		SELECT CONCAT('Colección: ',tc.collectionFk,'  Tickets: ' , GROUP_CONCAT(tc.ticketFk) ) INTO vAnswer
			FROM vn.ticketCollection tc
				LEFT JOIN vn.expedition e ON e.ticketFk = tc.ticketFk
			WHERE tc.collectionFk = vCollectionFk
				AND ISNULL(e.id);
	END IF;

	RETURN vAnswer;
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 `collection_isPacked` */;
/*!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 `collection_isPacked`(vSelf INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
 * Check if collection is packed.
 *
 * @param vSelf the collection to check
 * @return true if the collection is packed
 */
	DECLARE vTicketsWithoutExpeditions INT;

	SELECT (COUNT(*) > 0) INTO vTicketsWithoutExpeditions
		FROM vn.ticketCollection tc
			LEFT JOIN vn.expedition e ON e.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vSelf
			AND ISNULL(e.id);

	RETURN NOT vTicketsWithoutExpeditions;
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 `currentRate` */;
/*!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 `currentRate`(vCurrencyFk INT, vDated DATE) RETURNS decimal(10,4)
    READS SQL DATA
BEGIN

	DECLARE curRate DECIMAL(10,4);
    
    SELECT value INTO curRate
		FROM referenceRate
        WHERE dated <= vDated
			AND currencyFk = vCurrencyFk
        ORDER BY dated DESC
        LIMIT 1;

RETURN curRate;

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 `deviceProductionUser_accessGranted` */;
/*!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 `deviceProductionUser_accessGranted`(vUserFK INT(10) , android_id VARCHAR(50)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
	/*
	 * Comprueba si el usuario puede entrar en la aplicacion de almacen con ese movil
	 * 
	 * */
	
	/*DECLARE vIsGranted BOOLEAN;
	DECLARE vDeviceProductionFk INT(11) DEFAULT NULL;

	SELECT dp.id INTO vDeviceProductionFk 
		FROM vn.deviceProduction dp 
		WHERE dp.android_id = android_id;

	IF vDeviceProductionFk THEN
		
		SELECT COUNT(*) INTO vIsGranted 
			FROM vn.deviceProductionUser dpu 
			WHERE dpu.userFk = vUserFK 
				AND dpu.deviceProductionFk = vDeviceProductionFk;
	
		RETURN vIsGranted;
	END IF;*/
	RETURN TRUE;
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 `duaTax_getRate` */;
/*!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 `duaTax_getRate`(vDua INT, vTaxClass INT) RETURNS decimal(5,2)
    DETERMINISTIC
BEGIN
	DECLARE vCountryFk INTEGER;
    
    SELECT s.countryFk INTO vCountryFk
		FROM dua d
			JOIN supplier s ON s.id = d.companyFk
        WHERE d.id = vDua;
                
	RETURN (SELECT rate
						FROM
						(SELECT taxClassFk, rate
							FROM invoiceInTaxBookingAccount 
							WHERE effectived <= CURDATE()
								AND countryFk = vCountryFk
								AND taxClassFk = vTaxClass
							ORDER BY effectived DESC
							LIMIT 10000000000000000000
						) ba1
						GROUP BY taxClassFk);
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 `ekt_getEntry` */;
/*!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 `ekt_getEntry`(vEktFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
/**
 * Devuelve el numero de entrada para el ekt 
 * 
 * @param vEktFk Identificador de edi.ekt
 */	
	DECLARE vTravelFk INT;
	DECLARE vEntryFk INT DEFAULT 0;
	DECLARE vEntryAssignFk INT;

	SELECT ea.id 
		INTO vEntryAssignFk
		FROM edi.ekt e
			JOIN vn.ektEntryAssign ea ON 
				IFNULL(ea.sub, e.sub) <=> e.sub AND
				IFNULL(ea.kop, e.kop) <=> e.kop AND
				IFNULL(ea.pro, e.pro) <=> e.pro AND
				IFNULL(ea.auction, e.auction) <=> e.auction
		WHERE e.id = vEktFk
		ORDER BY 
			IF(ea.sub,1,0) * 1000 +
			IF(ea.kop,1,0) * 100 +
			IF(ea.pro,1,0) * 10 +
			IF(ea.auction,1,0) DESC
			LIMIT 1;

	SET vTravelFk = vn.ekt_getTravel(vEntryAssignFk, vEktFk);

	IF vTravelFk THEN

		SELECT MAX(e.id) 
			INTO vEntryFk
			FROM vn.entry e
				JOIN vn.ektEntryAssign ea ON ea.id = vEntryAssignFk
			WHERE e.travelFk = vTravelFk
				AND e.sub <=> ea.sub
				AND e.kop <=> ea.kop
				AND e.pro <=> ea.pro
				AND e.auction <=> ea.auction;

		IF vEntryFk IS NULL THEN
			INSERT INTO vn.entry(travelFk, supplierFk, companyFk, currencyFk, kop, sub, ref, pro)
				SELECT vTravelFk, ea.supplierFk, c.id, cu.id, ea.kop, ea.sub, ea.ref, ea.pro
					FROM vn.ektEntryAssign ea
						JOIN vn.company c ON c.code = 'VNL'
						JOIN vn.currency cu ON cu.code = 'EUR'	
					WHERE ea.id = vEntryAssignFk;

			SET vEntryFk = LAST_INSERT_ID();
		END IF;

		UPDATE vn.ektEntryAssign 
			SET entryFk = vEntryFk
			WHERE id = vEntryAssignFk;

	ELSE

		SELECT ec.defaultEntry INTO vEntryFk
			FROM vn.entryConfig ec;

		INSERT IGNORE INTO vn.entry(id) VALUES(vEntryFk);
	END IF;

	RETURN vEntryFk;
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 `ekt_getTravel` */;
/*!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 `ekt_getTravel`(vEntryAssignFk INT, vEktFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
/**
 * Devuelve un vn.travel.id
 * 
 * @param vEntryAssignFk Identificador de vn.entryAssign
 */
	DECLARE vTravelFk INT;

	SELECT MAX(tr.id) INTO vTravelFk
		FROM vn.travel tr
			JOIN vn.ektEntryAssign ea ON ea.id = vEntryAssignFk
			JOIN edi.ekt e ON e.id = vEktFk
		WHERE  ea.warehouseOutFk = tr.warehouseOutFk
			AND ea.warehouseInFk = tr.warehouseInFk
			AND ea.agencyModeFk = tr.agencyModeFk
			AND tr.landed = e.fec;

	IF vTravelFk IS NULL THEN

		INSERT INTO vn.travel(landed, shipped, warehouseInFk, warehouseOutFk, agencyModeFk)
			SELECT e.fec, e.fec, ea.warehouseInFk, ea.warehouseOutFk, ea.agencyModeFk
				FROM edi.ekt e
					JOIN vn.ektEntryAssign ea ON ea.kop = e.kop
				WHERE e.id = vEktFk
				ORDER BY
					IF(ea.sub,1,0) * 1000 +
					IF(ea.kop,1,0) * 100 +
					IF(ea.pro,1,0) * 10 +
					IF(ea.auction,1,0) DESC
					LIMIT 1;

		SET vTravelFk = LAST_INSERT_ID();

	END IF;

	RETURN vTravelFk;
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 `entry_getCommission` */;
/*!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 `entry_getCommission`(
    vTravelFk INT,
    vCurrencyFk INT,
    vSupplierFk INT
) RETURNS int(11)
    READS SQL DATA
BEGIN
    DECLARE vCommission INT;
    DECLARE vCurrentCommission INT;
    DECLARE vIsCurrencyUsd INT;
    DECLARE vLastEntryFk INT;
    
    SELECT count(*) INTO vIsCurrencyUsd
            FROM currency c
            WHERE c.code = 'USD' AND id = vCurrencyFk;
    
    IF NOT vIsCurrencyUsd THEN
    
		SELECT e.id INTO vLastEntryFk
			FROM vn.entry e
				JOIN vn.travel tr ON tr.id = e.travelFk
                WHERE e.supplierFk = vSupplierFk
                ORDER BY tr.landed DESC
                LIMIT 1;
        
        IF vLastEntryFk THEN
        
			SELECT commission INTO vCurrentCommission
				FROM vn.entry
                WHERE id = vLastEntryFk;
        
        ELSE
        
			SELECT commission INTO vCurrentCommission
				FROM supplier s
				WHERE s.id = vSupplierFk;
        
		END IF;
        
        RETURN vCurrentCommission;
        
    ELSE

		SELECT ROUND(-100 * (1 - (1 / r.value))) INTO vCommission
			FROM travel t
				LEFT JOIN referenceCurrent r ON r.currencyFk = vCurrencyFk AND r.`dated` <= t.shipped
			WHERE t.id = vTravelFk
			ORDER BY r.`dated` DESC
			LIMIT 1;
        
		RETURN IFNULL(vCommission, 0);
    
    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 FUNCTION IF EXISTS `entry_getCurrency` */;
/*!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 `entry_getCurrency`(
	vCurrency INT,
    vSupplierFk INT
) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE vIsDollarAccount BOOL;

	SELECT account LIKE '___4______' INTO vIsDollarAccount
		FROM vn.supplier WHERE id = vSupplierFk;

	IF vIsDollarAccount THEN
		RETURN 2;
	ELSE
		RETURN vCurrency;
	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 FUNCTION IF EXISTS `entry_getForLogiflora` */;
/*!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 `entry_getForLogiflora`(vLanded DATE, vWarehouseFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	
	/**
	 * Devuelve una entrada para Logiflora. Si no existe la crea.
	 * 
	 * @param vLanded Fecha de llegada al almacén
	 * @param vWarehouseFk Identificador de vn.warehouse
	 */

	DECLARE vTravelFk INT;
	DECLARE vEntryFk INT;
    	DECLARE previousEntryFk INT;
 
    SET vTravelFk = vn.travel_getForLogiflora(vLanded, vWarehouseFk);
    
    IF vLanded THEN
    
		SELECT IFNULL(MAX(id),0) INTO vEntryFk 
			FROM vn.entry
			WHERE travelFk = vTravelFk 
				AND isRaid;

		IF NOT vEntryFk THEN
		
			INSERT INTO vn.entry(travelFk, supplierFk, commission, companyFk, currencyFk, isRaid)
				SELECT vTravelFk, s.id, 4, c.id, cu.id, TRUE
					FROM vn.supplier s
						JOIN vn.company c ON c.code = 'VNL'
						JOIN vn.currency cu ON cu.code = 'EUR'
					WHERE s.name = 'KONINKLIJE COOPERATIEVE BLOEMENVEILING FLORAHOLLAN';
					
			SELECT MAX(id) INTO vEntryFk 
				FROM vn.entry
				WHERE travelFk = vTravelFk;
				
		END IF;
        
	END IF;	

	SELECT entryFk INTO previousEntryFk 
		FROM edi.warehouseFloramondo wf
        	WHERE wf.warehouseFk = vWarehouseFk;
    
	IF IFNULL(previousEntryFk,0) != vEntryFk THEN
		
		DELETE FROM buy WHERE entryFk = previousEntryFk;
        
		DELETE FROM entry WHERE id = previousEntryFk;
  
	END IF;
	
	RETURN vEntryFk;
    
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 `entry_isInventoryOrPrevious` */;
/*!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 `entry_isInventoryOrPrevious`(vSelf INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vIsInventoryOrPrevious BOOL;

	SELECT ec.inventorySupplierFk = e.supplierFk OR t.landed < c.inventoried
		INTO vIsInventoryOrPrevious
		FROM entry e
			JOIN travel t ON e.travelFk = t.id
			JOIN entryConfig ec
			JOIN config c
		WHERE e.id = vSelf;

	RETURN vIsInventoryOrPrevious;
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 `expedition_checkRoute` */;
/*!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 `expedition_checkRoute`(vPalletFk INT,vExpeditionFk INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
/**
* Comprueba si las expediciones del pallet son todas
* de la misma ruta.
*
* @param vExpeditionFk numero de expedition a comprobar
* @param vPalletFk numero de pallet
* @return vHasDistinctRoutes
*/
	DECLARE vRouteFk INT;
	DECLARE vHasDistinctRoutes BOOL;

	SELECT t.routeFk INTO vRouteFk
		FROM vn.expedition e 
			JOIN vn.ticket t ON e.ticketFk = t.id
		WHERE e.id = vExpeditionFk;
	
	SELECT COUNT(*) > 0 INTO vHasDistinctRoutes
		FROM vn.expeditionScan es
			JOIN vn.expedition e ON es.expeditionFk = e.id
			JOIN vn.ticket t ON e.ticketFk = t.id
				WHERE es.palletFk = vPalletFk
				AND t.routeFk <> vRouteFk;
		
	RETURN vHasDistinctRoutes;

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 `firstDayOfWeek` */;
/*!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 `firstDayOfWeek`(vYear INT, vWeek INT) RETURNS date
    DETERMINISTIC
BEGIN
/**
 * Returns the date of the first day of the week
 *
 * @param vYear The year
 * @param vWeek The week number
 * @return Date of the first day of the week
 */
	DECLARE vDate DATE;

	SELECT dated INTO vDate
		FROM `time`
		WHERE `year` = vYear
			AND `week` = vWeek
		ORDER BY dated
		LIMIT 1;

	RETURN vDate;
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 `getAlert3State` */;
/*!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 `getAlert3State`(vTicket INT) RETURNS varchar(45) CHARSET utf8 COLLATE utf8_unicode_ci
    READS SQL DATA
BEGIN
	DECLARE vDeliveryType INTEGER DEFAULT 0;
	DECLARE isWaitingForPickUp BOOLEAN DEFAULT FALSE;
	DECLARE vCode VARCHAR(45);
		
	SELECT am.deliveryMethodFk
	INTO vDeliveryType 
		FROM ticket t
			JOIN agencyMode am ON am.id = 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 MIN(t.warehouseFk <> w.id) INTO isWaitingForPickUp
					FROM ticket t 
						LEFT JOIN warehouse w
							ON w.pickUpagencyModeFk = t.agencyModeFk
					WHERE t.id = vTicket;
						
			IF isWaitingForPickUp THEN
				SET vCode = 'WAITING_FOR_PICKUP';
					ELSE
				SET vCode = 'DELIVERED';
			END IF;
		END CASE;
	RETURN vCode;
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 `getAlert3StateTest` */;
/*!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 `getAlert3StateTest`(vTicket INT) RETURNS varchar(45) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE vDeliveryType INTEGER DEFAULT 0;
		DECLARE isWaitingForPickUp BOOLEAN DEFAULT FALSE;
		DECLARE vCode VARCHAR(45);
		
	SELECT 
		a.Vista
	INTO vDeliveryType 
		FROM vn2008.Tickets t
			JOIN vn2008.Agencias a ON a.Id_Agencia = t.Id_Agencia
	WHERE Id_Ticket = vTicket;
		
		CASE vDeliveryType
			WHEN 1 THEN -- AGENCIAS
				SET vCode = 'DELIVERED';
					   
			WHEN 2 THEN -- REPARTO
				SET vCode = 'ON_DELIVERY';
					
			ELSE -- MERCADO, OTROS
				SELECT t.warehouse_id <> w.warehouse_id INTO isWaitingForPickUp
					FROM vn2008.Tickets 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;
						
			IF isWaitingForPickUp THEN
				SET vCode = 'WAITING_FOR_PICKUP';
					ELSE
				SET vCode = 'DELIVERED';
			END IF;
		END CASE;
	RETURN vCode;
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 `getDueDate` */;
/*!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 `getDueDate`(vDated DATE, vDayToPay INT) RETURNS date
    NO SQL
BEGIN
	DECLARE vDued DATE;

	IF vDayToPay = 0 THEN
		RETURN vDated;
	END IF;

	SET vDued = TIMESTAMPADD(DAY,vDayToPay MOD 30, LAST_DAY(TIMESTAMPADD(MONTH, vDayToPay DIV 30, vDated)));

	RETURN vDued;
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 `getInventoryDate` */;
/*!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 `getInventoryDate`() RETURNS date
    DETERMINISTIC
BEGIN
	RETURN vn2008.date_inv();
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 `getNewItemId` */;
/*!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 `getNewItemId`() RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE newItemId INT;

	SELECT i1.id + 1 INTO newItemId
		FROM item i1
			LEFT JOIN item i2 ON i1.id + 1 = i2.id
		WHERE i2.id IS NULL
		ORDER BY i1.id
		LIMIT 1;

	RETURN newItemId;
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 `getNextDueDate` */;
/*!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 `getNextDueDate`(vDated DATE, vGapDays INT, vPayDay INT) RETURNS date
    NO SQL
BEGIN

    DECLARE vReturn DATE;
	DECLARE vDuaDate DATE;
	DECLARE vDuaDateDay INT;
	
	SELECT TIMESTAMPADD(DAY, vGapDays, vDated) INTO vDuaDate;

	IF vDuaDate = CONCAT(YEAR(vDuaDate), '-03-01') THEN
			SET vDuaDate = TIMESTAMPADD (DAY , -1, vDuaDate); 
	ELSEIF vDuaDate = CONCAT(YEAR(vDuaDate), '-02-29') THEN
			SET vDuaDate = TIMESTAMPADD (DAY , -2, vDuaDate); 
	END IF;

	IF MONTH(vDuaDate) = 2 AND vPayDay = 30  THEN 
		IF util.isLeapYear(YEAR(vDuaDate)) THEN
			SET vPayDay = 29;
		ELSE
			SET vPayDay = 28;
		END IF;
	END IF;

	SELECT DAY(vDuaDate) INTO vDuaDateDay;   
	RETURN TIMESTAMPADD(MONTH, (vDuaDateDay > vPayDay), DATE_FORMAT(vDuaDate, CONCAT('%y/%m/', vPayDay)));
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 `getShipmentHour` */;
/*!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 `getShipmentHour`(vTicket INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE vShipmentHour INT;
    
    SELECT HOUR(shipped) INTO vShipmentHour
		FROM ticket
		WHERE id = vTicket;
    
    IF vShipmentHour = 0
    THEN
 		DROP TEMPORARY TABLE IF EXISTS tmp.production_buffer;
		CREATE TEMPORARY TABLE tmp.production_buffer
			ENGINE = MEMORY
			SELECT am.agencyFk as agency_id
				, t.warehouseFk as warehouse_id
				, a.provinceFk as province_id
				, 0 as Hora
                , 0 as Departure
				FROM ticket t
				JOIN agencyMode am on am.id = t.agencyModeFk
				JOIN address a on a.id = t.addressFk
				WHERE t.id = vTicket;
    
		SELECT Hora INTO vShipmentHour 
			FROM tmp.production_buffer;
    END IF;
        
	RETURN vShipmentHour;
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 `getSpecialPrice` */;
/*!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 `getSpecialPrice`(vItemFk int(11),vClientFk int(11)) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	DECLARE price DECIMAL(10,2);

	SELECT rate3 INTO price
		FROM vn.priceFixed
		WHERE itemFk = vItemFk 
			AND CURDATE() BETWEEN started AND ended ORDER BY created DESC LIMIT 1;

	SELECT `value` INTO price 
		FROM vn.specialPrice
		WHERE itemFk =  vItemFk 
			AND clientFk = vClientFk ;
RETURN price;
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 `getTicketToPrepare` */;
/*!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 `getTicketToPrepare`(`vWorker` INT, `vWarehouse` INT) RETURNS int(11)
    READS SQL DATA
BEGIN
/**
 * Devuelve el ticket que debe de preparar el trabajador
 *
 * @param vWorker Id del trabajador 
 * @param vWarehouse Id del almacén
 * @return Id del ticket
 *
 * #UPDATED PAK 2019/08/16
 * #PENDING REVIEW
 **/
 
	DECLARE vToday DATETIME DEFAULT CURDATE();
	DECLARE vYesterday DATETIME;
	DECLARE vTodayvMidniight DATETIME DEFAULT midnight(vToday);
	DECLARE vTicket INT DEFAULT NULL;
    DECLARE PREVIOUS_PREPARATION INT;
    DECLARE vHasBeenPreviouslyPrepared INT DEFAULT 0;
        
    -- Si hay algun ticket previamente seleccionado, y se ha quedado sin empezar, lo recupera en primer lugar.
   /* 
	SELECT i.Id_Ticket INTO vTicket
		FROM vncontrol.inter i
			JOIN vn.state s ON s.id = i.state_id
			LEFT JOIN
				(SELECT DISTINCT s.ticketFk
					FROM vn.sale s
						JOIN vn.saleTracking st ON st.saleFk = s.id
                        JOIN vn.ticketStateToday tst ON tst.ticket = s.ticketFk
                        WHERE st.created > CURDATE()
                        -- AND tst.`code` = 'ON_PREPARATION'
				) sub ON sub.ticketFk = i.Id_Ticket
		WHERE odbc_date > CURDATE()
			AND s.`code` = 'ON_PREPARATION'
			AND i.Id_Trabajador = vWorker
			AND sub.ticketFk IS NULL
		LIMIT 1;
        
	IF vTicket IS NULL THEN
    */
		SELECT id INTO PREVIOUS_PREPARATION
			FROM vn.state
			WHERE code LIKE 'PREVIOUS_PREPARATION';

		SET vYesterday = TIMESTAMPADD(DAY,-1,vToday);
		
		DROP TEMPORARY TABLE IF EXISTS tmp.workerComercial;
		CREATE TEMPORARY TABLE tmp.workerComercial
			ENGINE = MEMORY
			SELECT workerFk as worker FROM `grant` g 
					JOIN grantGroup gg ON g.`groupFk` = gg.id 
				WHERE gg.description  = 'Comerciales';
			   
		DELETE wc.* 													
			FROM tmp.workerComercial wc
				JOIN `grant` g ON g.workerFk = wc.worker
				JOIN grantGroup gg ON g.`groupFk` = gg.id 
			WHERE gg.description  = 'Gerencia';  
			
		DROP TEMPORARY TABLE IF EXISTS tmp.production_buffer;
		CREATE TEMPORARY TABLE tmp.production_buffer
			ENGINE = MEMORY
			SELECT 	t.id as ticket
					, am.agencyFk as agency_id
					, t.warehouseFk as warehouse_id
					, a.provinceFk as province_id
					, IF (HOUR(t.shipped),HOUR(t.shipped),HOUR(z.`hour`)) as Hora
					, HOUR(t.shipped) as Departure
					, IF (MINUTE(t.shipped),MINUTE(t.shipped),MINUTE(z.`hour`)) as Minuto
					, tls.code
					, IFNULL(t.priority,0) loadingOrder
				FROM ticket t
					JOIN ticketState tls on t.id = tls.ticket
					JOIN agencyMode am on am.id = t.agencyModeFk
					JOIN address a on a.id = t.addressFk
					LEFT JOIN tmp.workerComercial wc ON wc.worker = vWorker
					LEFT JOIN vn.zone z ON z.id = t.zoneFk
				WHERE t.shipped BETWEEN vYesterday AND vTodayvMidniight
					AND t.warehouseFk = vWarehouse
					AND 
					(
							(tls.code = 'PRINTED' AND wc.worker IS NULL)
						OR 
							(tls.code ='PICKER_DESIGNED' AND tls.worker = vWorker)
						OR 
							(tls.code = 'PRINTED_BACK')
						OR 
							(tls.code = 'PRINTED PREVIOUS')
					);
		 
		 
		SELECT ticket INTO vTicket
			FROM tmp.production_buffer
			ORDER BY (code = 'PICKER_DESIGNED') DESC, (code = 'PRINTED PREVIOUS') DESC ,Hora, Minuto,   loadingOrder
			LIMIT 1;

		-- Aviso de ticket para bajar
		SELECT COUNT(*) INTO vHasBeenPreviouslyPrepared
			FROM vncontrol.inter
			WHERE Id_Ticket = vTicket
			AND state_id = PREVIOUS_PREPARATION;
			
		IF vHasBeenPreviouslyPrepared AND ticketWarehouseGet(vTicket) = 1 THEN 
		
			INSERT IGNORE INTO vn.ticketDown(ticketFk) VALUES(vTicket);
			
		END IF;

	-- END IF;
    
	RETURN vTicket;

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 `getTicketTrolleyLabelCount` */;
/*!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 `getTicketTrolleyLabelCount`(vTicket INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE vLabelCount INT DEFAULT 0;

	SELECT labelCount INTO vLabelCount 
		FROM ticketTrolley
		WHERE ticket = vTicket;

	SET vLabelCount = vLabelCount +1 ;

	REPLACE ticketTrolley(ticket,labelCount)
		SELECT vTicket, vLabelCount;

	RETURN vlabelCount;
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 `getUser` */;
/*!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 `getUser`() RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * @deprecated Use account.userGetId()
 */
    RETURN account.myUser_getId();
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 `getUserId` */;
/*!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 `getUserId`(userName varchar(30)) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE vUser INT;

	SELECT id INTO vUser
		FROM account.user
		WHERE `name` = userName;

	RETURN vUser;

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 `getWorkerCode` */;
/*!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 `getWorkerCode`() RETURNS varchar(3) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE vUserCode VARCHAR(3) CHARSET utf8 COLLATE utf8_unicode_ci;

	SELECT code INTO vUserCode
	FROM worker
	WHERE userFk = account.myUser_getId();

	RETURN vUserCode;
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 `hasAnyNegativeBase` */;
/*!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 `hasAnyNegativeBase`() RETURNS tinyint(1)
    DETERMINISTIC
BEGIN 

/*	Calcula si existe alguna base imponible negativa
*	Requiere la tabla temporal vn.ticketToInvoice(id)
*
*	returns BOOLEAN
*/
	DECLARE hasAnyNegativeBase BOOLEAN;
    
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		(KEY (ticketFk))
		ENGINE = MEMORY
		SELECT id ticketFk
			FROM ticketToInvoice;
            
	CALL ticket_getTax(NULL);

	SELECT COUNT(*) INTO hasAnyNegativeBase
		FROM(
			SELECT SUM(taxableBase) as taxableBase
				FROM tmp.ticketTax
				GROUP BY pgcFk
				HAVING taxableBase < 0
			) t;

	DROP TEMPORARY TABLE tmp.ticketTax;
	DROP TEMPORARY TABLE tmp.ticket;
    
	RETURN hasAnyNegativeBase;
    
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 `hasItemsInSector` */;
/*!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 `hasItemsInSector`(vTicketFk INT, vSectorFk INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN

	DECLARE vItemCount INT;
    
    SELECT count(*) INTO vItemCount
		FROM vn.sale s 
			JOIN vn.itemShelving ish ON ish.itemFk = s.itemFk
            JOIN vn.shelving sh ON sh.code = ish.shelvingFk
            JOIN vn.parking p ON p.id = sh.parkingFk
		WHERE s.ticketFk = vTicketFk
			AND p.sectorFk = vSectorFk;
            
	RETURN vItemCount;
    
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 `hasSomeNegativeBase` */;
/*!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 `hasSomeNegativeBase`(vTicket INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE vCountry INT;
	DECLARE hasSomeNegativeBase BOOLEAN;

	SELECT s.countryFk 
			INTO vCountry
		FROM supplier s
			JOIN ticket t ON t.companyFk = s.id
		WHERE t.id = vTicket;

	SELECT COUNT(*) INTO hasSomeNegativeBase
		FROM (
			SELECT SUM(ROUND(s.quantity * s.price * (100 - s.discount)/100,2)) taxableBase
				FROM sale s 
					JOIN item i ON i.id = s.itemFk
					JOIN itemTaxCountry itc 
						ON itc.itemFk = i.id AND itc.countryFk = vCountry
					WHERE s.ticketFk = vTicket
				GROUP BY itc.taxClassFk
				HAVING taxableBase < 0
		) t1 ;

	RETURN hasSomeNegativeBase;
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 `invoiceOutAmount` */;
/*!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 `invoiceOutAmount`(vInvoiceRef VARCHAR(15)) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	DECLARE totalAmount DECIMAL(10,2);

	SELECT SUM(vat) INTO totalAmount
		FROM (	
			SELECT iot.vat
				FROM invoiceOutTax iot
					JOIN invoiceOut io ON io.id = iot.invoiceOutFk
				WHERE io.ref = vInvoiceRef
			UNION ALL 
			SELECT ioe.amount
				FROM invoiceOutExpence ioe
					JOIN invoiceOut io ON io.id = ioe.invoiceOutFk
				WHERE io.ref = vInvoiceRef
		) t1;

	RETURN totalAmount;
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 `invoiceOut_getPath` */;
/*!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 `invoiceOut_getPath`(vSelf INT) RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
BEGIN
	DECLARE vIssued DATE;
	DECLARE vSerial VARCHAR(15);

	SELECT issued, ref 
		INTO vIssued, vSerial
		FROM invoiceOut WHERE id = vSelf;

	RETURN CONCAT_WS('/'
		,'invoice'
		,YEAR(vIssued)
		,MONTH(vIssued)
		,DAY(vIssued)
		,CONCAT(YEAR(vIssued), vSerial, '.pdf')
	);
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 `invoiceOut_getWeight` */;
/*!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 `invoiceOut_getWeight`(vInvoice VARCHAR(15)) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
/**
 * Calcula el peso de una factura emitida
 *
 * @param vInvoice Id de la factura
 * @return vTotalWeight peso de la factura
 */
	DECLARE vTotalWeight DECIMAL(10,2);

	SELECT SUM(CAST(IFNULL(i.stems, 1) * s.quantity *
		IF(ic.grams, ic.grams, i.density * ic.cm3delivery / 1000)
		/ 1000 AS DECIMAL(10,2)))
			INTO vTotalWeight
		FROM ticket t
			JOIN sale s ON s.ticketFk = t.id
			JOIN item i ON i.id = s.itemFk
			JOIN itemCost ic ON ic.itemFk = i.id
				AND ic.warehouseFk = t.warehouseFk
		WHERE t.refFk = vInvoice
			AND i.intrastatFk ;

	RETURN vTotalWeight;
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 `invoiceSerial` */;
/*!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 `invoiceSerial`(vClientFk INT, vCompanyFk INT, vType CHAR(1)) RETURNS char(1) CHARSET utf8
    DETERMINISTIC
BEGIN
	/**
	* Obtiene la serie de de una factura 
	* dependiendo del area del cliente.
	* 
	* @param vClientFk Id del cliente
	* @param vCompanyFk Id de la empresa
	* @param vType Tipo de factura ["R", "M", "G"]
	* @return Serie de la factura
	*/
	DECLARE vTaxArea VARCHAR(25);
	DECLARE vSerie CHAR(1);

	IF (SELECT hasInvoiceSimplified FROM client WHERE id = vClientFk) THEN
		RETURN 'S';
	END IF;

	SELECT clientTaxArea(vClientFk, vCompanyFk) INTO vTaxArea;
    SELECT invoiceSerialArea(vType,vTaxArea) INTO vSerie;
	RETURN vSerie;
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 `invoiceSerialArea` */;
/*!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 `invoiceSerialArea`(vType CHAR(1), vTaxArea VARCHAR(25)) RETURNS char(1) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	
	DECLARE vSerie CHAR(1);
    
	IF vType = 'R' THEN
		SELECT 
			CASE vTaxArea 
				WHEN 'CEE' THEN 'H'
				WHEN 'WORLD' THEN 'E'
				WHEN 'NATIONAL' THEN 'T'
			END INTO vSerie;
		-- Factura multiple
	ELSEIF vType = 'M' THEN
		SELECT 
			CASE vTaxArea 
				WHEN 'CEE' THEN 'H'
				WHEN 'WORLD' THEN 'E'
				WHEN 'NATIONAL' THEN 'M'
			END INTO vSerie;
	-- Factura global
	ELSEIF vType = 'G' THEN
		SELECT 
			CASE vTaxArea 
				WHEN 'CEE' THEN 'V'
				WHEN 'WORLD' THEN 'X'
				ELSE 'A'
			END INTO vSerie;
	END IF;
	RETURN vSerie;
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 `isDateRangeAccounting` */;
/*!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 `isDateRangeAccounting`(vSelf DATE) RETURNS int(11)
    READS SQL DATA
BEGIN
/**
* Comprueba si la fecha pasada esta en el rango
* de fecha de contabilidad
* 
* @param vSelf Fecha para comparar
* @return vReturn
*
**/
	DECLARE vReturn BOOL;

	SELECT COUNT(*) INTO vReturn
		FROM accountingConfig 
			WHERE Vself BETWEEN minDate AND maxDate;

	RETURN vReturn;
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 `isIntrastatEntry` */;
/*!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 `isIntrastatEntry`(vEntryFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE isIntrastatOperation BOOL DEFAULT FALSE;
	DECLARE vSupplierCountry INT DEFAULT -1;
	DECLARE vClientCountry INT DEFAULT -1;

	SELECT c.id INTO vSupplierCountry
		FROM vn.country c
		JOIN vn.supplier s ON s.countryFk = c.id
		JOIN vn.entry e ON e.supplierFk = s.id
		WHERE e.id = vEntryFk
			AND c.isUeeMember = TRUE;

	SELECT c.id INTO vClientCountry
		FROM vn.country c
		JOIN vn.supplier s ON s.countryFk = c.id
		JOIN vn.company co ON co.id = s.id
		JOIN vn.entry e ON e.companyFk = co.id
		WHERE e.id = vEntryFk
			AND c.isUeeMember = TRUE;
	
	IF vSupplierCountry != vClientCountry AND vSupplierCountry * vClientCountry > 0 THEN
		SET isIntrastatOperation = TRUE;
	END IF;

	RETURN isIntrastatOperation;
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 `isLogifloraDay` */;
/*!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 `isLogifloraDay`(vShipped DATE, vWarehouse INT) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
		
	DECLARE vIsLogifloraDay BOOLEAN;

	SELECT COUNT(*) INTO vIsLogifloraDay
			FROM edi.warehouseFloramondo wf
				JOIN vn.floramondoConfig fc 
			WHERE wf.warehouseFk = vWarehouse
				AND vShipped BETWEEN DATE(TIMESTAMPADD(DAY, wf.travellingDays , fc.nextLanded))
					AND  DATE(TIMESTAMPADD(DAY, wf.travellingDays + wf.dayRange , fc.nextLanded));
			
	RETURN vIsLogifloraDay;
			
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 `isPalletHomogeneus` */;
/*!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 `isPalletHomogeneus`(vExpedition INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE vScanId INT;
	DECLARE vDistinctRoutesInThePallet INT;

	SELECT scan_id INTO vScanId
		FROM vn2008.scan_line
		WHERE code = vExpedition
		LIMIT 1;

		SELECT COUNT(*) INTO vDistinctRoutesInThePallet
		FROM (
			SELECT DISTINCT t.Id_Ruta
			FROM vn2008.scan_line sl
				JOIN vn2008.expeditions e ON e.expeditions_id = sl.code
				JOIN vn2008.Tickets t ON t.Id_Ticket = e.ticket_id
			WHERE sl.scan_id = vScanId
				AND t.Id_Ruta
		) t1;
			
	RETURN vDistinctRoutesInThePallet = 1;
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 `itemPacking` */;
/*!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 `itemPacking`(vBarcode VARCHAR(22), vWarehouseFk INT) RETURNS int(11)
    DETERMINISTIC
BEGIN

	DECLARE vPacking INTEGER DEFAULT 0;
    DECLARE vItemFk INTEGER;
    
    SELECT vn.barcodeToItem(vBarcode) INTO vItemFk;
    
    SELECT IFNULL(packing,0) INTO vPacking 
		FROM vn.buy 
        WHERE id = CAST(vBarcode AS DECIMAL(18,0));
    
    
    
    
    IF NOT vPacking THEN
		CALL cache.last_buy_refresh(FALSE);
		SELECT IFNULL(packing,1) INTO vPacking
			FROM 
			(SELECT packing , created
				FROM vn.itemShelving
				WHERE itemFk = vItemFk
			 UNION ALL
			 SELECT b.packing, landing
				FROM vn.buy b
				JOIN cache.last_buy lb ON lb.buy_id = b.id
				WHERE lb.warehouse_id = vWarehouseFk
					AND b.itemFk = vItemFk
			) packings
			ORDER BY created desc
			LIMIT 1;
	
    END IF;
        
	RETURN vPacking;
    
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 `itemShelvingPlacementSupply_ClosestGet` */;
/*!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 `itemShelvingPlacementSupply_ClosestGet`(vParkingFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN

	/* Devuelve el parking más cercano.*/
	DECLARE vColumn INT;
    DECLARE vClosestParkingFk INT;
    DECLARE vSectorFk INT;
    
	SELECT p.column, sectorFk INTO vColumn, vSectorFk
		FROM vn.parking p
        WHERE p.id = vParkingFk;
    
    SELECT itemShelvingFk INTO vClosestParkingFk
		FROM
		(
			SELECT ABS(p.column - vColumn) as distance, itemShelvingFk
				FROM vn.itemShelvingPlacementSupplyStock ispss
					JOIN vn.parking p ON p.id = ispss.parkingFk
                    JOIN vn.itemPlacementSupplyList ipsl ON ipsl.sectorFk = ispss.sectorFk AND ipsl.itemFk = ispss.itemFk
				WHERE p.sectorFk = vSectorFk
					AND ipsl.saldo > 0
		) sub 
        ORDER BY distance
        LIMIT 1;
            
	RETURN vClosestParkingFk;
    
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 `itemsInSector_get` */;
/*!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 `itemsInSector_get`(vTicketFk INT, vSectorFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN

	DECLARE vItemCount INT;
    
    SELECT count(*) INTO vItemCount
		FROM vn.sale s 
			JOIN vn.itemShelving ish ON ish.itemFk = s.itemFk
            JOIN vn.shelving sh ON sh.code = ish.shelvingFk
            JOIN vn.parking p ON p.id = sh.parkingFk
		WHERE s.ticketFk = vTicketFk
			AND p.sectorFk = vSectorFk;
            
	RETURN vItemCount;
    
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 `itemTag_getIntValue` */;
/*!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 `itemTag_getIntValue`(vValue VARCHAR(255)) RETURNS int(11)
    DETERMINISTIC
BEGIN
	IF vValue NOT REGEXP '^-?[0-9]+' THEN
		RETURN NULL;
	END IF;

	RETURN CAST(vValue AS SIGNED);
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 `item_getFhImage` */;
/*!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 `item_getFhImage`(itemFk INT) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	DECLARE vImageUrl VARCHAR(255);
	SELECT sr.PictureReference INTO vImageUrl
		FROM vn.buy b
			JOIN edi.ekt e ON b.ektFk = e.id
			JOIN edi.supplyResponse sr ON sr.Item_ArticleCode =e.`ref`
			JOIN vn.item i ON i.id = b.itemFk
		WHERE b.itemFk = itemFk
			ORDER BY (sr.EmbalageCode = e.package) DESC
			LIMIT 1;
	RETURN vImageUrl;
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 `item_getPackage` */;
/*!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 `item_getPackage`(vItemFk INT) RETURNS varchar(50) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	
		DECLARE vDiameter INT;
		DECLARE vPackageFk VARCHAR(50);
		DECLARE vCoeficient DOUBLE DEFAULT 1.08;
	
		SELECT MAX(LEFT(value,3)) INTO vDiameter
			FROM vn.itemTag it 
				JOIN vn.tag t ON t.id = it.tagFk
			WHERE it.itemFk = vItemFk
				AND t.overwrite = 'diameter';
	
		SELECT 8000 + FLOOR(vc.ccLength * vc.ccWidth / (vCoeficient * PI() * (vDiameter / 2) * (vDiameter / 2)))
			INTO vPackageFk
			FROM vn.volumeConfig vc;
		
		INSERT IGNORE INTO vn.packaging(id, width, `depth`)
			SELECT vPackageFk, 
					FLOOR(vc.ccWidth / FLOOR(vc.ccWidth / vDiameter)), 
					FLOOR(vc.ccLength / FLOOR(vc.ccLength / vDiameter))
			FROM vn.volumeConfig vc;
			
		RETURN vPackageFk;
	
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 `item_getVolume` */;
/*!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 `item_getVolume`(vSelf INT, vPackaging VARCHAR(10)) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Calculates the volume occupied by an item together
 * with its packaging.
 *
 * @param vSelf The item id
 * @param vPackaging The packaging id
 * @return The volume in cubic centimeters
 */
	DECLARE vVolume INT;

	SELECT SUM(IF(p.volume > 0,
			p.volume,
			p.width * p.depth * IF(IFNULL(p.height,0), p.height, IFNULL(i.size,60) + 10)
		)) INTO vVolume
		FROM packaging p
			JOIN item i ON i.id = vSelf
		WHERE p.id = vPackaging;
		
	RETURN vVolume;

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 `lastDayOfWeek` */;
/*!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 `lastDayOfWeek`(vYear INT, vWeek INT) RETURNS date
    DETERMINISTIC
BEGIN	
/**
 * Returns the date of the last day of the week
 *
 * @param vYear The year
 * @param vWeek The week number
 * @return Date of the first day of the week
 */
	DECLARE vDate DATE;

	SELECT dated INTO vDate
		FROM `time`
		WHERE `year` = vYear
			AND `week` = vWeek
		ORDER BY dated DESC
		LIMIT 1;

	RETURN vDate;
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 `machine_checkPlate` */;
/*!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 `machine_checkPlate`(vPlate VARCHAR(10)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
/**
 * Comprueba si existe matrícula
 * 
 * @param vPlate matrícula del vehículo
 * @return Devuelve TRUE en caso de que exista
 * 
 */
	
	IF (SELECT COUNT(*)
			FROM machine m 
			WHERE m.plate = vPlate
	   ) THEN	
		RETURN TRUE;
	ELSE
		RETURN FALSE;
	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 FUNCTION IF EXISTS `messageSend` */;
/*!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 `messageSend`(vRecipient VARCHAR(255) CHARSET utf8, vMessage TEXT CHARSET utf8) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE result INT;
	DECLARE vSenderFk INT;

	SELECT id INTO vSenderFk 
		FROM account.user WHERE `name` = account.myUser_getName();
		
	RETURN (SELECT messageSendWithUser(vSenderFk, vRecipient, vMessage));
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 `messageSendWithUser` */;
/*!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 `messageSendWithUser`(vSenderFK INT, vRecipient VARCHAR(255) CHARSET utf8, vMessage TEXT CHARSET utf8) RETURNS int(11)
    DETERMINISTIC
BEGIN

	DECLARE vCount INT;
	DECLARE vUuid VARCHAR(255);
	DECLARE vSendDate DATETIME DEFAULT NOW();
	DECLARE vSender VARCHAR(255) CHARSET utf8;

	SELECT `name` INTO vSender 
		FROM account.user WHERE id = vSenderFK;
        
	SET vRecipient = LOWER(vRecipient);

	DROP TEMPORARY TABLE IF EXISTS tRecipients;
	CREATE TEMPORARY TABLE tRecipients
		SELECT u.name finalRecipient
			FROM account.mailAlias a
				JOIN account.mailAliasAccount aa ON aa.mailAlias = a.id
				JOIN account.user u ON u.id = aa.account
			WHERE a.alias = vRecipient COLLATE utf8_unicode_ci
				AND u.name != vSender
				AND u.active
		UNION
		SELECT u.name FROM account.user u
			WHERE u.name = vRecipient
				AND u.active;

	SELECT COUNT(*) INTO vCount FROM tRecipients;

	IF vCount = 0 THEN
		RETURN vCount;
	END IF;    

	SET vUuid = UUID();

	INSERT INTO message
		SET uuid = vUuid,
			sender = vSender,
			recipient = vRecipient,
			message = vMessage,
			sendDate = vSendDate;

	INSERT INTO messageInbox (uuid, sender, recipient, finalRecipient, message, sendDate) 
		SELECT vUuid, vSender, vRecipient, finalRecipient, vMessage, vSendDate
			FROM tRecipients;

	DROP TEMPORARY TABLE tRecipients;
	RETURN vCount;
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 `MIDNIGHT` */;
/*!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 `MIDNIGHT`(vDate DATE) RETURNS datetime
    DETERMINISTIC
BEGIN
	RETURN TIMESTAMP(vDate,'23:59:59');
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 `nz` */;
/*!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 `nz`(vQuantity DOUBLE) RETURNS double
    DETERMINISTIC
BEGIN

	DECLARE vResult DOUBLE;

	SET vResult = IFNULL(vQuantity,0);

	RETURN vResult;

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 `orderTotalVolume` */;
/*!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 `orderTotalVolume`(vOrderId INT) RETURNS decimal(10,3)
    READS SQL DATA
BEGIN
	-- Devuelte el volumen total de la orden sumada
	DECLARE vWarehouseId INTEGER;
	DECLARE vVolume DECIMAL(10,3);
 
    SELECT IFNULL(SUM(o.amount * ic.cm3delivery)/1000000,0) INTO vVolume
		FROM hedera.orderRow o
			JOIN item i ON i.id = o.itemFk
			JOIN itemCost ic on ic.itemFk = o.itemFk AND ic.warehouseFk = o.warehouseFk
		WHERE o.orderFk = vOrderId;

    RETURN vVolume;

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 `orderTotalVolumeBoxes` */;
/*!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 `orderTotalVolumeBoxes`(vOrderId INT) RETURNS decimal(10,3)
    READS SQL DATA
BEGIN
/**
 * Devuelve el volumen estimado del ticket sumado, en cajas
 *
 * @param vOrder Id del pedido
 */
	DECLARE vVolumeBoxM3 DOUBLE;
	DECLARE vOrderTotalVolumeBoxes DECIMAL(10,1);
	DECLARE vVnBoxId VARCHAR(10) DEFAULT '94';

	SELECT volume / 1000000
		INTO vVolumeBoxM3
		FROM packaging
		WHERE id = vVnBoxId;

	SET vOrderTotalVolumeBoxes = orderTotalVolume(vOrderId) / vVolumeBoxM3;

	RETURN vOrderTotalVolumeBoxes;
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 `phytoPassport` */;
/*!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 `phytoPassport`(vRef VARCHAR(15)) RETURNS text CHARSET utf8
    DETERMINISTIC
BEGIN
DECLARE vPhyto TEXT CHARSET utf8 COLLATE utf8_unicode_ci;
SELECT 
		GROUP_CONCAT(i.id,
			':',
			ppa.denomination,
			' ',
			pp.number,
            CHAR(13,10)
			SEPARATOR '') fitosanitario
	INTO vPhyto
FROM
    sale s
        JOIN
	ticket t ON t.id = s.ticketFk
		JOIN
    item i ON i.id = s.itemFk
        JOIN
    plantpassport pp ON pp.producerFk = i.producerFk
        JOIN
    plantpassportAuthority ppa ON ppa.id = pp.plantpassportAuthorityFk
        JOIN
    itemBotanicalWithGenus ib ON ib.itemFk = i.id
        JOIN
    botanicExport be ON be.`code` = 'phytosanitaryPassport'
        LEFT JOIN
    ediGenus eg ON eg.id = be.ediGenusFk
        LEFT JOIN
    ediSpecie es ON es.id = be.ediSpecieFk
WHERE
    t.refFk = vRef
        AND ib.ediBotanic LIKE CONCAT(IFNULL(eg.latinGenusName, ''),
            IF(latinSpeciesName > '',
                CONCAT(' ', latinSpeciesName),
                ''),
            '%');
RETURN vPhyto;
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 `routeProposal` */;
/*!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 `routeProposal`(vTicketFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN

	DECLARE vRouteFk INT;
    DECLARE vAddressFk INT;
    
    DECLARE vLanded DATE;
    DECLARE vZoneFk INT;
    DECLARE vSignificativeFriendship INT DEFAULT 6;
    DECLARE vVolumeMax DECIMAL(5,1) DEFAULT 10;
    
    SELECT addressFk, zoneFk, landed INTO vAddressFk, vZoneFk, vLanded
		FROM vn.ticket 
        WHERE id = vTicketFk;
	
    -- Se inicia la selección de rutas posibles con aquellas cuyas agencias alguna vez han estado asociadas con nuestra zona
    DROP TEMPORARY TABLE IF EXISTS tmp.route;
	CREATE TEMPORARY TABLE tmp.route
		SELECT 	r.id routeFk, 
				zf.friendship zoneFriendship
			FROM vn.route r
				JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk
			WHERE friendship >= vSignificativeFriendship
				AND zf.zoneFk = vZoneFk
                AND r.created = vLanded
            ORDER BY friendship;
	
    -- Se eliminan aquellas que superan el volumen máximo
    DELETE r.*
		FROM tmp.route r 
			JOIN (SELECT routeFk, sum(volume) volume
					FROM vn.saleVolume
						WHERE landed = vLanded
					GROUP BY routeFk) sub ON sub.routeFk = r.routeFk
			WHERE sub.volume > vVolumeMax;
    
    -- Se ordenan las que quedan en función con la afinidad del resto de consignatarios de cada ruta
	SELECT routeFk INTO vRouteFk
		FROM
			(SELECT r.routeFk, r.zoneFriendship, sum(af.friendship) friendshipSum
				FROM tmp.route r
					LEFT JOIN vn.ticket t ON t.routeFk = r.routeFk
					LEFT JOIN cache.addressFriendship af ON af.addressFk2 = t.addressFk AND af.addressFk1 = vAddressFk
				GROUP BY routeFk
				ORDER BY zoneFriendship DESC, friendshipSum DESC
        ) sub
        LIMIT 1;
	
	RETURN vRouteFk;
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 `routeProposal_` */;
/*!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 `routeProposal_`(vTicketFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN

	DECLARE vRouteFk INT;
    DECLARE vAddressFk INT;
    DECLARE vShipped DATETIME;
    
    SELECT addressFk, date(shipped) INTO vAddressFk, vShipped
		FROM vn.ticket 
        WHERE id = vTicketFk;

	SELECT routeFk INTO vRouteFk
		FROM
			(SELECT t.routeFk, sum(af.friendship) friendshipSum
				FROM vn.ticket t
					JOIN cache.addressFriendship af ON af.addressFk2 = t.addressFk AND af.addressFk1 = vAddressFk
				WHERE t.shipped BETWEEN vShipped and MIDNIGHT(vShipped)
					AND t.routeFk
				GROUP BY routeFk
				ORDER BY friendshipSum DESC
        ) sub
        LIMIT 1;
	
	RETURN vRouteFk;
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 `routeProposal_beta` */;
/*!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 `routeProposal_beta`(vTicketFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN

	DECLARE vRouteFk INT;
    DECLARE vAddressFk INT;
    
    DECLARE vLanded DATE;
    DECLARE vZoneFk INT;
    DECLARE vSignificativeFriendship INT DEFAULT 6;
    DECLARE vVolumeMax DECIMAL(5,1) DEFAULT 10;
    
    SELECT addressFk, zoneFk, landed INTO vAddressFk, vZoneFk, vLanded
		FROM vn.ticket 
        WHERE id = vTicketFk;
	
    -- Se inicia la selección de rutas posibles con aquellas cuyas agencias alguna vez han estado asociadas con nuestra zona
    DROP TEMPORARY TABLE IF EXISTS tmp.route;
	CREATE TEMPORARY TABLE tmp.route
		SELECT 	r.id routeFk, 
				zf.friendship zoneFriendship
			FROM vn.route r
				JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk
			WHERE friendship >= vSignificativeFriendship
				AND zf.zoneFk = vZoneFk
                AND r.created = vLanded
            ORDER BY friendship;
	
    -- Se eliminan aquellas que superan el volumen máximo
    DELETE r.*
		FROM tmp.route r 
			JOIN (SELECT routeFk, sum(volume) volume
					FROM vn.saleVolume
						WHERE landed = vLanded
					GROUP BY routeFk) sub ON sub.routeFk = r.routeFk
			WHERE sub.volume > vVolumeMax;
    
    -- Se ordenan las que quedan en función con la afinidad del resto de consignatarios de cada ruta
	SELECT routeFk INTO vRouteFk
		FROM
			(SELECT r.routeFk, r.zoneFriendship, sum(af.friendship) friendshipSum
				FROM tmp.route r
					LEFT JOIN vn.ticket t ON t.routeFk = r.routeFk
					LEFT JOIN cache.addressFriendship af ON af.addressFk2 = t.addressFk AND af.addressFk1 = vAddressFk
				GROUP BY routeFk
				ORDER BY zoneFriendship DESC, friendshipSum DESC
        ) sub
        LIMIT 1;
	
	RETURN vRouteFk;
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 `specie_IsForbidden` */;
/*!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 `specie_IsForbidden`(vItemFk INT, vAddressFk INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	
	DECLARE vIsForbbiden BOOL;
	DECLARE vLeft INT;

	SELECT zg.lft INTO vLeft
		FROM vn.address a 
			JOIN vn.zoneGeo zg ON zg.name = a.postalCode 
		WHERE a.id = vAddressFk;
	
	SELECT sgi.isForbidden INTO vIsForbbiden
		FROM vn.specieGeoInvasive sgi 
			JOIN vn.zoneGeo zg ON zg.id = sgi.zoneGeofk 
			JOIN vn.itemBotanical ib ON ib.genusFk = sgi.genusFk AND sgi.specieFk IN ('sp.',ib.specieFk)
		WHERE vLeft BETWEEN zg.lft AND zg.rgt
			AND ib.itemFk = vItemFk
		ORDER BY zg.`depth` DESC 
		LIMIT 1;

	RETURN IFNULL(vIsForbbiden, FALSE);
	
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 `testCIF` */;
/*!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 `testCIF`(vCIF VARCHAR(9)) RETURNS varchar(10) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	
	DECLARE vLetraInicial VARCHAR(1);
	DECLARE vLetraFinal VARCHAR(1);
	DECLARE vParteNumerica VARCHAR(7);
	DECLARE vSuma INT DEFAULT 0;
	DECLARE vNumero INT DEFAULT 0;
	DECLARE i INT DEFAULT 0;
	DECLARE vResult BOOL DEFAULT FALSE;

	SET vLetraInicial = SUBSTR(vCIF, 1, 1);
	SET vLetraFinal = SUBSTR(vCIF, 9, 1);
    SET vParteNumerica = SUBSTR(vCIF, 2, 7);
 
    WHILE i < 7 DO   
    
    	SET i = i + 1;
    
    	SET vNumero = CAST(SUBSTR(vParteNumerica, i, 1) AS DECIMAL(1,0));
    
    	IF i MOD 2 THEN
    	
    		SET vNumero = vNumero * 2;
    		SET vNumero = vNumero MOD 10 + FLOOR(vNumero/10);
    	
    	END IF;
   	
    	SET vSuma = vSuma +  vNumero;
    
    END WHILE;
   
   	SET vSuma = vSuma MOD 10;
   
   	IF vSuma > 0 THEN
   	
    	SET vSuma = 10 - vSuma;
   
    END IF;
    
    -- Comprobación de dígito de control
    IF CAST(vLetraFinal AS DECIMAL(1,0)) = vSuma THEN
    
    	SET vResult = TRUE;
    
    END IF;
   
   	IF vSuma = 0 THEN
   	
   		SET vSuma = 10;
   	
   	END IF;
   
   	IF  CHAR(64 + vSuma) = vLetraFinal THEN
    
    	SET vResult = TRUE;
    
    END IF;
      
    -- Sólo se aceptan letras como caracter inicial
    IF ASCII(vLetraInicial) < 65 OR ASCII(vLetraInicial) > 87 THEN  -- Ha de ser entre la A y la W
    
    	SET vResult = FALSE;
    
    END IF;
   
    RETURN vResult;
   
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 `testNIE` */;
/*!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 `testNIE`(vNIE VARCHAR(9)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN
	
	DECLARE vIndice INT;
	DECLARE vNumero VARCHAR(7);
	DECLARE vOperador VARCHAR(9);
	DECLARE vParteNumerica DECIMAL(8,0);
	DECLARE vLetraInicial VARCHAR(1);
	DECLARE vLetraFinal VARCHAR(1);
	DECLARE vLetrasFinalesPosibles VARCHAR(24) DEFAULT "TRWAGMYFPDXBNJZSQVHLCKE";
	DECLARE vLetraInicialEsIncorrecta BOOL DEFAULT FALSE;
	 
	SET vLetraInicial = SUBSTR(vNIE, 1, 1);
	SET vLetraFinal = SUBSTR(vNIE, 9, 1);
	SET vNumero = SUBSTR(vNIE, 2, 7);

 	CASE vLetraInicial
    
	   WHEN 'X' THEN
	   
	        SET vOperador = "0";
	        
	   WHEN 'Y' THEN
	   
	        SET vOperador = "1";
	        
	   WHEN 'Z' THEN
	   
	        SET vOperador = "2";
	       
	   ELSE
	   
	   		SET vLetraInicialEsIncorrecta = TRUE;
    
   	END CASE;
    
   	SET vOperador = CONCAT(vOperador, vNumero);
    SET vParteNumerica = CAST(vOperador AS DECIMAL(8,0));
    SET vIndice = Round(vParteNumerica Mod 23, 0) + 1;

   	IF SUBSTR(vLetrasFinalesPosibles, vIndice, 1) = vLetraFinal AND vLetraInicialEsIncorrecta = FALSE THEN
    
   		RETURN TRUE;
   	
   	ELSE
   	
   		RETURN FALSE;
   	
   	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 FUNCTION IF EXISTS `testNIF` */;
/*!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 `testNIF`(vNIF VARCHAR(9)) RETURNS tinyint(1)
    DETERMINISTIC
BEGIN

	DECLARE vIndice INT;
 	DECLARE vParteNumerica DECIMAL(8,0);
 	DECLARE vLetra VARCHAR(1);
 	DECLARE vLetrasPosibles VARCHAR(24) DEFAULT "TRWAGMYFPDXBNJZSQVHLCKE";
 
    SET vLetra = SUBSTRING(vNIF, 9, 1);
   
   	SET vParteNumerica = CAST(SUBSTRING(vNIF, 1, 8) AS DECIMAL(8,0));
   
    SET vIndice = Round(vParteNumerica MOD 23, 0) + 1;
    
    If SUBSTRING(vLetrasPosibles, vIndice, 1) = vLetra Then
       
        RETURN TRUE;
       
    ELSE
        
		RETURN FALSE;
    
    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 FUNCTION IF EXISTS `ticketCollection_getNoPacked` */;
/*!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 `ticketCollection_getNoPacked`(vCollectionFk INT) RETURNS varchar(100) CHARSET utf8 COLLATE utf8_unicode_ci
    DETERMINISTIC
BEGIN
	
	/*
	 * return message with tickets and collection if there is tickets of a collection without expeditions
	 * 
	 * @param vCollectionFk the collection to check
	 * @return an array with collection and tickets without expeditions
	 * 
	 */
	
	DECLARE vAnswer VARCHAR(100) DEFAULT '';

	IF collection_isPacked(vCollectionFk) = FALSE THEN
		SELECT CONCAT('Colección: ',tc.collectionFk,'  Tickets: ' , GROUP_CONCAT(tc.ticketFk) ) INTO vAnswer
			FROM vn.ticketCollection tc
				LEFT JOIN vn.expedition e ON e.ticketFk = tc.ticketFk 
			WHERE tc.collectionFk = vCollectionFk
				AND ISNULL(e.id);
	END IF;

	RETURN vAnswer;
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 `ticketGetTotal` */;
/*!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 `ticketGetTotal`(vTicketId INT) RETURNS decimal(10,2)
    READS SQL DATA
    DETERMINISTIC
BEGIN
/**
 * Calcula el total con IVA de un ticket.
 *
 * @param vTicketId Identificador del ticket
 * @return Total del ticket
 */
	DECLARE vTotal DECIMAL(10,2);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		ENGINE = MEMORY
		SELECT vTicketId ticketFk;

	CALL ticketGetTotal;

	SELECT total INTO vTotal FROM tmp.ticketTotal;

	DROP TEMPORARY TABLE
		tmp.ticket,
		tmp.ticketTotal;
	
	RETURN vTotal;
    
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 `ticketPositionInPath` */;
/*!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 `ticketPositionInPath`(vTicketId INT) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
BEGIN
	
 DECLARE vRestTicketsMaxOrder INT;
 DECLARE vRestTicketsMinOrder INT;
 DECLARE vRestTicketsPacking INT;
 DECLARE vMyProductionOrder INT;
 DECLARE vPosition VARCHAR(10) DEFAULT 'MID';
 DECLARE vMyPath INT;
 DECLARE vMyWarehouse INT;
 DECLARE PACKING_ORDER INT;
 DECLARE vExpeditionsCount INT;
 DECLARE vIsValenciaPath BOOLEAN DEFAULT FALSE;

SELECT `order` 
 INTO PACKING_ORDER
  FROM state
  WHERE code = 'PACKING';

SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0)
 INTO vMyPath, vMyWarehouse, vMyProductionOrder
  FROM ticket t
   LEFT JOIN ticketState ts on ts.ticket = t.id
  WHERE t.id = vTicketId;

SELECT (ag.`name` = 'VN_VALENCIA') 
 INTO vIsValenciaPath
  FROM vn2008.Rutas r
   JOIN vn2008.Agencias a on a.Id_Agencia = r.Id_Agencia
   JOIN vn2008.agency ag on ag.agency_id = a.agency_id
  WHERE r.Id_Ruta = vMyPath;

IF vIsValenciaPath THEN -- Rutas Valencia

 SELECT COUNT(*)
  INTO vExpeditionsCount
   FROM expedition e
    JOIN ticket t ON t.id = e.ticketFk
   WHERE t.routeFk = vMyPath;
   
 SELECT MAX(ts.productionOrder), MIN(ts.productionOrder)
  INTO vRestTicketsMaxOrder, vRestTicketsMinOrder
   FROM ticket t
    LEFT JOIN ticketState ts on t.id = ts.ticket
   WHERE t.routeFk = vMyPath
    AND t.warehouseFk = vMyWarehouse
    AND t.id != vTicketid;

 SELECT COUNT(*) 
  INTO vRestTicketsPacking
   FROM ticket t
    LEFT JOIN ticketState ts on t.id = ts.ticket
   WHERE ts.productionOrder = PACKING_ORDER
    AND t.routeFk = vMyPath
    AND t.warehouseFk = vMyWarehouse
    AND t.id != vTicketid;

  IF  vExpeditionsCount = 1 THEN
    SET vPosition = 'FIRST';
   ELSEIF vRestTicketsMinOrder > PACKING_ORDER THEN
    SET vPosition = 'LAST';
   ELSEIF vRestTicketsPacking THEN
    SET vPosition = 'SHARED';
   ELSE
    SET vPosition = 'MID';
  END IF;

ELSE
 SET vPosition = 'MID';

END IF;

RETURN vPosition;

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 `ticketSplitCounter` */;
/*!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 `ticketSplitCounter`(vTicketFk INT) RETURNS varchar(15) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE vSplitCounter VARCHAR(15);

	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
				WHERE ticketFk = vTicketFk
		) sub;
        
	RETURN IFNULL(vSplitCounter,'--');
    
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 `ticketTotalVolume` */;
/*!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 `ticketTotalVolume`(vTicketId INT) RETURNS decimal(10,3)
    READS SQL DATA
BEGIN
	-- Devuelte el volumen total del ticket sumado

	DECLARE vVolume DECIMAL(10,3);

        SELECT SUM(volume) INTO vVolume
			FROM saleVolume
			WHERE ticketFk = vTicketId;
    RETURN vVolume;

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 `ticketTotalVolumeBoxes` */;
/*!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 `ticketTotalVolumeBoxes`(vTicketId INT) RETURNS decimal(10,1)
    DETERMINISTIC
BEGIN

/* 
 *  Devuelve el volumen estimado del ticket sumado, en cajas
 *
 *	vTicketId Numero de ticket
 *	
 */

	DECLARE vVolumeBoxM3 DOUBLE;
    DECLARE vTicketTotalVolumeBoxes DECIMAL(10,1);
    DECLARE vVnBoxId VARCHAR(10) DEFAULT '94';
    
    SELECT volume / 1000000 INTO vVolumeBoxM3 FROM packaging WHERE id = vVnBoxId;
    
    SET vTicketTotalVolumeBoxes = ticketTotalVolume(vTicketId) / vVolumeBoxM3;
    
    RETURN vTicketTotalVolumeBoxes;

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 `ticketWarehouseGet` */;
/*!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 `ticketWarehouseGet`(vTicketFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE vWarehouseFk INT;

	SELECT warehouseFk INTO vWarehouseFk
		FROM ticket 
		WHERE id = vTicketFk;

	RETURN vWarehouseFk;
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 `ticket_CC_volume` */;
/*!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 `ticket_CC_volume`(vTicketFk INT) RETURNS decimal(10,1)
    READS SQL DATA
BEGIN
	
	DECLARE vCC DECIMAL(10,1);

	SELECT sum(sv.volume * IF(i.itemPackingTypeFk = 'H', vc.dutchCompressionRate, 1)) / (p.volume / 1000000)
		INTO vCC
		FROM vn.saleVolume sv 
			JOIN vn.sale s ON s.id = sv.saleFk 
			JOIN vn.item i ON i.id = s.itemFk 
			JOIN vn.packaging p ON p.id = 'CC'
			JOIN vn.volumeConfig vc 
		WHERE sv.ticketFk = vTicketFk;
	
	RETURN vCC;

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 `ticket_get` */;
/*!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 `ticket_get`(vParamFk INT) RETURNS int(11)
    READS SQL DATA
proc:BEGIN
	
	/* Devuelve el número de ticket o collection consultando en varias tablas posibles
	 * 
	 * @param vParamFk Número a validar
	 * @return vValidFk Identificador validado
	 */
	
	DECLARE vValidFk INT;

	-- Tabla vn.saleGroup
	SELECT s.ticketFk INTO vValidFk
		FROM vn.sale s
			JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
			JOIN vn.saleGroup sg ON sg.id = sgd.saleGroupFk 
		WHERE sg.id = vParamFk
			AND sg.created > TIMESTAMPADD(WEEK,-1, CURDATE())
		LIMIT 1;
	
	IF vValidFk THEN
	
		RETURN vValidFk;
	
		LEAVE proc;
	
	END IF;

	-- Tabla vn.collection
	SELECT c.id INTO vValidFk
		FROM vn.collection c 
		WHERE c.id = vParamFk
			AND c.created > TIMESTAMPADD(WEEK,-1, CURDATE());
	
	IF vValidFk THEN
	
		RETURN vValidFk;
	
		LEAVE proc;
	
	END IF;

	-- Tabla vn.ticket
	SELECT t.id INTO vValidFk
		FROM vn.ticket t
		WHERE t.id = vParamFk
			AND t.shipped > TIMESTAMPADD(WEEK,-1, CURDATE());
	
	IF vValidFk THEN
	
		RETURN vValidFk;
	
		LEAVE proc;
	
	END IF;

	RETURN NULL;
	
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 `ticket_getFreightCost` */;
/*!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 `ticket_getFreightCost`(vTicketFk INT) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
/**
 * Devuelve el coste de transportar un ticket.
 *
 * @vTicketFk Id del ticket a calcular
 */
	DECLARE deliveryPrice DECIMAL (10,2);
    
	IF (SELECT isVolumetric FROM ticket t JOIN zone z ON t.zoneFk = z.id 
			WHERE t.id = vTicketFk) THEN
		SELECT SUM(sv.freight) INTO deliveryPrice
			FROM vn.saleVolume sv
			WHERE sv.ticketFk = vTicketFk;
	ELSE
		SELECT SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) INTO deliveryPrice
			FROM vn.ticket t
				LEFT JOIN expedition e ON e.ticketFk = t.id
				JOIN expeditionBoxVol ebv ON ebv.boxFk = e.isBox
			WHERE t.id = vTicketFk;
		
	END IF;
	RETURN deliveryPrice;
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 `ticket_getWeight` */;
/*!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 `ticket_getWeight`(vTicketFk INT) RETURNS decimal(10,3)
    READS SQL DATA
BEGIN
/**
 * Devuelve el peso total del ticket
 * 
 * @return Total peso
 */
	
	DECLARE vWeight DECIMAL(10,3);

    SELECT sum(weight) INTO vWeight
		FROM saleVolume
		WHERE ticketFk = vTicketFk;
	
    RETURN vWeight;

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 `ticket_getWithParameters` */;
/*!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 `ticket_getWithParameters`(vClientFk INT, vWarehouseFk INT, vShipped DATE, vAddressFk INT, vCompanyFk INT, vAgencyModeFk INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Devuelve un ticket con los parametros, en caso de no existir lo crea
 *
 * @param vClientFk Cliente
 * @param vWarehouseFk almacen
 * @param vShipped Fecha de preparacion
 * @param vAddressFk Consignatario
 * @param vCompanyFk Empresa
 * @param vAgencyModeFk agencia
 */  
 
 	DECLARE vTicket INT;
    
	SELECT t.id INTO vTicket
		FROM vn.ticket t
		WHERE (t.clientFk <=> vClientFk OR vClientFk IS NULL)
			AND (t.warehouseFk <=> vWarehouseFk OR vWarehouseFk IS NULL)
            AND (t.shipped <=> vShipped OR vShipped IS NULL)
            AND (t.addressFk <=> vAddressFk OR vAddressFk IS NULL)
            AND (t.companyFk <=> vCompanyFk OR vCompanyFk IS NULL)
            AND (t.agencyModeFk <=> vAgencyModeFk OR vAgencyModeFk IS NULL)
		LIMIT 1;
        
	IF vTicket IS NULL THEN
		CALL vn.ticket_add(
				vClientFk,
				IFNULL(vShipped, CURDATE()),
				vWarehouseFk,
				vCompanyFk,
				vAddressFk,
				vAgencyModeFk,
				NULL,
				vShipped,
				`account`.`myUser_getId`(),
				TRUE,
				vTicket
			);
    END IF;
    
    RETURN vTicket;
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 `ticket_HasUbication` */;
/*!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 `ticket_HasUbication`(vTicketFk INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	
	DECLARE hasUbication BOOL;

	SELECT COUNT(*) INTO hasUbication
		FROM vn.ticket t
			JOIN vn.routesMonitor rm ON rm.routeFk = t.routeFk
		WHERE rm.beachFk 
			AND t.id = vTicketFk;
	
	RETURN hasUbication;

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 `till_new` */;
/*!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 `till_new`(
	 vClient INT
	,vBank INT
	,vAmount DOUBLE
	,vConcept VARCHAR(25)
	,vDated DATE
	,vSerie CHAR(1)
	,vBatch TINYINT
	,vNumber INT
	,vCompany SMALLINT
	,vWorker INT
) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vAccount VARCHAR(12);
	DECLARE vSubaccount VARCHAR(12);
	DECLARE vAsiento INT DEFAULT NULL;

	-- Inserta el registro en cajas

	INSERT INTO till
	SET
		workerFk = vWorker
		,bankFk = vBank
		,`in` = vAmount
		,concept = vConcept
		,dated = vDated
		,serie = vSerie
		,isAccountable = vBatch
		,`number` = vNumber
		,companyFk = vCompany;

	-- Inserta los asientos contables

	SELECT account INTO vAccount
		FROM bank WHERE id = vBank;

	SELECT accountingAccount INTO vSubaccount
		FROM `client` WHERE id = vClient;

	SET vAsiento = xdiario_new
	(
		vAsiento
		,vDated
		,vAccount
		,vSubaccount
		,vConcept
		,vAmount
		,0
		,0
		,NULL -- Serie
		,NULL -- Factura
		,NULL -- IVA
		,NULL -- Recargo
		,FALSE -- Auxiliar
		,vCompany
	);
	DO xdiario_new
	(
		vAsiento
		,vDated
		,vSubaccount
		,vAccount
		,vConcept
		,0
		,vAmount
		,0
		,NULL -- Serie
		,NULL -- Factura
		,NULL -- IVA
		,NULL -- Recargo
		,FALSE -- Auxiliar
		,vCompany
	);

	RETURN NULL;
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 `timeWorkerControl_getDirection` */;
/*!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 `timeWorkerControl_getDirection`(vUserFk INT, vTimed DATETIME) RETURNS varchar(6) CHARSET utf8 COLLATE utf8_unicode_ci
    READS SQL DATA
BEGIN
/**
 * Verifica la dirección de la fichada 
 * @param vUserFk Identificador del trabajador
 * @param vTimed Hora de la fichada
 * @return Retorna sentido de la fichada 'in, out, middle'
 */

	DECLARE vPrevious DATETIME ;
    DECLARE vNext DATETIME ;
    DECLARE vPreviousDirection VARCHAR(3) ;
    DECLARE vNextDirection VARCHAR(3) ;
    DECLARE vDayStayMax INT;
    DECLARE vTimedSeconds INT;
    DECLARE vLastTimeIn INT;
	
    SELECT UNIX_TIMESTAMP(vTimed) INTO vTimedSeconds;
    
    SELECT dayStayMax INTO vDayStayMax
		FROM vn.workerTimeControlParams;

    SELECT timed, direction INTO vNext,vNextDirection
		FROM vn.workerTimeControl 
        WHERE userFk = vUserFk 
			AND direction IN ('in','out')
            AND timed > vTimed
		ORDER BY timed ASC
        LIMIT 1;
        
    SELECT timed, direction INTO vPrevious, vPreviousDirection
		FROM vn.workerTimeControl 
        WHERE userFk = vUserFk 
			AND direction IN ('in','out')
            AND timed < vTimed
		ORDER BY timed DESC
        LIMIT 1;   
	
    IF (vTimedSeconds - UNIX_TIMESTAMP(vPrevious) + UNIX_TIMESTAMP(vNext) - vTimedSeconds)<= vDayStayMax AND vPreviousDirection = 'in'  AND vNextDirection = 'out' THEN 
		RETURN 'middle';
	END IF;
    
    
    IF (vTimedSeconds> UNIX_TIMESTAMP(vPrevious)) THEN
		IF vPreviousDirection = 'in' THEN 
			RETURN 'out';
		ELSE
			SELECT UNIX_TIMESTAMP(MAX(timed)) INTO vLastTimeIn
				FROM vn.workerTimeControl 
				WHERE userFk = vUserFk 
					AND direction ='in'
					AND timed < vPrevious;
			IF vTimedSeconds - vLastTimeIn <= vDayStayMax THEN
				RETURN 'out';
            END IF;
		END IF;
	END IF;

	RETURN 'in';
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 `time_getSalesYear` */;
/*!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 `time_getSalesYear`(vMonth INT, vYear INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
DECLARE vSalesYear INT;
SELECT salesYear INTO vSalesYear
FROM `time`
WHERE `month` = vMonth AND `year` = vYear
LIMIT 1;
RETURN vSalesYear;
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 `travel_getForLogiflora` */;
/*!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 `travel_getForLogiflora`(vLanded DATE, vWarehouseFk INT) RETURNS int(11)
    READS SQL DATA
BEGIN
	
	/**
	 * Devuelve un número de travel para compras de Logiflora a partir de la fecha de llegada y del almacén.
	 * Si no existe lo genera.
	 * 
	 * @param vLanded Fecha de llegada al almacén
	 * @param vWarehouseFk Identificador de vn.warehouse
	 */

	DECLARE vTravelFk INT;

	IF vLanded THEN
	
		SELECT IFNULL(MAX(tr.id),0) INTO vTravelFk 
			FROM vn.travel tr
				JOIN vn.warehouse wIn ON wIn.id = tr.warehouseInFk
				JOIN vn.warehouse wOut ON wOut.id = tr.warehouseOutFk
            		JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
			WHERE wIn.id = vWarehouseFk
				AND wOut.name = 'Holanda'
                	AND am.name = 'LOGIFLORA'
				AND landed = vLanded;

		IF NOT vTravelFk THEN
		
			INSERT INTO vn.travel(landed, shipped, warehouseInFk, warehouseOutFk, agencyModeFk)
				SELECT vLanded, curdate(), vWarehouseFk, wOut.id, am.id 
					FROM vn.warehouse wOut 
						JOIN vn.agencyMode am ON am.name = 'LOGIFLORA'
					WHERE wOut.name = 'Holanda';
					
			SELECT MAX(tr.id) INTO vTravelFk 
				FROM vn.travel tr
					JOIN vn.warehouse wIn ON wIn.id = tr.warehouseInFk
					JOIN vn.warehouse wOut ON wOut.id = tr.warehouseOutFk
						WHERE wIn.id = vWarehouseFk
							AND wOut.name = 'Holanda'
							AND landed = vLanded;
		END IF;
        
	END IF;
    
	RETURN vTravelFk;
    
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 `validationCode` */;
/*!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 `validationCode`(vString VARCHAR(255)) RETURNS int(11)
    DETERMINISTIC
BEGIN

	DECLARE vSeed DOUBLE DEFAULT 0;
    DECLARE vCode INT;
    DECLARE vLength INT;
	DECLARE vChar INT;

	SET vLength = length(vString);
    
    WHILE vLength > 0 DO
    
		SET vChar = MID(vString,vLength,1);
        
		SET vSeed = vSeed + ASCII(vChar);
        
		SET vLength = vLength - 1;
    
    END WHILE;

	SET vCode = FLOOR(SQRT(vSeed)*1000000) mod 1000;

	RETURN vCode;
    
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 `validationCode_beta` */;
/*!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 `validationCode_beta`(vString VARCHAR(255)) RETURNS int(11)
    DETERMINISTIC
BEGIN

	DECLARE vSeed DOUBLE DEFAULT 0;
    DECLARE vCode INT;
    DECLARE vLength INT;
	DECLARE vChar INT;

	SET vLength = length(vString);
    
    WHILE vLength > 0 DO
    
		SET vChar = MID(vString,vLength,1);
        
		SET vSeed = vSeed + ASCII(vChar);
        
		SET vLength = vLength - 1;
    
    END WHILE;

	SET vCode = FLOOR(SQRT(vSeed)*1000000) mod 1000;

	RETURN vCode;
    
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 `workerIsBoss` */;
/*!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 `workerIsBoss`(vUserId INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
/**
 * Comprueba por jerarquía si el trabajador actual es jefe
 * de un trabajador en concreto.
 *
 * @param vUserId Id del trabajador que se desea comprobar.
 * @return Revuelve verdadero si es jefe del empleado por escala jerárquica.
 */
    DECLARE vWorkerId INT;
    DECLARE vBossId INT;

    SELECT id INTO vWorkerId
        FROM vn.worker
        WHERE userFk = vUserId;
    IF vWorkerId IS NULL THEN
        CALL util.throw('USER_NOT_FOUND');
    END IF;

    DROP TEMPORARY TABLE IF EXISTS tCheckedWorker;
    CREATE TEMPORARY TABLE tCheckedWorker
        (PRIMARY KEY (workerFk))
        ENGINE = MEMORY
        SELECT id workerFk FROM worker LIMIT 0;
    LOOP
        SELECT bossFk INTO vBossId
            FROM vn.worker
            WHERE id = vWorkerId;
        IF (SELECT COUNT(*) FROM tCheckedWorker WHERE workerFk = vBossId) THEN
            CALL util.throw('INFINITE_LOOP');
        END IF;
        IF vBossId = vWorkerId THEN
            RETURN FALSE;
        ELSEIF vBossId = account.myUser_getId() THEN
            RETURN TRUE;
        ELSE
            INSERT INTO tCheckedWorker VALUES (vWorkerId);
            SET vWorkerId = vBossId;
        END IF;
    END LOOP;
    DROP TEMPORARY TABLE tCheckedWorker;
    RETURN FALSE;
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 `workerMachinery_isRegistered` */;
/*!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 `workerMachinery_isRegistered`(vWorkerFk VARCHAR(10)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
/**
 * Comprueba si existen registros en las últimas horas (maxHours de machineWorkerConfig) del trabajador vWorkerFk y si tiene a nulo la hora outTimed  (indica la hora que deja el vehículo)
 * 
 * @param vWorkerFk id del trabajador
 * @return Devuelve TRUE/FALSE en caso de que haya o no registros
 */
	
	IF (SELECT COUNT(*) 
		FROM machineWorker m
		WHERE  m.workerFk = vWorkerFk
				AND m.inTimed >= TIMESTAMPADD(HOUR , -(SELECT maxHours from machineWorkerConfig), NOW()) AND ISNULL(m.outTimed)) 
	THEN	
		RETURN TRUE;
	ELSE
		RETURN FALSE;
	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 FUNCTION IF EXISTS `workerNigthlyHours_calculate` */;
/*!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 `workerNigthlyHours_calculate`(vTimeIn DATETIME, vTimeOut DATETIME) RETURNS decimal(5,2)
    READS SQL DATA
BEGIN
/**
 * Calcula el número decimal de horas nocturnas comprendidas entre 2 horas dadas
 *
 * @param vTimeIn
 * @param vTimeOut
 * @return vNigthlyHours
 */
	DECLARE vNigthlyHours DECIMAL(5,2); 
	DECLARE vSecondsPerHour INT(4) DEFAULT 3600;
	
	SELECT GREATEST(0, TIMESTAMPDIFF(SECOND,
				IF(TIME(vTimeIn) BETWEEN endNightlyHours AND startNightlyHours, 
						CONCAT(DATE(vTimeIn), ' ', startNightlyHours), 
						vTimeIn),
				IF(TIME(vTimeOut) BETWEEN endNightlyHours AND startNightlyHours, 
						CONCAT(DATE(vTimeOut), ' ', endNightlyHours), 
						vTimeOut))) / vSecondsPerHour INTO vNigthlyHours
		FROM vn.workerTimeControlConfig;

	RETURN vNigthlyHours;
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 `workerTimeControl_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` FUNCTION `workerTimeControl_add`( vUserFk INT,  vWarehouseFk INT,  vTimed DATETIME,  vIsManual BOOL) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vDirection VARCHAR(6);
	DECLARE vLastIn DATETIME;
	DECLARE vDayStayMax INT;
    DECLARE vHasDirectionOut INT;
    DECLARE vLastInsertedId INT;

    SELECT dayStayMax INTO vDayStayMax
		FROM workerTimeControlParams;
        
    SELECT timeWorkerControl_getDirection(vUserFk,vTimed) INTO vDirection;

	IF vDirection = 'out' THEN
	
		SELECT MAX(timed) INTO vLastIn
			FROM workerTimeControl 
			WHERE userFk = vUserFk 
				AND direction = 'in'
				AND timed < vTimed;
	
		UPDATE  workerTimeControl wtc
			SET wtc.direction = 'middle'
			WHERE userFk = vUserFk
				AND direction = 'out'
				AND timed BETWEEN vLastIn AND vTimed;
	
	ELSE IF vDirection = 'in' THEN
			
            SELECT COUNT(*) INTO vHasDirectionOut 
				FROM workerTimeControl wtc
				WHERE userFk = vUserFk 
					AND direction = 'out'
					AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed);          

			UPDATE  workerTimeControl wtc
				SET wtc.direction = IF (vHasDirectionOut,'middle','out')
				WHERE userFk = vUserFk
					AND direction = 'in'
					AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed);  

		 END IF;
     END IF;
	
	INSERT INTO workerTimeControl(userFk, timed, warehouseFk, direction, manual)
		VALUES(vUserFk, vTimed, vWarehouseFk, vDirection, vIsManual);
        
	SET vLastInsertedId = LAST_INSERT_ID();
    
    CALL workerTimeControlSOWP(vUserFk, vTimed);
    
	RETURN vLastInsertedId;
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 `workerTimeControl_addDirection` */;
/*!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 `workerTimeControl_addDirection`( vUserFk INT,  vWarehouseFk INT,  vTimed DATETIME,  vIsManual BOOL) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE vDirection VARCHAR(6);
	DECLARE vLastIn DATETIME;
	DECLARE vDayStayMax INT;
    DECLARE vHasDirectionOut INT;
    DECLARE vLastInsertedId INT;

    SELECT dayStayMax INTO vDayStayMax
		FROM workerTimeControlParams;
        
    SELECT timeWorkerControl_getDirection(vUserFk,vTimed) INTO vDirection;

	IF vDirection = 'out' THEN
	
		SELECT MAX(timed) INTO vLastIn
			FROM workerTimeControl 
			WHERE userFk = vUserFk 
				AND direction = 'in'
				AND timed < vTimed;
	
		UPDATE  workerTimeControl wtc
			SET wtc.direction = 'middle'
			WHERE userFk = vUserFk
				AND direction = 'out'
				AND timed BETWEEN vLastIn AND vTimed;
	
	ELSE IF vDirection = 'in' THEN
			
            SELECT COUNT(*) INTO vHasDirectionOut 
				FROM workerTimeControl wtc
				WHERE userFk = vUserFk 
					AND direction = 'out'
					AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed);          

			UPDATE  workerTimeControl wtc
				SET wtc.direction = IF (vHasDirectionOut,'middle','out')
				WHERE userFk = vUserFk
					AND direction = 'in'
					AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed);  

		 END IF;
     END IF;
	
	INSERT INTO workerTimeControl(userFk, timed, warehouseFk, direction, manual)
		VALUES(vUserFk, vTimed, vWarehouseFk, vDirection, vIsManual);
        
	SET vLastInsertedId = LAST_INSERT_ID();
    
    CALL workerTimeControlSOWP(vUserFk, vTimed);
    
	RETURN vLastInsertedId;
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 `worker_isWorking` */;
/*!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 `worker_isWorking`(vWorkerFk INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
/**
 * Comprueba si el trabajador está trabajando en el momento de la consulta
 * @return Devuelve TRUE en caso de que este trabajando. Si se encuentra en un descanso devolverá FALSE
 */
	DECLARE vLastIn DATETIME ;
	
	SELECT MAX(timed) INTO vLastIn
		FROM vn.workerTimeControl 
		WHERE userFk = vWorkerFk AND
		      direction = 'in';

	IF (SELECT MOD(COUNT(*),2) 						
			FROM vn.workerTimeControl 
			WHERE userFk = vWorkerFk AND 
                  timed >= vLastIn
	   ) THEN	
		RETURN TRUE;
	ELSE
		RETURN FALSE;
	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 FUNCTION IF EXISTS `xdiario_new` */;
/*!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 `xdiario_new`(
	vAsiento INT,
	vDated DATE,
	vSubaccount VARCHAR(12),
	vAccount VARCHAR(12),
	vConcept VARCHAR(25),
	vDebit DOUBLE,
	vCredit DOUBLE,
	vEuro DOUBLE,
	vSerie CHAR(1),
	vInvoice VARCHAR(8),
	vVat DOUBLE,
	vRe DOUBLE,
	vAux TINYINT,
	vCompany INT
) RETURNS int(11)
    NO SQL
BEGIN
	IF vAsiento IS NULL THEN
        CALL vn.ledger_next(vAsiento);
	END IF;

	INSERT INTO XDiario
	SET ASIEN = vAsiento,
		FECHA = vDated,
		SUBCTA = vSubaccount,
		CONTRA = vAccount,
		CONCEPTO = vConcept,
		EURODEBE = vDebit,
		EUROHABER = vCredit,
		BASEEURO = vEuro,
		SERIE = vSerie,
		FACTURA = vInvoice,
		IVA = vVat,
		RECEQUIV = vRe,
		AUXILIAR = IF(vAux = FALSE, NULL, '*'),
		MONEDAUSO = 2,
		empresa_id = vCompany;

	RETURN vAsiento;
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 `zoneGeo_new` */;
/*!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 `zoneGeo_new`(vType VARCHAR(255), vName VARCHAR(255), vParentFk INT) RETURNS int(11)
    NO SQL
BEGIN
/**
 * Creates a new node a node from the #zoneGeo table.
 * Also sets a mark to force the tree recalculation.
 *
 * @param vType The node type
 * @param vName The node name
 * @param vParentFk The parent node identifier
 * @return The new node identifier
 */
	DECLARE vSelf INT;

	INSERT INTO zoneGeo
		SET `type` = vType,
			`name` = vName,
			parentFk = vParentFk;
            
	SET vSelf = LAST_INSERT_ID();

	UPDATE zoneGeoRecalc SET isChanged = TRUE;

    RETURN 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 `addNoteFromDelivery` */;
/*!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 `addNoteFromDelivery`(idTicket INT,nota TEXT)
BEGIN
	
	DECLARE observationTypeFk INT DEFAULT 3; /*3 = REPARTIDOR*/

	INSERT INTO ticketObservation(ticketFk,observationTypeFk,description)
	VALUES (idTicket,observationTypeFk,nota)
	ON DUPLICATE KEY UPDATE description = CONCAT(ticketObservation.description,VALUES(description),' ');


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 `addressTaxArea` */;
/*!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 `addressTaxArea`()
    READS SQL DATA
BEGIN
/**
 * Devuelve el taxArea para un conjunto de Consignatarios y empresas, 
 *
 * @table tmp.addressCompany(addressFk, companyFk) valores a calcular
 * @return tmp.addressTaxArea(addressFk,companyFk)
 */

    DECLARE vSpainCountryCode INT DEFAULT 1;
    
    DROP TEMPORARY TABLE IF EXISTS tmp.addressTaxArea;
	CREATE TEMPORARY TABLE tmp.addressTaxArea
		(PRIMARY KEY (addressFk, companyFk))
		ENGINE = MEMORY
		SELECT CASE 
			WHEN (NOT cClient.isUeeMember OR  NOT cSupplier.isUeeMember) AND s.countryFk != c.countryFk THEN 
				'WORLD'
			WHEN cClient.isUeeMember AND cSupplier.isUeeMember AND c.countryFk != s.countryFk AND c.isVies THEN 
				'CEE'
			WHEN a.isEqualizated AND c.countryFk = vSpainCountryCode  THEN 
				'EQU'
			ELSE
				'NATIONAL'
		END AS areaFk, ac.addressFk, ac.companyFk
		FROM tmp.addressCompany ac
			JOIN address a ON a.id = ac.addressFk
			JOIN `client` c ON c.id = a.clientFk
			JOIN country cClient ON cClient.id = c.countryFk
			JOIN supplier s ON s.id = ac.companyFk
            JOIN country cSupplier ON cSupplier.id = s.countryFk;
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 `agencyHourGetFirstShipped` */;
/*!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 `agencyHourGetFirstShipped`(vAgencyMode INT, vAddress INT, vWarehouse INT)
BEGIN
/**
  * DEPRECATED usar zoneGetFirstShipped
* Devuelve la primera fecha de envio disponible para una agencia en una direccion y un warehouse
*
* @param vAgencyMode id de la agencia en  vn.agencyMode
* @param vAddress id de la direccion
* @param vWarehouse id del warehouse
* @return vShipped la primera fecha disponible y vLanded la fecha de llegada/recojida
*/    
DECLARE vAgency INT;
DECLARE vShipped DATE;
DECLARE vLanded DATE DEFAULT CURDATE();
	SELECT agencyFk INTO vAgency FROM agencyMode WHERE id= vAgencyMode;

	l: LOOP
    
		CALL agencyHourGetShipped(vLanded,vAddress,vAgency);
        SELECT shipped INTO vShipped 
			FROM tmp.agencyHourGetShipped
			WHERE warehouseFk = vWarehouse LIMIT 1;
	
	IF vShipped THEN
		LEAVE l;
	END IF;
    
    SET vLanded = DATE_ADD(vLanded, INTERVAL +1 DAY);
    
	END LOOP;
    
    SELECT vShipped,vLanded;
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 `agencyHourGetLanded` */;
/*!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 `agencyHourGetLanded`(vDated DATE, vAddress INT, vAgency INT, vWarehouse INT)
BEGIN
/**
  * DEPRECATED usar zoneGetLanded
  * Devuelve una tabla temporal con el dia de recepcion para vDated.
 *
 * @param vDated Fecha de preparacion de mercancia
 * @param vAddress Id de consignatario, %NULL para recogida
 * @param vAgency Id agencia
 * @table tmp.agencyHourGetLanded Datos de recepción
 */
    DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetLanded;
    CREATE TEMPORARY TABLE tmp.agencyHourGetLanded
    ENGINE = MEMORY
        SELECT vWarehouse warehouseFk, landed FROM (
            SELECT * FROM (
                SELECT vWarehouse, TIMESTAMPADD(DAY, ah.substractDay, vDated) landed, ah.substractDay, ah.maxHour
                    FROM agencyHour ah
                    LEFT JOIN address a ON a.id = vAddress
                        WHERE (ah.weekDay = WEEKDAY(TIMESTAMPADD(DAY, ah.substractDay, vDated)) OR ah.weekDay IS NULL)
                            AND (ah.agencyFk = vAgency OR ah.agencyFk IS NULL)
                            AND ah.warehouseFk = vWarehouse
                            AND (ah.provinceFk = a.provinceFk OR ah.provinceFk IS NULL OR vAddress IS NULL)
                            ORDER BY (
                            (ah.weekDay IS NOT NULL) +
                            (ah.agencyFk IS NOT NULL) +
                            (- ah.substractDay) +
                            ((ah.provinceFk IS NOT NULL)*3)
                        ) DESC
            ) t
            LIMIT 1
        ) t
        WHERE IF(vDated = CURDATE(), t.maxHour > HOUR(NOW()), TRUE) AND t.substractDay < 225;
        
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 `agencyHourGetWarehouse` */;
/*!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 `agencyHourGetWarehouse`(vAddress INT, vDate DATE, vWarehouse INT)
BEGIN
/**
  * DEPRECATED usar zoneGetWarehouse
 * Devuelve el listado de agencias disponibles para la fecha,
 * dirección y warehouuse pasadas
 * 
 * @param vAddress no puede ser NULL
 *  @param vWarehouse warehouse donde comprobaremos las agencias y fecha
 * @param vDate Fecha de recogida
 * @table agencyModeWarehouseList Listado de agencias disponibles
 */
	DECLARE vAgency INT;
	DECLARE vDone BOOL DEFAULT FALSE;    
	DECLARE vCur CURSOR FOR
		SELECT DISTINCT a.id
			FROM agency a
				JOIN agencyHour ah ON ah.agencyFk = a.id;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

			IF vAddress IS NULL
	THEN
		CALL util.throw ('Address cannot be null');
	END IF;

	DROP TEMPORARY TABLE IF EXISTS tmp.agencyModeWarehouseList;
	CREATE TEMPORARY TABLE tmp.agencyModeWarehouseList (
		id INT NOT NULL,
		agency VARCHAR(20),
		description VARCHAR(45),
		deliveryMethodFk VARCHAR(45),
		shipped DATE,
		warehouse VARCHAR(45),
		PRIMARY KEY(id)
	)
	ENGINE = MEMORY;
  
	OPEN vCur;
	FETCH vCur INTO vAgency;

	WHILE NOT vDone
	DO
	
		INSERT INTO tmp.agencyModeWarehouseList
			SELECT am.id, am.name, am.description,am.deliveryMethodFk, TIMESTAMPADD(DAY, -ah.substractDay, vDate), w.name
						FROM agencyHour ah
						LEFT JOIN address a ON a.id = vAddress
                        JOIN agencyMode am ON am.agencyFk =  vAgency
						JOIN warehouse w on w.id = ah.warehouseFk
							WHERE ah.warehouseFk = vWarehouse
								AND (weekDay = WEEKDAY(vDate)
									OR weekDay IS NULL)
								AND (ah.agencyFk = vAgency
									OR ah.agencyFk IS NULL)
								AND (ah.provinceFk = a.provinceFk
									OR ah.provinceFk IS NULL
									OR vAddress IS NULL)
								AND TIMESTAMPADD(DAY, -ah.substractDay, vDate) >= CURDATE()
								AND IF(TIMESTAMPADD(DAY, -ah.substractDay, vDate) = CURDATE(), ah.maxHour > HOUR(NOW()), TRUE)
							ORDER BY (
									(ah.weekDay IS NOT NULL) +
									(ah.agencyFk IS NOT NULL) +
									((ah.provinceFk IS NOT NULL) * 3)
								) DESC
							LIMIT 1;


		FETCH vCur INTO vAgency;
	END WHILE;

	CLOSE vCur;
    
	SELECT * FROM tmp.agencyModeWarehouseList;
	DROP TEMPORARY TABLE tmp.agencyModeWarehouseList;
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 `agencyHourListGetShipped` */;
/*!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 `agencyHourListGetShipped`(vDate DATE, vAddress INT, vAgency INT)
BEGIN
 /* * DEPRECATED usar zoneGetShipped
*/
	CALL vn.agencyHourGetShipped(vDate, vAddress, vAgency);

	SELECT * FROM tmp.agencyHourGetShipped;
    
   DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetShipped;
    
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 `available_calc` */;
/*!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 `available_calc`(
	vDate DATE,
    vAddress INT,
    vAgencyMode INT)
BEGIN
/**
 * Calculates the available for all available stores
 * according to the given parameters.
 *
 * @param vDate The delivery date
 * @param vAddress The delivery address id
 * @param vAgencyMode The shipping agency
 * @return tmp.availableCalc(calcFk) The available cache ids
 */
	DECLARE vCalcFk INT;
	DECLARE vShipment DATE;
	DECLARE vWarehouse INT;
	DECLARE vDone BOOL;

	DECLARE cWarehouses CURSOR FOR
		SELECT warehouseFk, shipped FROM tmp.zoneGetShipped;
			
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	-- Establecemos los almacenes y las fechas que van a entrar al disponible

	CALL vn.zone_getShipped (vDate, vAddress, vAgencyMode, FALSE);

	DROP TEMPORARY TABLE IF EXISTS tmp.availableCalc;
	CREATE TEMPORARY TABLE tmp.availableCalc(	
		calcFk INT UNSIGNED,
		PRIMARY KEY (calcFk)
	)
	ENGINE = MEMORY;

	OPEN cWarehouses;

	l: LOOP
		SET vDone = FALSE;
		FETCH cWarehouses INTO vWarehouse, vShipment;
		
		IF vDone THEN
			LEAVE l;
		END IF;

		CALL `cache`.available_refresh(vCalcFk, FALSE, vWarehouse, vShipment);

		INSERT IGNORE INTO tmp.availableCalc
			SET calcFk = vCalcFk;
	END LOOP;

	CLOSE cWarehouses;
	DROP TEMPORARY TABLE tmp.zoneGetShipped;
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 `bankEntity_checkBic` */;
/*!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 `bankEntity_checkBic`(vBic VARCHAR(255))
BEGIN
	/**
	 * If the bic length is Incorrect throw exception
	 * 
	 * @param vBic bic code
	 */

	DECLARE vConfigBicLenght INT;

	SELECT bicLength INTO vConfigBicLenght
		FROM vn.bankEntityConfig bec;
	
	IF LENGTH(vBic) <> vConfigBicLenght THEN
		CALL util.throw(CONCAT('bic must be of length ', vConfigBicLenght ));
	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 `bankPolicy_notifyExpired` */;
/*!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 `bankPolicy_notifyExpired`()
BEGIN
/**
*
* Manda correo cuando caduca un seguro
* de los leasing
*
*/ 
	INSERT INTO mail (receiver,replyTo,subject,body)
		SELECT 'administracion@verdnatura.es' receiver,
				'noreply@verdnatura.es' replyTo,
				CONCAT('El seguro de la poliza ',b.id,' ',b.bank,' ha finalizado.') subject,
				CONCAT('El seguro de la poliza ',b.id,' ',b.bank,' ha finalizado.') body
			FROM  vn.bankPolicy bp 
				LEFT JOIN vn.supplier s 
					ON s.id = bp.supplierFk
				LEFT JOIN vn.bank b
					ON b.id = bp.bankFk
		    WHERE bp.insuranceExpired = CURDATE();
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 `buyUltimate` */;
/*!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 `buyUltimate`(vWarehouseFk SMALLINT, vDated DATE)
BEGIN
/**
 * Calcula las últimas compras realizadas hasta una fecha
 *
 * @param vWarehouseFk Id del almacén
 * @param vDated Compras hasta fecha
 * @return tmp.buyUltimate
 */
	CALL cache.last_buy_refresh (FALSE);

	DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
	CREATE TEMPORARY TABLE tmp.buyUltimate
		(PRIMARY KEY (itemFk, warehouseFk),
		INDEX(itemFk))
		ENGINE = MEMORY
		SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
			FROM cache.last_buy
			WHERE warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL;

	CALL buyUltimateFromInterval(vWarehouseFk, CURDATE(), vDated);

	REPLACE INTO tmp.buyUltimate
		SELECT itemFk, buyFk, warehouseFk, landed landing
			FROM tmp.buyUltimateFromInterval
			WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
				AND landed <= vDated;

	INSERT IGNORE INTO tmp.buyUltimate
		SELECT itemFk, buyFk, warehouseFk, landed landing
			FROM tmp.buyUltimateFromInterval
			WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
				AND landed > vDated;

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 `buyUltimateFromInterval` */;
/*!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 `buyUltimateFromInterval`(vWarehouseFk SMALLINT, vStarted DATE, vEnded DATE)
BEGIN
/**
 * Calcula las últimas compras realizadas 
 * desde un rango de fechas.
 *
 * @param vWarehouseFk Id del almacén si es NULL se actualizan todos
 * @param vStarted Fecha inicial
 * @param vEnded Fecha fin
 * @return tmp.buyUltimateFromInterval
 */
    IF vEnded IS NULL THEN
        SET vEnded = vStarted;
    END IF;
    
    IF vEnded < vStarted THEN
		SET vStarted = TIMESTAMPADD(MONTH, -1, vEnded);
    END IF;

   	-- Item
   
	DROP TEMPORARY TABLE  IF EXISTS tmp.buyUltimateFromInterval;
	CREATE TEMPORARY TABLE tmp.buyUltimateFromInterval
		 (PRIMARY KEY (itemFk, warehouseFk), INDEX(buyFk), INDEX(landed), INDEX(warehouseFk), INDEX(itemFk))
		 ENGINE = MEMORY
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                MULTIMAX(t.landed, b.id) buyFk, 
                MAX(t.landed) landed
			FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed BETWEEN vStarted AND vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.price2 > 0
				AND NOT b.isIgnored
				AND b.quantity > 0
			GROUP BY itemFk, warehouseInFk;
		
	INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed)
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                b.id buyFk, 
                t.landed
            FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed > vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.price2 > 0
				AND NOT b.isIgnored
			GROUP BY itemFk, warehouseInFk;
		
	INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed)
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                b.id buyFk, 
                t.landed
            FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed BETWEEN vStarted AND vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.quantity = 0
			GROUP BY itemFk, warehouseInFk;
		
	
		
	-- ItemOriginal
		
		INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed)
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                MULTIMAX(t.landed, b.id) buyFk, 
                MAX(t.landed) landed
			FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed BETWEEN vStarted AND vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.price2 > 0
				AND NOT b.isIgnored
				AND b.quantity > 0
				AND itemOriginalFk
			GROUP BY itemOriginalFk, warehouseInFk;
		
		INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed)
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                b.id buyFk, 
                t.landed
            FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed > vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.price2 > 0
				AND NOT b.isIgnored
				AND itemOriginalFk
			GROUP BY itemOriginalFk, warehouseInFk;
		
	INSERT IGNORE INTO tmp.buyUltimateFromInterval(itemFk, warehouseFk, buyFk, landed)
		SELECT 
				b.itemFk, 
                t.warehouseInFk warehouseFk, 
                b.id buyFk, 
                t.landed
            FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel t ON t.id = e.travelFk
			WHERE t.landed BETWEEN vStarted AND vEnded
				AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
				AND b.quantity = 0
				AND itemOriginalFk
			GROUP BY itemOriginalFk, warehouseInFk;
		
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 `buy_afterUpsert` */;
/*!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 `buy_afterUpsert`(vSelf INT)
BEGIN
/**
 * Triggered actions when a buy is updated or inserted.
 *
 * @param vSelf The buy reference
 */
	DECLARE vEntryFk INT;
	DECLARE vItemFk INT;
	DECLARE vPackingOut DECIMAL(10,2);
	DECLARE vWarehouse INT;
	DECLARE vStandardFlowerBox INT;
	DECLARE vWarehouseOut INT;
	DECLARE vIsMerchandise BOOL;
	DECLARE vIsFeedStock BOOL;
   
	SELECT b.entryFk, b.itemFk, i.packingOut, ic.merchandise, vc.standardFlowerBox
			INTO vEntryFk, vItemFk, vPackingOut, vIsMerchandise, vStandardFlowerBox
		FROM buy b
			LEFT JOIN item i ON i.id = b.itemFk
			LEFT JOIN itemType it ON it.id = i.typeFk
			LEFT JOIN itemCategory ic ON ic.id = it.categoryFk
			LEFT JOIN packaging p ON p.id = b.packageFk AND NOT p.isBox 
			JOIN volumeConfig vc ON TRUE
		WHERE b.id = vSelf;

	SELECT t.warehouseInFk, t.warehouseOutFk
			INTO vWarehouse, vWarehouseOut
		FROM entry e
			JOIN travel t ON t.id = e.travelFk
		WHERE e.id = vEntryFk;

	IF vIsMerchandise THEN

    	REPLACE itemCost SET
			itemFk = vItemFk,
			warehouseFk = vWarehouse,
			cm3 = buy_getUnitVolume(vSelf),
			cm3Delivery = IFNULL((vStandardFlowerBox * 1000) / vPackingOut, buy_getUnitVolume(vSelf));

        UPDATE vn.itemCost ic
			JOIN cache.last_buy lb ON lb.item_id = ic.itemFk AND lb.warehouse_id = ic.warehouseFk
			JOIN vn.buy b ON b.id = lb.buy_id
			SET ic.grams = b.weight * 1000 / b.packing
			WHERE ic.itemFk = vItemFk AND 
                  ic.warehouseFk = vWarehouse; 

	END IF;

	SELECT isFeedStock INTO vIsFeedStock
		FROM warehouse WHERE id = vWarehouseOut AND id <> 13;

	IF vIsFeedStock THEN
		INSERT IGNORE INTO producer(`name`)
			SELECT es.company_name
				FROM buy b
					JOIN edi.ekt be ON be.id = b.ektFk
					JOIN edi.supplier es ON es.supplier_id = be.pro
				WHERE b.id = vSelf;

	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 `buy_checkGrouping` */;
/*!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 `buy_checkGrouping`(vGrouping INT)
BEGIN
/**
 * Checks the buy grouping, throws an error if it's invalid.
 *
 * @param vGrouping The grouping
 */
	IF vGrouping = 0 THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Grouping cannot be zero';
	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 `buy_getSplit` */;
/*!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 `buy_getSplit`(vSelf INT, vDated DATE)
BEGIN
/**
 * Devuelve las ventas de una compra
 * 
 * @param vSelf Identificador de vn.buy
 */
	DECLARE vItemFk INT;
	DECLARE vPacking INT;
	DECLARE vRemaining INT;
	DECLARE vLabels INT;
	DECLARE vSaleFk INT;
	DECLARE vAmount INT;
	DECLARE vDone BOOL DEFAULT FALSE;

	DECLARE cur CURSOR FOR
		SELECT s.id, s.quantity - IFNULL(l.stem, 0)
			FROM vn.sale s
				JOIN vn.ticket t ON t.id = s.ticketFk
				JOIN vn.warehouse w ON w.id = t.warehouseFk
				LEFT JOIN vn.saleLabel l ON l.saleFk = s.id
			WHERE s.itemFk = vItemFk
				AND t.shipped  >= vDated
				AND w.isLogiflora
				AND IFNULL(l.stem, 0) < s.quantity
			LOCK IN SHARE MODE;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;

	START TRANSACTION;

	-- Obtiene los datos de la compra

	SELECT itemFk, packing, quantity
		INTO vItemFk, vPacking, vRemaining
		FROM vn.buy WHERE id = vSelf;

	-- Crea splits de los tickets

	DROP TEMPORARY TABLE IF EXISTS tmp.split;
	CREATE TEMPORARY TABLE tmp.split
	(
		id INT,
		labels INT
	)
	ENGINE = MEMORY;

	OPEN cur;

	l: LOOP
		SET vDone = FALSE;

		FETCH cur INTO vSaleFk, vAmount;

		IF vDone OR vRemaining = 0 THEN
			LEAVE l;
		END IF;

		SET vAmount = LEAST(vAmount, vRemaining);

		SET vRemaining = vRemaining - vAmount;

		SET vLabels = vAmount DIV vPacking;

		INSERT INTO tmp.split
			VALUES (vSaleFk, vLabels);

		INSERT INTO vn.saleLabel
			SET
				saleFk = vSaleFk,
				stem = vAmount,
				label = vLabels
			ON DUPLICATE KEY UPDATE
				stem = stem + VALUES(stem),
				label = label + VALUES(label);

	END LOOP;

	CLOSE cur;

	-- Devuelve los splits creados
	SELECT
		sp.labels,
		COALESCE(sfc.nickname, sfa.nickname, a.nickname) destination,
		s.itemFk, 
		i.longName, 
		i.`size`, 
		vn.ticketSplitCounter(t.id) counter, 
		IF(sfa.id OR sfc.id, 
			a.nickname,
			CONCAT(a.id, ' ', p.`name`,' (', c.`code`,')')) destination2
		FROM tmp.split sp
			JOIN vn.sale s ON sp.id = s.id
			JOIN vn.item i ON i.id = s.itemFk
			JOIN vn.ticket t ON t.id = s.ticketFk
			JOIN vn.address  a ON a.id = t.addressFk
			JOIN vn.province p ON p.id = a.provinceFk
			JOIN vn.country c ON c.id = p.countryFk
			LEFT JOIN vn.splitFilter sfa ON sfa.autonomyFk = p.autonomyFk
			LEFT JOIN vn.splitFilter sfc ON sfc.clientFk = t.clientFk;

	-- Limpia y confirma cambios

	DROP TEMPORARY TABLE
		tmp.split;

	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 `buy_getVolume` */;
/*!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 `buy_getVolume`()
BEGIN
/**
 * Cálculo de volumen en líneas de compra
 * @table tmp.buy(buyFk)
 */
	SELECT  t.name Temp,
			CAST(ROUND(SUM(GREATEST(b.stickers ,b.quantity /b.packing ) *
			item_getVolume(b.itemFk, b.packageFk)) / vc.trolleyM3 / 1000000 ,1) AS DECIMAL(10,2)) carros ,
			CAST(ROUND(SUM(GREATEST(b.stickers ,b.quantity /b.packing ) *
			item_getVolume(b.itemFk, b.packageFk)) / vc.palletM3 / 1000000,1) AS DECIMAL(10,2)) espais
		FROM buy b 
			JOIN tmp.buy tb ON tb.buyFk = b.id
			JOIN volumeConfig vc
			JOIN item i ON i.id = b.itemFk
			JOIN itemType it ON it.id = i.typeFk
			LEFT JOIN temperature t ON t.code = it.temperatureFk 
		GROUP BY Temp;
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 `buy_getVolumeByAgency` */;
/*!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 `buy_getVolumeByAgency`(vDated DATE, vAgencyFk INT)
BEGIN
	
	DROP TEMPORARY TABLE IF EXISTS tmp.buy;
	CREATE TEMPORARY TABLE tmp.buy (buyFk INT NOT NULL, PRIMARY KEY (buyFk)) ENGINE = MEMORY;

	INSERT INTO tmp.buy 
		SELECT b.id
			FROM buy b 
				JOIN entry e ON e.id = b.entryFk 
				JOIN travel t ON t.id = e.travelFk 
			WHERE t.landed = vDated
				AND t.agencyModeFk IN (0, vAgencyFk);

	CALL buy_getVolume();
	DROP TEMPORARY TABLE tmp.buy;
	
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 `buy_getVolumeByEntry` */;
/*!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 `buy_getVolumeByEntry`(vEntryFk INT)
BEGIN
	
	DROP TEMPORARY TABLE IF EXISTS tmp.buy;
	CREATE TEMPORARY TABLE tmp.buy (buyFk INT NOT NULL, PRIMARY KEY (buyFk)) ENGINE = MEMORY;
	
	INSERT INTO tmp.buy 
		SELECT b.id
			FROM buy b 
				JOIN entry e ON e.id = b.entryFk 
			WHERE e.id = vEntryFk;

	CALL buy_getVolume();
	DROP TEMPORARY TABLE tmp.buy;
	
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 `buy_recalcPrices` */;
/*!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 `buy_recalcPrices`()
BEGIN
-- Preparar para que proveedores como el 4 no puedan ser recalculadas sus entradas
/**
 * Recalcula los precios para las compras insertadas en tmp.buyRecalc
 *
 * @param tmp.buyRecalc (id)
 */  
	DECLARE vLanded DATE;
	DECLARE vWarehouseFk  INT;
	DECLARE vFallo BOOL;
    DECLARE vBuyingValue DECIMAL(10,3);
   	DECLARE vPackageFk VARCHAR(10);
   
	SELECT t.landed, t.warehouseInFk INTO vLanded, vWarehouseFk
		FROM tmp.buyRecalc br
			JOIN buy b ON b.id = br.id
            JOIN entry e ON e.id = b.entryFk
            JOIN travel t ON t.id = e.travelFk
		LIMIT 1;

	CALL vn.rate_getPrices(vLanded, vWarehouseFk); 
    
    -- quitado los cubos a floramondo revisar en buy_tarifas_entry
	UPDATE buy b
			JOIN tmp.buyRecalc br ON br.id = b.id AND (@buyId := b.id)
			LEFT JOIN packaging p ON p.id = b.packageFk
			JOIN item i ON i.id = b.itemFk
			JOIN entry e ON e.id = b.entryFk
			JOIN itemType it ON it.id = i.typeFk
			JOIN travel tr ON tr.id = e.travelFk
			JOIN agencyMode am ON am.id = tr.agencyModeFk 
			JOIN tmp.rate r
		SET b.freightValue = @PF:= 
				ROUND(IFNULL(((am.m3 * @cm3:= item_getVolume(b.itemFk, b.packageFk)) / 1000000) / b.packing,0),3),
			b.comissionValue = @CF:= ROUND(IFNULL(e.commission * b.buyingValue / 100, 0), 3),
			b.packageValue = @EF:= IF(p.isPackageReturnable != 0, 0, ROUND(IFNULL(p.`value` / b.packing ,0),3)),
			b.price3 = @t3:= IF(r.rate3 = 0, b.buyingValue,ROUND((b.buyingValue + @CF + @EF + @PF) / ((100 - r.rate3 - it.promo ) /100) ,2)),    -- He añadido que el coste sea igual a tarifa3 si t3 = 0
			b.price2 = @t2:= round(@t3 * (1 + ((r.rate2 - r.rate3)/100)),2),
			b.price2 = @t2:= IF(@t2 <= @t3,@t3 , @t2);
		
    SELECT (b.buyingValue = b.price2), b.buyingValue, b.packageFk 
    		INTO vFallo, vBuyingValue, vPackageFk
		FROM vn.buy b
		WHERE b.id = @buyId AND b.buyingValue <> 0.01;
		
	IF vFallo THEN
	
		CALL `vn`.`mail_insert`('cau@verdnatura.es',
								NULL,
								CONCAT('Fallo en buy_recalcPrices buy.id = ', @buyId),
								CONCAT(	' @t3 = ', @t3, 
										' @t2 = ', @t2,
										' @PF = ', @PF, 
										' @EF = ', @EF, 
										' @CF = ', @CF,
										' buyingValue = ', vBuyingValue,
										' packageFk = ', vPackageFk
									)
								);
					
	END IF;
			
	DROP TEMPORARY TABLE tmp.rate;
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 `buy_scan` */;
/*!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 `buy_scan`(vBarcode VARCHAR(255), vLabels INT)
BEGIN
/**
 * Marca una compra de subasta como escaneada.
 *
 * @param vBarcode Código de compra de una etiqueta de subasta
 * @param vLabels Cantidad escaneada
 */
	DECLARE vEktFk INT;
	DECLARE vBuyFk INT;
	DECLARE vItemFk INT;
	DECLARE vIsPhotoNeeded BOOL;

	-- Aun no se sabe como obtener el número de serie de transacción de
	-- las compras realizadas a través de un reloj, por lo que se establece
	-- siempre a '01'

	-- Campo ekt.barcode, el clásico
	IF SUBSTR(vBarcode, 3, 2) != '99' THEN
		SET vBarcode = CONCAT(LEFT(vBarcode, 12), '010');
	END IF;

	SELECT e.id, b.id, b.itemFk, i.doPhoto
		INTO vEktFk, vBuyFk, vItemFk, vIsPhotoNeeded
		FROM edi.ekt e
			JOIN vn.buy b ON b.ektFk = e.id
			JOIN vn.item i ON i.id = b.itemFk
		WHERE e.barcode = vBarcode
			AND e.entryYear = YEAR(CURDATE())
		ORDER BY b.id
		LIMIT 1;

	-- Campo ekt.batchCode
	IF ISNULL(vEktFk) THEN
		SELECT e.id, b.id, b.itemFk, i.doPhoto
			INTO vEktFk, vBuyFk, vItemFk, vIsPhotoNeeded
			FROM edi.ekt e
				JOIN vn.buy b ON b.ektFk = e.id
				JOIN vn.item i ON i.id = b.itemFk
			WHERE LEFT(@bc, 13)  = e.batchNumber
				AND e.entryYear = YEAR(CURDATE())
			ORDER BY b.id
			LIMIT 1;
	END IF;

	-- Campo ekt.deliveryNumber
	IF ISNULL(vEktFk) THEN
		SELECT e.id, b.id, b.itemFk, i.doPhoto
			INTO vEktFk, vBuyFk, vItemFk, vIsPhotoNeeded
			FROM edi.ekt e
				JOIN vn.buy b ON b.ektFk = e.id
				JOIN vn.item i ON i.id = b.itemFk
			WHERE e.deliveryNumber = vBarcode
				AND e.entryYear = YEAR(CURDATE())
			ORDER BY b.id
			LIMIT 1;
	END IF;

	IF NOT ISNULL(vEktFk) THEN

		UPDATE edi.ekt e SET e.scanned = TRUE WHERE id = vEktFk;

		UPDATE vn.buy b
			SET b.printedStickers = b.printedStickers + IF(vLabels <> -1, vLabels, b.stickers)
			WHERE b.id = vBuyFk;

	END IF;

	SELECT vBuyFk buy, vIsPhotoNeeded do_photo;
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 `buy_updateGrouping` */;
/*!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 `buy_updateGrouping`(vWarehouseFk INT, vItemFk INT, vGrouping INT)
BEGIN
/**
 * Actualiza el grouping de las últimas compras de un artículo
 *
 * @param vWarehouseFk Id del almacén
 * @param vItemFk Id del Artículo
 * @param vGrouping Cantidad de grouping
 */	
	
	CALL vn.buyUltimate(vWarehouseFk, CURDATE());

	UPDATE vn.buy b
			JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
		SET b.`grouping` = vGrouping 
		WHERE bu.warehouseFk = vWarehouseFk 
			AND bu.itemFk = vItemFk;

	DROP TEMPORARY TABLE tmp.buyUltimate;
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 `buy_updatePacking` */;
/*!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 `buy_updatePacking`(vWarehouseFk INT, vItemFk INT, vPacking INT)
BEGIN
/**
 * Actualiza packing 
 *
 * @param vWarehouseFk warehouse del item
 * @param vItemFk id del item
 * @param vPacking packing a actualizar
 */
	CALL buyUltimate(vWarehouseFk, CURDATE());

	UPDATE buy b
			JOIN tmp.buyUltimate bu ON b.id = bu.buyFk
		SET b.packing = vPacking 
		WHERE bu.warehouseFk = vWarehouseFk 
			AND bu.itemFk = vItemFk;

	DROP TEMPORARY TABLE tmp.buyUltimate;

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 `catalog_calcFromItem` */;
/*!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 `catalog_calcFromItem`(
	vLanded DATE,
    vAddressFk INT,
    vAgencyModeFk INT,
    vItemFk INT)
BEGIN
/**
 * Calculates available and price for a single item.
 *
 * @param vItemFk The item id
 * @return tmp.ticketCalculateItem
 * @return tmp.ticketComponentPrice
 * @return tmp.ticketComponent
 * @return tmp.ticketLot
 * @return tmp.zoneGetShipped
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
		ENGINE = MEMORY 
		SELECT vItemFk itemFk;

	CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
	DROP TEMPORARY TABLE tmp.item;
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 `catalog_calculate` */;
/*!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 `catalog_calculate`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
BEGIN	
/**
 * Calcula los articulos disponibles y sus precios
 *
 * @table tmp.item(itemFk) Listado de artículos a calcular
 * @param vLanded Fecha de recepcion de mercancia
 * @param vAddressFk Id del consignatario
 * @param vAgencyModeFk Id de la agencia
 * @return tmp.ticketCalculateItem(itemFk, available, producer, 
 *			item, size, stems, category, inkFk, image, origin, price)
 * @return tmp.ticketLot(warehouseFk, itemFk, available, buyFk)
 * @return tmp.ticketComponent
 * @return tmp.ticketComponentPrice
 */

	DECLARE vAvailableCalc INT;
	DECLARE vAvailableNoRaidsCalc INT;
	DECLARE vShipped DATE;
	DECLARE vWarehouseFk SMALLINT;
	DECLARE vZoneFk INT;
	DECLARE vDone BOOL;
	DECLARE cTravelTree CURSOR FOR
		SELECT zoneFk, warehouseFk, shipped FROM tmp.zoneGetShipped;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, FALSE);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
	CREATE TEMPORARY TABLE tmp.ticketLot(
		`warehouseFk` smallint(5) unsigned NOT NULL,
		`itemFk` int(11) NOT NULL,
		`available` double DEFAULT NULL,
		`buyFk` int(11) DEFAULT NULL,
		`fix` tinyint(3) unsigned DEFAULT '0', -- este campo parece obsoleto
		`zoneFk` int(11) NOT NULL,
		KEY `itemFk` (`itemFk`),
		KEY `item_warehouse` (`itemFk`,`warehouseFk`) USING HASH
	) ENGINE=MEMORY DEFAULT CHARSET=utf8;

	CALL catalog_componentPrepare();

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketCalculateItem;
	CREATE TEMPORARY TABLE tmp.ticketCalculateItem(
		itemFk INT(11) NOT NULL, 
		available INT(11),
		producer VARCHAR(50), 
		item VARCHAR(50), 
		size INT(10) UNSIGNED,  
		stems INT(11),  
		category VARCHAR(3), 
		inkFk VARCHAR(3),  
		image VARCHAR(50),
		origin VARCHAR(3), 
		price DECIMAL(10,2),
		priceKg DECIMAL(10,2),
		`grouping` INT(10) UNSIGNED,
		PRIMARY KEY `itemFk` (`itemFk`)
	) ENGINE = MEMORY DEFAULT CHARSET=utf8;
	
	OPEN cTravelTree;

	l: LOOP
		SET vDone = FALSE;
		FETCH cTravelTree INTO vZoneFk, vWarehouseFk, vShipped;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL `cache`.available_refresh (vAvailableCalc, FALSE, vWarehouseFk, vShipped);
		CALL `cache`.availableNoRaids_refresh (vAvailableNoRaidsCalc, FALSE, vWarehouseFk, vShipped);
		CALL vn.buyUltimate(vWarehouseFk, vShipped);

		INSERT INTO tmp.ticketLot (warehouseFk, itemFk, available, buyFk, zoneFk)
			SELECT vWarehouseFk,
					a.item_id,
					IFNULL(a.available, 0),
					bu.buyFk,
					vZoneFk
				FROM `cache`.available a
					LEFT JOIN cache.availableNoRaids anr ON anr.item_id = a.item_id 
														AND anr.calc_id = vAvailableNoRaidsCalc
					JOIN tmp.item i ON i.itemFk = a.item_id
					JOIN vn.item it ON it.id = i.itemFk
					JOIN vn.`zone` z ON z.id = vZoneFk
					LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = a.item_id	
					LEFT JOIN edi.supplyResponse sr ON sr.ID = it.supplyResponseFk	
					LEFT JOIN edi.VMPSettings v ON v.VMPID = sr.vmpID 
					LEFT JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
					LEFT JOIN (SELECT isVNHSupplier, isEarlyBird, TRUE AS itemAllowed
									FROM vn.addressFilter af
										JOIN (SELECT ad.provinceFk, p.countryFk, ad.isLogifloraAllowed 
												FROM vn.address ad 
													JOIN vn.province p ON p.id = ad.provinceFk 
												WHERE ad.id = vAddressFk
											) sub2 ON sub2.provinceFk <=> IFNULL(af.provinceFk, sub2.provinceFk)
													AND sub2.countryFk <=> IFNULL(af.countryFk, sub2.countryFk)
													AND sub2.isLogifloraAllowed <=> IFNULL(af.isLogifloraAllowed, sub2.isLogifloraAllowed)
								WHERE vWarehouseFk = af.warehouseFk
									AND (vShipped < af.beforeDated
										OR ISNULL(af.beforeDated)
										OR	vShipped > af.afterDated
										OR ISNULL(af.afterDated))
								) sub ON sub.isVNHSupplier = v.isVNHSupplier
										AND (sub.isEarlyBird = mp.isEarlyBird OR ISNULL(sub.isEarlyBird))
					JOIN vn.agencyMode am ON am.id = vAgencyModeFk
					JOIN vn.agency ag ON ag.id = am.agencyFk
					JOIN vn.itemType itt ON itt.id = it.typeFk
					JOIN vn.itemCategory itc on itc.id = itt.categoryFk
					JOIN vn.address ad ON ad.id = vAddressFk
					LEFT JOIN vn.clientItemType cit 
						ON cit.clientFk = ad.clientFk
							AND cit.itemTypeFk = itt.id
					LEFT JOIN vn.clientItemCategory cic
						ON cic.clientFk = ad.clientFk
							AND cic.itemCategoryFk = itc.id
				WHERE a.calc_id = vAvailableCalc
					AND a.available > 0
					AND (sub.itemAllowed OR NOT it.isFloramondo OR anr.available > 0)
					AND (ag.isAnyVolumeAllowed OR NOT itt.isUnconventionalSize)
					AND (itc.isReclining OR ISNULL(it.`size`) OR it.`size` < z.itemMaxSize OR ISNULL(z.itemMaxSize))
					AND NOT (cit.isAllowed <=> FALSE)
					AND (ISNULL(cic.itemCategoryFk) OR cit.isAllowed);
				
		DROP TEMPORARY TABLE tmp.buyUltimate;

		CALL vn.catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);

		INSERT INTO tmp.ticketCalculateItem (
					itemFk,
					available,
					producer,
					item,
					size,
					stems,
					category,
					inkFk,
					image,
					origin,
					price,
					priceKg,
					`grouping`)
		SELECT
				tl.itemFk,
				SUM(tl.available) available,
				p.name producer,
				i.name item,
				i.size size,
				i.stems,
				i.category,
				i.inkFk,
				i.image,
				o.code origin,
				bl.price,
				bl.priceKg,
				bl.`grouping`
			FROM tmp.ticketLot tl
				JOIN item i ON tl.itemFk = i.id
				LEFT JOIN producer p ON p.id = i.producerFk AND p.isVisible
				JOIN origin o ON o.id = i.originFk
				JOIN (
					SELECT price, itemFk, priceKg, MIN(`grouping`) `grouping`
						FROM (
							SELECT price, itemFk, priceKg, `grouping`
								FROM tmp.ticketComponentPrice
								WHERE warehouseFk = vWarehouseFk
								ORDER BY (rate = 2) DESC, price
								LIMIT 10000000000000000000
						) sub
						GROUP BY itemFk
				) bl ON bl.itemFk = tl.itemFk
			WHERE tl.zoneFk = vZoneFk AND tl.warehouseFk = vWarehouseFk
			GROUP BY tl.itemFk
			ON DUPLICATE KEY UPDATE available = available + VALUES(available);

	END LOOP;

	CLOSE cTravelTree;

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 `catalog_componentCalculate` */;
/*!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 `catalog_componentCalculate`(	vZoneFk INT,
														vAddressFk INT,
														vShipped DATE,
														vWarehouseFk INT)
BEGIN
	/**
	 * Calcula los componentes de los articulos de tmp.ticketLot
	 *
	 * @param vZoneFk para calcular el transporte
	 * @param vAddressFk Consignatario 
	 * @param vShipped dia de salida del pedido
	 * @param vWarehouseFk warehouse de salida del pedido
	 * @table tmp.ticketLot (warehouseFk, available, itemFk, buyFk, zoneFk)
	 * @table tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
	 *
	 * @return tmp.ticketComponentPrice (warehouseFk, itemFk, rate, `grouping`, price, priceKg)
	 */
	
	DECLARE vClientFk INT;
	DECLARE vIsFrenchVNHBuyer BOOLEAN DEFAULT FALSE;
	DECLARE vVNHWarehouseFk INT DEFAULT 7;
	DECLARE vFrenchDiscount DECIMAL(3,2) DEFAULT 0.12;

	SELECT clientFk INTO vClientFK
		FROM address 
		WHERE id = vAddressFk; 

	SELECT (c.country = 'FRANCIA' AND vWarehouseFk = vVNHWarehouseFk)
			INTO vIsFrenchVNHBuyer
			FROM vn.country c
			JOIN vn.province p ON p.countryFk = c.id
			JOIN vn.address a ON a.provinceFk = p.id
			WHERE a.id = vAddressFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCalculate;

	CREATE TEMPORARY TABLE tmp.ticketComponentCalculate
	(PRIMARY KEY (itemFk, warehouseFk))
	ENGINE = MEMORY
		SELECT 
			tl.itemFk, 
			tl.warehouseFk, 
			tl.available,
			IF(i.hasMinPrice, GREATEST(i.minPrice,IFNULL(pf.rate2, b.price2)),IFNULL(pf.rate2, b.price2)) rate2,
			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,
			tl.buyFk, 
			i.typeFk,
			IF(i.hasKgPrice, b.weight / b.packing, NULL) weightGrouping
		FROM tmp.ticketLot tl
			JOIN buy b ON b.id = tl.buyFk
			JOIN item i ON i.id = tl.itemFk
			JOIN itemType it ON it.id = i.typeFk
			JOIN itemCategory ic ON ic.id = it.categoryFk
			LEFT JOIN specialPrice sp ON sp.itemFk = i.id 
										AND sp.clientFk = vClientFk
			LEFT JOIN (
					SELECT * FROM (
						SELECT 	pf.itemFk,
								pf.`grouping`,
								pf.packing,
								pf.box,
								pf.rate2,
								pf.rate3,
								zw.warehouseFk
							FROM priceFixed pf
								JOIN zoneWarehouse zw ON zw.zoneFk = vZoneFk 
														AND zw.warehouseFk IN (pf.warehouseFk,0)
							WHERE vShipped BETWEEN pf.started AND pf.ended
							ORDER BY pf.itemFk, pf.warehouseFk DESC
							LIMIT 10000000000000000000
								) tpf
						GROUP BY tpf.itemFk, tpf.warehouseFk
						) pf ON pf.itemFk = tl.itemFk 
								AND pf.warehouseFk = tl.warehouseFk
		WHERE b.buyingValue + b.freightValue + b.packageValue + b.comissionValue > 0.01 
			AND ic.merchandise
			AND tl.zoneFk = vZoneFk 
			AND tl.warehouseFk = vWarehouseFk;

	-- Coste
	INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
		SELECT 
				tcc.warehouseFk, 
				tcc.itemFk, 
				c2.id, 
				b.buyingValue + b.freightValue + b.packageValue + b.comissionValue
			FROM tmp.ticketComponentCalculate tcc 
				JOIN vn.component c2 ON c2.code = 'purchaseValue'
				JOIN buy b ON b.id = tcc.buyFk;

	-- Margen
	INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
		SELECT 
				tcc.warehouseFk, 
				tcc.itemFk, 
				c2.id, 
				tcc.rate3 - b.buyingValue - b.freightValue - b.packageValue - b.comissionValue
			FROM tmp.ticketComponentCalculate tcc 
				JOIN vn.component c2 ON c2.code = 'margin'
				JOIN buy b ON b.id = tcc.buyFk;

	-- Promo Francia
	IF vIsFrenchVNHBuyer THEN
	
		INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
		SELECT 
				tcc.warehouseFk, 
				tcc.itemFk, 
				c2.id, 
				- vFrenchDiscount * (b.buyingValue + b.freightValue + b.packageValue + b.comissionValue) / ( 1 - vFrenchDiscount)
			FROM tmp.ticketComponentCalculate tcc 
				JOIN vn.component c2 ON c2.code = 'frenchOffer'
				JOIN buy b ON b.id = tcc.buyFk;
			
	END IF;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentBase;
	CREATE TEMPORARY TABLE tmp.ticketComponentBase ENGINE = MEMORY
		SELECT tc.itemFk, ROUND(SUM(tc.cost), 4) AS base, tc.warehouseFk
			FROM tmp.ticketComponent tc
				JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tc.itemFk AND tcc.warehouseFk = tc.warehouseFk
			GROUP BY tc.itemFk, warehouseFk;
			
	-- RECOBRO
	INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
		SELECT tcb.warehouseFk, tcb.itemFk, c2.id, 
			ROUND(tcb.base * 
							LEAST(
								MAX(GREATEST(IFNULL(cr.priceIncreasing,0),
											IFNULL(cr1.priceIncreasing,0),
											IFNULL(cr2.priceIncreasing,0))
									), 
								cc.maxPriceIncreasingRatio), 
				3)
			FROM tmp.ticketComponentBase tcb
			JOIN vn.component c2 ON c2.code = 'debtCollection'
			JOIN vn.clientConfig cc
			JOIN claimRatio cr ON cr.clientFk = vClientFk
			LEFT JOIN clientYoke cy1 ON cy1.leftOx = cr.clientFk
			LEFT JOIN claimRatio cr1 ON cr1.clientFk = cy1.rightOx
			LEFT JOIN clientYoke cy2  ON cy2.rightOx = cr.clientFk
			LEFT JOIN claimRatio cr2 ON cr2.clientFk = cy2.leftOx
				WHERE GREATEST(IFNULL(cr.priceIncreasing,0), IFNULL(cr1.priceIncreasing,0), IFNULL(cr2.priceIncreasing,0)) > 0.009
				GROUP BY tcb.itemFk;

	-- Mana auto
	INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
		SELECT tcb.warehouseFk, tcb.itemFk, c2.id, ROUND(base * (0.01 + wm.pricesModifierRate), 3) as manaAuto
			FROM tmp.ticketComponentBase tcb
				JOIN `client` c on c.id = vClientFk
				JOIN workerMana wm ON c.salesPersonFk = wm.workerFk 
				JOIN vn.component c2 ON c2.code = 'autoMana'
			WHERE wm.isPricesModifierActivated
			HAVING manaAuto <> 0;
	
	-- Precios especiales
	INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
		SELECT tcb.warehouseFk,
				tcb.itemFk,
				c2.id,
				GREATEST(
						IFNULL(ROUND(tcb.base * c2.tax, 4), 0), 
						IF(i.hasMinPrice, i.minPrice,0) - tcc.rate3
						) cost
			FROM tmp.ticketComponentBase tcb
				JOIN vn.component c2 ON c2.code = 'lastUnitsDiscount'
				JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tcb.itemFk AND tcc.warehouseFk = tcb.warehouseFk 
				LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
				JOIN vn.item i ON i.id = tcb.itemFk
			WHERE sp.value IS NULL
				AND i.supplyResponseFk IS NULL;
	
	-- Venta por paquetes
	INSERT INTO tmp.ticketComponent(warehouseFk, itemFk, componentFk, cost)
		SELECT tcc.warehouseFk, tcc.itemFk, c2.id, tcc.rate2 - tcc.rate3 
			FROM tmp.ticketComponentCalculate tcc
				JOIN vn.component c2 ON c2.code = 'salePerPackage'
				JOIN buy b ON b.id = tcc.buyFk
			LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
		WHERE sp.value IS NULL;

	DROP TEMPORARY TABLE IF EXISTS tmp.zone;
	CREATE TEMPORARY TABLE IF NOT EXISTS tmp.zone (INDEX (id))
			ENGINE = MEMORY
		SELECT vZoneFk id;

	CALL zone_getOptionsForShipment(vShipped, TRUE);
	
	-- Reparto
	INSERT INTO tmp.ticketComponent
		SELECT tcc.warehouseFK, 
				tcc.itemFk,
				c2.id, 
				z.inflation * ROUND(ic.cm3delivery * (IFNULL(zo.price,5000) - IFNULL(zo.bonus,0)) / (1000 * vc.standardFlowerBox) , 4) cost
		FROM tmp.ticketComponentCalculate tcc
			JOIN item i ON i.id = tcc.itemFk
			JOIN tmp.zoneOption zo ON zo.zoneFk = vZoneFk
			JOIN zone z ON z.id = vZoneFk
			JOIN agencyMode am ON am.id = z.agencyModeFk
			JOIN vn.volumeConfig vc
			JOIN vn.component c2 ON c2.code = 'delivery'
			LEFT JOIN itemCost ic ON ic.warehouseFk = tcc.warehouseFk 
				AND ic.itemFk = tcc.itemFk
			HAVING cost <> 0; 

	DROP TEMPORARY TABLE tmp.zoneOption;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCopy;
	CREATE TEMPORARY TABLE tmp.ticketComponentCopy ENGINE = MEMORY
		SELECT * FROM tmp.ticketComponent;

	-- Precio especial
	INSERT INTO tmp.ticketComponent
		SELECT tcc.warehouseFk, 
				tcc.itemFk, 
				c2.id, 
				sp.value - SUM(tcc.cost) sumCost
			FROM tmp.ticketComponentCopy tcc
				JOIN component c ON c.id = tcc.componentFk
				JOIN specialPrice sp ON sp.clientFk = vClientFK AND sp.itemFk = tcc.itemFk
				JOIN vn.component c2 ON c2.code = 'specialPrices'
			WHERE c.classRate IS NULL
				AND tcc.warehouseFk = vWarehouseFk
			GROUP BY tcc.itemFk, tcc.warehouseFk
			HAVING ABS(sumCost) > 0.001;

	-- Rappel 
	INSERT INTO tmp.ticketComponent
		SELECT tcc.warehouseFk, 
				tcc.itemFk, 
				IFNULL(c.componentFk ,c2.id), 
				SUM(tcc.cost) * ((1/(1-c.rappel/100)) -1) sumCost
			FROM tmp.ticketComponentCopy tcc
				JOIN vn.clientChain cc ON cc.clientFk = vClientFk
				JOIN vn.`chain` c ON c.id = cc.chainFk
				JOIN vn.component c2 ON c2.code = 'rappel'
			WHERE tcc.warehouseFk = vWarehouseFk
			GROUP BY tcc.itemFk, tcc.warehouseFk;


	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentSum;
	CREATE TEMPORARY TABLE tmp.ticketComponentSum
		(INDEX (itemFk, warehouseFk))
		ENGINE = MEMORY
		SELECT SUM(cost) sumCost, tc.itemFk, tc.warehouseFk, c.classRate
			FROM tmp.ticketComponent tc
				JOIN component c ON c.id = tc.componentFk
			GROUP BY tc.itemFk, tc.warehouseFk, c.classRate;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentRate;
	CREATE TEMPORARY TABLE tmp.ticketComponentRate ENGINE = MEMORY
		SELECT tcc.warehouseFk,  
				tcc.itemFk, 
				1 rate,
				IF(tcc.groupingMode = 1, 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)
			GROUP BY tcs.warehouseFk, tcs.itemFk;

	INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, `grouping`, price, priceKg)
		SELECT
				tcc.warehouseFk,
				tcc.itemFk,
				2 rate,
				tcc.packing `grouping`,
				SUM(tcs.sumCost) price,
				SUM(tcs.sumCost) / weightGrouping priceKg
			FROM tmp.ticketComponentCalculate tcc
				JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
					AND tcs.warehouseFk = tcc.warehouseFk
			WHERE tcc.available IS NULL OR (IFNULL(tcs.classRate, 2) = 2
				AND tcc.packing > 0 AND tcc.available >= tcc.packing)
			GROUP BY tcs.warehouseFk, tcs.itemFk;

	INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, `grouping`, price, priceKg)
		 SELECT				
				tcc.warehouseFk, 
				tcc.itemFk, 
				3 rate, 
				tcc.available `grouping`, 
				SUM(tcs.sumCost) price,
				SUM(tcs.sumCost) / weightGrouping priceKg   
			FROM tmp.ticketComponentCalculate tcc
				JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk 
					AND tcs.warehouseFk = tcc.warehouseFk
			WHERE IFNULL(tcs.classRate, 3) = 3 
			GROUP BY tcs.warehouseFk, tcs.itemFk;

	INSERT INTO tmp.ticketComponentPrice (warehouseFk, itemFk, rate, `grouping`, price, priceKg)
		SELECT * FROM (
			SELECT * FROM tmp.ticketComponentRate ORDER BY price LIMIT 10000000000000000000
		) t
		GROUP BY itemFk, warehouseFk, `grouping`;
	
	DROP TEMPORARY TABLE
		tmp.ticketComponentCalculate,
		tmp.ticketComponentSum,
		tmp.ticketComponentBase,
		tmp.ticketComponentRate,
		tmp.ticketComponentCopy;
	
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 `catalog_componentPrepare` */;
/*!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 `catalog_componentPrepare`()
BEGIN
              
    DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
    CREATE TEMPORARY TABLE tmp.ticketComponent (
		`warehouseFk` INT UNSIGNED NOT NULL,
		`itemFk` INT NOT NULL,
		`componentFk` INT UNSIGNED NOT NULL,
		`cost` DECIMAL(10,4) NOT NULL,
		INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
		UNIQUE `fkItemWarehouseComponent` (`itemFk` ASC, `warehouseFk` ASC, `componentFk` ASC)
	)ENGINE=MEMORY DEFAULT CHARSET=utf8;
        
    DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPrice;
    CREATE TEMPORARY TABLE tmp.ticketComponentPrice (  
		`warehouseFk` INT UNSIGNED NOT NULL,
		`itemFk` INT NOT NULL,
		`rate` INT NOT NULL,
		`grouping` INT UNSIGNED NOT NULL,
		`price` DECIMAL(10,4) NOT NULL,
        `priceKg` DECIMAL(10,4),
		INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
		UNIQUE `fkItemWarehouseRate` (`itemFk` ASC, `warehouseFk` ASC, `rate` ASC)
	)ENGINE=MEMORY DEFAULT CHARSET=utf8;    
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 `catalog_componentPurge` */;
/*!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 `catalog_componentPurge`()
BEGIN
	DROP TEMPORARY TABLE 
        tmp.ticketComponentPrice,
        tmp.ticketComponent,
        tmp.ticketLot;
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 `catalog_test` */;
/*!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 `catalog_test`()
proc: BEGIN
/**
 * Calcula los articulos disponibles y sus precios
 * 
 * @table tmp.item(itemFk) Listado de artículos a calcular
 * @param vLanded Fecha de recepcion de mercancia
 * @param vAddressFk Id del consignatario
 * @param vAgencyModeFk Id de la agencia
 * @return tmp.ticketCalculateItem(itemFk, available, producer, 
 *			item, size, stems, category, inkFk, image, origin, price)
 * @return tmp.ticketLot(warehouseFk, itemFk, available, buyFk)
 * @return tmp.ticketComponent
 * @return tmp.ticketComponentPrice
 * @return tmp.zoneGetShipped
 */
	DECLARE vLanded DATE DEFAULT DATE_ADD(CURDATE(),INTERVAL 2 DAY);
    DECLARE vAddressFk INT DEFAULT 24526;
    DECLARE vAgencyModeFk INT DEFAULT 639;
    DECLARE vAvailableCalc INT;
    DECLARE vShipped DATE;
    DECLARE vWarehouseFk SMALLINT;
    DECLARE vZoneFk INT;
    DECLARE vDone BOOL;
    DECLARE cTravelTree CURSOR FOR
        SELECT zoneFk, warehouseFk, shipped FROM tmp.zoneGetShipped;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tmp.item;
		CREATE TEMPORARY TABLE tmp.item
			ENGINE = MEMORY 
			SELECT 10 itemFk;
    -- Establece los almacenes y las fechas que van a entrar al disponible
SELECT 1;    
	CALL vn.zone_getShipped (vLanded, vAddressFk, vAgencyModeFk, FALSE);
SELECT 2;
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
    CREATE TEMPORARY TABLE tmp.ticketLot(
      `warehouseFk` smallint(5) unsigned NOT NULL,
      `itemFk` int(11) NOT NULL,
      `available` double DEFAULT NULL,
      `buyFk` int(11) DEFAULT NULL,
      `fix` tinyint(3) unsigned DEFAULT '0',
      `zoneFk` int(11) NOT NULL,
      KEY `itemFk` (`itemFk`),
      KEY `item_warehouse` (`itemFk`,`warehouseFk`) USING HASH
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8;
	CALL catalog_componentPrepare();
    
SELECT 3;
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketCalculateItem;
	CREATE TEMPORARY TABLE tmp.ticketCalculateItem(
		itemFk INT(11) NOT NULL, 
		available INT(11),
		producer VARCHAR(50), 
		item VARCHAR(50), 
		size INT(10) UNSIGNED,  
		stems INT(11),  
		category VARCHAR(3), 
		inkFk VARCHAR(3),  
		image VARCHAR(50),
		origin VARCHAR(3), 
		price DECIMAL(10,2),
		priceKg DECIMAL(10,2),
    PRIMARY KEY `itemFk` (`itemFk`)
    ) ENGINE = MEMORY DEFAULT CHARSET=utf8;
		         
    OPEN cTravelTree;

    l: LOOP
        SET vDone = FALSE;
        FETCH cTravelTree INTO vZoneFk, vWarehouseFk, vShipped;

        IF vDone THEN
            LEAVE l;
        END IF;

        CALL `cache`.available_refresh (vAvailableCalc, FALSE, vWarehouseFk, vShipped);
SELECT '4', vWarehouseFk, vShipped ;
        CALL buyUltimate (vWarehouseFk, vShipped);
SELECT 5;
        INSERT INTO tmp.ticketLot (warehouseFk, itemFk, available, buyFk, zoneFk)
			SELECT vWarehouseFk,
					i.item_id,
					IFNULL(i.available, 0),
					bu.buyFk,
                    vZoneFk
				FROM `cache`.available i
					JOIN tmp.item br ON br.itemFk = i.item_id
					LEFT JOIN item it ON it.id = i.item_id
					LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = i.item_id
				WHERE i.calc_id = vAvailableCalc
					AND i.available > 0;
                    
        DROP TEMPORARY TABLE tmp.buyUltimate;
        
        CALL vn.catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
SELECT 6;
        INSERT INTO tmp.ticketCalculateItem (
					itemFk, 
					available, 
                    producer, 
                    item, 
                    size, 
                    stems, 
                    category, 
                    inkFk,
                    image,
                    origin,
                    price,
                    priceKg)
        SELECT 
				tl.itemFk, 
				SUM(tl.available) available,
				p.name producer, 
				i.name item, 
				i.size size,  
				i.stems,  
				i.category, 
				i.inkFk,  
				i.image,
				o.code origin, 
                bl.price,
                bl.priceKg
			FROM tmp.ticketLot tl
				JOIN item i ON tl.itemFk = i.id
				LEFT JOIN producer p ON p.id = i.producerFk AND p.isVisible
				JOIN origin o ON o.id = i.originFk
				JOIN (
					SELECT * 
						FROM (SELECT price, itemFk, priceKg
								FROM tmp.ticketComponentPrice
                            	WHERE warehouseFk = vWarehouseFk
                            	ORDER BY (rate = 2) DESC 
								LIMIT 10000000000000000000) sub
                        GROUP BY itemFk
				) bl ON bl.itemFk = tl.itemFk
			WHERE tl.zoneFk = vZoneFk AND tl.warehouseFk = vWarehouseFk
			GROUP BY tl.itemFk
			ON DUPLICATE KEY UPDATE available = available + VALUES(available);

    END LOOP;

    CLOSE cTravelTree;
    DROP TEMPORARY TABLE tmp.item;
SELECT 7; 
     
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 `clean` */;
/*!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 `clean`()
BEGIN
	DECLARE vDateShort DATETIME;
	DECLARE vOneYearAgo DATE;
	DECLARE vFourYearsAgo DATE;
	DECLARE v18Month DATE;
	DECLARE v26Month DATE;
	DECLARE v3Month DATE;
	DECLARE vTrashId varchar(15);

	SET vDateShort = TIMESTAMPADD(MONTH, -2, CURDATE());
	SET vOneYearAgo = TIMESTAMPADD(YEAR,-1,CURDATE());
	SET vFourYearsAgo = TIMESTAMPADD(YEAR,-4,CURDATE());
	SET v18Month = TIMESTAMPADD(MONTH, -18,CURDATE());
	SET v26Month = TIMESTAMPADD(MONTH, -26,CURDATE());
	SET v3Month = TIMESTAMPADD(MONTH, -3, CURDATE());

	DELETE FROM ticketParking WHERE created < vDateShort;
	DELETE FROM routesMonitor WHERE dated < vDateShort;
	DELETE FROM workerTimeControlLog WHERE created < vDateShort;
	DELETE FROM `message` WHERE sendDate < vDateShort;
	DELETE FROM messageInbox WHERE sendDate < vDateShort;
	DELETE FROM messageInbox WHERE sendDate < vDateShort;
	DELETE FROM workerTimeControl WHERE timed < vFourYearsAgo;
	DELETE FROM itemShelving WHERE created < CURDATE() AND visible = 0;
	DELETE FROM ticketDown WHERE created < TIMESTAMPADD(DAY,-1,CURDATE());
	DELETE FROM entryLog WHERE creationDate < vDateShort;
	DELETE IGNORE FROM expedition WHERE created < v26Month;
	DELETE FROM sms WHERE created < v18Month;
	DELETE FROM saleTracking WHERE created < vOneYearAgo;
	DELETE tobs FROM ticketObservation tobs 
		JOIN ticket t ON tobs.ticketFk = t.id WHERE t.shipped < TIMESTAMPADD(YEAR,-2,CURDATE());
	DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < vOneYearAgo;
	DELETE FROM sharingCart where ended < vDateShort;
	DELETE FROM sharingClient where ended < vDateShort;
	DELETE tw.* FROM ticketWeekly tw 
		LEFT JOIN sale s ON s.ticketFk = tw.ticketFk WHERE s.itemFk IS NULL;
	DELETE FROM claim WHERE ticketCreated < vFourYearsAgo;
	DELETE FROM message WHERE sendDate < vDateShort;
	-- Robert ubicacion anterior de trevelLog comentario para debug
	DELETE sc FROM saleChecked sc 
		JOIN sale s ON sc.saleFk = s.id WHERE s.created < vDateShort;
	DELETE FROM zoneEvent WHERE `type` = 'day' AND dated < v3Month;
	DELETE bm
		FROM buyMark bm 
			JOIN buy b ON b.id = bm.id 
			JOIN entry e ON e.id = b.entryFk
			JOIN travel t ON t.id = e.travelFk
		WHERE t.landed <= vDateShort;
	DELETE FROM stowaway WHERE created < v3Month;
	DELETE FROM vn.buy WHERE created < vDateShort AND entryFk = 9200;
	DELETE FROM vn.itemShelvingLog WHERE created < vDateShort;
	DELETE FROM vn.stockBuyed WHERE creationDate < vDateShort;


	-- Equipos duplicados
	DELETE w.* 
		FROM workerTeam w
		JOIN (SELECT id, team, workerFk, COUNT(*) - 1 as duplicated
				FROM workerTeam
				GROUP BY team,workerFk
				HAVING duplicated
			 ) d ON d.team = w.team AND d.workerFk = w.workerFk AND d.id != w.id;

	DELETE sc 
		FROM  saleComponent sc
			JOIN sale s ON s.id=  sc.saleFk
			JOIN ticket t ON t.id= s.ticketFk
		WHERE t.shipped < v18Month;

	DELETE c 
		FROM vn.claim c
			JOIN vn.claimState cs ON cs.id = c.claimStateFk
		WHERE cs.description = "Anulado" AND
			c.created < vDateShort;
	DELETE
		FROM vn.expeditionTruck
		WHERE ETD < v3Month;

	-- borrar travels sin entradas
	DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete;
	CREATE TEMPORARY TABLE tmp.thermographToDelete
		SELECT th.id,th.dmsFk
		FROM vn.travel t
			LEFT JOIN vn.entry e ON e.travelFk = t.id
			JOIN vn.travelThermograph th ON th.travelFk = t.id
		WHERE t.shipped < TIMESTAMPADD(MONTH, -3, CURDATE()) AND e.travelFk IS NULL;

	SELECT dt.id into vTrashId
		FROM vn.dmsType dt
		WHERE dt.code = 'trash';

	UPDATE tmp.thermographToDelete th
		JOIN vn.dms d ON d.id = th.dmsFk
		SET d.dmsTypeFk = vTrashId;

	DELETE th 
		FROM tmp.thermographToDelete tmp
		JOIN vn.travelThermograph th ON th.id = tmp.id;

	DELETE t
		FROM vn.travel t
		LEFT JOIN vn.entry e ON e.travelFk = t.id
		WHERE t.shipped < TIMESTAMPADD(MONTH, -3, CURDATE()) AND e.travelFk IS NULL;
	
	UPDATE dms d
			JOIN dmsType dt ON dt.id = d.dmsTypeFk 
		SET d.dmsTypeFk = vTrashId 
		WHERE created < TIMESTAMPADD(MONTH, -dt.monthToDelete, CURDATE());
	
	-- borrar entradas sin compras
	DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
	CREATE TEMPORARY TABLE tmp.entryToDelete
		SELECT e.*
			FROM vn.entry e
			LEFT JOIN vn.buy b ON b.entryFk = e.id
			JOIN vn.entryConfig  ec ON e.id != ec.defaultEntry
		WHERE e.dated < TIMESTAMPADD(MONTH, -3, CURDATE()) AND b.entryFK IS NULL;

	DELETE e
		FROM vn.entry e
		JOIN tmp.entryToDelete tmp ON tmp.id = e.id;    
	
	-- borrar de route registros menores a 4 años
	DROP TEMPORARY TABLE IF EXISTS tmp.routeToDelete;
	CREATE TEMPORARY TABLE tmp.routeToDelete
		SELECT *
		FROM vn.route r
		WHERE created < TIMESTAMPADD(YEAR,-4,CURDATE());   

	UPDATE  tmp.routeToDelete tmp
		JOIN vn.dms d ON d.id = tmp.gestdocFk
		SET d.dmsTypeFk = vTrashId;

	DELETE r 
		FROM tmp.routeToDelete tmp
		JOIN vn.route r ON  r.id = tmp.id;

	-- borrar registros de dua y awb menores a 2 años
	DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete;
	CREATE TEMPORARY TABLE tmp.duaToDelete
		SELECT * 
			FROM vn.dua 
			WHERE operated < TIMESTAMPADD(YEAR,-2,CURDATE()); 

	UPDATE  tmp.duaToDelete tm
		JOIN vn.dms d ON d.id = tm.gestdocFk
		SET d.dmsTypeFk = vTrashId;

	DELETE d
		FROM tmp.duaToDelete tmp
		JOIN vn.dua d ON d.id = tmp.id;

	DELETE FROM vn.awb WHERE created < TIMESTAMPADD(YEAR,-2,CURDATE());        

	-- Borra los registros de collection y ticketcollection
	DELETE FROM vn.collection  WHERE created < vDateShort;

	DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete;
	DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
	DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete;

	DELETE FROM travelLog WHERE creationDate < v3Month;

	CALL shelving_clean;	

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 `clean_logiflora` */;
/*!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 `clean_logiflora`()
BEGIN
	/* partir en 2 procedimientos, uno que borre compras y otro articulos
	 * item_clean, buy_clean
	 * */
	
	DECLARE vMaxDated DATE DEFAULT TIMESTAMPADD(DAY, - 7, CURDATE());
	DECLARE vDone INT DEFAULT FALSE;
	DECLARE vBuyFk INT;
	DECLARE cur1 CURSOR FOR SELECT id FROM tmp.buy;
	DECLARE cur2 CURSOR FOR SELECT id FROM tmp.item;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tmp.buy;

	CREATE TEMPORARY TABLE tmp.buy
	ENGINE = MEMORY
		SELECT b.id
		FROM vn.buy b
			JOIN vn.entry e ON e.id = b.entryFk
			JOIN vn.travel tr ON tr.id = e.travelFk 
			JOIN vn.agencyMode am ON am.id = tr.agencyModeFk 
		WHERE b.quantity = 0
			AND am.name = 'LOGIFLORA'
			AND e.isRaid;

	OPEN cur1;

 	read_loop: LOOP
 
 		SET vDone = FALSE;
 
    	FETCH cur1 INTO vBuyFk;
    
	    IF vDone THEN
			LEAVE read_loop;
	    END IF;
    
		DELETE FROM vn.buy WHERE id = vBuyFk;
    
  	END LOOP;

  	CLOSE cur1;
	
  	DROP TEMPORARY TABLE tmp.buy;
  
  	DROP TEMPORARY TABLE IF EXISTS tmp.item;

	CREATE TEMPORARY TABLE tmp.item
	ENGINE = MEMORY
	SELECT DISTINCT i.id
		FROM vn.item i
			LEFT JOIN hedera.orderRow o ON o.itemFk = i.id
			LEFT JOIN vn.sale s ON s.itemFk = i.id
			LEFT JOIN vn.buy b ON b.itemFk = i.id  
			LEFT JOIN bs.waste w ON w.itemFk = i.id
		WHERE i.supplyResponseFk 
				AND o.id IS NULL
				AND b.id IS NULL 
				AND s.id IS NULL
				AND w.rate IS NULL
				AND i.created < vMaxDated;
			
	OPEN cur2;

 	read_loop: LOOP
 
 		SET vDone = FALSE;
 
    	FETCH cur2 INTO vBuyFk;
    
	    IF vDone THEN
			LEAVE read_loop;
	    END IF;
    
    	DELETE FROM vn.item WHERE id = vBuyFk;
    
  	END LOOP;

  	CLOSE cur2;
	
  	DROP TEMPORARY TABLE tmp.item;
    
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 `clearShelvingList` */;
/*!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 `clearShelvingList`(vShelvingFk VARCHAR(8))
BEGIN
	UPDATE vn.itemShelving
		SET visible = 0
		WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk COLLATE utf8_unicode_ci;
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 `clientCreate` */;
/*!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 `clientCreate`(
	vFirstname VARCHAR(50),
    vSurnames VARCHAR(50), 
    vFi VARCHAR(9), 
    vAddress TEXT, 
    vPostcode CHAR(5),
    vCity VARCHAR(25),
    vProvinceFk SMALLINT(5),
    vCompanyFk SMALLINT(5),
    vPhone VARCHAR(11),
    vEmail VARCHAR(255),
    vUserFk INT)
BEGIN
/**
 * Create new client
 *
 */
    DECLARE vPayMethodFk INT DEFAULT 4;
    DECLARE vDueDay INT DEFAULT 5;
    DECLARE vDefaultCredit DECIMAL(10, 2) DEFAULT 300.00;
    DECLARE vIsTaxDataChecked TINYINT(1) DEFAULT 1;
	DECLARE vHasCoreVnl BOOLEAN DEFAULT TRUE;
    DECLARE vMandateTypeFk INT DEFAULT 2;
    
	INSERT INTO `client` (
			id,
			name,
			street,
			fi,
			phone,
			email,
			provinceFk,
			city,
			postcode,
			socialName,
			payMethodFk,
			dueDay,
			credit,
			isTaxDataChecked,
			hasCoreVnl,
			isEqualizated)
		VALUES (
			vUserFk,
			CONCAT('TR ', vFirstname, ' ', vSurnames),
			vAddress,
			TRIM(vFi),
			vPhone,
			vEmail,
			vProvinceFk,
			vCity,
			vPostcode,
			CONCAT(vSurnames, ' ', vFirstname), 
			vPayMethodFk,
			vDueDay,
			vDefaultCredit,
			vIsTaxDataChecked,
			vHasCoreVnl,
			FALSE
		) ON duplicate key update  
            payMethodFk = vPayMethodFk,
			dueDay = vDueDay,
			credit = vDefaultCredit,
			isTaxDataChecked = vIsTaxDataChecked,
			hasCoreVnl = vHasCoreVnl,
            isActive = TRUE;
	
    IF (SELECT COUNT(*) FROM mandate WHERE clientFk = vUserFk AND companyFk = vCompanyFk AND mandateTypeFk = vMandateTypeFk) = 0 THEN
		INSERT INTO mandate (clientFk, companyFk, mandateTypeFk)
			VALUES (vUserFk, vCompanyFk, vMandateTypeFk);
	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 `clientDebtSpray` */;
/*!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 `clientDebtSpray`(vClientFk INT)
BEGIN

	/* Reparte el saldo de un cliente en greuge en la cartera que corresponde, y desasigna el comercial
    *
    *
    */

	DECLARE vClientDebt DOUBLE;
    
    SELECT vn.clientGetDebt(vClientFk, CURDATE()) INTO vClientDebt;
    
    INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
		VALUES (vClientFk, 'Saldo pendiente', vClientDebt, CURDATE(), 5);
    
    CALL vn.clientGreugeSpray(vClientFk, TRUE, '', TRUE);
    
    INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
			SELECT vClientFk, 'Liquidación cliente', sum(amount), CURDATE(), 5
				FROM vn.greuge
				WHERE clientFk = vClientFk;
                
	UPDATE vn.client 
		SET salesPersonFk = NULL 
		WHERE id = vClientFk;

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 `clientFreeze` */;
/*!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 `clientFreeze`()
BEGIN
/**
* Congela diariamente aquellos clientes que son morosos sin recobro, 
* pero que no sean trabajadores, 
* y que el riesgo no sea menor que cero
* hasta que no se gire la remesa no se congelan a los clientes de giro
*/

	DECLARE vIsRemittanced BOOLEAN;

	SELECT id into vIsRemittanced 
		FROM receipt 
		WHERE invoiceFk LIKE 'REMESA%' 
			AND payed > util.firstDayOfMonth(CURDATE())
		LIMIT 1;

	DROP TEMPORARY TABLE IF EXISTS tmp.clientGetDebt;
	CREATE TEMPORARY TABLE tmp.clientGetDebt
		SELECT clientFk
			FROM bs.defaulter 
			WHERE created = CURDATE()
				AND amount;

	CALL clientGetDebt(CURDATE());

	UPDATE client c
			JOIN bi.defaulters d ON d.client = c.id AND d.date = CURDATE()
			JOIN config ON TRUE
			LEFT JOIN recovery r ON r.clientFk = c.id AND r.finished IS NULL
			LEFT JOIN payMethod pm ON pm.id = c.payMethodFk 
			LEFT JOIN tmp.risk rk ON rk.clientFk = c.id
		SET c.isFreezed = TRUE, 
			d.frozened = CURDATE()
		WHERE (d.amount > config.defaultersMaxAmount 
			AND rk.risk > 0)
			AND c.typeFk = 'normal'
			AND r.id IS NULL
			AND (vIsRemittanced OR pm.code <> 'bankDraft');

	DROP TEMPORARY TABLE 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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `clientGetDebt` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `clientGetDebt`(vDate DATE)
BEGIN
/**
 * Calcula el riesgo para los clientes activos
 *
 * @table tmp.clientGetDebt(clientFk)
 * @param vDate Fecha maxima de los registros
 * @return tmp.risk
 */
	DECLARE vStarted DATETIME DEFAULT TIMESTAMPADD(DAY, -35, CURDATE());
	DECLARE vEnded DATETIME;

	SET vEnded = TIMESTAMP(IFNULL(vDate, CURDATE()), '23:59:59');

    DROP TEMPORARY TABLE IF EXISTS tClientRisk;
    CREATE TEMPORARY TABLE tClientRisk 
		ENGINE = MEMORY
        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)
			FROM receipt r
				JOIN tmp.clientGetDebt c ON c.clientFk = r.clientFk
			WHERE r.payed > vEnded
			GROUP BY c.clientFk;

	INSERT INTO tClientRisk
		SELECT t.clientFk, CAST(-SUM(t.amount) / 100 AS DECIMAL(10,2))
				FROM hedera.tpvTransaction t
					JOIN tmp.clientGetDebt c ON c.clientFk = t.clientFk
				WHERE t.receiptFk IS NULL
					AND t.status = 'ok'
				GROUP BY t.clientFk;
                    
	INSERT INTO tClientRisk
		SELECT t.clientFk, totalWithVat
			FROM ticket t
				JOIN tmp.clientGetDebt c ON c.clientFk = t.clientFk
			WHERE refFk IS NULL
				AND shipped BETWEEN vStarted AND vEnded;

	DROP TEMPORARY TABLE IF EXISTS tmp.risk;
	CREATE TEMPORARY TABLE tmp.risk
		(PRIMARY KEY (clientFk))
		ENGINE = MEMORY
		SELECT clientFk, SUM(amount) risk
			FROM client c
				JOIN tClientRisk cr ON cr.clientFk = c.id
			GROUP BY c.id;
		
	DROP TEMPORARY TABLE tClientRisk;
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 `clientGetDebtDiary` */;
/*!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 `clientGetDebtDiary`(vClientFK INT, vCompanyFk INT)
BEGIN
/**
 * Devuelve el registro de deuda
 *
 * @param vClientFK Id del cliente
 * @param vCompanyFk Id de la empresa
 */
	DECLARE vDone BOOL;
	DECLARE vDate DATETIME;
    DECLARE vTotalBalance DOUBLE DEFAULT 0.00;
    DECLARE vCreated DATETIME;
    DECLARE vIssued DATETIME;
    DECLARE vBalance DOUBLE DEFAULT 0.00;
    DECLARE cur CURSOR FOR
		SELECT 
				created, 
				issued, 
				ROUND(amount, 2) AS balance
			FROM invoiceOut
			WHERE clientFk = vClientFk AND companyFk = vCompanyFk 
		UNION ALL 
		SELECT 
				created, 
				payed, 
				ROUND(-1 * amountPaid, 2) AS balance
			FROM receipt 
			WHERE clientFk = vClientFk AND companyFk = vCompanyFk
		ORDER BY issued, created;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
            
	OPEN cur;
    
    proc: LOOP
		SET vDone = FALSE;
        
        FETCH cur INTO vCreated, vIssued, vBalance;

		IF vDate IS NULL THEN
			SET vDate=vIssued;
        END IF;
        
        IF vDone THEN
			LEAVE proc;
		END IF;

        SET vTotalBalance = vTotalBalance + vBalance;

		IF CAST(ABS(vTotalBalance) AS UNSIGNED) = 0 THEN
			SET vDate = vIssued;
            SET vDone = TRUE;
        END IF;
	END LOOP;
	
	CLOSE cur;
    
	SELECT 
        issued, 
        CAST(debtOut AS DECIMAL(10,2)) debtOut, 
        CAST(debtIn AS DECIMAL(10,2)) debtIn,
		ref, 
        companyFk, 
        priority
	FROM
		(SELECT 
                NULL AS issued, 
                SUM(amountUnpaid) AS debtOut, 
				NULL AS debtIn, 
				'Saldo Anterior' AS ref, 
                companyFk,
                0 as priority 
			FROM 
				(SELECT SUM(amount) AS amountUnpaid, companyFk, 0 
					FROM invoiceOut
					WHERE clientFk = vClientFK 
						AND issued < vDate  
					GROUP BY companyFk 
                
				UNION ALL 
            
				SELECT SUM(-1 * amountPaid), companyFk, 0 
					FROM receipt 
					WHERE clientFk = vClientFK 
						AND payed < vDate 
					GROUP BY companyFk) AS transactions 
			GROUP BY companyFk 
            
			UNION ALL 
		
			SELECT 
					issued, 
					amount as debtOut, 
					NULL AS debtIn, 
					ref,
					companyFk,
					1 
				FROM invoiceOut 
				WHERE clientFk = vClientFK 
					AND issued >= vDate
			UNION ALL 
		
			SELECT 
					r.payed, 
					NULL as debtOut, 
					r.amountPaid, 
					r.invoiceFk, 
					r.companyFk,
					0 
				FROM receipt r
				WHERE r.clientFk = vClientFK 
					AND r.payed >= vDate) t 
			INNER JOIN `client` c ON c.id = vClientFK 
	HAVING debtOut <> 0 OR debtIn <> 0 
    ORDER BY issued, priority DESC, debtIn;
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 `clientGreugeSpray` */;
/*!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 `clientGreugeSpray`(IN vClientFk INT, IN onlyForHisOwner BOOL, IN vWorkerCode VARCHAR(3), IN vWithMana BOOLEAN)
BEGIN

	DECLARE vGreuge DECIMAL(10,2);
	DECLARE vOwner INT;
	DECLARE vTotalSale INT;
	DECLARE vGreugeTypeFk INT DEFAULT 5; -- HERENCIA
	DECLARE vGreugeTypeMana INT DEFAULT 3;-- Maná
	DECLARE vMana DECIMAL(10,2);

	SELECT vn.clientGetMana(vClientFk) INTO vMana;

	IF vWithMana AND vMana THEN

		INSERT INTO vn.greuge(	clientFk,
								description,
								amount,
								shipped,
								greugeTypeFk)
		VALUES(	vClientFk,
				'Desasignación',
				-1 * vMana,
				CURDATE(),
				vGreugeTypeMana);

	END IF;

	SELECT sum(amount) INTO vGreuge
		FROM vn.greuge
		WHERE clientFk = vClientFk;

	IF vGreuge != 0 THEN

		IF LENGTH(vWorkerCode) = 0 THEN

			SELECT salesPersonFk INTO vOwner
				FROM vn.client
				WHERE id = vClientFk;

		ELSE
		
			SELECT id INTO vOwner
				FROM vn.worker
				WHERE code = vWorkerCode COLLATE utf8_general_ci;

		END IF;
		
		DROP TEMPORARY TABLE IF EXISTS tmp.clientList;
		CREATE TEMPORARY TABLE tmp.clientList
			SELECT DISTINCT t.clientFk, floor(cr.yearSale / 12) monthSale
				FROM vn.ticket t
					JOIN vn.client c ON c.id = t.clientFk
					JOIN vn.workerMana wm ON wm.workerFk = c.salesPersonFk
					JOIN vn.claimRatio cr ON cr.clientFk = c.id
				WHERE wm.workerFk = IF(onlyForHisOwner, vOwner, wm.workerFk)
				AND t.shipped >= TIMESTAMPADD(MONTH,-1,CURDATE())
				AND c.id != vClientFk
				HAVING monthSale > 100;
					
		SELECT SUM(monthSale) INTO vTotalSale
			FROM tmp.clientList;

		INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
			SELECT clientFk, CONCAT('Cliente: ',vClientFk), vGreuge * monthSale / vTotalSale, CURDATE(), vGreugeTypeFk
				FROM tmp.clientList
			UNION ALL
			SELECT vClientFk, 'Reparto greuge', -vGreuge, CURDATE(), vGreugeTypeFk;

	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 `clientPackagingOverstock` */;
/*!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 `clientPackagingOverstock`(vClientFk INT, vGraceDays INT )
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tmp.clientPackagingOverstock;
    CREATE TEMPORARY TABLE tmp.clientPackagingOverstock
		ENGINE = MEMORY 
	SELECT itemFk, 
			sum(GotfromClient) - sum(SenttoClient) as devueltos, 
            sum(InvoicedtoClient) - sum(InvoicedfromClient) as facturados,
            LEAST(	
					sum(GotfromClient) - sum(SenttoClient), 
					sum(InvoicedtoClient) - sum(InvoicedfromClient)
				) as abonables
		FROM
	(
		SELECT t.*,
			IF(@month = month, 0, 1) monthEnd,
			@month := month
			FROM      
				(
				SELECT  x.id as ticketFk, 
						date(x.shipped) as shipped, 
						x.itemFk, 
						IFNULL(cast(sum(x.InvoicedtoClient) as DECIMAL(10,0)),0) InvoicedtoClient, 
						IFNULL(cast(sum(x.InvoicedfromClient) as DECIMAL(10,0)),0) InvoicedfromClient, 
						IFNULL(cast(sum(x.SenttoClient) as DECIMAL(10,0)),0) SenttoClient, 
						IFNULL(cast(sum(x.GotfromClient) as DECIMAL(10,0)),0) GotfromClient,
						i.name as concept,
						x.refFk as invoice,
						month(shipped) month,
						x.companyFk
				FROM
				(
				SELECT  t.id,
						t.shipped,
						IFNULL(pe.equivalentFk, s.itemFk) itemFk,
						IF(s.quantity > 0, s.quantity, NULL) InvoicedtoClient,
						IF(s.quantity < 0, -s.quantity, NULL) InvoicedfromClient,
						NULL SenttoClient,
						NULL GotfromClient,
						t.refFk,
						@month := 0 month,
						t.companyFk
					FROM sale s
						JOIN ticket t on t.id = s.ticketFk 
						JOIN packaging p ON p.itemFk = s.itemFk 
						LEFT JOIN packageEquivalentItem pe ON pe.itemFk = s.itemFk
						WHERE t.clientFk = vClientFk
						AND t.shipped > '2017-11-30' 
						AND p.isPackageReturnable
				UNION ALL
				SELECT  NULL,
						'2017-11-30',
						IFNULL(pe.equivalentFk, tps.itemFk) itemFk,
						tps.sent InvoicedtoClient,
						tps.returned InvoicedfromClient,
						NULL SenttoClient,
						NULL GotfromClient,
						'Histórico',
						NULL,
						NULL
						
					FROM ticketPackagingStartingStock tps
						LEFT JOIN packageEquivalentItem pe ON pe.itemFk = tps.itemFk
						WHERE tps.clientFk = vClientFk
							AND tps.isForgetable = FALSE
				UNION ALL
				SELECT  t.id,
					t.shipped,
					IFNULL(pe.equivalentFk, p.itemFk) itemFk,
					NULL,
					NULL,
					IF(tp.quantity > 0 AND t.shipped <= TIMESTAMPADD(DAY, - vGraceDays, CURDATE()), tp.quantity, NULL) SenttoClient,
					IF(tp.quantity < 0, -tp.quantity, NULL) GotfromClient,
					NULL AS refFk,
					NULL,
					t.companyFk
				FROM ticketPackaging tp 
					JOIN ticket t on t.id = tp.ticketFk 
					JOIN packaging p ON p.id = tp.packagingFk
					LEFT JOIN packageEquivalentItem pe ON pe.itemFk = p.itemFk
					WHERE t.clientFk = vClientFk
					AND t.shipped > '2017-11-21' ) x

					JOIN item i ON x.itemFk = i.id
					GROUP BY x.id, x.itemFk
			) t
			ORDER BY itemFk, shipped DESC
			LIMIT 10000000000000000000
		) t2
		GROUP BY itemFk;
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 `clientPackagingOverstockReturn` */;
/*!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 `clientPackagingOverstockReturn`(vClientFk INT, vGraceDays INT )
BEGIN

	DECLARE vNewTicket INT DEFAULT 0;
    DECLARE vWarehouseFk INT;
    -- SET vGraceDays = GREATEST(vGraceDays, 90);

	CALL vn.clientPackagingOverstock(vClientFk,vGraceDays);
	
	SELECT id INTO vWarehouseFk
	FROM vn.warehouse
	WHERE hasConfectionTeam;
    
	CALL vn.ticket_add(
			 vClientFk
			,CURDATE()
			,vWarehouseFk -- Algemesi
			,442 -- Verdnatura
			,NULL -- address
			,NULL -- agencia
			,NULL -- route
			,CURDATE()
            ,account.myUser_getId()
			,TRUE
			,vNewTicket);
			
	INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price)
		SELECT vNewTicket, cpo.itemFk, - cpo.abonables, i.longName, p.price
			FROM tmp.clientPackagingOverstock cpo
				JOIN vn.item i ON i.id = cpo.itemFk
				JOIN vn.packaging p ON p.itemFk = cpo.itemFk
			WHERE cpo.abonables > 0;
			
	INSERT INTO vn.ticketPackaging(ticketFk, packagingFk, quantity)
		SELECT vNewTicket, p.id, cpo.abonables
			FROM tmp.clientPackagingOverstock cpo
				JOIN vn.packaging p ON p.itemFk = cpo.itemFk
			WHERE cpo.abonables > 0;
    
	SELECT vNewTicket;
            
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 `clientRemoveWorker` */;
/*!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 `clientRemoveWorker`()
BEGIN
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vClientFk INT;
	DECLARE rs CURSOR FOR
		SELECT c.clientFk
			FROM tmp.clientGetDebt c
			LEFT JOIN clientRisk r ON r.clientFk = c.clientFk
		GROUP BY c.clientFk
		HAVING SUM(IFNULL(r.amount,0)) = 0;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tmp.clientGetDebt;
	CREATE TEMPORARY TABLE tmp.clientGetDebt
		SELECT cd.id as clientFk
			FROM bs.clientDied cd
			LEFT JOIN vn.clientProtected cp ON cp.clientFk = cd.id
			JOIN vn.client c ON c.id = cd.id
			JOIN vn.province p ON p.id = c.provinceFk
			JOIN vn.country co ON co.id = p.countryFk
		WHERE  cd.Aviso = 'TERCER AVISO' AND 
			cp.clientFk IS NULL AND 
			co.country NOT IN ('Portugal','Francia','España exento') AND 
			c.salesPersonFk IS NOT NULL;

	OPEN rs;
	FETCH rs INTO vClientFk;
		WHILE NOT vDone DO
			CALL vn.clientGreugeSpray(vClientFk, TRUE, '',TRUE);
			UPDATE vn.client SET salesPersonFk = NULL WHERE id = vClientFk;
			INSERT INTO vn.clientLog (originFk, userFk, `action`, description)
				VALUES (vClientFk, account.myUser_getId(), 'update', CONCAT('Se ha desasignado el cliente por que no ha comprado en 3 meses'));
			FETCH rs INTO vClientFk;
		END WHILE;
	CLOSE rs;
	DROP TEMPORARY TABLE 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 `clientRisk_update` */;
/*!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 `clientRisk_update`(vClientId INT, vCompanyId INT, vAmount DECIMAL(10,2))
BEGIN
	IF vAmount IS NOT NULL
	THEN
		INSERT INTO clientRisk
			SET
				clientFk = vClientId,
				companyFk = vCompanyId,
				amount = vAmount
			ON DUPLICATE KEY UPDATE
				amount = amount + VALUES(amount);
	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 `client_checkBalance` */;
/*!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_checkBalance`(IN vDateTo DATETIME, IN vIsConciliated BOOL)
BEGIN

	DECLARE vDateFrom DATE;
	SET vDateTo = TIMESTAMP(vDateTo,'23:59:59');
	SELECT util.firstDayOfYear(vDateTo) INTO vDateFrom;

	SELECT s.nickname, c.id , c.accountingAccount , sub1.mysql , sub1.sage, sub1.mysql - sub1.sage diference, sub1.companyFk , c.name 
		FROM client c
			JOIN payMethod pm ON pm.id = c.payMethodFk
			JOIN( SELECT sub.companyFk, sub.clientFk, ROUND(SUM(sub.mysql),2) mysql, ROUND(SUM(sub.sage),2) sage 
					FROM( SELECT io.companyFk, io.clientFk, -io.amount mysql, 0 sage
							FROM invoiceOut io
								WHERE issued BETWEEN vDateFrom AND vDateTo
							UNION ALL 
								SELECT r.companyFk, r.clientFk, r.amountPaid, 0 sage
									FROM receipt r
									WHERE payed BETWEEN vDateFrom AND vDateTo
										AND IF(vIsConciliated,r.isConciliate, TRUE) = TRUE
							UNION ALL
								SELECT empresa_id, c.id, 0, ROUND(NZ(Eurohaber) - NZ(Eurodebe),2) sage
									FROM bi.XDiario_ALL xd
										JOIN client c ON c.accountingAccount = xd.SUBCTA
									WHERE xd.Fecha BETWEEN vDateFrom AND vDateTo
						)sub
					GROUP BY companyFk, clientFk	
				) sub1 ON sub1.clientFk = c.id
			JOIN supplier s ON s.id = sub1.companyFk
			JOIN company co ON co.id = sub1.companyFk 
		WHERE pm.outstandingDebt 
			AND co.code <> 'BLK' 
		HAVING ABS(diference) > 0.05
	ORDER BY c.name;
	 
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 */ ;
/*!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_RandomList`(vNumber INT)
BEGIN

	DECLARE i INT DEFAULT 0;
    DECLARE c INT DEFAULT 0;
    DECLARE maxClientFk INT;
         
    DROP TEMPORARY TABLE IF EXISTS tmp.client;
    
    CREATE TEMPORARY TABLE tmp.`client`
    (id INT AUTO_INCREMENT,
     clientFk INT,
     isSelected TINYINT(1) NOT NULL DEFAULT 0,
     PRIMARY KEY(id),
     UNIQUE KEY clientFk (clientFk))
     ENGINE = MEMORY;
     
     INSERT INTO tmp.client(clientFk)
		SELECT DISTINCT clientFk
			FROM vn.invoiceOut
			WHERE issued > TIMESTAMPADD(MONTH, -2, CURDATE());
            
	SELECT max(id) INTO maxClientFk
		FROM tmp.client;
     
    
	WHILE i < vNumber DO
    
		SET i = i + 1;
   
        WHILE c = 0 DO
        
			SELECT id INTO c
				FROM tmp.client
				WHERE id = floor(RAND() * maxClientFk) + 1
					AND isSelected = FALSE
                    LIMIT 1;
			
		END WHILE;
        
       -- SELECT i, maxClientFk, c;
        
        UPDATE tmp.client 
			SET isSelected = TRUE 
            WHERE id = c;
        
        SET c = 0;
    
    END WHILE;
    
    SELECT c.id, c.name FROM tmp.client tc
		JOIN vn.client c ON c.id = tc.clientFk
		WHERE isSelected
        ORDER BY clientFk;


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 `cmr_getByTicket` */;
/*!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 `cmr_getByTicket`(vTicketFk INT)
BEGIN

	DECLARE vLanded DATE;
	
	SELECT DATE_ADD(CURDATE(), INTERVAL landingDays DAY) INTO vLanded
		FROM vn.cmrConfig;

	IF vTicketFk THEN
	
		IF (SELECT count(ticketFk) FROM vn.cmr WHERE ticketFk = vTicketFk) THEN
		
			SELECT id FROM vn.cmr WHERE ticketFk = vTicketFk;
		
		ELSE
		
			INSERT INTO vn.cmr(ticketFk, companyFk, addressFromFk, addressToFk, ead)
				SELECT vTicketFk, t.companyFk, a.id, t.addressFk, vLanded
					FROM vn.ticket t
						JOIN vn.warehouse w ON w.id = t.warehouseFk 
						JOIN vn.address a ON a.id = w.addressFk 
					WHERE t.id = vTicketFk;
				
			SELECT LAST_INSERT_ID();
		
		END IF;
	
	ELSE
	
		INSERT INTO vn.cmr(ead) VALUES(vLanded);
	
		SELECT LAST_INSERT_ID();
	
	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 `cmr_sendOverview` */;
/*!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 `cmr_sendOverview`()
BEGIN
/**
 * Insert the monthly CMR summary in vn.mail on the 5th of each month.
 */
	
	SET SESSION group_concat_max_len = 1000000;
-- IF (DAY(CURDATE()) = 5) THEN
	INSERT INTO
		vn.mail (receiver,
		replyTo,
		subject,
		body)
	SELECT
		c2.email,
		'cmr@verdnatura.es',
		'Resumen CMR',
		CONCAT('<div align="center">
		<h2>Resumen Mensual CMR</h2>
		<table cellpadding="5" cellspacing="2" width="60%" style="color: #153643; font-family: " Trebuchet MS"; font-size:
			18px; line-height: 18px;">
			<tr>
				<td colspan="5">
					Estimado cliente, <br>
					A continuación le enviamos el resumen menual de CMR ',UPPER(MONTHNAME(CURDATE() - INTERVAL 1 MONTH)),' ', YEAR(CURDATE() - INTERVAL 1 MONTH), '. <br> <br>
					Le rogamos que nos devuelva el resumen firmado a <b>cmr@verdnatura.es </b><br>
					<br><br>
				</td>
			</tr>
			<tr>
				<td bgcolor="#8ebb27" align="center">CMR</td>
				<td bgcolor="#8ebb27" align="center">Ticket</td>
			</tr>'
				, GROUP_CONCAT('<tr> <td align="center">', c.id, '</td> <td align="center"> ', c.ticketFk, '</td> </tr>' ORDER BY c.id SEPARATOR '' ), 
			'</table>
		     </font>
		     <p>
		         Saludos cordiales, Dpto administración.
		     </p>')
	FROM vn.cmr c
		JOIN vn.address a ON c.addressToFk = a.id
		JOIN vn.client c2 ON a.clientFk = c2.id
	WHERE c.state = 'Pending'
		AND MONTH(c.created) = MONTH(CURDATE() - INTERVAL 1 MONTH)
		AND YEAR(c.created) = YEAR(CURDATE() - INTERVAL 1 MONTH)
		AND c2.email IS NOT NULL -- No cogemos los CMRs dirigidos a 'Verdnatura'
	GROUP BY c2.id;

	-- Actualizamos el estado a 'Enviado'
	UPDATE vn.cmr c
		SET c.state = 'Sent'
		WHERE c.state = 'Pending' 
			AND MONTH(c.created) = MONTH(CURDATE() - INTERVAL 1 MONTH)
			AND YEAR(c.created) = YEAR(CURDATE() - INTERVAL 1 MONTH);
-- 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 `collectionPlacement_get` */;
/*!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 `collectionPlacement_get`(vParamFk INT(11), vIsPicker bool)
BEGIN
/** Devuelve el listado de ubicaciones a las que hay que ir para preparar una colección o ticket
 * 
 *  @param vParamFk Identificador de vn.collection o Identificador de vn.ticket
 *  @param vIsPicker Booleano para distinguer el sacador del revisador
 */

	DECLARE vCalcFk INT;
	DECLARE vWarehouseFk INT;
	DECLARE vWarehouseAliasFk INT;
	DECLARE vCurrentYear INT DEFAULT YEAR(NOW());

	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
	ENGINE = MEMORY
		SELECT 00000000 as ticketFk,
				00000000 as saleFk,
				00000000 as itemFk,
				0 as quantity;
			--  0 AS visible;

	INSERT INTO tmp.sale(ticketFk, saleFk, itemFk, quantity)
		SELECT s.ticketFk, s.id, s.itemFk, s.quantity
			FROM vn.ticketCollection tc
				JOIN vn.sale s ON s.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vParamFk
		UNION ALL 
		SELECT s.ticketFk, s.id, s.itemFk, s.quantity
			FROM vn.sale s
			WHERE s.ticketFk = vParamFk;

	SELECT t.warehouseFk, w.aliasFk
		INTO vWarehouseFk, vWarehouseAliasFk
		FROM vn.ticket t
			JOIN tmp.sale ts ON ts.ticketFk = t.id
			JOIN vn.warehouse w ON w.id = t.warehouseFk
		LIMIT 1;

	CALL cache.visible_refresh(vCalcFk,FALSE,vWarehouseFk);

	DROP TEMPORARY TABLE IF EXISTS tmp.sale2;
	CREATE TEMPORARY TABLE tmp.sale2
	ENGINE = MEMORY
		SELECT * FROM tmp.sale;

	DROP TEMPORARY TABLE IF EXISTS tmp.`grouping`;
	CREATE TEMPORARY TABLE tmp.`grouping`
		(INDEX(itemFk))
		ENGINE = MEMORY
		SELECT b.itemFk,
			CASE b.groupingMode 
			   WHEN 0 THEN 1 
			   WHEN 2 THEN b.packing
			   ELSE b.`grouping`
			END AS `grouping`
		FROM buy b
			JOIN cache.last_buy lb ON lb.buy_id = b.id
		WHERE lb.warehouse_id = vWarehouseFk
		GROUP BY b.itemFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.grouping2;
	CREATE TEMPORARY TABLE tmp.grouping2
		ENGINE MEMORY
		SELECT * FROM tmp.`grouping`;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList;
	CREATE TEMPORARY TABLE tmp.salePlacementList
		ENGINE MEMORY

	SELECT ts.saleFk,
			ts.itemFk,
			CAST(0 AS DECIMAL(10,0)) as saleOrder,
			IF(ish.visible > 0 OR iss.id, 1, 100000) * p.pickingOrder as `order`,
			IF(iss.id, TO_SECONDS(TIMESTAMPADD(YEAR,-vCurrentYear,iss.created)), TO_SECONDS(TIMESTAMPADD(YEAR,- year(ish.created),ish.created)) /* + TO_SECONDS(TIMESTAMPADD(YEAR,-vCurrentYear,NOW())) */) as priority,
			   CONCAT(
			IF(    iss.id,
				CONCAT('< ', IFNULL(wk.`code`, '---'),' > '),
				''),
			p.`code`) COLLATE utf8_general_ci as placement,
			sh.priority shelvingPriority,
			sh.code COLLATE utf8_general_ci as shelving,
			ish.created,
			ish.visible,
			IFNULL(IF(sc.isPreviousPreparedByPacking, ish.packing, g.`grouping`),1) as `grouping`,
			sc.isPreviousPrepared,
			iss.id as itemShelvingSaleFk,
			ts.ticketFk
			,iss.id
			, st.saleFk as salePreviousPrepared
			, iss.userFk
			, ts.quantity
		FROM tmp.sale ts 
			LEFT JOIN (SELECT DISTINCT saleFk 
							FROM vn.saleTracking st
								JOIN vn.state s ON s.id = st.stateFk 
							WHERE st.isChecked
								AND s.semaphore = 1) st ON st.saleFk = ts.saleFk
			JOIN vn.itemShelving ish ON ish.itemFk = ts.itemFk
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk
			JOIN vn.parking p ON p.id = sh.parkingFk
			JOIN vn.sector sc ON sc.id = p.sectorFk
			JOIN vn.warehouse w ON w.id = sc.warehouseFk
			LEFT JOIN tmp.`grouping` g ON g.itemFk = ts.itemFk
			LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = ts.saleFk AND iss.itemShelvingFk = ish.id
			LEFT JOIN vn.worker wk ON wk.id = iss.userFk
		WHERE w.aliasFk = vWarehouseAliasFk
			AND NOT sc.isHideForPickers
			HAVING (iss.id AND st.saleFk) OR salePreviousPrepared IS NULL
			;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList_2;
	CREATE TEMPORARY TABLE tmp.salePlacementList_2
		ENGINE MEMORY
	SELECT saleFk, priority as olderPriority
		FROM (SELECT saleFk, priority
				FROM tmp.salePlacementList
				ORDER BY      isPreviousPrepared DESC, 
							itemShelvingSaleFk IS NULL DESC,
							visible >= quantity DESC, 
							visible > 0 DESC,
							IFNULL(shelvingPriority,0) DESC,
							priority
							LIMIT 10000000000000000000 
			 ) sub
		GROUP BY saleFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList_3;
	CREATE TEMPORARY TABLE tmp.salePlacementList_3
		ENGINE MEMORY
	SELECT s1.saleFk, `order`as saleOrder
		FROM tmp.salePlacementList s1
			JOIN tmp.salePlacementList_2 s2 ON s2.saleFk = s1.saleFk AND s2.olderPriority = s1.priority; 

	UPDATE tmp.salePlacementList s1
		JOIN tmp.salePlacementList_3 s3 ON s3.saleFk = s1.saleFk
		SET s1.saleOrder = s3.saleOrder;
	/*
	-- Anula el orden de antigüedad y ordena por ubicación
	UPDATE tmp.salePlacementList
		SET saleOrder = `order`;*/ 

	SELECT spl.*
		FROM tmp.salePlacementList spl
			 JOIN vn.sale s ON s.id = spl.saleFk
		ORDER BY saleOrder,
					isPreviousPrepared DESC, 
					itemShelvingSaleFk,
					IF(vIsPicker, visible = 0, TRUE),
					s.quantity <= spl.visible DESC, 
					shelvingPriority DESC, -- PAK 05/11/2021
					priority;

	DROP TEMPORARY TABLE
		tmp.sale,
		tmp.sale2,
		tmp.`grouping`,
		tmp.grouping2,
		tmp.salePlacementList_2,
		tmp.salePlacementList_3;
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_addItem` */;
/*!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_addItem`(vItemFk INT, vQuantity INT, vTicketFk INT)
BEGIN
	DECLARE vConcept VARCHAR(50);
    DECLARE itemFk INT;
    DECLARE vSaleFk INT default 0;
    
	DECLARE vDescription VARCHAR(50);
    DECLARE vItemName VARCHAR(50);
    
    SELECT barcodeToItem(vItemFk) INTO itemFk;
      
    SELECT CONCAT(vn.getUser()," ",DATE_FORMAT(NOW( ), "%H:%i" )," ",i.name) INTO vConcept FROM vn.item i WHERE i.id = itemFk;
    
	SELECT name INTO vItemName FROM vn.item WHERE id = vItemFk;
    SELECT CONCAT("Añadido articulo ", vItemName, " cantidad:", vQuantity) INTO vDescription;
    
	INSERT INTO vn.ticketLog (originFk, userFk, action , description) 
		VALUES(vTicketFk, vn.getUser(), 'update', vDescription);
    
	INSERT INTO vn.sale (itemFk,ticketFk,concept,quantity,isAdded)
		VALUES (itemFk,vTicketFk,vConcept,vQuantity,1);

    SELECT last_insert_id() INTO vSaleFk;
    
    CALL vn.sale_calculateComponent(vSaleFk, null);
    
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 `collection_get` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `collection_get`(vWorkerFk INT)
BEGIN
	
	/* Obtiene colección del sacador si tiene líneas pendientes
	 * 
	 * @param vWorkerFk id del worker
	 */

	SELECT c.id AS collectionFk, date(c.created) AS created, count(DISTINCT s.id) totalRow, count(DISTINCT st.id) pickedRow
		FROM vn.collection c 
			JOIN vn.ticketCollection tc on tc.collectionFk = c.id 
			JOIN vn.sale s on s.ticketFk = tc.ticketFk 
			JOIN vn.state ss on ss.code = 'PREPARED'
			LEFT JOIN vn.saleTracking st on st.saleFk = s.id AND st.stateFk = ss.id
		WHERE c.workerFk = vWorkerFk 
			AND c.created >= TIMESTAMPADD(HOUR , -6,NOW())
			AND s.quantity != 0
		GROUP BY c.id
		HAVING totalRow > pickedRow;
	
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_getTickets` */;
/*!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_getTickets`(vParamFk INT)
BEGIN
/**
 * Selecciona los tickets de una colección/ticket
 * @param vParamFk ticketFk/collectionFk
 * @return Retorna ticketFk, level, agencyName, warehouseFk, salesPersonFk, observaciones
 */	
	DECLARE vItemPackingTypeFk VARCHAR(1);

	-- Si los sacadores son los de pruebas, pinta los colores
	SELECT itemPackingTypeFk INTO vItemPackingTypeFk
		FROM vn.collection 
		WHERE id = vParamFk;

	SELECT t.id ticketFk, 
			IF (!(vItemPackingTypeFk <=> 'V'), cc.code,CONCAT(SUBSTRING('ABCDEFGH',tc.wagon, 1),'-',tc.`level` )) `level`,
			am.name agencyName,
			t.warehouseFk,
			w.id salesPersonFk,
			IFNULL(tob.description,'') observaciones
		FROM vn.ticket t
			LEFT JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
			LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk 	-- PAK 23/12/21
			LEFT JOIN vn.collectionColors cc 
				ON cc.wagon = tc.wagon 
				AND cc.shelve = tc.`level` 
				AND cc.trainFk = c2.trainFk 						-- PAK 23/12/21
			LEFT JOIN vn.zone z ON z.id = t.zoneFk 
			LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
			LEFT JOIN vn.client c ON c.id = t.clientFk
			LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
			LEFT JOIN vn.ticketObservation tob ON tob.ticketFk = t.id 
				AND tob.observationTypeFk = 1
		WHERE t.id = vParamFk 
			AND t.shipped >= util.yesterday()
	UNION ALL
	SELECT t.id ticketFk, 
			IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
			am.name agencyName,
			t.warehouseFk,
			w.id  salesPersonFk,
			IFNULL(tob.description, '') observaciones
		FROM vn.ticket t
			JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
			LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk 	-- PAK 23/12/21
			LEFT JOIN vn.collectionColors cc 
				ON cc.wagon = tc.wagon 
					AND cc.shelve = tc.`level` 
					AND cc.trainFk = c2.trainFk 						-- PAK 23/12/21
			LEFT JOIN vn.zone z ON z.id = t.zoneFk 
			LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
			LEFT JOIN vn.client c ON c.id = t.clientFk
			LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
			LEFT JOIN vn.ticketObservation tob ON tob.ticketFk = t.id 
				AND tob.observationTypeFk = 1
		WHERE tc.collectionFk = vParamFk;

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_get_` */;
/*!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_get_`(vWorkerFk INT)
BEGIN
	
	/* Obtiene colección del sacador si tiene líneas pendientes
	 * 
	 * @param vWorkerFk id del worker
	 */

	SELECT c.id AS collectionFk, date(c.created) AS created
		FROM vn.collection c 
			LEFT JOIN vn.state s ON c.stateFk = s.id
		WHERE c.workerFk = vWorkerFk AND s.code = 'ON_PREPARATION'
				AND created >= TIMESTAMPADD(HOUR , -6,NOW());
	
	
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_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 `collection_kill`(vSelf INT)
BEGIN
	
	/* Elimina una coleccion y coloca sus tickets en OK
	 * 
	 */
	
	INSERT INTO vncontrol.inter(state_id, Id_Ticket)
		SELECT s.id, ticketFk
		FROM vn.ticketCollection tc
			JOIN vn.state s ON s.code = 'OK'
		WHERE tc.collectionFk = vSelf;
	
	DELETE FROM vn.collection 
		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 `collection_missingTrash` */;
/*!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_missingTrash`(
	vSaleFk BIGINT,
	vQuantity INT,
	vIsTrash BOOLEAN,
	vWarehouseFk INT,
	vNewQuantity INT)
BEGIN
/**
* Modifica la cantidad de una sale tirándola a faltas o basura
*
* @param vSaleFk el id de la sale
* @param vQuantity cantidad que se va a tirar a faltas o basura
* @param vWarehouseFk id warehouse
* @param vNewQuantity cantidad que se queda en el ticket original
*/
	DECLARE vTicketFk INT;
	DECLARE vClientFk INT DEFAULT 400;
	DECLARE vClientName VARCHAR(50);
	DECLARE vConsignatario INT;
	DECLARE vOriginalQuantity INT;
	DECLARE vDescription VARCHAR(100);
	DECLARE vCompanyVnlFk INT;
 	DECLARE vOrigin INT;

	IF vIsTrash THEN
		SELECT id INTO vClientFk
			FROM client c
			WHERE c.name='BASURA';
	END IF;

	SELECT CONCAT("Cambio cantidad del artículo ",itemFk, ", ",concept,", de ", quantity," a ", vNewQuantity), ticketFk
			INTO vDescription,vOrigin
		FROM sale
		WHERE id = vSaleFk;

	CALL logAdd(vOrigin, 'update', 'ticket', vDescription);

	SELECT t.id INTO vTicketFk
		FROM ticket t
		WHERE t.created > DATE_SUB(NOW(), INTERVAL 1 DAY)
			AND t.clientFk = vClientFk
			AND t.warehouseFk = vWarehouseFk
		LIMIT 1;

	IF vTicketFk IS NULL THEN
		SELECT c.name , co.id INTO vClientName,vConsignatario
			FROM client c
			 	JOIN address co ON c.id = co.clientFk
			WHERE c.id = vClientFk
			LIMIT 1;

		SELECT id INTO vCompanyVnlFk
			FROM company
			WHERE code = 'VNL';

		CALL ticket_add(vClientFk,
				NOW(), vWarehouseFk,
				vCompanyVnlFk,
				vConsignatario,
				NULL,
				NULL,
				NULL,
				account.myUser_getId(),
				TRUE,
				vTicketFk);

		SELECT t.id INTO vTicketFk
			FROM ticket t
			WHERE t.created > DATE_SUB(NOW(), INTERVAL 1 DAY)
				AND t.clientFk = vClientFk
				AND t.warehouseFk = vWarehouseFk
			LIMIT 1;
	END IF;

	INSERT INTO sale (itemFk,
			ticketFk,
			concept,
			quantity,
			originalQuantity,
			price,
			discount,
			priceFixed,
			reserved,
			isPicked,
			isPriceFixed,
			created,
			isAdded)
		SELECT itemFk,
				vTicketFk,
				CONCAT(concept," ",getWorkerCode(), " ", LEFT(CAST(NOW() AS TIME),5)),
				vQuantity,
				originalQuantity,
				price,
				discount,
				priceFixed,
				reserved,
				isPicked,
				isPriceFixed,
				created,
				isAdded
			FROM sale s
			WHERE s.id = vSaleFk;

	SELECT quantity INTO vOriginalQuantity
		FROM sale
		WHERE id = vSaleFk;

	UPDATE sale
		SET originalQuantity = vOriginalQuantity,
			quantity = vNewQuantity
		WHERE id = vSaleFk;
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_newSmartTag` */;
/*!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_newSmartTag`(vSectorFk INT)
proc:BEGIN
	DECLARE vWorkerFk INT;
	DECLARE vWagons INT;
	DECLARE vCollectionFk INT;

	SELECT w.id INTO vWorkerFk
		FROM vn.worker w
		WHERE w.id = vn.getUser();

	SELECT COUNT(ws.id) INTO vWagons
		FROM workerShelving ws 
		WHERE ws.workerFk = vWorkerFk
			AND ws.collectionFk IS NULL;

	CALL collection_newWithWagon(vSectorFk, vWagons);

	SELECT id INTO vCollectionFk
		FROM collection
			WHERE workerFk = vWorkerFk
		ORDER BY created DESC
		LIMIT 1;

	UPDATE workerShelving ws
		SET ws.collectionFk = vCollectionFk
		WHERE ws.workerFk = vWorkerFk
			AND ws.collectionFk IS NULL;

	SET @wagon := 0;

	DROP TEMPORARY TABLE IF EXISTS tmp.smartTags;
	CREATE TEMPORARY TABLE tmp.smartTags
		SELECT s.code, sub.wagon, s.level
			FROM (
				SELECT @wagon:=@wagon+1 as wagon, ws.shelvingFk
					FROM workerShelving ws
					WHERE ws.collectionFk = vCollectionFk) sub
				JOIN smartTag s ON s.shelvingFk = sub.shelvingFk
			ORDER BY wagon ASC, level ASC;

	UPDATE vn.ticketCollection tc
		JOIN tmp.smartTags ts ON tc.wagon = ts.wagon AND tc.level = ts.level 
		SET tc.smartTagFk = ts.code
		WHERE tc.collectionFk = vCollectionFk;

	DROP TEMPORARY TABLE tmp.smartTags;
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_newWithWagon` */;
/*!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_newWithWagon`(vSectorFk INT, vWagons INT)
proc:BEGIN

	DECLARE vIsPreviousPrepared BOOLEAN;
	DECLARE vCollectionFk INT;
	DECLARE vWarehouseFk INT;
	DECLARE vMaxTickets INT;
	DECLARE vStateFk INT;
	DECLARE vFirstTicketFk INT;
	DECLARE vHour INT;
	DECLARE vMinute INT;
	DECLARE vWorkerCode VARCHAR(3);
	DECLARE vWagon INT;
	DECLARE vWagonCounter INT;
	DECLARE vShelve INT;
	DECLARE vTicket INT;
	DECLARE vTicketToSplit INT;
	DECLARE vPrintedTickets INT;
	DECLARE vMaxTicketPrinted INT;
	DECLARE vItemPackingTypeFk VARCHAR(1);
	DECLARE hasAssignedTickets BOOLEAN;
	DECLARE vMaxNotReadyCollections INT;
	DECLARE vNotReadyCollections INT;
	DECLARE vTrainFk INT DEFAULT 1;
	DECLARE vUserFk INT;
	DECLARE vHourMatters BOOL DEFAULT TRUE;
	
	SELECT pc.ticketPrintedMax * vWagons, pc.ticketTrolleyMax * vWagons, pc.maxNotReadyCollections
		INTO vMaxTicketPrinted, vMaxTickets, vMaxNotReadyCollections
		FROM vn.productionConfig pc;
	/*IF NOT vn.deviceProductionUser_Exists(vUserFk) THEN
		
		LEAVE proc;
	
	END IF;*/

	SELECT w.code, w.id INTO vWorkerCode, vUserFk
		FROM vn.worker w
		WHERE w.id =account.myUser_getId();

	-- Establecemos el almacén y si es un sector de preparación previa, así como el estado para los tickets que se vayan preparando
	SELECT isPreviousPrepared, warehouseFk, itemPackingTypeFk
		INTO vIsPreviousPrepared, vWarehouseFk, vItemPackingTypeFk
		FROM vn.sector
		WHERE id = vSectorFk; -- Hola
	
-- Si está habilitado el modo cazador para las motos, y el usuario no esta registrado, se sale.
	
	IF (SELECT isTractorHuntingMode FROM vn.deviceProductionConfig dpc) AND vItemPackingTypeFk = 'H' THEN  
		IF (SELECT COUNT(*) FROM vn.workerWithoutTractor wwt WHERE wwt.workerFk = vUserFk) THEN 
			CALL util.throw('Usuario no registrado con moto');
			LEAVE proc;
		END IF;
	END IF;
	
	
-- Si hay colecciones sin terminar,  sale del proceso
	SELECT count(*) INTO vNotReadyCollections
		FROM (
			SELECT count(DISTINCT s.id) totalRow, count(DISTINCT st.id) pickedRow
				FROM vn.collection c 
					JOIN vn.ticketCollection tc ON tc.collectionFk = c.id 
					JOIN vn.sale s ON s.ticketFk = tc.ticketFk 
					JOIN vn.state ss ON ss.code = 'PREPARED'
					LEFT JOIN vn.saleTracking st ON st.saleFk = s.id AND st.stateFk = ss.id
				WHERE c.workerFk = vUserFk 
					AND c.created >= TIMESTAMPADD(HOUR , -6,NOW())
					AND s.quantity != 0
				GROUP BY c.id
				HAVING totalRow > pickedRow) sub; 

	IF vMaxNotReadyCollections < vNotReadyCollections THEN
		
		CALL util.throw('Hay colecciones pendientes');
		LEAVE proc;
	
	END IF;

	IF vIsPreviousPrepared THEN

		CALL util.throw('Es de preparación previa');
		LEAVE proc; -- Hasta que tengamos el altillo, vamos a cancelar esta opcion
	
		SELECT id INTO vStateFk
			FROM vn.state
		WHERE `code` = 'PREVIOUS_PREPARATION';
	ELSE

		SELECT id INTO vStateFk
			FROM vn.state
		WHERE `code` = 'ON_PREPARATION';

	END IF;

	CALL vn.productionControl(vWarehouseFk, 0); 

	-- Esto hay que corregirlo añadiendo un nuevo parámetro al proc. PAK 23/12/21
	IF vSectorFk = 65 THEN -- Pedidos pequeños
	
		SET vTrainFk = 2;
	
		SET vHourMatters = FALSE;
	
		DELETE pb.* 
			FROM tmp.productionBuffer pb
				JOIN vn.volumeConfig vc 
			WHERE pb.m3 * 1000 > vc.minTicketVolume;
	
	END IF;

	-- Se obtiene nº de colección y el buffer con los pedidos preparables 
	INSERT INTO vn.collection
			SET workerFk = vUserFk,
				itemPackingTypeFk = vItemPackingTypeFk,
				trainFk = vTrainFk;
		
	SELECT LAST_INSERT_ID() INTO vCollectionFk;
	
	-- 05/08/2021 PAK   Jose Frau pide que los tickets de recogida en Algemesí sólo se saquen si están asignados.
	DELETE pb.*
		FROM tmp.productionBuffer pb
			JOIN vn.state s ON s.id = pb.state
		WHERE pb.agency = 'REC_ALGEMESI'
			AND s.code != 'PICKER_DESIGNED';
		
	-- 2/3/2022 PAK Se acuerda con Pepe que los pedidos con riesgo no se sacan aunque se asignen.
	DELETE pb.*
		FROM tmp.productionBuffer pb
		WHERE pb.problem LIKE '%RIESGO%';

	-- Comprobamos si hay tickets asignados. En ese caso, nos centramos exclusivamente en esos tickets
	-- y los sacamos independientemente de problemas o tamaños
	SELECT COUNT(*) INTO hasAssignedTickets
		FROM tmp.productionBuffer pb
			JOIN vn.state s ON s.id = pb.state
			WHERE s.code = 'PICKER_DESIGNED'
				AND pb.workerCode = vWorkerCode;
	
	IF hasAssignedTickets THEN
	
		UPDATE vn.collection 
			SET itemPackingTypeFk = NULL 
			WHERE id = vCollectionFk;
		
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketToSplit;
		CREATE TEMPORARY TABLE tmp.ticketToSplit
			SELECT pb.ticketFk
				FROM tmp.productionBuffer pb
					JOIN vn.state s ON s.id = pb.state
				WHERE s.code = 'PICKER_DESIGNED'
					AND pb.workerCode = vWorkerCode
				ORDER BY    HH,  
							mm, 
							s.`order` DESC, 
							pb.m3 DESC;
							
		WHILE (SELECT COUNT(*) FROM tmp.ticketToSplit) DO 
		
			SELECT MIN(ticketFk) INTO vTicketToSplit
				FROM tmp.ticketToSplit;
			
			CALL vn.ticket_splitItemPackingType(vTicketToSplit);
		
			INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
				SELECT ticketFk, vCollectionFk
					FROM tmp.ticketIPT
					WHERE (itemPackingTypeFk = vItemPackingTypeFk) ; 
			
			DELETE FROM tmp.ticketToSplit
				WHERE ticketFk = vTicketToSplit;
		
			DROP TEMPORARY TABLE tmp.ticketIPT;
		
		END WHILE;
		
		CALL vn.productionControl(vWarehouseFk, 0);
		
	ELSE
	
		SELECT COUNT(*) INTO vPrintedTickets
			FROM tmp.productionBuffer pb
					JOIN vn.state s ON s.id = pb.state
					JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
					JOIN vn.agency a ON a.id = am.agencyFk
					JOIN vn.productionConfig pc 
				WHERE pb.shipped = CURDATE()
					AND (pb.ubicacion IS NOT NULL 
						OR a.isOwn = FALSE )
					AND s.isPreparable
					AND (
							(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
						OR (pb.V > 0 AND vItemPackingTypeFk = 'V'  AND ISNULL(pb.collectionV))
						OR (pb.H = 0 AND pb.V = 0 AND pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
						)
					AND (pc.isPreviousPreparationRequired = FALSE 
						OR pb.previousWithoutParking = FALSE);

	SET vMaxTicketPrinted = vMaxTicketPrinted - vPrintedTickets;

	-- AutoPRINT

	INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
		SELECT s2.id, pb.ticketFk, vUserFk
			FROM tmp.productionBuffer pb
				JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
				JOIN vn.agency a ON a.id = am.agencyFk 
				JOIN vn.state s ON s.id = pb.state
				JOIN vn.state s2 ON s2.code = 'PRINTED_AUTO'
				JOIN vn.ticket t ON t.id = pb.ticketFk
				JOIN vn.ticketConfig tc
				JOIN vn.productionConfig pc
			WHERE pb.shipped = CURDATE()
				AND (LENGTH(pb.problem) = 0 
					OR (pb.problem = 'PEQUEÑO' AND vTrainFk = 2))
				AND (pb.ubicacion IS NOT NULL 
					OR a.isOwn = FALSE )
				AND s.isPrintable
				AND s.isOK
				AND (
					(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
					OR (pb.V > 0 AND vItemPackingTypeFk = 'V'  AND ISNULL(pb.collectionV))
					OR (pb.H = 0 AND pb.V = 0 AND pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
					)
				AND t.created < TIMESTAMPADD(MINUTE, - tc.pickingDelay , NOW())
				AND (pc.isPreviousPreparationRequired = FALSE 
					OR pb.previousWithoutParking = FALSE)
			ORDER BY HH,				
					mm,
					s.`order` DESC,
					pb.m3 DESC
			LIMIT vMaxTicketPrinted;
	
		-- Se seleccionan los primeros tickets, asignando colección para dejarlos bloqueados a otros sacadores.
		-- Se splitan los tickets preparables, para que solo tengan un tipo de empaquetado
	
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketToSplit;
		CREATE TEMPORARY TABLE tmp.ticketToSplit
			SELECT pb.ticketFk, (pb.H + pb.V = 0) isNeutral
				FROM tmp.productionBuffer pb
					JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
					JOIN vn.agency a ON a.id = am.agencyFk 
					JOIN vn.ticketStateToday tst ON tst.ticket = pb.ticketFk
					JOIN vn.state s ON s.id = tst.state
					JOIN vn.productionConfig pc
				WHERE   (
						(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
						OR (pb.V > 0 AND vItemPackingTypeFk = 'V' AND ISNULL(pb.collectionV))
						OR (pb.H = 0 AND pb.V = 0 AND pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
						)
					AND (pb.ubicacion IS NOT NULL 
						OR a.isOwn = FALSE )
					AND LENGTH(pb.problem) = 0
					AND s.isPreparable
					AND (pc.isPreviousPreparationRequired = FALSE 
						OR pb.previousWithoutParking = FALSE)
				ORDER BY pb.HH, pb.mm, s.`order` DESC
				LIMIT vMaxTickets;
		
		WHILE (SELECT COUNT(*) FROM tmp.ticketToSplit) DO 
		
			SELECT MIN(ticketFk) INTO vTicketToSplit
				FROM tmp.ticketToSplit;
			
			
			IF (SELECT isNeutral 
					FROM tmp.ticketToSplit 
					WHERE ticketFk = vTicketToSplit) THEN
				
				INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
					VALUES(vTicketToSplit, vCollectionFk);
					
			ELSE
			
				CALL vn.ticket_splitItemPackingType(vTicketToSplit);
		
				INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
					SELECT ticketFk, vCollectionFk
						FROM tmp.ticketIPT
						WHERE itemPackingTypeFk = vItemPackingTypeFk;
				
				DROP TEMPORARY TABLE tmp.ticketIPT;
			
			END IF;
		
			DELETE FROM tmp.ticketToSplit
				WHERE ticketFk = vTicketToSplit;
		
		END WHILE;
			
	END IF;

	-- Creamos una tabla temporal con los datos que necesitamos para depurar la colección
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		SELECT 	pb.ticketFk,
				pb.`lines`,
				pb.m3 * 1000 liters,
				0 as height,
				0 as shelve,
				0 as wagon,
				0 AS shelveLiters,
				pb.productionOrder,
				pb.HH,
				pb.mm
			FROM tmp.productionBuffer pb
				JOIN vn.ticketCollection tc ON tc.ticketFk = pb.ticketFk
				WHERE tc.collectionFk = vCollectionFk
				LIMIT vMaxTickets;

	-- Voumen de las lineas de los pedidos, de acuerdo con el packingShelve establecido por los controladores
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketShelveLiters;
	CREATE TEMPORARY TABLE tmp.ticketShelveLiters
		SELECT t.ticketFk, SUM(s.quantity * vc.shelveVolume / i.packingShelve) shelveLiters
			FROM tmp.ticket t
				JOIN vn.sale s ON s.ticketFk = t.ticketFk
				JOIN vn.item i ON i.id = s.itemFk 
				JOIN vn.volumeConfig vc
			WHERE i.packingShelve 
			GROUP BY t.ticketFk;

	UPDATE tmp.ticket t 
		JOIN tmp.ticketShelveLiters tsl ON tsl.ticketFk = t.ticketFk
		SET t.shelveLiters = tsl.shelveLiters;

	-- Es importante que el primer ticket se coja en todos los casos
	
	SET vFirstTicketFk = 0;

	SELECT ticketFk, HH, mm 
		INTO vFirstTicketFk, vHour, vMinute
		FROM tmp.ticket
		ORDER BY productionOrder DESC, HH, mm
		LIMIT 1;

	-- Hay que excluir aquellos que no tengan la misma hora de preparación
	IF vHourMatters THEN
	
		DELETE 
			FROM tmp.ticket
			WHERE HH != vHour 
				OR mm != vMinute;
			
	END IF;
		
	-- En el caso de pedidos de más volumen de un carro, la colección será monoticket. Pero si el primer pedido
	-- no es monoticket, excluimos a los de más de un carro
	IF (SELECT (t.shelveLiters > vc.trolleyM3 * 1000)
			FROM tmp.ticket t
				JOIN vn.volumeConfig vc 
			WHERE t.ticketFk = vFirstTicketFk) THEN

		DELETE 
			FROM tmp.ticket 
			WHERE ticketFk != vFirstTicketFk;
		
	ELSE
	
		DELETE t.*
			FROM tmp.ticket t 
				JOIN vn.volumeConfig vc 
			WHERE t.shelveLiters > vc.trolleyM3 * 1000;
	
	END IF;

	-- Elimina los tickets bloqueados que no se van a preparar
	DELETE tc.* 
		FROM vn.ticketCollection tc
		LEFT JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vCollectionFk
			AND t.ticketFk IS NULL;
	
	-- Construccion del tren
		
	-- Establece altura máxima por pedido, porque las plantas no se pueden recostar.
	UPDATE tmp.ticket t
		JOIN
			( SELECT MAX(i.size) maxHeigth, 
					tc.ticketFk
				FROM vn.ticketCollection tc
					JOIN vn.sale s ON s.ticketFk = tc.ticketFk
					JOIN vn.item i ON i.id = s.itemFk
					WHERE i.itemPackingTypeFk = 'V'
						AND tc.collectionFk = vCollectionFk
					GROUP BY tc.ticketFk) sub ON sub.ticketFk = t.ticketFk
		SET t.height = IFNULL(sub.maxHeigth,0);
		
	-- Vamos a generar una tabla con todas las posibilidades de asignacion de pedido
	DROP TEMPORARY TABLE IF EXISTS tmp.wagonsVolumetry;
	CREATE TEMPORARY TABLE tmp.wagonsVolumetry
		SELECT 	cv.`level` as shelve, 
				1 as wagon,
				cv.`lines`,
				cv.liters,
				cv.height
			FROM vn.collectionVolumetry cv
				WHERE cv.itemPackingTypeFk = IFNULL(vItemPackingTypeFk, 'H')
					AND cv.trainFk = vTrainFk;

	SET vWagonCounter = 1;

	WHILE vWagonCounter < vWagons DO

		SET vWagonCounter = vWagonCounter + 1;

		INSERT INTO tmp.wagonsVolumetry(shelve, wagon, `lines`, liters, height)
			SELECT 	cv.`level` as shelve, 
					vWagonCounter as wagon,
					cv.`lines`,
					cv.liters,
					cv.height
			FROM vn.collectionVolumetry cv
				WHERE cv.itemPackingTypeFk = IFNULL(vItemPackingTypeFk, 'H')
					AND cv.trainFk = vTrainFk;

	END WHILE;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketShelve;
	CREATE TEMPORARY TABLE tmp.ticketShelve
		SELECT ticketFk, shelve, wagon, linesDif, LitersDif, heightDif
			FROM (
				SELECT 	t.ticketFk,
						wv.shelve, 
						wv.wagon,
						t.productionOrder,
						CAST(wv.`lines` AS SIGNED) - t.`lines` as linesDif, 
						CAST(wv.liters AS SIGNED) - t.shelveLiters as litersDif, 
						CAST(wv.height AS SIGNED) - t.height as heightDif
						FROM tmp.wagonsVolumetry wv
							JOIN tmp.ticket t
				) sub
			WHERE linesDif >= 0
				AND litersDif >= 0
				AND heightDif >= 0
			ORDER BY productionOrder DESC, linesDif, LitersDif, heightDif  ;
	
	-- Insertamos una opcion virtual para carro completo. Todo ticket tiene que poder entrar en un carro completo....
	INSERT INTO tmp.ticketShelve(ticketFk, shelve, wagon, linesDif, LitersDif, heightDif)
		SELECT 	t.ticketFk, 0, wv.wagon, 999, 999,999
			FROM tmp.ticket t
			JOIN tmp.wagonsVolumetry wv
			GROUP BY t.ticketFk, wv.wagon;
	
	SET vWagonCounter = 0;

	WHILE vWagonCounter < vWagons DO

		SET vWagonCounter = vWagonCounter + 1;

		-- Asignamos la primera balda util al primer pedido
		IF vWagonCounter = 1 THEN

			SELECT shelve INTO vShelve
				FROM tmp.ticketShelve
				WHERE  ticketFk = vFirstTicketFk
					AND wagon = vWagonCounter
					ORDER BY heightDif, litersDif, linesDif
				LIMIT 1;
		
			ELSE

			SELECT shelve, ticketFk INTO vShelve, vFirstTicketFk
				FROM tmp.ticketShelve
					WHERE wagon = vWagonCounter
					ORDER BY heightDif, litersDif, linesDif 
				LIMIT 1;

		END IF;

		IF vShelve > 0 THEN
		
			UPDATE tmp.ticket 
				SET shelve = vShelve,
					wagon = vWagonCounter
				WHERE ticketFk = vFirstTicketFk;
				
			DELETE FROM tmp.ticketShelve
				WHERE ticketFk = vFirstTicketFk
				OR (shelve = vShelve AND wagon = vWagonCounter);
				
			WHILE (SELECT COUNT(*) FROM tmp.ticketShelve WHERE wagon = vWagonCounter) DO
			
				SELECT ticketFk, shelve
					INTO vTicket, vShelve
					FROM tmp.ticketShelve
						WHERE wagon = vWagonCounter
					LIMIT 1;
			
				UPDATE tmp.ticket 
					SET shelve = vShelve,
						wagon = vWagonCounter
					WHERE ticketFk = vTicket;
				
				DELETE FROM tmp.ticketShelve
					WHERE ticketFk = vTicket
						OR (shelve = vShelve AND wagon = vWagonCounter);
						
			END WHILE;

		ELSE
		
			UPDATE tmp.ticket 
				SET shelve = 1, wagon = vWagonCounter
				WHERE ticketFk = vFirstTicketFk;

			DELETE FROM tmp.ticketShelve
					WHERE ticketFk = vFirstTicketFk
						AND wagon != vWagonCounter;
				
		END IF;

	END WHILE;

     -- Eliminamos los que se han quedado sin balda
	DELETE FROM tmp.ticket WHERE shelve = 0;

	-- Elimina los tickets bloqueados que no se van a preparar
	DELETE tc.* 
		FROM vn.ticketCollection tc
		LEFT JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vCollectionFk
			AND t.ticketFk IS NULL;

	-- Elimina los tickets que ya estan en otra coleccion
	DELETE tc.* 
		FROM vn.ticketCollection tc
		JOIN vn.ticketCollection tc2 ON tc2.ticketFk = tc.ticketFk 
		WHERE tc.collectionFk = vCollectionFk
			AND tc2.collectionFk != vCollectionFk;
	
	-- Actualiza el estado de la colección
	UPDATE vn.collection c
		JOIN vn.state st ON st.code = 'ON_PREPARATION'
		SET c.stateFk = st.id
		WHERE c.id = vCollectionFk;  

	-- Asigna las bandejas
	UPDATE vn.ticketCollection tc
		JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		SET tc.level = t.shelve, 
			tc.wagon = t.wagon,
			tc.itemCount = t.`lines`,
			tc.liters = t.shelveLiters;

	-- Actualiza el estado de los tickets
	INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
		SELECT vStateFk, ticketFk, vUserFk
			FROM vn.ticketCollection tc 
			WHERE tc.collectionFk = vCollectionFk;
	
	-- Aviso para la preparacion previa
	INSERT INTO vn.ticketDown(ticketFk, collectionFk)
		SELECT tc.ticketFk, tc.collectionFk
			FROM vn.ticketCollection tc
			WHERE tc.collectionFk = vCollectionFk;

	IF (SELECT count(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk) THEN 

		CALL vn.salesMerge_byCollection(vCollectionFk);

		UPDATE vn.collection c
			JOIN (SELECT count(*) saleTotalCount , 
						sum(s.isPicked != 0) salePickedCount
					FROM vn.ticketCollection tc
						JOIN vn.sale s ON s.ticketFk = tc.ticketFk
						WHERE tc.collectionFk = vCollectionFk
							AND s.quantity > 0
				) sub 
			SET 	c.saleTotalCount = sub.saleTotalCount, 
				c.salePickedCount = sub.salePickedCount
			WHERE c.id = vCollectionFk;
		
		SELECT vCollectionFk;  

	ELSE

		CALL util.throw('No ha sido posible obtener colección');
		DELETE FROM vn.collection WHERE id = vCollectionFk;
	
	END IF;

	DROP TEMPORARY TABLE
		tmp.ticketToSplit,
		tmp.ticketShelveLiters,
		tmp.ticket,
		tmp.wagonsVolumetry,
		tmp.ticketShelve,
		tmp.productionBuffer;
	
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_newWithWagon_beta` */;
/*!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_newWithWagon_beta`(vUserFk INT, vSectorFk INT, vWagons INT)
proc:BEGIN

	DECLARE vIsPreviousPrepared BOOLEAN;
	DECLARE vCollectionFk INT;
	DECLARE vWarehouseFk INT;
	DECLARE vMaxTickets INT;
	DECLARE vStateFk INT;
	DECLARE vFirstTicketFk INT;
	DECLARE vHour INT;
	DECLARE vMinute INT;
	DECLARE vWorkerCode VARCHAR(3);
	DECLARE vWagon INT;
	DECLARE vWagonCounter INT;
	DECLARE vShelve INT;
	DECLARE vTicket INT;
	DECLARE vTicketToSplit INT;
	DECLARE vPrintedTickets INT;
	DECLARE vMaxTicketPrinted INT;
	DECLARE vItemPackingTypeFk VARCHAR(1);
	DECLARE hasAssignedTickets BOOLEAN;
	DECLARE vMaxNotReadyCollections INT DEFAULT 0;
	DECLARE vNotReadyCollections INT;
	DECLARE vTrainFk INT DEFAULT 1;
	DECLARE vNow DATETIME;

	SELECT ticketPrintedMax * vWagons, ticketTrolleyMax * vWagons, pc.maxNotReadyCollections , NOW()
		INTO vMaxTicketPrinted, vMaxTickets, vMaxNotReadyCollections, vNow
		FROM vn.productionConfig pc;

	SELECT w.code INTO vWorkerCode
		FROM vn.worker w
		WHERE w.id = vUserFk;

	-- Establecemos el almacén y si es un sector de preparación previa, así como el estado para los tickets que se vayan preparando
	SELECT isPreviousPrepared, warehouseFk, itemPackingTypeFk
		INTO vIsPreviousPrepared, vWarehouseFk, vItemPackingTypeFk
		FROM vn.sector
		WHERE id = vSectorFk; -- Hola
	
-- Si está habilitado el modo cazador para las motos, y el usuario no esta registrado, se sale.
	
	IF (SELECT isTractorHuntingMode FROM vn.deviceProductionConfig dpc) AND vItemPackingTypeFk = 'H' THEN  
		IF (SELECT COUNT(*) FROM vn.workerWithoutTractor wwt WHERE wwt.workerFk = vUserFk) THEN 
			CALL util.throw('Usuario no registrado con moto');
			LEAVE proc;
		END IF;
	END IF;
	
-- Si hay colecciones sin terminar,  sale del proceso
	SELECT count(*) INTO vNotReadyCollections
		FROM (
			SELECT count(DISTINCT s.id) totalRow, count(DISTINCT st.id) pickedRow
				FROM vn.collection c 
					JOIN vn.ticketCollection tc ON tc.collectionFk = c.id 
					JOIN vn.sale s ON s.ticketFk = tc.ticketFk 
					JOIN vn.state ss ON ss.code = 'PREPARED'
					LEFT JOIN vn.saleTracking st ON st.saleFk = s.id AND st.stateFk = ss.id
				WHERE c.workerFk = vUserFk 
					AND c.created >= TIMESTAMPADD(HOUR , -6,NOW())
					AND s.quantity != 0
				GROUP BY c.id
				HAVING totalRow > pickedRow) sub; 

call util.debugAdd('wargo',CONCAT('vMaxNotReadyCollections ', vMaxNotReadyCollections));
call util.debugAdd('wargo',CONCAT('vNotReadyCollections ',vNotReadyCollections));

	IF vMaxNotReadyCollections < vNotReadyCollections THEN
		
		CALL util.throw('Hay colecciones pendientes');
		LEAVE proc;
	
	END IF;

	IF vIsPreviousPrepared THEN

		CALL util.throw('Es de preparación previa');
		LEAVE proc; -- Hasta que tengamos el altillo, vamos a cancelar esta opcion
	
		SELECT id INTO vStateFk
			FROM vn.state
		WHERE `code` = 'PREVIOUS_PREPARATION';
		
	ELSE

		SELECT id INTO vStateFk
			FROM vn.state
		WHERE `code` = 'ON_PREPARATION';

	END IF;

	CALL vn.productionControl(vWarehouseFk, 0); 

	-- Esto hay que corregirlo añadiendo un nuevo parámetro al proc. PAK 23/12/21
	IF vSectorFk = 65 THEN -- Pedidos pequeños
	
		SET vTrainFk = 2;
	
		DELETE pb.* 
			FROM tmp.productionBuffer pb
				JOIN vn.volumeConfig vc 
			WHERE pb.m3 * 1000 > vc.minTicketVolume;
	
	END IF;

	-- Se obtiene nº de colección y el buffer con los pedidos preparables 
	INSERT INTO vn.collection
			SET workerFk = vUserFk,
				itemPackingTypeFk = vItemPackingTypeFk,
				trainFk = vTrainFk;
		
	SELECT LAST_INSERT_ID() INTO vCollectionFk;
	
	-- 05/08/2021 PAK   Jose Frau pide que los tickets de recogida en Algemesí sólo se saquen si están asignados.
	DELETE pb.*
		FROM tmp.productionBuffer pb
			JOIN vn.state s ON s.id = pb.state
		WHERE pb.agency = 'REC_ALGEMESI'
			AND s.code != 'PICKER_DESIGNED';
		
	-- 2/3/2022 PAK Se acuerda con Pepe que los pedidos con riesgo no se sacan aunque se asignen.
	DELETE pb.*
		FROM tmp.productionBuffer pb
		WHERE pb.problem LIKE '%RIESGO%';

	-- Comprobamos si hay tickets asignados. En ese caso, nos centramos exclusivamente en esos tickets
	-- y los sacamos independientemente de problemas o tamaños
	SELECT COUNT(*) INTO hasAssignedTickets
		FROM tmp.productionBuffer pb
			JOIN vn.state s ON s.id = pb.state
			WHERE s.code = 'PICKER_DESIGNED'
				AND pb.workerCode = vWorkerCode;
	
	IF hasAssignedTickets THEN
	
		UPDATE vn.collection 
			SET itemPackingTypeFk = NULL 
			WHERE id = vCollectionFk;
		
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketToSplit;
		CREATE TEMPORARY TABLE tmp.ticketToSplit
			SELECT pb.ticketFk
				FROM tmp.productionBuffer pb
					JOIN vn.state s ON s.id = pb.state
				WHERE s.code = 'PICKER_DESIGNED'
					AND pb.workerCode = vWorkerCode
				ORDER BY    HH,  
							mm, 
							s.`order` DESC, 
							pb.m3 DESC;
							
		WHILE (SELECT COUNT(*) FROM tmp.ticketToSplit) DO 
		
			SELECT MIN(ticketFk) INTO vTicketToSplit
				FROM tmp.ticketToSplit;
			
			CALL vn.ticket_splitItemPackingType(vTicketToSplit);
		
			INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
				SELECT ticketFk, vCollectionFk
					FROM tmp.ticketIPT
					WHERE (itemPackingTypeFk = vItemPackingTypeFk) ; 
			
			DELETE FROM tmp.ticketToSplit
				WHERE ticketFk = vTicketToSplit;
		
			DROP TEMPORARY TABLE tmp.ticketIPT;
		
		END WHILE;
		
		CALL vn.productionControl(vWarehouseFk, 0);
		
	ELSE
	
		SELECT COUNT(*) INTO vPrintedTickets
			FROM tmp.productionBuffer pb
					JOIN vn.state s ON s.id = pb.state
					JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
					JOIN vn.agency a ON a.id = am.agencyFk
					JOIN vn.productionConfig pc 
				WHERE pb.shipped = CURDATE()
					AND (pb.ubicacion IS NOT NULL 
						OR a.isOwn = FALSE )
					AND s.isPreparable
					AND (
							(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
						OR (pb.V > 0 AND vItemPackingTypeFk = 'V'  AND ISNULL(pb.collectionV))
						OR (pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
						)
					AND (pc.isPreviousPreparationRequired = FALSE 
						OR pb.previousWithoutParking = FALSE);

call util.debugAdd('wargo',CONCAT('vMaxTicketPrinted ', vMaxTicketPrinted));
call util.debugAdd('wargo',CONCAT('vPrintedTickets ',vPrintedTickets));

	SET vMaxTicketPrinted = vMaxTicketPrinted - vPrintedTickets;

	-- AutoPRINT

	INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
		SELECT s2.id, pb.ticketFk, vUserFk
			FROM tmp.productionBuffer pb
				JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
				JOIN vn.agency a ON a.id = am.agencyFk 
				JOIN vn.state s ON s.id = pb.state
				JOIN vn.state s2 ON s2.code = 'PRINTED_AUTO'
				JOIN vn.ticket t ON t.id = pb.ticketFk
				JOIN vn.ticketConfig tc
				JOIN vn.productionConfig pc
			WHERE pb.shipped = CURDATE()
				AND (LENGTH(pb.problem) = 0 
					OR (pb.problem = 'PEQUEÑO' AND vTrainFk = 2))
				AND (pb.ubicacion IS NOT NULL 
					OR a.isOwn = FALSE )
				AND s.isPrintable
				AND s.isOK
				AND (
					(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
					OR (pb.V > 0 AND vItemPackingTypeFk = 'V'  AND ISNULL(pb.collectionV))
					OR (pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
					)
				AND t.created < TIMESTAMPADD(MINUTE, - tc.pickingDelay , NOW())
				AND (pc.isPreviousPreparationRequired = FALSE 
					OR pb.previousWithoutParking = FALSE)
			ORDER BY HH,				
					mm,
					s.`order` DESC,
					pb.m3 DESC
			LIMIT vMaxTicketPrinted;
	
		-- Se seleccionan los primeros tickets, asignando colección para dejarlos bloqueados a otros sacadores.
		-- Se splitan los tickets preparables, para que solo tengan un tipo de empaquetado
	
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketToSplit;
		CREATE TEMPORARY TABLE tmp.ticketToSplit
			SELECT pb.ticketFk, IFNULL((pb.H + pb.V = 0),TRUE) isNeutral
				FROM tmp.productionBuffer pb
					JOIN vn.agencyMode am ON am.id = pb.agencyModeFk
					JOIN vn.agency a ON a.id = am.agencyFk 
					JOIN vn.ticketStateToday tst ON tst.ticket = pb.ticketFk
					JOIN vn.state s ON s.id = tst.state
					JOIN vn.productionConfig pc
				WHERE   (
						(pb.H > 0 AND vItemPackingTypeFk = 'H' AND ISNULL(pb.collectionH))
						OR (pb.V > 0 AND vItemPackingTypeFk = 'V' AND ISNULL(pb.collectionV))
						OR (pb.H = 0 AND pb.V = 0 AND pb.N > 0 AND ISNULL(pb.collectionH) AND ISNULL(pb.collectionV))
						)
					AND (pb.ubicacion IS NOT NULL 
						OR a.isOwn = FALSE )
					AND LENGTH(pb.problem) = 0
					AND s.isPreparable
					AND (pc.isPreviousPreparationRequired = FALSE 
						OR pb.previousWithoutParking = FALSE)
				ORDER BY pb.HH, pb.mm, s.`order` DESC
				LIMIT vMaxTickets;

call util.debugAdd('wargo',CONCAT('tmp.ticketToSplit ', (SELECT COUNT(*) FROM tmp.ticketToSplit)));

		WHILE (SELECT COUNT(*) FROM tmp.ticketToSplit) DO 
		
			SELECT MIN(ticketFk) INTO vTicketToSplit
				FROM tmp.ticketToSplit;
			
			
			IF (SELECT isNeutral 
					FROM tmp.ticketToSplit 
					WHERE ticketFk = vTicketToSplit) THEN
				
				INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
					VALUES(vTicketToSplit, vCollectionFk);

call util.debugAdd('wargo',CONCAT('neutral ', vTicketToSplit));		

			ELSE
			
				CALL vn.ticket_splitItemPackingType(vTicketToSplit);
		
				INSERT INTO vn.ticketCollection(ticketFk, collectionFk)
					SELECT ticketFk, vCollectionFk
						FROM tmp.ticketIPT
						WHERE itemPackingTypeFk = vItemPackingTypeFk;

call util.debugAdd('wargo',CONCAT('NO neutral ', 
	(SELECT ticketFk FROM tmp.ticketIPT WHERE itemPackingTypeFk = vItemPackingTypeFk)));

				DROP TEMPORARY TABLE tmp.ticketIPT;
			
			END IF;
		
			DELETE FROM tmp.ticketToSplit
				WHERE ticketFk = vTicketToSplit;
		
		END WHILE;
			
	END IF;

call util.debugAdd('wargo',CONCAT('vn.ticketCollection  ', 
	(SELECT COUNT(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk)));

	-- Creamos una tabla temporal con los datos que necesitamos para depurar la colección
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		SELECT 	pb.ticketFk,
				pb.`lines`,
				pb.m3 * 1000 liters,
				0 as height,
				0 as shelve,
				0 as wagon,
				0 AS shelveLiters,
				pb.productionOrder,
				pb.HH,
				pb.mm
			FROM tmp.productionBuffer pb
				JOIN vn.ticketCollection tc ON tc.ticketFk = pb.ticketFk
				WHERE tc.collectionFk = vCollectionFk
				LIMIT vMaxTickets;

	-- Voumen de las lineas de los pedidos, de acuerdo con el packingShelve establecido por los controladores
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketShelveLiters;
	CREATE TEMPORARY TABLE tmp.ticketShelveLiters
		SELECT t.ticketFk, SUM(s.quantity * vc.shelveVolume / i.packingShelve) shelveLiters
			FROM tmp.ticket t
				JOIN vn.sale s ON s.ticketFk = t.ticketFk
				JOIN vn.item i ON i.id = s.itemFk 
				JOIN vn.volumeConfig vc
			WHERE i.packingShelve 
			GROUP BY t.ticketFk;

	UPDATE tmp.ticket t 
		JOIN tmp.ticketShelveLiters tsl ON tsl.ticketFk = t.ticketFk
		SET t.shelveLiters = tsl.shelveLiters;

	-- Es importante que el primer ticket se coja en todos los casos
	
	SET vFirstTicketFk = 0;

	SELECT ticketFk, HH, mm 
		INTO vFirstTicketFk, vHour, vMinute
		FROM tmp.ticket
		ORDER BY productionOrder DESC, HH, mm
		LIMIT 1;

call util.debugAdd('wargo',CONCAT('vFirstTicketFk ', vFirstTicketFk));
call util.debugAdd('wargo',CONCAT('vHour ', vHour));
call util.debugAdd('wargo',CONCAT('vMinute ', vMinute));

call util.debugAdd('wargo',CONCAT('tmp.ticket ', (SELECT COUNT(*) FROM tmp.ticket)));

	-- Hay que excluir aquellos que no tengan la misma hora de preparación
	DELETE 
		FROM tmp.ticket
		WHERE HH != vHour 
			OR mm != vMinute;

call util.debugAdd('wargo',CONCAT('tmp.ticket misma hora ', (SELECT COUNT(*) FROM tmp.ticket)));

	-- En el caso de pedidos de más volumen de un carro, la colección será monoticket. Pero si el primer pedido
	-- no es monoticket, excluimos a los de más de un carro
	IF (SELECT (t.shelveLiters > vc.trolleyM3 * 1000)
			FROM tmp.ticket t
				JOIN vn.volumeConfig vc 
			WHERE t.ticketFk = vFirstTicketFk) THEN

		DELETE 
			FROM tmp.ticket 
			WHERE ticketFk != vFirstTicketFk;
		
	ELSE
	
		DELETE t.*
			FROM tmp.ticket t 
				JOIN vn.volumeConfig vc 
			WHERE t.shelveLiters > vc.trolleyM3 * 1000;
	
	END IF;

call util.debugAdd('wargo',CONCAT('tmp.ticket volumen ', (SELECT COUNT(*) FROM tmp.ticket)));

	-- Elimina los tickets bloqueados que no se van a preparar
	DELETE tc.* 
		FROM vn.ticketCollection tc
		LEFT JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vCollectionFk
			AND t.ticketFk IS NULL;

call util.debugAdd('wargo',CONCAT('vn.ticketCollection ', 
	(SELECT COUNT(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk)));
	
	-- Construccion del tren
		
	-- Establece altura máxima por pedido, porque las plantas no se pueden recostar.
	UPDATE tmp.ticket t
		JOIN
			( SELECT MAX(i.size) maxHeigth, 
					tc.ticketFk
				FROM vn.ticketCollection tc
					JOIN vn.sale s ON s.ticketFk = tc.ticketFk
					JOIN vn.item i ON i.id = s.itemFk
					WHERE i.itemPackingTypeFk = 'V'
						AND tc.collectionFk = vCollectionFk
					GROUP BY tc.ticketFk) sub ON sub.ticketFk = t.ticketFk
		SET t.height = IFNULL(sub.maxHeigth,0);
		
	-- Vamos a generar una tabla con todas las posibilidades de asignacion de pedido
	DROP TEMPORARY TABLE IF EXISTS tmp.wagonsVolumetry;
	CREATE TEMPORARY TABLE tmp.wagonsVolumetry
		SELECT 	cv.`level` as shelve, 
				1 as wagon,
				cv.`lines`,
				cv.liters,
				cv.height
			FROM vn.collectionVolumetry cv
				WHERE cv.itemPackingTypeFk = IFNULL(vItemPackingTypeFk, 'H')
					AND cv.trainFk = vTrainFk;

	SET vWagonCounter = 1;

	WHILE vWagonCounter < vWagons DO

		SET vWagonCounter = vWagonCounter + 1;

		INSERT INTO tmp.wagonsVolumetry(shelve, wagon, `lines`, liters, height)
			SELECT 	cv.`level` as shelve, 
					vWagonCounter as wagon,
					cv.`lines`,
					cv.liters,
					cv.height
			FROM vn.collectionVolumetry cv
				WHERE cv.itemPackingTypeFk = IFNULL(vItemPackingTypeFk, 'H')
					AND cv.trainFk = vTrainFk;

	END WHILE;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketShelve;
	CREATE TEMPORARY TABLE tmp.ticketShelve
		SELECT ticketFk, shelve, wagon, linesDif, LitersDif, heightDif
			FROM (
				SELECT 	t.ticketFk,
						wv.shelve, 
						wv.wagon,
						t.productionOrder,
						CAST(wv.`lines` AS SIGNED) - t.`lines` as linesDif, 
						CAST(wv.liters AS SIGNED) - t.shelveLiters as litersDif, 
						CAST(wv.height AS SIGNED) - t.height as heightDif
						FROM tmp.wagonsVolumetry wv
							JOIN tmp.ticket t
				) sub
			WHERE linesDif >= 0
				AND litersDif >= 0
				AND heightDif >= 0
			ORDER BY productionOrder DESC, linesDif, LitersDif, heightDif  ;
	
	-- Insertamos una opcion virtual para carro completo. Todo ticket tiene que poder entrar en un carro completo....
	INSERT INTO tmp.ticketShelve(ticketFk, shelve, wagon, linesDif, LitersDif, heightDif)
		SELECT 	t.ticketFk, 0, wv.wagon, 999, 999,999
			FROM tmp.ticket t
			JOIN tmp.wagonsVolumetry wv
			GROUP BY t.ticketFk, wv.wagon;
	
	SET vWagonCounter = 0;

	WHILE vWagonCounter < vWagons DO

		SET vWagonCounter = vWagonCounter + 1;

		-- Asignamos la primera balda util al primer pedido
		IF vWagonCounter = 1 THEN

			SELECT shelve INTO vShelve
				FROM tmp.ticketShelve
				WHERE  ticketFk = vFirstTicketFk
					AND wagon = vWagonCounter
					ORDER BY heightDif, litersDif, linesDif
				LIMIT 1;
		
			ELSE

			SELECT shelve, ticketFk INTO vShelve, vFirstTicketFk
				FROM tmp.ticketShelve
					WHERE wagon = vWagonCounter
					ORDER BY heightDif, litersDif, linesDif 
				LIMIT 1;

		END IF;

		IF vShelve > 0 THEN
		
			UPDATE tmp.ticket 
				SET shelve = vShelve,
					wagon = vWagonCounter
				WHERE ticketFk = vFirstTicketFk;
				
			DELETE FROM tmp.ticketShelve
				WHERE ticketFk = vFirstTicketFk
				OR (shelve = vShelve AND wagon = vWagonCounter);
				
			WHILE (SELECT COUNT(*) FROM tmp.ticketShelve WHERE wagon = vWagonCounter) DO
			
				SELECT ticketFk, shelve
					INTO vTicket, vShelve
					FROM tmp.ticketShelve
						WHERE wagon = vWagonCounter
					LIMIT 1;
			
				UPDATE tmp.ticket 
					SET shelve = vShelve,
						wagon = vWagonCounter
					WHERE ticketFk = vTicket;
				
				DELETE FROM tmp.ticketShelve
					WHERE ticketFk = vTicket
						OR (shelve = vShelve AND wagon = vWagonCounter);
						
			END WHILE;

		ELSE
		
			UPDATE tmp.ticket 
				SET shelve = 1, wagon = vWagonCounter
				WHERE ticketFk = vFirstTicketFk;

			DELETE FROM tmp.ticketShelve
					WHERE ticketFk = vFirstTicketFk
						AND wagon != vWagonCounter;
				
		END IF;

	END WHILE;

     -- Eliminamos los que se han quedado sin balda
	DELETE FROM tmp.ticket WHERE shelve = 0;

	-- Elimina los tickets bloqueados que no se van a preparar
	DELETE tc.* 
		FROM vn.ticketCollection tc
		LEFT JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		WHERE tc.collectionFk = vCollectionFk
			AND t.ticketFk IS NULL;

call util.debugAdd('wargo',CONCAT('vn.ticketCollection bloqueados  ',
	(SELECT COUNT(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk)));

	-- Elimina los tickets que ya estan en otra coleccion
	DELETE tc.* 
		FROM vn.ticketCollection tc
		JOIN vn.ticketCollection tc2 ON tc2.ticketFk = tc.ticketFk 
		WHERE tc.collectionFk = vCollectionFk
			AND tc2.collectionFk != vCollectionFk;

call util.debugAdd('wargo',CONCAT('vn.ticketCollection otra coleccion  ', 
	(SELECT COUNT(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk)));

	-- Actualiza el estado de la colección
	UPDATE vn.collection c
		JOIN vn.state st ON st.code = 'ON_PREPARATION'
		SET c.stateFk = st.id
		WHERE c.id = vCollectionFk;  

	-- Asigna las bandejas
	UPDATE vn.ticketCollection tc
		JOIN tmp.ticket t ON t.ticketFk = tc.ticketFk
		SET tc.level = t.shelve, 
			tc.wagon = t.wagon,
			tc.itemCount = t.`lines`,
			tc.liters = t.shelveLiters;

	-- Actualiza el estado de los tickets
	INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
		SELECT vStateFk, ticketFk, vUserFk
			FROM vn.ticketCollection tc 
			WHERE tc.collectionFk = vCollectionFk;
	
	-- Aviso para la preparacion previa
	INSERT INTO vn.ticketDown(ticketFk, collectionFk)
		SELECT tc.ticketFk, tc.collectionFk
			FROM vn.ticketCollection tc
			WHERE tc.collectionFk = vCollectionFk;
			
	SELECT * FROM util.debug 
		where variable = 'wargo' 
			and created >= vNow
		order by created;

	IF (SELECT count(*) FROM vn.ticketCollection WHERE collectionFk = vCollectionFk) THEN 

		CALL vn.salesMerge_byCollection(vCollectionFk);

		UPDATE vn.collection c
			JOIN (SELECT count(*) saleTotalCount , 
						sum(s.isPicked != 0) salePickedCount
					FROM vn.ticketCollection tc
						JOIN vn.sale s ON s.ticketFk = tc.ticketFk
						WHERE tc.collectionFk = vCollectionFk
							AND s.quantity > 0
				) sub 
			SET 	c.saleTotalCount = sub.saleTotalCount, 
				c.salePickedCount = sub.salePickedCount
			WHERE c.id = vCollectionFk;
		
		SELECT vCollectionFk;  

	ELSE
	
		DELETE FROM vn.collection WHERE id = vCollectionFk;

		CALL util.throw('No se ha obtenido colección');
				
	END IF;

	DROP TEMPORARY TABLE
		tmp.ticketToSplit,
		tmp.ticketShelveLiters,
		tmp.ticket,
		tmp.wagonsVolumetry,
		tmp.ticketShelve,
		tmp.productionBuffer;
	
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_printSticker` */;
/*!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_printSticker`(vSelf INT)
BEGIN
/**
 * Imprime una etiqueta amarilla a partir de una colección 
 *
 * @param vSelf colección 
 * @param vPrinterFk id de la impresora 
 */
	DECLARE vReportFk INT;
	DECLARE vPrinterFk INT;
	
	SELECT s.reportFk, w.labelerFk INTO vReportFk, vPrinterFk
		FROM worker w 
			LEFT JOIN sector s ON s.id= w.sectorFk
		WHERE w.id = account.myUser_getId() ;

	IF vReportFk AND vPrinterFk THEN
		INSERT INTO ticketTrolley(ticket, labelCount)
			SELECT ticketFk, 1
				FROM ticketCollection 
				WHERE collectionFk = vSelf
				ON DUPLICATE KEY UPDATE labelCount = labelCount + 1;

		INSERT INTO printQueue(priorityFk, reportFk, workerFk,printerFk)		
			SELECT qp.id, vReportFk, account.myUser_getId(), vPrinterFk
				FROM queuePriority qp
				WHERE qp.`code`= 'high';
		
		INSERT INTO printQueueArgs (printQueueFk, `name`, `value` )
			SELECT LAST_INSERT_ID(), 'param', vSelf;		
	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 `collection_setParking` */;
/*!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_setParking`(IN `vCollectionFk` VARCHAR(8), IN `vParkingFk` INT)
proc: BEGIN
/**
 * Aparca una colección en un parking.
 *
 * @param vCollectionFk Id de la colección
 * @param vParkingFk Id del parking
 */
	REPLACE vn.ticketParking(ticketFk, parkingFk)
		SELECT tc.ticketFk, vParkingFk
			FROM vn.ticketCollection tc
			WHERE tc.collectionFk = vCollectionFk;
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_updateSale` */;
/*!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_updateSale`(
	vSaleFk INT,
    vOriginalQuantity INT,
    vWorkerFk INT,
    vStateFk INT,
    vTicketFk INT)
BEGIN
	
    DECLARE vNumPrepared INT;
	DECLARE vNumTotal INT;

	REPLACE INTO vn.saleTracking(saleFk,isChecked, originalQuantity, workerFk, actionFk,stateFk) 
		VALUES(vSaleFk,1,vOriginalQuantity,vWorkerFk,vStateFk,vStateFk);
        
	UPDATE vn.sale SET isPicked = 1 
    WHERE id = vSaleFk;
        
	SELECT COUNT(s.id) INTO vNumPrepared
    FROM vn.sale s
    WHERE s.ticketFk = vTicketFk AND s.isPicked = 1;
    
    SELECT COUNT(s.id) INTO vNumTotal
    FROM vn.sale s
    WHERE s.ticketFk = vTicketFk;
    
    IF vNumPrepared = vNumTotal THEN
    
		INSERT INTO vncontrol.inter
		SET state_id = vStateFk, Id_Ticket = vTicketFk, Id_Trabajador = vWorkerFk;
        
        CALL vn.collection_update(vTicketFk);
        
	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 `company_getFiscaldata` */;
/*!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 `company_getFiscaldata`(workerFk INT)
BEGIN
	
DECLARE vCompanyFk INT;
	
	SELECT IFNULL(uc.companyFk, rc.defaultCompanyFk) 
		INTO vCompanyFk
	FROM vn.routeConfig rc
		LEFT JOIN userConfig uc ON uc.userFk = workerFk;
	
	
	SELECT
	 s.name  AS  name ,
	 s.NIF  AS  nif ,
	 s.street  AS  street ,
	 s.city  AS  city ,
	 s.postCode  AS  postCode 
	
	 FROM vn.company  c 
		JOIN  vn.worker w ON w.id  =  c.workerManagerFk
		JOIN  vn.supplier  s  ON s.id = c.id	
   	 WHERE  c.id = vCompanyFk;
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 `conveyorExpedition_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 `conveyorExpedition_Add`(vStarted DATETIME, vEnded DATETIME)
BEGIN

	
	DECLARE startingMinute INT;

	TRUNCATE vn.conveyorExpedition;

	INSERT INTO vn.conveyorExpedition(	expeditionFk,
										created,
                                        length,
                                        width,
                                        height,
                                        routeFk,
                                        productionMinute,
                                        truck,
                                        criterion,
                                        conveyorBuildingClassFk)
		SELECT 	e.id,
				e.created,
                10 * p.depth as depth, 
                10 * p.width as width,
                10 * p.height as height,
                IFNULL(t.routeFk,am.agencyFk) routeFk,
                hour(e.created) * 60 + minute(e.created),
                IFNULL(et.description , a.name),
                IFNULL(t.routeFk,am.agencyFk) criterion,
                IFNULL(p.conveyorBuildingClassFk , pc.defaultConveyorBuildingClass)              
		FROM vn.expedition e
			JOIN vn.ticket t ON t.id = e.ticketFk
            JOIN vn.packaging p ON p.id = e.packagingFk
            LEFT JOIN vn.zone z ON z.id = t.zoneFk
            LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
            LEFT JOIN vn.agency a ON a.id = am.agencyFk 
            LEFT JOIN vn.routesMonitor rm ON rm.routeFk = t.routeFk 
            LEFT JOIN vn.expeditionTruck et ON et.id = rm.expeditionTruckFk 
            JOIN vn.packagingConfig pc 
		WHERE t.warehouseFk IN (60,1,44)
            AND e.created BETWEEN vStarted AND vEnded
            AND p.height < 140
            AND p.width < 60
            AND p.depth < 125;

        SELECT MIN(productionMinute) INTO startingMinute
        	FROM vn.conveyorExpedition ce ;
        
        UPDATE vn.conveyorExpedition 
        	SET productionMinute = productionMinute - startingMinute;

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 `copyComponentsFromSaleList` */;
/*!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 `copyComponentsFromSaleList`(vTargetTicketFk INT)
BEGIN

/*   Copy sales and components to the target ticket
*
*	¡¡¡¡    Requires tmp.saleList(saleFk, itemFk, quantity, concept, price, discount, orden)  !!!!!
*
*   param VTargetTicketFk id del ticket a rellenar
*/

	INSERT INTO vn.sale(ticketFk, itemFk, quantity,concept,price,discount)
		SELECT vTargetTicketFk, itemFk, quantity,concept,price,discount
			FROM tmp.saleList
			ORDER BY orden;

	SET @order = 0;

	DROP TEMPORARY TABLE IF EXISTS tmp.newSaleList;

	CREATE TEMPORARY TABLE tmp.newSaleList
		SELECT id as saleFk, @order := @order + 1 as orden
			FROM vn.sale
			WHERE ticketFk = vTargetTicketFk
			ORDER BY saleFk;

	INSERT INTO vn.saleComponent(saleFk,componentFk,value)
		SELECT ns.saleFk, sc.componentFk, sc.value
			FROM vn.saleComponent sc
				JOIN tmp.saleList s ON s.saleFk = sc.saleFk
				JOIN tmp.newSaleList ns ON ns.orden = s.orden;

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 `createPedidoInterno` */;
/*!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 `createPedidoInterno`(vItemFk INT,vQuantity INT)
BEGIN

	
	UPDATE vn.item SET upToDown = vQuantity WHERE id = vItemFk;

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 `crypt` */;
/*!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 `crypt`(vText VARCHAR(255), vKey VARCHAR(255), OUT vResult VARCHAR(255) )
BEGIN

	DECLARE vEncryptedText VARCHAR(255) DEFAULT '';
    
	DECLARE vKeyLength INT;
    DECLARE vKeyPosition INT DEFAULT 1;
    DECLARE vKeyChar VARCHAR(1);
    
    DECLARE vTextLength INT;
    DECLARE vTextPosition INT DEFAULT 1;
    DECLARE vTextChar VARCHAR(1);
    
    DECLARE vEncryptedChar VARCHAR(1);
    DECLARE vEncryptedCharPosition INT;
    
    DECLARE vChain VARCHAR(255) DEFAULT '#$.-_0123456789abcdefghijklmnopqrstuvwxyz';
    DECLARE vChainTextPosition INT;
    DECLARE vChainKeyPosition INT;
    DECLARE vChainLength INT;
    
    DECLARE vInvalidadChars VARCHAR(255) DEFAULT '';
    
    SET vTextLength = LENGTH(vText);	
    SET vKeyLength = LENGTH(vKey);
    SET vChainLength = LENGTH(vChain);
	
	WHILE vTextPosition <= vTextLength DO
    
		SET vTextChar = MID(vText,vTextPosition,1);
        SET vKeyChar =  MID(vKey,vKeyPosition,1);
        
        SET vChainTextPosition = LOCATE(vTextChar, vChain);
        SET vInvalidadChars = IF(vChainTextPosition, vInvalidadChars, CONCAT(vInvalidadChars,vTextChar));
        SET vChainKeyPosition = LOCATE(vKeyChar, vChain);
        SET vEncryptedCharPosition = vChainTextPosition + vChainKeyPosition;
        
        IF vEncryptedCharPosition > vChainLength THEN
        
			SET vEncryptedCharPosition = vEncryptedCharPosition - vChainLength;
            
		END IF;
        
        SET vEncryptedChar = MID(vChain, vEncryptedCharPosition,1);
        
        SET vEncryptedText = CONCAT(vEncryptedText, vEncryptedChar);
        
		SET vKeyPosition = IF(vKeyPosition = vKeyLength, 1,vKeyPosition + 1);
		SET vTextPosition = vTextPosition + 1;
    
    END WHILE;

	SET vResult = IF(LENGTH(vInvalidadChars), CONCAT('Caracteres no válidos: ',vInvalidadChars),vEncryptedText);

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 `cryptOff` */;
/*!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 `cryptOff`(vText VARCHAR(255), vKey VARCHAR(255), OUT vResult VARCHAR(255))
BEGIN

	DECLARE vUncryptedText VARCHAR(255) DEFAULT '';
    
	DECLARE vKeyLength INT;
    DECLARE vKeyPosition INT DEFAULT 1;
    DECLARE vKeyChar VARCHAR(1);
    
    DECLARE vTextLength INT;
    DECLARE vTextPosition INT DEFAULT 1;
    DECLARE vTextChar VARCHAR(1);
    
    DECLARE vUncryptedChar VARCHAR(1);
    DECLARE vUncryptedCharPosition INT;
    
    DECLARE vChain VARCHAR(255) DEFAULT '#$.-_0123456789abcdefghijklmnopqrstuvwxyz';
    DECLARE vChainTextPosition INT;
    DECLARE vChainKeyPosition INT;
    DECLARE vChainLength INT;
    
    SET vTextLength = LENGTH(vText);	
    SET vKeyLength = LENGTH(vKey);
    SET vChainLength = LENGTH(vChain);
	
	WHILE vTextPosition <= vTextLength DO
    
		SET vTextChar = MID(vText,vTextPosition,1);
        SET vKeyChar =  MID(vKey,vKeyPosition,1);
        
        SET vChainTextPosition = LOCATE(vTextChar, vChain);
        SET vChainKeyPosition = LOCATE(vKeyChar, vChain);
        SET vUncryptedCharPosition = vChainTextPosition - vChainKeyPosition;
        
        IF vUncryptedCharPosition < 1 THEN
        
			SET vUncryptedCharPosition = vUncryptedCharPosition + vChainLength;
            
		END IF;
        
        SET vUncryptedChar = MID(vChain, vUncryptedCharPosition,1);
        
        SET vUncryptedText = CONCAT(vUncryptedText, vUncryptedChar);
        
		SET vKeyPosition = IF(vKeyPosition = vKeyLength, 1,vKeyPosition + 1);
		SET vTextPosition = vTextPosition + 1;
    
    END WHILE;

	SET vResult = vUncryptedText;

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 `department_calcTree` */;
/*!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 `department_calcTree`()
BEGIN
/**
 * Calculates the #path, #lft, #rgt, #sons and #depth columns of
 * the #department table. To build the tree, it uses the #parentFk
 * column.
 */
	DECLARE vIndex INT DEFAULT 0;
	DECLARE vSons INT;

	DROP TEMPORARY TABLE IF EXISTS tNestedTree;
	CREATE TEMPORARY TABLE tNestedTree
		SELECT id, path, lft, rgt, depth, sons
			FROM department LIMIT 0;

	SET max_sp_recursion_depth = 5;
	CALL department_calcTreeRec(NULL, '/', 0, vIndex, vSons);
	SET max_sp_recursion_depth = 0;

	UPDATE department z
		JOIN tNestedTree t ON t.id = z.id
		SET z.path = t.path,
			z.lft = t.lft,
			z.rgt = t.rgt,
			z.depth = t.depth,
			z.sons = t.sons;

	DROP TEMPORARY TABLE tNestedTree;
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 `department_calcTreeRec` */;
/*!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 `department_calcTreeRec`(
	vSelf INT,
    vPath VARCHAR(255),
    vDepth INT,
    INOUT vIndex INT,
    OUT vSons INT
)
BEGIN
/**
 * Calculates and sets the #path, #lft, #rgt, #sons and #depth
 * columns for all children of the passed node. Once calculated
 * the last node rgt index and the number of sons are returned.
 * To update it's children, this procedure calls itself recursively
 * for each one.
 *
 * @vSelf The node identifier
 * @vPath The initial path
 * @vDepth The initial depth
 * @vIndex The initial lft index
 * @vSons The number of direct sons
 */
    DECLARE vChildFk INT;
    DECLARE vLft INT;
    DECLARE vMySons INT;
	DECLARE vDone BOOL;
	DECLARE vChildren CURSOR FOR
		SELECT id FROM department
			WHERE (vSelf IS NULL AND parentFk IS NULL)
				OR (vSelf IS NOT NULL AND parentFk = vSelf);

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
    
    SET vSons = 0;

	OPEN vChildren;
	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vChildren INTO vChildFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;
        
        SET vIndex = vIndex + 1;
        SET vLft = vIndex;
        SET vSons = vSons + 1;
    
		CALL department_calcTreeRec(
			vChildFk,
            CONCAT(vPath, vChildFk, '/'),
            vDepth + 1,
            vIndex,
            vMySons
		);

        SET vIndex = vIndex + 1;

		INSERT INTO tNestedTree
			SET id = vChildFk,
				path = vPath,
				lft = vLft,
				rgt = vIndex,
				depth = vDepth,
				sons = vMySons;
	END LOOP;
	CLOSE vChildren;
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 `department_doCalc` */;
/*!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 `department_doCalc`()
proc: BEGIN
/**
 * Recalculates the department tree.
 */
    DECLARE vIsChanged BOOL;

	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK('vn.department_doCalc');
        RESIGNAL;
	END;

	IF !GET_LOCK('vn.department_doCalc', 0) THEN
		LEAVE proc;
	END IF;

	SELECT isChanged INTO vIsChanged
		FROM department_recalc;
        
	IF vIsChanged THEN
		UPDATE department_recalc SET isChanged = FALSE;
        CALL vn.department_calcTree;
	END IF;

	DO RELEASE_LOCK('vn.department_doCalc');
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 `department_getHasMistake` */;
/*!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 `department_getHasMistake`()
BEGIN
	
/**
 * Obtiene los sectores a los cuales les ponemos errores
 *
 */
	
	SELECT id, name
		FROM department
	WHERE hasToMistake <> FALSE;
	
	
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 `department_getLeaves` */;
/*!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 `department_getLeaves`(
    vParentFk INT,
    vSearch VARCHAR(255)
)
BEGIN
	DECLARE vIsNumber BOOL;
	DECLARE vIsSearch BOOL DEFAULT vSearch IS NOT NULL AND vSearch != '';

	DROP TEMPORARY TABLE IF EXISTS tNodes;
	CREATE TEMPORARY TABLE tNodes
		(UNIQUE (id))
		ENGINE = MEMORY
		SELECT id FROM department LIMIT 0;

	IF vIsSearch THEN
		SET vIsNumber = vSearch REGEXP '^[0-9]+$';

		INSERT INTO tNodes
			SELECT id FROM department
				WHERE (vIsNumber AND `name` = vSearch)
					OR (!vIsNumber AND `name` LIKE CONCAT('%', vSearch, '%'))
				LIMIT 1000;
	END IF;

	IF vParentFk IS NULL THEN
		DROP TEMPORARY TABLE IF EXISTS tChilds;
		CREATE TEMPORARY TABLE tChilds
			ENGINE = MEMORY
			SELECT id FROM tNodes;

		DROP TEMPORARY TABLE IF EXISTS tParents;
		CREATE TEMPORARY TABLE tParents
			ENGINE = MEMORY
			SELECT id FROM department LIMIT 0;

		myLoop: LOOP
			DELETE FROM tParents;
			INSERT INTO tParents
				SELECT parentFk id
					FROM department g
						JOIN tChilds c ON c.id = g.id
					WHERE g.parentFk IS NOT NULL;
			
			INSERT IGNORE INTO tNodes
				SELECT id FROM tParents;
			
			IF ROW_COUNT() = 0 THEN
				LEAVE myLoop;
			END IF;
			
			DELETE FROM tChilds;
			INSERT INTO tChilds
				SELECT id FROM tParents;
		END LOOP;
		
		DROP TEMPORARY TABLE
			tChilds,
			tParents;
	END IF;

	IF !vIsSearch THEN
		INSERT IGNORE INTO tNodes
			SELECT id FROM department
				WHERE parentFk <=> vParentFk;
	END IF;

	SELECT d.id,
			d.`name`,
			d.parentFk,
			d.sons
		FROM department d
			JOIN tNodes n ON n.id = d.id
		ORDER BY depth, `name`;

	DROP TEMPORARY TABLE tNodes;
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 `deviceLog_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 `deviceLog_add`(vWorkerFk INT, vAppName VARCHAR(45), vAppVersion VARCHAR(45), vAndroid_id VARCHAR(100))
BEGIN
/*
 * Inserta registro en tabla devicelog el log del usuario conectado
 * @param vAppName es el nombre de la app
 * @param vAppVersion es la versión de la app 
 * @param vAndroid_id es el android_id del dispositivo que se ha logueado 
 */
	
	INSERT INTO deviceLog (userFK, nameApp, versionApp, android_id)
		VALUES(vWorkerFk, vAppName, vAppVersion, vAndroid_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 `deviceProductionUser_exists` */;
/*!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 `deviceProductionUser_exists`(vUserFk INT)
BEGIN
	
/*	SELECT COUNT(*) AS UserExists
		FROM vn.deviceProductionUser dpu 
			WHERE dpu.userFk = vUserFk;*/
	SELECT TRUE;
	
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 `deviceProductionUser_getWorker` */;
/*!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 `deviceProductionUser_getWorker`(vAndroid_id VARCHAR(50))
BEGIN
/**
 * Selecciona si hay registrado un device con un android_id 
 * 
 * @param vAndroid_id el número android_id del dispositivo 
 * 
 */
		SELECT 103;
/*	SELECT account.user_getNameFromId(dpu.userFk)
	FROM deviceProductionUser dpu 
		JOIN deviceProduction dp ON dpu.deviceProductionFk = dp.id 	
	WHERE dp.android_id = vAndroid_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 `deviceProduction_getnameDevice` */;
/*!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 `deviceProduction_getnameDevice`(vAndroid_id VARCHAR(50))
BEGIN
/**
 * Selecciona el id del dispositivo que corresponde al vAndroid_id
 * 
 * @param vAndroid_id el número android_id del dispositivo 
 * 
 */

	SELECT dp.id 
		FROM deviceProduction dp
		WHERE dp.android_id = vAndroid_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 `device_checkLogin` */;
/*!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 `device_checkLogin`(vUserFk INT, vAndroidID VARCHAR(50))
BEGIN
	
/*
 * Comprueba si está registrado el dispositivo mediante su androidId
 * 
 * @param vUSerFk el id del user
 * @param vAndroidID es el identificador android_id del dispositivo
 */
	DECLARE vIsAuthorized BOOL DEFAULT TRUE;
	DECLARE vIsDepartment BOOL;
	DECLARE vIsAllUsersAllowed BOOL;
	DECLARE vMessage VARCHAR(200);

	SELECT dpc.isAllUsersallowed INTO vIsAllUsersAllowed
	FROM vn.deviceProductionConfig dpc;

	IF NOT vIsAllUsersAllowed THEN	
	
		SELECT COUNT(*) INTO vIsDepartment
			FROM vn.workerDepartment dp 
				JOIN department d ON d.id = dp.departmentFk
			WHERE dp.workerFk = vUserFk AND d.hasToCheckLogin;
	
		IF vIsDepartment THEN
			SELECT COUNT(*) INTO vIsAuthorized
				FROM vn.deviceProductionUser dpu 
					JOIN vn.deviceProduction dp ON dp.id = dpu.deviceProductionFk
				WHERE dpu.userFk = vUserFk
					AND dp.android_id = vAndroidID;
				
			IF NOT vIsAuthorized THEN
				SET vMessage = 'Usuario no autorizado';
			END IF;
		END IF;

	END IF;

	SELECT vIsAuthorized,vMessage;

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 `duaEntryValueUpdate` */;
/*!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 `duaEntryValueUpdate`(vDuaFk INT)
BEGIN

	UPDATE duaEntry de
		JOIN 
			( SELECT b.entryFk, sum(b.quantity * b.buyingValue) as total
					FROM buy b
						JOIN duaEntry de ON de.entryFk = b.entryFk
                        WHERE duaFk = vDuaFk
					GROUP BY b.entryFk
        	 ) sub ON sub.entryFk = de.entryFk
             
        LEFT JOIN 
			(SELECT e.id, sum(iit.taxableBase) as euros
				FROM entry e
					JOIN invoiceInTax iit ON iit.invoiceInFk = e.invoiceInFk
                    JOIN duaEntry de ON de.entryFk = e.id
                    WHERE de.duaFk = vDuaFk
				GROUP BY e.id
			) sub2 ON sub2.id = de.entryFk
            
		SET de.value = sub.total,
			de.euroValue = sub2.euros
        WHERE duaFk = vDuaFk;
    
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 `duaInvoiceInBooking` */;
/*!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 `duaInvoiceInBooking`(vDuaFk INT)
BEGIN

	DECLARE done BOOL DEFAULT FALSE;
	DECLARE vInvoiceFk INT;
    DECLARE vASIEN BIGINT DEFAULT 0;
    DECLARE vCounter INT DEFAULT 0;
    
	DECLARE rs CURSOR FOR
		SELECT e.invoiceInFk
			FROM entry e
				JOIN duaEntry de ON de.entryFk = e.id
                JOIN invoiceIn ii ON ii.id = e.invoiceInFk
            WHERE de.duaFk = vDuaFk
				AND de.customsValue
				AND ii.isBooked = FALSE;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;
     
	UPDATE invoiceIn ii
			JOIN entry e ON e.invoiceInFk = ii.id
            JOIN duaEntry de ON de.entryFk = e.id
            JOIN dua d ON d.id = de.duaFk
		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),
            e.isConfirmed = TRUE
		WHERE d.id = vDuaFk;
    
    SELECT IFNULL(ASIEN,0) INTO vASIEN
		FROM dua
			WHERE id = vDuaFk;
    
	FETCH rs INTO vInvoiceFk;
     
	WHILE NOT done DO

		CALL invoiceInBookingMain(vInvoiceFk);
        
        IF vCounter > 0 OR vASIEN > 0 THEN
        
			UPDATE vn2008.XDiario x
				JOIN vn.ledgerConfig lc ON lc.lastBookEntry = x.ASIEN
                SET x.ASIEN = vASIEN;
        
        ELSE
        
			SELECT lastBookEntry INTO vASIEN FROM vn.ledgerConfig;
            
		END IF;
			     
        SET vCounter = vCounter + 1;
        
		FETCH rs INTO vInvoiceFk;

	END WHILE;
    
    CLOSE rs;
    
    UPDATE dua 
        SET ASIEN = vASIEN
        WHERE id = vDuaFk;
        
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 `duaParcialMake` */;
/*!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 `duaParcialMake`(vDuaFk INT)
BEGIN

	DECLARE vNewDuaFk INT;

	INSERT INTO dua(awbFk,companyFk)
		SELECT awbFk,companyFk
			FROM dua
            WHERE id = vDuaFk;
	
	SELECT LAST_INSERT_ID() INTO vNewDuaFk;
    
    INSERT INTO duaEntry(duaFk, entryFk, value, customsValue)
		SELECT vNewDuaFk, entryFk, value, value - customsValue
			FROM duaEntry
            WHERE duaFk = vDuaFk
            AND value != customsValue;

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 `duaTaxBooking` */;
/*!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 `duaTaxBooking`(vDuaFk INT)
BEGIN
	DECLARE vBookNumber INT;
    DECLARE vBookDated DATE;
    DECLARE vDiff DECIMAL(10,2);
    DECLARE vApunte BIGINT;
      
	SELECT ASIEN, IFNULL(bookEntried, CURDATE()) INTO vBookNumber, vBookDated
		FROM dua 
		WHERE id = vDuaFk;
        
    IF vBookNumber IS NULL OR NOT vBookNumber THEN
		CALL ledger_next(vBookNumber);
    END IF;
    
	-- Apunte de la aduana

	INSERT INTO XDiario(
		ASIEN,
		FECHA,
		SUBCTA,
		CONCEPTO, 
		EUROHABER,
        SERIE,
		empresa_id,
        CLAVE,
        FACTURA)

	SELECT 
			vBookNumber,
			d.bookEntried,
			'4700000999',
			CONCAT('DUA ',d.`code`),
			sum(dt.base * dt.rate / 100) EUROHABER,
            'R',
			d.companyFk,
            vDuaFk,
            vDuaFk
		FROM duaTax dt
			JOIN dua d ON d.id = dt.duaFk
            WHERE dt.duaFk = vDuaFk;
            
        -- Apuntes por tipo de IVA y proveedor
        
		INSERT INTO XDiario(
		ASIEN,
		FECHA,
		SUBCTA,
		CONTRA, 
		EURODEBE,
		BASEEURO,
		CONCEPTO, 
		FACTURA, 
		IVA,
		AUXILIAR, 
		SERIE,
		FECHA_EX,
		FECHA_OP,
		FACTURAEX,
		NFACTICK,
		L340,
		LDIFADUAN,
		TIPOCLAVE,
		TIPOEXENCI,
		TIPONOSUJE,
		TIPOFACT,
		TIPORECTIF,
		TERIDNIF,
		TERNIF,
		TERNOM,
		empresa_id,
		FECREGCON
	)

	SELECT 
			vBookNumber ASIEN,
			vBookDated FECHA,
			tr.account SUBCTA,
			'4330002067' CONTRA,
			sum(dt.tax) EURODEBE,
			sum(dt.base) BASEEURO, 
			CONCAT('DUA nº',d.code) CONCEPTO,
			d.id FACTURA,
			dt.rate IVA,
			'*' AUXILIAR, 
			'D' SERIE,
			d.issued FECHA_EX,
			d.operated FECHA_OP,
			d.code FACTURAEX,
			1 NFACTICK,
			1 L340,
			TRUE LDIFADUAN,
			1 TIPOCLAVE,
			1 TIPOEXENCI,
			1 TIPONOSUJE,
			5 TIPOFACT,
			1 TIPORECTIF,
			IF(s.countryFk IN (30, 1), 1, 4) TERIDNIF,
			s.nif TERNIF,
			s.name TERNOM,
			d.companyFk,
			d.booked FECREGCON
		FROM duaTax dt
			JOIN dua d ON dt.duaFk = d.id
            JOIN (SELECT account, rate
					FROM
						(SELECT rate, account
							FROM invoiceInTaxBookingAccount ta
                            WHERE ta.effectived <= vBookDated
                            AND taxAreaFk = 'WORLD'
                            ORDER BY ta.effectived DESC
							LIMIT 10000000000000000000 
						) tba
					GROUP BY rate
                  ) tr ON tr.rate = dt.rate 
			JOIN supplier s ON s.id = d.companyFk
		WHERE d.id = vDuaFk
        GROUP BY dt.rate;

	SELECT SUM(EURODEBE) -SUM(EUROHABER), MAX(id) INTO vDiff, vApunte
		FROM XDiario
		WHERE ASIEN = vBookNumber;
     
	UPDATE XDiario
		SET BASEEURO = 100 * (EURODEBE - vDiff) / IVA,
			EURODEBE = EURODEBE - vDiff			
		WHERE id = vApunte;
    
    UPDATE dua
		SET ASIEN = vBookNumber
        WHERE id = vDuaFk;
            
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 `duaTax_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 `duaTax_doRecalc`(vDuaFk INT)
BEGIN
/**
 * Borra los valores de duaTax y los vuelve a crear en base a la tabla duaEntry
 *  
 * @param vDuaFk Id del dua a recalcular
**/
    DELETE FROM duaTax
		WHERE duaFk = vDuaFk;
        
    INSERT INTO duaTax(duaFk, supplierFk, taxClassFk, base)    
		SELECT 	vDuaFk, supplierFk, taxClassFk, sum(sub.Base) as Base
			FROM intrastat ist
				JOIN
				(SELECT
						e.supplierFk, 
						i.intrastatFk,
						CAST(sum(b.quantity * b.buyingValue *  de.customsValue / de.value)  * di.amount/ tei.Base AS DECIMAL(10,2)) as Base
					FROM buy b 
						JOIN item i ON i.id = b.itemFk
						JOIN entry e ON e.id = b.entryFk
						JOIN duaEntry de ON de.entryFk = e.id
						JOIN
							(
								SELECT 	i.intrastatFk,
										CAST(sum(b.quantity * b.buyingValue *  de.customsValue / de.value) 	AS DECIMAL(10,2)) as Base
									FROM buy b 
										JOIN item i ON i.id = b.itemFk
										JOIN entry e ON e.id = b.entryFk
										JOIN duaEntry de ON de.entryFk = e.id
									WHERE de.duaFk = vDuaFk
									GROUP BY i.intrastatFk
							
							) tei ON tei.intrastatFk = i.intrastatFk
						JOIN 
							(
								SELECT intrastatFk, sum(amount) as amount
									FROM duaIntrastat
                                    WHERE duaFk = vDuaFk
                                    GROUP BY intrastatFK
                            ) di ON di.intrastatFk = i.intrastatFk
					WHERE de.duaFk = vDuaFk
					GROUP BY e.supplierFk, i.intrastatFk
					HAVING Base 
				) sub ON ist.id = sub.intrastatFk
				GROUP BY ist.taxClassFk, sub.supplierFk;
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 `ediTables_Update` */;
/*!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 `ediTables_Update`()
BEGIN
	
	INSERT IGNORE INTO vn.genus(name) 
		SELECT latin_genus_name
			FROM edi.genus ;

	INSERT IGNORE INTO vn.specie(name) 
		SELECT LCASE(latin_species_name) 
			FROM edi.specie ;
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 `ektEntryAssign_setEntry` */;
/*!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 `ektEntryAssign_setEntry`()
BEGIN

DECLARE done INT DEFAULT FALSE;
DECLARE vEntryFk INT;
DECLARE vTravelFk INT;
DECLARE vId INT;
DECLARE vLanded DATE DEFAULT CURDATE();

DECLARE cur1 CURSOR FOR SELECT id FROM vn.ektEntryAssign;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	IF HOUR(NOW()) > 12  THEN

		SET vLanded = TIMESTAMPADD(DAY,1,vLanded);

	END IF;

OPEN cur1;

 read_loop: LOOP
 
	SET done = FALSE;
    SET vEntryFk = 0;
    
    FETCH cur1 INTO vId;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
    
    SELECT IFNULL(e.id,0) INTO vEntryFk
		FROM vn.entry e
			JOIN vn.travel tr ON tr.id = e.travelFk
            JOIN vn.ektEntryAssign ea ON ea.warehouseOutFk = tr.warehouseOutFk 
										AND ea.warehouseInFk = tr.warehouseInFk
                                        AND ea.agencyModeFk = tr.agencyModeFk
                                        AND ea.supplierFk = e.supplierFk
			WHERE ea.id = vId
				AND tr.landed = vLanded
			LIMIT 1;
    
    IF NOT vEntryFk THEN
    
		SELECT IFNULL(e.id,0) INTO vEntryFk
		FROM vn.entry e
			JOIN vn.travel tr ON tr.id = e.travelFk
            JOIN vn.ektEntryAssign ea ON ea.warehouseOutFk = tr.warehouseOutFk 
										AND ea.warehouseInFk = tr.warehouseInFk
                                        AND ea.agencyModeFk = tr.agencyModeFk
			WHERE ea.id = vId
				AND tr.landed = vLanded
                AND ea.supplierFk IS NULL
			LIMIT 1;
    
    END IF;
    
    IF NOT vEntryFk THEN
    
		SET vTravelFk = 0;
    
		SELECT IFNULL(MAX(tr.id),0) INTO vTravelFk 
			FROM vn.travel tr
				JOIN vn.ektEntryAssign ea ON ea.warehouseOutFk = tr.warehouseOutFk 
										AND ea.warehouseInFk = tr.warehouseInFk
                                        AND ea.agencyModeFk = tr.agencyModeFk
				WHERE ea.id = vId
					AND tr.landed = vLanded;
                
		IF NOT vTravelFk THEN
        
			INSERT INTO vn.travel(landed, shipped, warehouseInFk, warehouseOutFk, agencyModeFk)
				SELECT vLanded, vLanded, warehouseInFk, warehouseOutFk, agencyModeFk
					FROM vn.ektEntryAssign 
					WHERE id = vId;
					
			SELECT MAX(tr.id) INTO vTravelFk 
				FROM vn.travel tr
					JOIN vn.ektEntryAssign ea ON ea.warehouseOutFk = tr.warehouseOutFk 
										AND ea.warehouseInFk = tr.warehouseInFk
                                        AND ea.agencyModeFk = tr.agencyFk
				WHERE ea.id = vId
					AND tr.landed = vLanded;
                
		END IF;
        
        INSERT INTO vn.entry(travelFk, supplierFk,  companyFk, currencyFk)
				SELECT vTravelFk, IFNULL(ea.supplierFk,s.id), c.id, cu.id
					FROM vn.supplier s
						JOIN vn.company c ON c.code = 'VNL'
						JOIN vn.currency cu ON cu.code = 'EUR'
                        JOIN vn.ektEntryAssign ea ON ea.id = vId
					WHERE s.name = 'KONINKLIJE COOPERATIEVE BLOEMENVEILING FLORAHOLLAN';
				
		SELECT MAX(id) INTO vEntryFk 
			FROM vn.entry
			WHERE travelFk = vTravelFk;
		        
    END IF;
	
	UPDATE vn.ektEntryAssign
		SET entryFk = vEntryFk
        WHERE id = vId;

  END LOOP;

  CLOSE cur1;
	
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 `energyMeter_record` */;
/*!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 `energyMeter_record`(vInput INT, vActiveTime INT)
BEGIN
	DECLARE vConsumption INT;
    
    SELECT consumption INTO vConsumption
		FROM energyInput
		WHERE input = vInput;

	INSERT INTO vn.energyMeter 
		SET 
		  `input` = vInput, 
		  `period` = DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00'), 
		  `activeTime` = vActiveTime,
          `consumption` = CAST(IFNULL((vConsumption / 3600) * vActiveTime, 0) AS DECIMAL(10,2))
		ON DUPLICATE KEY UPDATE 
		  `activeTime` = `activeTime` + vActiveTime,
          `consumption` = `consumption` + CAST(VALUES(`consumption`) AS DECIMAL(10,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 PROCEDURE IF EXISTS `entryDelivered` */;
/*!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 `entryDelivered`(vDated DATE, vEntryFk INT)
BEGIN

	DECLARE vTravelFk INT;
    
    SELECT travelFk INTO vTravelFk
		FROM vn.entry 
		WHERE id = vEntryFk;
    
    IF (SELECT COUNT(*) FROM vn.entry WHERE travelFk = vTravelFk) = 1 THEN
    
		UPDATE vn.travel SET shipped = LEAST(shipped, vDated), landed = vDated
			WHERE id = vTravelFk;
    
    ELSE
    
		INSERT INTO vn.travel(shipped, landed, warehouseInFk, warehouseOutFk, agencyModeFk, ref, isDelivered, isReceived)
			SELECT LEAST(shipped, vDated), vDated, warehouseInFk, warehouseOutFk, agencyModeFk, CONCAT(account.myUser_getName(),' ', vEntryFk), TRUE, TRUE
				FROM vn.travel WHERE id = vTravelFk;
                
		SELECT LAST_INSERT_ID() INTO vTravelFk;
        
        UPDATE vn.entry 
			SET travelFk = vTravelFk 
			WHERE id = vEntryFk;
    
    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 `entryToTicket` */;
/*!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 `entryToTicket`(vEntryFk INT, vTicketFk INT)
BEGIN

	INSERT INTO vn.sale(ticketFk, itemFk, concept, quantity)
		SELECT vTicketFk, b.itemFk, i.longname, b.quantity
			FROM vn.buy b
				JOIN vn.item i ON i.id = b.itemFk
            WHERE b.entryFk = vEntryFk;

	CALL vn.ticket_recalcComponents(vTicketFk);
    
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 `entryWithItem` */;
/*!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 `entryWithItem`(vShipmentWarehouse INT, vLandingWarehouse INT,vSale INT, vVolume INT, netCost DECIMAL(10,2), vInOutDate DATE)
BEGIN

    DECLARE vTravel INT;
    DECLARE vEntry INT;
    DECLARE vBucket VARCHAR(10);
    DECLARE vSupplierFk INT;
    
    SET vSupplierFk = IF (vLandingWarehouse = 1, 850, 963);
	-- seleccionamos travel
	SELECT t.id, e.id INTO vTravel, vEntry
		FROM travel t LEFT JOIN entry e ON t.id = e.travelFk
        WHERE t.landed = vInOutDate AND t.shipped = vInOutDate AND t.warehouseOutFk = vShipmentWarehouse 
			AND t.warehouseInFk = vLandingWarehouse AND t.agencyModeFk IS NULL AND e.supplierFk = vSupplierFk
	LIMIT 1; 
	
    -- creamos el travel si es necesario
    IF IFNULL(vTravel, FALSE) = FALSE THEN
		INSERT INTO travel (shipped, landed, warehouseInFk, warehouseOutFk)
			VALUES (vInOutDate, vInOutDate, vLandingWarehouse, vShipmentWarehouse);
		SELECT LAST_INSERT_ID() INTO vTravel;
    END IF;
    
    -- creamos la Entrada si es necesario
	IF IFNULL(vEntry, FALSE) = FALSE THEN
		INSERT INTO entry (supplierFk, travelFk)
				VALUES (vSupplierFk, vTravel); -- proveedor 'CONFECCION ARTIFICIAL'
		SELECT LAST_INSERT_ID() INTO vEntry;
	END IF;
            
	 -- creamos el cubo si es necesario
	SELECT id INTO vBucket FROM packaging WHERE volume = vVolume LIMIT 1;
	IF vBucket IS NULL THEN
		INSERT INTO packaging (id, volume)
				VALUES (CONCAT('dm',vVolume/1000), vVolume);
		-- SELECT LAST_INSERT_ID() INTO vBucket;
        SELECT id INTO vBucket FROM packaging WHERE volume = vVolume LIMIT 1;
	END IF;

	INSERT INTO buy(itemFk,quantity, entryFk, packageFk, packing, stickers, buyingValue, price2, price3) 
		SELECT itemFk,
			quantity,
			vEntry,
			vBucket,
			1 packing,
            quantity,
			netCost,
			s.price,
			s.price
		FROM sale s
		WHERE s.id = vSale;
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 `entry_clone` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `entry_clone`(vSelf INT)
BEGIN
	
/*
 * Clona una entrada
 *
 * @param vSelf Identificador de vn.entry
 */
	
	DECLARE vNewEntryFk INT;
	
	CALL vn.entry_cloneWithoutBuy(vSelf, vNewEntryFk);

	INSERT INTO vn.buy(	entryFk,
						itemFk,
						quantity,
						buyingValue,
						freightValue,
						isIgnored,
						stickers,
						packing,
						`grouping`,
						groupingMode,
						containerFk,
						comissionValue,
						packageValue,
						packageFk,
						price1,
						price2,
						price3,
						minPrice,
						producer,
						workerFk,
						weight,
						itemOriginalFk)
		SELECT 	vNewEntryFk,
				itemFk,
				quantity,
				buyingValue,
				freightValue,
				isIgnored,
				stickers,
				packing,
				`grouping`,
				groupingMode,
				containerFk,
				comissionValue,
				packageValue,
				packageFk,
				price1,
				price2,
				price3,
				minPrice,
				producer,
				workerFk,
				weight,
				itemOriginalFk
			FROM vn.buy b
			WHERE b.entryFk = vSelf;
	
	SELECT vNewEntryFk;
	
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 `entry_cloneWithoutBuy` */;
/*!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 `entry_cloneWithoutBuy`(vSelf INT, OUT vNewEntryFk INT)
BEGIN
/**
 *  Clona una entrada sin compras
 *
 *  @param vSelf Identificador de vn.entry
 * 	@param vNewEntryFk Identificador de la nueva entrada
 */
	START TRANSACTION;

	INSERT INTO vn.entry(
			supplierFk,
			dated,
			isExcludedFromAvailable,
			notes,
			isRaid,
			commission,
			travelFk,
			currencyFk,
			companyFk,
			loadPriority,
			`ref`
		)
		SELECT 	supplierFk,
				dated,
				isExcludedFromAvailable,
				notes,
				isRaid,
				commission,
				travelFk,
				currencyFk,
				companyFk,
				loadPriority,
				`ref`
			FROM vn.entry e
			WHERE e.id = vSelf;

	SET vNewEntryFk = LAST_INSERT_ID();

	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 `entry_fixMisfit` */;
/*!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 `entry_fixMisfit`(vSelf INT)
BEGIN
/**
 * Arregla el descuadre de una entrada, agregando registros en vn.buy
 * para compensar la diferencia * entre las etiquetas impresas y las esperadas
 *
 * @param vSelf Identificador de la entrada
 */
	INSERT INTO vn.buy(entryFk, itemFk)
		SELECT vSelf, i.id
			FROM vn.item i
			WHERE i.description = 'MISFIT'
			LIMIT 1;

	INSERT INTO vn.buy(entryFk,
						itemFk,
						quantity,
						buyingValue,
						freightValue,
						isIgnored,
						stickers,
						packing,
						`grouping`,
						groupingMode,
						containerFk,
						comissionValue,
						packageValue,
						location,
						packageFk,
						price1,
						price2,
						price3,
						minPrice,
						producer)
		SELECT vSelf,
				itemFk,
				(printedStickers - stickers) * packing quantity,
				buyingValue,
				freightValue,
				TRUE isIgnored,
				printedStickers - stickers,
				packing,
				`grouping`,
				groupingMode,
				containerFk,
				comissionValue,
				packageValue,
				location,
				packageFk,
				price1,
				price2,
				price3,
				minPrice,
				producer
			FROM vn.buy b
			WHERE b.entryFk = vSelf
				AND b.printedStickers != b.stickers;
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 `entry_getRate` */;
/*!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 `entry_getRate`(vEntry INT)
BEGIN
	DECLARE vLanded DATE;
	DECLARE vWarehouseFk  INT;

	-- Obtiene fecha de llegada y almacén entrante

	SELECT landed, warehouseInFk INTO vLanded, vWarehouseFk 
		FROM vn.travel t
			JOIN vn.entry e ON t.id = e.travelFk
		WHERE e.id = vEntry;

	-- Prepara una tabla con las tarifas aplicables en funcion de la fecha y el almacén

	DROP TEMPORARY TABLE IF EXISTS tmp.rate;
	CREATE TEMPORARY TABLE tmp.rate
		ENGINE = MEMORY
		SELECT * FROM
		(
			SELECT * FROM
				(    
					SELECT rate0, rate1, rate2, rate3
					FROM vn.rate
					WHERE dated <= vLanded
					AND warehouseFk = vWarehouseFk
					ORDER BY dated DESC
							
				) sub
			UNION ALL
			SELECT rate0, rate1, rate2, rate3
			FROM rateConfig
		) sub2
		LIMIT 1;

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 `entry_moveNotPrinted` */;
/*!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 `entry_moveNotPrinted`(vSelf INT, vDays INT, vChangeEntry BOOL, OUT vNewEntryFk INT)
BEGIN
/**
 * Crea una entrada a futuro y divide las lineas de vn.buy de la entrada original en función
 * de las etiquetas impresas
 *
 * @param vSelf Identificador de vn.entry
 * @param vDays Número de dias a futuro que se quiere la nueva entrada
 *
 * @return vNewEntryFk Identificador de la nueva entrada
 */
	DECLARE vNewTravelFk INT;
	DECLARE vTravelFk INT;
	DECLARE vInvoiceAmountOldEntryFk DECIMAL(10,2);
    DECLARE vInvoiceAmountNewEntry DECIMAL(10,2);

	SELECT travelFk INTO vTravelFk
		FROM vn.entry
			WHERE id = vSelf;

	CALL vn.travel_clone(vTravelFk, vDays, vNewTravelFk);
	CALL vn.entry_cloneWithoutBuy(vSelf, vNewEntryFk);

	UPDATE vn.entry e
		SET e.travelFk = vNewTravelFk,
			e.evaNotes = CONCAT('No impresas de: ', vSelf, ' ', IFNULL(e.evaNotes,''))
		WHERE e.id = vNewEntryFk;
	
	IF vChangeEntry THEN
		UPDATE vn.buy b
			SET b.entryFk = vNewEntryFk
			WHERE b.printedStickers = 0
				AND b.entryFk = vSelf;
	END IF;
	
	INSERT INTO vn.buy(
			entryFk,
			itemFk,
			quantity,
			buyingValue,
			freightValue,
			isIgnored,
			stickers,
			packing,
			`grouping`,
			groupingMode,
			containerFk,
			comissionValue,
			packageValue,
			packageFk,
			price1,
			price2,
			price3,
			minPrice,
			producer,
			workerFk,
			weight,
			itemOriginalFk
		)
		SELECT vNewEntryFk,
				itemFk,
				((stickers - printedStickers) * packing) quantity,
				buyingValue,
				freightValue,
				isIgnored,
				(stickers - printedStickers) stickers,
				packing,
				`grouping`,
				groupingMode,
				containerFk,
				comissionValue,
				packageValue,
				packageFk,
				price1,
				price2,
				price3,
				minPrice,
				producer,
				workerFk,
				weight,
				itemOriginalFk
			FROM vn.buy b
			WHERE b.entryFk = vSelf
				AND b.printedStickers != b.stickers;
			
	IF vChangeEntry THEN
		UPDATE vn.buy
			SET stickers = printedStickers,
				quantity = printedStickers * packing
			WHERE entryFk = vSelf;
	ELSE
		INSERT INTO vn.buy(entryFk, itemFk)
			SELECT vSelf, i.id
				FROM vn.item i
				WHERE i.description = 'MISFIT'
				LIMIT 1;
		
		INSERT INTO vn.buy(entryFk,
					itemFk,
					quantity,
					buyingValue,
					freightValue,
					isIgnored,
					stickers,
					packing,
					`grouping`,
					groupingMode,
					containerFk,
					comissionValue,
					packageValue,
					location,
					packageFk,
					price1,
					price2,
					price3,
					minPrice,
					producer)
		SELECT vSelf,
				itemFk,
				(printedStickers - stickers) * packing quantity,
				buyingValue,
				freightValue,
				TRUE isIgnored,
				printedStickers - stickers,
				packing,
				`grouping`,
				groupingMode,
				containerFk,
				comissionValue,
				packageValue,
				location,
				packageFk,
				price1,
				price2,
				price3,
				minPrice,
				producer
			FROM vn.buy
			WHERE entryFk = vSelf
				AND printedStickers != stickers;
	END IF;

	SELECT SUM(IFNULL(b.buyingValue * b.quantity, 0)) INTO vInvoiceAmountOldEntryFk
		FROM vn.buy b
		WHERE b.entryFk = vSelf;
    
	UPDATE vn.entry e
		JOIN vn.buy b ON b.entryFk = e.id
			SET e.ref = CONCAT(e.ref,'(1)'),
			e.invoiceAmount = vInvoiceAmountOldEntryFk
	WHERE e.id = vSelf;
    
	SELECT SUM(IFNULL(b.buyingValue * b.quantity, 0)) INTO vInvoiceAmountNewEntry
		FROM vn.buy b
		WHERE b.entryFk = vNewEntryFk;
    
	UPDATE vn.entry e
		JOIN vn.buy b ON b.entryFk = e.id
			SET e.ref = CONCAT(e.ref,'(2)'),
			e.invoiceAmount = vInvoiceAmountNewEntry
		WHERE e.id = vNewEntryFk;

	INSERT INTO entryLog
		SET action = 'update',
			description = CONCAT('Se ha creado la entrada ', vNewEntryFk,' transferida desde la ', vSelf),
			userFk = account.myUser_getId(),
			originFk = vSelf;
		   
	INSERT INTO entryLog
		SET action = 'update',
			description = CONCAT('Se ha creado la entrada ', vNewEntryFk,' transferida desde la ', vSelf),
			userFk = account.myUser_getId(),
			originFk = vNewEntryFk;
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 `entry_notifyChanged` */;
/*!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 `entry_notifyChanged`(vSelf INT, vBuyFk INT, vOldValues VARCHAR(512), vNewValues VARCHAR(512))
BEGIN
	DECLARE vEmail VARCHAR(255);
	DECLARE vFields VARCHAR(100);
	DECLARE vMessage TEXT;

	SELECT e.mailToNotify INTO vEmail
		FROM entryConfig e
		LIMIT 1;

	SET vFields = CONCAT_WS(',',
		'entryFk',
		'itemFk',
		'quantity',
		'price1',
		'price2',
		'price3'
	);
	SET vMessage = util.formatTable(vFields, vOldValues, vNewValues);

	CALL mail_insert(
		vEmail,
		NULL,
		CONCAT(
			'Se ha modificado una línea de la entrada ', vSelf
			,' siendo inventario o anterior al mismo'
		),
		vMessage
	);
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 `entry_recalc` */;
/*!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 `entry_recalc`()
BEGIN
/**
 * Comprueba que las ventas creadas entre un rango de fechas tienen componentes
 *
 * @param vCreatedFrom inicio del rango
 * @param vCreatedTo fin del rango
 */
	DECLARE v_done BOOL DEFAULT FALSE;
	DECLARE vEntryFk INTEGER;
    
	DECLARE vCur CURSOR FOR
		    SELECT id FROM tmp.recalcEntryCommision;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET v_done = TRUE; 

	OPEN vCur;

	l: LOOP
		SET v_done = FALSE;
		FETCH vCur INTO vEntryFk;

		IF v_done THEN
			LEAVE l;
		END IF;
		
		CALL vn2008.buy_tarifas_entry(vEntryFk);
	END LOOP;

	CLOSE vCur;
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 `entry_splitByShelving` */;
/*!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 `entry_splitByShelving`(vShelvingFk VARCHAR(3), vFromEntryFk INT, vToEntryFk INT)
BEGIN
/**
 * Divide las compras entre dos entradas de acuerdo con lo ubicado en una matr�cula
 * 
 * @param vShelvingFk Identificador de vn.shelving
 * @param vFromEntryFk Entrada origen
 * @param vToEntryFk Entrada destino
 */
	DECLARE vBuyFk INT;
	DECLARE ishStickers INT;
	DECLARE buyStickers INT;
	DECLARE vDone BOOLEAN DEFAULT FALSE;

	DECLARE cur CURSOR FOR 
		SELECT 	bb.id buyFk,
				FLOOR(ish.visible / ish.packing) AS ishStickers,
				bb.stickers buyStickers
				FROM vn.itemShelving ish
				JOIN (SELECT b.id, b.itemFk, b.stickers 
						FROM vn.buy b 
						WHERE b.entryFk = vFromEntryFk
						ORDER BY b.stickers DESC
						LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk 
							AND bb.stickers >= FLOOR(ish.visible / ish.packing)
			WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci
			GROUP BY ish.id;
			
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	-- Cantidades de la matrícula que exceden la de las entradas 
	SELECT 	ish.itemFk, 
			i.longName, 
			FLOOR(ish.visible / ish.packing) AS etiEnMatricula,
			bb.stickers etiEnEntrada
				FROM vn.itemShelving ish
					JOIN vn.item i ON i.id = ish.itemFk 
				LEFT JOIN (SELECT b.id, b.itemFk, b.stickers 
						FROM vn.buy b 
						WHERE b.entryFk = vFromEntryFk
						ORDER BY b.stickers DESC
						LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
			WHERE shelvingFk = vShelvingFk COLLATE utf8_general_ci
				AND  IFNULL(bb.stickers,0) < FLOOR(ish.visible / ish.packing)
			GROUP BY ish.id;
		
	OPEN cur;

	read_loop: LOOP
		SET vDone = FALSE;
	
		FETCH cur INTO vBuyFk, ishStickers, buyStickers;
	
		IF vDone THEN
			LEAVE read_loop;
		END IF;
		
		IF ishStickers =  buyStickers THEN
			UPDATE vn.buy
				SET entryFk = vToEntryFk
				WHERE id = vBuyFk;
		ELSE
			UPDATE vn.buy
				SET stickers = stickers - ishStickers,
					quantity = stickers * packing 
				WHERE id = vBuyFk;
		
			INSERT INTO	vn.buy(entryFk,
								itemFk,
								quantity,
								buyingValue,
								freightValue,
								isIgnored,
								stickers,
								packing,
								`grouping`,
								groupingMode,
								containerFk,
								comissionValue,
								packageValue,
								location,
								packageFk,
								price1,
								price2,
								price3,
								minPrice,
								producer,
								printedStickers,
								workerFk,
								isChecked,
								isPickedOff,
								ektFk,
								weight,
								deliveryFk,
								itemOriginalFk)
					SELECT
							vToEntryFk,
							itemFk,
							ishStickers * packing,
							buyingValue,
							freightValue,
							isIgnored,
							ishStickers,
							packing,
							`grouping`,
							groupingMode,
							containerFk,
							comissionValue,
							packageValue,
							location,
							packageFk,
							price1,
							price2,
							price3,
							minPrice,
							producer,
							ishStickers,
							workerFk,
							isChecked,
							isPickedOff,
							ektFk,
							weight,
							deliveryFk,
							itemOriginalFk
						FROM vn.buy
						WHERE id = vBuyFk;
					
		END IF;
	END LOOP;

	CLOSE cur;
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 `entry_splitMisfit` */;
/*!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 `entry_splitMisfit`(vSelf INT)
BEGIN
	
	/* Divide una entrada, pasando los registros que ha insertado vn.entry_fixMisfit de la entrada original
	 * a la nueva
	 */
	
	DECLARE vNewEntryFk INT;
	DECLARE vBuyFk INT;

	SELECT MAX(b.id) INTO vBuyFk
		FROM vn.buy b 
			JOIN vn.item i ON i.id = b.itemFk
			WHERE b.entryFk = vSelf
				AND i.description = 'MISFIT';

	INSERT INTO vn.entry(supplierFk, dated, notes, travelFk, currencyFk, companyFk)
		SELECT supplierFk, dated, CONCAT('E:',vSelf), travelFk, currencyFk, companyFk
			FROM vn.entry e
			WHERE e.id = vSelf;
		
	SET vNewEntryFk = LAST_INSERT_ID(); 

	UPDATE vn.buy b 
		SET b.entryFk = vNewEntryFk
		WHERE b.entryFk = vSelf
			AND b.id > vBuyFk;
		
	SELECT vNewEntryFk;
	
		
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 `errorProduction_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 `errorProduction_add`(
	vAction VARCHAR(25),
	vDatedFrom DATETIME,
	vDatedTo DATETIME)
BEGIN
/**
 * Rellena la tabla vn.errorProduction
 *
 * @param vAction Accion que se quiere añadir
 * @param vDatedFrom Fecha desde
 * @param vDatedTo Fecha hasta
 */		
	DECLARE vDepartment VARCHAR(255);

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.total;
	DROP TEMPORARY TABLE IF EXISTS tmp.itemPickerErrors;
	DROP TEMPORARY TABLE IF EXISTS tmp.errorsByClaim;
	DROP TEMPORARY TABLE IF EXISTS tmp.volume;
	DROP TEMPORARY TABLE IF EXISTS tmp.errorsByChecker;

	CASE
		WHEN vAction = 'SACAR' THEN
			SET vDepartment = 'Sacadores';
		WHEN vAction = 'ENCAJAR' THEN
			SET vDepartment = 'Encajadores';
		WHEN vAction = 'CONTROLAR' THEN
			SET vDepartment = 'Revisadores';
	END CASE;

	IF (vDepartment = 'Encajadores') THEN
		CREATE TEMPORARY TABLE tmp.total
			ENGINE = MEMORY
			SELECT 	e.workerFk,
					COUNT(DISTINCT t.id) ticketCount,
					COUNT(s.id) lineCount
				FROM expedition e
					JOIN ticket t ON e.ticketFk = t.id
					JOIN sale s ON s.ticketFk = t.id
				WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
				GROUP BY e.workerFk;
	ELSE
		CREATE TEMPORARY TABLE tmp.total
			ENGINE = MEMORY
			SELECT 	st.workerFk,
					COUNT(DISTINCT t.id) ticketCount,
					COUNT(s.id) lineCount
				FROM saleTracking st
					JOIN vncontrol.accion a ON a.accion_id = st.actionFk
					JOIN sale s ON s.id = st.saleFk
					JOIN ticket t ON s.ticketFk = t.id
				WHERE (t.shipped BETWEEN vDatedFrom AND vDatedTo)
					AND a.accion = vAction
				GROUP BY st.workerFk;
	END IF;

	CALL timeControl_calculateAll(vDatedFrom, vDatedTo);


	CREATE TEMPORARY TABLE tmp.errorsByClaim
		ENGINE = MEMORY
		SELECT 	COUNT(c.ticketFk) errors,
				cd.workerFk
			FROM claimDevelopment cd
				JOIN claim c ON cd.claimFk = c.id
				JOIN ticket t ON c.ticketFk = t.id
				JOIN claimResponsible cr ON cd.claimResponsibleFk = cr.id
			WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
				AND cr.description = vDepartment
			GROUP BY cd.workerFk;
		
	CREATE TEMPORARY TABLE tmp.volume
		ENGINE = MEMORY
		SELECT 	SUM(w.volume) volume,
				w.workerFk
			FROM bs.workerProductivity w
			WHERE w.dated BETWEEN vDatedFrom AND vDatedTo
			GROUP BY w.workerFk;

	CREATE TEMPORARY TABLE tmp.errorsByChecker
		ENGINE = MEMORY
		SELECT sub1.workerFk, COUNT(id) errors 
			FROM (
				SELECT 	st.workerFk,
						t.id
					FROM saleMistake sm
						JOIN saleTracking st ON sm.saleFk = st.saleFk
						JOIN vncontrol.accion a ON a.accion_id = st.actionFk
						JOIN sale s ON s.id = sm.saleFk 
						JOIN ticket t on t.id = s.ticketFk 
					WHERE (t.shipped BETWEEN vDatedFrom AND vDatedTo)
						AND a.accion = vAction
					GROUP BY s.ticketFk
			) sub1
			GROUP BY sub1.workerFk;
			
	IF (vDepartment = 'Sacadores') THEN
	
		INSERT INTO errorProduction(userFk,
				firstname,
				lastname,
				rol,
				ticketNumber,
				lineNumber,
				error,
				volume,
				hourStart,
				hourEnd,
				hourWorked,
				dated)
			SELECT w.id,
					w.firstName,
					w.lastName,
					vDepartment,
					t.ticketCount totalTickets,
					t.lineCount,
					IFNULL(ec.errors,0) + IFNULL(ec2.errors,0) errors,
					IF(vDepartment = 'Revisadores', NULL, v.volume) volume,
					SUBSTRING(tc.timed, 1, 5) hourStart,
					SUBSTRING(tc.timed, LENGTH(tc.timed)-4, 5) hourEnd,
					IFNULL(CAST(tc.timeWorkDecimal AS DECIMAL (10,2)) , 0) hourWorked,
					vDatedFrom dated
				FROM tmp.total t
					LEFT JOIN worker w ON w.id = t.workerFk
					LEFT JOIN tmp.timeControlCalculate tc ON tc.userFk = t.workerFk
					LEFT JOIN tmp.errorsByClaim ec ON ec.workerFk = t.workerFk
					LEFT JOIN tmp.volume v ON v.workerFk = t.workerFk
					LEFT JOIN tmp.errorsByChecker ec2 ON ec2.workerFk = t.workerFk
					JOIN (SELECT DISTINCT w.id -- Verificamos que son sacadores
							FROM vn.collection c
								JOIN vn.state s ON s.id = c.stateFk 
								JOIN vn.train tn ON tn.id = c.trainFk
								JOIN vn.worker w ON w.id = c.workerFk 
							WHERE c.created BETWEEN vDatedFrom AND vDatedTo) sub ON sub.id = w.id
				GROUP BY w.id;
		
		CREATE TEMPORARY TABLE tmp.itemPickerErrors -- Errores de los sacadores, derivadores de los revisadores
			ENGINE = MEMORY
			SELECT 	COUNT(c.ticketFk) errors,
					tt.workerFk
				FROM claimDevelopment cd
					JOIN claim c ON cd.claimFk = c.id
					JOIN ticket t ON c.ticketFk = t.id
					JOIN claimResponsible cr ON cd.claimResponsibleFk = cr.id
					JOIN ticketTracking tt ON tt.ticketFk = t.id
					JOIN state s ON s.id = tt.stateFk
				WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
					AND cr.description = 'Revisadores'
					AND s.code = 'ON_PREPARATION'
				GROUP BY workerFk;

		UPDATE errorProduction ep
				JOIN tmp.itemPickerErrors ipe ON ipe.workerFk = ep.userFk
			SET ep.error = ep.error + ipe.errors
			WHERE vDatedFrom = ep.dated AND ep.rol = 'Sacadores';
	ELSE
		INSERT INTO errorProduction(userFk,
				firstname,
				lastname,
				rol,
				ticketNumber,
				lineNumber,
				error,
				volume,
				hourStart,
				hourEnd,
				hourWorked,
				dated)
			SELECT  w.id,
					w.firstName,
					w.lastName,
					vDepartment,
					t.ticketCount totalTickets,
					t.lineCount,
					IFNULL(ec.errors,0) + IFNULL(ec2.errors,0) errors,
					IF(vDepartment = 'Revisadores', NULL, v.volume) volume,
					SUBSTRING(tc.timed, 1, 5) hourStart,
					SUBSTRING(tc.timed, LENGTH(tc.timed)-4, 5) hourEnd,
					IFNULL(CAST(tc.timeWorkDecimal AS DECIMAL (10,2)) , 0) hourWorked,
					vDatedFrom dated
				FROM tmp.total t
					LEFT JOIN worker w ON w.id = t.workerFk
					LEFT JOIN tmp.timeControlCalculate tc ON tc.userFk = t.workerFk
					LEFT JOIN tmp.errorsByClaim ec ON ec.workerFk = t.workerFk
					LEFT JOIN tmp.volume v ON v.workerFk = t.workerFk
					LEFT JOIN tmp.errorsByChecker ec2 ON ec2.workerFk = t.workerFk
				GROUP BY w.id;
	END IF;
	
	DROP TEMPORARY TABLE tmp.timeControlCalculate;
	DROP TEMPORARY TABLE tmp.total;
	DROP TEMPORARY TABLE IF EXISTS tmp.itemPickerErrors;
	DROP TEMPORARY TABLE tmp.errorsByClaim;
	DROP TEMPORARY TABLE tmp.volume;
	DROP TEMPORARY TABLE tmp.errorsByChecker;
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 `errorProduction_addLauncher` */;
/*!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 `errorProduction_addLauncher`()
BEGIN
	DECLARE vDatedFrom DATETIME;
	DECLARE vDatedTo DATETIME;
		
	SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY), CONCAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY),' 23:59:59') INTO vDatedFrom,	vDatedTo;

	CALL vn.errorProduction_add('SACAR', vDatedFrom, vDatedTo);
	CALL vn.errorProduction_add('ENCAJAR', vDatedFrom, vDatedTo);
	CALL vn.errorProduction_add('CONTROLAR', vDatedFrom, vDatedTo);
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 `expeditionGetFromRoute` */;
/*!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 `expeditionGetFromRoute`(
    vExpeditionFk INT)
BEGIN
/**
 * Get all expeditions from route
 */
	DECLARE vRouteFk INT DEFAULT 0;

	SELECT t.routeFk INTO vRouteFk
		FROM vn.expedition exp 
			INNER JOIN ticket t on t.id = exp.ticketFk
		WHERE exp.id = vExpeditionFk;

	SELECT exp.id,
			exp.ticketFk,
			t.routeFk,
			t.packages bultos,
			ts.alertLevel,
			a.street,
			a.city,
			a.postalCode,
			a.id addressFk,
			w.name warehouse
		FROM vn.expedition exp
			INNER JOIN ticket t ON t.id = exp.ticketFk
			INNER JOIN vn.ticketState ts ON ts.ticketFk = exp.ticketFk
			LEFT JOIN vn.address a ON t.addressFk = a.id
			LEFT JOIN vn.warehouse w ON t.warehouseFk = w.id
		WHERE t.routeFk = vRouteFk AND exp.isBox > 0;
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 `expeditionPallet_Del` */;
/*!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 `expeditionPallet_Del`(vPalletFk INT)
BEGIN

	DELETE FROM vn.expeditionPallet
		WHERE id = vPalletFk;

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 `expeditionPallet_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 `expeditionPallet_List`(vTruckFk INT)
BEGIN

	SELECT ep.id Pallet,
			count(DISTINCT t.routeFk) Rutas,
            count(DISTINCT e.id) Eti
		FROM vn.expeditionPallet ep
			LEFT JOIN vn.expeditionScan es ON es.palletFk = ep.id
            LEFT JOIN vn.expedition e ON e.id = es.expeditionFk
            LEFT JOIN vn.ticket t ON t.id = e.ticketFk
		WHERE ep.truckFk = vTruckFk
        GROUP BY ep.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 `expeditionPallet_printLabel` */;
/*!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 `expeditionPallet_printLabel`(vSelf INT)
BEGIN
/**
 * Inserta en la cola de impresión teniendo en cuenta el sector de trabajador
 * la expedición que se pasa como variable al procedimiento vSelf.
 *
 * @param vSelf identificador de expedition pallet
 */
	DECLARE vReport INT;
	DECLARE vPrinterFk INT;

	SET vReport = NULL;

	SELECT s.reportFk, w.labelerFk INTO vReport, vPrinterFk
		FROM worker w
			JOIN sector s ON s.id = w.sectorFk
			JOIN report r ON r.id = s.reportFk
		WHERE w.id = account.myUser_getId()
			AND r.name = 'LabelPalletExpedition';

	IF vReport IS NULL THEN
		CALL util.throw('Sector incorrecto');
	END IF;

	UPDATE vn.expeditionPallet
			SET isPrint = FALSE
		WHERE id = vSelf;

	INSERT INTO printQueue (printerFk, priorityFk, reportFk, workerFk)
		SELECT vPrinterFk, qp.id, vReport, account.myUser_getId()
			FROM queuePriority qp
			WHERE qp.`code`= 'high';

	INSERT INTO printQueueArgs (printQueueFk, `name`, `value` )
		SELECT LAST_INSERT_ID(), 'palletFk', 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 `expeditionPallet_View` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionPallet_View`(vPalletFk INT)
BEGIN

	SELECT ep.id Pallet,
			t.routeFk Rutas,
            count(*) Cajas
		FROM vn.expeditionPallet ep
			LEFT JOIN vn.expeditionScan es ON es.palletFk = ep.id
            LEFT JOIN vn.expedition e ON e.id = es.expeditionFk
            LEFT JOIN vn.ticket t ON t.id = e.ticketFk
		WHERE ep.id = vPalletFk
        GROUP BY t.routeFk;

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 `expeditionScan_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 `expeditionScan_Add`(vPalletFk INT, vTruckFk INT)
BEGIN

	DECLARE vTotal INT DEFAULT 0;

	IF vPalletFk = 0 THEN -- Nuevo pallet
    
		INSERT INTO vn.expeditionPallet(truckFk) 
			VALUES(vTruckFk);
            
		SELECT LAST_INSERT_ID() INTO vPalletFk;
    
    END IF;
    
    SELECT COUNT(expeditionFk) INTO vTotal FROM vn.expeditionScan WHERE palletFk = vPalletFk;
    
    IF vTotal <> 0 THEN
		SELECT 	expeditionFk, 
				palletFk
			FROM vn.expeditionScan 
			WHERE palletFk = vPalletFk;
	ELSE 
		SELECT 0 expeditionFk,vPalletFk palletFk;
	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 `expeditionScan_Del` */;
/*!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 `expeditionScan_Del`(vScanFk INT)
BEGIN

	DELETE FROM vn.expeditionScan
		WHERE id = vScanFk;

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 `expeditionScan_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 `expeditionScan_List`(vPalletFk INT)
BEGIN

	SELECT 	es.id,
			t.routeFk Ruta,
			t.id Ticket,
            e.counter Caja,
            es.expeditionFk
		FROM vn.expeditionScan es
			JOIN vn.expedition e ON e.id = es.expeditionFk
            JOIN vn.ticket t ON t.id = e.ticketFk
		WHERE es.palletFk = vPalletFk
        ORDER BY Ruta, Ticket, Caja;

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 `expeditionScan_Put` */;
/*!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 `expeditionScan_Put`(vPalletFk INT, vExpeditionFk INT)
BEGIN
    
		REPLACE vn.expeditionScan(expeditionFk, palletFk) 
			VALUES(vExpeditionFk, vPalletFk);
            
		SELECT LAST_INSERT_ID() INTO vPalletFk;
    
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 `expeditionState_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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionState_add`(vParam INT, vStateCode VARCHAR(100))
BEGIN
	
	/**
	 * Inserta nuevos registros en la tabla vn.expeditionState, segun el parámetro
	 * 
	 * @param vParam Identificador de vn.expedition o de vn.route
	 * @param vStateCode Corresponde a vn.expeditionStateType.code
	 */
	
	IF (SELECT COUNT(*) FROM vn.route r WHERE r.id = vParam) THEN
	
		INSERT INTO vn.expeditionState(expeditionFk, typeFk)
			SELECT e.id, est.id
				FROM vn.expedition e
					JOIN vn.ticket t ON t.id = e.ticketFk
					JOIN vn.expeditionStateType est ON est.code = vStateCode
				WHERE t.routeFk = vParam;
		
	ELSE
	
		INSERT INTO vn.expeditionState(expeditionFk, typeFk)
			SELECT vParam, est.id
				FROM vn.expeditionStateType est
				WHERE est.code = vStateCode;
			
	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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `expeditionState_addByAdress` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionState_addByAdress`(vAdressFk INT, vRouteFk INT, vStateCode VARCHAR(100))
BEGIN

	/**
	 * Inserta nuevos registros en la tabla vn.expeditionState
	 *
	 * @param vAdressFk Identificador de vn.ticket
	 * @param vRouteFk Identificador de vn.route
	 * @param vStateCode Corresponde a vn.expeditionStateType.code
	 */

	INSERT INTO vn.expeditionState(expeditionFk, typeFk)
		SELECT e.id, est.id
			FROM vn.expedition e
				JOIN vn.expeditionStateType est ON est.code = vStateCode
				JOIN vn.ticket t ON t.id = e.ticketFk 
			WHERE t.addressFk  = vAdressFk AND t.routeFk =  vRouteFk;

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 `expeditionState_addByExpedition` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionState_addByExpedition`(vExpeditionFk INT, vStateCode VARCHAR(100))
BEGIN
	
	/**
	 * Inserta nuevos registros en la tabla vn.expeditionState
	 * 
	 * @param vExpeditionFk Identificador de vn.expedition
	 * @param vStateCode Corresponde a vn.expeditionStateType.code
	 */
	
	INSERT INTO vn.expeditionState(expeditionFk, typeFk)
		SELECT vExpeditionFk, est.id
			FROM vn.expeditionStateType est
			WHERE est.code = vStateCode;

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 `expeditionState_addByPallet` */;
/*!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 `expeditionState_addByPallet`(vPalletFk INT, vStateCode VARCHAR(100))
BEGIN
/**
 * Inserta nuevos registros en la tabla vn.expeditionState
 * 
 * @param vPalletFk Identificador de vn.expedition
 * @param vStateCode Corresponde a vn.expeditionStateType.code
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.expeditionScan;
	CREATE TEMPORARY TABLE tmp.expeditionScan 
		SELECT expeditionFk, est.id typeFk
			FROM vn.expeditionScan e
				JOIN vn.expeditionStateType est ON est.code = vStateCode
			WHERE e.palletFk = vPalletFk;

	INSERT INTO vn.expeditionState(expeditionFk, typeFk)
		SELECT expeditionFk, typeFk
			FROM  tmp.expeditionScan;

	DROP TEMPORARY TABLE IF EXISTS tmp.expeditionScan;
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 `expeditionState_addByRoute` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionState_addByRoute`(vRouteFk INT, vStateCode VARCHAR(100))
BEGIN
	
	/**
	 * Inserta nuevos registros en la tabla vn.expeditionState, por rutas
	 * 
	 * @param vRouteFk Identificador de vn.route
	 * @param vStateCode Corresponde a vn.expeditionStateType.code
	 */
	
	INSERT INTO vn.expeditionState(expeditionFk, typeFk)
		SELECT e.id, est.id
			FROM vn.expedition e
				JOIN vn.ticket t ON t.id = e.ticketFk
				JOIN vn.expeditionStateType est ON est.code = vStateCode
			WHERE t.routeFk = vRouteFk;
			
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 `expeditionTruck_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 `expeditionTruck_Add`(vHour VARCHAR(5), vDescription VARCHAR(45))
BEGIN

	INSERT INTO vn.expeditionTruck(ETD,description)
		VALUES(CONCAT(CURDATE(), ' ', vHour), vDescription);

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 `expeditionTruck_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 `expeditionTruck_List`()
BEGIN

	SELECT 	id truckFk, 
			ETD, 
            description Destino
		FROM vn.expeditionTruck
        WHERE ETD BETWEEN CURDATE() AND util.dayend(CURDATE())
        ORDER BY ETD;
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 `expedition_getFromRoute` */;
/*!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 `expedition_getFromRoute`(vRouteFk INT)
BEGIN
/**
 * Obtiene las expediciones a partir de una ruta
 * @param vRouteFk Id de la ruta
 */
	SELECT e.id,
			e.ticketFk,
			t.routeFk,
			ts.alertLevel,
			a.street,
			a.city,
			a.postalCode,
			t.addressFk,
			a.nickname,
			sub2.itemPackingTypeConcat,
			est.code
		FROM expedition e
			JOIN ticket t ON t.id = e.ticketFk
			JOIN ticketState ts ON ts.ticketFk = e.ticketFk
			JOIN address a ON t.addressFk = a.id
			JOIN route r ON r.id = t.routeFk
			LEFT JOIN warehouse w ON t.warehouseFk = w.id
			LEFT JOIN (SELECT sub.ticketFk, 
					CONCAT('(', GROUP_CONCAT(DISTINCT sub.itemPackingTypeFk ORDER BY sub.items DESC SEPARATOR ','), ') ') itemPackingTypeConcat
						FROM (SELECT s.ticketFk , i.itemPackingTypeFk, COUNT(*) items
							FROM ticket t
								JOIN sale s ON s.ticketFk = t.id
								JOIN item i ON i.id = s.itemFk
							WHERE t.routeFk = vRouteFk
							GROUP BY t.id,i.itemPackingTypeFk)sub
						GROUP BY sub.ticketFk
						) sub2 ON sub2.ticketFk = t.id
			LEFT JOIN expeditionStateType est ON est.id  = e.stateTypeFk
		WHERE t.routeFk = vRouteFk AND e.isBox <> FALSE
		ORDER BY  r.created,  t.priority DESC;
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 `expedition_getState` */;
/*!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 `expedition_getState`(vExpeditionFk INT)
BEGIN
	
	DECLARE vTicketsPendientes INT;
	DECLARE vEtiquetasTotales INT;
	DECLARE vEtiquetasEscaneadas INT;
	DECLARE vRouteFk INT;

	SELECT t.routeFk INTO vRouteFk
		FROM vn.ticket t
			JOIN vn.expedition e ON e.ticketFk = t.id
		WHERE e.id = vExpeditionFk;
	
	SELECT COUNT(*) INTO vTicketsPendientes
		FROM vn.ticket t
			LEFT JOIN vn.expedition e ON e.ticketFk = t.id
		WHERE t.routeFk = vRouteFk
			AND ISNULL(e.id);
		
	SELECT COUNT(*) INTO vEtiquetasTotales
		FROM vn.expedition e 
			JOIN vn.ticket t ON t.id = e.ticketFk
		WHERE t.routeFk = vRouteFk;
	
	SELECT COUNT(*) INTO vEtiquetasEscaneadas
		FROM vn.expeditionScan es 
			JOIN vn.expedition e ON e.id = es.expeditionFk
			JOIN vn.ticket t ON t.id = e.ticketFk 
		WHERE t.routeFk = vRouteFk;
		
	SELECT 	e.ticketFk ticket,
			t.nickname cliente,
			a.city ciudad,
			p.name provincia,
			z.name zonaTicket,
			am.name zonaRuta,
			t.routeFk ruta,
			rm.beachFk ubicacion,
			et.ETD ,
			et.description camion,
			vTicketsPendientes AS ticketsPendientes,
			vEtiquetasTotales AS etiquetasTotales,
			vEtiquetasEscaneadas AS etiquetasEscaneadas
		FROM vn.expedition e 
			JOIN vn.ticket t ON t.id = e.ticketFk 
			JOIN vn.address a ON a.id = t.addressFk 
			JOIN vn.province p ON p.id = a.provinceFk 
			JOIN vn.`zone`z ON z.id = t.zoneFk 
			LEFT JOIN vn.route r ON r.id = t.routeFk 
			LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk 
			LEFT JOIN vn.routesMonitor rm ON rm.routeFk = r.id 
			LEFT JOIN vn.expeditionTruck et ON et.id = rm.expeditionTruckFk 
		WHERE e.id = vExpeditionFk;
	
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 `expedition_StateGet` */;
/*!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 `expedition_StateGet`(vExpeditionFk INT)
BEGIN
	
	/* Devuelve una "ficha" con todos los datos relativos a la expedición
	 * 
	 * param vExpeditionFk 
	 */
	
	DECLARE vTicketsPendientes INT;
	DECLARE vEtiquetasTotales INT;
	DECLARE vEtiquetasEscaneadas INT;
	DECLARE vEtiquetasLeidasSorter INT;
	DECLARE vRouteFk INT;

	SELECT t.routeFk INTO vRouteFk
		FROM vn.ticket t
			JOIN vn.expedition e ON e.ticketFk = t.id
		WHERE e.id = vExpeditionFk;
	
	SELECT COUNT(*) INTO vTicketsPendientes
		FROM vn.ticket t
			LEFT JOIN vn.expedition e ON e.ticketFk = t.id
		WHERE t.routeFk = vRouteFk
			AND ISNULL(e.id);
		
	SELECT COUNT(*) INTO vEtiquetasTotales
		FROM vn.expedition e 
			JOIN vn.ticket t ON t.id = e.ticketFk
		WHERE t.routeFk = vRouteFk;
	
	SELECT COUNT(*) INTO vEtiquetasEscaneadas
		FROM vn.expeditionScan es 
			JOIN vn.expedition e ON e.id = es.expeditionFk
			JOIN vn.ticket t ON t.id = e.ticketFk 
		WHERE t.routeFk = vRouteFk;
	
	SELECT COUNT(*) INTO vEtiquetasLeidasSorter
		FROM srt.expedition e 
			JOIN vn.expedition ve ON ve.id = e.id
			LEFT JOIN vn.expeditionScan es ON es.expeditionFk = e.id
			JOIN vn.ticket t ON t.id = ve.ticketFk 
			WHERE t.routeFk = vRouteFk
				AND e.created != e.updated
				AND ISNULL(es.expeditionFk); 
			
		
	SELECT 	e.ticketFk ticket,
			t.nickname cliente,
			a.city ciudad,
			p.name provincia,
			z.name zonaTicket,
			am.name zonaRuta,
			t.routeFk ruta,
			rm.beachFk ubicacion,
			et.ETD ,
			et.description camion,
			vTicketsPendientes AS ticketsPendientes,
			vEtiquetasTotales AS etiquetasTotales,
			vEtiquetasEscaneadas AS etiquetasEscaneadas,
			vEtiquetasLeidasSorter AS etiquetasSorter
		FROM vn.expedition e 
			JOIN vn.ticket t ON t.id = e.ticketFk 
			JOIN vn.address a ON a.id = t.addressFk 
			JOIN vn.province p ON p.id = a.provinceFk 
			JOIN vn.`zone`z ON z.id = t.zoneFk 
			LEFT JOIN vn.route r ON r.id = t.routeFk 
			LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk 
			LEFT JOIN vn.routesMonitor rm ON rm.routeFk = r.id 
			LEFT JOIN vn.expeditionTruck et ON et.id = rm.expeditionTruckFk 
		WHERE e.id = vExpeditionFk;
	
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 `faultsReview` */;
/*!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 `faultsReview`(vWarehouseFk INT)
BEGIN

    DECLARE vCalcVisibleFk INT;
        
	CALL cache.visible_refresh(vCalcVisibleFk, TRUE, vWarehouseFk);
    
    DROP TEMPORARY TABLE IF EXISTS tmp.itemShelvingRadar;
    
	CREATE TEMPORARY TABLE tmp.itemShelvingRadar
		(PRIMARY KEY (itemFk))
		ENGINE = MEMORY 
		SELECT 	iss.itemFk,
				i.size,
				i.subName producer,
				SUM(IF(s.sonFk, iss.visible,0)) upstairs,
				SUM(IF(s.sonFk, 0, iss.visible)) downstairs,
				v.visible
		FROM vn.itemShelvingStock iss
			JOIN vn.sector s ON s.id = iss.sectorFk
			JOIN vn.item i on i.id = iss.itemFk
			LEFT JOIN cache.visible v  ON v.item_id = iss.itemFk AND v.calc_id = vCalcVisibleFk
			WHERE iss.warehouseFk = vWarehouseFk
		GROUP BY iss.itemFk;
            
		SELECT ishr.*, sub.longName,
				CAST(visible - upstairs - downstairs AS DECIMAL(10,0)) AS nicho,
                CAST(sub.fault AS DECIMAL(10,0)) as faltas
                FROM tmp.itemShelvingRadar ishr
					JOIN (SELECT s.itemFk, s.quantity as fault, s.concept as longName
							FROM vn.sale s
								JOIN vn.ticket t ON t.id = s.ticketFk
                                JOIN vn.client c ON c.id = t.clientFk
                                WHERE c.typeFk = 'loses' COLLATE utf8_unicode_ci
									AND s.isPicked = FALSE
									AND date(t.shipped) = CURDATE()
                                    AND t.warehouseFk = vWarehouseFk
						 ) sub ON sub.itemFk = ishr.itemFk
				;
							

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 `faultsReview_isChecked` */;
/*!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 `faultsReview_isChecked`(vItemFk INT, vWarehouseFk INT)
BEGIN

	UPDATE vn.sale s
		JOIN vn.ticket t ON t.id = s.ticketFk
        JOIN vn.client c ON c.id = t.clientFk
        SET s.isPicked = TRUE
        WHERE c.typeFk = 'loses' COLLATE utf8_unicode_ci
			AND date(t.shipped) = CURDATE()
			AND t.warehouseFk = vWarehouseFk
            AND s.itemFk = vItemFk;

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 `freelance_getInfo` */;
/*!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 `freelance_getInfo`(workerFk INT)
BEGIN
	SELECT s.name, s.street, s.city, s.nif, s.postCode
		FROM route r
			JOIN agencyMode am ON r.agencyModeFk = am.id
			JOIN agency a ON am.agencyFk = a.id
			JOIN supplierAgencyTerm sat ON a.id = sat.agencyFk
			JOIN supplier s ON sat.supplierFk = s.id
		WHERE r.workerFk = workerFk
		ORDER BY r.id DESC
		LIMIT 1;
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 `fustControl` */;
/*!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 `fustControl`(vFromDated DATE, vToDated DATE)
BEGIN
	
	DECLARE vSijsnerClientFk INT DEFAULT 19752;

	DECLARE vDateStart DATETIME;
	DECLARE vDateEnd DATETIME;

	SET vDateStart = vFromDated;
	SET vDateEnd = util.Dayend(vToDated);

	SELECT p.id FustCode, 
			CAST(sent.stucks AS DECIMAL(10,0)) FH, 
			CAST(tp.stucks AS DECIMAL(10,0)) Tickets, 
			CAST(-sj.stucks AS DECIMAL(10,0)) Sijsner, 
			CAST(IFNULL(sent.stucks,0) - IFNULL(tp.stucks,0) + IFNULL(sj.stucks,0) AS DECIMAL(10,0)) saldo
		FROM vn.packaging p
		LEFT JOIN (
			SELECT FustCode, sum(fustQuantity) stucks
				FROM (
				SELECT IFNULL(pe.equivalentFk ,b.packageFk) FustCode, s.quantity / b.packing AS fustQuantity
					FROM vn.sale s 
						JOIN vn.ticket t ON t.id = s.ticketFk 
						JOIN vn.warehouse w ON w.id = t.warehouseFk 
						JOIN vn.warehouseAlias wa ON wa.id = w.aliasFk 
						JOIN cache.last_buy lb ON lb.item_id = s.itemFk AND lb.warehouse_id = t.warehouseFk 
						JOIN vn.buy b ON b.id = lb.buy_id 
						JOIN vn.packaging p ON p.id = b.packageFk 
						LEFT JOIN vn.packageEquivalent pe ON pe.packagingFk = p.id
						JOIN vn.address a ON a.id = t.addressFk 
						JOIN vn.province p2 ON p2.id = a.provinceFk 
						JOIN vn.country c ON c.id = p2.countryFk 
					WHERE t.shipped BETWEEN vDateStart AND vDateEnd
						AND wa.name = 'VNH'
						AND p.isPackageReturnable 
						AND c.country = 'FRANCIA') sub 
					GROUP BY FustCode) sent ON sent.FustCode = p.id
		LEFT JOIN (
			SELECT FustCode, sum(quantity) stucks
				FROM (
				SELECT IFNULL(pe.equivalentFk ,tp.packagingFk) FustCode, tp.quantity
					FROM vn.ticketPackaging tp 
						JOIN vn.ticket t ON t.id = tp.ticketFk 
						JOIN vn.warehouse w ON w.id = t.warehouseFk 
						JOIN vn.warehouseAlias wa ON wa.id = w.aliasFk 
						JOIN vn.packaging p ON p.id = tp.packagingFk 
						LEFT JOIN vn.packageEquivalent pe ON pe.packagingFk = p.id
						JOIN vn.address a ON a.id = t.addressFk 
						JOIN vn.province p2 ON p2.id = a.provinceFk 
						JOIN vn.country c ON c.id = p2.countryFk 
					WHERE t.shipped BETWEEN vDateStart AND vDateEnd
						AND wa.name = 'VNH'
						AND p.isPackageReturnable 
						AND c.country = 'FRANCIA'
						AND t.clientFk != vSijsnerClientFk
						AND tp.quantity > 0) sub 
					GROUP BY FustCode) tp ON tp.FustCode = p.id
		LEFT JOIN (
			SELECT FustCode, sum(quantity) stucks
				FROM (
				SELECT IFNULL(pe.equivalentFk ,tp.packagingFk) FustCode, tp.quantity
					FROM vn.ticketPackaging tp 
						JOIN vn.ticket t ON t.id = tp.ticketFk 
						JOIN vn.warehouse w ON w.id = t.warehouseFk 
						JOIN vn.warehouseAlias wa ON wa.id = w.aliasFk 
						JOIN vn.packaging p ON p.id = tp.packagingFk 
						LEFT JOIN vn.packageEquivalent pe ON pe.packagingFk = p.id
					WHERE t.shipped BETWEEN TIMESTAMPADD(DAY, 1, vDateStart ) AND TIMESTAMPADD(DAY, 1, vDateEnd )
						AND wa.name = 'VNH'
						AND p.isPackageReturnable 
						AND t.clientFk = vSijsnerClientFk) sub 
					GROUP BY FustCode) sj ON sj.FustCode = p.id
		WHERE sent.stucks 
			OR tp.stucks
			OR sj.stucks;

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 `fustControlDetail` */;
/*!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 `fustControlDetail`(vFromDated DATE, vToDated DATE)
BEGIN
	
	DECLARE vSijsnerClientFk INT DEFAULT 19752;

	DECLARE vDateStart DATETIME;
	DECLARE vDateEnd DATETIME;

	SET vDateStart = vFromDated;
	SET vDateEnd = util.Dayend(vToDated);
	
	SELECT a.nickname shopName,
			a.city , 
			IFNULL(pe.equivalentFk ,tp.packagingFk) FustCode, 
			tp.quantity,
			tp.ticketFk,
			CONCAT('From ', vFromDated,' to ', vToDated) AS dateRange
				FROM vn.ticketPackaging tp 
					JOIN vn.ticket t ON t.id = tp.ticketFk 
					JOIN vn.warehouse w ON w.id = t.warehouseFk 
					JOIN vn.warehouseAlias wa ON wa.id = w.aliasFk 
					JOIN vn.packaging p ON p.id = tp.packagingFk 
					LEFT JOIN vn.packageEquivalent pe ON pe.packagingFk = p.id
					JOIN vn.address a ON a.id = t.addressFk 
					JOIN vn.province p2 ON p2.id = a.provinceFk 
					JOIN vn.country c ON c.id = p2.countryFk 
				WHERE t.shipped BETWEEN vFromDated AND util.dayend(vToDated)
					AND wa.name = 'VNH'
					AND p.isPackageReturnable 
					AND c.country = 'FRANCIA'
					AND t.clientFk != vSijsnerClientFk
					AND tp.quantity > 0;
				
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 `fv_pca` */;
/*!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 `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 ;
/*!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 `getDayExpeditions` */;
/*!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 `getDayExpeditions`()
BEGIN

	SELECT 
		e.expeditions_id as expeditionFk, 
        date_format(e.odbc_date,'%Y-%m-%d') as expeditionDate,
        e.ticket_id as ticketFk,
        t.routeFk as routeFk
    FROM vn2008.expeditions  e
    INNER JOIN vn.ticket t ON t.id =  e.ticket_id
    WHERE DATE(odbc_date) = CURDATE();

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 `getInfoDelivery` */;
/*!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 `getInfoDelivery`(vRouteFk INT)
BEGIN
	SELECT s.name, s.street, s.city, s.nif, s.postCode FROM vn.route r
    JOIN vn.agencyMode am ON r.agencyModeFk = am.id
    JOIN vn.agency a ON am.agencyFk = a.id
    JOIN vn.supplier s ON a.supplierFk = s.id
    WHERE r.id = vRouteFk;
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 `getItemUbication` */;
/*!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 `getItemUbication`(vItemFk VARCHAR(22))
BEGIN
	
	/*
	 * @deprecated Utilizar itemShelving_getInfo
	 * 
	 */
	
	CALL itemshelving_getInfo(vItemFk);

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 `getPedidosInternos` */;
/*!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 `getPedidosInternos`()
BEGIN

	SELECT id,name as description,upToDown as  quantity FROM vn.item WHERE upToDown;

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 `greuge_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 `greuge_add`()
BEGIN
/**
 * Group inserts into vn.greuge and then deletes the records just inserted
 */
	DECLARE vDated DATE;

	SELECT DATE_SUB(CURDATE(), INTERVAL yearsToDelete YEAR) INTO vDated
		FROM vn.greugeConfig;
		
	INSERT INTO vn.greuge(clientFk, description, amount, shipped, created, greugeTypeFk)
		SELECT clientFk, 'Suma agrupada', SUM(amount), MAX(shipped), MAX(created), greugeTypeFk
			FROM vn.greuge
			WHERE shipped <= vDated AND description <> 'Suma agrupada'
			GROUP BY clientFk, greugeTypeFk;

	DELETE
		FROM vn.greuge
		WHERE shipped <= vDated AND description <> 'Suma agrupada';
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 `intrastat_data_neto_Update` */;
/*!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 `intrastat_data_neto_Update`(IN vInvoiceInFk INT)
BEGIN

	UPDATE vn2008.intrastat_data id
			JOIN (
				SELECT 	i.intrastatFk,
						LEAST(SUM(b.quantity) * IFNULL(it.gramsMax,100000) / 1000,
						SUM(ic.cm3 * b.quantity) * IF(i.density, i.density, it.density) / 1000000)  as neto
					FROM entry e 
						JOIN travel tr ON tr.id = e.travelFk
						JOIN buy b ON b.entryFk = e.id
						JOIN item i ON i.id = b.itemFk
		                join itemType it ON it.id = i.typeFk
						JOIN itemCost ic ON ic.itemFk = i.id AND tr.warehouseInFk = ic.warehouseFk 
					WHERE e.invoiceInFk = vinvoiceInFk
					GROUP BY i.intrastatFk) sub ON sub.intrastatFk = id.intrastat_id
		SET id.neto = ROUND(sub.neto, 1)
		WHERE id.recibida_id = vInvoiceInFk;
    

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 `inventoryFailureAdd` */;
/*!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 `inventoryFailureAdd`()
BEGIN

DECLARE done BOOL DEFAULT FALSE;
DECLARE vTicketFk INT;

DECLARE rs CURSOR FOR
		SELECT id FROM vn.ticket 
			WHERE shipped = util.yesterday() 
				AND clientFk = 400
                AND warehouseFk IN (1,44);

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN rs;

FETCH rs INTO vTicketFk;

WHILE NOT done DO
   
    INSERT INTO vn.inventoryFailure(dated, itemFk, quantity, value, warehouseFk, throwerFk)
		SELECT 	t.shipped, 
				s.itemFk, 
				s.quantity, 
				b.buyingValue + b.freightValue + b.packageValue + b.comissionValue,
				t.warehouseFk, 
				w.id
			FROM vn.ticket t
				JOIN vn.sale s ON s.ticketFk = t.id
				LEFT JOIN cache.last_buy lb ON lb.warehouse_id = t.warehouseFk AND item_id = s.itemFk
				LEFT JOIN vn.buy b ON b.id = lb.buy_id
				LEFT JOIN vn.worker w ON w.code = LEFT(s.concept, 3)
		WHERE t.id = vTicketFk
			AND s.quantity > 0;

	FETCH rs INTO vTicketFk;
    
END WHILE;


CLOSE rs;




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 `inventoryMake` */;
/*!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 `inventoryMake`(vDate DATE, vWh INT)
proc: BEGIN
/**
* Recalcula los inventarios de todos los almacenes, si vWh = 0
*
* @param vDate Fecha de los nuevos inventarios
* @param vWh almacen al cual hacer el inventario
*/

	DECLARE vDone BOOL;
	DECLARE vEntryFk INT;
	DECLARE vTravelFk INT;
	DECLARE vDateLastInventory DATE;
	DECLARE vDateYesterday DATETIME DEFAULT TIMESTAMPADD(SECOND,-1,vDate);

	DECLARE cWarehouses CURSOR FOR
		SELECT id
			FROM warehouse
			WHERE isInventory
				AND vWh IN (0,id);

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	SELECT vDateYesterday;

	OPEN cWarehouses;
	SET @isModeInventory := TRUE;
	l: LOOP

		SET vDone = FALSE;
		FETCH cWarehouses INTO vWh;

		IF vDone THEN
			LEAVE l;
		END IF;

		SELECT MAX(landed) INTO vDateLastInventory
			FROM travel tr
			JOIN entry e ON e.travelFk = tr.id
			JOIN buy b ON b.entryFk = e.id
			WHERE warehouseOutFk = 13
				AND landed < vDate
				AND e.supplierFk = 4
				AND warehouseInFk = vWh
				AND NOT isRaid;

		IF vDateLastInventory IS NULL THEN
			SELECT inventoried INTO vDateLastInventory FROM config;
		END IF;

		-- Generamos travel, si no existe.
		SET vTravelFK = 0;

		SELECT id INTO vTravelFk
			FROM travel
			WHERE warehouseOutFk = 13
				AND warehouseInFk = vWh
				AND landed = vDate
				AND agencyModeFk = 53
				AND ref = 'inventario'
			LIMIT 1;

		IF NOT vTravelFK THEN

			INSERT INTO travel SET
				warehouseOutFk = 13,
				warehouseInFk = vWh,
				shipped = vDate,
				landed = vDate,
				agencyModeFk = 53,
				ref = 'inventario',
				isDelivered = TRUE,
				isReceived = TRUE;

			SELECT LAST_INSERT_ID() INTO vTravelFk;

		END IF;

		-- Generamos entrada si no existe, o la vaciamos.
		SET vEntryFk = 0;

		SELECT id INTO vEntryFk
			FROM entry
			WHERE supplierFk = 4
			AND travelFk = vTravelFk;

		IF NOT vEntryFk THEN

			INSERT INTO entry SET
				supplierFk = 4,
				isConfirmed = TRUE,
				isOrdered = TRUE,
				travelFk = vTravelFk;

			SELECT LAST_INSERT_ID() INTO vEntryFk;

		ELSE

			DELETE FROM buy WHERE entryFk = vEntryFk;

		END IF;

		-- Preparamos tabla auxilar
		DROP TEMPORARY TABLE IF EXISTS tmp.inventory;

		CREATE TEMPORARY TABLE tmp.inventory
		(
		itemFk INT(11) NOT NULL PRIMARY KEY,
		quantity int(11) DEFAULT '0',
		buyingValue decimal(10,3) DEFAULT '0.000',
		freightValue decimal(10,3) DEFAULT '0.000',
		packing int(11) DEFAULT '0',
		`grouping` smallint(5) unsigned NOT NULL DEFAULT '1',
		groupingMode tinyint(4) NOT NULL DEFAULT 0 ,
		comissionValue decimal(10,3) DEFAULT '0.000',
		packageValue decimal(10,3) DEFAULT '0.000',
		packageFk varchar(10) COLLATE utf8_unicode_ci DEFAULT '--',
		price1 decimal(10,2) DEFAULT '0.00',
		price2 decimal(10,2) DEFAULT '0.00',
		price3 decimal(10,2) DEFAULT '0.00',
		minPrice decimal(10,2) DEFAULT '0.00',
		producer varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
			INDEX (itemFK))
		ENGINE = MEMORY ;

		-- Compras
		INSERT INTO tmp.inventory(itemFk,quantity)
			SELECT b.itemFk, sum(b.quantity)
				FROM buy b
				JOIN entry e ON e.id = b.entryFk
				JOIN travel tr ON tr.id = e.travelFk
				WHERE tr.warehouseInFk = vWh
					AND tr.landed BETWEEN vDateLastInventory 
					AND vDateYesterday
					AND NOT isRaid
				GROUP BY b.itemFk;
	SELECT vDateLastInventory , vDateYesterday;

		-- Traslados
		INSERT INTO tmp.inventory(itemFk,quantity)
			SELECT itemFk, quantityOut
			FROM (
					SELECT b.itemFk, -sum(b.quantity) quantityOut
						FROM buy b
						JOIN entry e ON e.id = b.entryFk
						JOIN travel tr ON tr.id = e.travelFk
						WHERE tr.warehouseOutFk = vWh
							AND tr.shipped BETWEEN vDateLastInventory
							AND vDateYesterday
							AND NOT isRaid
						GROUP BY b.itemFk
				) sub
			ON DUPLICATE KEY UPDATE quantity = IFNULL(quantity,0) + sub.quantityOut;

		-- Ventas
		INSERT INTO tmp.inventory(itemFk,quantity)
			SELECT itemFk, saleOut
			FROM (
					SELECT s.itemFk, -sum(s.quantity) saleOut
						FROM sale s
						JOIN ticket t ON t.id = s.ticketFk
						WHERE t.warehouseFk = vWh
							AND t.shipped BETWEEN vDateLastInventory AND vDateYesterday
						GROUP BY s.itemFk
				) sub
			ON DUPLICATE KEY UPDATE quantity =  IFNULL(quantity,0) + sub.saleOut;

		-- Actualiza valores de la ultima compra
		UPDATE tmp.inventory inv
			JOIN cache.last_buy lb ON lb.item_id = inv.itemFk AND lb.warehouse_id = vWh
			JOIN buy b ON b.id = lb.buy_id
			SET
				inv.buyingValue 	= b.buyingValue,
				inv.freightValue 	= b.freightValue,
				inv.packing 		= b.packing,
				inv.`grouping` 		= b.`grouping`,
				inv.groupingMode 	= b.groupingMode,
				inv.comissionValue = b.comissionValue,
				inv.packageValue 	= b.packageValue,
				inv.packageFk 		= b.packageFk,
				inv.price1 			= b.price1,
				inv.price2 			= b.price2,
				inv.price3 			= b.price3,
				inv.minPrice 		= b.minPrice,
				inv.producer 		= b.producer;

	
		INSERT INTO buy(	itemFk,
							quantity,
							buyingValue,
							freightValue,
							packing,
							`grouping`,
							groupingMode,
							comissionValue,
							packageValue,
							packageFk,
							price1,
							price2,
							price3,
							minPrice,
							producer,
							entryFk)
			SELECT 	itemFk,
					GREATEST(quantity,0),
					buyingValue,
					freightValue,
					packing,
					`grouping`,
					groupingMode,
					comissionValue,
					packageValue,
					packageFk,
					price1,
					price2,
					price3,
					minPrice,
					producer,
					vEntryFk
				FROM tmp.inventory;

		SELECT vWh, count(*), NOW() FROM tmp.inventory;
	
	-- Actualizamos el campo lastUsed de vn.item
	UPDATE vn.item i
		JOIN tmp.inventory i2 ON i2.itemFk = i.id
		SET i.lastUsed = NOW()
		WHERE i2.quantity;
		
	-- DROP TEMPORARY TABLE tmp.inventory;
		
	END LOOP;

	CLOSE cWarehouses;

	UPDATE config SET inventoried = vDate;
	SET @isModeInventory := FALSE;

	DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
	CREATE TEMPORARY TABLE tmp.entryToDelete
		(INDEX(entryId) USING BTREE) ENGINE = MEMORY
		SELECT e.id as entryId,
		t.id as travelId
			FROM vn.travel t
				JOIN vn.entry e ON e.travelFk = t.id 
			WHERE e.supplierFk = 4
				AND t.shipped <= TIMESTAMPADD(DAY, -2, TIMESTAMPADD(DAY, -10, CURDATE()))
				AND (DAY(t.shipped) <> 1 OR shipped < TIMESTAMPADD(MONTH, -12, CURDATE()));
			
	DELETE e
		FROM vn.entry e
			JOIN tmp.entryToDelete tmp ON tmp.entryId = e.id;

	DELETE IGNORE t
		FROM vn.travel t
			JOIN tmp.entryToDelete tmp ON tmp.travelId = 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 `inventoryMakeLauncher` */;
/*!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 `inventoryMakeLauncher`()
BEGIN
/**
 * Recalcula los inventarios de todos los almacenes.
 */

	call vn.inventoryMake(TIMESTAMPADD(DAY, -10, CURDATE()), 0);

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 `inventory_repair` */;
/*!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 `inventory_repair`()
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.lastEntry;
	CREATE TEMPORARY TABLE tmp.lastEntry
	(PRIMARY KEY (buyFk))
	SELECT
			i.id AS itemFk,
			w.id AS warehouseFk,
			w.name AS warehouse,
			tr.landed,
			b.id AS buyFk,
			b.entryFk,
			b.isIgnored,
			b.price2, 
			b.price3,
			b.stickers,
			b.packing,
			b.grouping,
			b.groupingMode,
			b.weight,
			i.stems,
			b.quantity,
			b.buyingValue,
			b.packageFk ,
			s.id AS supplierFk,
			s.name AS supplier
		FROM itemType it
		RIGHT JOIN (entry e 
				LEFT JOIN supplier s ON s.id = e.supplierFk
				RIGHT JOIN buy b ON b.entryFk = e.id
				LEFT JOIN item i ON i.id = b.itemFk
				LEFT JOIN ink ON ink.id = i.inkFk 
				LEFT JOIN travel tr ON tr.id = e.travelFk
				LEFT JOIN warehouse w ON w.id = tr.warehouseInFk
				LEFT JOIN origin o ON o.id = i.originFk
				) ON it.id = i.typeFk
		LEFT JOIN edi.ekt ek ON b.ektFk = ek.id
		WHERE (b.packageFk = "--" OR b.price2 = 0 OR b.packing = 0 OR b.buyingValue = 0) AND tr.landed > util.firstDayOfMonth(TIMESTAMPADD(MONTH,-1,CURDATE())) AND s.name = 'INVENTARIO';
	  
	DROP TEMPORARY TABLE IF EXISTS tmp.lastEntryOk;
	CREATE TEMPORARY TABLE tmp.lastEntryOk  
	(PRIMARY KEY (buyFk))
	  SELECT
			i.id AS itemFk,
			w.id AS warehouseFk,
			w.name AS warehouse,
			tr.landed,
			b.id AS buyFk,
			b.entryFk,
			b.isIgnored,
			b.price2, 
			b.price3,
			b.stickers,
			b.packing,
			b.grouping,
			b.groupingMode,
			b.weight,
			i.stems,
			b.quantity,
			b.buyingValue,
			b.packageFk ,
			s.id AS supplierFk,
			s.name AS supplier
		FROM itemType it
		RIGHT JOIN (entry e 
				LEFT JOIN supplier s ON s.id = e.supplierFk
				RIGHT JOIN buy b ON b.entryFk = e.id
				LEFT JOIN item i ON i.id = b.itemFk
				LEFT JOIN ink ON ink.id = i.inkFk 
				LEFT JOIN travel tr ON tr.id = e.travelFk
				LEFT JOIN warehouse w ON w.id = tr.warehouseInFk
				LEFT JOIN origin o ON o.id = i.originFk
				) ON it.id = i.typeFk
		LEFT JOIN edi.ekt ek ON b.ektFk = ek.id
		WHERE b.packageFk != "--" AND b.price2 != 0 AND b.packing != 0 AND b.buyingValue > 0 AND tr.landed > util.firstDayOfMonth(TIMESTAMPADD(MONTH,-2,CURDATE()))
		ORDER BY tr.landed DESC;
		
	DROP TEMPORARY TABLE IF EXISTS tmp.lastEntryOkGroup;
	CREATE TEMPORARY TABLE tmp.lastEntryOkGroup  
	(INDEX (warehouseFk,itemFk))
	  SELECT *
		FROM tmp.lastEntryOk tmp
		GROUP BY tmp.itemFk,tmp.warehouseFk;
		
		UPDATE buy b
		JOIN tmp.lastEntry lt ON lt.buyFk = b.id
		JOIN tmp.lastEntryOkGroup eo ON eo.itemFk = lt.itemFk AND eo.warehouseFk = lt.warehouseFk
		SET b.packageFk = eo.packageFk WHERE b.packageFk = "--";
		
		UPDATE buy b
		JOIN tmp.lastEntry lt ON lt.buyFk = b.id
		JOIN tmp.lastEntryOkGroup eo ON eo.itemFk = lt.itemFk AND eo.warehouseFk = lt.warehouseFk
		 SET b.price2 = eo.price2 WHERE  b.price2 = 0 ;
		
		UPDATE buy b
		JOIN tmp.lastEntry lt ON lt.buyFk = b.id
		JOIN tmp.lastEntryOkGroup eo ON eo.itemFk = lt.itemFk AND eo.warehouseFk = lt.warehouseFk
		SET b.packing = eo.packing WHERE b.packing = 0;
		
		UPDATE buy b
		JOIN tmp.lastEntry lt ON lt.buyFk = b.id
		JOIN tmp.lastEntryOkGroup eo ON eo.itemFk = lt.itemFk AND eo.warehouseFk = lt.warehouseFk
		SET b.buyingValue = eo.buyingValue WHERE  b.buyingValue = 0;
    
		DROP TEMPORARY TABLE tmp.lastEntry;
        DROP TEMPORARY TABLE tmp.lastEntryOk;
    	DROP TEMPORARY TABLE tmp.lastEntryOkGroup;
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 `invoiceExpenceMake` */;
/*!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 `invoiceExpenceMake`(IN vInvoice INT)
BEGIN
/* Inserta las partidas de gasto correspondientes a la factura
 * REQUIERE tabla ticketToInvoice
 * @param vInvoice Numero de factura
 */
	DELETE FROM invoiceOutExpence
		WHERE invoiceOutFk = vInvoice;

	INSERT INTO invoiceOutExpence(invoiceOutFk, expenceFk, amount)
		SELECT vInvoice,
			   expenceFk,
			   SUM(ROUND(quantity * price * (100 - discount)/100,2)) amount
			FROM ticketToInvoice t
				JOIN sale s ON s.ticketFk = t.id
				JOIN item i ON i.id = s.itemFk
			GROUP BY i.expenceFk
			HAVING amount != 0;
              
	INSERT INTO invoiceOutExpence(invoiceOutFk, expenceFk, amount)
		SELECT vInvoice,
			   tst.expenceFk,
			   SUM(ROUND(ts.quantity * ts.price ,2)) amount
			FROM ticketToInvoice t
				JOIN ticketService ts ON ts.ticketFk = t.id
                JOIN ticketServiceType tst ON tst.id = ts.ticketServiceTypeFk
            HAVING amount != 0;     
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 `invoiceFromAddress` */;
/*!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 `invoiceFromAddress`(vMaxTicketDate DATETIME,vAddress INT,vCompany INT)
BEGIN    

	DECLARE vMinDateTicket DATE DEFAULT TIMESTAMPADD(MONTH, -3, CURDATE());
    
	SET vMaxTicketDate = vn2008.DAYEND(vMaxTicketDate);
    
	DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
    
	CREATE TEMPORARY TABLE `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;

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 `invoiceFromClient` */;
/*!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 `invoiceFromClient`(IN vMaxTicketDate datetime, IN vClientFk INT, IN vCompanyFk INT)
BEGIN
	DECLARE vMinTicketDate DATE DEFAULT TIMESTAMPADD(YEAR, -3, CURDATE());
    SET vMaxTicketDate = util.dayend(vMaxTicketDate);
    
	DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
	CREATE TEMPORARY TABLE `ticketToInvoice`
		(PRIMARY KEY  (`id`))
        ENGINE = MEMORY
			SELECT id FROM ticket t
				WHERE t.clientFk = vClientFk
                    AND t.refFk IS NULL
                    AND t.companyFk = vCompanyFk
                    AND (t.shipped BETWEEN vMinTicketDate AND vMaxTicketDate);
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 `invoiceFromTicket` */;
/*!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 `invoiceFromTicket`(IN vTicket INT)
BEGIN    

	DROP TEMPORARY TABLE IF EXISTS `ticketToInvoice`;
    
	CREATE TEMPORARY TABLE `ticketToInvoice`
	(PRIMARY KEY  (`id`))
        ENGINE = MEMORY
        SELECT id FROM vn.ticket
            WHERE id = vTicket AND refFk IS NULL;

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 `invoiceInBookingCommon` */;
/*!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 `invoiceInBookingCommon`(vInvoiceInId INT, OUT vSerialNumber INT)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS newInvoiceIn;

	CREATE TEMPORARY TABLE newInvoiceIn
		SELECT 
				i.*,
				YEAR(i.booked) datedYear,
				CONCAT('s/fra',RIGHT(i.supplierRef,8),':',LEFT(s.name, 10)) conceptWithSupplier, 
				(cc.id = c.id) isSameCountry,
				cit.id invoicesCount
			FROM invoiceIn i
				JOIN cplusInvoiceType472 cit ON cit.id = i.cplusInvoiceType472Fk
				JOIN supplier s ON s.id = i.supplierFk
				JOIN country c ON c.id = s.countryFk
				JOIN supplier sc ON sc.id = i.companyFk
				JOIN country cc ON cc.id = sc.countryFk
			WHERE i.id = vInvoiceInId;

	DROP TEMPORARY TABLE IF EXISTS newSupplier;
	CREATE TEMPORARY TABLE newSupplier
		SELECT 
                s.*,
                REPLACE(s.account,' ','') supplierAccount,
                IF(c.CEE < 2, TRUE, FALSE) isUeeMember
            FROM supplier s
                JOIN newInvoiceIn n
                JOIN country c ON c.id = s.countryFk
            WHERE s.id = n.supplierFk;

	IF (SELECT isActive FROM newSupplier) = 0 THEN
		CALL util.throw('INACTIVE_PROVIDER');
	END IF;

    SELECT IFNULL(MAX(i.serialNumber) + 1,1) 
			INTO vSerialNumber
		FROM invoiceIn i
			JOIN newInvoiceIn n
		WHERE i.serial LIKE n.serial 
			AND YEAR(i.booked) = n.datedYear
			AND i.companyFk = n.companyFk
		GROUP BY i.companyFk;

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 `invoiceInBookingMain` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceInBookingMain`(vInvoiceInId INT)
BEGIN
	DECLARE vTotalAmount,vTotalAmountDivisa DECIMAL(10,2);
	DECLARE vBookNumber,vSerialNumber INT;
	DECLARE vRate DECIMAL(10,4);

	CALL invoiceInBookingCommon(vInvoiceInId,vSerialNumber);

	SELECT SUM(iit.taxableBase * IF( i.serial= 'R' AND ti.Iva <> 'HP DEVENGADO 21 ISP', 1 +(ti.PorcentajeIva/100),1)), 
			SUM(iit.foreignValue * IF( i.serial= 'R', 1 + (ti.PorcentajeIva/100),1)),
			iit.taxableBase/iit.foreignValue
			INTO vTotalAmount, vTotalAmountDivisa, vRate
		FROM newInvoiceIn i
			JOIN invoiceInTax iit ON iit.invoiceInFk = i.id
			LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk;

	CALL vn.ledger_next(vBookNumber);

	-- Apunte del proveedor

	INSERT INTO XDiario(ASIEN,
			FECHA,
			SUBCTA,
			EUROHABER,
			CONCEPTO,
			CAMBIO,
			HABERME,
			NFACTICK,
			CLAVE,
			empresa_id
			)
		SELECT 
			vBookNumber,
			n.bookEntried,
			s.supplierAccount,
			vTotalAmount EUROHABER,
			n.conceptWithSupplier,
			vRate,
			vTotalAmountDivisa,
			n.invoicesCount,
			vInvoiceInId,
			n.companyFk
		FROM newInvoiceIn n 
			JOIN newSupplier s;

	-- Línea de Gastos
	INSERT INTO XDiario ( ASIEN,
			FECHA,
			SUBCTA,
			CONTRA,
			EURODEBE,
			EUROHABER,
			CONCEPTO, 
			CAMBIO,
			DEBEME,
			HABERME,
			NFACTICK,
			empresa_id
			)
		SELECT vBookNumber ASIEN,
				n.bookEntried FECHA,
				IF(e.isWithheld , LPAD(RIGHT(s.supplierAccount,5),10,iit.expenceFk),iit.expenceFk) SUBCTA,
				s.supplierAccount CONTRA,
				IF(e.isWithheld AND iit.taxableBase < 0, NULL, ROUND(SUM(iit.taxableBase),2)) EURODEBE,
				IF(e.isWithheld AND iit.taxableBase < 0,ROUND(SUM(-iit.taxableBase),2),NULL) EUROHABER,
				n.conceptWithSupplier CONCEPTO,
				vRate,
				IF(e.isWithheld,NULL,ABS(ROUND(SUM(iit.foreignValue),2))) DEBEME,
				IF(e.isWithheld,ABS(ROUND(SUM(iit.foreignValue),2)),NULL) HABERME,
				n.invoicesCount NFACTICK,
				n.companyFk empresa_id
			FROM newInvoiceIn n
				JOIN newSupplier s 
				JOIN invoiceInTax iit ON iit.invoiceInFk = n.id
				JOIN (SELECT * FROM expence e GROUP BY e.id)e ON e.id = iit.expenceFk
			WHERE e.name != 'Suplidos Transitarios nacionales'
			GROUP BY iit.expenceFk;

	-- Líneas de IVA

	INSERT INTO XDiario( ASIEN,
			FECHA,
			SUBCTA,
			CONTRA, 
			EURODEBE,
			BASEEURO,
			CONCEPTO, 
			FACTURA, 
			IVA,
			AUXILIAR, 
			SERIE,
			TIPOOPE,
			FECHA_EX,
			FECHA_OP,
			NFACTICK,
			FACTURAEX,
			L340,
			LRECT349,
			TIPOCLAVE,
			TIPOEXENCI,
			TIPONOSUJE,
			TIPOFACT,
			TIPORECTIF,
			TERIDNIF,
			TERNIF,
			TERNOM,
			FECREGCON,
			empresa_id
			)
		SELECT vBookNumber ASIEN,
				n.bookEntried FECHA,
				IF(n.expenceFkDeductible>0, n.expenceFkDeductible, ti.CuentaIvaSoportado) SUBCTA,
				s.supplierAccount CONTRA,
				SUM(ROUND(ti.PorcentajeIva * it.taxableBase / 100 /* + 0.0001*/ , 2)) EURODEBE,
				SUM(it.taxableBase) BASEEURO,
				GROUP_CONCAT(DISTINCT e.`name` SEPARATOR ', ') CONCEPTO,
				vSerialNumber FACTURA,
				ti.PorcentajeIva IVA,
				IF(isUeeMember AND eWithheld.id IS NULL,'','*') AUXILIAR,
				n.serial SERIE,
				ttr.ClaveOperacionDefecto,
				n.issued FECHA_EX,
				n.operated FECHA_OP,
				n.invoicesCount NFACTICK,
				n.supplierRef FACTURAEX,
				TRUE L340,
				(isSameCountry OR NOT isUeeMember) LRECT349,
				n.cplusTrascendency472Fk TIPOCLAVE,
				n.cplusTaxBreakFk TIPOEXENCI,
				n.cplusSubjectOpFk TIPONOSUJE,
				n.cplusInvoiceType472Fk TIPOFACT,
				n.cplusRectificationTypeFk TIPORECTIF,
				iis.cplusTerIdNifFk TERIDNIF,
				s.nif AS TERNIF,
				s.name AS TERNOM,
				n.booked FECREGCON,
				n.companyFk
			FROM newInvoiceIn n
				JOIN newSupplier s 
				JOIN invoiceInTax it ON n.id = it.invoiceInFk
				JOIN sage.TiposIva ti ON ti.CodigoIva = it.taxTypeSageFk
				JOIN sage.TiposTransacciones ttr ON ttr.CodigoTransaccion = it.transactionTypeSageFk
				JOIN invoiceInSerial iis ON iis.code = n.serial
				JOIN (SELECT * FROM expence e GROUP BY e.id)e ON e.id = it.expenceFk
				LEFT JOIN (
					SELECT eWithheld.id 
						FROM invoiceInTax hold 
							JOIN expence eWithheld ON eWithheld.id = hold.expenceFk AND eWithheld.isWithheld 
						WHERE hold.invoiceInFk = vInvoiceInId LIMIT 1
						) eWithheld ON TRUE 
			WHERE it.taxTypeSageFk IS NOT NULL 
				AND it.taxTypeSageFk NOT IN (22, 90)
			GROUP BY ti.PorcentajeIva, e.id;

	-- Línea iva inversor sujeto pasivo
 
	INSERT INTO XDiario( ASIEN,
			FECHA,
			SUBCTA,
			CONTRA, 
			EUROHABER,
			BASEEURO,
			CONCEPTO, 
			FACTURA, 
			IVA,
			AUXILIAR, 
			SERIE,
			TIPOOPE,
			FECHA_EX,
			FECHA_OP,
			NFACTICK,
			FACTURAEX,
			L340,
			LRECT349,
			TIPOCLAVE,
			TIPOEXENCI,
			TIPONOSUJE,
			TIPOFACT,
			TIPORECTIF,
			TERIDNIF,
			TERNIF,
			TERNOM,
			empresa_id
			)
		SELECT vBookNumber ASIEN,
				n.bookEntried FECHA,
				ti.CuentaIvaRepercutido SUBCTA,
				s.supplierAccount CONTRA,
				SUM(ROUND(ti.PorcentajeIva * it.taxableBase / 100,2)) EUROHABER,
				ROUND(SUM(it.taxableBase),2) BASEEURO,
				GROUP_CONCAT(DISTINCT e.`name` SEPARATOR ', ') CONCEPTO,
				vSerialNumber FACTURA,
				ti.PorcentajeIva IVA,
				'*' AUXILIAR,
				n.serial SERIE,
				ttr.ClaveOperacionDefecto,
				n.issued FECHA_EX,
				n.operated FECHA_OP,
				n.invoicesCount NFACTICK,
				n.supplierRef FACTURAEX,
				FALSE L340,
				(isSameCountry OR NOT isUeeMember) LRECT349,
				1 TIPOCLAVE,
				n.cplusTaxBreakFk TIPOEXENCI,
				n.cplusSubjectOpFk TIPONOSUJE,
				n.cplusInvoiceType472Fk TIPOFACT,
				n.cplusRectificationTypeFk TIPORECTIF,
				iis.cplusTerIdNifFk TERIDNIF,
				s.nif AS TERNIF,
				s.name AS TERNOM,
				n.companyFk
			FROM newInvoiceIn n 
				JOIN newSupplier s 
				JOIN invoiceInTax it ON n.id = it.invoiceInFk
				JOIN sage.TiposIva ti ON ti.CodigoIva = it.taxTypeSageFk
				JOIN sage.TiposTransacciones ttr ON ttr.CodigoTransaccion = it.transactionTypeSageFk
				JOIN invoiceInSerial iis ON iis.code = n.serial 
				JOIN (SELECT * FROM expence e GROUP BY e.id)e ON e.id = it.expenceFk
			WHERE ti.Iva = 'HP DEVENGADO 21 ISP' OR MID(s.account, 4, 1) = '1'
			GROUP BY ti.PorcentajeIva, e.id;
		
	-- Actualización del registro original		
	UPDATE invoiceIn ii
			JOIN newInvoiceIn ni ON ii.id = ni.id
		SET ii.serialNumber = vSerialNumber,
			ii.isBooked = TRUE;
	
	-- Problemas derivados de la precisión en los decimales al calcular los impuestos
	UPDATE XDiario 
		SET EURODEBE = EURODEBE - 
			(SELECT IF(ABS(sub.difference) = 0.01, sub.difference, 0)
				FROM(
					SELECT SUM(IFNULL(ROUND(EURODEBE, 2),0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0)) difference 
						FROM XDiario
						WHERE ASIEN = vBookNumber
					)sub
			)
		WHERE ASIEN = vBookNumber 
			AND EURODEBE <> 0
		ORDER BY id DESC
		LIMIT 1;
	
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 `invoiceInDueDay_calculate` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceInDueDay_calculate`(vInvoiceInFk INT)
BEGIN

    IF !(SELECT COUNT(*)
            FROM invoiceInDueDay iid 
            WHERE iid.invoiceInFk = vInvoiceInFk) THEN

        INSERT INTO invoiceInDueDay (invoiceInFk, 
                                    dueDated, 
                                    amount, 
                                    foreignValue) 
            SELECT vInvoiceInFk,
                    IF(payDay, 
                        IF(vn.getNextDueDate(issued, detail, payDay) < DATE_ADD(created, INTERVAL 2 DAY),
                            DATE_ADD(created, INTERVAL 2 DAY),
                            vn.getNextDueDate(issued, detail, payDay)), 
                        GREATEST(TIMESTAMPADD(DAY, 2, created), TIMESTAMPADD(DAY, detail, issued))),
                    IF((@cont:=@cont + 1) < cont, TRUNCATE(venc / cont, 2),venc-(TRUNCATE(venc / cont, 2) * (cont - 1))),  
                    IF(@cont < cont, TRUNCATE(foreignValue / cont, 2), foreignValue - (TRUNCATE(foreignValue / cont, 2) * (cont - 1)))  
                FROM ( SELECT SUM((1 + (IFNULL(ti.PorcentajeIva, 0) / 100)*(s.countryFk = s2.countryFk)) * iit.taxableBase)/COUNT(DISTINCT(pdd.detail)) venc,  
                            SUM(iit.foreignValue)/COUNT(DISTINCT(pdd.detail)) foreignValue,
                            s.payDemFk,  
                            ii.companyFk,
                            COUNT(DISTINCT(pdd.detail)) cont,
                            s.payDay,
                            ii.issued,
                            DATE(ii.created) created
                        FROM invoiceIn ii 
                            JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id 
                            LEFT JOIN sage.TiposIva AS ti ON ti.CodigoIva= iit.taxTypeSageFk 
                            JOIN supplier s ON s.id = ii.supplierFk  
                            JOIN supplier s2 ON s2.id = ii.companyFk 
                            JOIN vn.payDemDetail pdd ON pdd.id = s.payDemFk 
                        WHERE ii.id = vInvoiceInFk   
                        GROUP BY ii.id
                        ) sub
                    JOIN (SELECT @cont:=0) sub2 
                    JOIN vn.payDemDetail pdd ON pdd.id = sub.payDemFk
                GROUP BY detail;
    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 `invoiceInDueDay_recalc` */;
/*!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 `invoiceInDueDay_recalc`(vInvoiceInFk INT)
BEGIN

	DELETE FROM invoiceInDueDay
		WHERE invoiceInFk = vInvoiceInFk;
		
	CALL invoiceInDueDay_calculate(vInvoiceInFk);
         
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 `invoiceInTaxMakeByDua` */;
/*!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 `invoiceInTaxMakeByDua`(vDuaFk INT)
BEGIN

	DECLARE done BOOL DEFAULT FALSE;
	DECLARE vInvoiceInFk INT;

	DECLARE rs CURSOR FOR
			SELECT invoiceInFk
				FROM entry e
					JOIN duaEntry de ON de.entryFk = e.id
				WHERE de.duaFk = vDuaFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;

	FETCH rs INTO vInvoiceInFk;

	WHILE NOT done DO

		CALL vn2008.recibidaIvaInsert(vInvoiceInFk);
        CALL vn2008.recibidaVencimientoReplace(vInvoiceInFk);
        
		FETCH rs INTO vInvoiceInFk;

	END WHILE;

	CLOSE rs;

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 `invoiceInTax_getFromDua` */;
/*!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 `invoiceInTax_getFromDua`(vDuaFk INT)
BEGIN

	DECLARE done BOOL DEFAULT FALSE;
	DECLARE vInvoiceInFk INT;

	DECLARE rs CURSOR FOR
		SELECT invoiceInFk
			FROM entry e
				JOIN duaEntry de ON de.entryFk = e.id
			WHERE de.duaFk = vDuaFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;

	FETCH rs INTO vInvoiceInFk;

	WHILE NOT done DO

		CALL invoiceInTax_getFromEntries(vInvoiceInFk);
		CALL invoiceInDueDay_calculate(vInvoiceInFk);
        
		FETCH rs INTO vInvoiceInFk;

	END WHILE;

	CLOSE rs;

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 `invoiceInTax_getFromEntries` */;
/*!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 `invoiceInTax_getFromEntries`(IN vId INT)
BEGIN
	DECLARE vRate DOUBLE DEFAULT 1;
	DECLARE vDated DATE;
	DECLARE vExpenceFk VARCHAR(10);

	SELECT MAX(rr.dated) INTO vDated
		FROM referenceRate rr
			JOIN invoiceIn ii ON ii.id = vId
		WHERE rr.dated <= ii.issued 
			AND rr.currencyFk = ii.currencyFk ;

	IF vDated THEN
		SELECT `value` INTO vRate
			FROM referenceRate
			WHERE dated = vDated;
	END IF;

	SELECT id INTO vExpenceFk 
		FROM vn.expence 
		WHERE `name` = 'Adquisición mercancia Extracomunitaria' 
		GROUP BY id 
		LIMIT 1;
		
	DELETE FROM invoiceInTax 
		WHERE invoiceInFk = vId;

	INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, foreignValue, taxTypeSageFk, transactionTypeSageFk)
		SELECT ii.id,
			SUM(b.buyingValue * b.quantity) / IFNULL(vRate,1) taxableBase,
			vExpenceFk,
			IF(ii.currencyFk = 1,NULL,SUM(b.buyingValue * b.quantity )) divisa,
			taxTypeSageFk,
			transactionTypeSageFk
			FROM invoiceIn ii
				JOIN entry e ON e.invoiceInFk = ii.id
				JOIN supplier s ON s.id = e.supplierFk
				JOIN buy b ON b.entryFk = e.id
				LEFT JOIN referenceRate rr ON rr.currencyFk = ii.currencyFk 
					AND rr.dated = ii.issued
			WHERE ii.id = vId 
			HAVING taxableBase IS NOT NULL;
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 */ ;
/*!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 `invoiceOutAgain`(IN vInvoiceRef VARCHAR(15), vTaxArea VARCHAR(25))
BEGIN

/* Para tickets ya facturados, vuelve a repetir el proceso de facturación.
*
* @param vInvoiceFk Numero de factura
* @param vTaxArea Numero de factura
*/

	DECLARE vInvoiceFk INT;
    DECLARE vCountry INT;
    DECLARE vTaxArea VARCHAR(15);
    DECLARE vSpainCountryCode INT DEFAULT 1;
    
	SELECT id INTO vInvoiceFk
		FROM invoiceOut 
        WHERE ref =  vInvoiceRef;
        
	UPDATE invoiceOut 
		SET hasPdf = 0
        WHERE id = vInvoiceFk;
        
	SELECT s.countryFk INTO vCountry
		FROM supplier s
			JOIN invoiceOut io ON io.companyFk = s.id
		WHERE io.id = vInvoiceFk;

	DROP TEMPORARY TABLE IF EXISTS ticketToInvoice;

	CREATE TEMPORARY TABLE ticketToInvoice
        SELECT id 
            FROM ticket 
            WHERE refFk = vInvoiceRef;

	CALL invoiceExpenceMake(vInvoiceFk);
    
	CALL invoiceTaxMake(vInvoiceFk,vTaxArea);
    
    UPDATE invoiceOut io
		JOIN (
			SELECT SUM(amount) AS total
				FROM invoiceOutExpence 
                WHERE invoiceOutFk = vInvoiceFk
			) base
		JOIN (
			SELECT SUM(vat) AS total
				FROM invoiceOutTax 
                WHERE invoiceOutFk = vInvoiceFk
			) vat
	SET io.amount = base.total + vat.total
    WHERE io.id = vInvoiceFk;
   
	CALL vn.invoiceOutBooking(vInvoiceFk);
    
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 `invoiceOutBooking` */;
/*!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 `invoiceOutBooking`(IN vInvoice INT)
BEGIN
/* Asienta la factura emitida
*
* param vInvoice factura_id
*/
	DECLARE vBookNumber INT;
    DECLARE vExpenceConcept VARCHAR(50);
    DECLARE vIsUeeMember BOOL DEFAULT TRUE;
    DECLARE vSpainCountryFk INT;
    DECLARE vOldBookNumber INT;

	SELECT id INTO vSpainCountryFk FROM country WHERE code = 'ES';

    SELECT ASIEN
			INTO vOldBookNumber
		FROM XDiario x
			JOIN invoiceOut io ON io.id = vInvoice
        WHERE x.SERIE = io.serial
			AND x.FACTURA = RIGHT(io.ref, LENGTH(io.ref) - 1)
		LIMIT 1;

	DELETE
		FROM XDiario
		WHERE ASIEN = vOldBookNumber;

	DROP TEMPORARY TABLE IF EXISTS rs;
	CREATE TEMPORARY TABLE rs
		SELECT 
				c.accountingAccount AS clientBookingAccount,
				io.amount as totalAmount,
				CONCAT('n/fra ', io.ref) as simpleConcept,
				CONCAT('n/fra ', io.ref, ' ', c.name) as Concept,
				io.serial AS SERIE,
				io.issued AS FECHA_EX,
				io.issued AS FECHA_OP,
				io.issued AS FECHA,
				1 AS NFACTICK,
				IF(ic.correctingFk,'D','') AS  TIPOOPE,
				io.cplusTrascendency477Fk AS TIPOCLAVE,
				io.cplusTaxBreakFk AS TIPOEXENCI,
				io.cplusSubjectOpFk AS TIPONOSUJE,
				io.cplusInvoiceType477Fk AS TIPOFACT,
				ic.cplusRectificationTypeFk AS TIPORECTIF,
				io.companyFk,
				RIGHT(io.ref, LENGTH(io.ref) - 1) AS invoiceNum,
                IF(ct.politicalCountryFk = vSpainCountryFk, vSpainCountryFk, IF(ct.isUeeMember = vIsUeeMember,2,4)) AS TERIDNIF,
				CONCAT(IF(ct.isUeeMember = vIsUeeMember AND ct.politicalCountryFk <> vSpainCountryFk,ct.code,''),c.fi) AS TERNIF,
				c.socialName AS TERNOM,
                ior.serial AS SERIE_RT,
                RIGHT(ior.ref, LENGTH(ior.ref) - 1) AS FACTU_RT,
                ior.issued AS FECHA_RT,
                IF(ior.id,TRUE,FALSE) AS RECTIFICA
		FROM invoiceOut io
			JOIN invoiceOutSerial ios ON ios.code = io.serial
			JOIN client c ON c.id = io.clientFk
			JOIN country ct ON ct.id = c.countryFk
			LEFT JOIN invoiceCorrection ic ON ic.correctingFk = io.id
            LEFT JOIN invoiceOut ior ON ior.id = ic.correctedFk
			WHERE io.id = vInvoice;

	CALL vn.ledger_next(vBookNumber);
    
	-- Linea del cliente
	INSERT INTO XDiario(
								ASIEN,
								FECHA,
								SUBCTA,              
								EURODEBE,
								CONCEPTO, 
								FECHA_EX,
								FECHA_OP,
								empresa_id
								)
		SELECT 
				vBookNumber AS ASIEN,
				rs.FECHA,
				rs.clientBookingAccount AS SUBCTA,
				rs.totalAmount AS EURODEBE,
				rs.simpleConcept AS CONCEPTO,
				rs.FECHA_EX,
				rs.FECHA_OP,
				rs.companyFk AS empresa_id
			FROM rs;

		-- Lineas de gasto
		INSERT INTO XDiario(
									ASIEN,
									FECHA,
									SUBCTA,
									CONTRA,              
									EUROHABER,
									CONCEPTO, 
									FECHA_EX,
									FECHA_OP,
									empresa_id
									)
		SELECT 
				vBookNumber AS ASIEN,
				rs.FECHA,
				ioe.expenceFk AS SUBCTA,
				rs.clientBookingAccount AS CONTRA,
				ioe.amount AS EUROHABER,
				rs.Concept AS CONCEPTO,
				rs.FECHA_EX,
				rs.FECHA_OP,
				rs.companyFk AS empresa_id
			FROM rs
				JOIN invoiceOutExpence ioe
			WHERE ioe.invoiceOutFk = vInvoice;

    SELECT GROUP_CONCAT(`name` SEPARATOR ',') 
            INTO vExpenceConcept 
        FROM expence e
            JOIN invoiceOutExpence ioe ON ioe.expenceFk = e.id
        WHERE ioe.invoiceOutFk = vInvoice;

		-- Lineas de IVA
	INSERT INTO XDiario(
								ASIEN,
								FECHA,
								SUBCTA,
								CONTRA,              
								EUROHABER,
								BASEEURO,
								CONCEPTO,
								FACTURA,
								IVA,
								RECEQUIV,
								AUXILIAR,
								SERIE,
								SERIE_RT,
								FACTU_RT,
								RECTIFICA,
								FECHA_RT,
								FECHA_OP,
								FECHA_EX,
								TIPOOPE,
								NFACTICK,
								TERIDNIF,
								TERNIF,
								TERNOM,
								L340,
								TIPOCLAVE,
								TIPOEXENCI,
								TIPONOSUJE,
								TIPOFACT,
								TIPORECTIF,
								empresa_id
								)
		SELECT 
				vBookNumber AS ASIEN,
				rs.FECHA,
				iot.pgcFk AS SUBCTA,
				rs.clientBookingAccount AS CONTRA,
				iot.vat AS EUROHABER,
				iot.taxableBase AS BASEEURO,
				CONCAT(vExpenceConcept,' : ',rs.Concept) AS CONCEPTO,
				rs.invoiceNum AS FACTURA,
                IF(pe2.equFk,0,pgc.rate) AS IVA,
				IF(pe2.equFk,0,pgce.rate) AS RECEQUIV,
				IF(pgc.mod347,'','*') AS AUXILIAR,
				rs.SERIE,
				rs.SERIE_RT,
				rs.FACTU_RT,
				rs.RECTIFICA,
				rs.FECHA_RT,
				rs.FECHA_OP,
				rs.FECHA_EX,
				rs.TIPOOPE,
				rs.NFACTICK,   
				rs.TERIDNIF,
				rs.TERNIF,
				rs.TERNOM,
				pgc.mod340 AS L340,   
				pgc.cplusTrascendency477Fk AS TIPOCLAVE,
				pgc.cplusTaxBreakFk as TIPOEXENCI,
				rs.TIPONOSUJE,
				rs.TIPOFACT,
				rs.TIPORECTIF,
				rs.companyFk AS empresa_id
			FROM rs
				JOIN invoiceOutTax iot 
				JOIN pgc ON pgc.code = iot.pgcFk
				LEFT JOIN pgcEqu pe ON pe.vatFk = iot.pgcFk		-- --------------- Comprueba si la linea es de iva con rec.equiv. asociado
				LEFT JOIN pgc pgce ON pgce.code = pe.equFk 
				LEFT JOIN pgcEqu pe2 ON pe2.equFk = iot.pgcFk  	-- --------------- Comprueba si la linea es de rec.equiv.
			WHERE iot.invoiceOutFk = vInvoice;
            
            UPDATE invoiceOut
				SET booked = CURDATE()
                WHERE id = vInvoice;
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 `invoiceOutBookingRange` */;
/*!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 `invoiceOutBookingRange`()
BEGIN

/* Reasentar facturas
*/


	DECLARE vInvoice INT;
	DECLARE vContador INT DEFAULT 0;

	DECLARE done BOOL DEFAULT FALSE;

	DECLARE rs CURSOR FOR   
   			SELECT io.id
			FROM invoiceOut io
			WHERE RIGHT(ref,7) BETWEEN 1724215  AND 1724224
				AND serial = 'T';

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;

	FETCH rs INTO vInvoice;

	WHILE NOT done DO

		CALL invoiceOutBooking(vInvoice);
	  
		FETCH rs INTO  vInvoice ;
        
        SET vContador = vContador + 1;
        
        IF vContador MOD 50 = 0 THEN
        
			SELECT CONCAT(vContador, ' de momento') AS FACTURAS_ASENTADAS;
        
		END IF;

	END WHILE;

	CLOSE rs;

	SELECT CONCAT(vContador, ' total') AS FACTURAS_ASENTADAS;

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 `invoiceOutDelete` */;
/*!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 `invoiceOutDelete`(vRef VARCHAR(15))
BEGIN
	DECLARE vAsien INTEGER;
	DECLARE vSendMail BOOL;
	DECLARE vBody TEXT;
	
	SELECT ASIEN INTO vAsien
		FROM XDiario 
			WHERE SERIE = SUBSTRING(vRef, 1, 1)
				AND FACTURA = SUBSTRING(vRef, 2, LENGTH(vRef)-1)
			LIMIT 1;

	SELECT IF(enlazado OR enlazadoSage, TRUE, FALSE),  
			CONCAT(
				'<table cellpadding=\"5\" cellspacing=\"2\" width=\"60%\" style=\"color: #153643; font-family: \"Trebuchet MS\"; font-size: 18px; line-height: 18px;\">
				<tr><td>FECHA</td>
					<td>SUBCTA</td>
					<td>CONTRA</td>
					<td>CONCEPTO</td>
					<td>EURODEBE</td>
					<td>EUROHABER</td>
				</tr>', 
				GROUP_CONCAT(
					CONCAT('
						<tr><td>', IFNULL(FECHA,''), '</td>
							<td>', IFNULL(SUBCTA,''), '</td>
							<td>', IFNULL(CONTRA,''), '</td>
							<td>', IFNULL(CONCEPTO,''), '</td>
							<td>', IFNULL(EURODEBE,''), '</td>
							<td>', IFNULL(EUROHABER,''), '</td>
						</tr>'
					) SEPARATOR ' '
				),
				'</table>'
			) 
				INTO vSendMail, vBody
		FROM XDiario 
		WHERE ASIEN = vAsien;

	DELETE FROM XDiario 
		WHERE ASIEN = vAsien;
	
	IF vSendMail THEN
		CALL mail_insert(
			'administracion@verdnatura.es',
			'noreply@verdnatura.es',
			CONCAT('Eliminada factura ' ,vRef),
			CONCAT(
				'<div align=\"center\">
				<h2>Se ha eliminado el asiento ', vAsien, ' que estaba enlazado en SAGE/CONTAPLUS, vinculado a la factura ', vRef ,'</h2>
				', vBody, '</div>'
			)
		);
	END IF;

	UPDATE ticket
		SET refFk = NULL
		WHERE refFk = vRef;

	DELETE 
		FROM invoiceOut
		WHERE ref = vRef;

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 `invoiceOutListByCompany` */;
/*!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 `invoiceOutListByCompany`(vCompany INT, vStarted DATE, vEnded DATE)
BEGIN

SELECT 
		c.socialName as RazonSocial,
		c.fi as NIF,
        io.ref as Factura,
        io.serial as Serie,
        io.issued as Fecha,
        io.amount as Importe,
        c.id as Id_Cliente,
        iot.taxableBase as Base,
        pgc.rate as Tipo,
        iot.vat as Cuota,
        pgc.name as Concepto
        
	FROM vn.invoiceOut io
		JOIN vn.invoiceOutTax iot ON iot.invoiceOutFk = io.id
        JOIN vn.client c ON c.id = io.clientFk
        JOIN vn.pgc ON pgc.code = iot.pgcFk
	WHERE io.companyFk = vCompany
		AND io.issued BETWEEN vStarted AND vEnded
		ORDER BY io.ref DESC;

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 `invoiceOutTaxAndExpence` */;
/*!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 `invoiceOutTaxAndExpence`()
BEGIN

/* Para tickets ya facturados, vuelve a repetir el proceso de facturación.
*
* @param vInvoice Numero de factura
*/

	DECLARE vInvoice INT;
    DECLARE vInvoiceRef VARCHAR(15);
    DECLARE vCountry INT;
    DECLARE vTaxArea VARCHAR(15);
	DECLARE vContador INT DEFAULT 0;

	DECLARE done BOOL DEFAULT FALSE;

	DECLARE rs CURSOR FOR   
    SELECT id,ref
   		FROM invoiceOut io
		
				WHERE issued >= '2017-07-01'
                AND companyFk = 1381
			AND io.amount IS NULL
		;


	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;

	FETCH rs INTO vInvoice ,vInvoiceRef;

	WHILE NOT done DO

		SELECT s.countryFk 
				INTO vCountry
			FROM supplier s
				JOIN invoiceOut io ON io.companyFk = s.id
			WHERE io.id = vInvoice;
			
		SELECT IF(c.isEqualizated AND i.taxAreaFk = 'NATIONAL','EQU',i.taxAreaFk)
				INTO vTaxArea
			FROM invoiceOutSerial i
				JOIN invoiceOut io ON io.serial = i.code 
				JOIN client c ON c.id = io.clientFk
			WHERE io.id = vInvoice;
	  
		DROP TEMPORARY TABLE IF EXISTS ticketToInvoice;

		CREATE TEMPORARY TABLE ticketToInvoice
			SELECT id 
				FROM ticket 
				WHERE refFk = vInvoiceRef;

		CALL invoiceExpenceMake(vInvoice);
		CALL invoiceTaxMake(vInvoice,vCountry,vTaxArea);
	  
		FETCH rs INTO  vInvoice ,vInvoiceRef;
        
        SET vContador = vContador + 1;
        
        IF vContador MOD 50 = 0 THEN
        
			SELECT CONCAT(vContador, ' de momento') AS FACTURAS_ASENTADAS;
        
		END IF;

	END WHILE;

	CLOSE rs;

	SELECT CONCAT(vContador, ' total') AS FACTURAS_ASENTADAS;

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 `invoiceOut_new` */;
/*!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 `invoiceOut_new`(
	vSerial VARCHAR(255),
	vInvoiceDate DATETIME,
    vTaxArea VARCHAR(25),
	OUT vNewInvoiceId INT)
BEGIN

/* Creación de facturas emitidas. 
* requiere previamente tabla ticketToInvoice(id).
*
* @param vSerial serie a la cual se hace la factura
* @param vInvoiceDate fecha de la factura
* @param vTaxArea tipo de iva en relacion a la empresa y al cliente
* @param vNewInvoiceId id de la factura que se acaba de generar
*
* @return vNewInvoiceId
*/
	
	DECLARE vSpainCountryCode INT DEFAULT 1;
	DECLARE vIsAnySaleToInvoice BOOL;
	DECLARE vIsAnyServiceToInvoice BOOL;
	DECLARE vNewRef VARCHAR(255);
	DECLARE vWorker INT DEFAULT account.myUser_getId();
	DECLARE vCompany INT;
	DECLARE vSupplier INT;
	DECLARE vClient INT;
	DECLARE vCplusStandardInvoiceTypeFk INT DEFAULT 1;
	DECLARE vCplusCorrectingInvoiceTypeFk INT DEFAULT 6;
	DECLARE vCplusSimplifiedInvoiceTypeFk INT DEFAULT 2;
	DECLARE vCorrectingSerial VARCHAR(1) DEFAULT 'R';
	DECLARE vSimplifiedSerial VARCHAR(1) DEFAULT 'S';
	DECLARE vNewInvoiceInId INT;
	DECLARE vIsInterCompany BOOL;
    
	SET vInvoiceDate = IFNULL(vInvoiceDate,CURDATE());

	SELECT t.clientFk, t.companyFk
			INTO vClient, vCompany
		FROM ticketToInvoice tt
			JOIN ticket t ON t.id = tt.id
            LIMIT 1;

    -- Eliminem de ticketToInvoice els tickets que no han de ser facturats
	DELETE ti.* 
        FROM ticketToInvoice ti 
            JOIN ticket t ON t.id = ti.id
            JOIN client c ON c.id = t.clientFk
        WHERE YEAR(t.shipped) < 2001
			OR c.isTaxDataChecked = FALSE
            OR t.isDeleted
            OR c.hasToInvoice = FALSE;

    SELECT SUM(s.quantity * s.price * (100 - s.discount)/100), ts.id
            INTO vIsAnySaleToInvoice, vIsAnyServiceToInvoice
        FROM ticketToInvoice t
            LEFT JOIN sale s ON s.ticketFk = t.id 
        	LEFT JOIN ticketService ts ON ts.ticketFk = t.id;

	IF (vIsAnySaleToInvoice OR vIsAnyServiceToInvoice) 
		AND (vCorrectingSerial = vSerial OR NOT hasAnyNegativeBase())  
	THEN

		-- el trigger añade el siguiente Id_Factura correspondiente a la vSerial
		INSERT INTO invoiceOut
		(
			ref,
			serial,
			issued,
			clientFk,
			dued,
			companyFk,
            cplusInvoiceType477Fk
		)
		SELECT 
				1,
				vSerial,
				vInvoiceDate,
				vClient,
				getDueDate(vInvoiceDate, dueDay),
				vCompany,
                IF(vSerial = vCorrectingSerial, 
					vCplusCorrectingInvoiceTypeFk, 
					IF(vSerial = vSimplifiedSerial,
						vCplusSimplifiedInvoiceTypeFk,
						vCplusStandardInvoiceTypeFk))
            FROM client
            WHERE id = vClient;


		SET vNewInvoiceId = LAST_INSERT_ID();
        
		SELECT `ref`
				INTO vNewRef 
			FROM invoiceOut
			WHERE id = vNewInvoiceId;

		UPDATE ticket t
    			JOIN ticketToInvoice ti ON ti.id = t.id
        	SET t.refFk = vNewRef;

		DROP TEMPORARY TABLE IF EXISTS tmp.updateInter;
        CREATE TEMPORARY TABLE tmp.updateInter ENGINE = MEMORY
			SELECT s.id,ti.id ticket_id,vWorker Id_Trabajador 
				FROM ticketToInvoice ti
					LEFT JOIN vn.ticketState ts ON ti.id = ts.ticket
                    JOIN state s 
				WHERE IFNULL(ts.alertLevel,0) < 3 and s.`code` = vn.getAlert3State(ti.id);
	
		INSERT INTO vncontrol.inter(state_id,Id_Ticket,Id_Trabajador)
			SELECT * FROM tmp.updateInter;
            

		INSERT INTO ticketLog (action, userFk,originFk, description) 
			SELECT 'UPDATE',account.myUser_getId(),ti.id, CONCAT('Crea factura ',vNewRef)
				FROM ticketToInvoice ti;

		CALL invoiceExpenceMake(vNewInvoiceId);
		CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
		
		UPDATE invoiceOut io
				JOIN (
					SELECT SUM(amount) AS total
						FROM invoiceOutExpence 
						WHERE invoiceOutFk = vNewInvoiceId
					) base
				JOIN (
					SELECT SUM(vat) AS total
						FROM invoiceOutTax 
						WHERE invoiceOutFk = vNewInvoiceId
					) vat
			SET io.amount = base.total + vat.total
			WHERE io.id = vNewInvoiceId;
		
		DROP TEMPORARY TABLE tmp.updateInter;

		SELECT ios.isCEE INTO vIsInterCompany
			FROM vn.ticket t
				JOIN vn.company c ON c.clientFk = t.clientFk 
				JOIN vn.invoiceOut io ON io.`ref` = t.refFk 
				JOIN vn.invoiceOutSerial ios ON ios.code = io.serial
			WHERE t.refFk = vNewRef;
	
		IF (vIsInterCompany) THEN
	
			SELECT vCompany INTO vSupplier;
			SELECT id INTO vCompany FROM company WHERE clientFk = vClient;
			
			INSERT INTO invoiceIn(supplierFk, supplierRef, issued, companyFk)
				SELECT vSupplier, vNewRef, vInvoiceDate, vCompany;
			
			SET vNewInvoiceInId = LAST_INSERT_ID();
							
			DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
			CREATE TEMPORARY TABLE tmp.ticket
				(KEY (ticketFk))
				ENGINE = MEMORY
				SELECT id ticketFk
					FROM ticketToInvoice;
		
			CALL `ticket_getTax`('NATIONAL');
		
			SET @vTaxableBaseServices := 0.00;
			SET @vTaxCodeGeneral := NULL;
				
			INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
				SELECT vNewInvoiceInId, @vTaxableBaseServices, sub.expenceFk, sub.taxTypeSageFk , sub.transactionTypeSageFk
					FROM (
						SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase, i.expenceFk, i.taxTypeSageFk , i.transactionTypeSageFk, @vTaxCodeGeneral := i.taxClassCodeFk 
							FROM tmp.ticketServiceTax tst
								JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tst.code
							WHERE i.isService 
							HAVING taxableBase
						) sub;
		
			INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
				SELECT  vNewInvoiceInId, SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral, @vTaxableBaseServices, 0) taxableBase, i.expenceFk, i.taxTypeSageFk , i.transactionTypeSageFk 
					FROM tmp.ticketTax tt
						JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tt.code
					WHERE !i.isService 
			        GROUP BY tt.pgcFk
			        HAVING taxableBase
					ORDER BY tt.priority;					
			
			CALL `vn`.`invoiceInDueDay_calculate`(vNewInvoiceInId);
		
			INSERT INTO vn2008.intrastat_data (recibida_id, intrastat_id, importe, unidades, Paises_Id, neto)
			SELECT  
					vNewInvoiceInId, 
				    i.intrastatFk,
				    CAST(SUM((s.quantity * s.price * (100 - s.discount) / 100)) AS DECIMAL(10,2)) importe,
				    CAST(SUM(IFNULL(i.stems, 1) * s.quantity) AS DECIMAL (10 , 2 )) stems,
				    s2.countryFk,
			    	CAST(SUM(IF(sv.physicalWeight, sv.physicalWeight, i.density * sub.cm3delivery/1000000)) AS DECIMAL(10,2)) neto
				FROM vn.sale s
					LEFT JOIN (SELECT ic.itemFk, ic.cm3delivery 
									FROM vn.itemCost ic
									WHERE ic.cm3
									GROUP BY ic.itemFk) sub ON s.itemFk = sub.itemFk
					LEFT JOIN vn.saleVolume sv ON sv.saleFk = s.id 				
				    LEFT JOIN vn.ticket t ON s.ticketFk = t.id
				    LEFT JOIN vn.supplier s2 ON s2.id = t.companyFk
			        LEFT JOIN vn.item i ON i.id = s.itemFk
			        LEFT JOIN vn.intrastat it ON it.id = i.intrastatFk
			        JOIN vn.invoiceOut iOut ON iOut.ref = t.refFk
				WHERE iOut.`ref` = vNewRef
				GROUP BY i.intrastatFk
				ORDER BY i.intrastatFk;
		
			
			DROP TEMPORARY TABLE tmp.ticket;
			DROP TEMPORARY TABLE tmp.ticketAmount;
			DROP TEMPORARY TABLE tmp.ticketTax;
			DROP TEMPORARY TABLE tmp.ticketServiceTax;
		
		END IF;
		
	END IF;
    
	DROP TEMPORARY TABLE `ticketToInvoice`;
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 `invoiceOut_newFromClient` */;
/*!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 `invoiceOut_newFromClient`(IN vClientFk int, IN vSerial char(2), IN vMaxShipped date,
                                                          IN vCompanyFk int, IN vTaxArea varchar(25),
                                                          IN vRef varchar(25), OUT vInvoiceId int)
BEGIN
/**
 * Factura los tickets de un cliente hasta una fecha dada
 * @param vClientFk Id del cliente a facturar 
 * @param vSerial Serie de factura
 * @param vMaxShipped Fecha hasta la cual cogera tickets para facturar
 * @param vCompanyFk Id de la empresa desde la que se factura
 * @param vTaxArea Tipo de iva en relacion a la empresa y al cliente, NULL por defecto
 * @param vRef Referencia de la factura en caso que se quiera forzar, NULL por defecto
 * @return vInvoiceId factura
 */
	
	DECLARE vIsRefEditable BOOLEAN;

	IF vRef IS NOT NULL THEN
		SELECT isRefEditable INTO vIsRefEditable
			FROM invoiceOutSerial
			WHERE code = vSerial;

		IF NOT vIsRefEditable THEN
			CALL util.throw('serial non editable');
		END IF;
	END IF;	
	
	CALL invoiceFromClient(vMaxShipped, vClientFk, vCompanyFk);
	CALL invoiceOut_new(vSerial, CURDATE(), vTaxArea, vInvoiceId);

	UPDATE invoiceOut
		SET `ref` = vRef
		WHERE id = vInvoiceId 
			AND vRef IS NOT NULL;

    IF vSerial <> 'R' AND NOT ISNULL(vInvoiceId) AND vInvoiceId <> 0 THEN
		CALL invoiceOutBooking(vInvoiceId);
    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 `invoiceOut_newFromTicket` */;
/*!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 `invoiceOut_newFromTicket`(IN vTicketFk int, IN vSerial char(2), IN vTaxArea varchar(25),
                                                          IN vRef varchar(25), OUT vInvoiceId int)
BEGIN
/**
 * Factura un ticket
 * @param vTicketFk Id del ticket
 * @param vSerial Serie de factura
 * @param vTaxArea Area de la factura en caso de querer forzarlo, 
 *     en la mayoria de los casos poner NULL
 * @return vInvoiceId
 */
	DECLARE vIsRefEditable BOOLEAN;
	CALL invoiceFromTicket(vTicketFk);
    CALL invoiceOut_new(vSerial, CURDATE(), vTaxArea, vInvoiceId);

	IF vRef IS NOT NULL THEN
		SELECT isRefEditable INTO vIsRefEditable
			FROM invoiceOutSerial
			WHERE code = vSerial;
		IF NOT vIsRefEditable THEN
			CALL util.throw('serial non editable');
		END IF;
	
		UPDATE invoiceOut 
			SET `ref` = vRef
			WHERE id = vInvoiceId;
	END IF;	

    IF vSerial <> 'R' AND NOT ISNULL(vInvoiceId) AND vInvoiceId <> 0 THEN
		CALL invoiceOutBooking(vInvoiceId);
    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 `invoiceTaxMake` */;
/*!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 `invoiceTaxMake`(vInvoice INT, vTaxArea VARCHAR(25))
BEGIN
/**
 * Factura un conjunto de tickets.
 *
 * @param vInvoice, vTaxAreaFk
 * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
 * @return tmp.ticketAmount
 * @return tmp.ticketTax Impuesto desglosado para cada ticket.
 */
    DELETE FROM invoiceOutTax
			WHERE invoiceOutFk = vInvoice;
    
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		(KEY (ticketFk))
		ENGINE = MEMORY
		SELECT id ticketFk
			FROM ticketToInvoice;
		
	CALL ticket_getTax(vTaxArea);

    INSERT INTO invoiceOutTax(
		invoiceOutFk,
		pgcFk,
		taxableBase,
		vat
	)
	SELECT vInvoice,
			pgcFk,
			SUM(taxableBase) as BASE,
			CAST(SUM(taxableBase) * rate / 100 AS DECIMAL (10,2))
		FROM tmp.ticketTax
        GROUP BY pgcFk
        HAVING BASE
		ORDER BY priority;
	   
	DROP TEMPORARY TABLE tmp.ticket;
	DROP TEMPORARY TABLE tmp.ticketTax;
	DROP TEMPORARY TABLE tmp.ticketAmount;

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 `itemBarcode_update` */;
/*!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 `itemBarcode_update`(vItemFk INT,vCode VARCHAR(22), vDelete BOOL)
BEGIN
IF vDelete THEN
	DELETE FROM vn.itemBarcode WHERE itemFk = vItemFk AND  code = vCode;
ELSE 
	INSERT INTO vn.itemBarcode(itemFk,code) VALUES (vItemFk,vCode);
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 `itemFreight_Show` */;
/*!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 `itemFreight_Show`(vItemFk INT, vWarehouseFk INT)
BEGIN
	
	SELECT 	cm3 Volumen_Entrada, 
			cm3delivery Volumen_Salida,
			p.volume Volumen_del_embalaje,
			p.width Ancho_del_embalaje,
			p.`depth` Largo_del_embalaje,
			b.packageFk ,
			IFNULL(p.height, i.`size`) + 10 Altura,
			b.packing Packing_Entrada,
			i.packingOut Packing_Salida,
			i.id itemFk,
			b.id buyFk,
			b.entryFk,
			w.name warehouseFk
		FROM vn.itemCost ic 
			JOIN vn.item i ON i.id = ic.itemFk 
			LEFT JOIN cache.last_buy lb ON lb.item_id = ic.itemFk AND lb.warehouse_id = ic.warehouseFk 
			LEFT JOIN vn.buy b ON b.id = lb.buy_id 
			LEFT JOIN vn.packaging p ON p.id = b.packageFk 
			LEFT JOIN vn.warehouse w ON w.id = ic.warehouseFk
		WHERE ic.itemFk = vItemFk
			AND ic.warehouseFk = vWarehouseFk;
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 `itemFuentesBalance` */;
/*!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 `itemFuentesBalance`(vDaysInFuture INT)
BEGIN

	/*	Se utiliza para calcular la necesidad de mover mercancia entre el almacén de fuentes y el nuestro
	 * 
	 *  @param vDaysInFuture Rango de dias para calcular entradas y salidas
	 * 
	 */
	
	DECLARE vWarehouseFk INT;

	SELECT s.warehouseFk INTO vWarehouseFk
		FROM vn.sector s 
		WHERE s.code = 'FUENTES_PICASSE';
	
	CALL cache.stock_refresh(FALSE);

	SELECT 	i.id itemFk, 
			i.longName,
            i.size,
            i.subName,
			v.amount - IFNULL(fue.Fuentes,0) - IFNULL(alb.albenfruit,0) as visible, 
			fue.Fuentes, 
			alb.Albenfruit,
			sale.venta, 
			IFNULL(buy.compra,0) + IFNULL(mov.traslado,0) as compra, 
			IFNULL(v.amount,0) + IFNULL(sale.venta,0) + IFNULL(buy.compra,0) + IFNULL(mov.traslado,0) 
				- IFNULL(fue.Fuentes,0) - IFNULL(alb.albenfruit,0) as saldo
		FROM vn.item i 
			JOIN vn.itemType it ON it.id = i.typeFk 
			JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
		LEFT JOIN (
				SELECT ish.itemFk, CAST(SUM(ish.visible) AS DECIMAL(10,0)) AS Fuentes
					FROM vn.itemShelving ish
						JOIN vn.shelving sh ON sh.code = ish.shelvingFk
                        JOIN vn.parking p ON p.id = sh.parkingFk
                        JOIN vn.sector s ON s.id = p.sectorFk
					WHERE s.code = 'FUENTES_PICASSE'
					GROUP BY ish.itemFk	
			 ) fue ON fue.itemFk = i.id
		LEFT JOIN (
				SELECT ish.itemFk, CAST(SUM(ish.visible) AS DECIMAL(10,0)) AS Albenfruit
					FROM vn.itemShelving ish
						JOIN vn.shelving sh ON sh.code = ish.shelvingFk
                        JOIN vn.parking p ON p.id = sh.parkingFk
                        JOIN vn.sector s ON s.id = p.sectorFk
					WHERE s.code = 'ALBENFRUIT'
					GROUP BY ish.itemFk	
			 ) alb ON alb.itemFk = i.id
		LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as venta
					FROM vn2008.item_out
					WHERE dat BETWEEN CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(curdate()))
						AND warehouse_id  = vWarehouseFk
					GROUP BY item_id
			 ) sale ON sale.item_id = i.id
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as compra
					FROM vn2008.item_entry_in
					WHERE dat BETWEEN CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(curdate()))
						AND warehouse_id  = vWarehouseFk
                        AND isVirtualStock = FALSE
					GROUP BY item_id
			 ) buy ON buy.item_id = i.id
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as traslado
					FROM vn2008.item_entry_out
					WHERE dat BETWEEN CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(curdate()))
						AND warehouse_id  = vWarehouseFk
					GROUP BY item_id
			 ) mov ON mov.item_id = i.id
		WHERE (v.amount OR fue.Fuentes OR alb.Albenfruit)	 
			AND i.itemPackingTypeFk = 'H'
			AND ic.shortLife 
		;

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 `itemPlacementFromTicket` */;
/*!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 `itemPlacementFromTicket`(vTicket INT)
BEGIN
/**
 * Llama a itemPlacementUpdateVisible 
 * de los articulos de la tabla temporal tmp.itemPlacement(itemFk)
 * @treturn tmp.itemPlacement
 * @param vTicket Id del Ticket
 */

    DROP TEMPORARY TABLE IF EXISTS tmp.itemPlacement;
    CREATE TEMPORARY TABLE tmp.itemPlacement
        (PRIMARY KEY (itemFk))
		ENGINE = MEMORY
		SELECT s.itemFk
			FROM ticket t
				JOIN sale s ON s.ticketFk = t.id
			WHERE t.id = vTicket;
            
	CALL itemPlacementUpdateVisible();
    
	DROP TEMPORARY TABLE tmp.itemPlacement;
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 `itemPlacementSupplyAiming` */;
/*!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 `itemPlacementSupplyAiming`(vShelvingFk VARCHAR(10), quantity INT, vItemFk INT)
BEGIN

	SELECT 	ish.itemFk,
			ish.longName,
            ish.size,
            ish.subName,
			ish.itemShelvingFk,
            ish.shelving,
            ish.stock,
            LEAST(ish.stock,quantity) as total,
            CONCAT(
					CAST(FLOOR(LEAST(ish.stock,quantity) / ish.packing) AS DECIMAL(10,0)),
                    ' x ',
                    ish.packing,
                    IF	(	
						LEAST(ish.stock,quantity) MOD ish.packing,
						CONCAT(' + ',CAST(LEAST(ish.stock,quantity) MOD ish.packing AS DECIMAL(10,0))),
                        ''
                        ),
                    ' = ',
                    LEAST(ish.stock,quantity)
				   ) as proposal
		FROM vn.itemShelvingPlacementSupplyStock ish
        WHERE ish.shelving = vShelvingFk COLLATE utf8_general_ci
			AND ish.itemFk = vItemFk;

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 `itemPlacementSupplyCloseOrder` */;
/*!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 `itemPlacementSupplyCloseOrder`(vId INT, vQuantity INT)
BEGIN

	UPDATE vn.itemPlacementSupply 
    SET priority = 10
    WHERE id = vId;

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 `itemPlacementSupplyGetOrder` */;
/*!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 `itemPlacementSupplyGetOrder`(vSector INT )
BEGIN

	DECLARE vId INT;
    DECLARE vLastParkingFk INT;
    DECLARE vNextParkingFk INT;
        
	SELECT sh.parkingFk INTO vLastParkingFk
		FROM vn.itemShelvingPlacementSupply isps
			JOIN vn.itemShelving ish ON ish.id = isps.itemShelvingFk
            JOIN vn.shelving sh ON sh.code = ish.shelvingFk
        WHERE isps.userFk = getUser()
        ORDER BY isps.created DESC
        LIMIT 1;
    
    SET vNextParkingFk = vn.itemShelvingPlacementSupply_ClosestGet(vLastParkingFk);
    
	SELECT ipsl.id INTO vId
		FROM vn.itemPlacementSupplyList ipsl
			JOIN vn.itemShelvingPlacementSupplyStock ispss ON ispss.itemFk = ipsl.itemFk
		WHERE ipsl.saldo > 0
			AND (ipsl.repoUserFk is NULL OR ipsl.repoUserFk = getUser())
            AND ipsl.sectorFk = vSector
         ORDER BY  ipsl.repoUserFk DESC, ipsl.priority DESC, (ispss.parkingFk = vNextParkingFk) DESC, ispss.parking DESC, ipsl.created
        LIMIT 1;
        
    UPDATE vn.itemPlacementSupply
		SET repoUserFk = getUser()
        WHERE id = vId;
        
    SELECT * FROM vn.itemPlacementSupplyList 
		WHERE id = vId 
		AND sectorFk = vSector;

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 `itemPlacementSupplyStockGetTargetList` */;
/*!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 `itemPlacementSupplyStockGetTargetList`(vItemFk INT,vSectorFk INT)
BEGIN

	/*  Devuelve la lista de ubicaciones para itemFk en ese sector. Se utiliza en la preparación previa.
	 *  Este proc se llama a continuacion de ticketToPrePrepare
	 * 
	 *  @param vItemFk Identificador de vn.item
	 *  @param vSectorFk Identificador de vn.sector
	 */
	
    DECLARE vWarehouseAliasFk INT;
   
   	SELECT w.aliasFk INTO vWarehouseAliasFk
	    FROM vn.sector s
	    JOIN vn.warehouse w ON w.id = s.warehouseFk
	    WHERE s.id = vSectorFk;
	   
    SELECT ish.shelvingFk shelving, 
		   p.code parking, 
	       sum(ish.visible) as stockTotal,
	       ish.created,
	       p.pickingOrder
	    FROM vn.itemShelving ish 
					JOIN vn.shelving sh ON sh.code = ish.shelvingFk
					JOIN vn.parking p ON p.id = sh.parkingFk
					JOIN vn.sector sc ON sc.id = p.sectorFk
					JOIN vn.warehouse w ON w.id = sc.warehouseFk
					WHERE w.aliasFk = vWarehouseAliasFk
	                AND ish.visible > 0
	                AND ish.itemFk = vItemFk
		GROUP BY ish.id
		ORDER BY sh.priority DESC;
    
    
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 `itemProposal` */;
/*!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 `itemProposal`(vItemFk INT, vTicketFk INT,vShowType BOOL)
BEGIN

/**
 * Propone articulos disponible ordenado, con la cantidad de veces usado y segun sus caracteristicas
 *
 * @param vItemFk item id
 * @param vTicketFk ticket id
 * @param vShowType mostrar tipos
 */  

    DECLARE vWarehouseFk INT;
    DECLARE vShipped DATE;
    DECLARE vCalcFk INT;
    DECLARE vTypeFk INT;
    
    
    DECLARE vTag1 VARCHAR(25);
    DECLARE vTag5 VARCHAR(25);
    DECLARE vTag6 VARCHAR(25);
    DECLARE vTag7 VARCHAR(25);
    DECLARE vTag8 VARCHAR(25);
    
    DECLARE vValue1 VARCHAR(50);
    DECLARE vValue5 VARCHAR(50);
    DECLARE vValue6 VARCHAR(50);
    DECLARE vValue7 VARCHAR(50);
    DECLARE vValue8 VARCHAR(50);

    SELECT warehouseFk, shipped INTO vWarehouseFk, vShipped
        FROM vn.ticket
        WHERE id = vTicketFk;
    
    SELECT typeFk, tag5, value5, tag6, value6, tag7, value7, tag8, value8, t1.name, it1.value
        INTO vTypeFk, vTag5, vValue5, vTag6, vValue6, vTag7, vValue7, vTag8, vValue8, vTag1, vValue1
        FROM vn.item i
            LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
                LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
        WHERE i.id = vItemFk;
    
    CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vShipped);
    
    SELECT i.id itemFk,
            i.longName,
            i.subName,
            i.tag5,
            i.value5,
            (i.value5 <=> vValue5 COLLATE utf8_general_ci) match5,
            i.tag6,
            i.value6,
            (i.value6 <=> vValue6 COLLATE utf8_general_ci) match6,
            i.tag7,
            i.value7,
            (i.value7 <=> vValue7 COLLATE utf8_general_ci) match7,
            i.tag8,
            i.value8,
            (i.value8 <=> vValue8 COLLATE utf8_general_ci) match8,
            a.available,
            IFNULL(ip.counter,0) counter,
            IF(b.groupingMode = 1, b.grouping, b.packing) as minQuantity
        FROM vn.item i
            JOIN cache.available a ON a.item_id = i.id
            LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id AND ip.itemFk = vItemFk
            LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
			LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
			LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = vWarehouseFk
			LEFT JOIN vn.buy b ON b.id = lb.buy_id
        WHERE a.calc_id = vCalcFk
            AND available > 0
            AND IF(vShowType,i.typeFk = vTypeFk,true)
            AND i.id != vItemFk
        ORDER BY counter DESC,
                (t1.name = vTag1 COLLATE utf8_general_ci) DESC,
                (it1.value = vValue1 COLLATE utf8_general_ci) DESC,
                (i.tag6 = vTag6 COLLATE utf8_general_ci) DESC,                
                (i.value6 = vValue6 COLLATE utf8_general_ci) DESC,
                (i.tag5 = vTag5 COLLATE utf8_general_ci) DESC,
                (i.value5 = vValue5 COLLATE utf8_general_ci) DESC,
                (i.tag7 = vTag7 COLLATE utf8_general_ci) DESC,
                (i.value7 = vValue7 COLLATE utf8_general_ci) DESC,
                (i.tag8 = vTag8 COLLATE utf8_general_ci) DESC,
                (i.value8 = vValue8 COLLATE utf8_general_ci) DESC;
       

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 `itemProposal_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 `itemProposal_Add`(vSaleFk INT, vMateFk INT, vQuantity INT)
BEGIN
/**
 * Añade un nuevo articulo para sustituir a otro, y actualiza la memoria de sustituciones.
 *
 * @param vSaleFk id de la tabla sale
 * @param vMateFk articulo sustituto
 * @ param vQuantity cantidad que se va a sustituir
 */ 
    DECLARE vTicketFk INT;
    DECLARE vItemFk INT;
    DECLARE vWarehouseFk SMALLINT;
    DECLARE vDate DATE;
    DECLARE vGrouping INT;
	DECLARE vBox INT;
	DECLARE vPacking INT;
    DECLARE vRoundQuantity INT DEFAULT 1;
	
    SELECT s.ticketFk, LEAST(s.quantity, vQuantity), s.itemFk,t.shipped,t.warehouseFk
        INTO vTicketFk, vQuantity, vItemFk,vDate,vWarehouseFk
        FROM vn.sale s
            JOIN vn.ticket t ON t.id = s.ticketFk
        WHERE s.id = vSaleFk;
    
    UPDATE vn.sale
        SET quantity = quantity - vQuantity
        WHERE id = vSaleFk;
        
    CALL vn.buyUltimate(vWarehouseFk, vDate);
    
    SELECT `grouping`, groupingMode, packing
    INTO vGrouping,vBox,vPacking
    FROM buy b
        JOIN tmp.buyUltimate tmp ON b.id = tmp.buyFk
    WHERE tmp.itemFk = vMateFk AND tmp.WarehouseFk = vWarehouseFk;
        
    IF vBox = 2 AND vPacking > 0 THEN
        SET vRoundQuantity = vPacking;
    END IF;
    IF  vBox = 1 AND vGrouping > 0 THEN
        SET vRoundQuantity = vGrouping;
    END IF;
    
    INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept)
        SELECT vTicketFk, vMateFk, CEIL(vQuantity / vRoundQuantity) * vRoundQuantity, CONCAT('+ ',i.longName)
            FROM vn.item i
            WHERE id = vMateFk;
            
	SELECT LAST_INSERT_ID() INTO vSaleFk;
    
    CALL vn.sale_calculateComponent(vSaleFk, NULL);
    
    INSERT INTO vn.itemProposal(itemFk, mateFk, counter)
		VALUES(vItemFk, vMateFk, 1)
        ON DUPLICATE KEY UPDATE counter = counter + 1;

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 `itemProposal_beta` */;
/*!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 `itemProposal_beta`(vItemFk INT, vTicketFk INT)
BEGIN

	DECLARE vWarehouseFk INT;
    DECLARE vShipped DATE;
    DECLARE vCalcFk INT;
    DECLARE vTypeFk INT;
    DECLARE vResultsMax INT DEFAULT 10;
    
    DECLARE vTag1 VARCHAR(25);
    DECLARE vTag5 VARCHAR(25);
    DECLARE vTag6 VARCHAR(25);
    DECLARE vTag7 VARCHAR(25);
    DECLARE vTag8 VARCHAR(25);
    
    DECLARE vValue1 VARCHAR(50);
    DECLARE vValue5 VARCHAR(50);
    DECLARE vValue6 VARCHAR(50);
    DECLARE vValue7 VARCHAR(50);
    DECLARE vValue8 VARCHAR(50);

	SELECT warehouseFk, shipped INTO vWarehouseFk, vShipped
		FROM vn.ticket
        WHERE id = vTicketFk;
    
    SELECT typeFk, tag5, value5, tag6, value6, tag7, value7, tag8, value8, t1.name, it1.value
		INTO vTypeFk, vTag5, vValue5, vTag6, vValue6, vTag7, vValue7, vTag8, vValue8, vTag1, vValue1
		FROM vn.item i 
            LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
				LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
        WHERE i.id = vItemFk;
    
	CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vShipped);
	
	SELECT i.id itemFk,
			i.longName,
            i.subName,
            i.tag5,
            i.value5,
            (i.value5 <=> vValue5 COLLATE utf8_general_ci) match5,
			i.tag6,
            i.value6,
            (i.value6 <=> vValue6 COLLATE utf8_general_ci) match6,
			i.tag7,
            i.value7,
            (i.value7 <=> vValue7 COLLATE utf8_general_ci) match7,
            i.tag8,
            i.value8,
            (i.value8 <=> vValue8 COLLATE utf8_general_ci) match8,
            a.available,
            IFNULL(ip.counter,0) counter
		FROM vn.item i 
			JOIN cache.available a ON a.item_id = i.id
            LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id AND ip.itemFk = vItemFk
			LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
				LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
		WHERE a.calc_id = vCalcFk
			AND available > 0
            AND i.typeFk = vTypeFk
            AND i.id != vItemFk
		ORDER BY counter DESC,
				(t1.name = vTag1 COLLATE utf8_general_ci) DESC,
                (it1.value = vValue1 COLLATE utf8_general_ci) DESC,
				(i.tag5 = vTag5 COLLATE utf8_general_ci) DESC,
				(i.value5 = vValue5 COLLATE utf8_general_ci) DESC,
				(i.tag6 = vTag6 COLLATE utf8_general_ci) DESC,                
				(i.value6 = vValue6 COLLATE utf8_general_ci) DESC,
                (i.tag7 = vTag7 COLLATE utf8_general_ci) DESC,
				(i.value7 = vValue7 COLLATE utf8_general_ci) DESC,
                (i.tag8 = vTag8 COLLATE utf8_general_ci) DESC,
				(i.value8 = vValue8 COLLATE utf8_general_ci) DESC
		LIMIT vResultsMax;

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 `itemRefreshTags` */;
/*!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 `itemRefreshTags`(IN vItem INT)
BEGIN
/**
 * Crea la tabla temporal necesaria para el procedimiento item_refreshTags
 *
 * @param vItem Articulo a modificar
 * @param temporary table tmp.item(id) del articulo
 **/
	DROP TEMPORARY TABLE IF EXISTS tmp.item;

	CREATE TEMPORARY TABLE tmp.item
		SELECT vItem id;
	
	CALL item_refreshTags();

	DROP TEMPORARY TABLE tmp.item;

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 `itemSale_byWeek` */;
/*!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 `itemSale_byWeek`(vWeek INT, IN vYear INT, vItemFk INT, vWarehouseFk INT)
BEGIN
	
	DECLARE vStarted DATE;
	DECLARE vEnded DATETIME;

	SELECT MIN(dated), util.dayEnd(MAX(dated)) INTO vStarted, vEnded
		FROM `time` t 
		WHERE CONCAT(vYear, LPAD(vWeek, 2, 0)) = t.period;

	SELECT t.shipped,
			w.name warehouse,
			s.ticketFk, 
			c.quality,
			t.nickname client,
			am.name agencyName, 
			wk.code salesPerson,
			s.itemFk,
			IFNULL(CONCAT(ig.longName,' ',ig.`size`,' ',ig.subName), s.concept) AS concept, 
			s.quantity, 
			s.price,
			s.priceFixed,
			s.discount,
			tls.name stateName,
			sb.buyFk,
			s.id saleFk,
			wk.id salesPersonFk
		FROM sale s
			JOIN ticket t ON t.id = s.ticketFk
			JOIN warehouse w ON w.id = t.warehouseFk 
			JOIN address a ON a.id = t.addressFk
			LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
			JOIN `client` c ON c.id = a.clientFk
			LEFT JOIN worker wk ON wk.id = c.salesPersonFk 
			LEFT JOIN ticketLastState tls ON tls.ticketFk = t.id
			LEFT JOIN saleBuy sb ON sb.saleFk = s.id 
			LEFT JOIN buy b ON b.id = sb.buyFk 
			LEFT JOIN item ig ON ig.id = b.itemOriginalFk 
		WHERE s.itemFk = vItemFk
			AND t.shipped BETWEEN vStarted AND vEnded
			AND IF(vWarehouseFk = 0, w.hasComission , t.warehouseFk = vWarehouseFk)
		ORDER BY t.shipped, 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 `itemSaveMin` */;
/*!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 `itemSaveMin`(min INT,vBarcode VARCHAR(22))
BEGIN

	DECLARE vItemFk INT;
    SELECT vn.barcodeToItem(vBarcode) INTO vItemFk;
    
    UPDATE vn.item SET minimum = min WHERE   id = vItemFk;
	


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 `itemSearchShelving` */;
/*!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 `itemSearchShelving`(`vShelvingFk` VARCHAR(3))
BEGIN
	SELECT p.`column` AS col , p.`row`
		FROM vn.shelving s 
			JOIN parking p ON s.parkingFk = p.id 
		WHERE s.`code` = vShelvingFk COLLATE utf8_general_ci;
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 `itemShelvingDelete` */;
/*!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 `itemShelvingDelete`(vId INT)
BEGIN

	DELETE FROM vn.itemShelving WHERE id = vId;

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 `itemShelvingLog_get` */;
/*!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 `itemShelvingLog_get`(vShelvingFk VARCHAR(10) )
BEGIN
	
/**
 * Devuelve el log de los item en cada carro
 *
 * @param vShelvingFk Matrícula del carro 
 * 
 */
	
	SELECT isl.itemShelvingFk, 
			isl.created, 
			isl.accion, 
			isl.itemFk, 
			isl.shelvingFk, 
			isl.quantity, 
			isl.visible,
			isl.available, 
			isl.grouping, 
			isl.packing, 
			isl.stars, 
			item.longName, 
			item.size, 
			item.subName, 
			worker.code, 
			isl.accion
	FROM item 
		JOIN itemShelvingLog isl ON item.id = isl.itemFk 
		JOIN worker ON isl.workerFk = worker.id
	WHERE shelvingFk = vShelvingFk OR isl.itemFk = vShelvingFk
		ORDER BY isl.created DESC;
	
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 `itemShelvingMakeFromDate` */;
/*!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 `itemShelvingMakeFromDate`(IN `vShelvingFk` VARCHAR(8), IN `vBarcode` VARCHAR(22), IN `vShelve` VARCHAR(2), IN `vQuantity` INT, IN `vPackagingFk` VARCHAR(10), IN `vGrouping` INT, IN `vPacking` INT, IN `vWarehouseFk` INT, `vCreated` VARCHAR(22))
BEGIN
	
    DECLARE vItemFk INT;

    SELECT vn.barcodeToItem(vBarcode) INTO vItemFk;

    SELECT itemFk INTO vItemFk
        FROM vn.buy b
        WHERE b.id = vItemFk;

    IF (SELECT COUNT(*) FROM vn.shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN

        INSERT IGNORE INTO vn.parking(`code`) VALUES(vShelvingFk);
        INSERT INTO vn.shelving(`code`, parkingFk)
            SELECT vShelvingFk, id
                FROM vn.parking
                WHERE `code` = vShelvingFk COLLATE utf8_unicode_ci;

    END IF;

    IF (SELECT COUNT(*) FROM vn.itemShelving 
            WHERE shelvingFk COLLATE utf8_unicode_ci  = vShelvingFk 
                AND itemFk  = vItemFk 
                AND packing  = vPacking) = 1 THEN

        UPDATE vn.itemShelving
            SET visible = visible+vQuantity,
                created = vCreated
            WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
                AND itemFk = vItemFk
                AND packing = vPacking;

    ELSE
        CALL cache.last_buy_refresh(FALSE);
        INSERT INTO itemShelving(     itemFk,
                                    shelvingFk,
                                    shelve,
                                    visible,
                                    created,
                                    `grouping`,
                                    packing,
                                    packagingFk)
            SELECT     vItemFk,
                    vShelvingFk,
                    vShelve,
                    vQuantity,
                    vCreated,
                    IF(vGrouping = 0, IFNULL(b.packing, vPacking), vGrouping) `grouping`,
                    IF(vPacking = 0, b.packing, vPacking) packing,
                    IF(vPackagingFk = '', b.packageFk, vPackagingFk) packaging
            FROM vn.item i
                LEFT JOIN cache.last_buy lb ON i.id = lb.item_id AND lb.warehouse_id = vWarehouseFk
                LEFT JOIN vn.buy b ON b.id = lb.buy_id
            WHERE i.id = vItemFk;
    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 `itemShelvingMatch` */;
/*!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 `itemShelvingMatch`(vEntryFk INT, vAllTravel BOOLEAN, vFromTimed DATETIME, vToTimed DATETIME)
BEGIN

	DECLARE vTravelFk INT;
    
    SELECT travelFk INTO vTravelFk 
		FROM entry 
        WHERE id = vEntryFk;

	SELECT i.id, i.longName, i.size, i.subName, b.stickers, ish.etiquetas, b.printed
		FROM item i
		JOIN (
					SELECT itemFk, sum(stickers) AS stickers, sum(printedStickers) as printed
						FROM buy b
							JOIN entry e ON e.id = b.entryFk
						WHERE IF(vAllTravel , travelFk = vTravelFk, b.entryFk = vEntryFk)
						GROUP BY itemFk
				  ) b ON b.itemFk = i.id
		LEFT JOIN (
					SELECT itemFk, sum(cast(visible / packing AS DECIMAL(10,0))) AS etiquetas 
						FROM itemShelving ish
							JOIN shelving sh ON sh.code = ish.shelvingFk
                            LEFT JOIN parking pk ON pk.id = sh.parkingFk
						WHERE ish.created BETWEEN vFromTimed AND vToTimed
						GROUP BY itemFk
				  ) ish ON ish.itemFk = id
		WHERE b.stickers OR ish.etiquetas;

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 `itemShelvingPlacementSupplyAdd` */;
/*!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 `itemShelvingPlacementSupplyAdd`(vItemShelvingFk INT, vItemPlacementSupplyFk INT, vQuantity INT)
BEGIN

    INSERT INTO vn.itemShelvingPlacementSupply(   itemShelvingFk,
                                                itemPlacementSupplyFk,
                                                quantity,
                                                userFk)
        VALUES (vItemShelvingFk,
                vItemPlacementSupplyFk,
                vQuantity,
                getUser());

        UPDATE vn.itemShelving
            SET visible = visible - vQuantity
            WHERE id = vItemShelvingFk;
                    

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 `itemShelvingProblem` */;
/*!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 `itemShelvingProblem`(vSectorFk INT)
BEGIN

	DECLARE vVisibleCache INT;
    DECLARE vWarehouseFk INT;
    
    SELECT warehouseFk INTO vWarehouseFk
		FROM vn.sector
        WHERE id = vSectorFk;

	CALL cache.visible_refresh (vVisibleCache, FALSE, vWarehouseFk);
		
	SELECT 	t.id as ticketFk, 
		CAST(s.quantity AS DECIMAL(10,0)) as Cantidad, 
        s.itemFk, 
        s.concept, 
        v.visible - GREATEST(0,iss.visible) + IFNULL(sub3.transit,0) as Nicho, 
        i.subName,
        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
			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
			(SELECT itemFk, sum(saldo) as transit 
				FROM vn.itemPlacementSupplyList 
                WHERE saldo > 0 
					AND sectorFk = vSectorFk
                GROUP BY itemFk) sub3 ON sub3.itemFk = i.id
		WHERE v.visible + IFNULL(sub3.transit,0) - GREATEST(0,iss.visible)  < s.quantity 
			AND IFNULL(sub3.transit,0) < s.quantity
			AND s.isPicked = FALSE 
			AND s.reserved = FALSE
			AND t.shipped BETWEEN CURDATE() AND MIDNIGHT(CURDATE()) 
			AND tst.isPreviousPreparable = TRUE
			AND t.warehouseFk = vWarehouseFk
            AND iss.sectorFk = vSectorFk
			AND mm.Id_Movimiento IS NULL
		ORDER BY itemFk;
                    
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 `itemShelvingRadar` */;
/*!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 `itemShelvingRadar`(vSectorFk INT)
proc:BEGIN
	
	DECLARE vCalcVisibleFk INT;
	DECLARE vCalcAvailableFk INT;
	DECLARE hasFatherSector BOOLEAN;
	DECLARE vBuyerFk INT DEFAULT 0;
	DECLARE vWarehouseFk INT DEFAULT 0;
	DECLARE vSonSectorFk INT;
   	DECLARE vWorkerFk INT;
    
   	SELECT s.workerFk 
   		INTO vWorkerFk 
  		FROM vn.sector s
  		WHERE s.id = vSectorFk;
  	
   IF IFNULL(vWorkerFk,0) THEN
   
   		CALL vn.itemShelvingRadar_Urgent(vWorkerFk);
   		LEAVE proc;
   	
   end if;
  
   
    SELECT w.id, s.warehouseFk INTO vBuyerFk, vWarehouseFk
		FROM vn.worker w 
			JOIN vn.sector s ON s.code = w.code
            WHERE s.id = vSectorFk;
    
    SELECT s.id INTO vSectorFk
		FROM vn.sector s
        WHERE s.warehouseFk = vWarehouseFk
			AND s.isMain;


    SELECT COUNT(*) INTO hasFatherSector
		FROM vn.sector
        WHERE sonFk = vSectorFk;
        
    SELECT warehouseFk, sonFk INTO vWarehouseFk, vSonSectorFk
		FROM vn.sector
        WHERE id = vSectorFk;
        
	CALL cache.visible_refresh(vCalcVisibleFk, TRUE, vWarehouseFk);
    CALL cache.available_refresh(vCalcAvailableFk, FALSE, vWarehouseFk, CURDATE());
    
    DROP TEMPORARY TABLE IF EXISTS tmp.itemShelvingRadar;
    
    IF hasFatherSector THEN
   
		CREATE TEMPORARY TABLE tmp.itemShelvingRadar
			(PRIMARY KEY (itemFk))
			ENGINE = MEMORY 
            SELECT * FROM (
			SELECT iss.itemFk,
					i.longName,
					i.size,
					i.subName producer,
					IFNULL(a.available,0) available,
					SUM(IF(s.sonFk = vSectorFk, IFNULL(iss.visible,0), 0)) upstairs,
					SUM(IF(iss.sectorFk = vSectorFk, IFNULL(iss.visible,0), 0)) downstairs,
					IF(it.isPackaging, null, IFNULL(v.visible,0)) as visible,
                    vSectorFk as sectorFk
                    
			FROM vn.itemShelvingStock iss
				JOIN vn.sector s ON s.id = iss.sectorFk
				JOIN vn.item i on i.id = iss.itemFk
                JOIN vn.itemType it ON it.id = i.typeFk AND vBuyerFk IN (0,it.workerFk)
				LEFT JOIN cache.available a ON a.item_id = iss.itemFk AND a.calc_id = vCalcAvailableFk
				LEFT JOIN cache.visible v  ON v.item_id = iss.itemFk AND v.calc_id = vCalcVisibleFk
                WHERE vSectorFk IN (iss.sectorFk, s.sonFk)
					AND it.workerFk != 3366
					
			GROUP BY iss.itemFk
            
            UNION ALL
            
            SELECT  v.item_id,
					i.longName,
					i.size,
					i.subName producer,
					IFNULL(a.available,0) as available,
					0 upstairs,
					0 downstairs,
					IF(it.isPackaging, NULL, v.visible) visible,
                    vSectorFk as sectorFk
				FROM cache.visible v  
					JOIN vn.item i on i.id = v.item_id
                    JOIN vn.itemType it ON it.id = i.typeFk AND vBuyerFk IN (0,it.workerFk)
                    LEFT JOIN vn.itemShelvingStock iss ON iss.itemFk = v.item_id AND iss.warehouseFk = vWarehouseFk
                    LEFT JOIN cache.available a ON a.item_id = v.item_id AND a.calc_id = vCalcAvailableFk
                WHERE v.calc_id = vCalcVisibleFk
					AND iss.itemFk IS NULL
                    AND it.isInventory
                    ) sub GROUP BY itemFk;
                    
		SELECT ishr.*, 
				CAST(visible - upstairs - downstairs AS DECIMAL(10,0)) AS nicho,
                CAST(downstairs - IFNULL(notPickedYed,0) AS DECIMAL(10,0)) as pendiente
                FROM tmp.itemShelvingRadar ishr
					JOIN vn.item i ON i.id = ishr.itemFk
					LEFT JOIN (SELECT s.itemFk, sum(s.quantity) as notPickedYed
								FROM vn.ticket t
									JOIN vn.ticketStateToday tst ON tst.ticket = t.id
									JOIN vn.sale s ON s.ticketFk = t.id
								WHERE t.warehouseFk = vWarehouseFk
                                    AND tst.alertLevel = 0
								GROUP BY s.itemFk
							) sub ON sub.itemFk = ishr.itemFk
				ORDER BY i.typeFk, i.longName
				;
							
    
    ELSE
		
		CREATE TEMPORARY TABLE tmp.itemShelvingRadar
			(PRIMARY KEY (itemFk))
			ENGINE = MEMORY 
			SELECT iss.itemFk,
					0 `hour`,
					0 `minute`,
					'--' itemPlacementCode,
					i.longName,
					i.size,
					i.subName producer,
					i.upToDown,
					IFNULL(a.available,0) available,
					IFNULL(v.visible - iss.visible,0) dayEndVisible,
					IFNULL(v.visible - iss.visible,0) firstNegative,
					IFNULL(v.visible - iss.visible,0) itemPlacementVisible, 
					IFNULL(i.minimum * b.packing,0) itemPlacementSize,
					ips.onTheWay,
					iss.visible itemShelvingStock,
					IFNULL(v.visible,0) visible,
					b.isPickedOff,
					iss.sectorFk
			FROM vn.itemShelvingStock iss
				JOIN vn.item i on i.id = iss.itemFk
				LEFT JOIN cache.last_buy lb ON lb.item_id = iss.itemFk AND lb.warehouse_id = vWarehouseFk
					LEFT JOIN vn.buy b ON b.id = lb.buy_id
				LEFT JOIN cache.available a ON a.item_id = iss.itemFk AND a.calc_id = vCalcAvailableFk
				LEFT JOIN cache.visible v  ON v.item_id = iss.itemFk AND v.calc_id = vCalcVisibleFk
				LEFT JOIN (SELECT itemFk, sum(saldo) as  onTheWay
								FROM vn.itemPlacementSupplyList 
								WHERE saldo > 0 
								GROUP BY itemFk
							) ips ON ips.itemFk = i.id
				WHERE IFNULL(iss.sectorFk,0) IN (0, vSectorFk) 
					OR iss.sectorFk = vSectorFk;            
		/* 
		UPDATE tmp.itemShelvingRadar isr
			JOIN vn.itemShelvingStock iss ON iss.itemFk = isr.itemFk
                    SET isr.dayEndVisible = isr.dayEndVisible +  iss.visible,
						isr.firstNegative = isr.firstNegative + iss.visible,
                        isr.itemPlacementVisible = isr.itemPlacementVisible + iss.visible
					WHERE iss.sectorFk = vSonSectorFk;
        */
		DROP TEMPORARY TABLE IF EXISTS tmp.itemOutTime;
		CREATE TEMPORARY TABLE tmp.itemOutTime
			 SELECT *,SUM(amount) quantity
				FROM 
					 (SELECT 	item_id itemFk,
								amount, 
								IF(HOUR(t.shipped), HOUR(t.shipped), HOUR(z.`hour`)) as hours, 
								IF(MINUTE(t.shipped), MINUTE(t.shipped), MINUTE(z.`hour`)) as minutes
							FROM vn2008.item_out io
								JOIN tmp.itemShelvingRadar isr ON isr.itemFk = io.item_id
								JOIN vn.ticket t on t.id= io.ticketFk
								JOIN vn.ticketState ts on ts.ticketFk = io.ticketFk
								JOIN vn.state s ON s.id = ts.stateFk
								LEFT JOIN vn.zone z ON z.id = t.zoneFk
								LEFT JOIN (SELECT DISTINCT saleFk 
											FROM vn.saleTracking st 
											WHERE st.created > CURDATE() 
												AND st.isChecked
										)  stPrevious  ON `stPrevious`.`saleFk` = io.saleFk
							WHERE t.warehouseFk = vWarehouseFk
								AND s.isPicked = 0 
								AND NOT io.Reservado 
								AND stPrevious.saleFk IS NULL
								AND io.dat >= CURDATE() 
								AND io.dat < CURDATE()+1
					 ) sub
				GROUP BY itemFk, hours, minutes;
	   
		INSERT INTO tmp.itemShelvingRadar (itemFk)
			SELECT itemFk FROM tmp.itemOutTime
			ON DUPLICATE KEY UPDATE dayEndVisible = dayEndVisible + quantity, 
									firstNegative = if (firstNegative < 0, firstNegative, firstNegative + quantity),
									`hour` = ifnull(if (firstNegative > 0 , `hour`, hours),0),
									`minute` = ifnull(if (firstNegative > 0, `minute`, minutes),0);
/*
		UPDATE tmp.itemShelvingRadar
			SET itemPlacementVisible = 0,
				dayEndVisible = 0,
				firstNegative = 0
				WHERE itemPlacementVisible = - itemShelvingStock;
 */               
		SELECT * FROM tmp.itemShelvingRadar;

	END IF;

	DROP TEMPORARY TABLE tmp.itemShelvingRadar;
    
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 `itemShelvingRadar_Entry` */;
/*!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 `itemShelvingRadar_Entry`(vEntryFk INT)
BEGIN

	DECLARE vWarehouseFk INT DEFAULT 1;
    DECLARE vCalcVisibleFk INT;
    DECLARE vCalcAvailableFk INT;
    DECLARE vTodayDayEnd DATETIME DEFAULT util.dayEnd(CURDATE());
    
	CALL cache.visible_refresh(vCalcVisibleFk, FALSE, 1);
    CALL cache.available_refresh(vCalcAvailableFk, FALSE, vWarehouseFk, CURDATE());
    
    DROP TEMPORARY TABLE IF EXISTS tmp.item;
    CREATE TEMPORARY TABLE tmp.item
    ENGINE = MEMORY
    SELECT DISTINCT itemFk
		FROM vn.buy 
        WHERE entryFk = vEntryFk;
        
	DROP TEMPORARY TABLE IF EXISTS tmp.item2;
    CREATE TEMPORARY TABLE tmp.item2
    ENGINE = MEMORY
    SELECT *
		FROM tmp.item;
    
    SELECT 	i.id as itemFk, 
			i.minimum,
            CAST(IFNULL(v.visible,0) - IFNULL(iss.visible,0) AS DECIMAL(10,0)) as enNicho,
			CAST(IFNULL(a.available,0) AS DECIMAL(10,0))  as disponible,
            CAST(IFNULL(v.visible,0) - IFNULL(iss.visible,0) - ts.todaySold AS DECIMAL(10,0))  as finalDia
    FROM vn.item i
		JOIN tmp.item ti ON ti.itemFk = i.id
        LEFT JOIN cache.visible v ON v.calc_id = vCalcVisibleFk AND v.item_id = i.id
        LEFT JOIN cache.available a ON i.id = a.item_id AND a.calc_id = vCalcAvailableFk
        LEFT JOIN vn.itemShelvingStock iss ON iss.itemFk = i.id
        LEFT JOIN (	SELECT s.itemFk, sum(s.quantity) as todaySold
						FROM vn.sale s
							JOIN tmp.item2 ti ON ti.itemFk = s.itemFk
                            JOIN vn.ticket t ON t.id = s.ticketFk
                            LEFT JOIN vn.ticketState tst  ON tst.ticketFk = t.id
						WHERE t.shipped BETWEEN CURDATE() AND vTodayDayEnd
							AND t.warehouseFk = vWarehouseFk
                            AND IFNULL(tst.productionOrder,0) < 5
						GROUP BY s.itemFK
				) ts ON ts.itemFk = i.id;
    
  
	DROP TEMPORARY TABLE tmp.item;
    DROP TEMPORARY TABLE tmp.item2;
 
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 `itemShelvingRadar_Entry_State_beta` */;
/*!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 `itemShelvingRadar_Entry_State_beta`(vEntryFk INT)
BEGIN

	DECLARE vWarehouseFk INT DEFAULT 1;
    DECLARE vCalcVisibleFk INT;
    DECLARE vCalcAvailableFk INT;
    DECLARE vTodayDayEnd DATETIME DEFAULT util.dayEnd(CURDATE());
    
	CALL cache.visible_refresh(vCalcVisibleFk, FALSE, 1);
    CALL cache.available_refresh(vCalcAvailableFk, FALSE, vWarehouseFk, CURDATE());
    
    DROP TEMPORARY TABLE IF EXISTS tmp.item;
    CREATE TEMPORARY TABLE tmp.item
    ENGINE = MEMORY
    SELECT DISTINCT itemFk
		FROM vn.buy 
        WHERE entryFk = vEntryFk;
        
	DROP TEMPORARY TABLE IF EXISTS tmp.item2;
    CREATE TEMPORARY TABLE tmp.item2
    ENGINE = MEMORY
    SELECT *
		FROM tmp.item;
    
    SELECT 	i.id as itemFk, 
            CAST(IFNULL(iss.visible,0) - IFNULL(v.visible,0)  AS DECIMAL(10,0)) as outShelving
    FROM vn.item i
		JOIN tmp.item ti ON ti.itemFk = i.id
        LEFT JOIN cache.visible v ON v.calc_id = vCalcVisibleFk AND v.item_id = i.id
        LEFT JOIN vn.itemShelvingStock iss ON iss.itemFk = i.id;
    
  
	DROP TEMPORARY TABLE tmp.item;
    DROP TEMPORARY TABLE tmp.item2;
 
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 `itemShelvingRadar_Urgent` */;
/*!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 `itemShelvingRadar_Urgent`()
BEGIN
/**
 * Devuelve lo mismo que itemShelving_filterBuyer per sin filtrar
 */
	DECLARE vCalcVisibleFk INT;
	DECLARE vWarehouseFk INT DEFAULT 60;

	CALL cache.visible_refresh(vCalcVisibleFk, TRUE, vWarehouseFk);

	SELECT * FROM 
		(SELECT sub.itemFk,
				sub.longName,
				CONCAT(DATE_FORMAT(sub2.etd,'%H:%i'), ' salen ', CAST(sub2.pendiente AS DECIMAL(10,0)), ' unidades.') `size`,
				CONCAT(IF(sub2.itemFk, IF(sub2.pendiente > (sub.upstairs + sub.downstairs),'(1) ','(2) '),'(3) ' ),sub.producer) producer,
				sub.upstairs,
				sub.downstairs,
				sub.visible,
				sub.sectorFk,
				CAST(visible - upstairs - downstairs AS DECIMAL(10,0)) nicho,
				sub2.etd
			FROM (SELECT iss.itemFk,
						CONCAT(i.longName,'   ',i.size,'   ',IFNULL(i.subName,'') ) longName,
						'' size,
						CONCAT(iss.parkingCode , '    ', iss.shelvingFk) producer,
						0 upstairs,
						SUM(IFNULL(iss.visible,0)) downstairs,
						IF(it.isPackaging, null, IFNULL(v.visible,0)) visible,
						IFNULL(iss.sectorFk,0) sectorFk 
					FROM itemShelvingStock iss
						JOIN sector s ON s.id = iss.sectorFk
						JOIN item i on i.id = iss.itemFk
						JOIN itemType it ON it.id = i.typeFk
						LEFT JOIN cache.visible v ON v.item_id = iss.itemFk AND v.calc_id = @vCalcVisibleFk
					WHERE s.warehouseFk = vWarehouseFk
					GROUP BY itemFk	
				) sub LEFT JOIN (SELECT s.itemFk, SUM(s.quantity) pendiente, MIN(zc.`hour`) etd
									FROM sale s
										LEFT JOIN saleTracking st ON st.saleFk = s.id
										JOIN ticket t ON t.id = s.ticketFk
										LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
										JOIN client c on c.id = t.clientFk
										JOIN clientType ct ON ct.id = c.clientTypeFk
									WHERE t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
										AND ISNULL(st.saleFk)
										AND ct.code IN ('normal', 'trust')
									GROUP BY s.itemFk
								) sub2 ON sub2.itemFk = sub.itemFk 
			UNION ALL 
			SELECT v.item_id ,
					i.longName,
					CONCAT(DATE_FORMAT(sub5.etd,'%H:%i'), ' salen ', CAST(sub5.pendiente AS DECIMAL(10,0)), ' unidades.') `size`,
					CONCAT(IF(sub5.pendiente,'(0) ','(3) ')) producer,
					0,
					0,
					v.visible,
					IFNULL(iss.sectorFk,0),
					v.visible nicho,
					sub5.etd
				FROM cache.visible v
					JOIN item i ON i.id = v.item_id
					JOIN itemType it ON it.id = i.typeFk
					LEFT JOIN itemShelvingStock iss ON iss.itemFk = v.item_id 
					LEFT JOIN (SELECT s.itemFk , SUM(s.quantity) pendiente, MIN(zc.`hour`) etd
									FROM sale s
										LEFT JOIN saleTracking st ON st.saleFk = s.id
										JOIN ticket t ON t.id = s.ticketFk
										LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
										JOIN client c on c.id = t.clientFk
										JOIN clientType ct ON ct.id = c.clientTypeFk
									WHERE t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
										AND ISNULL(st.saleFk)
										AND ct.code IN ('normal', 'trust')
									GROUP BY s.itemFk
							) sub5 ON sub5.itemFk = v.item_id
				WHERE v.calc_id = @vCalcVisibleFk
					AND ISNULL(iss.itemFk) 
		) sub3
	WHERE nicho
	ORDER BY LEFT(producer,3), etd, producer;
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 `itemShelvingSale_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 `itemShelvingSale_Add`(vItemShelvingFk INT, vSaleFk INT, vQuantity INT)
BEGIN
/**
 * Añade línea a itemShelvingSale y regulariza el carro
 * 
 * @param vItemShelvingFk Id itemShelving
 * @param vSaleFk Id de sale
 * @param vQuantity cantidad a regularizar 
 */
	INSERT INTO itemShelvingSale(itemShelvingFk,
								saleFk,
								quantity,
								userFk)
	VALUES (vItemShelvingFk,
			vSaleFk,
			vQuantity,
			getUser());

	UPDATE itemShelving
		SET visible = visible - vQuantity
		WHERE id = vItemShelvingFk;

	UPDATE vn.saleTracking
		SET  isChecked = 1
		WHERE saleFk = vSaleFk;

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 `itemShelvingTransfer` */;
/*!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 `itemShelvingTransfer`(vItemShelvingFk INT,shelvingFkD VARCHAR(22))
BEGIN
	
	UPDATE vn.itemShelving
		SET shelvingFk = shelvingFkD
		WHERE id = vItemShelvingFk;
   
	SELECT true;

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 `itemShelving_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 `itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vShelve VARCHAR(2), 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.
 *
 * @param vShelvingFk matrícula del carro
 * @param vBarcode el id del registro
 * @param vShelve de itemshleving
 * @param vQuantity indica la cantidad del producto
 * @param vPackagingFk el packaging del producto en itemShelving, NULL para coger el de la ultima compra
 * @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;

	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 
				AND packing  = vPacking) = 1 THEN

		UPDATE itemShelving
			SET visible = visible+vQuantity
			WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking; 

	ELSE
		CALL cache.last_buy_refresh(FALSE);
		INSERT INTO itemShelving(   itemFk,
                                    shelvingFk,
                                    shelve,
                                    visible,
                                    grouping,
                                    packing,
                                    packagingFk)

		SELECT  vItemFk,
                vShelvingFk,
                vShelve,
                vQuantity,
                IFNULL(vGrouping, b.grouping),
                IFNULL(vPacking, b.packing),
                IFNULL(vPackagingFk, b.packageFk)
            FROM item i
				LEFT JOIN cache.last_buy lb ON i.id = lb.item_id AND lb.warehouse_id = vWarehouseFk
				LEFT JOIN buy b ON b.id = lb.buy_id
			WHERE i.id = vItemFk;
	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 `itemShelving_addByClaim` */;
/*!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 `itemShelving_addByClaim`(vClaimFk INT, vShelvingFk VARCHAR(3))
BEGIN
/**
 * Insert items of claim into itemShelving.
 *
 * @param vClaimFk The claim
 * @param vShelvingFk The shelving
 * @table tmp.buyUltimate
 */
	DECLARE vWarehouseFk INT;

	SELECT t.warehouseFk INTO vWarehouseFk
		FROM claim c
			JOIN ticket t ON t.id = c.ticketFk
		WHERE c.id = vClaimFk;

	CALL buyUltimate (vWarehouseFk, CURDATE());

	INSERT INTO itemShelving (itemFk, shelvingFk, packing, `grouping`, visible)
		SELECT s.itemFk, vShelvingFk, b.packing, b.`grouping`, cb.quantity AS visible
			FROM claim c
				JOIN claimBeginning cb ON c.id = cb.claimFk
				JOIN sale s ON s.id = cb.saleFk
				JOIN ticket t ON t.id = s.ticketFk
				JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk AND bu.warehouseFk = t.warehouseFk
				JOIN buy b ON b.id = bu.buyFk
			WHERE c.id = vClaimFk;
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 `itemShelving_BuyerGet` */;
/*!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 `itemShelving_BuyerGet`( )
BEGIN

	SELECT * FROM vn.buyer;
        
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 `itemShelving_BuyerTask` */;
/*!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 `itemShelving_BuyerTask`(vWorkerFk INT )
BEGIN

	SELECT 	ish.id,
			ish.itemFk,
			i.longName,
			i.image,
			p.code as parking,
			ish.shelvingFk,
			ish.visible,
			ish.created,
			ish.stars
		FROM vn.itemShelving ish
			JOIN vn.item i ON i.id = ish.itemFk
			JOIN vn.itemType it ON it.id = i.typeFk
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk
			JOIN vn.parking p ON p.id = sh.parkingFk
			JOIN vn.sector s ON s.id = p.sectorFk
		WHERE s.warehouseFk = 1
			AND it.workerFk = vWorkerFk
			AND ish.stars IS NULL
		ORDER BY p.pickingOrder;
        
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 `itemShelving_filterBuyer` */;
/*!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 `itemShelving_filterBuyer`(vBuyerFk INT, vWarehouseFk INT)
proc:BEGIN
/**
 * Lista de articulos filtrados por comprador
 *
 * @param vBuyerFk Comprador a filtrar
 * @param vWarehouseFk Warehouse
 * @return Lista de articulos
 */
	DECLARE vCalcVisibleFk INT;
	
	IF vBuyerFk = 103 THEN -- hay que arreglarlo despues de la campaña PAK 23/04/2022
		CALL vn.itemShelvingRadar_Urgent();	
		LEAVE proc;
	END IF;

	CALL cache.visible_refresh(vCalcVisibleFk, TRUE, vWarehouseFk);

	SELECT * FROM 
		(SELECT sub.itemFk,
				sub.longName,
				CONCAT('Hoy saldrán ', CAST(sub2.pendiente AS DECIMAL(10,0)), ' unidades.') `size`,
				CONCAT(IF(sub2.itemFk, IF(sub2.pendiente > (sub.upstairs + sub.downstairs),'(1) ','(2) '),'(3) ' ),sub.producer) producer,
				sub.upstairs,
				sub.downstairs,
				sub.visible,
				sub.sectorFk,
				CAST(visible - upstairs - downstairs AS DECIMAL(10,0)) nicho
			FROM (SELECT iss.itemFk,
						CONCAT(i.longName,'   ',i.size,'   ',IFNULL(i.subName,'') ) longName,
						'' size,
						CONCAT(iss.parkingCode , '    ', iss.shelvingFk) producer,
						0 upstairs,
						SUM(IFNULL(iss.visible,0)) downstairs,
						IF(it.isPackaging, null, IFNULL(v.visible,0)) visible,
						IFNULL(iss.sectorFk,0) sectorFk 
					FROM itemShelvingStock iss
						JOIN sector s ON s.id = iss.sectorFk
						JOIN item i on i.id = iss.itemFk
						JOIN itemType it ON it.id = i.typeFk
						LEFT JOIN cache.visible v ON v.item_id = iss.itemFk AND v.calc_id = vCalcVisibleFk
					WHERE s.warehouseFk = vWarehouseFk
						AND it.workerFk = vBuyerFk
					GROUP BY itemFk	
				) sub LEFT JOIN (SELECT s.itemFk, SUM(s.quantity) pendiente
									FROM sale s
										LEFT JOIN saleTracking st ON st.saleFk = s.id
										JOIN ticket t ON t.id = s.ticketFk 
										JOIN client c on c.id = t.clientFk
										JOIN clientType ct ON ct.id = c.clientTypeFk
									WHERE t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
										AND ISNULL(st.saleFk)
										AND ct.code IN ('normal', 'trust')
									GROUP BY s.itemFk
								) sub2 ON sub2.itemFk = sub.itemFk 
			UNION ALL 
			SELECT v.item_id ,
					i.longName,
					CONCAT('Hoy saldrán ', CAST(sub5.pendiente AS DECIMAL(10,0)), ' unidades.') `size`,
					CONCAT(IF(sub5.pendiente,'(0) ','(3) ')) producer,
					0,
					0,
					v.visible,
					IFNULL(iss.sectorFk,0),
					v.visible nicho
				FROM cache.visible v
					JOIN item i ON i.id = v.item_id
					JOIN itemType it ON it.id = i.typeFk
					LEFT JOIN itemShelvingStock iss ON iss.itemFk = v.item_id 
					LEFT JOIN (SELECT s.itemFk , SUM(s.quantity) pendiente
									FROM sale s
										LEFT JOIN saleTracking st ON st.saleFk = s.id
										JOIN ticket t ON t.id = s.ticketFk 
										JOIN client c on c.id = t.clientFk
										JOIN clientType ct ON ct.id = c.clientTypeFk
									WHERE t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
										AND ISNULL(st.saleFk)
										AND ct.code IN ('normal', 'trust')
									GROUP BY s.itemFk
							) sub5 ON sub5.itemFk = v.item_id
				WHERE v.calc_id = vCalcVisibleFk
					AND ISNULL(iss.itemFk) 
					AND it.workerFk = vBuyerFk
		) sub3
	WHERE nicho
	ORDER BY producer;
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 `itemShelving_get` */;
/*!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 `itemShelving_get`(IN vShelvingFk VARCHAR(8))
BEGIN
/**
 * Lista artículos de itemshelving 
 *
 * @param vShelvingFk matrícula del carro
 * 
 **/

	SELECT ish.itemFk as item, 
		   IFNULL(i.longName, CONCAT(i.name, ' ', i.size)) as description, 
           ish.visible as visible,
           ceil(ish.visible/ish.packing) as stickers,
           ish.packing as packing,
           ish.grouping,
           IF (p.column IS NULL, "", p.column) as col,
           IF (p.row IS NULL, "", p.row) as row,
           IF (p.code IS NULL, "", p.code) as code,
           ish.id,
           s.priority
		FROM itemShelving ish
			JOIN item i ON i.id = ish.itemFk
			INNER JOIN shelving s ON vShelvingFk = s.code COLLATE utf8_unicode_ci
            LEFT JOIN parking p ON s.parkingFk = p.id
		WHERE ish.shelvingFk COLLATE utf8_unicode_ci = vShelvingFk;

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 `itemShelving_getAlternatives` */;
/*!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 `itemShelving_getAlternatives`(vShelvingFk VARCHAR(10))
BEGIN
/**
 * Devuelve un listado de posibles ubicaciones alternativas a ubicar los item de la matricula
 * del carro que se le ha pasado.
 *
 * @param vShelvingFk matricula del carro
 */
	SELECT is2.id,is2.shelvingFk , p.code, is2.itemFk , is2.visible, p.pickingOrder 
		FROM itemShelving is2
			JOIN shelving sh ON sh.code = is2.shelvingFk
			JOIN parking p ON p.id = sh.parkingFk
			JOIN sector s ON s.id = p.sectorFk
			LEFT JOIN worker w ON w.sectorFk = s.id  AND w.id = account.myUser_getId()
			JOIN warehouse wh ON wh.id = s.warehouseFk
			JOIN itemShelving is3 ON is3.itemFk = is2.itemFk AND is3.shelvingFk  = vShelvingFk COLLATE utf8_unicode_ci
		WHERE is2.shelvingFk <> vShelvingFk COLLATE utf8_unicode_ci
		GROUP BY is2.id
		ORDER BY p.pickingOrder DESC;
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 `itemShelving_getInfo` */;
/*!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 `itemShelving_getInfo`(vItemFk VARCHAR(22))
BEGIN
/**
 * Muestra información realtiva a la ubicación de un item
 *
 * @param vItemFk Id del item
 */
	SELECT vn.barcodeToItem(vItemFk)
		INTO vItemFk;

	SELECT 	pk.code Parking,
			sh.code Matricula,
			ish.visible visible,
			ish.created created,
			ish.itemFk itemFk,
			sh.priority
		FROM vn.itemShelving ish
			JOIN vn.shelving sh ON sh.`code` = ish.shelvingFk
			JOIN vn.parking pk ON pk.id = sh.parkingFk
		WHERE ish.itemFk = vItemFk
		ORDER BY sh.priority DESC, created ASC;
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 `itemShelving_getSaleDate` */;
/*!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 `itemShelving_getSaleDate`(vShelvingFk VARCHAR(3))
BEGIN
	
	/* Devuelve la minima fecha en que se necesita cada producto en esa matricula.
	 * 
	 *  @param vShelvingFk Matrícula del carro o pallet
	 */
	
	DECLARE vWarehouseFk INT;

	SELECT warehouseFk INTO vWarehouseFk
		FROM shelving s
			JOIN parking p ON s.parkingFk = p.id 
			JOIN sector st ON st.id = p.sectorFk
		WHERE s.code = vShelvingFk COLLATE utf8_unicode_ci;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.itemShelvingDistinct;
	CREATE TEMPORARY TABLE tmp.itemShelvingDistinct
			(PRIMARY KEY (itemFk))
			ENGINE = MEMORY
		SELECT itemFk, SUM(visible) visible
			FROM vn.itemShelving 
			WHERE shelvingFk = vShelvingFk COLLATE utf8_unicode_ci
			GROUP BY itemFk;	
		
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item
			(PRIMARY KEY (itemFk))
			ENGINE = MEMORY
		SELECT * FROM tmp.itemShelvingDistinct;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.stockByDay;
	CREATE TEMPORARY TABLE tmp.stockByDay
		(index (itemFk, dated))
			ENGINE = MEMORY
		SELECT t3.amount, dated,
			@stock := IF(@itemFk = t3.itemFk,  @stock + t3.amount, t3.amount) stock,
			@itemFk := t3.itemFk itemFk
		FROM (
			SELECT * FROM (
				SELECT t2.* FROM (
					SELECT item_id itemFk, amount, CURDATE() dated 
						FROM cache.stock 
						WHERE warehouse_id = vWarehouseFk
					UNION ALL
					SELECT ish.itemFk, - sum(visible), CURDATE()
						FROM vn.itemShelving ish 
							JOIN shelving sh ON sh.code = ish.shelvingFk 
							JOIN parking p ON sh.parkingFk = p.id 
							JOIN sector s ON s.id = p.sectorFk
						WHERE s.isReserve 
						GROUP BY ish.itemFk
					UNION ALL
					SELECT item_id, sum(iei.amount), dat
						FROM vn2008.item_entry_in iei
						WHERE dat >= CURDATE()
							AND warehouse_id  = vWarehouseFk
	                        AND isVirtualStock = FALSE
						GROUP BY item_id, dat
					UNION ALL	
					SELECT item_id, sum(ieo.amount), dat
						FROM vn2008.item_entry_out ieo 
						WHERE dat >= CURDATE()
							AND warehouse_id  = vWarehouseFk
						GROUP BY item_id, dat
					UNION ALL
					SELECT i.itemFk, sum(io.amount), dat
						FROM vn2008.item_out io
							JOIN tmp.item i ON i.itemFk = io.item_id
						WHERE io.dat >= CURDATE()
							AND io.warehouse_id  = vWarehouseFk
						GROUP BY io.item_id, io.dat
					) t2 
				JOIN tmp.itemShelvingDistinct ish ON ish.itemFk = t2.itemFk) t
				order by t.itemFk, DATE(t.dated), t.amount DESC) t3;
		
	SELECT sbd.itemFk, i.longName, DATE(dated) dated, ish.visible amount, sbd.stock 
		FROM tmp.stockByDay sbd
			JOIN vn.item i ON i.id = sbd.itemFk
			JOIN tmp.itemShelvingDistinct ish ON ish.itemFk = sbd.itemFk
		 WHERE ish.visible >= sbd.stock
		GROUP BY itemFk
		ORDER BY dated;

	DROP TEMPORARY TABLE tmp.stockByDay,
			tmp.itemShelvingDistinct,
		 	tmp.item;
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 `itemShelving_inventory` */;
/*!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 `itemShelving_inventory`(vParkingFromFk INT, vParkingToFk INT)
BEGIN
	
	/**
	 *  Devuelve un listado de ubicaciones a revisar
	 * 
	 * @param vParkingFromFk Parking de partida, identificador de vn.parking
	 * @param vParkingToFk Parking de llegada, identificador de vn.parking
	 */
	
	DECLARE vSectorFk INT;
	DECLARE vPickingOrderFrom INT;
	DECLARE vPickingOrderTo INT;

	SELECT p.sectorFk, p.pickingOrder INTO vSectorFk, vPickingOrderFrom
		FROM vn.parking p
		WHERE p.id = vParkingFromFk;
	
	SELECT p.pickingOrder INTO vPickingOrderTo
		FROM vn.parking p
		WHERE p.id = vParkingToFk;
	
	CALL vn.visible_getMisfit(vSectorFk);

	SELECT 	p.code parking , 
			ish.shelvingFk , 
			ish.itemFk, 
			i.longName,
			ish.visible , 
			ish.visible / ish.packing packs,
			ish.packing,  
			sm.visible - sm.parked faltan
		FROM vn.itemShelving ish 
			JOIN vn.item i ON i.id = ish.itemFk 
			JOIN tmp.stockMisfit sm ON sm.itemFk = ish.itemFk 
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk 
			JOIN vn.parking p ON p.id = sh.parkingFk 
		WHERE p.pickingOrder BETWEEN vPickingOrderFrom AND vPickingOrderTo
			AND p.sectorFk = vSectorFk
		ORDER BY p.pickingOrder ;
		
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 `itemShelving_StarsUpdate` */;
/*!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 `itemShelving_StarsUpdate`(vId INT, vStars INT)
BEGIN

	UPDATE vn.itemShelving
		SET stars = vStars
        WHERE id = vId;
        
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 `itemShelving_update` */;
/*!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 `itemShelving_update`(vVisible INT, vPacking INT, vShelf INT ,vGrouping INT )
BEGIN
/**
 * Actualiza itemShelving.
 *
 * @param vVisible la cantidad visible del registro a actualizar
 * @param vShelf el id del registro a actualizar
 * @param vPacking el packing del del producto en itemShelving
 * @param vGrouping el grouping del producto en itemShelving
 */
	UPDATE itemShelving
		SET visible = vVisible, 
			packing = vPacking, 
			grouping = vGrouping 
        WHERE id = vShelf;

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 `itemStock` */;
/*!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 `itemStock`(vWarehouseFk SMALLINT, vDated DATETIME, vItemFk INT)
BEGIN
/**
 * Calcula el stock del vWarehouseFk desde FechaInventario hasta vDated
 * @param vWarehouse warehouse id
 * @param vDated max date to filter
 * @param vItemFk item id
 **/
	

	DECLARE vIsLogifloraDay BOOLEAN;

	SET vDated = TIMESTAMP(DATE(vDated), '00:00:00');

	SELECT vn.isLogifloraDay(vDated, vWarehouseFk) INTO vIsLogifloraDay ;
    
	DROP TEMPORARY TABLE IF EXISTS tmp.itemList;
	CREATE TEMPORARY TABLE tmp.itemList
		(UNIQUE INDEX i USING HASH (itemFk))
		ENGINE = MEMORY
			SELECT itemFk, SUM(quantity) stock, SUM(quantity) visible, SUM(quantity) available FROM (
				SELECT itemFk, quantity 
                FROM itemTicketOut
					WHERE shipped >= CURDATE() AND shipped < vDated
						AND warehouseFk = vWarehouseFk
                        AND (vItemFk IS NULL OR itemFk = vItemFk)
				UNION ALL
				SELECT itemFk, quantity 
                FROM itemEntryIn i
                	LEFT JOIN edi.warehouseFloramondo wf ON wf.entryFk = i.entryFk 
					WHERE i.landed >= CURDATE() AND i.landed < vDated
						AND i.warehouseInFk = vWarehouseFk
                        AND (vItemFk IS NULL OR i.itemFk = vItemFk)
                        AND (ISNULL(wf.entryFk) OR vIsLogifloraDay)
				UNION ALL
				SELECT itemFk, quantity 
                FROM itemEntryOut
					WHERE shipped >= CURDATE() AND shipped < vDated
						AND warehouseOutFk = vWarehouseFk
                        AND (vItemFk IS NULL OR itemFk = vItemFk)
			) t
			GROUP BY itemFk HAVING stock != 0;

    CALL `cache`.stock_refresh (FALSE);

	INSERT INTO tmp.itemList (itemFk,stock,visible,available)
	SELECT item_id,amount,amount,amount 
		FROM `cache`.stock
		WHERE warehouse_id = vWarehouseFk AND (vItemFk IS NULL OR vItemFk = item_id)
		ON DUPLICATE KEY UPDATE
			stock = stock + VALUES(stock),
			visible = visible + VALUES(visible),
			available = available + VALUES(available);
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 `itemTagMake` */;
/*!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 `itemTagMake`(vItemFk INT)
BEGIN

/* 	* Crea los tags usando la tabla plantilla itemTag 
	* y si no existe a partir de la ficha del artículo.
	* @param vItemFk El item al que se le añaden los tags
*/
	DECLARE vInk VARCHAR(50);
    DECLARE vSize INTEGER;
    DECLARE vCategory VARCHAR(3);
    DECLARE vProducer VARCHAR(50);
    DECLARE vOrigin VARCHAR(20);
    DECLARE vTypeFk INTEGER;
    
	DELETE FROM itemTag 
		WHERE itemFk = vItemFk;
  
	SELECT typeFk INTO vTypeFk 
		FROM item
        WHERE id = vItemFk;
        
	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT vItemFk, itt.tagFk, NULL, itt.priority
			FROM itemTag it
				LEFT JOIN itemTypeTag itt ON itt.itemTypeFk = vTypeFk
			WHERE it.itemFk = vItemFk;
	
    IF (SELECT COUNT(*) FROM itemTag WHERE itemFk = vItemFk LIMIT 1) = 0 THEN

		SELECT ik.name, i.size, i.category, p.name, o.name 
				INTO vInk, vSize, vCategory, vProducer, vOrigin
			FROM item i
				LEFT JOIN ink ik ON ik.id = i.inkFk
                LEFT JOIN producer p ON p.id = i.producerFk AND p.isVisible
                LEFT JOIN origin o ON o.id = i.originFk
			WHERE i.id = vItemFk;
            
		INSERT IGNORE INTO itemTag(itemFk, tagFk, value, priority)
			VALUES(vItemFk, 1, vInk, 1);
                      
		INSERT IGNORE INTO itemTag(itemFk, tagFk, value, priority)
			VALUES (vItemFk, 8, vSize, 2);

		INSERT IGNORE INTO itemTag(itemFk, tagFk, value, priority)
			VALUES(vItemFk, 47, vCategory, 3);

		INSERT IGNORE INTO itemTag(itemFk, tagFk, value, priority)
			VALUES(vItemFk, 37, vProducer, 4);
	   
		INSERT IGNORE INTO itemTag(itemFk, tagFk, value, priority)
			VALUES(vItemFk, 35, vOrigin, 5);
	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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `itemTagReorder` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `itemTagReorder`(itemTypeFk INT)
BEGIN

	SET @isTriggerDisabled = TRUE;
    
    -- No se puede usar temporary porque da error Error Code: 1137. No puedo reabrir tabla: 'i
	DROP TABLE IF EXISTS tmp.item;
	CREATE TABLE tmp.item
		SELECT DISTINCT i.id
			FROM vn.item i 
				WHERE i.typeFk = itemTypeFk;

	UPDATE itemTag it
			JOIN tmp.item i ON i.id = it.itemFk
			JOIN vn.item ON item.id = i.id
            JOIN itemTypeTag itt ON itt.itemTypeFk = item.typeFk AND itt.tagFk = it.tagFk
		SET it.priority = itt.priority
		WHERE itt.itemTypeFk = itemTypeFk;
        
	CALL item_refreshTags(); 

	SET @isTriggerDisabled = FALSE;

	DROP TABLE tmp.item;
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 `itemTagReorderByName` */;
/*!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 `itemTagReorderByName`(vName VARCHAR(255))
BEGIN

	SET @isTriggerDisabled = TRUE;
    
    -- No se puede usar temporary porque da error Error Code: 1137. No puedo reabrir tabla: 'i
	DROP TABLE IF EXISTS tmp.item;
	CREATE TABLE tmp.item
		SELECT DISTINCT i.id
			FROM vn.item i 
				WHERE i.`name` LIKE CONCAT(vName,'%');

	UPDATE itemTag it
			JOIN tmp.item i ON i.id = it.itemFk
			JOIN vn.item ON item.id = i.id
            JOIN itemTypeTag itt ON itt.itemTypeFk = item.typeFk AND itt.tagFk = it.tagFk
		SET it.priority = itt.priority
		WHERE itt.itemTypeFk = itemTypeFk;
        
	CALL item_refreshTags(); 

	SET @isTriggerDisabled = FALSE;

	DROP TABLE tmp.item;
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 `itemTag_replace` */;
/*!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 `itemTag_replace`(vItemFromFk INT, vItemToFk INT, vPicture VARCHAR(100))
BEGIN
	
	/* Reemplaza los tags de un artículo por los de otro, así como su imagen
	 * 
	 * @param vItemFromFk id de vn.item con el artículo del que se toman los tags
	 * @param vItemToFk id de vn.item con el artículo del que se toman los tags
	 * @param vPicture imagen del artículo. Opcional. Si no se especifica, hereada la del vItemFromFk
	 */

	DELETE FROM vn.itemTag 
		WHERE itemFk = vItemToFk;
	
	INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
		SELECT vItemToFk, tagFk, value, priority
			FROM vn.itemTag 
		WHERE itemFk = vItemFromFk;
	
	IF ISNULL(vPicture) THEN
	
		SELECT image INTO vPicture 
			FROM vn.item 
			WHERE id = vItemFromFk;
		
	END IF;

	UPDATE vn.item i 
		SET i.image = vPicture
		WHERE i.id = vItemToFk;
	
	CALL vn.itemRefreshTags(vItemToFk);
	
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 `itemTopSeller` */;
/*!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 `itemTopSeller`()
BEGIN
	DECLARE vCategoryFk INTEGER;
	DECLARE vDone INT DEFAULT FALSE;
	DECLARE rs CURSOR FOR
		 SELECT DISTINCT id
		  FROM  vn.itemCategory
		  WHERE merchandise <> FALSE;
          
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN  
	RESIGNAL;
	END;

	DROP TABLE IF EXISTS tmp.topSellerMin;
	CREATE TEMPORARY TABLE tmp.topSellerMin ENGINE = MEMORY
		SELECT s.itemFk, SUM(s.quantity) AS total, v.tipo_id typeFk
			FROM vn.sale s
				INNER JOIN bs.ventas v ON v.Id_Movimiento = s.id
			WHERE v.fecha BETWEEN TIMESTAMPADD(DAY, - 7, CURDATE()) AND CURDATE()
			GROUP BY s.itemFk;
        
	DROP TABLE IF EXISTS tmp.topSeller;
	CREATE TEMPORARY TABLE tmp.topSeller   
		(   
			`id` int(11) NOT NULL DEFAULT '0',
			`typeFk` smallint(5) unsigned NOT NULL,
			`itemCategoryFk` int(10) unsigned NOT NULL,
			`total` bigint(21) NOT NULL DEFAULT '0'
		) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
		
	OPEN rs;
	 read_loop: LOOP
		FETCH rs INTO vCategoryFk;
		
		IF vDone THEN
			LEAVE read_loop;
		END IF;
		
		INSERT INTO tmp.topSeller
			SELECT  tsm.itemFk, tsm.typeFk, it.categoryFk, tsm.total
			FROM tmp.topSellerMin tsm
				INNER JOIN vn.itemType it ON  it.id = tsm.typeFk
			WHERE it.categoryFk = vCategoryFk
			ORDER BY  tsm.itemFk ,tsm.total DESC
			LIMIT 5; 

	END LOOP;
	CLOSE rs;
    
    SELECT i.name ,i.id, i.image, i.typeFk, it.categoryFk AS itemCategoryFk,
		ic.name AS itemCategoryName, it.name AS itemTypeName, ts.total
		FROM tmp.topSeller ts
			INNER JOIN vn.item i ON i.id = ts.id
			INNER JOIN vn.itemType it ON  it.id = ts.typeFk
			INNER JOIN vn.itemCategory ic ON ic.id = it.categoryFk;
    
    DROP TABLE IF EXISTS topSellerMin;
    DROP TABLE IF EXISTS tmp.topSeller;
    
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 `itemTrash` */;
/*!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 `itemTrash`(
	vItemFk INT, 
	vWarehouseFk INT, 
	vQuantity INT, 
	vIsTrash BOOLEAN)
BEGIN

	DECLARE vTicketFk INT;
    DECLARE vClientFk INT;
    DECLARE vCompanyVnlFk INT DEFAULT 442;
	DECLARE vCalc INT;
        
	SELECT barcodeToItem(vItemFk) INTO vItemFk;	
    
    SELECT IF(vIsTrash, 200, 400) INTO vClientFk;
    
    SELECT t.id INTO vTicketFk
		FROM ticket t
			JOIN address a ON a.id=t.addressFk 
        WHERE t.warehouseFk = vWarehouseFk
			AND t.clientFk = vClientFk
            AND DATE(t.shipped) = CURDATE()
            AND a.isDefaultAddress
	LIMIT 1;        
	
    CALL cache.visible_refresh(vCalc, TRUE, vWarehouseFk);
    
    IF vTicketFk IS NULL THEN 
        
        CALL ticket_add(
       		vClientFk, 
       		CURDATE(),
			vWarehouseFk, 
			vCompanyVnlFk, 
			NULL, 
			NULL, 
			NULL, 
			CURDATE(), 	
			account.myUser_getId(),
			FALSE,
			vTicketFk);
    END IF;
    
    INSERT INTO sale(ticketFk, itemFk, concept, quantity)
		SELECT vTicketFk, 
				vItemFk,
				CONCAT(longName,' ',getWorkerCode(), ' ', LEFT(CAST(NOW() AS TIME),5)), 
				vQuantity
			FROM item 
            WHERE id = vItemFk;
            
	UPDATE cache.visible 
		SET visible = visible - vQuantity
        WHERE calc_id = vCalc 
			AND item_id = vItemFk;
        
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 `itemUpdateTag` */;
/*!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 `itemUpdateTag`(IN vItem BIGINT)
BEGIN


UPDATE item i
JOIN producer p ON p.id = i.producerFk
SET i.subName = p.name
WHERE p.isVisible
AND (vItem IS NULL OR vItem = i.id);

UPDATE item i
JOIN itemTag it ON it.itemFk = i.id
JOIN tag t ON t.id = it.tagFk
SET tag5 = t.name, value5 = it.value
WHERE it.priority = 1
AND (vItem IS NULL OR vItem = i.id);

UPDATE item i
JOIN itemTag it ON it.itemFk = i.id
JOIN tag t ON t.id = it.tagFk
SET tag6 = t.name, value6 = it.value
WHERE it.priority = 2
AND (vItem IS NULL OR vItem = it.itemFk);

UPDATE item i 
JOIN itemTag it ON it.itemFk = i.id
JOIN tag t ON t.id = it.tagFk
SET tag7 = t.name, value7 = it.value
WHERE it.priority = 3
AND (vItem IS NULL OR vItem = it.itemFk);

UPDATE item i
JOIN itemTag it ON it.itemFk = i.id
JOIN tag t ON t.id = it.tagFk
SET tag8 = t.name, value8 = it.value
WHERE it.priority = 4
AND (vItem IS NULL OR vItem = it.itemFk);

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 `item_clean` */;
/*!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 `item_clean`(OUT vHasError BOOL)
BEGIN
/**
 * Elimina todos los items repetidos y los sustituye
 * por el que tiene menor id
 *
 * @return Si da error devuelve a true vHasError
 */
	DECLARE CONTINUE HANDLER FOR SQLSTATE '40001'
	BEGIN
		SET vHasError = TRUE;
	END;

	SET @isModeInventory:= TRUE;

	-- Deletes
	START TRANSACTION;

	UPDATE IGNORE vn.itemCost ic
		JOIN tmp.itemsToReplace itr ON ic.itemFk = itr.idOld
		SET ic.itemFk = itr.idNew;

	DELETE ic.*
		FROM vn.itemCost ic
		JOIN tmp.itemsToReplace itr ON ic.itemFk = itr.idOld;

	DELETE rt.*
		FROM vn2008.rec_translator rt
		JOIN tmp.itemsToReplace itr ON rt.Id_Article = itr.idOld;

	DELETE w.*
		FROM bs.waste w
		JOIN tmp.itemsToReplace itr ON w.itemFk = itr.idOld;

	DELETE pf.*
		FROM vn.priceFixed pf
		JOIN tmp.itemsToReplace itr ON pf.itemFk = itr.idOld;

	DELETE imp.*
		FROM vn.itemMatchProperties imp
		JOIN tmp.itemsToReplace itr ON imp.itemFk = itr.idOld;

	DELETE ib.* 
		FROM vn.itemBotanical ib
		JOIN tmp.itemsToReplace itr ON ib.itemFk = itr.idOld;

	DELETE ip.*
		FROM vn.itemProposal ip
		JOIN tmp.itemsToReplace itr ON ip.itemFk = itr.idOld;

	DELETE it.* 
		FROM vn.itemTag it
		JOIN tmp.itemsToReplace itr ON it.itemFk = itr.idOld;

	DELETE ib.*
		FROM vn.itemBarcode ib
		JOIN tmp.itemsToReplace itr ON ib.itemFk = itr.idOld;

	DELETE itc.*
		FROM vn.itemTaxCountry itc
		JOIN tmp.itemsToReplace itr ON itc.itemFk = itr.idOld;
	
	COMMIT;

	-- Updates
	START TRANSACTION;

	UPDATE vn.buy b
		JOIN tmp.itemsToReplace itr ON b.itemFk = itr.idOld
		SET b.itemFk = itr.idNew;

	UPDATE vn.sale s
		JOIN tmp.itemsToReplace itr ON s.itemFk = itr.idOld
		SET s.itemFk = itr.idNew;

	UPDATE vn.specialPrice sp
		JOIN tmp.itemsToReplace itr ON sp.itemFk = itr.idOld
		SET sp.itemFk = itr.idNew;

	UPDATE vn.packaging p
		JOIN tmp.itemsToReplace itr ON p.itemFk = itr.idOld
		SET p.itemFk = itr.idNew;

	UPDATE vn.packaging p
		JOIN tmp.itemsToReplace itr ON p.freightItemFk = itr.idOld
		SET p.freightItemFk = itr.idNew;

	UPDATE hedera.orderRow o
		JOIN tmp.itemsToReplace itr ON o.itemFk = itr.idOld
		SET o.itemFk = itr.idNew;

	UPDATE vn.itemLog il
		JOIN tmp.itemsToReplace itr ON il.originFk = itr.idOld
		SET il.originFk = itr.idNew;

	UPDATE vn.itemShelving ish
		JOIN tmp.itemsToReplace itr ON ish.itemFk = itr.idOld
		SET ish.itemFk = itr.idNew;

	UPDATE vn.ticketPackagingStartingStock tpss
		JOIN tmp.itemsToReplace itr ON tpss.itemFk = itr.idOld
		SET tpss.itemFk = itr.idNew;

	UPDATE vn.inventoryFailure ifa
		JOIN tmp.itemsToReplace itr ON ifa.itemFk = itr.idOld
		SET ifa.itemFk = itr.idNew;

	UPDATE vn.genericAllocation ga
		JOIN tmp.itemsToReplace itr ON ga.itemFk = itr.idOld
		SET ga.itemFk = itr.idNew;

	UPDATE vn.itemPlacementSupply ips
		JOIN tmp.itemsToReplace itr ON ips.itemFk = itr.idOld
		SET ips.itemFk = itr.idNew;
	
	COMMIT;

	-- Eliminamos los items repetidos
	START TRANSACTION;

	DELETE i.*
		FROM vn.item i
		JOIN tmp.itemsToReplace itr ON i.id = itr.idOld;
	
	COMMIT;

	SET @isModeInventory:= FALSE;
	SET vHasError = FALSE;

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 `item_cleanLauncher` */;
/*!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 `item_cleanLauncher`()
BEGIN
/**
 * Inicia el procedimiento vn.item_clean
 */
	DECLARE vItemTo INT DEFAULT 0;
	DECLARE vStep INT DEFAULT 0;
	DECLARE vCounter INT DEFAULT 0;
	DECLARE vItemFrom INT;
	DECLARE vItemEnd INT;
	DECLARE vQuantity INT;
	DECLARE vHasError BOOL;

	SELECT itemFrom INTO vItemFrom
		FROM vn.itemCleanCount
		ORDER BY created DESC
		LIMIT 1;
	
	IF ISNULL(vItemFrom) THEN
		SELECT MIN(id) INTO vItemFrom
			FROM vn.item i
			WHERE isFloramondo;
	END IF;
	
	SELECT quantity, step
		INTO vQuantity, vStep
		FROM vn.itemCleanConfig;

	SET vItemEnd = vItemFrom + vQuantity;

	DROP TEMPORARY TABLE IF EXISTS tmp.itemsToReplaceSource;
	CREATE TEMPORARY TABLE tmp.itemsToReplaceSource
			SELECT	i.id idOld,
					i2.id idNew
				FROM vn.item i
					JOIN (SELECT i.id,
								i.name,
								i.subname,
								i.value5,
								i.value6,
								i.value7,
								i.value8,
								i.value9,
								i.value10,
								i.NumberOfItemsPerCask,
								i.EmbalageCode,
								i.quality
							FROM vn.item i
								LEFT JOIN (SELECT i.id,
												sr.NumberOfUnits,
												MAX(di.LatestOrderDateTime) lodt
											FROM vn.item i
												JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
												JOIN edi.deliveryInformation di ON di.supplyResponseID = i.supplyResponseFk
											GROUP BY i.id) sub ON sub.id = i.id
							WHERE isFloramondo
								AND (ISNULL(i.supplyResponseFk)
										OR sub.NumberOfUnits = 0
										OR sub.lodt < NOW())
							GROUP BY i.name,
								subname,
								value5,
								value6,
								value7,
								value8,
								value9,
								value10,
								NumberOfItemsPerCask,
								EmbalageCode,
								quality
							ORDER BY i.id) i2 ON i2.name <=> i.name
						AND i2.subname <=> i.subname
						AND i2.value5 <=> i.value5
						AND i2.value6 <=> i.value6
						AND i2.value7 <=> i.value7
						AND i2.value8 <=> i.value8
						AND i2.value9 <=> i.value9
						AND i2.value10 <=> i.value10
						AND i2.NumberOfItemsPerCask <=> i.NumberOfItemsPerCask
						AND i2.EmbalageCode <=> i.EmbalageCode
						AND i2.quality <=> i.quality
				WHERE isFloramondo
					AND i.id <> i2.id
				ORDER BY i2.id;
	
	WHILE vItemTo < vItemEnd AND NOT (SELECT isStop FROM vn.itemCleanConfig) DO
	
		SET vItemTo = LEAST(vItemEnd, vItemFrom + vStep);
	
		SELECT COUNT(*) INTO vCounter
			FROM tmp.itemsToReplaceSource
			WHERE idNew BETWEEN vItemFrom AND vItemTo;
	
		DROP TEMPORARY TABLE IF EXISTS tmp.itemsToReplace;
		CREATE TEMPORARY TABLE tmp.itemsToReplace
				SELECT *
					FROM tmp.itemsToReplaceSource
					WHERE idNew BETWEEN vItemFrom AND vItemTo;
	
		CALL vn.item_clean(vHasError);
				
		IF NOT vHasError THEN
			SET vItemFrom = vItemTo;
		END IF;
		
		INSERT INTO vn.itemCleanCount(itemFrom, itemDeleted)
			VALUES (vItemFrom, vCounter);
	
	END WHILE;

	DROP TEMPORARY TABLE IF EXISTS tmp.itemsToReplace;
	DROP TEMPORARY TABLE IF EXISTS tmp.itemsToReplaceSource;

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 `item_deactivateUnused` */;
/*!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 `item_deactivateUnused`()
BEGIN
/**
 * Cambia a false el campo isActive de la tabla vn.item para todos aquellos
 * items que no se han comprado en los últimos meses configurados en
 * @vn.itemConfig.monthToDeactivate
 */
	DECLARE vMonthToDeactivate INT;

	SELECT monthToDeactivate INTO vMonthToDeactivate
		FROM vn.itemConfig;

	DROP TEMPORARY TABLE IF EXISTS tmp.buyMaxCreated;
	CREATE TEMPORARY TABLE tmp.buyMaxCreated
		ENGINE = MEMORY
		SELECT b.itemFk,
				MAX(b.created) created
			FROM vn.buy b
				JOIN vn.item i ON i.id = b.itemFk
			WHERE i.isActive
			GROUP BY itemFk;

	UPDATE vn.item i
			JOIN tmp.buyMaxCreated bmc ON bmc.itemFk = i.id
		SET i.isActive = FALSE
		WHERE bmc.created < CURDATE() - INTERVAL vMonthToDeactivate MONTH;

	DROP TEMPORARY TABLE IF EXISTS tmp.buyMaxCreated;
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 `item_getBalance` */;
/*!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 `item_getBalance`(IN vItemId int, IN vWarehouse int)
BEGIN
    DECLARE vDateInventory DATETIME;
    DECLARE vCurdate DATE DEFAULT CURDATE();
    DECLARE vDayEnd DATETIME DEFAULT util.dayEnd(vCurdate);

    SELECT inventoried INTO vDateInventory FROM config;
    SET @a = 0;
    SET @currentLineFk = 0;
    SET @shipped = '';

    SELECT DATE(@shipped:= shipped) shipped,
        alertLevel,
        stateName,
        origin,
        reference,
        clientFk,
        name,
        `in` AS invalue,
        `out`,
        @a := @a + IFNULL(`in`,0) - IFNULL(`out`,0) as balance,
        @currentLineFk := IF (@shipped < CURDATE() 
                            OR (@shipped = CURDATE() AND (isPicked OR alertLevel >= 2)),
                        lineFk,@currentLineFk) lastPreparedLineFk,
        isTicket,
        lineFk,
        isPicked,
        clientType,
        claimFk
        FROM
            ( SELECT  tr.landed AS shipped,
                    b.quantity AS `in`,
                    NULL AS `out`,
                    al.id AS alertLevel,
                    st.name AS stateName,
                    s.name AS name,
                    e.ref AS reference,
                    e.id AS origin,
                    s.id AS clientFk,
                    IF(al.id = 3, TRUE, FALSE) isPicked,
                    FALSE AS isTicket,
                    b.id lineFk,
                    NULL `order`,
                    NULL AS clientType,
                    NULL AS claimFk
                FROM buy b
                    JOIN entry e ON e.id = b.entryFk
                    JOIN travel tr ON tr.id = e.travelFk
                    JOIN supplier s ON s.id = e.supplierFk
                    JOIN alertLevel al ON al.id = 
                        CASE
                            WHEN tr.landed < CURDATE() THEN 3
                            WHEN tr.landed = CURDATE() AND tr.isReceived = TRUE THEN 3
                            ELSE 0
                        END
                    JOIN state st ON st.code = al.code
                WHERE tr.landed >= vDateInventory
                    AND vWarehouse = tr.warehouseInFk 
                    AND b.itemFk = vItemId
                    AND e.isExcludedFromAvailable = FALSE
                    AND e.isRaid = FALSE
            UNION ALL

            SELECT tr.shipped,
                    NULL,
                    b.quantity,
                    al.id,
                    st.name,
                    s.name,
                    e.ref,
                    e.id,
                    s.id,
                    IF(al.id = 3, TRUE, FALSE),
                    FALSE,
                    b.id,
                    NULL,
                    NULL,
                    NULL
                FROM buy b
                    JOIN entry e ON e.id = b.entryFk
                    JOIN travel tr ON tr.id = e.travelFk
                    JOIN warehouse w ON w.id = tr.warehouseOutFk
                    JOIN supplier s ON s.id = e.supplierFk
                    JOIN alertLevel al ON al.id = 
                        CASE
                            WHEN tr.shipped < CURDATE() THEN 3
                            WHEN tr.shipped = CURDATE() AND tr.isReceived = TRUE THEN 3
                            ELSE 0
                        END
                    JOIN state st ON st.code = al.code
                WHERE tr.shipped >= vDateInventory
                    AND vWarehouse =tr.warehouseOutFk
                    AND s.id <> 4
                    AND b.itemFk = vItemId
                    AND e.isExcludedFromAvailable = FALSE
                    AND w.isFeedStock = FALSE
                    AND e.isRaid = FALSE
            UNION ALL

            SELECT DATE(t.shipped),
                NULL,
                s.quantity,
                al.id,
                st.name,
                t.nickname,
                t.refFk,
                t.id,
                t.clientFk,
                stk.id,
                TRUE,
                s.id,
                st.`order`,
                ct.code,
                cb.claimFk
                FROM sale s
                    JOIN ticket t ON t.id = s.ticketFk
                    LEFT JOIN ticketState ts ON ts.ticket = t.id
                    LEFT JOIN state st ON st.code = ts.code
                    JOIN client c ON c.id = t.clientFk
                    JOIN clientType ct ON ct.id = c.clientTypeFk
                    JOIN alertLevel al ON al.id = 
                        CASE
                            WHEN t.shipped < curdate() THEN 3
                            WHEN t.shipped > util.dayEnd(curdate()) THEN 0
                            ELSE IFNULL(ts.alertLevel, 0)
                        END
                    LEFT JOIN state stPrep ON stPrep.`code` = 'PREPARED'
                    LEFT JOIN saleTracking stk ON stk.saleFk = s.id AND stk.stateFk = stPrep.id
                    LEFT JOIN claimBeginning cb ON s.id = cb.saleFk 
                WHERE t.shipped >= vDateInventory
                    AND s.itemFk = vItemId
                    AND vWarehouse =t.warehouseFk
                ORDER BY shipped, alertLevel DESC, isTicket, `order` DESC, isPicked DESC, `in` DESC, `out` DESC
            ) AS itemDiary;

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 `item_getInfo` */;
/*!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 `item_getInfo`(IN `vBarcode` VARCHAR(22), IN `vWarehouseFk` INT)
BEGIN

/**
 * Devuelve información relativa al item correspondiente del vBarcode pasado
 * 
 * @param vBarcode código relativo al ítem
 * @param vWarehouseFk código del almacén
 */
	DECLARE vCacheVisibleFk INT;
	DECLARE vCacheAvailableFk INT;
	DECLARE vVisibleItemShelving INT;
	DECLARE vItemFk INT;
	
	CALL cache.visible_refresh(vCacheVisibleFk, FALSE, vWarehouseFk);
	CALL cache.available_refresh(vCacheAvailableFk, FALSE, vWarehouseFk, CURDATE());
	CALL buyUltimate(vWarehouseFk, CURDATE());
	
	SELECT barcodeToItem(vBarcode) INTO vItemFk;
	SELECT SUM(visible) INTO vVisibleItemShelving
		FROM itemShelvingStock
		WHERE itemFk = vItemFk 
			AND warehouseFk = vWarehouseFk;
		
	SELECT i.id,
			i.longName,
			i.tag5,
			i.value5,
			i.tag6,
			i.value6,
			i.tag7,
			i.value7,
			i.image,
			i.`size`,
			i.stems,
			i.category,
			i.minimum `min`,
			p.name producer,
			o.code origin,
			v.visible - IFNULL(vVisibleItemShelving, 0) unlocated,
			a.available,
			vVisibleItemShelving,
			v.visible,
			b.`grouping`,
			b.packing,
			CONCAT('https://verdnatura.es/vn-image-data/catalog/200x200/', i.image) urlImage200,
			CONCAT('https://verdnatura.es/vn-image-data/catalog/1600x900/', i.image) urlImage,
			i.itemPackingTypeFk,
			i.comment reference,
			u.name buyer,
			IFNULL(b.buyingValue, 0) +
				IFNULL(b.freightValue, 0) + 
				IFNULL(b.comissionValue, 0) + 
				IFNULL(b.packageValue, 0) itemCost
		FROM item i
			LEFT JOIN producer p ON p.id = i.producerFk
			LEFT JOIN origin o ON o.id = i.originFk
			LEFT JOIN cache.visible v ON v.calc_id = vCacheVisibleFk 
				AND v.item_id = i.id
			LEFT JOIN cache.available a ON a.calc_id = vCacheAvailableFk 
				AND a.item_id = i.id
			LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = i.id
			LEFT JOIN buy b ON b.id = bu.buyFk 
				AND bu.warehouseFk = vWarehouseFk
			JOIN itemType it ON it.id = i.typeFk
			JOIN account.user u ON u.id = it.workerFk 
		WHERE i.id = vItemFk;
	DROP TEMPORARY TABLE tmp.buyUltimate;

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 `item_getLack` */;
/*!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 `item_getLack`(IN vForce BOOLEAN, IN vDays INT)
BEGIN
/**
 * Calcula una tabla con el máximo negativo visible para cada producto y almacen
 * 
 * @param vForce Fuerza el recalculo del stock
 * @param vDays Numero de dias a considerar
**/

	CALL `cache`.stock_refresh(vForce);
	CALL item_getMinacum(NULL, CURDATE(), vDays, NULL);
	CALL item_getMinETD();

	SELECT i.id itemFk, 
			i.longName,
			w.id warehouseFk,
			p.`name` producer, 
			i.`size`,
			i.category,
			w.name warehouse, 
			SUM(IFNULL(sub.amount,0)) lack,
			i.inkFk,
			IFNULL(im.timed, util.midnight()) timed			
		FROM (SELECT item_id, 
						warehouse_id, 
						amount
					FROM cache.stock
					WHERE amount > 0
				UNION ALL
				SELECT itemFk, 
						warehouseFk, 
						amount
					FROM tmp.itemMinacum
			) sub
			JOIN warehouse w ON w.id = sub.warehouse_id
			JOIN item i ON i.id = sub.item_id
			LEFT JOIN producer p ON p.id = i.producerFk 
			JOIN itemType it ON it.id = i.typeFk 
			JOIN itemCategory ic ON ic.id = it.categoryFk
			LEFT JOIN tmp.itemMinETD im ON im.itemFk = i.id
		WHERE w.isForTicket
			AND ic.display <> 0
			AND it.code != 'GEN'
		GROUP BY i.id, w.id
		HAVING lack < 0;

	DROP TEMPORARY TABLE tmp.itemMinacum;
	DROP TEMPORARY TABLE tmp.itemMinETD;
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 `item_getMinacum` */;
/*!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 `item_getMinacum`(IN vWarehouseFk TINYINT, IN vDatedFrom DATETIME, IN vRange INT, IN vItemFk INT)
BEGIN
/**
 * Cálculo del mínimo acumulado, para un item si especificado, para todo el stock si es nulo
 *
 * @param vWarehouseFk -> warehouseFk
 * @param vDatedFrom -> fecha inicio
 * @param vRange -> número de días a considerar
 * @param vItemFk -> Identificador de item
 * @return tmp.itemMinacum
*/

	DECLARE vDatedTo DATETIME;

	SET vDatedFrom = TIMESTAMP(DATE(vDatedFrom), '00:00:00');
	SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, vRange, vDatedFrom), '23:59:59');

	DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum;

	CREATE TEMPORARY TABLE tmp.itemMinacum
		(INDEX(itemFk))
		ENGINE = MEMORY
		SELECT sub1.itemFk, 
				sub1.warehouseFk, 
				minacum(sub1.dated, amount, DATE(vDatedFrom)) amount 
			FROM (SELECT sub.itemFk, 
						sub.dated, 
						SUM(sub.amount) amount, 
						sub.warehouseFk 
					FROM (SELECT s.itemFk, 
								DATE(t.shipped) dated,
								-s.quantity amount, 
								t.warehouseFk
							FROM sale s 
								JOIN ticket t ON t.id = s.ticketFk 
							WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
								AND s.quantity != 0
								AND (vItemFk IS NULL OR s.itemFk = vItemFk)
								AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
						UNION ALL
						SELECT b.itemFk, 
								t.landed, 
								b.quantity, 
								t.warehouseInFk 
							FROM buy b 
								JOIN entry e ON e.id = b.entryFk 
								LEFT JOIN travel t ON t.id = e.travelFk 
							WHERE t.landed BETWEEN vDatedFrom AND vDatedTo
								AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
								AND !e.isExcludedFromAvailable 
								AND b.quantity != 0
								AND (vItemFk IS NULL OR b.itemFk = vItemFk)
						UNION ALL
						SELECT b.itemFk, 
								t.shipped, 
								-b.quantity, 
								t.warehouseOutFk
							FROM buy b 
								JOIN entry e ON e.id = b.entryFk 
								LEFT JOIN travel t ON t.id = e.travelFk 
							WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
								AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
								AND !e.isExcludedFromAvailable
								AND b.quantity != 0
								AND (vItemFk IS NULL OR b.itemFk = vItemFk)
								AND !e.isRaid
						) sub
					GROUP BY sub.itemFk, sub.dated, sub.warehouseFk
				) sub1
			GROUP BY sub1.itemFk, sub1.warehouseFk
			HAVING amount != 0;
	
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 `item_getMinETD` */;
/*!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 `item_getMinETD`()
BEGIN
	
/* Devuelve una tabla temporal con la primera ETD, para todos los artículos con salida hoy.
 * 
 * @return tmp.itemMinETD(itemFk, timed)
 */
	
	DECLARE vMidnight DATETIME DEFAULT util.midnight();

	DROP TEMPORARY TABLE IF EXISTS tmp.itemMinETD;

	CREATE TEMPORARY TABLE tmp.itemMinETD
		(INDEX (itemFk))
		ENGINE = MEMORY
		SELECT s.itemFk, MIN(TIME(IFNULL(z.`hour`,vMidnight))) timed
			FROM ticket t
				JOIN sale s ON s.ticketFk = t.id
				LEFT JOIN `zone` z ON z.id = t.zoneFk 
			WHERE t.shipped BETWEEN CURDATE() AND vMidnight
			GROUP BY s.itemFk;
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 `item_getSimilar` */;
/*!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 `item_getSimilar`(vItemFk INT, vWarehouseFk INT, vDate DATE, vIsShowedByType BOOL)
BEGIN

/**
 * Propone articulos similares para posible cambio,
 * ordenado con la cantidad de veces usado y segun sus caracteristicas
 *
 * @param vItemFk item id
 * @param vWarehouseFk warehouse id
 * @param vDate fecha para revisar disponible
 * @param vIsShowedByType para mostrar solo artículos de ese tipo
 */  

    DECLARE vCalcFk INT;
    DECLARE vTypeFk INT;
    
    DECLARE vTag1 VARCHAR(25) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vTag5 VARCHAR(25) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vTag6 VARCHAR(25) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vTag7 VARCHAR(25) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vTag8 VARCHAR(25) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    
    DECLARE vValue1 VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vValue5 VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vValue6 VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vValue7 VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
    DECLARE vValue8 VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';

       
    SELECT typeFk, tag5, value5, tag6, value6, tag7, value7, tag8, value8, t1.name, it1.value
        INTO vTypeFk, vTag5, vValue5, vTag6, vValue6, vTag7, vValue7, vTag8, vValue8, vTag1, vValue1
        FROM vn.item i
            LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
            LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
        WHERE i.id = vItemFk;
    
    CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vDate);
    
    SELECT i.id itemFk,
            i.longName,
            i.subName,
            i.tag5,
            i.value5,
            (i.value5 <=> vValue5) match5,
            i.tag6,
            i.value6,
            (i.value6 <=> vValue6) match6,
            i.tag7,
            i.value7,
            (i.value7 <=> vValue7) match7,
            i.tag8,
            i.value8,
            (i.value8 <=> vValue8) match8,
            a.available,
            IFNULL(ip.counter,0) counter,
            IF(b.groupingMode = 1, b.grouping, b.packing) as minQuantity
        FROM vn.item i
            JOIN cache.available a ON a.item_id = i.id
            LEFT JOIN vn.itemProposal ip ON ip.mateFk = i.id AND ip.itemFk = vItemFk
            LEFT JOIN vn.itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
			LEFT JOIN vn.tag t1 ON t1.id = it1.tagFk
			LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = vWarehouseFk
			LEFT JOIN vn.buy b ON b.id = lb.buy_id
        WHERE a.calc_id = vCalcFk
            AND available > 0
            AND IF(vIsShowedByType, i.typeFk = vTypeFk, TRUE)
            AND i.id != vItemFk
        ORDER BY counter DESC,
                (t1.name = vTag1) DESC,
                (it1.value = vValue1) DESC,
                (i.tag6 = vTag6) DESC,                
                (i.value6 = vValue6) DESC,
                (i.tag5 = vTag5) DESC,
                (i.value5 = vValue5) DESC,
                (i.tag7 = vTag7) DESC,
                (i.value7 = vValue7) DESC,
                (i.tag8 = vTag8) DESC,
                (i.value8 = vValue8) DESC
         LIMIT 30;
       

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 `item_GetVisible` */;
/*!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 `item_GetVisible`(vWarehouse SMALLINT, vItem INT)
BEGIN
	DECLARE vTomorrow DATETIME DEFAULT TIMESTAMPADD(DAY, 1, CURDATE());
    
	INSERT INTO vn2008.tmp_item (item_id, visible)
		SELECT item_id, SUM(amount) amount
			FROM (
				SELECT i.itemFk AS item_id, quantity AS amount 
					FROM itemTicketOut i
						LEFT JOIN ticketState ts ON ts.ticketFk = i.ticketFk 
							JOIN state s ON s.id = ts.stateFk
						LEFT JOIN (SELECT DISTINCT saleFk 
										FROM saleTracking st 
											JOIN state s ON s.id = st.stateFk
										WHERE st.created > CURDATE() 
											AND (s.isPicked OR st.isChecked)
									)  stPrevious  ON `stPrevious`.`saleFk` = i.saleFk
					WHERE i.warehouseFk = vWarehouse
						AND (vItem IS NULL OR i.itemFk = vItem)
						AND (s.isPicked OR i.reserved OR stPrevious.saleFk )
						AND i.shipped >= CURDATE() AND i.shipped < vTomorrow
				UNION ALL
				SELECT iei.itemFk, quantity 
					FROM itemEntryIn iei
					WHERE (iei.isReceived != FALSE /*OR ip.modificationDate > CURDATE()*/)
						AND iei.landed >= CURDATE() AND iei.landed < vTomorrow
						AND iei.warehouseInFk = vWarehouse
						AND (vItem IS NULL OR iei.itemFk = vItem)
						AND iei.isVirtualStock is FALSE
				UNION ALL
				SELECT itemFk, quantity 
					FROM itemEntryOut
					WHERE isDelivered != FALSE
						AND shipped >= CURDATE() AND shipped < vTomorrow
						AND warehouseOutFk = vWarehouse
						AND (vItem IS NULL OR itemFk = vItem)
					) t
			GROUP BY item_id
			ON DUPLICATE KEY UPDATE
			visible = IFNULL(stock,0) + VALUES(visible);
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 `item_refreshTags` */;
/*!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 `item_refreshTags`()
BEGIN
/**
 * Actualiza la tabla item, los campos "cache" de tags
 *
 * @param temporary table tmp.item(id) del articulo
 **/
	
	DECLARE done INT DEFAULT FALSE;
	DECLARE vItemFk INT;
	DECLARE cur1 CURSOR FOR SELECT id FROM tmp.item;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN cur1;

	read_loop: LOOP
 
    FETCH cur1 INTO vItemFk;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
          
	UPDATE item i
			LEFT JOIN itemTag it1 ON it1.priority = 1 AND it1.itemFk = i.id
			LEFT JOIN itemTag it2 ON it2.priority = 2 AND it2.itemFk = i.id
			LEFT JOIN itemTag it3 ON it3.priority = 3 AND it3.itemFk = i.id
		SET i.longName = CONCAT_WS(' ', it1.`value`, it2.`value`, IF(it3.`value` = 'A1','',it3.`value`))
        WHERE i.id = vItemFk;

	UPDATE item i
			LEFT JOIN itemTag it1 ON it1.priority = 1 AND it1.itemFk = i.id
			LEFT JOIN tagAbbreviation ta1 ON ta1.`value` = it1.`value`
			LEFT JOIN itemTag it2 ON it2.priority = 2 AND it2.itemFk = i.id
            LEFT JOIN tagAbbreviation ta2 ON ta2.`value` = it2.`value` AND ta2.tagFk IS NULL
			LEFT JOIN itemTag it3 ON it3.priority = 3 AND it3.itemFk = i.id
            LEFT JOIN tagAbbreviation ta3 ON ta3.`value` = it3.`value`
		SET i.`name` = CONCAT_WS(' ', 
						IFNULL(ta1.abbreviation,it1.`value`), 
                        IFNULL(ta2.abbreviation,it2.`value`), 
                        IF(i.isFloramondo,'',IFNULL(ta3.abbreviation,it3.`value`)))
        WHERE i.id = vItemFk;
          
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 4
		SET i.subName = it.`value`
        WHERE i.id = vItemFk;
	
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 5
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag5 = t.name, value5 = it.`value`
        WHERE i.id = vItemFk;
 
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 6
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag6 = t.name, value6 = it.`value`
        WHERE i.id = vItemFk;
           
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 7
			LEFT JOIN tag t ON t.id = it.tagFk 
		SET i.tag7 = t.name, i.value7 = it.`value`
        WHERE i.id = vItemFk;
                        
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 8
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag8 = t.name, value8 = it.`value`
        WHERE i.id = vItemFk;
                        
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 9
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag9 = t.name, value9 = it.`value`
        WHERE i.id = vItemFk;
            
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 10
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag10 = t.name, value10 = it.`value`
        WHERE i.id = vItemFk;

	-- Al insertar el tag color se modifica también el antiguo campo color	
	UPDATE item i
			JOIN tag t ON t.overwrite = 'inkFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN ink ON ink.`name` = it.`value`
		SET i.inkFk = ink.id
        WHERE i.id = vItemFk;

	-- Al insertar el tag origen se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'originFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN origin o ON o.`name` = it.`value`
		SET i.originFk = o.id
        WHERE i.id = vItemFk;
        
	-- Al insertar el tag medida se modifica también en la tabla item
	UPDATE item i
            JOIN tag t ON t.overwrite = 'size'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
		SET i.size = it.`value`
        WHERE i.id = vItemFk;

	-- Al insertar el tag productor se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'producerFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN producer p ON p.`name` = it.`value`
		SET i.producerFk = p.id
        WHERE i.id = vItemFk;
 
	 -- Al insertar el tag tallos se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'stems'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
		SET i.stems = it.`value`
        WHERE i.id = vItemFk;
       
      -- Al insertar el tag categoria se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'category'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
		SET i.category = it.`value`
        WHERE i.id = vItemFk;
       
     -- Comprueba si existe un genérico y lo asigna
	CALL vn.item_setGeneric(vItemFk);
	  
  END LOOP;

  CLOSE cur1;
  
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 `item_refreshTags_beta` */;
/*!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 `item_refreshTags_beta`()
BEGIN
/**
 * Actualiza la tabla item, los campos "cache" de tags
 *
 * @param temporary table tmp.item(id) del articulo
 **/
	
	DECLARE done INT DEFAULT FALSE;
	DECLARE vItemFk INT;
	DECLARE cur1 CURSOR FOR SELECT id FROM tmp.item;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN cur1;

	read_loop: LOOP
 
    FETCH cur1 INTO vItemFk;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
          
	UPDATE item i
			LEFT JOIN itemTag it1 ON it1.priority = 1 AND it1.itemFk = i.id
			LEFT JOIN itemTag it2 ON it2.priority = 2 AND it2.itemFk = i.id
			LEFT JOIN itemTag it3 ON it3.priority = 3 AND it3.itemFk = i.id
		SET i.longName = CONCAT_WS(' ', it1.`value`, it2.`value`, IF(it3.`value` = 'A1','',it3.`value`))
        WHERE i.id = vItemFk;

	UPDATE item i
			LEFT JOIN itemTag it1 ON it1.priority = 1 AND it1.itemFk = i.id
			LEFT JOIN tagAbbreviation ta1 ON ta1.`value` = it1.`value`
			LEFT JOIN itemTag it2 ON it2.priority = 2 AND it2.itemFk = i.id
            LEFT JOIN tagAbbreviation ta2 ON ta2.`value` = it2.`value`
			LEFT JOIN itemTag it3 ON it3.priority = 3 AND it3.itemFk = i.id
            LEFT JOIN tagAbbreviation ta3 ON ta3.`value` = it3.`value`
		SET i.`name` = CONCAT_WS(' ', 
						IFNULL(ta1.abbreviation,it1.`value`), 
                        IFNULL(ta2.abbreviation,it2.`value`), 
                        IF(i.id > 400000,'',IFNULL(ta3.abbreviation,it3.`value`)))
        WHERE i.id = vItemFk;
          
	UPDATE item i
			JOIN tmp.itemToRefresh tmpI ON tmpI.id = i.id
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 4
		SET i.subName = it.`value`;
	
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 5
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag5 = t.name, value5 = it.`value`
        WHERE i.id = vItemFk;
 
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 6
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag6 = t.name, value6 = it.`value`
        WHERE i.id = vItemFk;
           
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 7
			LEFT JOIN tag t ON t.id = it.tagFk 
		SET i.tag7 = t.name, i.value7 = it.`value`
        WHERE i.id = vItemFk;
                        
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 8
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag8 = t.name, value8 = it.`value`
        WHERE i.id = vItemFk;
                        
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 9
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag9 = t.name, value9 = it.`value`
        WHERE i.id = vItemFk;
            
	UPDATE item i
			LEFT JOIN itemTag it ON it.itemFk = i.id AND it.priority = 10
			LEFT JOIN tag t ON t.id = it.tagFk
		SET tag10 = t.name, value10 = it.`value`
        WHERE i.id = vItemFk;

	-- Al insertar el tag color se modifica también el antiguo campo color	
	UPDATE item i
			JOIN tag t ON t.overwrite = 'inkFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN ink ON ink.`name` = it.`value`
		SET i.inkFk = ink.id
        WHERE i.id = vItemFk;

	-- Al insertar el tag origen se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'originFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN origin o ON o.`name` = it.`value`
		SET i.originFk = o.id
        WHERE i.id = vItemFk;
        
	-- Al insertar el tag medida se modifica también en la tabla item
	UPDATE item i
            JOIN tag t ON t.overwrite = 'size'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
		SET i.size = it.`value`
        WHERE i.id = vItemFk;

	-- Al insertar el tag productor se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'producerFk'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
			JOIN producer p ON p.`name` = it.`value`
		SET i.producerFk = p.id
        WHERE i.id = vItemFk;
 
	 -- Al insertar el tag tallos se modifica también en la tabla item
	UPDATE item i
			JOIN tag t ON t.overwrite = 'stems'
			JOIN itemTag it ON it.itemFk = i.id AND it.tagFk = t.id
		SET i.stems = it.`value`
        WHERE i.id = vItemFk;
	  
  END LOOP;

  CLOSE cur1;
  
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 `item_saveReference` */;
/*!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 `item_saveReference`(vBarcode VARCHAR(22), vReference VARCHAR(150))
BEGIN

/**
 * Actualiza la referencia del item
 *
 * @param vBarcode del item
 * @param vReference referencia a actualizar
 */
	
	DECLARE vItemFk INT;

    SELECT barcodeToItem(vBarcode) INTO vItemFk;
    
    UPDATE item SET comment = vReference WHERE id = vItemFk;

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 `item_setGeneric` */;
/*!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 `item_setGeneric`(vSelf INT)
BEGIN
/**
 * Asigna el código genérico a un item, salvo que sea un código de item genérico.
 * 
 * @param vSelf identificador de vn.item
 */
	DECLARE vGenericFk INT;

	SELECT itemFk INTO vGenericFk
		FROM (
			SELECT itemFk, (sum(matches) = maxMatches) `match`
				FROM (
					SELECT ga.id gaid, 
						ga.itemFk, 
						(it.value <=> ga.origin) 
						+ (it.value <=> ga.color) 
						+ (it.value <=> ga.quality) 
						+ (it.value <=> ga.numFlores) 
						+ (it.value <=> ga.category) 
						+ (it.value <=> ga.productor) matches, 
						!ISNULL(ga.origin)
						+!ISNULL(ga.color)
						+!ISNULL(ga.quality)
						+!ISNULL(ga.numFlores)
						+!ISNULL(ga.category)
						+!ISNULL(ga.productor) maxMatches
				FROM vn.item i
					JOIN vn.itemTag it ON it.itemFk = i.id 
					JOIN vn.genericAllocation ga
						ON (i.typeFk = ga.typeFk OR ga.typeFk IS NULL)
						AND (i.longName = ga.longName OR ga.longName IS NULL)
						AND (i.`size` = ga.`size` OR ga.`size` IS NULL)
						AND i.id != ga.itemFk
				WHERE i.id = vSelf
					AND NOT i.isFloramondo) sub 
				GROUP BY gaid
				HAVING `match`) sub2;

	UPDATE vn.item 
		SET genericFk = vGenericFk 
		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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `item_updatePackingShelve` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `item_updatePackingShelve`(vSelf INT, vPacking INT)
BEGIN
	
	/**
	 *  Actualiza el valor de item.packingShelve
	 * 
	 * @param vSelf Identificador de vn.item
	 * @param vPacking Cantidad de unidades de venta que caben en una bandeja
	 */
	
	UPDATE vn.item i 
		SET i.packingShelve = vPacking
		WHERE i.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 `item_updatePackingType` */;
/*!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 `item_updatePackingType`(vItem INT, vItemPackingTypeFk VARCHAR(1))
BEGIN
/**
 * Update the packing type of an item
 *
 * @param vItem id del item a actualizar
 * @param vItemPackingTypeFk packing type
 */
	UPDATE item SET itemPackingTypeFk = vItemPackingTypeFk WHERE id = vItem;

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 `item_ValuateInventory` */;
/*!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 `item_ValuateInventory`(IN vDated DATE, IN vIsDetailed BOOLEAN)
BEGIN

    DECLARE vInventoried DATE;
    DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
    DECLARE vInventoried2 DATE;
    DECLARE vDateDayEnd DATETIME;
    
    SET vDateDayEnd = util.dayEnd(vDated);
   
    SELECT landed INTO vInventoried
    FROM travel tr
        JOIN entry E ON E.travelFk = tr.id
    WHERE landed <= vDateDayEnd
        AND E.supplierFk = 4
    ORDER BY landed DESC
    LIMIT 1;

    SET vHasNotInventory = IF (vInventoried is null, TRUE, FALSE);
    
    IF vHasNotInventory THEN

        SELECT landed INTO vInventoried2
        FROM travel tr
            JOIN entry E ON E.travelFk = tr.id
        WHERE landed >= vDated
            AND E.supplierFk = 4
        ORDER BY landed ASC
        LIMIT 1;

        SET vInventoried = TIMESTAMPADD(DAY,1,vDated);
        SET vDateDayEnd = vInventoried2;

    END IF;

    DROP TEMPORARY TABLE IF EXISTS inv;

    CREATE TEMPORARY TABLE inv
        (warehouseFk SMALLINT,
         Id_Article BIGINT,
         cantidad INT,    
         coste DOUBLE DEFAULT 0,
         total DOUBLE DEFAULT 0,
         Almacen VARCHAR(20),
         PRIMARY KEY (Almacen, Id_Article) USING HASH)
     ENGINE = MEMORY;
     
    IF vHasNotInventory = TRUE THEN

        INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
            SELECT tr.warehouseInFk, b.itemFk, SUM(b.quantity), w.`name`
            FROM buy b
                JOIN item i ON i.id = b.itemFk
                JOIN entry e ON e.id = b.entryFk
                JOIN travel tr ON tr.id = e.travelFk
                JOIN itemType t ON t.id = i.typeFk
                JOIN warehouse w ON w.id = warehouseInFk
            WHERE landed = vDateDayEnd
                AND e.supplierFk = 4
                AND w.valuatedInventory
                AND t.isInventory
            GROUP BY tr.warehouseInFk, b.itemFk;

    END IF;

    INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
        SELECT tr.warehouseInFk, b.itemFk, b.quantity * IF(vHasNotInventory,-1,1), w.`name`
        FROM buy b
        JOIN item i ON i.id = b.itemFk
        JOIN entry e ON e.id = b.entryFk
        JOIN travel tr ON tr.id = e.travelFk
        JOIN itemType t ON t.id = i.typeFk
        JOIN warehouse w ON w.id = tr.warehouseInFk
        WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
        AND IF(tr.landed = CURDATE(), tr.isReceived, trUE)
        AND NOT e.isRaid
        AND w.valuatedInventory
        AND t.isInventory
        ON DUPLICATE KEY UPDATE inv.cantidad = inv.cantidad + (b.quantity * IF(vHasNotInventory,-1,1));

    INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
        SELECT tr.warehouseOutFk, b.itemFk, b.quantity * IF(vHasNotInventory,1,-1), w.`name`
        FROM buy b
        JOIN item i ON i.id = b.itemFk
        JOIN entry e ON e.id = b.entryFk
        JOIN travel tr ON tr.id = e.travelFk
        JOIN itemType t ON t.id = i.typeFk
        JOIN warehouse w ON w.id = tr.warehouseOutFk
        WHERE tr.shipped BETWEEN vInventoried AND vDateDayEnd
        AND NOT e.isRaid
        AND w.valuatedInventory
        AND t.isInventory
        ON DUPLICATE KEY UPDATE  inv.cantidad = inv.cantidad + (b.quantity * IF(vHasNotInventory,1,-1));

    INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
        SELECT w.id, s.itemFk, s.quantity  * IF(vHasNotInventory,1,-1), w.`name`
        FROM sale s
        JOIN ticket t ON t.id = s.ticketFk
        JOIN `client` c ON c.id = t.clientFk
        JOIN item i ON i.id = s.itemFk
        JOIN itemType it ON  it.id = i.typeFk
        JOIN warehouse w ON w.id = t.warehouseFk
        WHERE t.shipped BETWEEN vInventoried AND vDateDayEnd
        AND w.valuatedInventory
        AND it.isInventory
        ON DUPLICATE KEY UPDATE  inv.cantidad = inv.cantidad + s.quantity * IF(vHasNotInventory,1,-1);

    IF vDated = CURDATE() THEN -- volver a poner lo que esta aun en las estanterias

        INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
            SELECT w.id, s.itemFk, s.quantity  * IF(vHasNotInventory,0,1), w.`name`
            FROM sale s
            JOIN ticket t ON t.id = s.ticketFk
            JOIN `client` c ON c.id = t.clientFk
            JOIN item i ON i.id = s.itemFk
            JOIN itemType it ON  it.id = i.typeFk
            JOIN warehouse w ON w.id = t.warehouseFk
            WHERE t.shipped BETWEEN  vDated AND vDateDayEnd
            AND (s.isPicked <> 0 or t.isLabeled <> 0 )
            AND w.valuatedInventory
            AND it.isInventory
            ON DUPLICATE KEY UPDATE  inv.cantidad = inv.cantidad + s.quantity * IF(vHasNotInventory,0,1);

    END IF;  

    -- Mercancia en transito
    INSERT INTO inv(warehouseFk, Id_Article, cantidad, Almacen)
        SELECT tr.warehouseInFk, b.itemFk, b.quantity, CONCAT(wOut.`name`,' - ', wIn.`name`)
        FROM buy b
            JOIN item i ON i.id = b.itemFk
            JOIN entry e ON e.id = b.entryFk
			JOIN travel tr ON tr.id = e.travelFk
			JOIN itemType t ON t.id = i.typeFk
            JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
            JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
        WHERE vDated >= tr.shipped AND vDated < tr.landed
            AND NOT isRaid
            AND wIn.valuatedInventory
            AND t.isInventory
            AND e.isConfirmed
        ON DUPLICATE KEY UPDATE inv.cantidad = inv.cantidad + (b.quantity);
        
    CALL vn.buyUltimate(NULL,vDateDayEnd);

    UPDATE inv i
    JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.Id_Article = bu.itemFk
    JOIN buy b ON b.id = bu.buyFk
    SET total = i.cantidad * (ifnull(b.buyingValue,0) + IFNULL(b.packageValue,0) + IFNULL(b.freightValue,0) + IFNULL(b.comissionValue,0)),
        coste = ifnull(b.buyingValue,0) + IFNULL(b.packageValue,0) + IFNULL(b.freightValue,0) + IFNULL(b.comissionValue,0)
    WHERE i.cantidad <> 0;

    DELETE FROM inv WHERE Cantidad IS NULL or Cantidad = 0;

    IF vIsDetailed THEN

        SELECT inv.warehouseFk,
        		i.id itemFk, 
        		i.longName , 
        		i.size, 
        		inv.Cantidad, 
        		tp.name Tipo,
                ic.name Reino, 
                inv.coste, 
                cast(inv.total as decimal(10,2)) total,
                almacen
            FROM inv
                JOIN warehouse w on w.id = warehouseFk
                JOIN item i ON i.id = inv.Id_Article
                JOIN itemType tp ON tp.id = i.typeFk
                JOIN itemCategory ic ON ic.id = tp.categoryFk 
            WHERE w.valuatedInventory
            and inv.total > 0
            order by inv.total desc;

    ELSE

		 SELECT i.Almacen, ic.name as Reino, cast(i.total as decimal(10,2)) as Euros, w.code as Comprador,it.id
            FROM inv i
				JOIN warehouse wh on wh.id = warehouseFk
                JOIN item it ON it.id = i.Id_Article
                JOIN itemType itp ON itp.id = it.typeFk
                LEFT JOIN worker w ON w.id = itp.workerFk
                JOIN itemCategory ic ON ic.id = itp.categoryFk
			WHERE wh.valuatedInventory
                AND i.total > 0;

    END IF;
    DROP TEMPORARY TABLE tmp.buyUltimate;
    DROP TEMPORARY TABLE inv;
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 `ledger_doCompensation` */;
/*!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 `ledger_doCompensation`(vDated DATE, vCompensationAccount VARCHAR(10) , vBankFk VARCHAR(10), vConcept VARCHAR(255), vAmount DECIMAL(10,2), vCompanyFk INT, vOriginalAccount VARCHAR(10))
BEGIN
/**
 * Compensa un pago o un recibo insertando en contabilidad
 *
 * @param vDated fecha en la cual se anota
 * @param vCompensationAccount cuenta contable contra la que se compensa
 * @param vBankFk banco de la compensacion
 * @param vConcept descripcion
 * @param vAmount cantidad que se compensa
 * @param vCompany empresa
 * @param vOriginalAccount cuenta contable desde la cual se compensa 
 * 
 */   
	DECLARE vNewBookEntry INT;
    DECLARE vIsClientCompensation INT;
	DECLARE vClientFk INT;
    DECLARE vSupplierFk INT;
  	DECLARE vIsOriginalAClient BOOL;
    DECLARE vPayMethodCompensation INT;
    
	CALL ledger_next(vNewBookEntry);

	SELECT COUNT(id) INTO vIsOriginalAClient FROM client WHERE accountingAccount LIKE vOriginalAccount COLLATE utf8_general_ci;

	SELECT id, COUNT(id) INTO vClientFk, vIsClientCompensation 
		FROM client 
		WHERE accountingAccount LIKE vCompensationAccount COLLATE utf8_general_ci;
	
	SET @vAmount1:= 0.0;
	SET @vAmount2:= 0.0;

    INSERT INTO XDiario (ASIEN, FECHA, SUBCTA, CONTRA, CONCEPTO, EURODEBE, EUROHABER, empresa_id) 
		VALUES ( 	vNewBookEntry, 
					vDated, 
					vOriginalAccount, 
					vCompensationAccount, 
					vConcept, 
					@vAmount1:= IF(
						(vIsOriginalAClient AND vAmount > 0) OR 
						(NOT vIsOriginalAClient AND vAmount < 0), 
						0, 
						ABS(vAmount)
					),
					@vAmount2:= IF(@vAmount1,
						0,
						ABS(vAmount)
					),
					vCompanyFk
				),
                (	vNewBookEntry, 
               		vDated, 
               		vCompensationAccount, 
               		vOriginalAccount, 
               		vConcept, 
               		@vAmount2,
					@vAmount1,
               		vCompanyFk);
   
    IF vIsClientCompensation THEN
    	IF vIsOriginalAClient THEN
    		SET vAmount = -vAmount;
    	END IF;
		INSERT INTO receipt(invoiceFk, amountPaid, payed, bankFk, companyFk, clientFk, isConciliate) 
			VALUES (vConcept, vAmount, vDated, vBankFk, vCompanyFk, vClientFk, TRUE);
    ELSE
    	IF NOT vIsOriginalAClient THEN
    		SET vAmount = -vAmount;
    	END IF;
	    SELECT id INTO vSupplierFk FROM supplier WHERE `account` LIKE vCompensationAccount COLLATE utf8_general_ci;
		SELECT id INTO vPayMethodCompensation FROM payMethod WHERE `code` = 'compensation';
	
		INSERT INTO payment (received, dueDated, supplierFk, amount, bankFk, payMethodFk, concept, companyFk, isConciliated)
			VALUES(vDated, vDated, vSupplierFk, vAmount, vBankFk, vPayMethodCompensation, vConcept, vCompanyFk, TRUE);
    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 `ledger_next` */;
/*!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 `ledger_next`(OUT vNewBookEntry INT)
BEGIN
   
   UPDATE vn.ledgerConfig  SET lastBookEntry = LAST_INSERT_ID(lastBookEntry + 1);
   SET vNewBookEntry = LAST_INSERT_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 `logAdd` */;
/*!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 `logAdd`(vOriginFk INT, vActionCode VARCHAR(45), vEntity VARCHAR(45), vDescription TEXT)
BEGIN
/**
 * Guarda las acciones realizadas por el usuario
 *
 * @param vOriginFk Id del registro de origen
 * @param vActionCode Código de la acción {insert | delete | update}
 * @param vEntity Nombre que hace referencia a la tabla.
 * @param descripcion Descripción de la acción realizada por el usuario
 */
    
    CALL logAddWithUser(vOriginFk, account.myUser_getId(), vActionCode, vEntity, vDescription);
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 `logAddWithUser` */;
/*!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 `logAddWithUser`(vOriginFk INT, vUserId INT, vActionCode VARCHAR(45), vEntity VARCHAR(45), vDescription TEXT)
BEGIN
	/**
	* Guarda las acciones realizadas por el usuario
	*
	* @param vOriginFk Id del registro de origen
	* @param vActionCode Código de la acción {insert | delete | update}
	* @param vEntity Nombre que hace referencia a la tabla.
	* @param descripcion Descripción de la acción realizada por el usuario
	*/
	DECLARE vTableName VARCHAR(255) DEFAULT CONCAT(IFNULL(vEntity, ''), 'Log');

	SET @sqlQuery = CONCAT(
		'INSERT INTO vn.', vTableName, ' SET originFk = ?, userFk = ?, action = ?, description = ?'
		);
	SET @originFk = vOriginFk;
	SET @userFk = vUserId;
	SET @action = vActionCode;
	SET @description = vDescription;

	PREPARE stmt FROM @sqlQuery;
	EXECUTE stmt USING @originFk, @userFk, @action, @description;
	DEALLOCATE PREPARE stmt;

	SET @sqlQuery = NULL;
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 `logShow` */;
/*!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 `logShow`(vOriginFk INT, vEntity VARCHAR(45))
BEGIN
/**
 * Muestra las acciones realizadas por el usuario
 *
 * @param vOriginFk Id del registro de origen
 * @param vEntity Nombre que hace referencia a la tabla.
 */
	DECLARE vTableName VARCHAR(45);
    
    SET vTableName = CONCAT(vEntity, 'Log');
    
    SET @qryLog := CONCAT(
		'SELECT ot.id, ot.originFk, ot.userFk, u.name, ot.action, ot.creationDate, ot.description FROM ', vTableName, ' AS ot',
				' INNER JOIN account.user u ON u.id = ot.userFk',
			' WHERE ot.originFk = ', vOriginFk, ' ORDER BY ot.creationDate DESC'
    );
    
    PREPARE stmt FROM @qryLog;
    EXECUTE stmt;
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 `lungSize_generator` */;
/*!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 `lungSize_generator`(vDate DATE)
BEGIN

SET @buildingOrder := 0;
SET @route := 0;
set @cajas := 0;
    
	UPDATE tmp.sorter
	SET buildingOrder =  @buildingOrder := IF(@route = @route := routeFk, @buildingOrder, 0) + 1 
	where date(created) = vDate
	order by routeFk, created, weight DESC;

	update tmp.sorter
	SET palletOrder = buildingOrder mod 14, lungGrow = buildingOrder mod 14
    WHERE date(created) = vDate;

	UPDATE tmp.sorter
	JOIN (
	SELECT routeFk, max(id) maxid
	FROM tmp.sorter
	where date(created) = vDate
	GROUP BY routeFk) sub ON sub.maxid = id
	SET lungGrow = 1 - palletOrder ;

	UPDATE tmp.sorter
	SET lungGrow = IF(palletOrder = 0, -13, lungGrow);
    
	DELETE FROM tmp.lungSize WHERE dia = vDate;
	
	INSERT INTO tmp.lungSize(dia, hora,size)
	select vDate,hora, @cajas := @cajas + cajas as size
	from
	(
	 select IF(lungGrow BETWEEN -12 AND -1, ETD,time_format(created,"%H:%i")) as hora, sum(if(lungGrow <= 0, lungGrow, 1)) as cajas, @cajas := 0
	 from tmp.sorter 
	 where date(created) = vDate
	 group by hora
	 ) sub;
	 
	 SELECT * FROM tmp.lungSize
     WHERE dia = vDate;
 
 


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 `machineWorker_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 `machineWorker_add`(vPlate VARCHAR(10), vWorkerFk INT)
BEGIN
	
/**
 * Inserta registro si el vWorkerFk no ha registrado nada en las últimas 12 horas
 * @param vPlate número de matrícula
 * @param vWorkerFk id del worker 
 * 
*/    
		UPDATE vn.machineWorker mw 
	    		JOIN vn.machine m ON m.id = mw.machineFk 
    		SET mw.outTimed = NOW()
	    	WHERE (mw.workerFk = vWorkerFk OR m.plate = vPlate)
	    		AND ISNULL(mw.outTimed);
	    	
    	INSERT INTO machineWorker (machineFk, workerFk)
	        SELECT m.id, vWorkerFk
	        	FROM machine m
	            WHERE m.plate= vPlate;	     
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 `machineWorker_getHistorical` */;
/*!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 `machineWorker_getHistorical`(vPlate VARCHAR(20), vWorkerFk INT)
BEGIN
/**
 * Obtiene historial de la matrícula vPlate que el  trabajador vWorkerFk escanea, 
 * si es jefe de producción muestra el historial completo.
 * 
 * @param vPlate número de matrícula
 * @param vWorkerFk id del trabajador 
 * 
*/
	DECLARE vWorkerName VARCHAR(255) DEFAULT account.user_getNameFromId(vWorkerFk);

	SELECT mw.inTimed,account.user_getNameFromId(mw.workerFk) as workerName, mw.outTimed 
		FROM machineWorker mw
			JOIN machine m ON m.plate = vPlate
		WHERE mw.machineFk = m.id
			AND mw.workerFk = IF(account.user_hasRole(vWorkerName, 'coolerAssist'), mw.workerFk, vWorkerFk)
			ORDER BY mw.inTimed DESC;	
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 `machineWorker_update` */;
/*!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 `machineWorker_update`(vPlate VARCHAR(10), vWorkerFk INT)
BEGIN
	
/**
 * Actualiza el registro correspondiente si el vWorkerFk se ha registrado en las últimas horas (campo maxHours de machineWorkerConfig) con vPlate, 
 * 
 * @param vPlate número de matrícula
 * @param vWorkerFk id del trabajador 
 * 
*/

	DECLARE vMachineFk INT(10);
	DECLARE vMaxHours INT(10);

	SELECT m.id  INTO vMachineFk
	FROM machine m
		WHERE m.plate  = vPlate;
	
	SELECT maxHours INTO vMaxHours
	FROM machineWorkerConfig;

	IF (SELECT COUNT(*) 
			FROM machineWorker m
			WHERE  m.workerFk = vWorkerFk
				AND m.inTimed >= TIMESTAMPADD(HOUR , -vMaxHours, NOW()) AND ISNULL(m.outTimed)) THEN				
				
		UPDATE machineWorker m
			SET m.outTimed = CURRENT_TIMESTAMP()
			WHERE m.workerFk = vWorkerFk 
				AND m.inTimed >= TIMESTAMPADD(HOUR , -vMaxHours, NOW()) 
				AND ISNULL(m.outTimed)
				AND m.machineFk = vMachineFk;
		
    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 `machine_getWorkerPlate` */;
/*!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 `machine_getWorkerPlate`(vWorkerFk INT)
BEGIN
/**
 * Selecciona la matrícula del vehículo del workerfk 
 * 
 * @param vWorkerFk el id del trabajador
 * 
 *  
 **/
	
	SELECT m.plate
	FROM machine m 
		JOIN machineWorker mw ON mw.machineFk = m.id 
	WHERE mw.inTimed >= TIMESTAMPADD(HOUR , -12,NOW()) 
		AND ISNULL(mw.outTimed) 
		AND mw.workerFk = vWorkerFk;

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 `mail_insert` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mail_insert`(
	vReceiver VARCHAR(255),
	vReplyTo VARCHAR(50),
	vSubject VARCHAR(100),
	vBody TEXT)
BEGIN
/**
 * Inserta en la tabla vn.mail
 *
 * @param vReceiver Receptor del correo 
 * @param vReplyTo A quién contestar el correo
 * @param vSubject Título del correo
 * @param vBody Cuerpo del correo
 */
	
	DECLARE vIsRepeated BOOLEAN;

	SELECT COUNT(*) INTO vIsRepeated
		FROM vn.mail
		WHERE creationDate >= CURDATE()
			AND `receiver` = vReceiver
			AND `replyTo` = vReplyTo
			AND `subject` = vSubject
			AND !sent;

	IF NOT vIsRepeated THEN

		INSERT INTO vn.mail SET
				`receiver` = vReceiver,
				`replyTo` = vReplyTo,
				`subject` = vSubject,
				`body` = vBody;

	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 `makeNewItem` */;
/*!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 `makeNewItem`()
BEGIN

	DECLARE newItemFk INT;
    
	SELECT getNewItemId() INTO newItemFk;
    
	INSERT INTO item(id,name,typeFk,originFk)
		SELECT newItemFk, 'Nuevo artículo', 78,39;
        
	SELECT newItemFk;


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 `makePCSGraf` */;
/*!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 `makePCSGraf`(vDated DATE)
BEGIN


	DECLARE vHour INT DEFAULT 0;
    DECLARE vMinute INT DEFAULT 0;
    DECLARE vBoxes INT;

    
    DROP TEMPORARY TABLE IF EXISTS vn.pcsDay;
	CREATE TEMPORARY TABLE vn.pcsDay
		SELECT 0 as hh, 0 as mm, 0 as boxes;
   
   -- Creamos una tabla soporte para acumular las cajas a lo largo del dia
	WHILE vHour < 24 DO
    
		WHILE vMinute < 59 DO
        
			SET vMinute = vMinute + 1;
            
			INSERT INTO vn.pcsDay(hh,mm) VALUES(vHour, vMinute);
        
        END WHILE;
        
        SET vMinute = -1;
        SET vHour = vHour + 1;
    
    END WHILE;
    
    -- Acumulamos
    UPDATE vn.pcsDay pd
		LEFT JOIN (SELECT * FROM vn.pcs_graf WHERE dia = vDated) pg USING(hh,mm)
        SET pd.boxes = pd.boxes + pg.box;
    
	SELECT * FROM vn.pcsDay;
    
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 `manaSpellersRequery` */;
/*!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 `manaSpellersRequery`(vWorkerFk INTEGER)
BEGIN
/**
 * Recalcula el mana consumido por un trabajador
 *
 * @param vWorkerFk Id Trabajador
 */  
	DECLARE vWorkerIsExcluded BOOLEAN;
	DECLARE vFromDated DATE;
	DECLARE vToDated DATE DEFAULT TIMESTAMPADD(DAY,1,CURDATE());
	DECLARE vMana INT;
	DECLARE vAutoMana INT;
	DECLARE vClaimMana INT;
	DECLARE vManaBank INT;
	DECLARE vManaGreugeType INT;
	
	SELECT COUNT(*) INTO vWorkerIsExcluded
		FROM workerManaExcluded
		WHERE workerFk = vWorkerFk;
	
	IF NOT vWorkerIsExcluded THEN
		SELECT id INTO vMana 
			FROM `component` WHERE code = 'mana';
		
		SELECT id INTO vAutoMana 
			FROM `component` WHERE code = 'autoMana';
		
		SELECT id INTO vClaimMana 
			FROM `component` WHERE code = 'manaClaim';
		
		SELECT id INTO vManaBank 
			FROM `bank` WHERE code = 'mana';
		
		SELECT id INTO vManaGreugeType 
			FROM `greugeType` WHERE code = 'mana';

		SELECT max(dated) INTO vFromDated 
			FROM clientManaCache;
			
		REPLACE workerMana (workerFk, amount)
			SELECT vWorkerFk, sum(mana) FROM 
			(
				SELECT s.quantity * sc.value as mana
					FROM ticket t
						JOIN address a ON a.id = t.addressFk
						JOIN client c ON c.id = a.clientFk
						JOIN sale s ON s.ticketFk = t.id
						JOIN saleComponent sc ON sc.saleFk = s.id
					WHERE c.salesPersonFk =  vWorkerFk AND sc.componentFk IN (vMana, vAutoMana, vClaimMana)
						AND t.shipped > vFromDated AND t.shipped < vToDated
				UNION ALL
				SELECT  - r.amountPaid
					FROM receipt r
						JOIN client c ON c.id = r.clientFk
					WHERE c.salesPersonFk = vWorkerFk AND bankFk = vManaBank
						AND payed > vFromDated
				UNION ALL
				SELECT g.amount
					FROM greuge g
						JOIN client c ON c.id = g.clientFk
					WHERE c.salesPersonFk = vWorkerFk AND g.greugeTypeFk = vManaGreugeType
						AND g.shipped > vFromDated and g.shipped < CURDATE()				
				UNION ALL				
				SELECT cc.mana
					FROM clientManaCache cc
						JOIN client c ON c.id = cc.clientFk
					WHERE c.salesPersonFk = vWorkerFk AND cc.dated = vFromDated
			) sub;
	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 `mergeTicketWithArray` */;
/*!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 `mergeTicketWithArray`(IN vMainTicket INT(11), IN arrayTickets VARCHAR(50))
BEGIN

	DECLARE isBilled BOOLEAN;
	DECLARE messageLog VARCHAR(50);
	DECLARE company INT;
	DECLARE messageForSplit VARCHAR(255);
	DECLARE vMainSplit INT;
	DECLARE worker INT(3);

	SELECT Factura IS NOT NULL INTO isBilled FROM vn2008.Tickets WHERE Id_Ticket = vMainTicket;

	IF NOT isBilled THEN
	
		SELECT Id_Trabajador INTO worker from vn2008.Trabajadores where user_id = account.myUser_getId();

		DROP TEMPORARY TABLE IF EXISTS vn2008.Tickets_to_fusion;

		-- He usado el util.exec porque da error la variable strId_Tickets puesta dentro del IN()
	   CALL util.exec(sql_printf('
		CREATE TEMPORARY TABLE vn2008.Tickets_to_fusion
		SELECT Id_Ticket, Localizacion
		FROM vn2008.Tickets T
		WHERE Id_Ticket IN (%s);',arrayTickets));

		INSERT INTO vn2008.ticket_observation (Id_Ticket,observation_type_id,text)
			SELECT vMainTicket,observation_type_id,CONCAT(' Ticket ', Id_Ticket, ':' , tco.text, '. ')
			FROM vn2008.Tickets_to_fusion tf
			INNER JOIN vn2008.ticket_observation tco USING(Id_Ticket)
		ON DUPLICATE KEY UPDATE `text` = CONCAT(ticket_observation.`text`,CONCAT(' Ticket ', VALUES(Id_Ticket), ':' , VALUES(`text`), '. '));
				
		UPDATE vn2008.Movimientos M
			JOIN vn2008.Tickets_to_fusion USING(Id_Ticket)
		SET M.Id_Ticket = vMainTicket;
        
		UPDATE vn2008.expeditions M
			JOIN vn2008.Tickets_to_fusion t ON t.Id_Ticket = M.ticket_id
		SET M.ticket_id = vMainTicket;
        
		UPDATE vn.ticketPackaging tp
			JOIN vn2008.Tickets_to_fusion t ON t.Id_Ticket = tp.ticketFk
			SET tp.ticketFk = vMainTicket;
        
		UPDATE vn2008.Tickets
			SET Bultos = (SELECT COUNT(*) FROM vn2008.expeditions WHERE ticket_id = vMainTicket AND EsBulto)
		WHERE Id_Ticket = vMainTicket;
        
		UPDATE vn2008.Tickets
			JOIN vn2008.Tickets_to_fusion USING(Id_Ticket)
			SET Fecha = TIMESTAMPADD(YEAR,-1 * (YEAR(Fecha)-2000), Fecha), Id_Ruta = NULL;
        
		UPDATE vn.ticketLog tl
			JOIN vn2008.Tickets_to_fusion t ON t.Id_Ticket = tl.originFk
			SET tl.originFk = vMainTicket;
				
		UPDATE vn2008.Tickets
			SET Localizacion = CONCAT(Tickets.Localizacion,' ',IFNULL((SELECT GROUP_CONCAT(Localizacion SEPARATOR ' ') FROM vn2008.Tickets_to_fusion),''))
		WHERE Id_Ticket = vMainTicket;

		UPDATE vn2008.Splits s
			RIGHT JOIN vn2008.Tickets_to_fusion t USING(Id_Ticket)
			SET s.Id_Ticket = vMainTicket;
            
		UPDATE vn2008.Ordenes o
			RIGHT JOIN vn2008.Tickets_to_fusion t ON t.Id_Ticket = o.ticketFk
			SET o.ticketFk = vMainTicket;

		IF (SELECT COUNT(*) FROM vn2008.Splits WHERE Id_Ticket=vMainTicket) > 1 THEN
        
			SELECT Id_Split INTO vMainSplit FROM vn2008.Splits WHERE Id_Ticket = vMainTicket LIMIT 1;
            
            SELECT group_concat(Notas,',') INTO messageForSplit FROM vn2008.Splits WHERE Id_Ticket = vMainTicket;
			UPDATE vn2008.Splits SET Notas = messageForSplit WHERE Id_Split=vMainSplit;
			UPDATE vn2008.Split_lines sl JOIN vn2008.Splits s USING (Id_Split) SET sl.Id_Split=vMainSplit WHERE Id_Ticket=vMainTicket;
			DELETE FROM vn2008.Splits WHERE Id_Ticket=vMainTicket AND Id_Split<>vMainSplit;
		END IF;

		SELECT GROUP_CONCAT(Id_Ticket SEPARATOR ',') into messageLog FROM vn2008.Tickets_to_fusion;
		CALL vn2008.Ditacio(vMainTicket,'Fusion','T',worker,messageLog,NULL);
           
        DELETE ts FROM vn2008.Tickets_state ts JOIN vn2008.Tickets_to_fusion t USING(Id_Ticket);
		
        DROP TEMPORARY TABLE vn2008.Tickets_to_fusion;
	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 `mysqlConnectionsSorter_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 `mysqlConnectionsSorter_kill`()
BEGIN

/**
 * Elimina conexiones del usuario sorter con tiempo >= 30seg. Asociado al evento con el mismo nombre 
 */	
 
	DECLARE vDone INT DEFAULT 0;
	DECLARE vProcesId INT;

	DECLARE vCursor CURSOR FOR
		SELECT p.id 
			FROM information_schema.processlist p
			WHERE USER = 'sorter' 
				AND TIME >= 30;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	OPEN vCursor;

	l: LOOP

		FETCH vCursor INTO vProcesId;

		IF vDone THEN
		  LEAVE l;
		END IF;

		KILL vProcesId;

	END LOOP;

	CLOSE vCursor;

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 `mysqlPreparedCount_check` */;
/*!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 `mysqlPreparedCount_check`()
BEGIN
	DECLARE vPreparedCount INTEGER;

	SELECT VARIABLE_VALUE INTO vPreparedCount 
			FROM INFORMATION_SCHEMA.GLOBAL_STATUS
			WHERE VARIABLE_NAME LIKE '%prepared_stmt_count%';

	IF(vPreparedCount >= 40000) THEN
		CALL `vn`.`mail_insert`('cau@verdnatura.es',
									NULL,
									'Problemas BBDD prepared_stmt_count',
									CONCAT('Existen problemas con el servicio de Logiflora, prepared_stmt_count con valor: ', 
												vPreparedCount,
												', está próximo a exceder su límite.  \r\n  Hay que reiniciar el servicio LF.VMP.Service del servidor a3.')
								);
	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 `nextShelvingCodeMake` */;
/*!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 `nextShelvingCodeMake`()
BEGIN

	DECLARE newShelving VARCHAR(3);
    DECLARE vCode VARCHAR(3);
    
    SELECT MAX(code) INTO vCode
		FROM vn.shelving
        WHERE isPrinted = FALSE;
	
    SET @a1 := ASCII(MID(vCode,1,1));
    SET @a2 := ASCII(MID(vCode,2,1));
    SET @a3 := ASCII(MID(vCode,3,1)) + 1;
    
    IF @a3 > 90 THEN
    
		SET @a3 = 65;
        SET @a2 = @a2 + 1;
        
        IF @a2 > 90 THEN
        
			SET @a2 = 65;
            SET @a1 = @a1 + 1;
            
            IF @a1 > 90 THEN
            
				SET @a1 = 65;
            
            END IF;
        
        END IF;
    
    END IF;

	SET newShelving = CHAR(@a1,@a2,@a3 USING utf8);
    
	INSERT INTO vn.shelving(code) VALUES(newShelving);

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 `observationAdd` */;
/*!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 `observationAdd`(vOriginFk INT, vTableCode VARCHAR(45), vDescription TEXT)
BEGIN
/**
 * Guarda las observaciones realizadas por el usuario
 *
 * @param vOriginFk Id del registro de origen
 * @param vTypeCode Código que referencia a la tabla.
 * @param descripcion Texto de la observacion
 */
	DECLARE vTableName VARCHAR(45);
    
	SET vTableName = CONCAT(vTableCode,'Observation');
        
	IF ISNULL(vTableName) THEN
		CALL util.throw('CODE_NOT_FOUND');
	END IF;
    
	SET @qryLog := CONCAT(
		'INSERT INTO ', vTableName, ' (originFk, userFk,  description)',
			' VALUES (', vOriginFk, ', ', account.myUser_getId(), ', "', vDescription, '")'
    );
    
    PREPARE stmt FROM @qryLog;
    EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
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 `orderCreate` */;
/*!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 `orderCreate`(
    vLanded DATE,
    vAgencyMode INT,
    vAddress INT,
    vSourceApp VARCHAR(10),
    OUT vOrderId INT)
BEGIN

	DECLARE vDeliveryMethod INT;
	DECLARE vClient INT;
    
    SELECT deliveryMethodFk INTO vDeliveryMethod
		FROM vn.agencyMode 
        WHERE id = vAgencyMode;
	
    SELECT clientFk INTO vClient
		FROM vn.address
        WHERE id = vAddress;
    
	INSERT INTO hedera.order(date_send,customer_id,delivery_method_id,agency_id,address_id,source_app)
		VALUES(	vLanded,vClient ,vDeliveryMethod,vAgencyMode ,vAddress ,vSourceApp);

	SET vOrderId = LAST_INSERT_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 `orderDelete` */;
/*!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 `orderDelete`(IN vId INT)
BEGIN

	DELETE FROM hedera.`order` where id = vId;
    
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 `orderListCreate` */;
/*!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 `orderListCreate`(
    vLanded DATE,
    vAgencyMode INT,
    vAddress INT,
    vSourceApp VARCHAR(10))
BEGIN

    DECLARE vOrderId INT;
    CALL vn.orderCreate(vLanded,vAgencyMode,vAddress,vSourceApp,vOrderId);
    SELECT vOrderId;
    
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 `orderListVolume` */;
/*!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 `orderListVolume`(IN vOrderId INT)
BEGIN

	SELECT 
			o.id,
            o.itemFk,
            i.description,
            o.amount,
			round(ic.cm3delivery * o.amount / 1000000,3) as volume
                FROM hedera.orderRow o
					JOIN item i ON i.id = o.itemFk
                    JOIN itemCost ic ON ic.itemFk = o.itemFk AND ic.warehouseFk = o.warehouseFk
                WHERE o.orderFk = vOrderId;
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 `packageInvoicing` */;
/*!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 `packageInvoicing`(	
														IN vClient INT,
														IN vDate DATE,
                                                        IN vCompany INT,
                                                        IN vIsAllInvoiceable BOOLEAN,
                                                        OUT vNewTicket INT(11)
													  )
BEGIN

	DECLARE vGraceDays INT;
    DECLARE vDateStart DATE DEFAULT '2017-11-21';
    DECLARE vIsInvoiceable BOOLEAN;
    DECLARE vWarehouse INT DEFAULT 13;
    DECLARE vComponentCost INT DEFAULT 28;
    DECLARE vGraceDate DATE;
	DECLARE vDateEnd DATE;

	SET vGraceDays = IF(vIsAllInvoiceable ,0, 30);
	SET vGraceDate = TIMESTAMPADD(DAY, - vGraceDays, vDate);
    
    /* Clientes especiales: 
								3240 MADEFLOR
                                 992 JAVIER FELIU
                                   4 TONI VENDRELL
	*/
                                 
    IF vClient IN (992, 3240, 4) THEN
    
		SET vGraceDays = 365;
    
    END IF;
   	/* Fin clientes especiales */
   
	SET vDateEnd = DATE_ADD(vDate, INTERVAL 1 DAY);

    DROP TEMPORARY TABLE IF EXISTS tmp.packageToInvoice;

    CREATE TEMPORARY TABLE tmp.packageToInvoice
        SELECT 	p.itemFk,
				tp.packagingFk,
                IF(tp.quantity < 0 OR t.shipped < vGraceDate, tp.quantity, 0) quantity,
                tp.ticketFk,
                p.price
            FROM ticketPackaging tp
                JOIN packaging p ON p.id = tp.packagingFk
                JOIN ticket t ON t.id = tp.ticketFk
            WHERE t.shipped BETWEEN vDateStart AND vDateEnd
                AND t.clientFk = vClient;

    DROP TEMPORARY TABLE IF EXISTS tmp.packageToInvoicePositives;

    CREATE TEMPORARY TABLE tmp.packageToInvoicePositives
        SELECT itemFk, sum(quantity) as totalQuantity
            FROM tmp.packageToInvoice
            GROUP BY itemFk
            HAVING totalQuantity > 0;
    
    SELECT COUNT(*)
        INTO vIsInvoiceable
        FROM tmp.packageToInvoicePositives;

    IF vIsInvoiceable THEN

    	CALL ticket_add(vClient, 
       		vDateEnd,
       		vWarehouse, 
	       	vCompany, 
	       	NULL, 
	      	NULL, 
	     	NULL, 
		    vDateEnd, 
	   		account.myUser_getId(), 
            TRUE,
			vNewTicket);

    	INSERT INTO ticketPackaging(
									ticketFk,
                                    packagingFk,
                                    quantity,
                                    pvp)
            SELECT 	vNewTicket, 
					pti.packagingFk, 
                    - SUM(pti.quantity) AS totalQuantity, 
                    pti.price
                FROM tmp.packageToInvoice pti
					LEFT JOIN tmp.packageToInvoicePositives ptip ON pti.itemFk = ptip.itemFk 
				WHERE ptip.itemFK IS NOT NULL 
						OR vIsAllInvoiceable
                GROUP BY packagingFk
                HAVING totalQuantity;

        INSERT INTO sale(
						ticketFk,
						itemFk, 
                        concept, 
                        quantity, 
                        price
                        )
            SELECT 		vNewTicket, 
						pti.itemFk, 
                        i.name as concept, 
                        sum(pti.quantity) as totalQuantity, 
                        pti.price
                FROM tmp.packageToInvoice pti
                    JOIN item i ON i.id = pti.itemFk
						LEFT JOIN tmp.packageToInvoicePositives ptip ON pti.itemFk = ptip.itemFk
                    WHERE ptip.itemFK IS NOT NULL 
						OR vIsAllInvoiceable
                    GROUP BY pti.itemFk
                    HAVING totalQuantity;
                    
		INSERT INTO saleComponent(saleFk, componentFk, value)
			SELECT id, vComponentCost, price
				FROM sale
				WHERE ticketFk = vNewTicket;
             
    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 `packingListPrinted` */;
/*!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 `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 ;
/*!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 `packingListSwitch` */;
/*!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 `packingListSwitch`(saleFk INT)
BEGIN

	DECLARE valueFk INT;
    DECLARE encajando INT DEFAULT 9;
    
    SELECT valor INTO valueFk 
		FROM vn2008.Movimientos_mark 
		WHERE Id_Movimiento = saleFk 
			AND stateFk = encajando;
            
	SET valueFk = (IFNULL(valueFk,0) + 1) MOD 3;
	
	REPLACE vn2008.Movimientos_mark(Id_Movimiento, valor, Id_Trabajador, stateFk) 
		VALUES(saleFk,valueFk,account.myUser_getId(),encajando);


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 `packingSite_startCollection` */;
/*!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 `packingSite_startCollection`(vSelf INT, vTicketFk INT)
BEGIN
/**
 * @param vSelf packingSite id
 * @param vTicketFk A ticket id from the collection to start
 */
	DECLARE vNewCollectionFk INT;
	DECLARE vOldCollectionFk INT;
	DECLARE vIsPackingByOther BOOL;

	SELECT collectionFk INTO vNewCollectionFk
		FROM ticketCollection WHERE ticketFk = vTicketFk;

	SELECT collectionFk INTO vOldCollectionFk
		FROM packingSite WHERE id = vSelf;

	IF NOT (vOldCollectionFk <=> vNewCollectionFk) THEN
		SELECT COUNT(*) > 0
			INTO vIsPackingByOther
			FROM packingSite
			WHERE id <> vSelf
				AND collectionFk = vOldCollectionFk;

		IF NOT vIsPackingByOther AND NOT collection_isPacked(vOldCollectionFk) AND vSelf IS NOT NULL THEN
			CALL util.throw('cannotChangeCollection');
		END IF;
	END IF;

	UPDATE packingSite SET collectionFk = vNewCollectionFk
		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 `parking_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 `parking_add`(vFromColumn INT, vToColumn INT, vFromRow INT, vToRow INT, vSectorFk INT, vIsLetterMode BOOLEAN)
BEGIN

	DECLARE vColumn INT;
    DECLARE vRow INT;
    DECLARE vLetters VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    DECLARE vMaxId INT;
    DECLARE vCode VARCHAR(8);
    
    SET vColumn = vFromColumn;
    SET vRow = vFromRow;
    SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
     
	SELECT MAX(id) INTO vMaxId
		FROM vn.parking;

	WHILE vColumn <= vToColumn DO
    
		WHILE vRow <= vToRow DO
    
			INSERT IGNORE INTO vn.parking(`column`, `row`, sectorFk, `code`, pickingOrder)
				VALUES (vColumn, vRow, vSectorFk, vCode, vColumn * 100 + vRow )
                ON DUPLICATE KEY UPDATE `code` = vCode;
			
			SET vRow = vRow + 1;
            SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
            
		END WHILE;
        
        SET vRow = vFromRow;
        SET vColumn = vColumn + 1;
        
		SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
     
    END WHILE;
    
    SELECT * FROM vn.parking WHERE `column` BETWEEN vFromColumn AND vToColumn;

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 `parking_algemesi` */;
/*!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 `parking_algemesi`(vFromRow INT, vToRow INT, vSectorFk INT, vLetter VARCHAR(1), vPickingOrder INT, vTrolleysByLine INT)
BEGIN

	DECLARE vRow INT;
    DECLARE vCode VARCHAR(8);
    DECLARE i INT;
    
    IF vToRow < vFromRow THEN
    
		SET vRow = vFromRow;
    
		WHILE vRow >= vToRow DO
        
			SET i = 1;
            
            WHILE i <= vTrolleysByLine DO
            
				SET vCode = CONCAT(vLetter,'-', LPAD(vRow,2,'0'),'-', i);
            
				INSERT IGNORE INTO vn.parking( sectorFk, `code`, pickingOrder)
					VALUES (vSectorFk, vCode, vPickingOrder + (i * 10))
					ON DUPLICATE KEY UPDATE `code` = vCode;
                    
				SET i = i + 1;
            
            END WHILE;
        
			SET vRow = vRow - 1;
            
        END WHILE;

	ELSE
    
		SET vRow = vFromRow;
    
		WHILE vRow <= vToRow DO
        
			SET i = 1;
            
            WHILE i <= vTrolleysByLine DO
            
				SET vCode = CONCAT(vLetter,'-', LPAD(vRow,2,'0'),'-', i);
            
				INSERT IGNORE INTO vn.parking( sectorFk, `code`, pickingOrder)
					VALUES (vSectorFk, vCode, vPickingOrder + (i * 10) )
					ON DUPLICATE KEY UPDATE `code` = vCode;
                    
				SET i = i + 1;
            
            END WHILE;
        
			SET vRow = vRow + 1;
            
        END WHILE;
  	
		
   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 `parking_new` */;
/*!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 `parking_new`(vStart INT, vEnd INT, vSectorFk INT)
BEGIN

	DECLARE vRow INT;
    DECLARE vColumn INT;
    DECLARE vLetters VARCHAR(200);
    DECLARE vLettersLength INT;
    
    SET vColumn = vStart;
    SET vRow = 1;
    SET vLetters = 'ABCDEF';
	SET vLettersLength = LENGTH(vLetters);
    
    WHILE vColumn <= vEnd DO
    
		REPLACE vn.parking(`column`, `row`, `code`, sectorFk)
			VALUES(vColumn, vRow, CONCAT(vColumn,MID(vLetters,vRow,1)), vSectorFk);
    
		SET vRow = vRow + 1;
        
        IF vRow > vLettersLength THEN
        
			SET vRow = 1;
            SET vColumn = vColumn + 1;
        
        END IF;
    
    END WHILE;
    
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 `parking_setOrder` */;
/*!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 `parking_setOrder`(vWarehouseFk INT)
BEGIN
	
	/*
	 * Ordena el orden de preparacion de los parking de acuerdo con la tabla vn.corridor
	 */
	
	UPDATE vn.parking p
		JOIN (
			SELECT 	code,
					@orden := @orden + 10 AS po
				FROM (
					SELECT 	c.prepOrder,
							p.code,
							@orden := 0,
							IF(c.isAscendent, 1,-1) * CAST(SUBSTRING(p.code,3,2) AS DECIMAL(2,0)) subCorridor , 
							CAST(IF(LENGTH(p.code) > 5, SUBSTRING(p.code,6,2), 0) AS DECIMAL(2,0)) ubication 
						FROM vn.parking p
							JOIN vn.sector s ON s.id = p.sectorFk 
							JOIN vn.corridor c ON c.code = LEFT(p.code,1) COLLATE utf8_general_ci
						WHERE s.warehouseFk = vWarehouseFk) sub 
				ORDER BY sub.prepOrder, subCorridor, ubication) sub2 ON sub2.code = p.code 
		SET p.pickingOrder = sub2.po;
	
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 `placement_test` */;
/*!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 `placement_test`(vParamFk INT(11))
BEGIN
	DECLARE vCalcFk INT;
	DECLARE vWarehouseFk INT;
	DECLARE vWarehouseAliasFk INT;
	DECLARE vCurrentYear INT DEFAULT YEAR(NOW());

	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
	ENGINE = MEMORY
		SELECT 	0000000 as ticketFk,
				0000000 as saleFk,
				0000000 as itemFk,
				FALSE as isStowaway,
				0 as quantity;

	INSERT INTO tmp.sale(ticketFk, saleFk, itemFk, isStowaway)
		SELECT s.ticketFk, s.id, s.itemFk, FALSE
			FROM vn.ticketCollection tc
				JOIN vn.collection c ON c.id = tc.collectionFk
				JOIN vn.sale s ON s.ticketFk = tc.ticketFk
				JOIN vn.item i ON i.id = s.itemFk
		WHERE tc.collectionFk = vParamFk
			AND (i.itemPackingTypeFk = c.itemPackingTypeFk OR ISNULL(c.itemPackingTypeFk))
		UNION ALL
		SELECT s.ticketFk, s.id, s.itemFk, FALSE
			FROM vn.sale s
			WHERE s.ticketFk = vParamFk;

	SELECT t.warehouseFk, w.aliasFk
		INTO vWarehouseFk, vWarehouseAliasFk
		FROM vn.ticket t
			JOIN tmp.sale ts ON ts.ticketFk = t.id
			JOIN vn.warehouse w ON w.id = t.warehouseFk
		LIMIT 1;

	CALL cache.visible_refresh(vCalcFk,FALSE,vWarehouseFk);

	UPDATE tmp.sale ts
		JOIN ( SELECT itemFk, sum(visible) as visible
				FROM vn.itemShelvingStock iss
					JOIN vn.warehouse w ON w.id = iss.warehouseFk
				WHERE  w.aliasFk = vWarehouseAliasFk
				GROUP BY iss.itemFk ) iss ON iss.itemFk = ts.itemFk
		SET ts.quantity = iss.visible;

	DROP TEMPORARY TABLE IF EXISTS tmp.sale2;
	CREATE TEMPORARY TABLE tmp.sale2
	ENGINE = MEMORY
		SELECT * FROM tmp.sale;


	DROP TEMPORARY TABLE IF EXISTS tmp.`grouping`;
	CREATE TEMPORARY TABLE tmp.`grouping`
			(PRIMARY KEY (itemFk))
		ENGINE = MEMORY
		SELECT b.itemFk,
			CASE b.groupingMode
				WHEN 0 THEN 1
				WHEN 2 THEN b.packing
				ELSE b.`grouping`
			END	AS `grouping`
		FROM buy b
			JOIN cache.last_buy lb ON lb.buy_id = b.id
		WHERE lb.warehouse_id = vWarehouseFk
			;

	DROP TEMPORARY TABLE IF EXISTS tmp.grouping2;
	CREATE TEMPORARY TABLE tmp.grouping2
		ENGINE = MEMORY
		SELECT * FROM tmp.`grouping`;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList;
	CREATE TEMPORARY TABLE tmp.salePlacementList
		ENGINE = MEMORY

	SELECT 	ts.saleFk,
			ts.itemFk,
			CONCAT(
					IF(	iss.id,
						CONCAT('< ', IFNULL(wk.`code`, '---'),' > '),
						''),
					p.`code`) COLLATE utf8_general_ci as placement ,
			sh.code COLLATE utf8_general_ci as shelving,
			ish.created,
			ish.visible,
			IF(ts.isStowaway, - 100000, IF(ish.visible > 0 OR iss.id, 1, 100000)) * p.pickingOrder as `order`,
			IFNULL(IF(sc.isPreviousPreparedByPacking, ish.packing, g.`grouping`),1) as `grouping`,
			IF(iss.id, TO_SECONDS(TIMESTAMPADD(YEAR,-vCurrentYear,iss.created)), TO_SECONDS(TIMESTAMPADD(YEAR,- year(ish.created),ish.created)) + TO_SECONDS(TIMESTAMPADD(YEAR,-vCurrentYear,NOW()))) as priority,
			0 as saleOrder,
			sc.isPreviousPrepared,
			iss.id as itemShelvingSaleFk,
			ts.ticketFk
			,iss.id
			, st.saleFk as salePreviousPrepared
			, iss.userFk
		FROM tmp.sale ts
			LEFT JOIN (SELECT DISTINCT saleFk
							FROM vn.saleTracking st
								JOIN vn.state s ON s.id = st.stateFk
							WHERE st.isChecked
								AND s.semaphore = 1) st ON st.saleFk = ts.saleFk
			JOIN vn.itemShelving ish ON ish.itemFk = ts.itemFk
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk
			JOIN vn.parking p ON p.id = sh.parkingFk
			JOIN vn.sector sc ON sc.id = p.sectorFk
			JOIN vn.warehouse w ON w.id = sc.warehouseFk
			LEFT JOIN tmp.`grouping` g ON g.itemFk = ts.itemFk
			LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = ts.saleFk AND iss.itemShelvingFk = ish.id
			LEFT JOIN vn.worker wk ON wk.id = iss.userFk
		WHERE w.aliasFk = vWarehouseAliasFk
		HAVING (iss.id AND st.saleFk) OR salePreviousPrepared IS NULL
			;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList_2;
	CREATE TEMPORARY TABLE tmp.salePlacementList_2
		ENGINE MEMORY
	SELECT saleFk, priority as olderPriority
		FROM (SELECT saleFk, priority
				FROM tmp.salePlacementList
				ORDER BY IF(isPreviousPrepared,2,1), IF(visible > 0 OR itemShelvingSaleFk,1,2), priority
				LIMIT 10000000000000000000
				) sub
		GROUP BY saleFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.salePlacementList_3;
	CREATE TEMPORARY TABLE tmp.salePlacementList_3
		ENGINE MEMORY
	SELECT s1.saleFk, `order`as saleOrder
		FROM tmp.salePlacementList s1
			JOIN tmp.salePlacementList_2 s2 ON s2.saleFk = s1.saleFk AND s2.olderPriority = s1.priority;

	UPDATE tmp.salePlacementList s1
		JOIN tmp.salePlacementList_3 s3 ON s3.saleFk = s1.saleFk
		SET s1.saleOrder = s3.saleOrder;
	/*
	-- Anula el orden de antigüedad y ordena por ubicación  */
	UPDATE tmp.salePlacementList
		SET saleOrder = `order`;

	SELECT *
		FROM tmp.salePlacementList
		ORDER BY visible <> 0 DESC,saleOrder, IF(isPreviousPrepared,2,1), IF(itemShelvingSaleFk,1,2),priority;

	DROP TEMPORARY TABLE
		tmp.sale,
		tmp.sale2,
		tmp.`grouping`,
		tmp.grouping2,
		tmp.salePlacementList_2,
		tmp.salePlacementList_3;
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 `prepareClientList` */;
/*!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 `prepareClientList`()
BEGIN
	
	/*
	 * Require la tabla tmp.ticket(id,clientFk)
	 */
	
	DROP TEMPORARY TABLE IF EXISTS tmp.client;
	CREATE TEMPORARY TABLE tmp.client
		(PRIMARY KEY (id))
		ENGINE = MEMORY
		SELECT DISTINCT clientFk id
			FROM tmp.ticket; 
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 `prepareTicketList` */;
/*!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 `prepareTicketList`(vStartingDate DATETIME, vEndingDate DATETIME)
BEGIN
	
	DROP TEMPORARY TABLE IF EXISTS tmp.productionTicket;    
	CREATE TEMPORARY TABLE tmp.productionTicket
		(PRIMARY KEY (ticketFk))
		ENGINE = MEMORY
		SELECT t.id ticketFk, t.clientFk
			FROM vn.ticket t
				LEFT JOIN vn.ticketState ts ON ts.ticket = t.id
				JOIN vn.client c ON c.id = t.clientFk
			WHERE c.typeFk IN ('normal','handMaking','internalUse')
				AND (
					t.shipped BETWEEN CURDATE() AND vEndingDate
					OR (
						ts.alertLevel < 3
						AND t.shipped >= vStartingDate
						AND t.shipped < CURDATE()
					)
				);
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 `previousSticker_get` */;
/*!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 `previousSticker_get`(vSaleGroupFk INT)
BEGIN
/**
 * Devuelve los campos a imprimir en una etiqueta de preparación previa.
 * Actualiza el valor de vn.saleGroup.parkingFk en el caso de que exista un saleGroup del mismo ticket
 * con parking, del mismo sector, para que todos se pongan juntos
 * 
 * @param vSaleGroupFk Identificador de vn.saleGroup
 */ 
	DECLARE vTicketFk INT;
	DECLARE vParkingFk INT;
	DECLARE vSectorFk INT;

	SELECT s.ticketFk
		INTO vTicketFk
		FROM vn.saleGroupDetail sgd
			JOIN vn.sale s ON s.id = sgd.saleFk
		WHERE sgd.saleGroupFk = vSaleGroupFk
		LIMIT 1;
	
	SELECT sg.parkingFk, sc.sectorFk 
		INTO vParkingFk, vSectorFk
		FROM vn.saleGroup sg
			JOIN vn.sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sg.id
			JOIN vn.sectorCollection sc ON sc.id = scsg.sectorCollectionFk
			JOIN vn.saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
			JOIN vn.sale s ON s.id = sgd.saleFk 
		WHERE s.ticketFk = vTicketFk
			AND sg.parkingFk IS NOT NULL 
		LIMIT 1;

	UPDATE vn.saleGroup sg
		SET sg.parkingFk = vParkingFk
		WHERE sg.id = vSaleGroupFk
			AND sg.sectorFk = vSectorFk;
			
		SELECT sgd.saleGroupFk,
				t.id ticketFk, 
				p.code as location,
				t.observations,
				IF(HOUR(t.shipped), HOUR(t.shipped), HOUR(z.`hour`)) shippingHour, 
				IF(MINUTE(t.shipped), MINUTE(t.shipped), MINUTE(z.`hour`)) shippingMinute ,
				IFNULL(MAX(i.itemPackingTypeFk),'H') itemPackingTypeFk ,
				count(*) items
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk 
				JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
				JOIN vn.saleGroup sg ON sg.id = sgd.saleGroupFk 
				JOIN vn.ticket t ON t.id = s.ticketFk
				LEFT JOIN vn.parking p ON p.id = sg.parkingFk
				LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
			WHERE sgd.saleGroupFk = vSaleGroupFk;
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 `productionControl` */;
/*!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 `productionControl`(vWarehouseFk INT, vScopeDays INT)
proc: BEGIN
	
	/**
	* Devuelve un listado de tickets con parámetros relativos a la producción de los días en rango
	*
	* @param vWarehouseFk Identificador de vn.warehouse
	* @param vScopeDays Número de días desde hoy en adelante que entran en el cálculo.
	* 
	* @return Table tmp.productionBuffer
	*/

	DECLARE vEndingDate DATETIME DEFAULT TIMESTAMPADD(DAY,vScopeDays,util.dayEnd(CURDATE()));

	DECLARE vIsTodayRelative BOOLEAN;

	SELECT isTodayRelative INTO vIsTodayRelative
		FROM vn.worker 
			WHERE userFk = vn.getUser();

	CALL vn.prepareTicketList(TIMESTAMPADD(DAY,-1,CURDATE()), vEndingDate);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		SELECT * FROM tmp.productionTicket;
	
	CALL vn.prepareClientList();

	DROP TEMPORARY TABLE IF EXISTS tmp.sale_getProblems;
	CREATE TEMPORARY TABLE tmp.sale_getProblems
		(INDEX (ticketFk)) ENGINE = MEMORY
		SELECT tt.ticketFk, tt.clientFk, t.warehouseFk, t.shipped
			FROM tmp.productionTicket tt
				JOIN vn.ticket t ON t.id = tt.ticketFk;
	
	CALL vn.ticket_getProblems(vIsTodayRelative);
	
	DROP TEMPORARY TABLE IF EXISTS tmp.productionBuffer;
	CREATE TEMPORARY TABLE tmp.productionBuffer
	(PRIMARY KEY(ticketFk))
	ENGINE = MEMORY
	SELECT tt.ticketFk 
		, tt.clientFk
		, t.warehouseFk
		, t.nickname
		, t.packages
		, IF(HOUR(t.shipped), HOUR(t.shipped), IFNULL(HOUR(zc.hour),HOUR(z.hour))) as HH
		, IFNULL(HOUR(zc.hour),HOUR(z.hour)) as Departure
		, IF(MINUTE(t.shipped), MINUTE(t.shipped), IFNULL(MINUTE(zc.hour), MINUTE(z.hour))) as mm
		, t.routeFk
		, IF(am.deliveryMethodFk = 2,z.`id`,0) as zona
		, t.nickname addressNickname
		, a.postalCode 
		, a.city 
		, p.name province
		, CONCAT(z.`name`,' ',IFNULL(RIGHT(t.routeFk,3),'')) agency
		, am.id agencyModeFk
		, 0 AS `lines`
		, CAST( 0 AS DECIMAL(5,2)) AS m3
		, CAST( 0 AS DECIMAL(5,2)) AS preparationRate
		, "" as problem
		, IFNULL(tls.state,2)  AS state
		, w.code workerCode
		, DATE(t.shipped) shipped
		, wk.code AS salesPersonCode
		, p.id provinceFk
		, tls.productionOrder
		, ifnull(tls.alertLevel,0) alertLevel
		, t.isBoxed as palletized
		, IF(rm.isPickingAllowed ,rm.bufferFk, NULL) ubicacion
		, tlu.lastUpdated
		, ifnull(st.graphCategory,0) graphCategory
		, pk.code as parking
		, 0 AS H
		, 0 AS V
		, 0 AS N
		, st.isOk
		, ag.isOwn
		, rm.bufferFk
		FROM tmp.productionTicket tt
			JOIN vn.ticket t on tt.ticketFk = t.id
			LEFT JOIN vn.ticketStateToday tst ON tst.ticket = t.id
			LEFT JOIN vn.state st ON st.id = tst.state
			LEFT JOIN vn.client c ON c.id = t.clientFk
			LEFT JOIN vn.worker wk ON wk.id = c.salesPersonFk
			JOIN vn.address a on a.id = t.addressFk
			LEFT JOIN vn.province p on p.id = a.provinceFk
			JOIN vn.agencyMode am ON am.id = t.agencyModeFk
			JOIN vn.agency ag ON ag.id = am.agencyFk 
			LEFT JOIN vn.ticketState tls on tls.ticket = tt.ticketFk
			LEFT JOIN vn.ticketLastUpdated tlu ON tlu.ticketFk = tt.ticketFk
			LEFT JOIN vn.worker w on w.id = tls.worker
			LEFT JOIN vn.routesMonitor rm ON rm.routeFk = t.routeFk 
			LEFT JOIN vn.zone z ON z.id = t.zoneFk
			LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk AND date(t.shipped) = zc.dated
			LEFT JOIN vn.ticketParking  tp ON tp.ticketFk = t.id
			LEFT JOIN vn.parking pk ON pk.id = tp.parkingFk
		WHERE t.warehouseFk = vWarehouseFk
			AND am.deliveryMethodFk IN (1,2,3);
		
	-- Problemas por ticket
	ALTER TABLE tmp.productionBuffer 
		CHANGE COLUMN `problem` `problem` VARCHAR(255),
		ADD COLUMN `collectionH` INT,
		ADD COLUMN `collectionV` INT,
		ADD COLUMN `collectionN` INT;
	
	UPDATE tmp.productionBuffer pb
		JOIN  tmp.ticket_problems tp ON tp.ticketFk = pb.ticketFk
		SET pb.problem = TRIM(CAST(CONCAT( 	IFNULL(tp.itemShortage,''),
									IFNULL(tp.itemDelay,''),
									IFNULL(tp.itemLost,''),
									IF(tp.isFreezed,' CONGELADO',''),
									IF(tp.hasHighRisk,' RIESGO',''),
									IF(tp.hasTicketRequest, ' COD 100',''),
									IF(tp.isTaxDataChecked, '',' FICHA INCOMPLETA'),
									IF(tp.hasComponentLack,' COMPONENTES', ''),
									IF(HOUR(NOW()) < pb.HH AND tp.isTooLittle,' PEQUEÑO', '')
							) as char(255)));
		
	-- Clientes Nuevos o Recuperados
	UPDATE tmp.productionBuffer pb
		LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = pb.clientFk
		JOIN vn.productionConfig pc
		SET pb.problem = TRIM(CAST(CONCAT('NUEVO ', pb.problem) AS CHAR(255)))
		WHERE (ISNULL(cnb.clientFk)  OR cnb.isRookie)
			AND pc.rookieDays;
	
	-- Líneas y volumen por ticket
	UPDATE tmp.productionBuffer pb
		JOIN (
				SELECT tt.ticketFk,
						COUNT(*) as `lines`, 
						sum(sv.volume) as m3, 
						IFNULL(sum(IF(sv.isPicked,sv.volume,0)) / sum(sv.volume),0) as rate
					FROM tmp.productionTicket tt
						JOIN vn.saleVolume sv on sv.ticketFk = tt.ticketFk
					GROUP BY tt.ticketFk
			) m on m.ticketFk = pb.ticketFk
		SET pb.`lines` = m.`lines`,
		pb.m3 = m.m3,
		pb.preparationRate = m.rate;

	DELETE FROM tmp.productionBuffer
		WHERE `lines`= 0;

	-- Lineas por linea de encajado
	UPDATE tmp.productionBuffer pb
		JOIN ( SELECT ticketFk, 
					sum(sub.H) H, 
					sum(sub.V) V,
					sum(sub.N) N 
				FROM (
					SELECT 	t.ticketFk,
							sum(i.itemPackingTypeFk = 'H') H,
							sum(i.itemPackingTypeFk = 'V') V,
							sum(ISNULL(i.itemPackingTypeFk)) N
						FROM tmp.productionTicket t
							JOIN vn.sale s ON s.ticketFk = t.ticketFk
							JOIN vn.item i ON i.id = s.itemFk
						GROUP BY t.ticketFk, i.itemPackingTypeFk) sub 
				GROUP BY ticketFk
			) sub2 ON sub2.ticketFk = pb.ticketFk		
		SET pb.H = sub2.H,
			pb.V = sub2.V,
			pb.N = sub2.N;
		
	-- Colecciones segun tipo de encajado

	UPDATE tmp.productionBuffer pb
		JOIN vn.ticketCollection tc ON pb.ticketFk = tc.ticketFk
		SET pb.collectionH = IF(pb.H,tc.collectionFk,NULL), 
			pb.collectionV = IF(pb.V,tc.collectionFk,NULL),
			pb.collectionN = IF(pb.N,tc.collectionFk,NULL);
			
	-- Previa pendiente
	ALTER TABLE tmp.productionBuffer
		ADD previousWithoutParking BOOL DEFAULT FALSE;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketWithPrevia;
	CREATE TEMPORARY TABLE tmp.ticketWithPrevia
		(ticketFk INT PRIMARY KEY,
		salesCount INT DEFAULT 0,
		salesInParkingCount INT DEFAULT 0)
		ENGINE = MEMORY;

-- Insertamos todos los tickets que tienen productos parkineados en sectores de previa, segun el sector
	INSERT INTO tmp.ticketWithPrevia(ticketFk, salesCount)
		SELECT pb.ticketFk, COUNT(DISTINCT s.id)
			FROM tmp.productionBuffer pb 
				JOIN vn.sale s ON s.ticketFk = pb.ticketFk
				JOIN vn.itemShelvingStock iss ON iss.itemFk = s.itemFk
				JOIN vn.sector sc ON sc.id = iss.sectorFk
				JOIN vn.item i ON i.id = iss.itemFk
			WHERE iss.isPreviousPrepared
				AND (ISNULL(sc.itemPackingTypeFk) 
					OR (ISNULL(i.itemPackingTypeFk) AND NOT pb.V)
					OR sc.itemPackingTypeFk = i.itemPackingTypeFk )
			GROUP BY pb.ticketFk;
	
	-- Se calcula la cantidad de productos que estan ya preparados porque su saleGroup está aparcado
	UPDATE tmp.ticketWithPrevia twp
		JOIN ( SELECT pb.ticketFk, count(DISTINCT s.id) salesInParkingCount
					FROM tmp.productionBuffer pb
						JOIN vn.sale s ON s.ticketFk = pb.ticketFk
						JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
						JOIN vn.saleGroup sg ON sg.id = sgd.saleGroupFk
					WHERE NOT ISNULL(sg.parkingFk)
					GROUP BY pb.ticketFk ) sub ON twp.ticketFk = sub.ticketFk
		SET twp.salesInParkingCount = sub.salesInParkingCount;

	-- Marcamos como pendientes aquellos que no coinciden las cantidades
	UPDATE tmp.productionBuffer pb 
		JOIN tmp.ticketWithPrevia twp ON twp.ticketFk = pb.ticketFk
		SET pb.previousWithoutParking = TRUE
		WHERE twp.salesCount > twp.salesInParkingCount;
	
	DROP TEMPORARY TABLE tmp.productionTicket;
	DROP TEMPORARY TABLE tmp.ticket;
	DROP TEMPORARY TABLE tmp.risk;
	DROP TEMPORARY TABLE tmp.ticket_problems;
	DROP TEMPORARY TABLE tmp.ticketWithPrevia;

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 `productionSectorList` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `productionSectorList`(vSectorFk INT)
BEGIN
	
	/**
	 * Devuelve el listado de vn.sale que se puede preparar en previa para ese sector
	 * 
	 * @param vSectorFk Identificador de vn.sector
	 */
	
	DECLARE vWarehouseFk INT;

	SELECT warehouseFk INTO vWarehouseFk
	FROM vn.sector
	WHERE id = vSectorFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.whiteTicket;
	CREATE TEMPORARY TABLE tmp.whiteTicket		
		(ticketFk INT PRIMARY KEY)
		SELECT s.ticketFk , count(*) AS saleNum, sum(ISNULL(i.itemPackingTypeFk)) iptNull
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk
				JOIN vn.ticket t ON t.id = s.ticketFk
			WHERE t.shipped BETWEEN CURDATE() AND TIMESTAMPADD(HOUR, 23, CURDATE())
			GROUP BY s.ticketFk
			HAVING saleNum = iptNull;
		
	DROP TEMPORARY TABLE IF EXISTS tmp.sectorTypeTicket;
	CREATE TEMPORARY TABLE tmp.sectorTypeTicket	
		(ticketFk INT PRIMARY KEY)
		SELECT s.ticketFk , sum(i.itemPackingTypeFk <=> sc.itemPackingTypeFk) iptSector
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk
				JOIN vn.ticket t ON t.id = s.ticketFk
				JOIN vn.sector sc ON sc.id = vSectorFk
			WHERE t.shipped BETWEEN CURDATE() AND TIMESTAMPADD(HOUR, 23, CURDATE())
			GROUP BY s.ticketFk
			HAVING iptSector;

	CALL vn.productionControl(vWarehouseFk, 0);
	
	SELECT 0,999999,0 INTO @sameTicket, @ticket, @litrosTicket;

	SELECT  @litrosTicket := IF(sub.ticketFk = @ticket, @litrosTicket + Litros, Litros) as LitrosTicket,
			@sameTicket := IF(sub.ticketFk = @ticket, @sameTicket, IF(@sameTicket, 0 , 1)) as sameTicket,
			sub.*,
			@ticket := ticketFk AS lastTicket
		FROM
			(
				SELECT * FROM
				(
					SELECT 	isa.saleFk,
							isa.Modificado,
							isa.ticketFk,
							isa.isPicked,
							isa.itemFk,
							isa.quantity,
							isa.concept,
							i.itemPackingTypeFk,
							isa.`size`,
							isa.Estado,
							isa.sectorProdPriority,
							isa.available,
							isa.sectorFk,
							isa.matricula,
							isa.parking,
							isa.itemShelving,
							isa.Agency,
							isa.shipped,
							isa.`grouping`,
							isa.packing,
							isa.`hour`,
							isa.isPreviousPreparable,
							isa.physicalVolume,
							isa.warehouseFk ,
							sum(isa.available) as totalAvailable,
							IF (HOUR(isa.shipped),HOUR(isa.shipped), HOUR(isa.`hour`)) Hora,
							IF (MINUTE(isa.shipped),MINUTE(isa.shipped), MINUTE(isa.`hour`)) Minuto,
							i.subName,
							CAST(isa.physicalVolume * 1000 AS DECIMAL(10,0)) as Litros
						FROM vn.itemShelvingAvailable isa
							JOIN vn.item i ON i.id = isa.itemFk
							JOIN vn.sector s ON s.id = isa.sectorFk AND s.warehouseFk = isa.warehouseFk
							JOIN vn.ticket t ON t.id = isa.ticketFk
							LEFT JOIN tmp.whiteTicket wt ON wt.ticketFk = isa.ticketFk
							LEFT JOIN tmp.sectorTypeTicket stt ON stt.ticketFk = isa.ticketFk
							JOIN vn.client c ON c.id = t.clientFk
							JOIN tmp.productionBuffer pb ON pb.ticketFk = t.id
							JOIN vn.packagingConfig pc 
						WHERE IF(s.isPreviousPreparedByPacking, 
									i.`size` > pc.previousPreparationMinimumSize 
									AND isa.packing > 1 
									AND (MOD(TRUNCATE(isa.quantity,0), isa.packing)= 0 ),
								TRUE)
							AND isa.sectorFk = vSectorFk
							AND isa.quantity > 0
							AND pb.problem = ""
							AND (i.itemPackingTypeFk <=> s.itemPackingTypeFk 
									OR ISNULL(s.itemPackingTypeFk)
									OR wt.ticketFk
									OR (stt.ticketFk AND ISNULL(i.itemPackingTypeFk)))
						GROUP BY saleFk
						HAVING isa.quantity <= totalAvailable
				) sub2
					ORDER BY Hora, Minuto, ticketFk
			) sub
		;

		DROP TEMPORARY TABLE tmp.whiteTicket;
		DROP TEMPORARY TABLE tmp.sectorTypeTicket;
	
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 */ ;
/*!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 `rangeDateInfo`(vStarted DATE, vEnded DATE)
BEGIN
/**
 * Crea una tabla temporal con las fechas
 * desde una fecha inicial a una final
 * @param vStarted fecha inicial
 * @param vEnded fecha final
 */
    DECLARE vDated DATE DEFAULT vStarted;

    DROP TEMPORARY TABLE IF EXISTS tmp.rangeDate;
    CREATE TEMPORARY TABLE tmp.rangeDate(
		`dated` DATE,
        `period` INT,
        `month` INT,
        `year` INT,
        `day` INT,
        `week` INT,
        `yearMonth` INT
        )
        ENGINE = MEMORY;
        
	WHILE vDated <= vEnded DO
		INSERT INTO tmp.rangeDate
			SET `dated` = vDated,
            `period` = YEAR(vDated) * 100 + WEEK(vDated, 1),
            `month` = MONTH(vDated),
            `year` = YEAR(vDated),
            `day` = DAY(vDated),
            `week` = WEEK(vDated, 1),
            `yearMonth` = YEAR(vDated) * 100 + MONTH(vDated);
            
		SET vDated = DATE_ADD(vDated, INTERVAL 1 DAY);
	END WHILE;
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 `rankingTeamByQuarter` */;
/*!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 `rankingTeamByQuarter`(vYear INT, vQuarter INT)
BEGIN

	DECLARE vMinimumSalesByQuarter INT;
    
	SELECT minimumSalesByQuarter INTO vMinimumSalesByQuarter
		FROM commissionConfig;
    
	DROP TEMPORARY TABLE IF EXISTS tmp.rankingTeam;
	CREATE TEMPORARY TABLE tmp.rankingTeam
		(PRIMARY KEY(departmentFk)) ENGINE = MEMORY 
	 SELECT 
			(sub1.importe - sub2.importe) / IF ((sub1.importe - sub2.importe) > 0,sub3.countPeople,1) AS diferencia,
			CONCAT(sub1.name,
					'(',
					sub1.peopleMinSale,
					'/',
					sub3.countPeople,
					')') AS teamPeople,
			sub1.departmentFk AS departmentFk
		FROM
			(((SELECT 
				SUM(sub.importe) AS importe,
					sub.name AS name,
					sub.año AS año,
					sub.departmentFk AS departmentFk,
					COUNT(*) peopleMinSale
			FROM
				(SELECT 
				SUM(v.portfolioWeight) AS importe,
					d.`name`,
					v.año,
					wd.departmentFk
			FROM (((bs.vendedores v
				JOIN `account`.`user` u ON (u.id = v.Id_Trabajador))
				JOIN vn.workerDepartment wd ON (wd.workerFk = u.id))
				JOIN vn.department d ON (d.id = wd.departmentFk))
			WHERE v.año = vYear
				AND d.name LIKE 'EQUIPO%'
				AND CEIL(v.mes / 3) = vQuarter
			GROUP BY v.Id_Trabajador
			HAVING importe >= vMinimumSalesByQuarter) sub
			GROUP BY sub.departmentFk) sub1
			JOIN (SELECT 
				SUM(v.portfolioWeight) AS importe,
					d.name,
					wd.departmentFk
			FROM (((bs.vendedores v
				JOIN account.user u ON (u.id = v.Id_Trabajador))
				JOIN vn.workerDepartment wd ON (wd.workerFk = u.id))
				JOIN vn.department d ON (d.id = wd.departmentFk))
			WHERE v.año = vYear - 1
				AND d.name LIKE 'EQUIPO%'
				AND CEIL(v.mes / 3) = vQuarter
			GROUP BY wd.departmentFk
			ORDER BY SUM(v.importe) DESC LIMIT 10000000000000000000) sub2 ON (sub1.name = sub2.name))
			JOIN (SELECT COUNT(0) AS countPeople,
					wd.departmentFk AS departmentFk
			FROM
				(vn.salesPersonSince sps
			JOIN vn.workerDepartment wd ON (sps.workerFk = wd.workerFk))
			WHERE
				CONCAT(YEAR(sps.started), QUARTER(sps.started)) <= CONCAT(vYear - 1, vQuarter)
			GROUP BY wd.departmentFk) sub3 ON (sub3.departmentFk = sub1.departmentFk))
		ORDER BY (sub1.importe - sub2.importe) / sub3.countPeople  DESC;
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 */ ;
/*!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 `rate_getPrices`(vDated DATE, vWarehouseFk INT)
BEGIN
/**
 * Prepara una tabla con las tarifas aplicables en funcion de la fecha y el almacén
 *
 * @param vDated fecha para la cual calcula la tarifa
 * @param vWarehouseFk warehouse para el cual calcula la tafia
 * @return tmp.rate(rate0, rate1, rate2, rate3)
 */  
	DROP TEMPORARY TABLE IF EXISTS tRate;
	CREATE TEMPORARY TABLE tRate
		SELECT rate0, rate1, rate2, rate3
			FROM vn.rate
			WHERE dated <= vDated
				AND warehouseFk = vWarehouseFk
			ORDER BY dated DESC;
                    
	DROP TEMPORARY TABLE IF EXISTS tmp.rate;
	CREATE TEMPORARY TABLE tmp.rate
		ENGINE = MEMORY
		SELECT * FROM
		(
			SELECT * FROM tRate			
		UNION ALL
			SELECT rate0, rate1, rate2, rate3 FROM rateConfig
		) sub2
		LIMIT 1;
	DROP TEMPORARY TABLE tRate;
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_getPrices2` */;
/*!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 `rate_getPrices2`(vLanded DATE, vWarehouseFk INT)
BEGIN

	-- Prepara una tabla con las tarifas aplicables en funcion de la fecha y el almacén
	DROP TEMPORARY TABLE IF EXISTS tRate;
	CREATE TEMPORARY TABLE tRate
	SELECT rate0, rate1, rate2, rate3
					FROM vn.rate
					WHERE dated <= vLanded
					AND warehouseFk = vWarehouseFk
					ORDER BY dated DESC;
                    
	DROP TEMPORARY TABLE IF EXISTS tmp.rate;
	CREATE TEMPORARY TABLE tmp.rate
		ENGINE = MEMORY
		SELECT * FROM
		(
			SELECT * FROM tRate			
		UNION ALL
			SELECT rate0, rate1, rate2, rate3 FROM rateConfig
		) sub2
		LIMIT 1;
	DROP TEMPORARY TABLE tRate;
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 `recipe_Cook` */;
/*!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 `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 ;
/*!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 `recipe_Plaster` */;
/*!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 `recipe_Plaster`(vItemFk INT, vTicketFk INT, vQuantity INT)
BEGIN

	DECLARE vLastCost DECIMAL(10,2);
    DECLARE vWarehouseFk INT;
    DECLARE vShipped DATE;
    DECLARE vEntryFk INT;
    DECLARE vTravelFk INT;
    
    CALL cache.last_buy_refresh(FALSE);
    
    SELECT warehouseFk, shipped 
		INTO vWarehouseFk, vShipped
		FROM vn.ticket 
        WHERE id = vTicketFk;

	UPDATE vn.ticket t
		JOIN vn.item i ON i.id = vItemFk
        SET t.nickname = CONCAT(vQuantity,' ',i.longName)
		WHERE t.id = vTicketFk;
        
	SELECT b.buyingValue INTO vLastCost
		FROM vn.buy b
			JOIN cache.last_buy lb ON lb.buy_id = b.id
		WHERE lb.item_id = vItemFk
        ORDER BY (lb.warehouse_id = vWarehouseFk) DESC
        LIMIT 1;
            
	INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price)
		SELECT vTicketFk, 98, - vQuantity, i.longName, vLastCost
			FROM vn.item i
            WHERE i.id = vItemFk;
   /*         
	SELECT tr.id INTO vTravelFk
		FROM vn.travel tr
			JOIN vn.warehouse w ON w.id = tr.warehouseOutFk
        WHERE tr.warehouseInFk = vWarehouseFk
			AND tr.landed = vShipped
            AND w.name = 'Confeccion';
																										
	IF IFNULL(vTravelFk,0) = 0 THEN
    
		INSERT INTO vn.travel(shipped, landed, warehouseInFk, warehouseOutFk, agencyFk)
			SELECT vShipped, vShipped, vWarehouseFk, w.id, am.id
				FROM vn.warehouse w 
					JOIN vn.agencyMode am 
				WHERE w.name = 'Confeccion'
					AND am.name = 'DIRECTO PROVEEDOR';
		
        SET vTravelFk = LAST_INSERT_ID();
	
    END IF;  
        
	SELECT e.id INTO vEntryFk
		FROM vn.entry e
			JOIN vn.supplier s ON s.id = supplierFk
		WHERE e.travelFk = vTravelFk
			AND s.name = 'Confeccion Natural'
			AND e.isRaid = FALSE;
    
	IF IFNULL(vEntryFk,0) = 0 THEN
    
        INSERT INTO vn.entry(supplierFk, evaNotes, travelFk, companyFk)
				SELECT s.id, t.nickname, vTravelFk, c.id
					FROM vn.supplier s
						JOIN vn.ticket t ON t.id = vTicketFk
                        JOIN vn.company c ON c.code = 'VNL'         
				WHERE s.name = 'Confeccion Natural';
                
		SET vEntryFk = LAST_INSERT_ID();
        
	END IF;
    
    INSERT INTO vn.buy(entryFk, itemFk, quantity, buyingValue, packageFk, packing, grouping)
		SELECT vEntryFk, b.itemFk, vQuantity, b.buyingValue, b.packageFk, b.packing, b.grouping
			FROM cache.last_buy lb
				JOIN vn.buy b ON b.id = lb.buy_id
                WHERE lb.item_id = vItemFk
					ORDER BY (lb.warehouse_id = vWarehouseFk) DESC
					LIMIT 1;
*/
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 `refund` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `refund`(IN vOriginTicket INT, OUT vNewTicket INT)
BEGIN
	
	DECLARE vDone BIT DEFAULT 0;
	DECLARE vCustomer MEDIUMINT;
	DECLARE vWarehouse TINYINT;
	DECLARE vCompany MEDIUMINT;
	DECLARE vAddress MEDIUMINT;
    DECLARE vRefundAgencyMode INT;
    DECLARE vItemFk INT;
    DECLARE vQuantity DECIMAL (10,2);
    DECLARE vConcept VARCHAR(50);
    DECLARE vPrice DECIMAL (10,2);
    DECLARE vDiscount TINYINT;
	DECLARE vSaleNew INT;
    DECLARE vSaleMain INT;
    DECLARE vZoneFk INT;
    
    DECLARE vRsMainTicket CURSOR FOR
		SELECT id, itemFk, - quantity, concept, price, discount
			FROM vn.sale 
            WHERE ticketFk = vOriginTicket;
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1;
	
    SELECT id INTO vRefundAgencyMode
		FROM agencyMode WHERE `name` = 'ABONO';

	SELECT clientFk, warehouseFk, companyFk, addressFk 
			INTO vCustomer, vWarehouse, vCompany, vAddress
		FROM ticket 
        WHERE id = vOriginTicket;
    
    SELECT id INTO vZoneFk 
		FROM zone WHERE agencyModeFk = vRefundAgencyMode
        LIMIT 1;
        
	INSERT INTO vn2008.Tickets (
			Id_Cliente,
			Fecha,
			Id_Consigna,
			Id_Agencia,
			Alias,
			warehouse_id,
			empresa_id,
			landing,
            zoneFk
		)
		SELECT
					vCustomer,
					CURDATE(),
					vAddress,
					vRefundAgencyMode,
					a.nickname,
					vWarehouse,
					vCompany,
					CURDATE(),
                    vZoneFk
			FROM address a
			WHERE a.id = vAddress;

	SET vNewTicket = LAST_INSERT_ID();

	SET vDone := 0;	
	OPEN vRsMainTicket ;
    FETCH vRsMainTicket INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount;

	WHILE NOT vDone DO
    
		INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount)
			VALUES( vNewTicket, vItemFk, vQuantity, vConcept, vPrice, vDiscount );
            
        SET vSaleNew = LAST_INSERT_ID();
        
        INSERT INTO vn.saleComponent(saleFk,componentFk,`value`) 
        SELECT vSaleNew,componentFk,`value`  
			FROM vn.saleComponent 
            WHERE saleFk = vSaleMain;
        
		FETCH vRsMainTicket INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount;
        
	END WHILE;
	CLOSE vRsMainTicket; 

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 `replaceMovimientosMark` */;
/*!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 `replaceMovimientosMark`(
	idMovimiento INT,
	detalle INT,
    originalQuantity INT,
    idTrabajador INT,
    stateFk INT,
    originFk INT,
    userFk INT,
    actionString VARCHAR(50),
    description VARCHAR(100))
BEGIN

	/* DEPRECATED
    *
    *   usar vn.saleTracking_Replace
    *
    */
    
	REPLACE INTO vn2008.Movimientos_mark(Id_Movimiento, valor, original_quantity, Id_Trabajador, stateFk) 
		VALUES(idMovimiento,detalle,originalQuantity,idTrabajador,stateFk);
    /*INSERT INTO vn.ticketLog (originFk, userFk, action , description) 
		VALUES(originFk, userFk, actionString, description);*/
    
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 `reportLabelCollection_get` */;
/*!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 `reportLabelCollection_get`(vParam INT)
BEGIN	
/**
 * Obtiene los datos de etiquetas a partir de de un ticket o colección.
 *
 * @param vParam Ticket/Colección del que sacar los datos
 */
	DECLARE vIsCollection BOOL;

	SELECT IF(id, TRUE, FALSE) INTO vIsCollection
		FROM vn.collection c 
		WHERE id = vParam;

	SELECT c.itemPackingTypeFk,
			CONCAT(tc.collectionFk, ' ', LEFT(cc.code, 4)) color,
			CONCAT(tc.collectionFk, ' ', SUBSTRING('ABCDEFGH',tc.wagon, 1), '-', tc.`level`) levelV,
			tc.ticketFk,
			LEFT(COALESCE(et.description, zo.name, am.name),12) agencyDescription,
			am.name,
			t.clientFk,
			CONCAT(CAST(SUM(sv.volume) AS DECIMAL(5, 2)), 'm³') m3 ,
			CAST(IF(ic.code = 'plant', CONCAT(MAX(i.`size`),' cm'), COUNT(*)) AS CHAR) size,
			w.code workerCode,
			tt.labelCount,
			IF(HOUR(t.shipped), TIME(t.shipped), TIME(zo.`hour`)) agencyHour,
			t.shipped,
			COUNT(*) lineCount,
			t.nickName
		FROM ticket t
			JOIN ticketCollection tc ON tc.ticketFk = t.id
			JOIN collection c ON c.id = tc.collectionFk
			JOIN collectionColors cc ON cc.shelve = tc.`level`
				AND cc.wagon = tc.wagon
				AND cc.trainFk = c.trainFk
			JOIN sale s ON s.ticketFk = t.id
			LEFT JOIN saleVolume sv ON sv.saleFk = s.id	
			JOIN item i ON i.id = s.itemFk
			JOIN itemType it ON it.id = i.typeFk
			JOIN itemCategory ic ON ic.id = it.categoryFk
			JOIN worker w ON w.id = c.workerFk
			JOIN agencyMode am ON am.id = t.agencyModeFk
			LEFT JOIN ticketTrolley tt ON tt.ticket = t.id
			LEFT JOIN `zone` zo ON t.zoneFk = zo.id
			LEFT JOIN routesMonitor rm ON rm.routeFk = t.routeFk
			LEFT JOIN expeditionTruck et ON et.id = rm.expeditionTruckFk	
		WHERE IF(vIsCollection, tc.collectionFk = vParam, tc.ticketFk = vParam)
		GROUP BY t.id
		ORDER BY cc.`code`;
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 `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 */ ;
/*!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 `routeGuessPriority`(IN vRuta INT)
BEGIN
/* Usa los valores del ultimo año para adivinar el orden de los tickets en la ruta
 * vRuta id ruta
*/

UPDATE ticket mt
	JOIN (
		SELECT tt.addressFk, ROUND(IFNULL(AVG(t.priority),0),0) AS priority
			FROM ticket t
				JOIN ticket tt ON tt.addressFk = t.addressFk
			WHERE t.shipped > TIMESTAMPADD(YEAR,-1,CURDATE())
				AND tt.routeFk = vRuta
			GROUP BY addressFk
		) sub ON sub.addressFk = mt.addressFk
	SET mt.priority = sub.priority
		WHERE mt.routeFk = vRuta;
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 `routeInfo` */;
/*!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 `routeInfo`(vRouteFk INT)
BEGIN

	DECLARE vPackages INT;
    DECLARE vM3 INT;
    DECLARE vKg INT;
    DECLARE vMatricula  varchar(50);
    
    SELECT sum(packages) as bultos
		INTO vPackages
		FROM vn.ticket t 
		WHERE routeFk = vRouteFk;
        
	SELECT SUM(sv.physicalVolume), SUM(sv.physicalWeight)
		INTO vM3, vKg
        FROM vn.saleVolume sv
        WHERE sv.routeFk = vRouteFk;
        
	SELECT v.numberPlate as matricula
		INTO vMatricula
		FROM vn.route r 
        JOIN vn.vehicle v ON r.vehicleFk = v.id
		WHERE r.id = vRouteFk;
        
	SELECT vRouteFk as Ruta,
		   vPackages as Bultos,	
		   vM3 as m3,
           vKg as Kg,
           vMatricula as Matricula;

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 `routeMonitor_calculate` */;
/*!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 `routeMonitor_calculate`(vDate DATE)
BEGIN

	DECLARE vDateEND DATETIME;

	SET vDateEND = util.dayend(vDate);
	SET vDate = TIMESTAMPADD(DAY,-1,vDate);

	DROP TEMPORARY TABLE IF EXISTS tmp.routesMonitor;
	
	CREATE TEMPORARY TABLE tmp.routesMonitor
		(INDEX (routeFk))
		ENGINE = MEMORY
		SELECT DISTINCT(t.routeFk) routeFk
			FROM vn.ticket t 
			WHERE t.shipped BETWEEN vDate AND vDateEND
				AND t.routeFk IS NOT NULL;

	INSERT IGNORE INTO routesMonitor(routeFk)
		SELECT routeFk
			FROM tmp.routesMonitor;

	UPDATE routesMonitor rm
			JOIN route r ON r.id = rm.routeFk
			JOIN agencyMode a ON a.id = r.agencyModeFk
		SET rm.`name` = a.name, 
			rm.ticketFree = 0,
			rm.ticketProduction = 0,
			rm.ticketPacked = 0,
			rm.dated = r.created;

	UPDATE routesMonitor rm
			JOIN(SELECT t.routeFk, COUNT(*) AS ticketFree
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN ticketLastState ts ON t.id = ts.ticketFk
						JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk
						JOIN state s ON s.id = tt.stateFk AND s.alertLevel = 0
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk
		SET rm.ticketFree = sub.ticketFree;

	UPDATE routesMonitor rm		
			JOIN(SELECT t.routeFk, COUNT(*) AS ticketPacked
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN ticketLastState ts ON t.id = ts.ticketFk
						JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk
						JOIN state s ON s.id = tt.stateFk AND s.alertLevel = 2
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk 
		SET rm.ticketPacked = sub.ticketPacked;

	UPDATE routesMonitor rm
			JOIN(SELECT t.routeFk, COUNT(*) AS ticketProduction
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN ticketLastState ts ON t.id = ts.ticketFk
						JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk
						JOIN state s ON s.id = tt.stateFk AND s.alertLevel = 3
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk
		SET rm.ticketProduction = sub.ticketProduction;

	UPDATE routesMonitor rm
			JOIN( SELECT t.routeFk, COUNT(*) AS packages
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN expedition e ON e.ticketFk = t.id
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk
		SET rm.packages = sub.packages;

	UPDATE routesMonitor rm
			JOIN( SELECT t.routeFk, SUM(sv.volume) AS m3
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN vn.saleVolume sv ON sv.ticketFk = t.id 
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk
		SET rm.m3 = sub.m3;

	UPDATE routesMonitor rm
			JOIN( SELECT t.routeFk , sum(IFNULL(pk.volume, pk.width * pk.height * pk.`depth` )) / 1000000 m3boxes
					FROM vn.ticket t
						JOIN tmp.routesMonitor rm ON rm.routeFk = t.routeFk
						JOIN vn.expedition e ON e.ticketFk = t.id
						JOIN vn.packaging pk ON pk.id = e.packagingFk 
					GROUP BY t.routeFk
				) sub ON sub.routeFk = rm.routeFk    
		SET rm.m3boxes = sub.m3boxes; 

	UPDATE routesMonitor rm
			JOIN vn.expeditionTruck et ON et.id = rm.expeditionTruckFk 
		SET rm.etd = et.ETD;
	
	DROP TEMPORARY TABLE tmp.routesMonitor;
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 `routeSetOk` */;
/*!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 `routeSetOk`(
    vRouteFk INT)
BEGIN
 
   UPDATE vn.route r
   SET r.isOk = 1
   WHERE r.id = vRouteFk;
   
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 `routeUpdateM3` */;
/*!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 `routeUpdateM3`(vRoute INT)
BEGIN
/**
 * @deprecated Use vn.route_updateM3()
 */
	call route_updateM3(vRoute);
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 `route_calcCommission` */;
/*!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 `route_calcCommission`(vSelf INT)
proc: BEGIN
/**
 * Calcula las comisión para una ruta y guarda los valores en la tabla routeCommission
 *
 * @param vSelf id de ruta
 */
	DECLARE vIsUpdatable BOOL;
	DECLARE vIsFreelance BOOL;

	SELECT r.created >= rc.cutoffDated INTO vIsUpdatable
		FROM route r
			JOIN routeConfig rc
		WHERE r.id = vSelf;

	IF vIsUpdatable THEN
		DELETE FROM routeCommission
			WHERE routeFk = vSelf;

		SELECT wl.workerFk IS NULL INTO vIsFreelance
			FROM route r
				LEFT JOIN workerLabour wl ON wl.workerFk = r.workerFk
			WHERE r.id = vSelf
				LIMIT 1;

		IF vIsFreelance THEN
			INSERT INTO routeCommission (routeFk, workCenterFk, freelanceYearlyM3)
				SELECT vSelf,
						r.commissionWorkCenterFk,
						rc.freelanceM3 * IF(IFNULL(r.m3, 0) >= rc.freelanceMinM3, IFNULL(r.m3, 0), 0)
					FROM route r
						JOIN vehicle v ON v.id = r.vehicleFk
						JOIN routeConfig rc
					WHERE r.id = vSelf
						AND r.workerFk
						AND r.commissionWorkCenterFk
						AND r.m3;
		ELSE
			INSERT INTO routeCommission (routeFk, workCenterFk, km, m3, yearlyKm, yearlyM3, cat4m3, cat5m3)
				SELECT vSelf,
						r.commissionWorkCenterFk,
						FORMAT((r.kmEnd - r.kmStart) * IF(v.isKmTruckRate, rc.kmHeavy, rc.kmLight), 2),
						FORMAT(IFNULL(r.m3, 0) * IF(v.isKmTruckRate, rc.deliveryM3Cat5, rc.deliveryM3Cat4), 2),
						FORMAT((r.kmEnd - r.kmStart) * rc.kmYearly, 2),
						FORMAT(IFNULL(r.m3, 0) * rc.m3Yearly, 2),
						FORMAT(distributionCat4M3 * IFNULL(r.m3, 0), 2),
						FORMAT(rc.distributionCat5M3 *  IFNULL(r.m3, 0), 2)
					FROM route r
						JOIN vehicle v ON v.id = r.vehicleFk
						JOIN routeConfig rc
					WHERE r.id = vSelf
						AND r.kmStart
						AND r.kmEnd
						AND r.workerFk
						AND r.commissionWorkCenterFk
						AND r.m3;
		END IF;
	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 `route_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 `route_doRecalc`()
proc: BEGIN
/**
 * Recalculates modified route.
 */
	
	DECLARE vDone BOOL;
	DECLARE vRouteFk INT;

	DECLARE cCur CURSOR FOR
		SELECT routeFk FROM routeRecalc;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;
        
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK('vn.route_doRecalc');
		ROLLBACK;
        RESIGNAL;
	END;

	IF !GET_LOCK('vn.route_doRecalc', 0) THEN
		LEAVE proc;
	END IF;

	OPEN cCur;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH cCur INTO vRouteFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		START TRANSACTION;
        CALL route_updateM3(vRouteFk);
        COMMIT;

		DELETE FROM routeRecalc WHERE routeFk = vRouteFk;
	END LOOP;

	CLOSE cCur;
	DO RELEASE_LOCK('vn.route_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 `route_getTickets` */;
/*!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 `route_getTickets`(vRouteFk INT)
BEGIN
/**
 * Pasado un RouteFk devuelve la información
 * de sus tickets.
 *
 * @param vRouteFk
 *
 * @select Información de los tickets
 */

	SELECT 
			t.id AS Id,
			t.clientFk AS Client,
			a.id AS Address,
			a.nickname AS ClientName,
			t.packages AS Packages,
			a.street AS AddressName,
			a.postalCode AS PostalCode,
			a.city AS City,
			sub2.itemPackingTypeFk AS PackingType,
			c.phone AS ClientPhone,
			c.mobile AS ClientMobile,
			a.phone AS AddressPhone,
			a.mobile AS AddressMobile,
			tl.longitude AS Longitude,
			tl.latitude AS Latitude,
			wm.mediaValue AS SalePersonPhone,
			tob.Note AS Note,
			t.isSigned AS Signed,
			st.id AS Polizon
		FROM ticket t
			JOIN client c ON t.clientFk = c.id
			JOIN address a ON t.addressFk = a.id
			LEFT JOIN ticketLocation tl ON tl.ticketFk = t.id
			LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk
			LEFT JOIN 
				(SELECT tob.description AS Note, t.id
					FROM ticketObservation tob
						JOIN ticket t ON tob.ticketFk = t.id
						JOIN observationType ot ON ot.id = tob.observationTypeFk
					WHERE t.routeFk = vRouteFk
						AND ot.code = 'delivery'
				)tob ON tob.id = t.id
			LEFT JOIN stowaway st ON st.shipFk = t.id
			LEFT JOIN 
				(SELECT sub.ticketFk, 
					CONCAT('(', GROUP_CONCAT(DISTINCT sub.itemPackingTypeFk ORDER BY sub.items DESC SEPARATOR ','), ') ') itemPackingTypeFk
					FROM (SELECT s.ticketFk , i.itemPackingTypeFk, COUNT(*) items
						FROM ticket t
						JOIN sale s ON s.ticketFk = t.id
						JOIN item i ON i.id = s.itemFk
						WHERE t.routeFk = vRouteFk
						GROUP BY t.id,i.itemPackingTypeFk)sub
					GROUP BY sub.ticketFk
				) sub2 ON sub2.ticketFk = t.id
		WHERE t.routeFk = vRouteFk
		GROUP BY t.id
		ORDER BY t.priority;
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 `route_updateM3` */;
/*!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 `route_updateM3`(vRoute INT)
BEGIN

	UPDATE vn.route r
			LEFT JOIN (
				SELECT routeFk, SUM(volume) AS m3
					FROM saleVolume
					WHERE routeFk = vRoute
				 ) v ON v.routeFk = r.id
		SET r.m3 = IFNULL(v.m3,0)
        WHERE r.id =vRoute;
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 `rutasAnalyze` */;
/*!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 `rutasAnalyze`(vYear INT, vMonth INT)
BEGIN

/* Analiza los costes de las rutas de reparto y lo almacena en la tabla Rutas_Master
*  
* PAK 15/4/2019
*/

	DELETE FROM bi.rutasBoard
		WHERE year = vYear AND month = vMonth;

   -- Rellenamos la tabla con los datos de las rutas VOLUMETRICAS, especialmente con los bultos "virtuales"
    INSERT INTO bi.rutasBoard(year,
								month,
								warehouse_id,
								Id_Ruta,
								Id_Agencia,
								km,
								Dia,
								Fecha,
								Bultos,
								Matricula,
								Tipo,
                                Terceros)
		SELECT  YEAR(r.created),
				MONTH(r.created),
				GREATEST(1,a.warehouseFk),
				r.id,
				r.agencyModeFk,
				r.kmEnd - r.kmStart,
				DAYNAME(r.created),
				r.created,
				SUM(sv.volume / ebv.m3),
				v.numberPlate,
				IF(ISNULL(`r`.`cost`), 'P', 'A'),
                r.cost
			FROM vn.route r
				JOIN vn.ticket t ON t.routeFk = r.id
                LEFT JOIN vn.zone z ON z.id = t.zoneFk
				LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk
                LEFT JOIN vn.agency a ON a.id = am.agencyFk
                LEFT JOIN vn.vehicle v ON v.id = r.vehicleFk
                JOIN vn.saleVolume sv ON sv.ticketFk = t.id
                JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = 71
			WHERE YEAR(r.created) = vYear AND MONTH(r.created) = vMonth
				AND z.isVolumetric
			GROUP BY r.id;

   -- Rellenamos la tabla con los datos de las rutas NO VOLUMETRICAS, especialmente con los bultos "virtuales"
    INSERT INTO bi.rutasBoard(year,
								month,
								warehouse_id,
								Id_Ruta,
								Id_Agencia,
								km,
								Dia,
								Fecha,
								Bultos,
								Matricula,
								Tipo,
                                Terceros)
		SELECT  YEAR(r.created),
				MONTH(r.created),
				GREATEST(1,a.warehouseFk),
				r.id,
				r.agencyModeFk,
				r.kmEnd - r.kmStart,
				DAYNAME(r.created),
				r.created,
				SUM(t.packages),
				v.numberPlate,
				IF(ISNULL(`r`.`cost`), 'P', 'A'),
                r.cost
			FROM vn.route r
				JOIN vn.ticket t ON t.routeFk = r.id
                LEFT JOIN vn.zone z ON z.id = t.zoneFk
				LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk
                LEFT JOIN vn.agency a ON a.id = am.agencyFk
                LEFT JOIN vn.vehicle v ON v.id = r.vehicleFk
			WHERE YEAR(r.created) = vYear AND MONTH(r.created) = vMonth
				AND z.isVolumetric = FALSE
			GROUP BY r.id
		ON DUPLICATE KEY UPDATE Bultos = Bultos + VALUES(Bultos);
            
   -- Coste REAL de cada bulto "virtual", de acuerdo con el valor apuntado a mano en la ruta
	UPDATE bi.rutasBoard r
			INNER JOIN vn2008.Rutas_Master rm ON rm.año = r.year AND rm.mes = r.month AND rm.warehouse_id = r.warehouse_id
		SET r.coste_bulto = IF(r.Tipo ='A', r.Terceros, r.km * rm.coste_km ) / r.Bultos
		WHERE r.Bultos > 0
			AND rm.año = vYear
			AND rm.mes = vMonth;
                
	-- Coste PRACTICO de cada bulto, de acuerdo con los componentes de tipo AGENCIA en cada linea de venta 
	UPDATE bi.rutasBoard r
		JOIN (
				SELECT t.routeFk, sum(s.quantity * sc.value) practicoTotal
					FROM vn.route r
						JOIN vn.time tm ON tm.dated = r.created
						JOIN vn.ticket t ON t.routeFk = r.id
						JOIN vn.sale s ON s.ticketFk = t.id
						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 ct.type = 'agencia'
						AND tm.year = vYear 
						AND tm.month = vMonth
					GROUP BY r.id
			 ) sub ON sub.routeFk = r.Id_Ruta
		SET r.practico = sub.practicoTotal / r.Bultos;
        
	-- Coste TEORICO de una caja "virtual" para cada ruta, teniendo en cuenta que hay carros, pallets, etc
	UPDATE bi.rutasBoard r
		JOIN (
			SELECT t.routeFk, 
					SUM(t.zonePrice/ ebv.ratio)/ count(*) AS BultoTeoricoMedio
				FROM vn.ticket t
					JOIN vn.route r ON r.id = t.routeFk
					JOIN vn.time tm ON tm.dated = r.created
					JOIN vn.expedition e ON e.ticketFk = t.id
					JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.isBox
					JOIN vn.address ad ON ad.id = t.addressFk
					JOIN vn.client c ON c.id = ad.clientFk
                    LEFT JOIN vn.zone z ON z.id = t.zoneFk
				WHERE tm.year = vYear 
					AND tm.month = vMonth
                    AND z.isVolumetric = FALSE
				GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
		SET r.teorico = sub.BultoTeoricoMedio;

 	-- Coste VOLUMETRICO TEORICO de una caja "virtual" para cada ruta
	UPDATE bi.rutasBoard r
		JOIN (
			SELECT  t.routeFk, 
					SUM(freight) AS BultoTeoricoMedio
				FROM vn.ticket t
					JOIN vn.route r ON r.id = t.routeFk
					JOIN vn.time tm ON tm.dated = r.created
					JOIN vn.saleVolume sf ON sf.ticketFk = t.id
					JOIN vn.client c ON c.id = t.clientFk
					JOIN vn.zone z ON z.id = t.zoneFk
				WHERE tm.year = vYear 
					AND tm.month = vMonth
                    AND z.isVolumetric != FALSE
				GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
		SET r.teorico = sub.BultoTeoricoMedio / r.Bultos;

   -- La diferencia entre el teorico y el practico se deberia de cobrar en greuges, cada noche
   UPDATE bi.rutasBoard r
		JOIN (
			SELECT  t.routeFk, 
					Sum(g.amount) AS greuge
				FROM vn.ticket t
					JOIN vn.route r ON r.id = t.routeFk
					JOIN vn.time tm ON tm.dated = r.created
					JOIN vn.greuge g ON g.ticketFk = t.id
                    JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk
				WHERE tm.year = vYear 
					AND tm.month = vMonth
                    AND gt.name = 'Diferencia portes'
				GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
		SET r.greuge = sub.greuge / r.Bultos;
 
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 `saleBuy_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 `saleBuy_Add`(vSaleFk INT, vBuyFk INT)
BEGIN
	
	/* Añade un registro a la tabla saleBuy en el caso de que sea posible mantener la trazabilidad
	 * 
	 * @param vSaleFk clave primaria de vn.sale
	 * @param vBuyFk clave primaria de vn.buy
	 */
	/*IF (SELECT COUNT(*) 
			FROM vn.sale s
				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 
			WHERE s.id = vSaleFk
				AND ic.code = 'fruit') THEN */
	
	IF (SELECT COUNT(*) FROM vn.buy WHERE id = vBuyFk AND itemOriginalFk) THEN 
	
		INSERT INTO vn.saleBuy (saleFk, buyFk)
			VALUES(vSaleFk, vBuyFk);
		
	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 `saleGroup_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 `saleGroup_add`(vSectorFk INT)
BEGIN
/**
 * Añade un nuevo registro a la tabla y devuelve su id.
 *
 * @param vSectorFk Identificador de vn.sector
 */
	INSERT INTO vn.saleGroup(userFk, sectorFk) 
		VALUES (account.myUser_getId(), vSectorFk);

	SELECT LAST_INSERT_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 `saleGroup_setParking` */;
/*!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 `saleGroup_setParking`(IN `vSaleGroupFk` VARCHAR(8), IN `vParkingFk` INT)
proc: BEGIN
/**
 * Aparca una preparación previa en un parking
 *
 * @param vSaleGroupFk id de la preparación previa
 * @param vParkingFk id del parking
 */
	UPDATE vn.saleGroup sg
		SET sg.parkingFk = vParkingFk
			WHERE sg.id = vSaleGroupFk
				AND sg.created >= TIMESTAMPADD(WEEK,-1,CURDATE());

	CALL vn.ticket_setNextState(vn.ticket_get(vSaleGroupFk));
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 `saleMistake_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 `saleMistake_Add`(vSaleFk INT, vUserFk INT, vTypeFk INT)
BEGIN

	INSERT INTO vn.saleMistake(saleFk, userFk, typeFk)
		VALUES(vSaleFk, vUserFk, vTypeFk);

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 `saleMove` */;
/*!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 `saleMove`(IN vSaleFk BIGINT, IN vQuantity BIGINT)
BEGIN

	DECLARE vShipped DATE;
	DECLARE vWarehouseFk INT;
	DECLARE vAddressFk INT;
	DECLARE vAgencyModeFk INT;
	DECLARE vNewTicket BIGINT;
	DECLARE vNewSale BIGINT;
	DECLARE vLanded DATE;
	DECLARE vShippedDayEnd DATETIME;
	DECLARE vTicketOriginalFk INT;
	DECLARE hasAlreadyItem BOOLEAN;
	DECLARE vItemFk INT;
    DECLARE vClientTypeFk VARCHAR(20);

	SELECT t.shipped, t.warehouseFk, t.addressFk, agencyModeFk, landed, t.id, s.itemfk, c.typeFk
			INTO vShipped, vWarehouseFk, vAddressFk, vAgencyModeFk, vLanded, vTicketOriginalFk, vItemFk, vClientTypeFk
		FROM ticket t
			JOIN sale s ON s.ticketFk = t.id
			JOIN `client` c ON t.clientFk = c.id
		WHERE s.id = vSaleFk;

	SET vShippedDayEnd = util.dayEnd(vShipped);

	IF vClientTypeFk <> 'handMaking' THEN
		SELECT t.id INTO vNewTicket
			FROM ticket t 
				JOIN ticketState ts ON ts.ticketFk = t.id
			WHERE t.addressFk = vAddressFk
				AND t.warehouseFk = vWarehouseFk 
				AND t.agencyModeFk = vAgencyModeFk
				AND t.landed <=> vLanded
				AND t.shipped BETWEEN vShipped AND vShippedDayEnd 
				AND t.refFk IS NULL
				AND t.id <> vTicketOriginalFk
				AND IFNULL(ts.alertLevel,0) = 0
			LIMIT 1; 
	END IF;
    
	IF vNewTicket IS NULL THEN
		CALL vn.ticket_Clone(vTicketOriginalFk, vNewTicket);
	END IF;

	INSERT INTO ticketTracking(ticketFk, workerFk, stateFk)
		SELECT vNewTicket, account.myUser_getId(), s.id
			FROM state s
			WHERE s.code = 'FIXING';
  
	SELECT COUNT(id) INTO hasAlreadyItem
			FROM sale s
			WHERE s.ticketFk = vNewTicket AND s.itemFk = vItemFk;
 
	IF hasAlreadyItem = FALSE THEN
	 
		INSERT INTO sale(ticketFk, itemFk, concept, quantity, price, discount) 
			SELECT vNewTicket, itemFk, concept, vQuantity, price, discount
				FROM sale s
				WHERE s.id = vSaleFk;
		 
		SELECT LAST_INSERT_ID() INTO vNewSale;
		 
		INSERT INTO saleComponent(saleFk, componentFk, `value`)
			SELECT vNewSale, componentFk, `value`
				FROM saleComponent 
				WHERE saleFk = vSaleFk;
			
	ELSE

		UPDATE sale  
			SET quantity = quantity + vQuantity
			WHERE ticketFk = vNewTicket AND itemFk = vItemFk;

	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 `salePreparingList` */;
/*!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 `salePreparingList`(IN ticketFk BIGINT)
BEGIN

	CALL cache.last_buy_refresh(FALSE);

	SELECT t.clientFk, 
			t.shipped, 
			a.nickname, 
			s.ticketFk,
			s.itemFk, 
			s.quantity, 
			s.concept, 
			s.reserved,
			s.id saleFk,
			i.size,
			i.inkFk,
			i.stems,
			i.image,
			i.subName,
			b.`grouping`,
			IF(stPrevious.saleFk,TRUE,FALSE) as isPreviousSelected,
			stPrevious.isChecked as isPrevious,
			stPrepared.isChecked as isPrepared,
			stControled.isChecked as isControled,
			ib.code as barcode
		FROM vn.ticket t
			JOIN vn.address a ON a.id = t.addressFk
			JOIN vn.sale s ON s.ticketFk = t.id
			JOIN vn.item i ON i.id = s.itemFk
			LEFT JOIN cache.last_buy  lb ON lb.item_id = i.id AND lb.warehouse_id = t.warehouseFk
			LEFT JOIN vn.buy b ON b.id = lb.buy_id
			LEFT JOIN vn.saleTracking stPrevious ON stPrevious.saleFk = s.id AND stPrevious.stateFk = 26
			LEFT JOIN vn.saleTracking stPrepared ON stPrepared.saleFk = s.id AND stPrepared.stateFk = 14
			LEFT JOIN vn.saleTracking stControled ON stControled.saleFk = s.id AND stControled.stateFk = 8
			LEFT JOIN vn.itemBarcode ib ON ib.itemFk = i.id
		WHERE t.id = ticketFk 
		GROUP BY s.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 `salesMerge` */;
/*!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 `salesMerge`(vTicketFk INT)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.salesToPreserve;
    
    CREATE TEMPORARY TABLE tmp.salesToPreserve
		SELECT id, itemFk, sum(quantity) as newQuantity
			FROM vn.sale s
			WHERE s.ticketFk = vTicketFk
				AND s.itemFk NOT IN (95,98,100)
			GROUP by itemFk, price, discount;
            
	UPDATE vn.sale s 
		JOIN  tmp.salesToPreserve stp ON stp.id = s.id
		SET quantity = newQuantity
		WHERE s.ticketFk = vTicketFk;
        
	DELETE s.*
		FROM vn.sale s
		LEFT JOIN tmp.salesToPreserve stp ON stp.id = s.id
		WHERE s.ticketFk = vTicketFk
			AND stp.id IS NULL
            AND s.itemFk NOT IN (95,98,100);
            
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 `salesMerge_byCollection` */;
/*!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 `salesMerge_byCollection`(vCollectionFk INT)
BEGIN

	DECLARE vDone BOOL;
	-- Fetch variables
	DECLARE vTicketFk INT;

	DECLARE cCur CURSOR FOR
		SELECT ticketFk
			FROM vn.ticketCollection
		WHERE collectionFk = vCollectionFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	OPEN cCur;

	myLoop: LOOP
    
		SET vDone = FALSE;
        
		FETCH cCur INTO vTicketFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;
		
		CALL vn.salesMerge(vTicketFk);
        
	END LOOP;

	CLOSE cCur;


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 `saleSplit` */;
/*!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 `saleSplit`(vSaleFk INT, vQuantity INT)
BEGIN

	
    DECLARE vNewSaleFk INT;
        
    INSERT INTO vn.sale(itemFk, 
						concept, 
                        price, 
                        discount, 
                        quantity, 
                        ticketFk, 
                        isPriceFixed)
		SELECT 	s.itemFk, 
				i.longName, 
                s.price, 
                s.discount, 
                vQuantity,
                s.ticketFk, 
                s.isPriceFixed 
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk
				WHERE s.id = vSaleFk;
                
	UPDATE vn.sale s
		JOIN vn.item i ON i.id = s.itemFk
		SET s.quantity = s.quantity - vQuantity, s.concept = i.longName
        WHERE s.id = vSaleFk;
 
	SELECT LAST_INSERT_ID() INTO vNewSaleFk;
             
	INSERT INTO vn.saleComponent(	saleFk, 
									componentFk, 
                                    value)
	SELECT 	vNewSaleFk, 
			componentFk, 
			value
		FROM vn.saleComponent 
		WHERE saleFk = vSaleFk;

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 `saleTracking_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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `saleTracking_add`(vSaleGroupFk INT)
BEGIN
	
	/* Inserta en vn.saleTracking las lineas de una previa
	 * 
	 * @param vSaleGroupFk Identificador de vn.saleGroup
	 */
	
	REPLACE vn.saleTracking(saleFk, 
							isChecked, 
                            workerFk, 
                            actionFk, 
                            stateFk) 
		SELECT 	sgd.saleFk ,
				TRUE,
				account.myUser_getId(),
				a.accion_id,
				s.id
			FROM vn.saleGroupDetail sgd
				JOIN vncontrol.accion a ON a.accion = 'SACAR'
				JOIN vn.state s ON s.code = 'ON_PREPARATION'
			WHERE sgd.saleGroupFk = vSaleGroupFk;
		
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 `saleTracking_addPreparedSaleGroup` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `saleTracking_addPreparedSaleGroup`(vSaleGroupFk INT)
BEGIN
	
	/**
	 * Inserta lineas de vn.saleTracking para un saleGroup (previa) que escanea un sacador
	 * 
	 * @param vSaleGroupFk Identificador de vn.saleGroup
	 */
	
	REPLACE vn.saleTracking(saleFk, isChecked, workerFk, actionFk, stateFk)
		SELECT sgd.saleFk, TRUE, account.myUser_getId(), a.accion_id id, s.id
			FROM vn.saleGroupDetail sgd
				JOIN vncontrol.accion a ON a.accion = 'SACAR'
				JOIN vn.state s ON s.code = 'PREPARED'
			WHERE sgd.saleGroupFk = vSaleGroupFk;
		
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 `saleTracking_addPrevOK` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `saleTracking_addPrevOK`(vSectorCollectionFk INT)
BEGIN
	
	/**
	 * Inserta los registros de la colección de sector con el estado PREVIA OK
	 * 
	 * @param vSectorCollectionFk Identificador de vn.sectorCollection
	 */
	
	REPLACE vn.saleTracking(saleFk,
							isChecked,
							workerFk,
							actionFk,
							stateFk)
		SELECT 	sgd.saleFk,
				TRUE,
				sc.userFk,
				a.accion_id,
				s.id
			FROM vn.sectorCollection sc 
				JOIN vn.sectorCollectionSaleGroup scsg ON scsg.sectorCollectionFk = sc.id
				JOIN vn.saleGroupDetail sgd ON sgd.saleGroupFk = scsg.saleGroupFk 
				JOIN vn.state s ON s.code = 'OK PREVIOUS'
				JOIN vncontrol.accion a ON a.accion = 'PRESACAR'
			WHERE sc.id = vSectorCollectionFk;
		
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 `saleTracking_del` */;
/*!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 `saleTracking_del`(vSaleFk INT, vState VARCHAR(50))
BEGIN

	DELETE FROM itemShelvingSale
		WHERE saleFk = vSaleFk;

	DELETE st.*
		FROM vn.saleTracking st
			JOIN vn.state s ON s.id = st.stateFk
		WHERE st.saleFk = vSaleFk 
			AND s.code = vState COLLATE utf8_unicode_ci;
	
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 `saleTracking_new` */;
/*!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 `saleTracking_new`(	vSaleFK INT, 
										vIsChecked BOOLEAN, 
                                        vOriginalQuantity INT, 
                                        vWorkerFk INT, 
                                        vAction VARCHAR(50), 
                                        vState VARCHAR(50))
BEGIN

	REPLACE vn.saleTracking(saleFk, 
								isChecked, 
                                originalQuantity, 
                                workerFk, 
                                actionFk, 
                                stateFk) 
		SELECT 	vSaleFk,
				vIsChecked,
                vOriginalQuantity,
                IFNULL(vWorkerFk, vn.getUser()),
                a.accion_id,
                s.id
			FROM vncontrol.accion a
				JOIN vn.state s
			WHERE s.code = vState COLLATE utf8_unicode_ci
				AND a.accion = vAction COLLATE utf8_unicode_ci;

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 `saleTracking_Replace` */;
/*!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 `saleTracking_Replace`(vSaleFk INT, vIsChecked INT, vOriginalQuantity INT, vStateFk INT)
BEGIN
    REPLACE  vn.saleTracking(saleFk, isChecked, originalQuantity, stateFk) 
		VALUES(vSaleFk, vIsChecked, vOriginalQuantity, vStateFk);
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 `saleTracking_updateIsChecked` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `saleTracking_updateIsChecked`(vSaleFk INT, vIsChecked BOOL)
BEGIN
	
	/**
	 * Actualiza el estado del campo vn.saleTracking.isChecked y elimina las lineas de vn.itemShelving
	 * si procede, en el caso de las preparaciones previas, por usuario
	 * 
	 * @param vSaleFk Identificador de vn.sale
	 * @param vIsChecked Estado del registro
	 */
	
	UPDATE vn.saleTracking st
		JOIN vn.state s ON s.id = st.stateFk  AND s.code = 'PREVIOUS_PREPARATION'
		SET st.isChecked = vIsChecked
		WHERE st.saleFk = vSaleFk
			AND st.workerFk = account.myUser_getId();
	
	IF vIsChecked = FALSE THEN
	
		DELETE FROM vn.itemShelvingSale 
			WHERE saleFk = vSaleFk;
	
	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 `sale_calculateComponent` */;
/*!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 `sale_calculateComponent`(vSale INT, vOption INT)
proc: BEGIN
/**
 * Crea tabla temporal para vn.sale_recalcComponent() para recalcular los componentes
 *
 * @param vSale Id de la venta
 * @param vOption indica en que componente pone el descuadre, NULL en casos habituales
 */  
	DROP TEMPORARY TABLE IF EXISTS tmp.recalculateSales;
    CREATE TEMPORARY TABLE tmp.recalculateSales
        SELECT s.id
            FROM sale s
            WHERE s.id = vSale;
           
    CALL vn.sale_recalcComponent(vOption);
   
    DROP TEMPORARY TABLE tmp.recalculateSales;
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 `sale_checkNoComponents` */;
/*!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 `sale_checkNoComponents`(vCreatedFrom DATETIME, vCreatedTo DATETIME)
BEGIN
/**
 * Comprueba que las ventas creadas entre un rango de fechas tienen componentes
 *
 * @param vCreatedFrom inicio del rango
 * @param vCreatedTo fin del rango
 */
	DECLARE v_done BOOL DEFAULT FALSE;
	DECLARE vSaleFk INTEGER;
	DECLARE vTicketFk INTEGER;
	DECLARE vConcept VARCHAR(50);
	DECLARE vCur CURSOR FOR
		SELECT s.id
			FROM sale s
				JOIN ticket t ON t.id = s.ticketFk
				JOIN item i ON i.id = s.itemFk
				JOIN itemType tp ON tp.id = i.typeFk
				JOIN itemCategory ic ON ic.id = tp.categoryFk
				LEFT JOIN tmp.coste c ON c.id = s.id
			WHERE s.created >= vCreatedFrom AND s.created <= vCreatedTo
				AND c.id IS NULL
				AND t.agencyModeFk IS NOT NULL
                AND t.isDeleted IS FALSE
                 AND t.warehouseFk = 60
				AND ic.merchandise != FALSE
			GROUP BY s.id;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET v_done = TRUE; 

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;
	CREATE TEMPORARY TABLE tmp.coste
		(PRIMARY KEY (id)) ENGINE = MEMORY
		SELECT s.id
		FROM sale s 
			JOIN item i ON i.id = s.itemFk
			JOIN itemType tp ON tp.id = i.typeFk
			JOIN itemCategory ic ON ic.id = tp.categoryFk
			JOIN saleComponent sc ON sc.saleFk = s.id
			JOIN component c ON c.id = sc.componentFk
			JOIN componentType ct ON ct.id = c.typeFk AND ct.id = 6
		WHERE s.created >= vCreatedFrom
			AND ic.merchandise != FALSE;

	OPEN vCur;

	l: LOOP
		SET v_done = FALSE;
		FETCH vCur INTO vSaleFk;

		IF v_done THEN
			LEAVE l;
		END IF;
		
		SELECT ticketFk, concept
			INTO vTicketFk, vConcept
			FROM sale
			WHERE id = vSaleFk;
		
		CALL util.debugAdd(vTicketFk, vConcept);
		CALL sale_calculateComponent(vSaleFk, 1);
	END LOOP;

	CLOSE vCur;
	DROP TEMPORARY TABLE tmp.coste;	
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 `sale_getFromTicketOrCollection` */;
/*!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 `sale_getFromTicketOrCollection`(vParam INT)
BEGIN
/**
 * Visualizar lineas de la tabla sale a través del parámetro vParam que puede
 * ser ticket o collection.
 *
 * @param vParam Identificador de ticket o collection
 */
	DECLARE vIsCollection BOOL;

	SELECT COUNT(*) INTO vIsCollection
		FROM collection c
		WHERE c.id = vParam;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket2;

	IF vIsCollection THEN
		CREATE TEMPORARY TABLE tmp.ticket
			(INDEX (id))
			ENGINE = MEMORY
			SELECT tc.ticketFk id
				FROM ticketCollection tc
					JOIN ticket t ON t.id = tc.ticketFk
				WHERE tc.collectionFk = vParam;

		CREATE TEMPORARY TABLE tmp.ticket2
			(INDEX (id))
			ENGINE = MEMORY
			SELECT tc.ticketFk id
				FROM ticketCollection tc
					JOIN ticket t ON t.id = tc.ticketFk
				WHERE tc.collectionFk = vParam;
	ELSE
		CREATE TEMPORARY TABLE tmp.ticket
			(INDEX (id))
			ENGINE = MEMORY
			SELECT vParam id;

		CREATE TEMPORARY TABLE tmp.ticket2
			(INDEX (id))
			ENGINE = MEMORY
			SELECT vParam id;
	END IF;

	SELECT s.ticketFk,
			sgd.saleGroupFk,
			s.id as saleFk,
			s.itemFk,
			s.quantity,
			i.longName,
			i.size,
			s.reserved,
			MAX(IF(st.semaphore <=> 1, TRUE, FALSE)) as isPreviousPrepared,
			MAX(IF(st.semaphore <=> 2, TRUE, FALSE)) as isPrepared,
			MAX(IF(st.semaphore <=> 3, TRUE, FALSE)) as isControlled,
			MAX(IF(st.semaphore <=> 4, TRUE, FALSE)) as isPreControlled,
			ic.color,
			ip.productor,
			s.discount,
			s.price,
			i.stems,
			i.category,
			o.code origin,
			tt.clientFk,
			s.originalQuantity,
			TRIM(CONCAT(LPAD(s.concept,30,' '), ' ',
						RPAD(IFNULL(i.size,''),5,' '))) line1,
			'' cel1,
			TRIM(CONCAT(LPAD(IFNULL(ip.productor,''),30,' '), ' ',LPAD(IFNULL(o.code,''),4,' '))) line2, 
			IF(s.quantity MOD IFNULL(b.packing,s.quantity + 1),
				CONCAT(CAST(s.quantity/IFNULL(b.`grouping`,1) AS DECIMAL(10,0)),' x ',IFNULL(b.`grouping`,1)),
				CONCAT(CAST(s.quantity / IFNULL(b.packing,1) AS DECIMAL(10,0)),' pack de ',IFNULL(b.packing,1))) cel2,
			TRIM(CONCAT(ic.color)) line3,
			p.code cel3,
			s.isAdded,
			sub2.originalQuantity as startQuantity, -- eliminar cuando tengamos la nueva apk
			IFNULL(c.workerFk,getUser()) as workerFk,
			IFNULL(SUM(iss.quantity),0) as pickedQuantity,
			i.packingShelve,
			MIN(iss.created) picked 
		FROM tmp.ticket t
			JOIN sale s ON s.ticketFk = t.id
			JOIN ticket tt ON tt.id = t.id
			LEFT JOIN cache.last_buy lb ON lb.item_id = s.itemFk AND lb.warehouse_id = tt.warehouseFk
			LEFT JOIN buy b ON b.id = lb.buy_id 
			JOIN item i ON i.id = s.itemFk
			LEFT JOIN ticketCollection tc ON tc.ticketFk = t.id
			LEFT JOIN collection c ON c.id = tc.collectionFk
			LEFT JOIN (SELECT sub.saleFk, sub.isChecked, sub.stateFk, sub.originalQuantity 
							FROM (SELECT DISTINCT st.id, st.saleFk, st.isChecked, st.stateFk, st.originalQuantity 
										FROM tmp.ticket2 t
											JOIN sale s ON s.ticketFk = t.id
											JOIN saleTracking st ON st.saleFk = s.id
										ORDER BY st.id DESC
										LIMIT 10000000000000000000) sub
							GROUP BY sub.saleFk, sub.stateFK) sub2 ON sub2.saleFk = s.id AND sub2.isChecked = 1
			LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
			LEFT JOIN state st ON st.id = sub2.stateFk
			LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
			LEFT JOIN itemProductor ip ON ip.itemFk = s.itemFk
			LEFT JOIN origin o ON o.id = i.originFk
			LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = s.id 
			LEFT JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
			LEFT JOIN parking p ON p.id = sg.parkingFk 
		GROUP BY s.id;

	DROP TEMPORARY TABLE
		tmp.ticket,
		tmp.ticket2;
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 `sale_getProblems` */;
/*!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 `sale_getProblems`(IN vIsTodayRelative tinyint(1))
BEGIN
/**
 * Calcula los problemas de cada venta para un conjunto de tickets.
 *
 * @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
 * @table tmp.sale_getProblems(ticketFk, clientFk, warehouseFk, shipped) Identificadores de los tickets a calcular
 * @return tmp.sale_problems
 */
	DECLARE vWarehouseFk INT;
	DECLARE vDate DATE;
	DECLARE vAvailableCache INT;
	DECLARE vVisibleCache INT;
	DECLARE vDone INT DEFAULT 0;
	DECLARE vComponentCount INT;

	DECLARE vCursor CURSOR FOR
		SELECT DISTINCT tt.warehouseFk, IF(vIsTodayRelative, CURDATE(), date(tt.shipped))
			FROM tmp.sale_getProblems tt
			WHERE DATE(tt.shipped) BETWEEN CURDATE()
				AND TIMESTAMPADD(DAY, IF(vIsTodayRelative, 9.9, 1.9), CURDATE());

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1;

	DELETE tt.*
		FROM tmp.sale_getProblems tt
			JOIN vn.ticketObservation tto ON tto.ticketFk = tt.ticketFk
			JOIN vn.observationType ot ON ot.id = tto.observationTypeFk 
				WHERE ot.code = 'administrative' 
				AND tto.description = 'Miriam';
	
	DROP TEMPORARY TABLE IF EXISTS tmp.sale_problems;
	CREATE TEMPORARY TABLE tmp.sale_problems (
		ticketFk INT(11),
		saleFk INT(11),
		isFreezed INTEGER(1) DEFAULT 0,
		risk DECIMAL(10,2) DEFAULT 0,
		hasHighRisk TINYINT(1) DEFAULT 0,
		hasTicketRequest INTEGER(1) DEFAULT 0,
		isAvailable INTEGER(1) DEFAULT 1,
		itemShortage VARCHAR(255),
		isTaxDataChecked  INTEGER(1) DEFAULT 1,
		itemDelay VARCHAR(255),
		itemLost VARCHAR(255),
		hasComponentLack INTEGER(1),
		isTooLittle BOOL DEFAULT FALSE,
		PRIMARY KEY (ticketFk, saleFk)
	) ENGINE = MEMORY;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list;
		CREATE TEMPORARY TABLE tmp.ticket_list
		(PRIMARY KEY (ticketFk))
		ENGINE = MEMORY
			SELECT tp.ticketFk, tp.clientFk
				FROM tmp.sale_getProblems tp;

	SELECT COUNT(*) INTO vComponentCount
		FROM vn.component c
		WHERE c.isRequired;

	-- Too Little
	INSERT INTO tmp.sale_problems(ticketFk, isTooLittle)
		SELECT tp.ticketFk, TRUE 
			FROM tmp.sale_getProblems tp
				JOIN vn.ticket t ON t.id = tp.ticketFk
				JOIN (SELECT t.addressFk, SUM(sv.litros) litros, t.totalWithoutVat
						FROM tmp.ticket_list tl
							JOIN vn.saleVolume sv ON sv.ticketFk = tl.ticketFk
							JOIN vn.ticket t ON t.id = tl.ticketFk
							JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk AND zc.dated = CURDATE()
							JOIN vn.agencyMode am ON am.id = t.agencyModeFk
							JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
						WHERE NOW() < TIMESTAMPADD(MINUTE,MINUTE(zc.`hour`) ,TIMESTAMPADD(HOUR,HOUR(zc.`hour`),CURDATE()))
							AND dm.code IN('AGENCY','DELIVERY','PICKUP')
							AND t.shipped BETWEEN CURDATE() AND util.midnight()
						GROUP BY t.addressFk) sub ON sub.addressFk = t.addressFk
				JOIN vn.volumeConfig vc
			WHERE sub.litros < vc.minTicketVolume
					AND sub.totalWithoutVat < vc.minTicketValue;

	-- Faltan componentes
	INSERT INTO tmp.sale_problems(ticketFk, hasComponentLack, saleFk)
		SELECT tl.ticketFk, (COUNT(DISTINCT s.id) * vComponentCount > COUNT(c.id)), s.id 
			FROM tmp.ticket_list tl
				JOIN vn.sale s ON s.ticketFk = tl.ticketFk
				LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id 
				LEFT JOIN vn.component c ON c.id = sc.componentFk AND c.isRequired 
				JOIN vn.ticket t ON t.id = tl.ticketFk
				JOIN vn.agencyMode am ON am.id = t.agencyModeFk
				JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
				WHERE dm.code IN('AGENCY','DELIVERY','PICKUP')
			GROUP BY tl.ticketFk, s.id;

	-- Cliente congelado
	INSERT INTO tmp.sale_problems(ticketFk, isFreezed)
		SELECT DISTINCT tl.ticketFk, TRUE
			FROM tmp.ticket_list tl
				JOIN vn.client c ON c.id = tl.clientFk
			WHERE c.isFreezed
			ON DUPLICATE KEY UPDATE	isFreezed = c.isFreezed;

	-- Cr�dito excedido
	DROP TEMPORARY TABLE IF EXISTS tmp.clientGetDebt;
	CREATE TEMPORARY TABLE tmp.clientGetDebt
		(PRIMARY KEY (clientFk))
		ENGINE = MEMORY
			SELECT DISTINCT clientFk
				FROM tmp.ticket_list;

	CALL clientGetDebt(CURDATE());

	INSERT INTO tmp.sale_problems(ticketFk, risk, hasHighRisk)
		SELECT DISTINCT tl.ticketFk, r.risk, ((r.risk - cc.riskTolerance) > c.credit + 10)
			FROM tmp.ticket_list tl
				JOIN vn.ticket t ON t.id = tl.ticketFk
				JOIN vn.agencyMode a ON t.agencyModeFk = a.id
				JOIN tmp.risk r ON r.clientFk = t.clientFk
				JOIN vn.client c ON c.id = t.clientFk
				JOIN vn.clientConfig cc
			WHERE r.risk > c.credit + 10
				AND a.isRiskFree = FALSE
		ON DUPLICATE KEY UPDATE
			risk = r.risk, hasHighRisk = ((r.risk - cc.riskTolerance) > c.credit + 10);

	-- Antiguo COD 100, son peticiones de compra sin terminar
	INSERT INTO tmp.sale_problems(ticketFk, hasTicketRequest)
		SELECT DISTINCT tl.ticketFk, TRUE
			FROM tmp.ticket_list tl
				JOIN vn.ticketRequest tr ON tr.ticketFk = tl.ticketFk
			WHERE tr.isOK IS NULL
		ON DUPLICATE KEY UPDATE hasTicketRequest = TRUE;

	-- Disponible, Faltas, Inventario y Retrasos
	OPEN vCursor;

	WHILE NOT vDone	DO

		FETCH vCursor INTO vWarehouseFk, vDate;

		-- Disponible: no va a haber suficiente producto para preparar todos los pedidos
		CALL cache.available_refresh(vAvailableCache, FALSE, vWarehouseFk, vDate);
	
		INSERT INTO tmp.sale_problems(ticketFk, isAvailable, saleFk)
			SELECT tl.ticketFk, FALSE, s.id
				FROM tmp.ticket_list tl
					JOIN vn.ticket t ON t.id = tl.ticketFk
					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 
					LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache
			WHERE date(t.shipped) = vDate
					AND ic.merchandise = TRUE
					AND IFNULL(av.available, 0) < 0
					AND s.isPicked = FALSE
					AND NOT i.generic
					AND vWarehouseFk = t.warehouseFk
				GROUP BY tl.ticketFk
			ON DUPLICATE KEY UPDATE isAvailable = FALSE, saleFk = VALUES(saleFk);

		-- Faltas: visible, disponible y ubicado son menores que la cantidad vendida	
		CALL cache.visible_refresh(vVisibleCache, FALSE, vWarehouseFk);

		INSERT INTO tmp.sale_problems(ticketFk, itemShortage, saleFk)
			SELECT ticketFk, problem, saleFk
				FROM (
					SELECT 	tl.ticketFk, 
							LEFT(CONCAT('F: ',GROUP_CONCAT(i.id, ' ', i.longName, ' ')),250) problem, 
							s.id AS saleFk
						FROM tmp.ticket_list tl
							JOIN vn.ticket t ON t.id = tl.ticketFk
							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 
							LEFT JOIN cache.visible v ON v.item_id = i.id AND v.calc_id = vVisibleCache
							LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache
							LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
						WHERE IFNULL(v.visible,0) < s.quantity
							AND IFNULL(av.available ,0) < s.quantity
							AND IFNULL(issw.visible, 0) < s.quantity
							AND s.isPicked = FALSE
							AND s.reserved = FALSE
							AND ic.merchandise = TRUE
							AND IF(vIsTodayRelative, TRUE, date(t.shipped) = vDate)
							AND NOT i.generic
							AND CURDATE() = vDate
							AND t.warehouseFk = vWarehouseFk
					GROUP BY tl.ticketFk) sub
					ON DUPLICATE KEY UPDATE itemShortage = sub.problem, saleFk = sub.saleFk;
		
		-- Inventario: Visible suficiente, pero ubicado menor a la cantidad vendida
		INSERT INTO tmp.sale_problems(ticketFk, itemLost, saleFk)
			SELECT ticketFk, problem, saleFk
				FROM (
					SELECT tl.ticketFk, LEFT(GROUP_CONCAT('I: ',i.id, ' ', i.longName, ' '),250) problem, s.id AS saleFk
						FROM tmp.ticket_list tl
							JOIN vn.ticket t ON t.id = tl.ticketFk
							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
							LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCache
							LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
						WHERE IFNULL(v.visible,0) >= s.quantity
							AND IFNULL(issw.visible, 0) < s.quantity
							AND s.quantity > 0
							AND s.isPicked = FALSE
							AND s.reserved = FALSE
							AND ic.merchandise = TRUE
							AND IF(vIsTodayRelative, TRUE, date(t.shipped) = vDate)
							AND NOT i.generic
							AND CURDATE() = vDate
							AND t.warehouseFk = vWarehouseFk
						GROUP BY tl.ticketFk) sub
			ON DUPLICATE KEY UPDATE itemDelay = sub.problem, saleFk = sub.saleFk;
		
		-- Retraso: Disponible suficiente, pero no visible ni ubicado
		INSERT INTO tmp.sale_problems(ticketFk, itemDelay, saleFk)
			SELECT ticketFk, problem, saleFk
				FROM (
					SELECT tl.ticketFk, LEFT(GROUP_CONCAT('R: ',i.id, ' ', i.longName, ' '),250) problem, s.id AS saleFk
						FROM tmp.ticket_list tl
							JOIN vn.ticket t ON t.id = tl.ticketFk
							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
							LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCache
							LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache
							LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
						WHERE IFNULL(v.visible,0) < s.quantity
							AND IFNULL(av.available ,0) >= s.quantity
							AND IFNULL(issw.visible, 0) < s.quantity
							AND s.quantity > 0
							AND s.isPicked = FALSE
							AND s.reserved = FALSE
							AND ic.merchandise = TRUE
							AND IF(vIsTodayRelative, TRUE, date(t.shipped) = vDate)
							AND NOT i.generic
							AND CURDATE() = vDate
							AND t.warehouseFk = vWarehouseFk
						GROUP BY tl.ticketFk) sub
			ON DUPLICATE KEY UPDATE itemDelay = sub.problem, saleFk = sub.saleFk;
	END WHILE;

	CLOSE vCursor;
	
	INSERT INTO tmp.sale_problems(ticketFk, isTaxDataChecked)
		SELECT DISTINCT tl.ticketFk, FALSE
			FROM tmp.ticket_list tl
				JOIN vn.client c ON c.id = tl.clientFk
			WHERE c.isTaxDataChecked = FALSE
		ON DUPLICATE KEY UPDATE isTaxDataChecked = FALSE;

	DROP TEMPORARY TABLE
		tmp.clientGetDebt,
		tmp.ticket_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 `sale_getProblemsByTicket` */;
/*!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 `sale_getProblemsByTicket`(IN vTicketFk INT, IN vIsTodayRelative TINYINT(1))
BEGIN
/**
 * Calcula los problemas de cada venta 
 * para un conjunto de tickets.
 *
 * @return Problems result
 */
    DROP TEMPORARY TABLE IF EXISTS tmp.sale_getProblems;
    CREATE TEMPORARY TABLE tmp.sale_getProblems 
    (INDEX (ticketFk))
    ENGINE = MEMORY
    SELECT t.id ticketFk, t.clientFk, t.warehouseFk, t.shipped 
        FROM ticket t
        WHERE t.id = vTicketFk;

    CALL sale_getProblems(vIsTodayRelative);

    SELECT * FROM tmp.sale_problems;

    DROP TEMPORARY TABLE
        tmp.sale_getProblems,
        tmp.sale_problems;
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 `sale_PriceFix` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sale_PriceFix`(vTicketFk INT)
BEGIN
	
	DELETE sc.*
		FROM vn.saleComponent sc
			JOIN vn.sale s ON s.id = sc.saleFk
			JOIN vn.component c ON c.id = sc.componentFk
			JOIN vn.componentType ct ON ct.id = c.typeFk
		WHERE s.ticketFk = vTicketFk
			AND ct.`type` = 'otros';

	UPDATE vn.sale s
		JOIN (
			SELECT sc.saleFk, sum(sc.value ) price
				FROM vn.saleComponent sc
					JOIN vn.sale s ON s.id = sc.saleFk
				WHERE s.ticketFk = vTicketFk
				GROUP BY sc.saleFk) sub ON sub.saleFk = s.id
		SET s.price = sub.price;
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 `sale_recalcComponent` */;
/*!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 `sale_recalcComponent`(vOption INT)
proc: BEGIN
/**  
 * Actualiza los componentes
 *
 * @table tmp.recalculateSales
 */ 
	DECLARE vShipped DATE; 
	DECLARE vWarehouseFk SMALLINT;
    DECLARE vAgencyModeFk INT;
    DECLARE vAddressFk INT;
    DECLARE vTicketFk BIGINT;
    DECLARE vItemFk BIGINT;
    DECLARE vLanded DATE; 
    DECLARE vIsEditable BOOLEAN;
    DECLARE vZoneFk INTEGER;
   
    DECLARE vSale INTEGER;
    DECLARE vDone BOOL DEFAULT FALSE;
    
	DECLARE vCur CURSOR FOR
		SELECT id from tmp.recalculateSales;
        
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; 
	   
	OPEN vCur;

	l: LOOP
		SET vDone = FALSE;
		FETCH vCur INTO vSale; 
		
		IF vDone THEN
			LEAVE l;
		END IF;
    
		SELECT t.refFk IS NULL, 
					s.ticketFk, 
					s.itemFk , 
					t.zoneFk, 
					t.warehouseFk, 
					t.shipped, 
					t.addressFk, 
					t.agencyModeFk, 
					t.landed
				INTO vIsEditable, 
					vTicketFk, 
					vItemFk, 
					vZoneFk, 
					vWarehouseFk, 
					vShipped, 
					vAddressFk, 
					vAgencyModeFk, 
					vLanded
			FROM ticket t
				JOIN sale s ON s.ticketFk = t.id
				LEFT JOIN ticketState ts ON ts.ticketFk = t.id
			WHERE s.id = vSale;

		CALL zone_getLanded(vShipped, vAddressFk, vAgencyModeFk, vWarehouseFk, TRUE);
	
		IF (SELECT COUNT(*) FROM tmp.zoneGetLanded LIMIT 1) = 0 THEN
			CALL util.throw('There is no zone for these parameters');
		END IF;
	
		IF vLanded IS NULL OR vZoneFk IS NULL THEN
	
			UPDATE ticket t
				SET t.landed = (SELECT landed FROM tmp.zoneGetLanded LIMIT 1) 
				WHERE t.id = vTicketFk AND t.landed IS NULL;
	
			IF vZoneFk IS NULL THEN
				SELECT zoneFk INTO vZoneFk FROM tmp.zoneGetLanded LIMIT 1;
				UPDATE ticket t
					SET t.zoneFk = vZoneFk
					WHERE t.id = vTicketFk AND t.zoneFk IS NULL;
			END IF;
			
		END IF;
	
		DROP TEMPORARY TABLE tmp.zoneGetLanded;
	        
		-- rellena la tabla buyUltimate con la ultima compra	
	    CALL buyUltimate (vWarehouseFk, vShipped);  
	    
		DELETE FROM tmp.buyUltimate WHERE itemFk != vItemFk;
	    
	    DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
	    CREATE TEMPORARY TABLE tmp.ticketLot 
			SELECT vWarehouseFk warehouseFk, NULL available, vItemFk itemFk, buyFk, vZoneFk zoneFk
					FROM tmp.buyUltimate
					WHERE itemFk = vItemFk;
	                    
		CALL catalog_componentPrepare();           
		CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);
	
	    DROP TEMPORARY TABLE IF EXISTS tmp.sale;
		CREATE TEMPORARY TABLE tmp.sale
						(PRIMARY KEY (saleFk)) ENGINE = MEMORY
			SELECT vSale saleFk,vWarehouseFk warehouseFk;
	
		IF vOption IS NULL THEN
			SET vOption = IF(vIsEditable, 1, 6);
    	END IF;
	    
		CALL ticketComponentUpdateSale(vOption); 
	    CALL catalog_componentPurge();
	    
		DROP TEMPORARY TABLE tmp.buyUltimate;
	    DROP TEMPORARY TABLE tmp.sale;
	   
	END LOOP;
	CLOSE vCur; 

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 `sale_setQuantity` */;
/*!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 `sale_setQuantity`(vSaleFk INT, vQuantity INT)
BEGIN
/*
 * Actualiza la cantidad de la línea de venta
 * 
 * @vSaleFk id de la línea de venta
 * @vQuantity cantidad a modificar
 * 
 */
	
	DECLARE vDescription VARCHAR(100);
	DECLARE vOrigin INT;
	
	SELECT  CONCAT("Cambio cantidad ",concept," de ", quantity," a ", vQuantity) INTO vDescription
	FROM sale 
	WHERE id = vSaleFk;

	SELECT ticketFk INTO vOrigin FROM sale WHERE id = vSaleFk;

	CALL logAdd(vOrigin, 'update', 'ticket', vDescription);
	
	UPDATE sale 
		SET originalQuantity = quantity,
			quantity = vQuantity
		WHERE id = vSaleFk;
    
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 `sale_updateOriginalQuantity` */;
/*!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 `sale_updateOriginalQuantity`(vSale INT, vQuantity INT)
proc: BEGIN

UPDATE vn.sale SET originalQuantity = vQuantity
WHERE id = vSale;

SELECT * FROM vn.sale WHERE id = vSale;

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 `saveLoadWorker` */;
/*!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 `saveLoadWorker`(routeFk INT, workerFk INT)
BEGIN


REPLACE INTO vn.routeLoadWorker(routeFk, workerFk) 
VALUES(routeFk,workerFk);

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 `sectorCollectionSaleGroup_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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sectorCollectionSaleGroup_add`(vSaleGroupFk INT, vSectorCollectionFk INT)
BEGIN
	
	/**
	 * Inserta un nuevo registro en vn.sectorCollectionSaleGroup 
	 * Actualiza el usuario en vn.saleGroup y reemplaza los registros de vn.saleTracking
	 * 
	 * @param vSaleGroupFk Identificador de vn.saleGroup
	 * @param vSectorCollectionFk Identificador de vn.sectorCollection
	 */
	
	REPLACE vn.sectorCollectionSaleGroup(sectorCollectionFk, saleGroupFk)
		VALUES(vSectorCollectionFk, vSaleGroupFk);
	
	UPDATE vn.saleGroup sg
		JOIN vn.sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sg.id
		JOIN vn.sectorCollection sc ON sc.id = scsg.sectorCollectionFk
		SET sg.userFk = sc.userFk 
		WHERE sg.id = vSaleGroupFk;
	
	
	INSERT IGNORE vn.saleTracking(saleFk,
							isChecked,
							workerFk,
							actionFk,
							stateFk)
		SELECT 	sgd.saleFk ,
				FALSE,
				sc.userFk,
				a.accion_id,
				s.id
			FROM vn.saleGroupDetail sgd
				JOIN vn.sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sgd.saleGroupFk 
				JOIN vn.sectorCollection sc ON sc.id = scsg.sectorCollectionFk
				JOIN vncontrol.accion a ON a.accion = 'SACAR'
				JOIN vn.state s ON s.code = 'PREVIOUS_PREPARATION'
			WHERE sgd.saleGroupFk = vSaleGroupFk;
		
		UPDATE vn.saleTracking st
		JOIN vn.saleGroupDetail sgd ON sgd.saleFk = st.saleFk 
			SET st.isChecked = TRUE
		WHERE sgd.saleGroupFk = vSaleGroupFk AND st.workerFk = 20;
	
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 `sectorCollection_get` */;
/*!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 `sectorCollection_get`(vSectorFk INT)
BEGIN
	
	/**
	 * Devuelve las colecciones del sector que corresponden al usuario conectado, y que estan incompletas
	 * 
	 * @param vSectorFk Identificador de vn.sector
	 */
	
	SELECT DISTINCT sc.id collectionFk, sc.created
		FROM vn.sectorCollection sc 
			JOIN vn.state s ON s.code = 'PREVIOUS_PREPARATION'
			LEFT JOIN vn.sectorCollectionSaleGroup scsg ON scsg.sectorCollectionFk = sc.id
			LEFT JOIN vn.saleGroupDetail sgd ON sgd.saleGroupFk = scsg.saleGroupFk
			LEFT JOIN vn.saleTracking st ON st.saleFk = sgd.saleFk AND st.stateFk = s.id AND st.workerFk = sc.userFk
			LEFT JOIN vn.sale sl ON sl.id = st.saleFk
		WHERE sc.userFk = account.myUser_getId()
			AND (ISNULL(scsg.sectorCollectionFk)
					OR 
				(NOT st.isChecked AND sl.quantity > 0))
			AND sc.created > CURDATE();
			
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 `sectorCollection_getSale` */;
/*!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 `sectorCollection_getSale`(vSelf INT)
BEGIN
/**
 * Devuelve las lineas de venta correspondientes a esa coleccion de sector
 *
 * @param vSelf Identificador de vn.sectorCollection
 */
	SELECT 	s.ticketFk,
			s.itemFk,
			i.longName,
			itemPackingTypeFk,
			subName,
			s.quantity,
			w.code workerCode,
			sgd.saleFk,
			iss.quantity pickedQuantity,
			c.salesPersonFk
		FROM vn.sale s
			JOIN vn.item i ON i.id = s.itemFk
			JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
			JOIN vn.sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sgd.saleGroupFk
			JOIN vn.saleTracking st ON st.saleFk = s.id
			JOIN vn.state stt ON stt.id = st.stateFk AND stt.code = 'PREVIOUS_PREPARATION'
			JOIN vn.worker w ON w.id = st.workerFk
			JOIN vn.ticket t ON t.id= s.ticketFk
			JOIN vn.client c ON c.id=t.clientFk
			LEFT JOIN vn.itemShelvingSaleSum iss ON iss.saleFk = s.id
		WHERE scsg.sectorCollectionFk = 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 `sectorCollection_new` */;
/*!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 `sectorCollection_new`(vSectorFk INT)
BEGIN
/**
 * Inserta una nueva colección, si el usuario no tiene ninguna vacia.
 * Esto se hace para evitar que por error se generen colecciones sin sentido.
 * 
 * @param vSectorFk Identificador de #vn.sector
 */
	DECLARE hasEmptyCollections BOOL;
	DECLARE vUserFk INT;

	SET vUserFk = account.myUser_getId();

	SELECT (COUNT(sc.id) > 0) INTO hasEmptyCollections
		FROM vn.sectorCollection sc 
			LEFT JOIN vn.sectorCollectionSaleGroup scsg ON scsg.sectorCollectionFk = sc.id 
		WHERE ISNULL(scsg.id)
			AND sc.userFk = vUserFk
			AND sc.sectorFk = vSectorFk
			AND sc.created >= CURDATE();

	IF NOT hasEmptyCollections THEN
		INSERT INTO vn.sectorCollection(userFk, sectorFk)
			VALUES(vUserFk, vSectorFk);
	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 `sectorProductivity_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 `sectorProductivity_add`()
BEGIN
	DECLARE vDatedFrom DATETIME;
	DECLARE vDatedTo DATETIME;

	SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY), CONCAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY),' 23:59:59') INTO vDatedFrom,	vDatedTo;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.errorsByChecker;
	DROP TEMPORARY TABLE IF EXISTS tmp.previousErrors;

	CALL timeControl_calculateAll(vDatedFrom, vDatedTo);

	CREATE TEMPORARY TABLE tmp.errorsByChecker
		ENGINE = MEMORY
		SELECT sc.userFk workerFk, COUNT(DISTINCT s.ticketFk) errorsByChecker
			FROM saleMistake sm
				JOIN vn.saleGroupDetail sgd on sgd.saleFk = sm.saleFk
				JOIN vn.sectorCollectionSaleGroup scsg on scsg.saleGroupFk = sgd.saleGroupFk
				JOIN vn.sectorCollection sc on sc.id = scsg.sectorCollectionFk
				JOIN sale s ON s.id = sm.saleFk
				JOIN ticket t on t.id = s.ticketFk
				WHERE (t.shipped BETWEEN vDatedFrom AND vDatedTo)
		GROUP BY sc.userFk ;

	CREATE TEMPORARY TABLE tmp.previousErrors -- Errores de previa, derivadores de los revisadores (por reclamación)
		ENGINE = MEMORY
		SELECT tt.workerFk, COUNT(c.ticketFk) errorsByClaim
			FROM claimDevelopment cd
				JOIN claim c ON cd.claimFk = c.id
				JOIN ticket t ON c.ticketFk = t.id
				JOIN claimResponsible cr ON cd.claimResponsibleFk = cr.id
				JOIN ticketTracking tt ON tt.ticketFk = t.id
				JOIN state s ON s.id = tt.stateFk
			WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo AND cr.description = 'Revisadores' AND s.code = 'OK PREVIOUS'
			GROUP BY workerFk;

	DELETE FROM sectorProductivity
			WHERE dated = vDatedFrom
				AND sector IN ('Algemesi Artificial','Algemesi Complementos');

	INSERT INTO sectorProductivity(workerFk, firstName, lastName, sector, ticketCount, saleCount, error, volume, hourWorked, dated)
		SELECT  w.id workerFk,
				w.firstName,
				w.lastName,
				se.description sector,
				COUNT(DISTINCT s.ticketFk) ticketCount,
				COUNT(sgd.id) saleCount,
				IFNULL(ec2.errorsByChecker,0) + IFNULL(pe.errorsByClaim, 0) errors,
				wp.volume,
				IFNULL(CAST(tc.timeWorkDecimal AS DECIMAL (10,2)) , 0) AS hourWorked,
				DATE(vDatedFrom) dated
			FROM vn.saleGroupDetail sgd
				JOIN vn.saleGroup sg on sg.id = sgd.saleGroupFk
				JOIN vn.sectorCollectionSaleGroup scsg on scsg.saleGroupFk = sgd.saleGroupFk
				JOIN vn.sectorCollection sc on sc.id = scsg.sectorCollectionFk
				join vn.sector se on se.id = sc.sectorFk
				JOIN vn.worker w ON w.id = sc.userFk
				LEFT JOIN vn.sale s ON s.id = sgd.saleFk
				LEFT JOIN tmp.timeControlCalculate tc ON tc.userFk = w.id
		 		LEFT JOIN bs.workerProductivity wp ON wp.workerFk = w.id
		 		LEFT JOIN vncontrol.accion a ON a.accion_id = wp.actionFk AND a.accion = 'PRESACAR'
		 		LEFT JOIN tmp.errorsByChecker ec2 ON ec2.workerFk = w.id
		 		LEFT JOIN tmp.previousErrors pe ON pe.workerFk = w.id
			WHERE DATE(sc.created) = vDatedFrom
				AND wp.dated = vDatedFrom
			GROUP BY w.id;

	DROP TEMPORARY TABLE tmp.timeControlCalculate;
	DROP TEMPORARY TABLE tmp.errorsByChecker;
	DROP TEMPORARY TABLE tmp.previousErrors;
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 `sector_get` */;
/*!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 `sector_get`()
BEGIN

/**
 * Obtiene los sectores
*/

	SELECT s.id,s.description,s.warehouseFk
		FROM vn.sector s;

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 `sector_getWarehouse` */;
/*!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 `sector_getWarehouse`(vSectorFk INT)
BEGIN

    SELECT s.warehouseFk
	FROM vn.sector s
    WHERE s.id = vSectorFk;
    
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 `setParking` */;
/*!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 `setParking`(IN `vParam` VARCHAR(8), IN `vParkingCode` VARCHAR(8))
proc: BEGIN
/**
 * Aparca una colección, un ticket, un saleGroup o un shelving en un parking
 *
 * @param vParam id del ticket, colección, saleGroup o shelving
 * @param vParkingCode código del parking
 */
	DECLARE vParkingFk INT;
	DECLARE vIsSaleGroup BOOL;
	DECLARE vIsTicket BOOL;
	DECLARE vIsCollection BOOL;

	SET vParkingCode = replace(vParkingCode,' ','');

	SELECT id INTO vParkingFk
		FROM vn.parking
		WHERE code = vParkingCode COLLATE utf8_unicode_ci;

	IF vParkingFk IS NULL THEN
		CALL util.throw('parkingNotExist');
		LEAVE proc;
	END IF;

	-- Se comprueba si es una preparación previa
	SELECT COUNT(*) INTO vIsSaleGroup
		FROM vn.saleGroup sg
		WHERE sg.id = vParam;

	IF vIsSaleGroup THEN
		CALL vn.saleGroup_setParking(vParam, vParkingFk);
		LEAVE proc;
	END IF;

	-- Se comprueba si es un ticket
	SELECT COUNT(*) INTO vIsTicket
		FROM vn.ticket t
		WHERE t.id = vParam
			AND t.shipped >= TIMESTAMPADD(WEEK,-1,CURDATE());

	IF vIsTicket THEN
		CALL vn.ticket_setParking(vParam, vParkingFk);
		LEAVE proc;
	END IF;

	-- Se comprueba si es una coleccion de tickets
	SELECT COUNT(*) INTO vIsCollection
		FROM vn.collection c
		WHERE c.id = vParam
			AND c.created >= TIMESTAMPADD(WEEK,-1,CURDATE());

	IF vIsCollection THEN
		CALL vn.collection_setParking(vParam, vParkingFk);
		LEAVE proc;
	END IF;

	-- Por descarte, se considera una matrícula
	CALL vn.shelving_setParking(vParam, vParkingFk);
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 `shelvingChange` */;
/*!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 `shelvingChange`(IN `vShelvingO` VARCHAR(8), IN `vShelvingD` VARCHAR(8))
BEGIN

     UPDATE vn.itemShelving
     SET shelvingFk =  vShelvingD COLLATE utf8_unicode_ci 
     WHERE shelvingFk = vShelvingO COLLATE utf8_unicode_ci;  
     
    
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 `shelvingLog_get` */;
/*!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 `shelvingLog_get`(shelvingFk VARCHAR(10))
BEGIN
	
	/* Lista el log de un carro
	 * 
	 * @param shelvingFk matrícula del carro
	 * 
	 */
	
		SELECT 	originFk, name, creationDate, description
		FROM shelvingLog sl
			JOIN user u ON u.id = sl.userFk 
		WHERE sl.originFk = shelvingFk COLLATE utf8_general_ci
			ORDER BY creationDate DESC;

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 `shelvingPark` */;
/*!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 `shelvingPark`(IN `vParam` VARCHAR(8), IN `vParkingCode` VARCHAR(8))
proc: BEGIN

/* 
 * Aparca una colección, un ticket, un saleGroup o un shelving en un parking
 * 
 * @param vParam id del ticket, colección, saleGroup o shelving
 * @param vParkingCode código del parking 
 * 
 */
	
	DECLARE vParkingFk INT;
	DECLARE vColumn VARCHAR(3);
	DECLARE vRow VARCHAR(2);
	DECLARE vReturn VARCHAR(50);
	DECLARE vIsSaleGroup BOOL;
	DECLARE vIsTicket BOOL;
	DECLARE vIsCollection BOOL;
	DECLARE vCollection INT DEFAULT NULL;
	DECLARE vDone INT DEFAULT FALSE;
	DECLARE vTicketFk INT;	
	DECLARE vCursor CURSOR FOR 
		SELECT IFNULL(tc2.ticketFk, t.id) 
					FROM ticket t 
						LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id 
						LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk 
					WHERE t.id = vParam;
	
			
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	SET vParkingCode = replace(vParkingCode,' ','')  ;

	SELECT id INTO vParkingFk
		FROM vn.parking
		WHERE code = vParkingCode COLLATE utf8_unicode_ci;
	
	IF vParkingFk IS NULL THEN

		LEAVE proc;

	END IF;
	
	-- Se comprueba si es una preparación previa
	SELECT COUNT(*) INTO vIsSaleGroup
		FROM vn.saleGroup sg 
		WHERE sg.id = vParam;
	
	IF vIsSaleGroup THEN
	
		UPDATE vn.saleGroup sg 
			SET sg.parkingFk = vParkingFk
			WHERE sg.id = vParam
				AND sg.created >= TIMESTAMPADD(WEEK,-1,CURDATE());
	
		CALL vn.ticket_setNextState(vn.ticket_get(vParam));
	
		LEAVE proc;
	
	END IF;

	-- Se comprueba si es un ticket
	SELECT COUNT(*) INTO vIsTicket
		FROM vn.ticket t
		WHERE t.id = vParam
			AND t.shipped >= TIMESTAMPADD(WEEK,-1,CURDATE());

	IF vIsTicket THEN

		INSERT INTO vn.ticketParking(ticketFk, parkingFk)
			SELECT IFNULL(tc2.ticketFk, t.id), vParkingFk 
				FROM ticket t 
					LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id 
					LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk 
				WHERE t.id = vParam
			ON DUPLICATE KEY UPDATE parkingFk = vParkingFk;	
	
		OPEN vCursor;
		l: LOOP
		
			FETCH vCursor INTO vTicketFk;
		
			IF vDone THEN
					LEAVE l;
			END IF;
		
			CALL vn.ticket_setNextState(vTicketFk);
		
		END LOOP;
		
		CLOSE vCursor;
	
		LEAVE proc;

	END IF;

	-- Se comprueba si es una coleccion de tickets
	SELECT COUNT(*) INTO vIsCollection
		FROM vn.collection c 
		WHERE c.id = vParam 
			AND c.created >= TIMESTAMPADD(WEEK,-1,CURDATE());
	
	IF vIsCollection THEN

		REPLACE vn.ticketParking(ticketFk,parkingFk)
			SELECT tc.ticketFk, vParkingFk
				FROM vn.ticketCollection tc 
				WHERE tc.collectionFk = vParam;
	
		LEAVE proc;

	END IF;

	-- Por descarte, se considera una matrícula
	INSERT INTO vn.shelvingLog (originFk, userFk, action , description)
		SELECT vParam, account.myUser_getId(), 'update', CONCAT("Cambio parking ",vParam," de ", p.code," a ", vParkingCode)  
			FROM parking p
				JOIN shelving s ON s.parkingFk = p.id
			WHERE s.code = vParam COLLATE utf8_unicode_ci;

	UPDATE vn.shelving
		SET parkingFk = vParkingFk, parked = NOW(), isPrinted = TRUE
		WHERE `code` = vParam COLLATE utf8_unicode_ci;
	
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 `shelvingParking_get` */;
/*!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 `shelvingParking_get`(vShelvingFk VARCHAR(10), vWarehouseFk INT, vDayRange INT)
BEGIN

	
SELECT 	s.itemFk, 
	s.concept,
	CAST(SUM(s.quantity) AS DECIMAL(10,0)) as sinServir, 
	CAST(IFNULL(ist.visible,0) AS DECIMAL(10,0)) as aparcado 
	FROM vn.sale s
		LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
		JOIN vn.ticket t ON t.id = s.ticketFk
		LEFT JOIN vn.itemShelvingStock ist ON ist.itemFk = s.itemFk AND ist.warehouseFk = vWarehouseFk
		JOIN vn.itemShelving ish ON ish.itemFk = s.itemFk AND ish.shelvingFk = vShelvingFk COLLATE utf8_general_ci
	WHERE t.shipped BETWEEN CURDATE() AND util.dayend(TIMESTAMPADD(DAY, GREATEST(0,vDayRange), CURDATE())) 
		AND iss.saleFk IS NULL
		AND t.warehouseFk = vWarehouseFk
	GROUP BY s.itemFk
	HAVING sinServir > aparcado;
			

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 `shelvingPriority_update` */;
/*!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 `shelvingPriority_update`(priority INT,vShelvingFk VARCHAR(10))
BEGIN

	UPDATE vn.shelving SET priority = priority WHERE code=vShelvingFk COLLATE utf8_unicode_ci;

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 `shelving_clean` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `shelving_clean`()
BEGIN

	DELETE FROM vn.shelving
		WHERE length(code) > 3
			AND parked < TIMESTAMPADD(WEEK,-1,CURDATE());
	
	DELETE FROM vn.itemShelving
		WHERE visible <= 0
		AND created < TIMESTAMPADD(MONTH,-1,CURDATE());

	DELETE ish.* 
		FROM vn.itemShelving ish
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk
			WHERE sh.parkingFk IS NULL
			AND ish.created < TIMESTAMPADD(WEEK,-1,CURDATE());

	UPDATE vn.shelving sh
		LEFT JOIN vn.itemShelving its ON its.shelvingFk = sh.`code`
		SET isPrinted = 0, 
			parkingFk = NULL
		WHERE its.id IS NULL
			AND sh.isRecyclable 
			AND (	sh.parked IS NULL 
					OR 
					sh.parked < TIMESTAMPADD(MONTH,-1,CURDATE())
				);

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 `shelving_getSpam` */;
/*!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 `shelving_getSpam`(vDated DATE, vWarehouseFk INT)
BEGIN
	
	/**
	 * 	Devuelve las matrículas con productos que no son necesarios para la venta hasta la fecha señalada
	 * 
	 *  @param vDated Fecha hasta la que se puede pasar sin esos productos.
	 *  @param vWarehouse Identificador único de vn.warehouse
	 */
	
	DROP TEMPORARY TABLE IF EXISTS tmp.stock;

	CALL cache.stock_refresh(FALSE);

	CREATE TEMPORARY TABLE tmp.stock
	SELECT 	i.id itemFk, 
			v.amount - IFNULL(fue.reserva,0) as visible, 
			fue.reserva, 
			sale.venta, 
			IFNULL(buy.compra,0) + IFNULL(mov.traslado,0) as compra, 
			IFNULL(v.amount,0) + IFNULL(sale.venta,0) + IFNULL(buy.compra,0) + IFNULL(mov.traslado,0) - IFNULL(fue.reserva,0) as saldo
		FROM vn.item i 
			JOIN vn.itemType it ON it.id = i.typeFk 
			JOIN vn.itemCategory ic ON ic.id = it.categoryFk 
		LEFT JOIN (
				SELECT ish.itemFk, CAST(SUM(ish.visible) AS DECIMAL(10,0)) AS reserva
					FROM vn.itemShelving ish
						JOIN vn.shelving sh ON sh.code = ish.shelvingFk
                        JOIN vn.parking p ON p.id = sh.parkingFk
                        JOIN vn.sector s ON s.id = p.sectorFk
					WHERE s.code = 'FUENTES_PICASSE'
						OR sh.isSpam
					GROUP BY ish.itemFk	
			 ) fue ON fue.itemFk = i.id
		LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as venta
					FROM vn2008.item_out
					WHERE dat BETWEEN CURDATE() AND util.dayend(vDated)
						AND warehouse_id  = vWarehouseFk
					GROUP BY item_id
			 ) sale ON sale.item_id = i.id
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as compra
					FROM vn2008.item_entry_in
					WHERE dat BETWEEN CURDATE() AND util.dayend(vDated)
						AND warehouse_id  = vWarehouseFk
                        AND isVirtualStock = FALSE
					GROUP BY item_id
			 ) buy ON buy.item_id = i.id
		LEFT JOIN (
				SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as traslado
					FROM vn2008.item_entry_out
					WHERE dat BETWEEN CURDATE() AND util.dayend(vDated)
						AND warehouse_id  = vWarehouseFk
					GROUP BY item_id
			 ) mov ON mov.item_id = i.id
		WHERE v.amount;
	
	SELECT ish.shelvingFk matricula, 
			i.longName articulo,
			ish.visible,
			count(*) lineas, 
			sum(ish.visible <= s.saldo) spam, 
			p.code parking,
			s.description sector , 
			w.name AS almacen,
			sh.isSpam
		FROM vn.itemShelving ish 
			JOIN vn.item i ON i.id = ish.itemFk
			JOIN vn.shelving sh ON sh.code = ish.shelvingFk 
			JOIN vn.parking p ON p.id = sh.parkingFk 
			JOIN vn.sector s ON s.id = p.sectorFk 
			JOIN vn.warehouse w ON w.id = s.warehouseFk 
			LEFT JOIN tmp.stock s ON s.itemFk = ish.itemFk 
			WHERE (w.name = 'Algemesi' 
				OR (w.name = 'NuncaJamas' AND ish.created < curdate()))
				AND ish.visible 
		GROUP BY ish.shelvingFk 
		HAVING lineas = spam OR isSpam;

	DROP TEMPORARY TABLE tmp.stock;

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 `shelving_setParking` */;
/*!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 `shelving_setParking`(IN `vShelvingCode` VARCHAR(8), IN `vParkingFk` INT)
proc: BEGIN
/**
 * Aparca una matrícula en un parking
 *
 * @param vShelvingCode code de la matrícula
 * @param vParkingFk id del parking
 */
	INSERT INTO vn.shelvingLog (originFk, userFk, action , description)
		SELECT vShelvingCode, account.myUser_getId(), 'update', CONCAT("Cambio parking ",vShelvingCode," de ", p.code," a ", vParkingFk)
			FROM parking p
				JOIN shelving s ON s.parkingFk = p.id
			WHERE s.code = vShelvingCode COLLATE utf8_unicode_ci;

	UPDATE vn.shelving
		SET parkingFk = vParkingFk, parked = NOW(), isPrinted = TRUE
		WHERE code = vShelvingCode COLLATE utf8_unicode_ci;
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 `sleep_X_min` */;
/*!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 `sleep_X_min`()
BEGIN
	# Ernesto. 4.8.2020
    # Para su uso en las tareas ejecutadas a las 2AM (visibles con: SELECT * FROM bs.nightTask order by started asc;)
	# Simplemente esperar unos minutos para que en las graficas de rendimiento de Percona PMM y escritura a disco de vCenter se puedan ver los efectos de cada tarea.
	do SLEEP(300);
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 `solunionRiskRequest` */;
/*!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 `solunionRiskRequest`()
BEGIN
	
	DROP TEMPORARY TABLE IF EXISTS tmp.client_list;
    CREATE TEMPORARY TABLE tmp.client_list
    (PRIMARY KEY (Id_Cliente))
		ENGINE = MEMORY
		SELECT * FROM (SELECT cc.client Id_Cliente, ci.grade FROM vn.creditClassification cc 
				JOIN vn.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(CURDATE());
    
	SELECT 
		c.Id_Cliente, c.Cliente, c.Credito credito_vn, c.creditInsurance solunion, cast(r.risk as DECIMAL(10,0)) riesgo_vivo,
        cast(c.creditInsurance - r.risk as decimal(10,0)) margen_vivo,
		f.Consumo consumo_anual, c.Vencimiento, ci.grade
	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
			JOIN bi.facturacion_media_anual f ON c.Id_Cliente = f.Id_Cliente
		GROUP BY 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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `stockBuyedByWorker` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `stockBuyedByWorker`(vDate DATE, vWorker INT)
BEGIN

    DECLARE vVolume DECIMAL(10,2);
    DECLARE vWarehouse INT DEFAULT 7;
    CALL stockTraslation(vDate);

    SELECT Volumen INTO vVolume FROM vn2008.Cubos WHERE Id_Cubo = 'cc' LIMIT 1;

    SELECT c.Id_Entrada, a.Id_Article, a.Article, i.amount Cantidad, (0.6 * ( i.amount / c.packing ) * vn.buy_getVolume(Id_Compra))/vVolume buyed
        FROM tmp_item i
            JOIN vn2008.Articles a ON a.Id_Article = i.item_id
            JOIN vn2008.Tipos t ON a.tipo_id = t.tipo_id
            JOIN vn2008.reinos r ON r.id = t.reino_id
            JOIN vn2008.Trabajadores tr ON tr.Id_Trabajador = t.Id_Trabajador
            JOIN tmp.buyUltimate bu ON bu.itemFk = a.Id_Article AND bu.warehouseFk = vWarehouse
            JOIN vn2008.Compres c ON c.Id_compra = bu.buyFk
        WHERE r.display <> 0 AND tr.user_id = vWorker;

    DROP TEMPORARY TABLE 
        tmp.buyUltimate,
        tmp_item;
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 `stockBuyed_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 `stockBuyed_add`(vDated DATE)
BEGIN
/**
 * Inserta el volumen de compra por comprador en vn.stockBuyed de acuerdo con la fecha
 *
 * @param vDated Fecha de compra
 */
	CALL vn.stockTraslation(vDated);

	DELETE 
		FROM vn.stockBuyed 
		WHERE `date` = vDated;

	INSERT INTO vn.stockBuyed(`user`, buyed, `date`, description)
		SELECT 	it.workerFk, 
				SUM(( ti.amount / b.packing ) * vn.buy_getVolume(b.id)) / vc.palletM3 / 1000000 buyed, 
				vDated,
				u.name 
			FROM tmp_item ti
				JOIN vn.item i ON i.id = ti.item_id
				JOIN vn.itemType it ON it.id = i.typeFk
				JOIN vn.itemCategory ic ON ic.id = it.categoryFk
				JOIN vn.warehouse wh ON wh.code = 'VNH'
				JOIN tmp.buyUltimate bu ON bu.itemFk = i.id AND bu.warehouseFk = wh.id
				JOIN vn.buy b ON b.id = bu.buyFk
				JOIN vn.volumeConfig vc
				JOIN account.`user` u ON u.id = it.workerFk
			WHERE ic.display != 0
			GROUP BY it.workerFk;
	
	INSERT INTO stockBuyed(buyed, `date`, description)
		SELECT SUM(ic.cm3 * ito.quantity  / vc.palletM3 / 1000000), vDated, IF(c.country = 'España',p.name,c.country) destiny
			FROM vn.itemTicketOut ito
				JOIN vn.ticket t ON t.id = ito.ticketFk 
				JOIN vn.address a ON a.id = t.addressFk 
				JOIN vn.province p ON p.id = a.provinceFk 
				JOIN vn.country c ON c.id = p.countryFk
				JOIN vn.warehouse wh ON wh.id = t.warehouseFk
				JOIN vn.itemCost ic ON ic.itemFk = ito.itemFk  AND ic.warehouseFk = t.warehouseFk
				JOIN vn.volumeConfig vc
			WHERE ito.shipped BETWEEN vDated AND util.dayend(vDated) 
				AND wh.code = 'VNH'
			GROUP BY destiny;

	DROP TEMPORARY TABLE
		tmp.buyUltimate,
		tmp_item;
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 `stockTraslation` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `stockTraslation`(vDate DATE)
BEGIN
    /**
     * Calcula el stock del vWarehouse desde FechaInventario hasta v_date
        sin tener en cuenta las salidas del mismo dia vDate
        para ver el transporte a reservar
     **/

    DECLARE vWarehouse INT DEFAULT 7;

    DELETE FROM stockBuyed WHERE `date` = vDate;

    DROP TEMPORARY TABLE IF EXISTS tmp_item;
    CREATE TEMPORARY TABLE tmp_item
        (UNIQUE INDEX i USING HASH (item_id))
        ENGINE = MEMORY
            SELECT item_id, SUM(amount) amount 
                FROM vn2008.item_entry_in
                WHERE dat = vDate 
                    AND vDate >= CURDATE() 
                    AND warehouse_id = vWarehouse
                    AND isVirtualStock is FALSE
                GROUP BY item_id 
                HAVING amount != 0;

    CALL `cache`.stock_refresh (FALSE);

    INSERT INTO tmp_item (item_id,amount)
    SELECT item_id,s.amount 
        FROM `cache`.stock s
        WHERE warehouse_id = vWarehouse 
        ON DUPLICATE KEY UPDATE amount = tmp_item.amount + VALUES(amount);

    CALL buyUltimate(vWarehouse,vDate);

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 `subordinateGetList` */;
/*!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 `subordinateGetList`(vBossFk INT)
BEGIN

	-- deprecated usar vn.worker_GetHierarch
	DECLARE vBossId INT;
    DECLARE vDone BOOL;
	DECLARE workerCur CURSOR FOR
		SELECT workerFk 
			FROM tmp.subordinate 
			WHERE NOT isChecked;
            

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
    DECLARE EXIT HANDLER FOR 1062 BEGIN
		CALL util.throw('INFINITE_LOOP');
    END;

	DROP TEMPORARY TABLE IF EXISTS tmp.subordinate;
    
    CREATE TEMPORARY TABLE tmp.subordinate
        (PRIMARY KEY (workerFk))
        ENGINE = MEMORY
		SELECT vBossFk AS workerFk, 0 AS isChecked;
        
    WHILE (SELECT COUNT(*) FROM tmp.subordinate WHERE NOT isChecked) > 0 DO
		OPEN workerCur;
		workerLoop: LOOP
			SET vDone = FALSE;

			FETCH workerCur INTO vBossId;
			
			IF vDone THEN
				LEAVE workerLoop;
			END IF;
		
			INSERT INTO tmp.subordinate 
				SELECT id, 0 
					FROM worker 
					WHERE bossFk = vBossId;
					
			UPDATE tmp.subordinate 
				SET isChecked = 1
				WHERE workerFk = vBossId;
		END LOOP;

		CLOSE workerCur;
    END WHILE;
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 `supplierExpenses` */;
/*!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 `supplierExpenses`(vEnded DATE)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS openingBalance;

	CREATE TEMPORARY TABLE openingBalance(
		dueDated DATE
		, supplierFk INT NOT NULL
		, companyFk INT NOT NULL
		, eurAmount DOUBLE NOT NULL
		, foreignAmount DOUBLE NOT NULL
		, PRIMARY KEY(supplierFk, companyFk))
	ENGINE =  MEMORY;

	-- Calcula el balance inicial y final de cada proveedor
	INSERT INTO openingBalance
		SELECT MAX(dueDated),
				supplierFk, 
                companyFk, 
				sum(amount) eurAmount,
				sum(divisa) foreignAmount
		FROM (
			SELECT p.dueDated,
				p.supplierFk, 
				p.companyFk,
				p.amount,
                p.divisa
			FROM payment p
				JOIN currency c ON c.id = p.currencyFk
                JOIN company co ON co.id = p.companyFk
			WHERE p.dueDated > '2014-12-31'
				AND p.dueDated <= vEnded
				AND co.`code` = 'VNL'
				AND c.`code` <> 'EUR'
		UNION ALL

			SELECT iidd.dueDated,
					ii.supplierFk,
					ii.companyFk,
					- iidd.amount, 
                    - iidd.foreignValue
			FROM invoiceIn ii
				JOIN invoiceInDueDay iidd ON ii.id = iidd.invoiceInFk
				JOIN currency c ON c.id = ii.currencyFk
                JOIN company co ON co.id = ii.companyFk
			WHERE  iidd.dueDated > '2014-12-31'
				AND iidd.dueDated <= vEnded
				AND ii.isBooked AND co.`code` = 'VNL' 
                AND c.`code` <> 'EUR'
		UNION ALL

			SELECT se.dueDated,
					se.supplierFk,
					se.companyFk,
					- se.amount, 
                    0
			FROM supplierExpense se
				JOIN currency c ON c.id = se.currencyFk
                JOIN company co ON co.id = se.companyFk
			WHERE se.dueDated > '2014-12-31'
				AND se.dueDated <= vEnded
				AND co.`code` = 'VNL' AND c.`code` <> 'EUR'
		) sub
		GROUP BY companyFk, supplierFk;
  
    SELECT ob.dueDated
			, ob.supplierFk
			, ob.companyFk
			, ob.eurAmount
            , s.`name`
		FROM openingBalance ob
			LEFT JOIN supplier s ON s.id = ob.supplierFk
		WHERE ob.eurAmount <> 0 AND ob.foreignAmount = 0;

    DROP TEMPORARY TABLE openingBalance;

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 `supplierPackaging_ReportSource` */;
/*!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 `supplierPackaging_ReportSource`(vFromDated DATE, vSupplierFk INT)
BEGIN

/**
 * Selecciona los embalajes de un proveedor a partir de una fecha
 *
 * @param vFromDated Fecha de la que partir
 * @param vSupplierFk Id del proveedor
 */

	DECLARE vCounter INT DEFAULT 0;
	DECLARE vMaxRow INT DEFAULT 0;
	DECLARE vItemFk INT DEFAULT 0;
	SET @vRowNumber = 0;
	SET @vBalance = 0;

	DROP TEMPORARY TABLE IF EXISTS tmp.supplierPackagingList;
	CREATE TEMPORARY TABLE tmp.supplierPackagingList
		SELECT 	itemFk,
				@vRowNumber:= @vRowNumber + 1 `row`
			FROM (
				SELECT 	*
					FROM (
						SELECT 	supplierFk,
								itemFk,
								longName,
								supplier,
								entryFk,
								landed,
								`out`,
								`in`,
								warehouse,
								buyingValue
							FROM supplierPackaging
							WHERE supplierFk = vSupplierFk
								AND landed >= vFromDated

						UNION ALL

						SELECT 	vSupplierFk,
								itemFk,
								longName,
								supplier,
								'previous',
								vFromDated,
								SUM(`out`),
								SUM(`in`),
								NULL,
								buyingValue
							FROM supplierPackaging
							WHERE supplierFk = vSupplierFk
								AND landed < vFromDated
							GROUP BY itemFk) i
					GROUP BY itemFk
					ORDER BY landed) i2;

	SELECT MAX(`row`)
		INTO vMaxRow
		FROM tmp.supplierPackagingList;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.supplierPackaging;
	CREATE TEMPORARY TABLE tmp.supplierPackaging(
		supplierFk INT,
		itemFk INT,
		longName VARCHAR(50),
		supplier VARCHAR(50),
		entryFk VARCHAR(50),
		landed DATE,
		`in` VARCHAR(50),
		`out` VARCHAR(50),
		warehouse INT,
		buyingValue INT,
		balance INT);
		
	l1: LOOP

		IF vCounter = vMaxRow THEN
			LEAVE l1;
		ELSE
			SET vCounter = vCounter + 1;
			SET @vBalance = 0;
		END IF;
	
		SELECT itemFk
			INTO vItemFk
			FROM tmp.supplierPackagingList
			WHERE `row` = vCounter;
		
		INSERT INTO tmp.supplierPackaging
			SELECT 	supplierFk,
					itemFk,
					longName,
					supplier,
					entryFk,
					landed,
					`in`,
					`out`,
					warehouse,
					buyingValue,
					@vBalance:= (`in` - `out` + @vBalance)
				FROM (
					SELECT 	supplierFk,
							itemFk,
							longName,
							supplier,
							entryFk,
							landed,
							`out`,
							`in`,
							warehouse,
							buyingValue
						FROM supplierPackaging
						WHERE supplierFk = vSupplierFk
							AND landed >= vFromDated
							AND itemFk = vItemFk
	
					UNION ALL
	
					SELECT 	vSupplierFk,
							itemFk,
							longName,
							supplier,
							'previous',
							vFromDated,
							SUM(`out`),
							SUM(`in`),
							NULL,
							buyingValue
						FROM supplierPackaging
						WHERE supplierFk = vSupplierFk
							AND landed < vFromDated
							AND itemFk = vItemFk
						GROUP BY itemFk
					) sub
				WHERE `out` OR `in`
				ORDER BY itemFk, landed;

	END LOOP l1;

	SELECT * FROM tmp.supplierPackaging;

	DROP TEMPORARY TABLE IF EXISTS tmp.supplierPackagingList;
	DROP TEMPORARY TABLE IF EXISTS tmp.supplierPackaging;
	SET @vRowNumber = 0;
	SET @vBalance = 0;

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 `supplier_checkBalance` */;
/*!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 `supplier_checkBalance`(IN vDateTo DATETIME, IN vIsConciliated BOOL)
BEGIN

	DECLARE vDateFrom DATE;
	SET vDateTo = TIMESTAMP(vDateTo,'23:59:59');
	SELECT util.firstDayOfYear(vDateTo) INTO vDateFrom;

	SELECT c.code, s.id , s.account, mysql, sage, mysql - sage difference, sub1.companyFk, s.name
		FROM supplier s
			JOIN ( SELECT companyFk, supplierFk, ROUND(SUM(mysql),2) mysql, ROUND(SUM(sage),2) sage
						FROM (	SELECT companyFk, supplierFk, -SUM(iid.amount) as mysql, 0 sage
									FROM invoiceInDueDay iid
										JOIN invoiceIn ii ON ii.id = iid.invoiceInFk 
									WHERE IFNULL(ii.bookEntried, ii.issued) BETWEEN vDateFrom AND vDateTo
										AND ii.isBooked
									GROUP BY ii.id
								UNION ALL 
									SELECT p.companyFk, p.supplierFk, p.amount, 0
										FROM payment p
											JOIN payMethod pm ON pm.id = p.payMethodFk
										WHERE p.received BETWEEN vDateFrom AND vDateTo
											AND IF(vIsConciliated, p.isConciliated, TRUE) = TRUE
											AND NOT pm.code <=>'previousBalance'
								UNION ALL 
									SELECT se.companyFk, se.supplierFk, - se.amount, 0 
										FROM supplierExpense se
										WHERE se.dated BETWEEN vDateFrom AND vDateTo
											AND IF(vIsConciliated, se.isConciliated, TRUE) = TRUE
								UNION ALL
									SELECT xd.empresa_id, s.id, 0, ROUND(NZ(Eurodebe)-NZ(Eurohaber),2)
										FROM bi.XDiario_ALL xd
											JOIN supplier s ON s.account = xd.SUBCTA
										WHERE xd.Fecha BETWEEN vDateFrom AND vDateTo
							) sub
				GROUP BY companyFk, supplierFk
				) sub1 ON sub1.supplierFk = s.id
			JOIN company c ON c.id = sub1.companyFk
		HAVING ABS(difference) > 0.05
		ORDER BY s.name;
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 `supplier_disablePayMethodChecked` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `supplier_disablePayMethodChecked`()
BEGIN

/*
 * Deshabilita la comprobación de los datos bancarios de todos aquellos proveedores que tengan
 * un número que no sea 0 en el campo graceMonthsDisableChecked de la tabla vn.payMethod
 * y que no hayan recibido un pago desde el mes indicado
 */

	UPDATE vn.supplier s
		JOIN (	SELECT p.supplierFk
					FROM vn.payment p
						LEFT JOIN vn.supplier s ON s.id = p.supplierFk
						LEFT JOIN vn.payMethod pm ON pm.id = s.payMethodFk
					WHERE p.created < (CURDATE() - INTERVAL pm.graceMonthsDisableChecked MONTH)
						AND pm.graceMonthsDisableChecked
						AND s.isPayMethodChecked
					GROUP BY p.supplierFk) sdpmc ON sdpmc.supplierFk = s.id
		SET s.isPayMethodChecked = FALSE;

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 `test` */;
/*!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 `test`()
BEGIN
select 'procedimiento ejecutado con éxito';
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 `ticketBoxesView` */;
/*!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 `ticketBoxesView`(IN vTicketFk INT)
BEGIN
  	
	SELECT  s.id, 
			s.itemFk, 
            s.concept, 
            floor(s.quantity / b.packing) as Cajas, 
            b.packing, 
            s.isPicked, 
            i.size
		FROM ticket t 
			JOIN sale s ON s.ticketFk = t.id
			JOIN item i ON i.id = s.itemFk
			JOIN cache.last_buy lb on lb.warehouse_id = t.warehouseFk AND lb.item_id = s.itemFk
			JOIN buy b on b.id = lb.buy_id
			JOIN packaging p on p.id = b.packageFk
		WHERE s.quantity >= b.packing
			AND t.id = vTicketFk
			AND p.isBox
				GROUP BY s.itemFk;

    
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 `ticketBuiltTime` */;
/*!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 `ticketBuiltTime`(vDate DATE)
BEGIN

	DECLARE vDateStart DATETIME DEFAULT DATE(vDate);
	DECLARE vDateEnd DATETIME DEFAULT util.dayEnd(vDate);
    
    DROP TEMPORARY TABLE IF EXISTS tmp.ticketBuiltTime;

	CREATE TEMPORARY TABLE tmp.ticketBuiltTime
		ENGINE = MEMORY
	SELECT t.id as ticketFk ,t.shipped, IFNULL(builtTime, vDateEnd) as builtTime
		FROM
        vn.ticket t
        LEFT JOIN
        (
        SELECT ticketFk, builtTime
			FROM
			(
			SELECT 
				Id_Ticket as ticketFk,
				odbc_date as builtTime
				FROM
					vncontrol.inter
					WHERE odbc_date BETWEEN vDateStart AND vDateEnd
				ORDER BY Id_Ticket, odbc_date DESC
				LIMIT 10000000000000000000
			) sub 
            GROUP BY ticketFk
		) sub2 ON sub2.ticketFk = t.id
        WHERE t.shipped BETWEEN vDate AND util.dayEnd(vDate)
			AND t.clientFk NOT IN (50,400,200)
            AND t.companyFk = 442
		
		;

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 `ticketCalculateClon` */;
/*!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 `ticketCalculateClon`(IN vTicketNew INT, vTicketOld INT)
BEGIN
/*
 * Recalcula los componentes un ticket clonado,
 * las lineas a precio cero fuerza para que tengan precio, el resto lo respeta
 * @param vTicketNew nuevo ticket clonado
 * @param vTicketOld icket original, a partir del qual se clonara el nuevo
*/
	DECLARE vShipped DATE;
	DECLARE vClient INT;
	DECLARE vWarehouse SMALLINT;
	DECLARE vAgencyMode INT;
	DECLARE vAddress INT;
	DECLARE vLanded DATE;
	DECLARE vAgency INT;
	DECLARE vZoneFk INT;

	REPLACE INTO orderTicket(orderFk,ticketFk)
		SELECT orderFk, vTicketNew 
			FROM orderTicket 
            WHERE ticketFk = vTicketOld;
    
	SELECT t.clientFk, t.warehouseFk, date(t.shipped), t.addressFk, t.agencyModeFk, t.landed, a.agencyFk, t.zoneFk
		INTO vClient, vWarehouse, vShipped, vAddress, vAgencyMode, vLanded, vAgency, vZoneFk
	FROM agencyMode a
		JOIN ticket t ON t.agencyModeFk = a.id
	WHERE t.id = vTicketNew;

	IF vLanded IS NULL THEN
		CALL zone_getLanded(vShipped, vAddress, vAgency, vWarehouse, TRUE);
		UPDATE ticket t
				JOIN tmp.zoneGetLanded zgl ON t.warehouseFk = zgl.warehouseFk 
			SET t.landed = zgl.landed,
				t.zoneFk = zgl.zoneFk
			WHERE t.id = vTicketNew;
		
		SELECT zoneFk INTO vZoneFk FROM tmp.zoneGetLanded LIMIT 1;
		DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
	END IF;

	-- rellena la tabla tmp.buyUltimate con la ultima compra
	CALL buyUltimate(vWarehouse, vShipped);  

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
	CREATE TEMPORARY TABLE tmp.ticketLot 
		SELECT vWarehouse warehouseFk, NULL available, s.itemFk, bu.buyFk, vZoneFk zoneFk
			FROM sale s
				LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
			WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
					
	CALL catalog_componentPrepare();            
    CALL catalog_componentCalculate(vZoneFk, vAddress, vShipped, vWarehouse);

	-- Bionizamos lineas con Preu = 0
	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
				(PRIMARY KEY (saleFk)) ENGINE = MEMORY
			SELECT s.id saleFk, vWarehouse warehouseFk 
				FROM sale s
					JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk =  vTicketNew AND s.price = 0;
				
	CALL ticketComponentUpdateSale(1);

	-- Bionizamos lineas con Preu > 0
	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
				(PRIMARY KEY (saleFk)) ENGINE = MEMORY
			SELECT s.id saleFk, vWarehouse warehouseFk 
				FROM sale s 
					JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk =  vTicketNew
					AND s.price > 0;
				
	CALL ticketComponentUpdateSale(6);

	-- Log
	CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');

	-- Limpieza
	CALL catalog_componentPurge();
	DROP TEMPORARY TABLE IF EXISTS 
		tmp.buyUltimate, 
		tmp.sale, 
		tmp.zoneGetLanded;
    
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 `ticketCalculateFromType` */;
/*!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 `ticketCalculateFromType`( vLanded DATE,
    vAddressFk INT,
    vAgencyModeFk INT,
    vTypeFk INT)
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tmp.item;
	CREATE TEMPORARY TABLE tmp.item 
		(INDEX (itemFk)) 
		ENGINE = MEMORY 
		SELECT id itemFk FROM vn.item
			WHERE typeFk = vTypeFk;
            
	CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
	DROP TEMPORARY TABLE tmp.item;
	DROP TEMPORARY TABLE tmp.ticketLot;
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 `ticketCalculatePurge` */;
/*!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 `ticketCalculatePurge`()
BEGIN
	DROP TEMPORARY TABLE 
		tmp.ticketCalculateItem,
		tmp.ticketComponentPrice,
		tmp.ticketComponent,
        tmp.ticketLot,
		tmp.zoneGetShipped;
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 `ticketClon` */;
/*!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 `ticketClon`(vTicketFk INT, vNewShipped DATE)
BEGIN
	
    DECLARE done INT DEFAULT FALSE;
	DECLARE vNewTicketFk INT;    
	DECLARE vOldSaleFk INT;
    DECLARE vNewSaleFk INT;
    
    DECLARE cur1 CURSOR FOR
		SELECT id
			FROM vn.sale
            WHERE ticketFk = vTicketFk;
            
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    SET vNewShipped = IFNULL(vNewShipped, CURDATE());
        
    CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
    
    UPDATE vn.ticket 
		SET landed = TIMESTAMPADD(DAY, DATEDIFF(vNewShipped, shipped), landed),
			shipped = vNewShipped
        WHERE id = vNewTicketFk;
        
	OPEN cur1;
    
	read_loop: LOOP
 
    FETCH cur1 INTO vOldSaleFk;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
    
		INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed)
			SELECT vNewTicketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed
				FROM vn.sale
                WHERE id = vOldSaleFk;
        
        SELECT max(id) INTO vNewSaleFk
			FROM vn.sale
            WHERE ticketFk = vNewTicketFk;
        
		INSERT INTO vn.saleComponent(saleFk, componentFk, value, isGreuge)
			SELECT vNewSaleFk, componentFk, value, isGreuge
				FROM vn.saleComponent
                WHERE saleFk = vOldSaleFk;
    
	END LOOP;

	CLOSE cur1;
    
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 `ticketClon_OneYear` */;
/*!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 `ticketClon_OneYear`(vTicketFk INT)
BEGIN

	DECLARE vShipped DATE;
    DECLARE vMaxDated DATE;
    
    SELECT shipped, TIMESTAMPADD(YEAR,1,shipped) 
		INTO vShipped, vMaxDated
		FROM vn.ticket
        WHERE id = vTicketFk;
        
	WHILE vShipped <= vMaxDated DO
    
		SET vShipped = TIMESTAMPADD(WEEK, 1, vShipped);
        
        CALL vn.ticketClon(vTicketFk, vShipped);
        
	END WHILE;

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 `ticketCollection_get` */;
/*!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 `ticketCollection_get`(vTicketFk INT)
BEGIN

	SELECT tc.collectionFk 
		FROM vn.ticketCollection tc
		WHERE ticketFk = vTicketFk;
        
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 `ticketCollection_setUsedShelves` */;
/*!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 `ticketCollection_setUsedShelves`(vTicketFk INT, vUsedShelves INT)
BEGIN
	
	/*
	 * Inserta número de baldas que ocupa un ticket
	 * 
	 * @param vTicketFk Identificador de ticket
	 * @param vUsedShelves Número de baldas
	 */
	
	UPDATE ticketCollection tc
		SET tc.usedShelves = vUsedShelves
	WHERE tc.ticketFk = vTicketFk;
	
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 `ticketComponentUpdate` */;
/*!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 `ticketComponentUpdate`(
	 vTicketFk INT,
     vClientFk INT,
     vAgencyModeFk INT,
     vAddressFk INT,
     vWarehouseFk TINYINT,
     vCompanyFk SMALLINT,
     vShipped DATETIME,
     vLanded DATE,
     vIsDeleted BOOLEAN,
     vHasToBeUnrouted BOOLEAN,
     vOption INT)
BEGIN

    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
		ROLLBACK;
        RESIGNAL;
	END;

	START TRANSACTION;
    
   IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
			
		UPDATE ticket t 
				JOIN address a ON a.id = vAddressFk
			SET t.nickname = a.nickname
			WHERE t.id = vTicketFk;
            
    END IF;
    
	UPDATE ticket t
		SET 
			t.clientFk = vClientFk,
			t.agencyModeFk = vAgencyModeFk,
			t.addressFk = vAddressFk,
			t.warehouseFk = vWarehouseFk,
            t.companyFk = vCompanyFk,
			t.landed = vLanded,
			t.shipped = vShipped,
            t.isDeleted = vIsDeleted
		WHERE
			t.id = vTicketFk;
            
	IF vHasToBeUnrouted THEN
		UPDATE ticket t SET t.routeFk = NULL
			WHERE t.id = vTicketFk;
    END IF;
            
	IF vOption <> 8 THEN
		DROP TEMPORARY TABLE IF EXISTS tmp.sale;
		CREATE TEMPORARY TABLE tmp.sale
			(PRIMARY KEY (saleFk))
            ENGINE = MEMORY
			SELECT id AS saleFk, vWarehouseFk warehouseFk
				FROM sale s WHERE s.ticketFk = vTicketFk;

		CALL ticketComponentUpdateSale (vOption);

        DROP TEMPORARY TABLE tmp.sale;
	END IF;
	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 `ticketComponentUpdateSale` */;
/*!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 `ticketComponentUpdateSale`(vOption INT)
BEGIN
/**
 * A partir de la tabla tmp.sale, crea los Movimientos_componentes
 * y modifica el campo Preu de la tabla Movimientos
 *
 * @param i_option integer tipo de actualizacion
 * @param table tmp.sale  tabla memory con el campo saleFk, warehouseFk
 **/
	DECLARE vComponentFk INT;
    DECLARE vRenewComponents BOOLEAN;
    DECLARE vKeepPrices BOOLEAN;
    
    CASE vOption
		WHEN 1 THEN  
			SET vRenewComponents = TRUE;
            SET vKeepPrices = FALSE;
		WHEN 2 THEN
			SELECT id INTO vComponentFk FROM component WHERE `code` = 'debtCollection'; 
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;
		WHEN 3 THEN 
			SELECT id INTO vComponentFk FROM component WHERE `code` = 'mana'; 
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;	
		WHEN 4 THEN 
			SELECT id INTO vComponentFk FROM component WHERE `code` = 'buyerDiscount'; 
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;
       /* WHEN 5 THEN 
			SET vComponentFk = 35;
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;*/
		WHEN 6 THEN 
    		SELECT id INTO vComponentFk FROM component WHERE `code` = 'imbalance';
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;
        WHEN 7 THEN
		    REPLACE INTO saleComponent(saleFk, componentFk, value)
				SELECT s.id, 28, ROUND(((s.price * (100 - s.discount) / 100) - SUM(IFNULL(sc.value, 0))) * 0.8, 3) 
				    FROM sale s
                        JOIN tmp.sale tmps ON tmps.saleFk = s.id
				        LEFT JOIN saleComponent sc ON sc.saleFk = s.id 
                            AND sc.componentFk NOT IN (28, 29)
                    GROUP BY s.id;
			
			REPLACE INTO saleComponent(saleFk, componentFk, value)
				SELECT s.id, 29, ROUND(((s.price * (100 - s.discount) / 100) - SUM(IFNULL(sc.value, 0))) * 0.2, 3) 
				    FROM sale s
                        JOIN tmp.sale tmps ON tmps.saleFk = s.id
				        LEFT JOIN saleComponent sc ON sc.saleFk = s.id 
                            AND sc.componentFk NOT IN (28, 29)
                GROUP BY s.id;
                
			SET vRenewComponents = FALSE;
            SET vKeepPrices = FALSE;
		WHEN 8 THEN
            DELETE sc.* 
				FROM tmp.sale tmps JOIN saleComponent sc ON sc.saleFk = tmps.saleFk;
			
			REPLACE INTO saleComponent(saleFk, componentFk, value)
				SELECT s.id, 28, ROUND(((s.price * (100 - s.discount) / 100)), 3) 
                    FROM sale s
                        JOIN tmp.sale tmps ON tmps.saleFk = s.id;
				
			SET vRenewComponents = FALSE;
            SET vKeepPrices = FALSE;
		WHEN 9 THEN  
			SET vRenewComponents = TRUE;
            SET vKeepPrices = TRUE;
    END CASE;

    IF vRenewComponents THEN
        DELETE sc.* 
            FROM tmp.sale tmps 
                JOIN saleComponent sc ON sc.saleFk = tmps.saleFk
                JOIN `component` c ON c.id = sc.componentFk
        WHERE c.isRenewable;
				
        REPLACE INTO saleComponent(saleFk, componentFk, value)
            SELECT s.id, tc.componentFk, tc.cost
                FROM sale s 
                    JOIN tmp.sale tmps ON tmps.saleFk = s.id
                    JOIN tmp.ticketComponent tc ON tc.itemFk = s.itemFk AND tc.warehouseFk = tmps.warehouseFk
                    LEFT JOIN saleComponent sc ON sc.saleFk = s.id 
                        AND sc.componentFk = tc.componentFk 
                    LEFT JOIN `component` c ON c.id = tc.componentFk 
                WHERE IF(sc.componentFk IS NULL AND NOT c.isRenewable, FALSE, TRUE);
             
		-- Añadir componente venta por paquete 
		DROP TEMPORARY TABLE IF EXISTS tmp.sale2;
		CREATE TEMPORARY TABLE tmp.sale2
			(PRIMARY KEY (saleFk))
			ENGINE = MEMORY 
			SELECT * FROM tmp.sale;
			
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent2;
		CREATE TEMPORARY TABLE tmp.ticketComponent2
			SELECT * FROM tmp.ticketComponent;   
		 
		REPLACE INTO saleComponent(saleFk, componentFk, value)	 
			SELECT t.id, t.componentFk, t.cost
				FROM (
					SELECT s.id, tc.componentFk, tc.cost, MOD(s.quantity, b.packing) as resto
						FROM vn.sale s
							JOIN tmp.sale tmps ON tmps.saleFk = s.id
							JOIN cache.last_buy lb ON lb.item_id = s.itemFk AND  tmps.warehouseFk = lb.warehouse_id 
							JOIN vn.buy b ON b.id = buy_id
							JOIN tmp.ticketComponent tc ON tc.itemFk = s.itemFk AND tc.warehouseFk = tmps.warehouseFk
							JOIN `component` c ON c.id = tc.componentFk AND c.code = 'salePerPackage' 
							LEFT JOIN (
								SELECT s.id
								FROM vn.sale s
									JOIN tmp.sale2 tmps ON tmps.saleFk = s.id
									JOIN tmp.ticketComponent2 tc ON tc.itemFk = s.itemFk AND tc.warehouseFk = tmps.warehouseFk
									JOIN saleComponent sc ON sc.saleFk = s.id AND sc.componentFk = tc.componentFk
									JOIN `component` c ON c.id = sc.componentFk AND c.code = 'lastUnitsDiscount'
							) tp ON tp.id = s.id
						WHERE tp.id IS NULL
						HAVING resto <> 0) t;
                            
		DROP TEMPORARY TABLE IF EXISTS 
			tmp.sale2,
			tmp.ticketComponent2;
    END IF;

    IF vKeepPrices THEN
		REPLACE INTO saleComponent(saleFk, componentFk, value)
		    SELECT s.id, vComponentFk, ROUND((s.price * (100 - s.discount) / 100) - SUM(sc.value), 3) dif
		        FROM sale s
                    JOIN tmp.sale tmps ON tmps.saleFk = s.id
                    LEFT JOIN saleComponent sc ON sc.saleFk = s.id
		    WHERE  sc.saleFk <> vComponentFk
		    GROUP BY s.id
		    HAVING dif <> 0;
    ELSE
		UPDATE sale s
			JOIN item i on i.id = s.itemFk
			JOIN itemType it on it.id = i.typeFk
				JOIN (SELECT SUM(sc.value) sumValue, sc.saleFk 
						FROM saleComponent sc
							JOIN tmp.sale tmps ON tmps.saleFk = sc.saleFk
						GROUP BY sc.saleFk) sc ON sc.saleFk = s.id
				SET s.price = sumValue / ((100 - s.discount) / 100)
			WHERE it.code != 'PRT' ; 
            
		REPLACE INTO saleComponent(saleFk, componentFk, value)
			SELECT s.id, 21, ROUND((s.price * (100 - s.discount) / 100) - SUM(value), 3) saleValue
				FROM sale s
					JOIN tmp.sale tmps ON tmps.saleFk = s.id
					LEFT JOIN saleComponent sc ON sc.saleFk = s.id
				WHERE sc.componentFk != 21
				GROUP BY s.id 
				HAVING ROUND(saleValue, 4) <> 0;
    END IF;
    
    UPDATE sale s
		JOIN (
			SELECT SUM(sc.value) sumValue, sc.saleFk 
				FROM saleComponent sc
					JOIN tmp.sale tmps ON tmps.saleFk = sc.saleFk
					JOIN `component` c ON c.id = sc.componentFk
					JOIN componentType ct on ct.id = c.typeFk AND ct.isBase
				GROUP BY sc.saleFk) sc ON sc.saleFk = s.id
		SET s.priceFixed = sumValue, s.isPriceFixed = 1;

    DELETE sc.*
		FROM saleComponent sc
			JOIN tmp.sale tmps ON tmps.saleFk = sc.saleFk
			JOIN sale s on s.id = sc.saleFk
			JOIN item i ON i.id = s.itemFk
			JOIN itemType it ON it.id = i.typeFk
		WHERE it.code = 'PRT'; 
		
	INSERT INTO saleComponent(saleFk, componentFk, value)
		SELECT s.id, 15, s.price   
			FROM sale s
				JOIN tmp.sale tmps ON tmps.saleFk = s.id
				JOIN item i ON i.id = s.itemFK
				JOIN itemType it ON it.id = i.typeFk
		WHERE it.code = 'PRT' AND s.price > 0;
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 `ticketCreate` */;
/*!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 `ticketCreate`(
     vClientId INT
    ,vShipped DATE
    ,vWarehouseId INT
    ,vCompanyFk INT
    ,vAddressFk INT
    ,vAgencyType INT
    ,vRouteFk INT
    ,vlanded DATE
    ,OUT vNewTicket INT)
BEGIN
	CALL `ticketCreateWithUser`(vClientId, vShipped, vWarehouseId, vCompanyFk, vAddressFk, vAgencyType, vRouteFk, vlanded, account.myUser_getId(), vNewTicket);
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 `ticketCreateWithUser` */;
/*!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 `ticketCreateWithUser`(
     vClientId INT
    ,vShipped DATE
    ,vWarehouseFk INT
    ,vCompanyFk INT
    ,vAddressFk INT
    ,vAgencyModeFk INT
    ,vRouteFk INT
    ,vlanded DATE
    ,vUserId INT
    ,OUT vNewTicket INT)
BEGIN
	CALL ticket_add(
		vClientId,
		vShipped,
		vWarehouseFk,
		vCompanyFk,
		vAddressFk,
		vAgencyModeFk,
		vRouteFk,
		vlanded,
		vUserId,
		TRUE,
		vNewTicket
	);
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 `ticketDown_PrintableSelection` */;
/*!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 `ticketDown_PrintableSelection`(vSectorFk INT)
BEGIN

	UPDATE vn.ticketDown td
		JOIN
			(SELECT DISTINCT t.id
				FROM vn.ticket t
					JOIN vn.sale s ON s.ticketFk = t.id
                    JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
                    JOIN vn.itemShelving ish ON ish.id = iss.itemShelvingFk
                    JOIN vn.shelving sh ON sh.code = ish.shelvingFk
                    JOIN vn.parking p ON p.id = sh.parkingFk
					WHERE p.sectorFk = vSectorFk
			) sub ON sub.id = td.ticketFk
		JOIN vn.ticketDown_SelectionType tdst ON tdst.description = 'FREE'
        JOIN vn.ticketDown_SelectionType tdst2 ON tdst2.description = 'SELECTED'
		SET td.selected = tdst2.id
        WHERE td.selected = tdst.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 `ticketGetTaxAdd` */;
/*!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 `ticketGetTaxAdd`(vTicketFk INT)
BEGIN
/**
 * Añade un ticket a la tabla tmp.ticket para calcular
 * el IVA y el recargo de equivalencia y devuelve el resultado.
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		ENGINE = MEMORY
		SELECT vTicketFk ticketFk;
        
	CALL vn.ticket_getTax(NULL);

    SELECT 
			tt.ticketFk,
            CAST(tt.taxableBase AS DECIMAL(10, 2)) AS taxableBase,
			CAST(tt.rate * tt.taxableBase / 100  AS DECIMAL(10, 2)) AS tax,
            pgc.*, 
            CAST(IF(pe.equFk IS NULL, taxableBase, 0) AS DECIMAL(10, 2)) AS Base,
            pgc.rate / 100 as vatPercent
		FROM tmp.ticketTax tt
			JOIN vn.pgc ON pgc.code = tt.pgcFk
			LEFT JOIN vn.pgcEqu pe ON pe.equFk = pgc.code;
    
	DROP TEMPORARY TABLE tmp.ticket;
    DROP TEMPORARY TABLE tmp.ticketTax;
	DROP TEMPORARY TABLE tmp.ticketAmount;
  
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 `ticketGetTax_new` */;
/*!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 `ticketGetTax_new`()
    READS SQL DATA
BEGIN
/**
 * Calcula la base imponible, el IVA y el recargo de equivalencia para
 * un conjunto de tickets.
 *
 * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
 * @return tmp.ticketTax Impuesto desglosado para cada ticket
 * @return tmp.ticketAmount
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
	CREATE TEMPORARY TABLE tmp.addressCompany
		(INDEX (addressFk, companyFk))
		ENGINE = MEMORY
			SELECT DISTINCT t.addressFk, t.companyFk
				FROM tmp.ticket tmpTicket
					JOIN ticket t ON t.id = tmpTicket.ticketFk;

    CALL addressTaxArea ();
     
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketTax;
	CREATE TEMPORARY TABLE tmp.ticketTax
		(INDEX (ticketFk))
		ENGINE = MEMORY
			SELECT tmpTicket.ticketFk,
					bp.pgcFk,
					SUM(ROUND(s.quantity * s.price * (100 - s.discount)/100,2) 
						) AS taxableBase,
					SUM(ROUND(s.quantity * s.price * (100 - s.discount)/100,2)
						) * pgc.rate / 100 AS tax,
					tc.code
                        
				FROM tmp.ticket tmpTicket
					JOIN sale s ON s.ticketFk = tmpTicket.ticketFk
					JOIN item i ON i.id = s.itemFk
                    JOIN ticket t ON t.id = tmpTicket.ticketFk
                    JOIN supplier su ON su.id = t.companyFk
                    JOIN tmp.addressTaxArea ata 
						ON ata.addressFk = t.addressFk AND ata.companyFk = t.companyFk
					JOIN itemTaxCountry itc 
						ON itc.itemFk = i.id AND itc.countryFk = su.countryFk
					JOIN bookingPlanner bp 
						ON bp.countryFk = su.countryFk
							AND bp.taxAreaFk = ata.areaFk
							AND bp.taxClassFk = itc.taxClassFk
					JOIN pgc ON pgc.code = bp.pgcFk
                    JOIN taxClass tc ON tc.id = bp.taxClassFk
				GROUP BY tmpTicket.ticketFk, pgc.code
				HAVING taxableBase != 0;
                              
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketAmount;
	CREATE TEMPORARY TABLE tmp.ticketAmount
		(INDEX (ticketFk))
		ENGINE = MEMORY
			SELECT ticketFk, taxableBase, SUM(tax) tax
				FROM tmp.ticketTax
				GROUP BY ticketFk, code;

    DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
    DROP TEMPORARY TABLE IF EXISTS tmp.addressTaxArea;
    
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 `ticketGetTotal` */;
/*!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 `ticketGetTotal`()
BEGIN
/**
 * Calcula el total con IVA para un conjunto de tickets.
 *
 * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
 * @return tmp.ticketTotal Total para cada ticket
 */
	CALL ticket_getTax(NULL);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketTotal;
	CREATE TEMPORARY TABLE tmp.ticketTotal
		(INDEX (ticketFk))
		ENGINE = MEMORY
		SELECT t.ticketFk,
				IFNULL(SUM(ta.taxableBase + ta.tax), 0.0) AS total,
				SUM(ta.taxableBase) totalWithoutVat
			FROM tmp.ticket t
				LEFT JOIN tmp.ticketAmount ta ON t.ticketFk = ta.ticketFk
			GROUP BY ticketFk;
			
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketAmount;
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketTax;
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 `ticketGetVisibleAvailable` */;
/*!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 `ticketGetVisibleAvailable`(
    vTicket INT)
BEGIN
    DECLARE vVisibleCalc INT;
    DECLARE vAvailableCalc INT;
    DECLARE vShipped DATE;
    DECLARE vWarehouse TINYINT;
    DECLARE vAlertLevel INT;

    SELECT t.warehouseFk, t.shipped, ts.alertLevel INTO vWarehouse, vShipped, vAlertLevel
        FROM ticket t
            LEFT JOIN ticketState ts ON ts.ticketFk = vTicket
       WHERE t.id = vTicket;

    IF vAlertLevel IS NULL OR vAlertLevel = 0 THEN
        IF vShipped >= CURDATE() THEN
            CALL cache.available_refresh(vAvailableCalc, FALSE, vWarehouse, vShipped);
        END IF;
        IF vShipped = CURDATE() THEN
            CALL cache.visible_refresh(vVisibleCalc, FALSE, vWarehouse);
        END IF;
    END IF;

    SELECT s.id, s.itemFk, s.quantity, s.concept, s.price, s.reserved, s.discount, v.visible, av.available, it.image, it.subName
        FROM sale s
            LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCalc
            LEFT JOIN cache.available av ON av.item_id = s.itemFk AND av.calc_id = vAvailableCalc
            LEFT JOIN item it ON it.id = s.itemFk
        WHERE s.ticketFk = vTicket
		ORDER BY s.concept;
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 `ticketManaToPromo` */;
/*!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 `ticketManaToPromo`(vTicketFk INT)
BEGIN
	
	DECLARE vManaComponent INT;
	
	DECLARE vPromoComponent INT;

	SELECT id INTO vManaComponent
		FROM vn.component c 
		WHERE c.code = 'mana';
	
	SELECT id INTO vPromoComponent
		FROM vn.component c 
		WHERE c.code = 'floramondoPromo';
	
	UPDATE vn.saleComponent sc
		JOIN vn.sale s ON s.id = sc.saleFk 
			SET componentFk = vPromoComponent
		WHERE componentFk = vManaComponent
			AND s.ticketFk = vTicketFk;
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 `ticketMissed_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 `ticketMissed_List`(vTicketFk INT)
BEGIN

    DECLARE vParkingFk INT;
    DECLARE vParked DATETIME;
    DECLARE vLevel INT;
    DECLARE vCollectionFk INT;
    
    SELECT IFNULL(`level`,0), IFNULL(collectionFk,0) 
		INTO vLevel, vCollectionFk
		FROM vn.ticketCollection
        WHERE ticketFk = vTicketFk
        LIMIT 1;
        
	SELECT created, parkingFk 
		INTO vParked, vParkingFk
		FROM vn.ticketParking
        WHERE ticketFk = vTicketFk;
        
    SELECT tp.ticketFk, CONCAT(tc.collectionFk, ' - ', tc.level) coleccion, tp.created, p.code, am.name as Agencia
		FROM vn.ticketParking tp
        JOIN vn.parking p ON p.id = tp.parkingFk
        JOIN vn.sector sc ON sc.id = p.sectorFk
        LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = tp.ticketFk
        JOIN vn.ticketStateToday tst ON tst.ticket = tp.ticketFk
        JOIN vn.ticket t ON t.id = tp.ticketFk
        JOIN vn.zone z ON z.id = t.zoneFk
        JOIN vn.agencyMode am ON am.id = z.agencyModeFk
        JOIN vn.state s ON s.id = tst.state
        WHERE (s.alertLevel < 2
			AND tp.parkingFk = vParkingFk
            AND sc.isPackagingArea
            AND (
					(
						( IFNULL(tc.collectionFk,-1) != IFNULL(@vCollectionFk,0) AND tp.created < vParked )
					OR
						( tc.collectionFk = vCollectionFk AND LEFT(tc.level,1) < LEFT(vLevel,1) )
					)
                )) -- Etiquetas que no se han escaneado y ya estamos con una posterior
			OR
            (s.alertLevel > 1
				AND tp.parkingFk = vParkingFk
                AND sc.isPackagingArea
                AND tp.created < vParked
                AND t.packages <=> 0);
        
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 `ticketNotInvoicedByClient` */;
/*!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 `ticketNotInvoicedByClient`(vClientFk INT)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
    
	CREATE TEMPORARY TABLE tmp.ticket
		SELECT id ticketFk
			FROM ticket
		WHERE refFk IS NULL
			AND clientFk = vClientFk
			AND shipped > '2001-01-01';

	CALL vn.ticketGetTotal;

	SELECT 	c.id, 
			c.name as Cliente,
            t.shipped as Fecha,
            t.id as Id_Ticket,
            CAST(tt.total AS DECIMAL(10,2)) as Importe
		FROM tmp.ticketTotal tt
			JOIN ticket t ON t.id = tt.ticketFk
			JOIN client c ON c.id = t.ClientFk;

	DROP TEMPORARY TABLE
	tmp.ticket,
	tmp.ticketTotal;   

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 `ticketObservation_addNewBorn` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticketObservation_addNewBorn`(vTicketFk INT)
BEGIN
	
	/**
	 *  Inserta observaciones para los tickets con clientes nuevos o recuperados
	 * 
	 *  @param vTicketFk Identificador de vn.ticket
	 */
	
	DECLARE vDescription VARCHAR(20) DEFAULT '¡Cliente NUEVO! ';

	INSERT INTO vn.ticketObservation(ticketFk, observationTypeFk, description)
		SELECT vTicketFk, ot.id, vDescription
			FROM vn.observationType ot
			WHERE ot.hasNewBornMessage
		ON DUPLICATE KEY UPDATE description = CONCAT(vDescription, ticketObservation.description);	
	
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 `ticketParking_findSkipped` */;
/*!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 `ticketParking_findSkipped`(vTicketFk INT, vItemPackingTypeFk VARCHAR(1))
BEGIN
	
/**
 * Averigua los tickets que se han saltado por un error en el proceso encajado
 * @param vTicketFk Ticket
 * @param vItemPackingTypeFk Modo de encajado
 * @return un select con los tickets afectados
 */  

   	DECLARE vParkingFk INT;
    DECLARE vParked DATETIME;
    DECLARE vLevel INT;
    DECLARE vWagon INT;
    DECLARE vCollectionFk INT;
    
    SELECT IFNULL(`level`,0), IFNULL(`wagon`,0),IFNULL(collectionFk,0) 
		INTO vLevel, vWagon, vCollectionFk
		FROM vn.ticketCollection tc
			JOIN vn.collection c ON c.id = tc.collectionFk AND c.itemPackingTypeFk = vItemPackingTypeFk
        WHERE ticketFk = vTicketFk
        ORDER BY c.id DESC
        LIMIT 1;
        
	SELECT created, parkingFk 
		INTO vParked, vParkingFk
		FROM vn.ticketParking tp
			JOIN vn.parking p ON p.id = tp.parkingFk 
			JOIN vn.sector s ON s.id = p.sectorFk 
        WHERE ticketFk = vTicketFk
       		AND s.itemPackingTypeFk = vItemPackingTypeFk
       		AND s.isPackagingArea ;
        
    SELECT tp.ticketFk, CONCAT(tc.collectionFk, ' ', tc.wagon, ' - ', tc.level) coleccion, tp.created, p.code, am.name as Agencia
		FROM vn.ticketParking tp
        JOIN vn.parking p ON p.id = tp.parkingFk
        JOIN vn.sector sc ON sc.id = p.sectorFk
        LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = tp.ticketFk
        JOIN vn.ticketStateToday tst ON tst.ticket = tp.ticketFk
        JOIN vn.ticket t ON t.id = tp.ticketFk
        JOIN vn.zone z ON z.id = t.zoneFk
        JOIN vn.agencyMode am ON am.id = z.agencyModeFk
        JOIN vn.state s ON s.id = tst.state
        WHERE (s.alertLevel < 2
				AND tp.parkingFk = vParkingFk
	            AND sc.isPackagingArea
	            AND 	(
						( IFNULL(tc.collectionFk,-1) != IFNULL(@vCollectionFk,0) AND tp.created < vParked )
					OR
						( tc.collectionFk = vCollectionFk 
							AND (LEFT(tc.wagon,1) < LEFT(vWagon,1)
							OR  (LEFT(tc.wagon,1) = LEFT(vWagon,1) AND LEFT(tc.level,1) < LEFT(vLevel,1)))	
						)
					)
				) -- Etiquetas que no se han escaneado y ya estamos con una posterior
				OR
	            (s.alertLevel > 1
					AND tp.parkingFk = vParkingFk
	                AND sc.isPackagingArea
	                AND tp.created < vParked              
	                AND t.packages <=> 0);
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 `ticketRefund_beforeUpsert` */;
/*!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 `ticketRefund_beforeUpsert`(vRefundTicketFk INT, vOriginalTicketFk INT)
BEGIN
	DECLARE vAlreadyExists BOOLEAN DEFAULT FALSE; 

	IF vRefundTicketFk = vOriginalTicketFk THEN
		CALL util.throw('Original ticket and refund ticket has same id');
	END IF;

    SELECT COUNT(*) INTO vAlreadyExists
		FROM ticketRefund 
		WHERE refundTicketFk = vOriginalTicketFk; 
	
	IF vAlreadyExists > 0 THEN
		CALL util.throw('This ticket is already a refund');
	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 `ticketRequest_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 `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 ;
/*!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 `ticketStateToday_setState` */;
/*!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 `ticketStateToday_setState`(vTicketFk INT, vStateCode VARCHAR(45))
BEGIN
	
	/* Modifica el estado de un ticket de hoy
	 * 
	 * @param vTicketFk el id del ticket
	 * @param vStateCode estado a modificar del ticket
	 * 
	 */
	
	DECLARE vAlertLevel INT;
	
	SELECT s.alertLevel INTO vAlertLevel 
		FROM state s 
			JOIN ticketStateToday tst ON tst.state = s.id 
		WHERE tst.ticket = vTicketFk
		LIMIT 1;
	
	IF vAlertLevel < 2 THEN
	
		CALL vn.ticket_setState(vTicketFk, vStateCode);
	
	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 `ticketStateUpdate` */;
/*!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 `ticketStateUpdate`(vTicketFk INT, vStateCode VARCHAR(45))
BEGIN
	
	/*
	 * @deprecated:utilizar ticket_setState
	 */
	
	DECLARE vAlertLevel INT;

	SELECT s.alertLevel INTO vAlertLevel 
		FROM vn.state s
			JOIN vn.ticketState ts ON ts.stateFk = s.id
			WHERE ts.ticketFk = vTicketFk;
	
	IF !(vStateCode = 'ON_CHECKING' AND vAlertLevel > 1) THEN 
	
		INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
			SELECT id, vTicketFk, account.myUser_getId()
				FROM vn.state 
	            WHERE `code` = vStateCode collate utf8_unicode_ci;
           
     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 `ticketToInvoiceByAddress` */;
/*!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 `ticketToInvoiceByAddress`(
                                                            vStarted DATE,
															vEnded DATETIME,
															vAddress INT,
															vCompany INT
															)
BEGIN

	SET vEnded = util.dayEnd(vEnded);

    DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;

    CREATE TEMPORARY TABLE vn.ticketToInvoice
        SELECT id
            FROM vn.ticket
            WHERE addressFk = vAddress
                AND companyFk = vCompany
                AND shipped BETWEEN vStarted AND vEnded
                AND refFk IS NULL;

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 `ticketToInvoiceByDate` */;
/*!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 `ticketToInvoiceByDate`(
                                                            vStarted DATE,
															vEnded DATETIME,
															vClient INT,
															vCompany INT
															)
BEGIN

	SET vEnded = util.dayEnd(vEnded);

    DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;

    CREATE TEMPORARY TABLE vn.ticketToInvoice
        SELECT id
            FROM vn.ticket
            WHERE clientFk = vClient
                AND companyFk = vCompany
                AND shipped BETWEEN vStarted AND vEnded
                AND refFk IS NULL;

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 `ticketToInvoiceByRef` */;
/*!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 `ticketToInvoiceByRef`(IN vInvoiceRef VARCHAR(15))
BEGIN

/* Para tickets ya facturados, vuelve a repetir el proceso de facturación.
*
* @param vInvoiceRef Factura
*/

	DECLARE vInvoice INT;
    DECLARE vCountry INT;
    DECLARE vTaxArea VARCHAR(15);
    DECLARE vSpainCountryCode INT DEFAULT 1;
    
	SELECT id 
		    INTO vInvoice 
		FROM vn.invoiceOut 
        WHERE ref =  vInvoiceRef;
        
	SELECT s.countryFk 
			INTO vCountry
		FROM vn.supplier s
			JOIN vn.invoiceOut io ON io.companyFk = s.id
		WHERE io.id = vInvoice;
        
	SELECT IF(
				c.isEqualizated 
					AND c.countryFk = vSpainCountryCode 
					AND i.taxAreaFk = 'NATIONAL',
				'EQU',
                i.taxAreaFk
			)
			INTO vTaxArea
		FROM vn.invoiceOutSerial i
			JOIN vn.invoiceOut io ON io.serial = i.code 
			JOIN vn.client c ON c.id = io.clientFk
        WHERE io.id = vInvoice;
  
	DROP TEMPORARY TABLE IF EXISTS vn.ticketToInvoice;

	CREATE TEMPORARY TABLE vn.ticketToInvoice
        SELECT id 
            FROM vn.ticket 
            WHERE refFk = vInvoiceRef;

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 `ticketTrackingAdd` */;
/*!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 `ticketTrackingAdd`(vTicketFk INT, vState VARCHAR(25) CHARSET UTF8, vWorkerFk INT)
BEGIN
/**
 * Inserta un registro de cambios en un ticket.
 * @param vTicketFk Id del ticket
 * @param vState Código del estado
 * @param vWorkerFk Id del trabajador
 */
	INSERT INTO ticketTracking (stateFk, ticketFk, workerFk)
		SELECT s.id, vTicketFk, vWorkerFk FROM state s WHERE s.code = vState;
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_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 `ticket_add`(
	vClientId INT
	,vShipped DATE
	,vWarehouseFk INT
	,vCompanyFk INT
	,vAddressFk INT
	,vAgencyModeFk INT
	,vRouteFk INT
	,vlanded DATE
	,vUserId INT
	,vIsRequiredZone INT
	,OUT vNewTicket INT)
BEGIN
	DECLARE vZoneFk INT;
	DECLARE vPrice DECIMAL(10,2);
	DECLARE vBonus DECIMAL(10,2);
	DECLARE vIsActive BOOL;

	IF vClientId IS NULL THEN
		CALL util.throw ('CLIENT_NOT_ESPECIFIED');
	END IF;

	SELECT isActive INTO vIsActive
		FROM vn.client
		WHERE id = vClientId;

	IF NOT vIsActive THEN
		CALL util.throw ('CLIENT_NOT_ACTIVE');
	END IF;

	IF NOT vAddressFk OR vAddressFk IS NULL THEN
		SELECT id INTO vAddressFk
			FROM address
			WHERE clientFk = vClientId
				AND isDefaultAddress;
	END IF;

	IF vAgencyModeFk IS NOT NULL THEN
		CALL vn.zone_getShipped (vlanded, vAddressFk, vAgencyModeFk, TRUE);

		SELECT zoneFk, price, bonus
			INTO vZoneFk, vPrice, vBonus
			FROM tmp.zoneGetShipped
			WHERE shipped = vShipped
				AND warehouseFk = vWarehouseFk
			LIMIT 1;

		IF (vZoneFk IS NULL OR vZoneFk = 0) AND vIsRequiredZone THEN
			CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
		END IF;
	END IF;

	INSERT INTO ticket (
			clientFk,
			shipped,
			addressFk,
			agencyModeFk,
			nickname,
			warehouseFk,
			routeFk,
			companyFk,
			landed,
			zoneFk,
			zonePrice,
			zoneBonus
		)
		SELECT vClientId,
				vShipped,
				a.id,
				vAgencyModeFk,
				a.nickname,
				vWarehouseFk,
				IF(vRouteFk,vRouteFk,NULL),
				vCompanyFk,
				vlanded,
				vZoneFk,
				vPrice,
				vBonus
			FROM address a
				JOIN agencyMode am ON am.id = a.agencyModeFk
			WHERE a.id = vAddressFk;

	SET vNewTicket = LAST_INSERT_ID();

	INSERT INTO ticketObservation(ticketFk, observationTypeFk, description)
		SELECT vNewTicket, ao.observationTypeFk, ao.description
			FROM addressObservation ao
				JOIN address a ON a.id = ao.addressFk
			WHERE a.id = vAddressFk;

	IF (SELECT COUNT(*)
			FROM bs.clientNewBorn cnb
			WHERE cnb.clientFk = vClientId
				AND NOT cnb.isRookie) = 0 THEN

		CALL vn.ticketObservation_addNewBorn(vNewTicket);
	END IF;

	INSERT INTO vn.ticketLog
		SET originFk = vNewTicket, userFk = vUserId, `action` = 'insert', description = CONCAT('Ha creado el ticket:', ' ', vNewTicket);

	IF (SELECT ct.isCreatedAsServed FROM vn.clientType ct JOIN vn.client c ON c.typeFk = ct.code WHERE c.id = vClientId ) <> FALSE THEN
		INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
			SELECT id, vNewTicket, account.myUser_getId()
				FROM state
				WHERE `code` = 'DELIVERED';
	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 `ticket_administrativeCopy` */;
/*!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_administrativeCopy`(vOriginalTicket INT, OUT vNewTicket INT)
BEGIN
	
	INSERT INTO vn.ticket(clientFk, addressFk, shipped, warehouseFk, companyFk, landed)
		SELECT t.clientFk , t.addressFk , t.shipped ,w.id, t.companyFk , t.landed 
			FROM vn.ticket t
				JOIN vn.warehouse w ON w.name = 'INVENTARIO'
			WHERE t.id = vOriginalTicket;
			
	SELECT LAST_INSERT_ID() INTO vNewTicket;

	INSERT INTO vn.sale(ticketFk, itemFk, concept, quantity, price, discount)
		SELECT vNewTicket, s.itemFk , s.concept , s.quantity , s.price , s.discount 
			FROM vn.sale s
			WHERE s.ticketFk = vOriginalTicket;
		
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_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  = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection  = utf8mb4_unicode_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_canAdvance`(vDated DATE, vWarehouseFk INT)
BEGIN
/**
 * Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar.
 * 
 * @param vDated Fecha de los tickets que se quieren adelantar.
 * @param vWarehouseFk Almacén
 */
	DECLARE vDateInventory DATE;
	DECLARE vDateToAdvance DATE;

	SELECT inventoried INTO vDateInventory FROM vn.config;
	
	SET vDateToAdvance = TIMESTAMPADD(DAY,-1,vDated);

	DROP TEMPORARY TABLE IF EXISTS tmp.stock;
	CREATE 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 vn.itemTicketOut
				WHERE shipped >= vDateInventory
					AND shipped < vDated 
					AND warehouseFk = vWarehouseFk
			UNION ALL
			SELECT itemFk, quantity
				FROM vn.itemEntryIn
				WHERE landed >= vDateInventory
					AND landed < vDated
					AND isVirtualStock = FALSE
					AND warehouseInFk = vWarehouseFk
			UNION ALL
			SELECT itemFk, quantity
				FROM vn.itemEntryOut
				WHERE shipped >= vDateInventory 
					AND shipped < vDated 
					AND warehouseOutFk = vWarehouseFk
		) t
		GROUP BY itemFk HAVING amount != 0;

	SELECT s.ticketFk ticketFuture,
			sum((s.quantity <= IFNULL(st.amount,0))) hasStock,
			count(DISTINCT s.id) saleCount,
			st.name tfState,
			GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) tfIpt,
			t2.ticketFk,
			t2.state,
			t2.ipt
		FROM vn.ticket t
			JOIN vn.ticketState ts ON ts.ticketFk = t.id
			JOIN vn.state st ON st.id = ts.stateFk 
			LEFT JOIN (SELECT 
							t2.id ticketFk, 
							t2.addressFk,
							st.name state,
							GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt
						FROM vn.ticket t2
							JOIN vn.sale s ON s.ticketFk = t2.id
							JOIN vn.item i ON i.id = s.itemFk
							JOIN vn.ticketState ts ON ts.ticketFk = t2.id
							JOIN vn.state st ON st.id = ts.stateFk 
						WHERE t2.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
							AND t2.warehouseFk = vWarehouseFk
						GROUP BY t2.id) t2 ON t2.addressFk = t.addressFk
			JOIN vn.sale s ON s.ticketFk = t.id
			JOIN vn.item i ON i.id = s.itemFk
			LEFT JOIN tmp.stock st ON st.itemFk = s.itemFk 
		WHERE t.shipped BETWEEN vDated AND util.dayend(vDated)
			AND t.warehouseFk = vWarehouseFk
		GROUP BY t.id;
	
	DROP TEMPORARY TABLE tmp.stock;
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_canMerge` */;
/*!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_canMerge`(vDated DATE, vScopeDays INT, vLitersMax INT, vLinesMax INT, vWarehouseFk INT)
BEGIN
/**
 * Devuelve un listado de tickets susceptibles de fusionarse con otros tickets en el futuro
 * 
 * @param vDated Fecha en cuestión
 * @param vScopeDays Dias en el futuro a sondear
 * @param vLitersMax Volumen máximo de los tickets a catapultar
 * @param vLinesMax Número máximo de lineas de los tickets a catapultar
 * @param vWarehouseFk Identificador de vn.warehouse
 */
	SELECT 	sv.ticketFk , 
			GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt, 
			CAST(sum(litros) AS DECIMAL(10,0)) liters, 
			CAST(count(*) AS DECIMAL(10,0)) `lines`,  
			st.name state,
			sub2.id ticketFuture,
			sub2.shipped,
			sub2.iptd tfIpt,
			sub2.state tfState
		FROM vn.saleVolume sv 
			JOIN vn.sale s ON s.id = sv.saleFk 
			JOIN vn.item i ON i.id = s.itemFk 
			JOIN vn.ticket t ON t.id = sv.ticketFk 
			JOIN vn.address a ON a.id = t.addressFk 
			JOIN vn.province p ON p.id = a.provinceFk 
			JOIN vn.country c ON c.id = p.countryFk 
			JOIN vn.ticketState ts ON ts.ticketFk = t.id
			JOIN vn.state st ON st.id = ts.stateFk 
			JOIN vn.alertLevel al ON al.id = ts.alertLevel 
			LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
			LEFT JOIN (
				SELECT *
					FROM (
						SELECT 
							t.addressFk , 
							t.id, 
							t.shipped, 
							st.name state,
							GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) iptd
							FROM vn.ticket t 
								JOIN vn.ticketState ts ON ts.ticketFk = t.id
								JOIN vn.state st ON st.id = ts.stateFk 
								JOIN vn.sale s ON s.ticketFk = t.id 
								JOIN vn.item i ON i.id = s.itemFk 
							WHERE t.shipped BETWEEN TIMESTAMPADD(DAY, vScopeDays,vDated) 
											AND util.dayend(TIMESTAMPADD(DAY, vScopeDays,vDated)) 
								AND t.warehouseFk = vWarehouseFk
							GROUP BY t.id
					) sub 
					GROUP BY sub.addressFk
				) sub2 ON sub2.addressFk = t.addressFk AND t.id != sub2.id
		WHERE t.shipped BETWEEN vDated AND util.dayend(vDated)
			AND t.warehouseFk = vWarehouseFk
			AND al.code = 'FREE'
			AND tp.ticketFk IS NULL
		GROUP BY sv.ticketFk 
		HAVING liters <= vLitersMax AND `lines` <= vLinesMax AND ticketFuture;
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_changeClient` */;
/*!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_changeClient`(vNewClient INT, vUserFk INT)
BEGIN
    
/**
 * Dado un conjunto de tickets
 * cambia el cliente al nuevo cliente dado
 * 
 * params @vNewClient nuevo cliente
 * params @vUserFk usuario que realiza el cambio
 * 
 * table @tmp.ticket(ticketFk) conjunto de tickets
 */
    
    INSERT INTO ticketLog (originFk, userFk, `action`, changedModel, oldInstance, newInstance)
        SELECT t.id, vUserFk, 'update', 'Ticket', CONCAT('{"clientFk":',t.clientFk,'}'), CONCAT('{"clientFk":',vNewClient,'}')
            FROM ticket t
                JOIN tmp.ticket tt 
                    ON t.id = tt.ticketFk;
        
    UPDATE ticket t
        JOIN tmp.ticket tt
            ON t.id = tt.ticketFk
        SET t.clientFk = vNewClient;
    
    UPDATE ticket t
        JOIN tmp.ticket tt
            ON t.id = tt.ticketFk
        JOIN stowaway s
            ON s.shipFk = tt.ticketFk
        SET t.clientFk = vNewClient;
    
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_checkFullyControlled` */;
/*!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_checkFullyControlled`(vWorkerFk INT, vTicketFk INT )
BEGIN
/**
 * Comprueba que no hay ningún ticket pendiente de revisar de alguna colección que haya revisado el trabajador 
 * @param vWorkerFk id del user
 * @param vTicketFk número de ticket escaneada
 * 
 */
	 
	SELECT t.id
		FROM ticket t 
			JOIN sale s ON s.ticketFk = t.id 
			JOIN ticketCollection tc ON tc.ticketFk = t.id
			JOIN (SELECT tc.collectionFk 
					FROM ticketState ts 
						JOIN ticketCollection tc ON tc.ticketFk = ts.ticketFk
						LEFT JOIN (SELECT tc.collectionFk 
										FROM ticketCollection tc 
						                WHERE ticketFk = vTicketFk
							                AND tc.created >= CURDATE()
									)sub ON sub.collectionFk = tc.collectionFk
				    WHERE ts.workerFk = vWorkerFk
				    	 AND sub.collectionFk IS NULL
				    	 AND tc.created >= CURDATE()
					GROUP BY tc.collectionFk
				)sub ON sub.collectionFk = tc.collectionFk 
			JOIN ticketState ts ON ts.ticketFk  = t.id
			WHERE ts.code IN ('ON_PREPARATION', 'PREPARED', 'PREVIOUS_PREPARATION', 'OK PREVIOUS') 
				AND t.shipped >= CURDATE()
				AND s.quantity <>0
		LIMIT 1;
	
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_checkNoComponents` */;
/*!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_checkNoComponents`(vShippedFrom DATETIME, vShippedTo DATETIME)
BEGIN

/**
 * Comprueba que los tickets entre un rango de fechas tienen componentes
 *
 * @param vShippedFrom rango inicial de fecha 
 * @param vShippedTo rango final de fecha
 */
	DECLARE v_done BOOL DEFAULT FALSE;
	DECLARE vSaleFk INTEGER;
	DECLARE vCur CURSOR FOR
	SELECT s.id
		FROM ticket t
			JOIN client clt ON clt.id = t.clientFk
			JOIN sale s ON s.ticketFk = t.id
			JOIN item i ON i.id = s.itemFk
			JOIN itemType tp ON tp.id = i.typeFk
			JOIN itemCategory ic ON ic.id = tp.categoryFk
			LEFT JOIN tmp.coste c ON c.id = s.id
		WHERE t.shipped  >= vShippedFrom AND  t.shipped  <= vShippedTo
			AND c.id IS NULL
			AND clt.isActive != 0
			AND ic.merchandise != 0
		GROUP BY s.id;
	   
	  DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET v_done = TRUE; 

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;
	CREATE TEMPORARY TABLE tmp.coste
		 (primary key (id)) ENGINE = MEMORY
		SELECT s.id
		FROM ticket t
			JOIN client clt ON clt.id = t.clientFk
			JOIN sale s ON s.ticketFk = t.id
			JOIN item i ON i.id = s.itemFk
			JOIN itemType tp ON tp.id = i.typeFk
			JOIN itemCategory ic ON ic.id = tp.categoryFk
			JOIN saleComponent sc ON sc.saleFk = s.id
			JOIN component c ON c.id = sc.componentFk
			JOIN componentType ct ON ct.id = c.typeFk AND ct.id = 1
		WHERE t.shipped  >= vShippedFrom
			AND ic.merchandise != 0;
		
	OPEN vCur;

	l: LOOP
		SET v_done = FALSE;
		FETCH vCur INTO vSaleFk;

		IF v_done THEN
			LEAVE l;
		END IF;

		CALL sale_calculateComponent(vSaleFk, 1);
	END LOOP;

	CLOSE vCur; 
	DROP TEMPORARY TABLE tmp.coste;	
 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_Clone` */;
/*!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_Clone`(vOriginalTicket INT, OUT vNewTicket INT)
BEGIN
/**
 * Clona el contenido de un ticket en otro
 *
 * @param vOriginalTicket ticket Original
 * @param vNewTicket ticket creado
 */  
	DECLARE vStateFk INT;

	INSERT INTO ticket (
				clientFk,
				shipped,
				addressFk,
				agencyModeFk,
				nickname,
				warehouseFk,
				companyFk,
				landed,
				zoneFk,
                zonePrice,
                zoneBonus,
                routeFk,
                priority,
                hasPriority 
		)
		SELECT
				clientFk,
				shipped,
				addressFk,
				agencyModeFk,
				nickname,
				warehouseFk,
				companyFk,
				landed,
				zoneFk,
                zonePrice,
                zoneBonus,
                routeFk,
                priority,
                hasPriority 
		FROM ticket
		WHERE id = vOriginalTicket;

	SET vNewTicket = LAST_INSERT_ID();
    
	INSERT INTO ticketObservation(ticketFk, observationTypeFk, description)
		SELECT vNewTicket, ao.observationTypeFk, ao.description
			FROM addressObservation ao
				JOIN ticket t ON t.addressFk = ao.addressFk
			WHERE t.id = vNewTicket;
	
    INSERT INTO ticketLog
		SET originFk = vNewTicket, userFk = account.myUser_getId(), `action` = 'insert', 
			description = CONCAT('Ha creado el ticket:', ' ', vNewTicket, ' clonando el ', vOriginalTicket);
		
	INSERT INTO ticketLog
		SET originFk = vOriginalTicket, userFk = account.myUser_getId(), `action` = 'insert', 
			description = CONCAT('Ha creado el ticket:', ' ', vNewTicket, ' clonando el ', vOriginalTicket);

	INSERT INTO vncontrol.inter(Id_Ticket, state_id, Id_Trabajador, odbc_date)
		SELECT vNewTicket, state_id, Id_Trabajador , odbc_date
			FROM vncontrol.inter 
			WHERE Id_Ticket = vOriginalTicket
			ORDER BY odbc_date;
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_cloneWeekly` */;
/*!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_cloneWeekly`(IN vWeek INT)
BEGIN
	DECLARE vIsDone BOOL;
	DECLARE vLanding DATE;
	DECLARE vShipment DATE;
	DECLARE vWarehouseFk INT;
    DECLARE vTicketFk INT;
    DECLARE vWeekDay INT;
    DECLARE vClientFk INT;
    DECLARE vCompanyFk INT;
    DECLARE vAddressFk INT;
    DECLARE vAgencyModeFk INT;
    DECLARE vNewTicket INT;
    DECLARE vYear INT;
    
    DECLARE rsTicket CURSOR FOR
	SELECT tt.ticketFk, tt.weekDay, t.clientFk, t.warehouseFk, t.companyFk, t.addressFk, tt.agencyModeFk
		FROM vn.ticketWeekly tt 
		JOIN vn.ticket t ON tt.ticketFk = t.id;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vIsDone = TRUE;

    SET vYear = YEAR(CURDATE()) + IF(vWeek < WEEK(CURDATE()),1, 0);
    
	OPEN rsTicket;
	myLoop: LOOP
    BEGIN
        DECLARE vSalesPersonEmail VARCHAR(150);
        DECLARE vMailSent BOOL;
        DECLARE vSubject VARCHAR(150);
        DECLARE vMessage TEXT;

		SET vIsDone = FALSE;
		FETCH rsTicket INTO vTicketFk, vWeekDay, vClientFk, vWarehouseFk, vCompanyFk, vAddressFk, vAgencyModeFk;

		IF vIsDone THEN

			LEAVE myLoop;
		END IF;
		SELECT dated INTO vShipment 
			FROM `time`
			WHERE `year` = vYear AND `week` = vWeek
				AND WEEKDAY(dated) = vWeekDay;

        -- busca si el ticket ya ha sido clonado
        IF (SELECT COUNT(*) FROM vn.ticket tOrig
				JOIN vn.sale saleOrig ON tOrig.id = saleOrig.ticketFk
                JOIN vn.saleCloned sc ON sc.saleOriginalFk = saleOrig.id
                JOIN vn.sale saleClon ON saleClon.id = sc.saleClonedFk
                JOIN vn.ticket tClon ON tClon.id = saleClon.ticketFk
			WHERE tOrig.id = vTicketFk AND tClon.isDeleted = FALSE AND DATE(tClon.shipped) = vShipment) > 0 
		THEN
			ITERATE myLoop;
		END IF;
		
		IF vAgencyModeFk IS NULL THEN
			SELECT agencyModeFk INTO vAgencyModeFk 
	            FROM address
	            WHERE clientFk = vClientFk AND isDefaultAddress;
	    END IF;
	   
    	CALL vn.zone_getLanded(vShipment, vAddressFk, vAgencyModeFk, vWarehouseFk,FALSE);
		SET vLanding = NULL;
		SELECT landed INTO vLanding from tmp.zoneGetLanded LIMIT 1;
		
		CALL ticket_add(
			vClientFk, 
			vShipment, 
			vWarehouseFk, 
			vCompanyFk, 
			vAddressFk, 
			vAgencyModeFk, 
			NULL, 
			vLanding, 
			account.myUser_getId(), 
			FALSE, 
			vNewTicket);

		IF (vLanding IS NULL) THEN
			
			SELECT e.email INTO vSalesPersonEmail
				FROM vn.client c
					JOIN vn.worker sp ON sp.id = c.salesPersonFk
					JOIN account.emailUser e ON e.userFk = sp.userFk
				WHERE c.id = vClientFk;
		
			SET vSubject = CONCAT('Turnos - No se ha podido clonar correctamente el ticket ', vTicketFk,
						' para el dia: ', vShipment);
			SET vMessage = CONCAT('No se ha podido clonar el ticket ', vTicketFk, 
				' para el dia: ', vShipment, 
				' porque no hay una zona de envío disponible. Se ha creado el ticket: ', vNewTicket, 
				' pero ha que revisar las fechas y la agencia');
				
			SELECT COUNT(*) INTO vMailSent
				FROM vn.mail 
				WHERE receiver = vSalesPersonEmail 
					AND subject = vSubject;

			IF NOT vMailSent THEN
				CALL mail_insert(vSalesPersonEmail, NULL, vSubject, vMessage);
			END IF;
			CALL vn.ticketStateUpdate (vNewTicket, 'FIXING');
		END IF;
		
		INSERT INTO vn.sale (ticketFk, itemFk, concept, quantity, price, discount, priceFixed, isPriceFixed)
			SELECT vNewTicket, saleOrig.itemFk , saleOrig.concept , saleOrig.quantity, saleOrig.price , saleOrig.discount, saleOrig.priceFixed, saleOrig.isPriceFixed
				FROM vn.sale saleOrig 
				WHERE saleOrig.ticketFk = vTicketFk;        
        
		INSERT IGNORE INTO vn.saleCloned(saleOriginalFk, saleClonedFk)
			SELECT saleOriginal.id, saleClon.id 
				FROM vn.sale saleOriginal
					JOIN vn.sale saleClon ON saleOriginal.itemFk = saleClon.itemFk AND saleOriginal.quantity = saleClon.quantity
				WHERE saleOriginal.ticketFk = vTicketFk AND saleClon.ticketFk = vNewTicket;
				
		INSERT INTO ticketRequest (description,ordered,shipped,quantity,price,itemFk,clientFk,response,
					total,buyed,requesterFk,attenderFk,ticketFk)   
			SELECT description,ordered,shipped,quantity,price,itemFk,clientFk,response,
					total,buyed,requesterFk,attenderFk,vNewTicket 
				FROM ticketRequest
                    WHERE ticketFk =vTicketFk;
						
		INSERT INTO ticketObservation(ticketFk,observationTypeFk,description) VALUES(vNewTicket,4,CONCAT('turno desde ticket: ',vTicketFk))
			ON DUPLICATE KEY UPDATE description = CONCAT(ticketObservation.description,VALUES(description),' ');  
		
		INSERT INTO ticketObservation(ticketFk,observationTypeFk,description) VALUES(vNewTicket,1,'ATENCION: Contiene lineas de TURNO')
			ON DUPLICATE KEY UPDATE description = CONCAT(ticketObservation.description,VALUES(description),' ');  
	   
		CALL vn.ticketCalculateClon(vNewTicket, vTicketFk);
	END;
	END LOOP;

	CLOSE rsTicket;
    
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_close` */;
/*!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_close`()
BEGIN
/**
 * Realiza el cierre de todos los 
 * tickets de la tabla tmp.ticket_close.
 *
 * @table tmp.ticket_close(ticketFk) Identificadores de los tickets a cerrar
 */
	DECLARE vDone BOOL;
	DECLARE vClientFk INT;
    DECLARE vCurTicketFk INT;
	DECLARE vIsTaxDataChecked BOOL;
	DECLARE vCompanyFk INT;
	DECLARE vShipped DATE;
	DECLARE vNewInvoiceId INT;
	DECLARE vHasDailyInvoice BOOL;
	DECLARE vWithPackage BOOL;
    DECLARE vHasToInvoice BOOL;

	DECLARE cur CURSOR FOR
		SELECT ticketFk FROM tmp.ticket_close;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
		RESIGNAL;
	END;

	OPEN cur;

	proc: LOOP
		SET vDone = FALSE;
		
		FETCH cur INTO vCurTicketFk;

		IF vDone THEN
			LEAVE proc;
		END IF;

		-- Fetch ticket data
		SELECT
				c.id,
				c.isTaxDataChecked,
				t.companyFk,
				t.shipped,
				co.hasDailyInvoice,
				w.isManaged,
                c.hasToInvoice
			INTO vClientFk,
				vIsTaxDataChecked,
				vCompanyFk, 
				vShipped,
				vHasDailyInvoice,
				vWithPackage,
                vHasToInvoice
			FROM ticket t 
				JOIN `client` c ON c.id = t.clientFk
				JOIN province p ON p.id = c.provinceFk
				JOIN country co ON co.id = p.countryFk
				JOIN warehouse w ON w.id = t.warehouseFk
			WHERE t.id = vCurTicketFk;

		INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
			(SELECT vCurTicketFk, p.id, COUNT(*)
				FROM expedition e 
					JOIN packaging p ON p.itemFk = e.itemFk
				WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
					AND vWithPackage
				GROUP BY p.itemFk);

		-- No retornables o no catalogados
		INSERT INTO sale (itemFk, ticketFk, concept, quantity, price, isPriceFixed) 
			(SELECT e.itemFk, vCurTicketFk, i.name, COUNT(*) AS amount, getSpecialPrice(e.itemFk, vClientFk), 1 
				FROM expedition e 
					JOIN item i ON i.id = e.itemFk 
					LEFT JOIN packaging p ON p.itemFk = i.id
				WHERE e.ticketFk = vCurTicketFk AND IFNULL(p.isPackageReturnable, 0) = 0
					AND getSpecialPrice(e.itemFk, vClientFk) > 0
				GROUP BY e.itemFk);
			
		IF(vHasDailyInvoice) AND vHasToInvoice THEN

			-- Facturacion rapida
			CALL ticketTrackingAdd(vCurTicketFk, 'DELIVERED', NULL);
			-- Facturar si está contabilizado
			IF vIsTaxDataChecked THEN
				CALL invoiceOut_newFromClient(
					vClientFk, 
					(SELECT invoiceSerial(vClientFk, vCompanyFk, 'M')), 
					vShipped, 
					vCompanyFk, 
					NULL,
					NULL,
					vNewInvoiceId);
			END IF;
		ELSE
			CALL ticketTrackingAdd(vCurTicketFk, (SELECT vn.getAlert3State(vCurTicketFk)), NULL);
		END IF;
	END LOOP;

	CLOSE cur;
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_closeByTicket` */;
/*!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_closeByTicket`(IN vTicketFk int)
BEGIN

/**
 * Inserta el ticket en la tabla temporal
 * para ser cerrado.
 *
 * @param vTicketFk Id del ticket
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket_close;
	CREATE TEMPORARY TABLE tmp.ticket_close ENGINE = MEMORY (
		SELECT 
			t.id AS ticketFk
		FROM expedition e
			INNER JOIN ticket t ON t.id = e.ticketFk
			LEFT JOIN ticketState ts ON ts.ticketFk = t.id
		    JOIN alertLevel al ON al.id = ts.alertLevel
		WHERE 
			al.code = 'PACKED'
            AND t.id = vTicketFk
			AND t.refFk IS NULL
		GROUP BY e.ticketFk);
        
	CALL ticket_close();

    DROP TEMPORARY TABLE tmp.ticket_close;
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_componentMakeUpdate` */;
/*!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_componentMakeUpdate`(IN vTicketFk INT, IN vClientFk INT,
                                                            IN vNickname VARCHAR(50), IN vAgencyModeFk INT,
                                                            IN vAddressFk INT, IN vZoneFk INT, IN vWarehouseFk TINYINT,
                                                            IN vCompanyFk SMALLINT, IN vShipped DATETIME,
                                                            IN vLanded DATE, IN vIsDeleted TINYINT(1),
                                                            IN vHasToBeUnrouted TINYINT(1), IN vOption INT)
BEGIN
	
	/**
	 * Modifica en el ticket los campos que se le pasan por parámetro
	 * y cambia sus componentes
	 * 
	 * @param vTicketFk Id del ticket a modificar
	 * @param vClientFk nuevo cliente
	 * @param vNickname nuevo alias
	 * @param vAgencyModeFk nueva agencia
	 * @param vAddressFk nuevo consignatario
	 * @param vZoneFk nueva zona
	 * @param vWarehouseFk nuevo almacen
	 * @param vCompanyFk nueva empresa
	 * @param vShipped nueva fecha del envio de mercancia
	 * @param vLanded nueva fecha de recepcion de mercancia
	 * @param vIsDeleted si se borra el ticket
	 * @param vHasToBeUnrouted si se le elimina la ruta  al ticket
	 * @param vOption opcion para el case del proc ticketComponentUpdateSale
	 */
	
	DECLARE vPrice DECIMAL(10,2);
	DECLARE vBonus DECIMAL(10,2);

	CALL ticket_componentPreview (vTicketFk, vLanded, vAddressFk, vZoneFk, vWarehouseFk);

	IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
			
		UPDATE ticket t 
				JOIN address a ON a.id = vAddressFk
			SET t.nickname = a.nickname
			WHERE t.id = vTicketFk;
			
	END IF;

	CALL zone_getShipped(vLanded, vAddressFk, vAgencyModeFk, TRUE);

	SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus 
		FROM tmp.zoneGetShipped
		WHERE shipped BETWEEN DATE(vShipped) AND util.dayEnd(vShipped)  AND warehouseFk = vWarehouseFk LIMIT 1;
			
	UPDATE ticket t
		SET 
			t.clientFk = vClientFk,
		    t.nickname = vNickname,
			t.agencyModeFk = vAgencyModeFk,
			t.addressFk = vAddressFk,
			t.zoneFk = vZoneFk,
			t.zonePrice = vPrice,
			t.zoneBonus = vBonus,
			t.warehouseFk = vWarehouseFk,
			t.companyFk = vCompanyFk,
			t.landed = vLanded,
			t.shipped = vShipped,
			t.isDeleted = vIsDeleted
		WHERE
			t.id = vTicketFk;
			
	IF vHasToBeUnrouted THEN
		UPDATE ticket t SET t.routeFk = NULL
			WHERE t.id = vTicketFk;
	END IF;
			
	IF vOption <> 8 THEN
		DROP TEMPORARY TABLE IF EXISTS tmp.sale;
		CREATE TEMPORARY TABLE tmp.sale
			(PRIMARY KEY (saleFk))
			ENGINE = MEMORY
			SELECT id AS saleFk, vWarehouseFk warehouseFk
				FROM sale s WHERE s.ticketFk = vTicketFk;

		DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
		CREATE TEMPORARY TABLE tmp.ticketComponent
			SELECT * FROM tmp.ticketComponentPreview;

		CALL ticketComponentUpdateSale (vOption);

		DROP TEMPORARY TABLE tmp.sale;
		DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
	END IF;

	DROP TEMPORARY TABLE tmp.zoneGetShipped, tmp.ticketComponentPreview;
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_componentPreview` */;
/*!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_componentPreview`(
	vTicketFk INT,
    vLanded DATE, 
    vAddressFk INT,
    vZoneFk INT,
    vWarehouseFk SMALLINT)
BEGIN
/**
 * Calcula los componentes de los articulos de un ticket
 *
 * @param vTicketFk id del ticket
 * @param vLanded nueva fecha de entrega
 * @param vAddressFk nuevo consignatario
 * @param vZoneFk nueva zona
 * @param vWarehouseFk nuevo warehouse
 *
 * @return tmp.ticketComponentPreview (warehouseFk, itemFk, componentFk, cost)
 */
	DECLARE vHasDataChanged BOOL DEFAULT FALSE;    
	DECLARE vHasAddressChanged BOOL;
	DECLARE vHasZoneChanged BOOL DEFAULT FALSE;
	DECLARE vHasWarehouseChanged BOOL DEFAULT FALSE;

	DECLARE vShipped DATE;
	DECLARE vAddressTypeRateFk INT DEFAULT NULL;
	DECLARE vAgencyModeTypeRateFk INT DEFAULT NULL;

	DECLARE vHasChangeAll BOOL DEFAULT FALSE;

	SELECT DATE(landed) <> vLanded, 
			addressFk <> vAddressFk, 
			zoneFk <> vZoneFk,
			warehouseFk <> vWarehouseFk
		INTO
			vHasDataChanged,
			vHasAddressChanged,
			vHasZoneChanged,
			vHasWarehouseChanged
		FROM vn.ticket t
		WHERE t.id = vTicketFk;

	IF vHasDataChanged OR vHasWarehouseChanged THEN
		SET vHasChangeAll = TRUE;
	END IF;

	IF vHasAddressChanged THEN
		SET vAddressTypeRateFk = 5;
	END IF;

	IF vHasZoneChanged THEN
		SET vAgencyModeTypeRateFk = 6;
	END IF;

	SELECT TIMESTAMPADD(DAY, -travelingDays, vLanded) INTO vShipped 
		FROM zone
		WHERE id = vZoneFk;
		
	CALL buyUltimate(vWarehouseFk, vShipped);
		
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
	CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY ( 
	SELECT 
			vWarehouseFk AS warehouseFk,
			NULL AS available,
			s.itemFk,
			bu.buyFk,
			vZoneFk zoneFk
		FROM sale s
			LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
		WHERE s.ticketFk = vTicketFk
		GROUP BY bu.warehouseFk, bu.itemFk);

	CALL catalog_componentPrepare();
	CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);

	REPLACE INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
		SELECT t.warehouseFk, s.itemFk, sc.componentFk, sc.value
			FROM saleComponent sc
				JOIN sale s ON s.id = sc.saleFk
				JOIN ticket t ON t.id = s.ticketFk
				JOIN `component` c ON c.id = sc.componentFk
			WHERE s.ticketFk = vTicketFk 
				AND (c.isRenewable = FALSE 
					OR 
					(NOT vHasChangeAll
						AND (NOT (c.typeFk <=> vAddressTypeRateFk
						OR c.typeFk <=> vAgencyModeTypeRateFk))));

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPreview;
	CREATE TEMPORARY TABLE tmp.ticketComponentPreview
		SELECT * FROM tmp.ticketComponent;

	CALL catalog_componentPurge();
	DROP TEMPORARY TABLE tmp.buyUltimate;

	IF vShipped IS NULL THEN
		CALL util.throw('NO_ZONE_AVAILABLE');
	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 `ticket_DelayTruck` */;
/*!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_DelayTruck`(vWarehouserFk INT, vHour INT, vMinute INT)
BEGIN
	
	DECLARE done INT DEFAULT FALSE;
	DECLARE vTicketFk INT;
	DECLARE cur1 CURSOR FOR SELECT ticketFk FROM tmp.ticket;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	CALL vn.productionControl(vWarehouserFk,0) ;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
	SELECT ticketFk
	FROM tmp.productionBuffer
	WHERE shipped = curdate()
		AND problem LIKE '%I:%'
		AND (HH <= vHour OR HH = vHour AND mm < vMinute)
		AND alertLevel = 0;

	OPEN cur1;

 	read_loop: LOOP
 
    FETCH cur1 INTO vTicketFk;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
    
    	CALL vn.ticket_DelayTruckSplit(vTicketFk);
    
  	END LOOP;

  	CLOSE cur1;
	
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_DelayTruckSplit` */;
/*!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_DelayTruckSplit`(vTicketFk INT)
BEGIN
	
	/*
	 *  Splita las lineas de ticket que no estan ubicadas
	 * 
	 */
	
	DECLARE vNewTicketFk INT;
	DECLARE vTotalLines INT;
	DECLARE vLinesToSplit INT;

	DROP TEMPORARY TABLE IF EXISTS tmp.SalesToSplit;
	
	SELECT COUNT(*) INTO vTotalLines
		FROM vn.sale 
		WHERE ticketFk = vTicketFk;
    		
	CREATE TEMPORARY TABLE tmp.SalesToSplit
		SELECT s.id saleFk
			FROM vn.ticket t
    			JOIN vn.sale s ON t.id = s.ticketFk 
    			LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = s.itemFk AND issw.warehouseFk = t.warehouseFk 
          	WHERE s.quantity > IFNULL(issw.visible, 0)
	            AND s.quantity > 0
	            AND s.isPicked = FALSE
	            AND s.reserved = FALSE
	            AND t.id = vTicketFk;
    	
	SELECT COUNT(*) INTO vLinesToSplit
		FROM tmp.SalesToSplit;
	
	IF vLinesToSplit = vTotalLines AND vLinesToSplit > 0 THEN
	
		SET vNewTicketFk = vTicketFk;
	
	ELSE
	
		CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
	
		UPDATE vn.sale s 
			JOIN tmp.SalesToSplit sts ON sts.saleFk = s.id 
			SET s.ticketFk = vNewTicketFk;
	
	END IF;
    		
	CALL vn.ticketStateUpdate(vNewTicketFk, 'FIXING');
	
	DROP TEMPORARY TABLE tmp.SalesToSplit;

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_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 vError 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;
		GET DIAGNOSTICS CONDITION 2 @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
		SET vError = IFNULL(@errno, 0);
		IF NOT(vError = 1105 OR vError = 1751) THEN
			CALL `vn`.`mail_insert`('cau@verdnatura.es',
				NULL,
				'Problema al recalcular el total de ticket',
				CONCAT('Se ha detectado un problema en ticket_doRecalc al calcular el total del ticket : ', 
							vTicketFk,' el error es el: ',
				CONCAT('ERROR ', IFNULL(@errno, 0), ': ', ifnull(@text, '')))
			);
		END IF;
		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);
	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_doRefund` */;
/*!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_doRefund`(OUT vNewTicket INT)
BEGIN
/**
 * Crea un ticket de abono a partir de tmp.sale y/o tmp.ticketService
 *
 * @return vNewTicket
 */
	DECLARE vDone BIT DEFAULT 0;
	DECLARE vClientFk MEDIUMINT;
	DECLARE vWarehouse TINYINT;
	DECLARE vCompany MEDIUMINT;
	DECLARE vAddress MEDIUMINT;
	DECLARE vRefundAgencyMode INT;
	DECLARE vItemFk INT;
	DECLARE vQuantity DECIMAL (10,2);
	DECLARE vConcept VARCHAR(50);
	DECLARE vPrice DECIMAL (10,2);
	DECLARE vDiscount TINYINT;
	DECLARE vSaleNew INT;
	DECLARE vSaleMain INT;
	DECLARE vZoneFk INT;
	DECLARE vDescription VARCHAR(50);
	DECLARE vTaxClassFk INT;
	DECLARE vTicketServiceTypeFk INT;
	DECLARE vOriginTicket INT;

	DECLARE cSales CURSOR FOR
		SELECT s.id, s.itemFk, - s.quantity, s.concept, s.price, s.discount
			FROM tmp.sale s;

	DECLARE cTicketServices CURSOR FOR
		SELECT ts.description, - ts.quantity, ts.price, ts.taxClassFk, ts.ticketServiceTypeFk
			FROM tmp.ticketService ts;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	SELECT sub.ticketFk INTO vOriginTicket
		FROM (
			SELECT s.ticketFk
				FROM tmp.sale s
			UNION ALL
			SELECT ts.ticketFk
				FROM tmp.ticketService ts
		) sub
		LIMIT 1;

	SELECT id INTO vRefundAgencyMode
		FROM agencyMode WHERE `name` = 'ABONO';

	SELECT clientFk, warehouseFk, companyFk, addressFk
			INTO vClientFk, vWarehouse, vCompany, vAddress
		FROM ticket
		WHERE id = vOriginTicket;

	SELECT id INTO vZoneFk
		FROM zone WHERE agencyModeFk = vRefundAgencyMode
		LIMIT 1;

	INSERT INTO vn.ticket (
			clientFk,
			shipped,
			addressFk,
			agencyModeFk,
			nickname,
			warehouseFk,
			companyFk,
			landed,
			zoneFk
		)
		SELECT
				vClientFk,
				CURDATE(),
				vAddress,
				vRefundAgencyMode,
				a.nickname,
				vWarehouse,
				vCompany,
				CURDATE(),
				vZoneFk
			FROM address a
			WHERE a.id = vAddress;

	SET vNewTicket = LAST_INSERT_ID();

	SET vDone := FALSE;
	OPEN cSales;
	FETCH cSales INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount;

	WHILE NOT vDone DO
		INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount)
			VALUES( vNewTicket, vItemFk, vQuantity, vConcept, vPrice, vDiscount );

		SET vSaleNew = LAST_INSERT_ID();

		INSERT INTO vn.saleComponent(saleFk,componentFk,`value`)
			SELECT vSaleNew,componentFk,`value`
				FROM vn.saleComponent
				WHERE saleFk = vSaleMain;

		FETCH cSales INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount;
	END WHILE;
	CLOSE cSales;

	SET vDone := FALSE;
	OPEN cTicketServices;
	FETCH cTicketServices INTO vDescription, vQuantity, vPrice, vTaxClassFk, vTicketServiceTypeFk;

	WHILE NOT vDone DO
		INSERT INTO vn.ticketService(description, quantity, price, taxClassFk, ticketFk, ticketServiceTypeFk)
			VALUES(vDescription, vQuantity, vPrice, vTaxClassFk, vNewTicket, vTicketServiceTypeFk);

		FETCH cTicketServices INTO vDescription, vQuantity, vPrice, vTaxClassFk, vTicketServiceTypeFk;
	END WHILE;

	CLOSE cTicketServices;

	INSERT INTO vn.ticketRefund(refundTicketFk, originalTicketFk)
		VALUES(vNewTicket, vOriginTicket);
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 */ ;
/*!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_getFromFloramondo`(vDateFrom DATE, vDateTo DATE)
BEGIN
/**
 * Genera una tabla con la lista de tickets de Floramondo
 * para una fecha determinada.
 *
 * @param vDated Fecha de preparación de los pedidos
 * @table tmp.ticketFloramondo(ticketFk, clientName, agencyName,
 * agencyModeFk, supplierName, supplierFk, freight, expeditionCount,
 * margin, trolleys, pallets, shipped, created)
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketFloramondo;
	CREATE TEMPORARY TABLE tmp.ticketFloramondo
		(ticketFk INT PRIMARY KEY,
		clientName VARCHAR(50),
		agencyName VARCHAR(50),
		agencyModeFk INT,
		supplierName VARCHAR(50),
		supplierFk INT,
		freight DECIMAL(10,2) DEFAULT 0,
		expeditionCount INT,
		margin DECIMAL(10,3) DEFAULT 0,
		trolleys INT DEFAULT 0,
		pallets INT DEFAULT 0,
		shipped DATE,
		created DATE)
		ENGINE = MEMORY;

	INSERT INTO tmp.ticketFloramondo(ticketFk,
			clientName,
			agencyName,
			agencyModeFk,
			shipped,
			supplierName,
			supplierFk,
			created)
		SELECT t.id ticketFk,
				t.nickname,
				am.name,
				am.id,
				t.shipped,
				s.name,
				sat.supplierFk,
				t.created
			FROM vn.ticket t
				JOIN vn.agencyMode am ON am.id = t.agencyModeFk
				JOIN vn.warehouse w ON w.id = t.warehouseFk
					AND w.code IN ('VNH','FLM')
					AND t.shipped BETWEEN vDateFrom AND util.dayend(vDateTo)
				JOIN vn.agency a ON a.id = am.agencyFk
				LEFT JOIN vn.supplierAgencyTerm sat ON sat.agencyFk = a.id
				LEFT JOIN vn.supplier s ON s.id = sat.supplierFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		(ticketFk INT(11) PRIMARY KEY)
		SELECT ticketFk
			FROM tmp.ticketFloramondo;

	-- Freight
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT SUM(sc.value * s.quantity) freight, t.ticketFk
				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 tmp.ticket t ON t.ticketFk = s.ticketFk
				WHERE ct.code = 'FREIGHT'
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.freight = sb.freight;

	-- Freight service
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT SUM(ts.price * ts.quantity) service, t.ticketFk
				FROM vn.ticketService ts
					JOIN tmp.ticket t ON t.ticketFk = ts.ticketFk
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.freight = tf.freight + sb.service;

	-- Expedition Count
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT COUNT(e.id) expeditionCount, t.ticketFk
				FROM vn.expedition e
					RIGHT JOIN tmp.ticket t ON t.ticketFk = e.ticketFk
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.expeditionCount = sb.expeditionCount;

	-- Margin
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT SUM(IF(ct.code = 'COST',sc.value, 0)) cost,
					SUM(IF(ct.isMargin, sc.value, 0)) margin,
					t.ticketFk
				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 tmp.ticket t ON t.ticketFk = s.ticketFk
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.margin = sb.margin / sb.cost;

	-- Trolleys
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT SUM(tp.quantity) trolleys, t.ticketFk
				FROM vn.ticketPackaging tp
					JOIN tmp.ticket t ON t.ticketFk = tp.ticketFk
					JOIN vn.packaging p ON p.id = tp.packagingFk
					WHERE p.isTrolley
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.trolleys = sb.trolleys;

	-- Pallets
	UPDATE tmp.ticketFloramondo tf
		JOIN (SELECT SUM(tp.quantity) pallets, t.ticketFk
				FROM vn.ticketPackaging tp
					JOIN tmp.ticket t ON t.ticketFk = tp.ticketFk
					JOIN vn.packaging p ON p.id = tp.packagingFk
					WHERE p.isPallet
				GROUP BY t.ticketFk) sb ON sb.ticketFk = tf.ticketFk
		SET tf.pallets = sb.pallets;

	SELECT * FROM tmp.ticketFloramondo;

	DROP TEMPORARY TABLE tmp.ticket;
	DROP TEMPORARY TABLE tmp.ticketFloramondo;
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_getMovable` */;
/*!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_getMovable`(vTicketFk INT, vDatedNew DATETIME, vWarehouseFk INT)
BEGIN
/**
 * Cálcula el stock movible para los artículos de un ticket
 * vDatedNew debe ser menor que vDatedOld, en los otros casos se
 * asume que siempre es posible
 *
 * @param vTicketFk -> Ticket
 * @param vDatedNew -> Nueva fecha
 * @return Sales con Movible
*/    
    DECLARE vDatedOld DATETIME;
	SET vDatedNew = DATE_ADD(vDatedNew, INTERVAL 1 DAY);

    SELECT t.shipped INTO vDatedOld
        FROM ticket t 
        WHERE t.id = vTicketFk;

    CALL itemStock(vWarehouseFk, vDatedNew, NULL); 
    CALL item_getMinacum(vWarehouseFk, vDatedNew, DATEDIFF(DATE_SUB(vDatedOld, INTERVAL 1 DAY), vDatedNew), NULL);
	
    SELECT s.id, 
			s.itemFk, 
			s.quantity, 
			s.concept, 
			s.price, 
			s.reserved,
			s.discount,  
			i.image, 
			i.subName, 
			il.stock + 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 
            LEFT JOIN tmp.itemMinacum im ON im.itemFk = s.itemFk AND im.warehouseFk = vWarehouseFk
            LEFT JOIN tmp.itemList il ON il.itemFk = s.itemFk
        WHERE t.id = vTicketFk;

    DROP TEMPORARY TABLE IF EXISTS tmp.itemList;
    DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum; 
    
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_getProblems` */;
/*!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_getProblems`(IN vIsTodayRelative tinyint(1))
BEGIN
/**
 * Calcula los problemas para un conjunto de tickets.
 * Agrupados por ticket
 *
 * @table tmp.sale_getProblems(ticketFk, clientFk, warehouseFk, shipped) Identificadores de los tickets a calcular
 * @return tmp.ticket_problems
 */
	CALL sale_getProblems(vIsTodayRelative);

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket_problems;
	CREATE TEMPORARY TABLE tmp.ticket_problems 
	(PRIMARY KEY (ticketFk))
	ENGINE = MEMORY
	SELECT 
		ticketFk,
		MAX(p.isFreezed)            AS isFreezed,
		MAX(p.risk)                 AS risk,
		MAX(p.hasHighRisk)          AS hasHighRisk,
		MAX(p.hasTicketRequest)     AS hasTicketRequest,
		MIN(p.isAvailable)          AS isAvailable,
		MAX(p.itemShortage)         AS itemShortage,
		MIN(p.isTaxDataChecked)     AS isTaxDataChecked,
		MAX(p.hasComponentLack)     AS hasComponentLack,
		MAX(p.isTooLittle) 			AS isTooLittle,
		MAX(p.itemDelay)			AS itemDelay,
		MAX(p.itemLost)				AS itemLost,
		0 AS totalProblems
	FROM tmp.sale_problems p
		GROUP BY ticketFk;

	UPDATE tmp.ticket_problems tp
		SET tp.totalProblems = 
		(
			(tp.isFreezed) +
			IF(tp.risk, TRUE, FALSE) +
			(tp.hasTicketRequest) +
			(tp.isAvailable = 0) +
			(tp.isTaxDataChecked = 0) +
			(tp.hasComponentLack) +
			(tp.itemDelay) +
			(tp.isTooLittle) +
			(tp.itemLost) +
			(tp.itemShortage)
		);

	DROP TEMPORARY TABLE
		tmp.sale_problems;
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_getShip` */;
/*!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_getShip`(vTicketFk INT)
BEGIN
	SELECT s.shipFk FROM vn.stowaway s
    WHERE s.id = vTicketFk;
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_getSplitList` */;
/*!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_getSplitList`(vDated DATE, vHour TIME, vWarehouseFk INT)
BEGIN
/**
 * Devuelve un listado con los tickets posibles para splitar HOY.
 *
 * @param vDated Fecha a estudiar
 * @param vHour Hora a partir de la cual todavía se puede enviar, si la fecha es la de hoy
 * @param vWarehouseFk Almacén
 */
	DECLARE vAvailableCache INT;
	DECLARE vVisibleCache INT;

	CALL cache.available_refresh(vAvailableCache, FALSE, vWarehouseFk, CURDATE());
	CALL cache.visible_refresh(vVisibleCache, FALSE, vWarehouseFk);
	CALL `vn`.`zoneClosure_recalc`();

	DROP TEMPORARY TABLE IF EXISTS tmp.salesToSplit;

	CREATE TEMPORARY TABLE tmp.salesToSplit
		(saleFk INT PRIMARY KEY,
		ticketFk INT,
		problem VARCHAR(1)) ENGINE = MEMORY;
	
	INSERT INTO tmp.salesToSplit(saleFk, ticketFk, problem)
			SELECT 	s.id, s.ticketFk, 'F'
				FROM vn.ticket t
					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 
					LEFT JOIN cache.visible v ON v.item_id = i.id AND v.calc_id = vVisibleCache
					LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache
					LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
				WHERE IFNULL(v.visible,0) < s.quantity
					AND IFNULL(av.available ,0) < s.quantity
					AND IFNULL(issw.visible, 0) < s.quantity
					AND s.isPicked = FALSE
					AND s.reserved = FALSE
					AND ic.merchandise = TRUE
					AND t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
					AND NOT i.generic
					AND t.warehouseFk = vWarehouseFk;
				
	INSERT IGNORE INTO tmp.salesToSplit(saleFk, ticketFk, problem)
			SELECT 	s.id, s.ticketFk, 'I'
				FROM vn.ticket t 
					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
					LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCache
					LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
				WHERE IFNULL(v.visible,0) >= s.quantity
					AND IFNULL(issw.visible, 0) < s.quantity
					AND s.quantity > 0
					AND s.isPicked = FALSE
					AND s.reserved = FALSE
					AND ic.merchandise = TRUE
					AND t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
					AND NOT i.generic
					AND t.warehouseFk = vWarehouseFk;
				
	INSERT IGNORE INTO tmp.salesToSplit(saleFk, ticketFk, problem)
			SELECT 	s.id, s.ticketFk, 'R'
				FROM vn.ticket t
					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
					LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCache
					LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache
					LEFT JOIN vn.itemShelvingStock_byWarehouse issw ON issw.itemFk = i.id AND issw.warehouseFk = t.warehouseFk 
				WHERE IFNULL(v.visible,0) < s.quantity
					AND IFNULL(av.available ,0) >= s.quantity
					AND IFNULL(issw.visible, 0) < s.quantity
					AND s.quantity > 0
					AND s.isPicked = FALSE
					AND s.reserved = FALSE
					AND ic.merchandise = TRUE
					AND t.shipped BETWEEN CURDATE() AND util.dayend(CURDATE())
					AND NOT i.generic
					AND t.warehouseFk = vWarehouseFk;
		
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketsToSplit;

	CREATE TEMPORARY TABLE tmp.ticketsToSplit
		(ticketFk INT PRIMARY KEY,
		problems VARCHAR(100),
		addressFk INT,
		ipt VARCHAR(10),
		etd TIME) ENGINE = MEMORY;

	INSERT INTO tmp.ticketsToSplit
	SELECT
		ss.ticketFk,
		GROUP_CONCAT(DISTINCT ss.problem ORDER BY ss.problem) problems,
		t.addressFk,
		GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt,
		zc.`hour` etd
		FROM tmp.salesToSplit ss
			JOIN vn.ticket t ON t.id = ss.ticketFk
			JOIN vn.sale s ON s.id = ss.saleFk
			JOIN vn.item i ON i.id = s.itemFk
			LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk 
		GROUP BY ss.ticketFk;
	
	SELECT 
		ts.*, 
		t.id ticketFuture,
		st.name state,
		zc.`hour` tfEtd,
		GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) tfIpt,
		st2.name tfState
		FROM tmp.ticketsToSplit ts
			LEFT JOIN vn.ticketState ts2 ON ts2.ticketFk = ts.ticketFk
			LEFT JOIN vn.state st ON st.id = ts2.stateFk
		LEFT JOIN vn.ticket t 
			ON t.id != ts.ticketFk 
			AND t.addressFk = ts.addressFk
			AND t.shipped BETWEEN vDated AND util.dayend(vDated)
		LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk  AND zc.dated = vDated
		LEFT JOIN vn.sale s ON s.ticketFk = t.id
		LEFT JOIN vn.item i ON i.id = s.itemFk
		LEFT JOIN vn.ticketState tst ON tst.ticketFk = t.id 
		LEFT JOIN vn.state st2 ON st2.id = tst.stateFk
		WHERE (t.id IS NULL 
			OR (vDated > CURDATE())
			OR (vDated = CURDATE() AND vHour >= zc.`hour`))
			AND ts.etd <= vHour
		GROUP BY ts.ticketFk, t.id
		ORDER BY ts.etd, ts.ticketFk;
		
	DROP TEMPORARY TABLE 
		tmp.ticketsToSplit;
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_getTax` */;
/*!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_getTax`(IN vTaxArea VARCHAR(25))
BEGIN
/**
 * Calcula la base imponible, el IVA y el recargo de equivalencia para
 * un conjunto de tickets.
 *
 * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
 * @return tmp.ticketAmount (ticketFk, taxableBase, tax, code)
 * @return tmp.ticketTax (ticketFk, pgcFk, taxableBase, rate, code) Impuesto desglosado para cada ticket.
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
	CREATE TEMPORARY TABLE tmp.addressCompany
		(INDEX (addressFk, companyFk))
		ENGINE = MEMORY
		SELECT DISTINCT t.addressFk, t.companyFk
			FROM tmp.ticket tmpTicket
				JOIN ticket t ON t.id = tmpTicket.ticketFk;

	CALL addressTaxArea ();
 
	IF vTaxArea > '' THEN
		UPDATE tmp.addressTaxArea
			SET areaFk = vTaxArea;
	END IF;
	/* Solo se calcula la base imponible (taxableBase) y el impuesto se calculará posteriormente
	* No se debería cambiar el sistema por problemas con los decimales
	*/

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketTax;
	CREATE TEMPORARY TABLE tmp.ticketTax
		(PRIMARY KEY (ticketFk, code, rate))
		ENGINE = MEMORY
		SELECT * FROM (
			SELECT tmpTicket.ticketFk,
					bp.pgcFk,
					SUM(s.quantity * s.price * (100 - s.discount)/100 ) AS taxableBase,
					pgc.rate,
					tc.code,
					bp.priority
				FROM tmp.ticket tmpTicket
					JOIN sale s ON s.ticketFk = tmpTicket.ticketFk
					JOIN item i ON i.id = s.itemFk
					JOIN ticket t ON t.id = tmpTicket.ticketFk
					JOIN supplier su ON su.id = t.companyFk
					JOIN tmp.addressTaxArea ata
						ON ata.addressFk = t.addressFk AND ata.companyFk = t.companyFk
					JOIN itemTaxCountry itc
						ON itc.itemFk = i.id AND itc.countryFk = su.countryFk
					JOIN bookingPlanner bp
						ON bp.countryFk = su.countryFk
							AND bp.taxAreaFk = ata.areaFk
							AND bp.taxClassFk = itc.taxClassFk
					JOIN pgc ON pgc.code = bp.pgcFk
					JOIN taxClass tc ON tc.id = bp.taxClassFk
				GROUP BY tmpTicket.ticketFk, pgc.code, pgc.rate
				HAVING taxableBase != 0) t3
			ORDER BY priority;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketServiceTax;
	CREATE TEMPORARY TABLE tmp.ticketServiceTax
		(PRIMARY KEY (ticketFk, code, rate))
		ENGINE = MEMORY
		SELECT tt.ticketFk,
				pgc.code pgcFk,
				SUM(ts.quantity * ts.price) AS taxableBase,
				pgc.rate,
				tc.code
			FROM tmp.ticket tt
				JOIN ticketService ts ON ts.ticketFk = tt.ticketFk
				JOIN ticket t ON t.id = tt.ticketFk
				JOIN supplier su ON su.id = t.companyFk
				JOIN tmp.addressTaxArea ata
					ON ata.addressFk = t.addressFk AND ata.companyFk = t.companyFk
				JOIN bookingPlanner bp
					ON bp.countryFk = su.countryFk
						AND bp.taxAreaFk = ata.areaFk
						AND bp.taxClassFk = ts.taxClassFk
				JOIN pgc ON pgc.code = bp.pgcFk
				JOIN taxClass tc ON tc.id = bp.taxClassFk
			GROUP BY tt.ticketFk, pgc.code
			HAVING taxableBase != 0;

	INSERT INTO tmp.ticketTax (ticketFk, pgcFk, taxableBase, rate, code)
		SELECT ts.ticketFk, ts.pgcFk, ts.taxableBase, ts.rate, ts.code
			FROM tmp.ticketServiceTax ts
	ON DUPLICATE KEY UPDATE ticketTax.taxableBase = VALUES (taxableBase) + ticketTax.taxableBase ;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketAmount;
	CREATE TEMPORARY TABLE tmp.ticketAmount
		(INDEX (ticketFk))
		ENGINE = MEMORY
		SELECT ticketFk, 
				taxableBase, 
				SUM(CAST(taxableBase * rate / 100 AS DECIMAL(10, 2))) tax,
				code
			FROM tmp.ticketTax
			GROUP BY ticketFk, code;

	DROP TEMPORARY TABLE tmp.addressCompany;
	DROP TEMPORARY TABLE tmp.addressTaxArea;
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_insertZone` */;
/*!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_insertZone`()
BEGIN
	DECLARE vDone INT DEFAULT 0;
    DECLARE vFechedTicket INT;
    DECLARE vLanded DATE;
    DECLARE vAddressFk INT;
    DECLARE vAgencyModeFk INT;
    DECLARE vWarehouseFk INT;
	DECLARE vCursor CURSOR FOR 
		SELECT id, landed, addressFk, agencyModeFk, warehouseFk
        FROM vn.ticket WHERE shipped > '2020-01-01' AND zoneFk is null;
	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET vDone = 1;
    
    OPEN vCursor;
    REPEAT
		FETCH vCursor INTO vFechedTicket, vLanded, vAddressFk, vAgencyModeFk, vWarehouseFk;
        CALL vn.zone_getShipped (vlanded, vAddressFk, vAgencyModeFk, TRUE);
        
        UPDATE vn.ticket t
			JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = vWarehouseFk
			SET t.zoneFk = zgs.zoneFk
		WHERE t.id = vFechedTicket;
        
     UNTIL vDone END REPEAT;
	DROP TEMPORARY TABLE tmp.zoneGetShipped;
    
    CLOSE vCursor;
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_merge` */;
/*!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_merge`(vSelf INT, vTicketTargetFk INT)
BEGIN
	
	/**
	 *  Fusiona el primer ticket al segundo
	 * 
	 * @param vSelf Número de ticket a fusionar
	 * @param vTicketTargetFk Ticket destino
	 * 
	 */
	
	UPDATE vn.sale s 
		SET s.ticketFk = vTicketTargetFk
		WHERE s.ticketFk = vSelf;
	
	UPDATE vn.ticket t 
		SET t.shipped = TIMESTAMPADD(YEAR, - YEAR(NOW()) MOD 2000, t.shipped )
		WHERE t.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 `ticket_priceDifference` */;
/*!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_priceDifference`(
	vTicketFk INT,
    vLanded DATE, 
    vAddressFk INT,
    vZoneFk INT,
    vWarehouseFk INT)
BEGIN
/**
 * Devuelve las diferencias de precio de los movimientos de un ticket.
 * 
 * @param vTicketFk Id del ticket
 * @param vLanded Fecha de recepcion
 * @param vAddressFk Id del consignatario
 * @param vZoneFk Id de la zona
 * @param vWarehouseFk Id del almacén
 */
	CALL vn.ticket_componentPreview(vTicketFk, vLanded, vAddressFk, vZoneFk, vWarehouseFk);

	SELECT 	s.itemFk, 
			i.name, 
			i.size, 
			i.category, 
			IFNULL(s.quantity, 0) AS quantity, 
			IFNULL(s.price, 0) AS price, 
			ROUND(SUM(tc.cost), 2) AS newPrice,
			s.quantity * (s.price - ROUND(SUM(tc.cost), 2)) difference,
			s.id AS saleFk
		FROM sale s
			JOIN item i ON i.id = s.itemFk 
			JOIN ticket t ON t.id = s.ticketFk 
			LEFT JOIN tmp.ticketComponentPreview tc ON tc.itemFk = s.itemFk 
				AND tc.warehouseFk = vWarehouseFk
			LEFT JOIN saleComponent sc ON sc.saleFk = s.id 
				AND sc.componentFk = tc.componentFk
			LEFT JOIN `component` c ON c.id = tc.componentFk 
		WHERE t.id = vTicketFk 
			AND IF(sc.componentFk IS NULL 
			AND c.classRate IS NOT NULL, FALSE, TRUE) 
		GROUP BY s.id ORDER BY s.id;

	DROP TEMPORARY TABLE tmp.ticketComponentPreview;
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_recalc` */;
/*!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_recalc`(vTicketId INT)
BEGIN
/**
 * Calcula y guarda el total con/sin IVA en un ticket.
 *
 * @param vTicketId Identificador del ticket
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
	CREATE TEMPORARY TABLE tmp.ticket
		ENGINE = MEMORY
		SELECT vTicketId ticketFk;

	CALL ticketGetTotal;

	UPDATE ticket t
			JOIN tmp.ticketTotal tt ON tt.ticketFk = t.id
		SET t.totalWithVat = tt.total,
			t.totalWithoutVat = tt.totalWithoutVat;

	DROP TEMPORARY TABLE
		tmp.ticket,
		tmp.ticketTotal;
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_recalcComponents` */;
/*!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_recalcComponents`(IN vTicketFk BIGINT, vIsTicketEditable BOOLEAN)
proc: BEGIN

/**
 * Este procedimiento recalcula los componentes de un ticket, 
 * eliminando los componentes existentes e insertandolos de nuevo
 *
 * @param vTicketFk Id del ticket
 * @param vIsTicketEditable si no se quiere forzar llamar con NULL
 */
	DECLARE vShipped DATE;
	DECLARE vWarehouseFk SMALLINT;
    DECLARE vAgencyModeFk INT;
    DECLARE vAddressFk INT;
    DECLARE vLanded DATE;
    DECLARE vZoneFk INTEGER;
   
	IF vIsTicketEditable IS NULL THEN
		SELECT IFNULL(ts.alertLevel,0) = 0 AND IFNULL(t.refFk,'') = ''
				INTO vIsTicketEditable
			FROM ticket t LEFT JOIN ticketState ts ON t.id = ts.ticket
			WHERE id = vTicketFk;
	END IF;

	SELECT t.warehouseFk, 
			t.shipped, 
			t.addressFk, 
            t.agencyModeFk, 
			t.landed,
			t.zoneFk
			INTO vWarehouseFk, vShipped, vAddressFk, vAgencyModeFk, vLanded, vZoneFk
		FROM ticket t LEFT JOIN ticketState ts ON t.id = ts.ticket
		WHERE t.id = vTicketFk;

	CALL zone_getLanded(vShipped, vAddressFk, vAgencyModeFk, vWarehouseFk, TRUE);

	IF (SELECT COUNT(*) FROM tmp.zoneGetLanded LIMIT 1) = 0 THEN
		CALL util.throw('There is no zone for these parameters');
	END IF;

	IF vLanded IS NULL OR vZoneFk IS NULL THEN

		UPDATE ticket t
			SET t.landed = (SELECT landed FROM tmp.zoneGetLanded LIMIT 1) 
			WHERE t.id = vTicketFk AND t.landed IS NULL;

		IF vZoneFk IS NULL THEN
			SELECT zoneFk INTO vZoneFk FROM tmp.zoneGetLanded LIMIT 1;
			UPDATE ticket t
				SET t.zoneFk = vZoneFk
				WHERE t.id = vTicketFk AND t.zoneFk IS NULL;
		END IF;
		
	END IF;
	
    DROP TEMPORARY TABLE tmp.zoneGetLanded;

	-- rellena la tabla buyUltimate con la ultima compra	
	CALL buyUltimate (vWarehouseFk, vShipped);  
	
    DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
    CREATE TEMPORARY TABLE tmp.ticketLot 
	SELECT vWarehouseFk warehouseFk, NULL available,
		s.itemFk, bu.buyFk, vZoneFk zoneFk
			FROM sale s
				LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
			WHERE s.ticketFk = vTicketFk 
			GROUP BY s.itemFk;
	                
	CALL catalog_componentPrepare();
	CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk);

	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
				(PRIMARY KEY (saleFk)) ENGINE = MEMORY
			SELECT id saleFk, vWarehouseFk warehouseFk
				FROM sale s
				WHERE s.ticketFk = vTicketFk;  
                  
	-- si el ticket esta facturado, respeta los precios                               
	CALL ticketComponentUpdateSale(IF(vIsTicketEditable, 1, 6)); 
    
    CALL catalog_componentPurge();
	DROP TEMPORARY TABLE 
		tmp.buyUltimate, 
		tmp.sale;
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_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              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `ticket_setNextState` */;
/*!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_setNextState`(vSelf INT)
BEGIN
/**
 * Cambia el estado del ticket al siguiente estado según la tabla state
 *
 * @param vSelf id dle ticket
 */
	DECLARE vStateFk INT;
	DECLARE vNewStateFk INT;

	SELECT stateFk INTO vStateFk
		FROM ticketState
		WHERE ticketFk = vSelf;

	SELECT nextStateFk INTO vNewStateFk
		FROM state
		WHERE id = vStateFk;

	INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
		VALUES (vNewStateFk, vSelf, account.myUser_getId());
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_setParking` */;
/*!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_setParking`(IN `vTicketFk` VARCHAR(8), IN `vParkingFk` INT)
proc: BEGIN
/**
 * Aparca un ticket en un parking
 *
 * @param vTicketFk id del ticket
 * @param vParkingFk id del parking
 */
	DECLARE vDone INT DEFAULT FALSE;
	DECLARE vCollectionTicketFk INT;
	DECLARE vCursor CURSOR FOR
		SELECT IFNULL(tc2.ticketFk, t.id)
			FROM ticket t
				LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id
				LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk
			WHERE t.id = vTicketFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	INSERT INTO vn.ticketParking(ticketFk, parkingFk)
		SELECT IFNULL(tc2.ticketFk, t.id), vParkingFk
			FROM ticket t
				LEFT JOIN ticketCollection tc1 ON tc1.ticketFk = t.id
				LEFT JOIN ticketCollection tc2 ON tc2.collectionFk = tc1.collectionFk
			WHERE t.id = vTicketFk
		ON DUPLICATE KEY UPDATE parkingFk = vParkingFk;

	OPEN vCursor;
	l: LOOP
		FETCH vCursor INTO vCollectionTicketFk;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL vn.ticket_setNextState(vCollectionTicketFk);
	END LOOP;

	CLOSE vCursor;
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_setPreviousState` */;
/*!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_setPreviousState`(vTicketFk INT)
BEGIN
	DECLARE vControlFk INT;

	SELECT MAX(inter_id) INTO vControlFk
		FROM vncontrol.inter
		WHERE Id_Ticket = vTicketFk;

	IF (SELECT s.code
			FROM vn.state s
				JOIN vncontrol.inter i ON i.state_id = s.id
			WHERE i.inter_id = vControlFk)
		= 'PREVIOUS_PREPARATION' THEN
		SELECT inter_id
				INTO vControlFk
			FROM vncontrol.inter i
				JOIN vn.state s ON i.state_id = s.id
			WHERE Id_Ticket = vTicketFk
				AND inter_id < vControlFk
				AND s.code != 'PREVIOUS_PREPARATION'
			ORDER BY inter_id DESC
			LIMIT 1;

		INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
			SELECT s.nextStateFk, i.Id_Ticket, account.myUser_getId()
				FROM vncontrol.inter i
					JOIN vn.state s ON i.state_id = s.id
				WHERE inter_id = vControlFk;
	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 `ticket_setState` */;
/*!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_setState`(vSelf INT, vStateCode VARCHAR(255))
BEGIN
/**
 * Modifica el estado de un ticket si se cumplen las condiciones necesarias.
 *
 * @param vSelf el id del ticket
 * @param vStateCode estado a modificar del ticket
 */
	DECLARE vAlertLevel INT;
	DECLARE vCurrentStateCode VARCHAR(255);
	DECLARE vCanChangeState BOOL;
	DECLARE vPackedState INT;

	SELECT s.alertLevel, s.`code`
		INTO vAlertLevel, vCurrentStateCode
		FROM state s
			JOIN ticketState ts ON ts.stateFk = s.id
		WHERE ts.ticketFk = vSelf;

	SELECT id INTO vPackedState
		FROM alertLevel
		WHERE code = 'PACKED';

	SET vCanChangeState = (vStateCode <> 'ON_CHECKING' OR vAlertLevel < vPackedState)
		AND NOT (
			vCurrentStateCode IN ('CHECKED', 'CHECKING')
			AND vStateCode IN ('PREPARED', 'ON_PREPARATION')
		);

	IF vCanChangeState THEN
		INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
			SELECT id, vSelf, account.myUser_getId()
				FROM state
				WHERE `code` = vStateCode COLLATE utf8_unicode_ci;
	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 `ticket_split` */;
/*!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_split`(vTicketFk INT, vTicketFutureFk INT, vDated DATE)
proc:BEGIN
/**
 * Mueve las lineas con problemas a otro ticket existente o a uno nuevo.
 *
 * @param vTicketFk Identificador del ticket a splittar
 * @param vTicketFutureFk Identificador del ticket al que se quieren mover las lineas
 * @param vDate Fecha a la que se va a mover
 * @table tmp.salesToSplit(saleFk, ticketFk, problem)
 */
	DECLARE vHasFullProblem BOOL;
	DECLARE vProblemLines INT;
	DECLARE vTotalLines INT;

	SELECT COUNT(*) INTO vProblemLines
		FROM tmp.salesToSplit
		WHERE ticketFk = vTicketFk;
	
	SELECT count(*) INTO vTotalLines
		FROM vn.sale s 
		WHERE s.ticketFk = vTicketFk;
	
	SET vHasFullProblem = (vTotalLines = vProblemLines);

	-- Ticket completo
	IF vHasFullProblem THEN
	
		UPDATE vn.ticket
			SET landed =  vDated + 1,
				shipped = vDated,
				nickname = CONCAT('(',DAY(curdate()),') ', nickname )
			WHERE id = vTicketFk;
		
		SELECT CONCAT("Se ha cambiado el ticket ", vTicketFk, " al dia ", vDated);
		LEAVE proc;
	
	END IF;

	-- Ticket a futuro existe
	IF vTicketFutureFk THEN
	
		UPDATE vn.sale s 
			JOIN tmp.salesToSplit ss ON s.id = ss.saleFk
			SET s.ticketFk = vTicketFutureFk,
				s.concept = CONCAT('(s) ', s.concept)
			WHERE ss.ticketFk = vTicketFk;
		
		SELECT CONCAT("Se han movido lineas del ticket ", vTicketFk, 
						" al ticket existente ", vTicketFutureFk,"(", vDated,")");
		LEAVE proc;
	
	END IF;

	-- Ticket nuevo
	CALL vn.ticket_Clone(vTicketFk, vTicketFutureFk);

	UPDATE vn.ticket t
		JOIN vn.productionConfig pc
		SET t.landed =  vDated + 1,
			t.shipped = vDated,
			t.agencyModeFk = pc.defautlAgencyMode,
			t.zoneFk = pc.defaultZone 
		WHERE t.id = vTicketFutureFk;
	
	UPDATE vn.sale s 
		JOIN tmp.salesToSplit sts ON sts.saleFk = s.id 
		SET s.ticketFk = vTicketFutureFk,
			s.concept = CONCAT('(s) ', s.concept)
		WHERE sts.ticketFk = vTicketFk;

	CALL vn.ticketStateUpdate(vTicketFutureFk, 'FIXING');

	SELECT CONCAT("Se han movido lineas del ticket ", vTicketFk, 
						" al nuevo ticket ", vTicketFutureFk,"(", vDated,")");
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_splitItemPackingType` */;
/*!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_splitItemPackingType`(vTicketFk INT)
proc:BEGIN
	
	/*
	 * Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado
	 *
	 * @param vTicketFk Identificador de vn.ticket 
	 * @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
	 */
	
	
	DECLARE vItemPackingTypeFk VARCHAR(1);

	DECLARE vNewTicketFk INT;

	DECLARE vPackingTypesToSplit INT;

	DECLARE vDone INT DEFAULT FALSE;
	
	DECLARE cur1 CURSOR FOR 
		SELECT itemPackingTypeFk 
			FROM tmp.saleGroup 
			WHERE itemPackingTypeFk IS NOT NULL;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
		(PRIMARY KEY (id))
		SELECT s.id, i.itemPackingTypeFk , sv.litros 
			FROM vn.sale s
				JOIN vn.item i ON i.id = s.itemFk 
				JOIN vn.saleVolume sv ON sv.saleFk = s.id
				LEFT JOIN vn.saleTracking st ON st.saleFk = s.id
			WHERE s.ticketFk = vTicketFk
				AND ISNULL(st.id);
		
	DROP TEMPORARY TABLE IF EXISTS tmp.saleGroup;
	CREATE TEMPORARY TABLE tmp.saleGroup
		SELECT itemPackingTypeFk , sum(litros) AS totalLitros
			FROM tmp.sale
			GROUP BY itemPackingTypeFk;	
		
	SELECT COUNT(*) INTO vPackingTypesToSplit
		FROM tmp.saleGroup
		WHERE itemPackingTypeFk IS NOT NULL;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketIPT;
	CREATE TEMPORARY TABLE tmp.ticketIPT
		(ticketFk INT,
		itemPackingTypeFk VARCHAR(1));

	CASE vPackingTypesToSplit
	
		WHEN 0 THEN
		
			INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
				VALUES(vTicketFk, 'H');
		
		WHEN 1 THEN
		
			INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
				SELECT vTicketFk, itemPackingTypeFk
					FROM tmp.saleGroup
					WHERE itemPackingTypeFk IS NOT NULL;
		ELSE

			OPEN cur1;

			FETCH cur1 INTO vItemPackingTypeFk;
		
			INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
				VALUES(vTicketFk, vItemPackingTypeFk);
				
 			read_loop: LOOP
 
    			FETCH cur1 INTO vItemPackingTypeFk;
    
				    IF vDone THEN
				      LEAVE read_loop;
				    END IF;
    
		    	CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
		    
		    	INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
					VALUES(vNewTicketFk, vItemPackingTypeFk);
		    
		  END LOOP;
		
		  CLOSE cur1;
		 
		  UPDATE vn.sale s 
		  		JOIN tmp.sale ts ON ts.id = s.id
		  		JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
		  		SET s.ticketFk = t.ticketFk;
 
		  SELECT itemPackingTypeFk INTO vItemPackingTypeFk
			  	FROM tmp.saleGroup sg 
			  		WHERE NOT ISNULL(sg.itemPackingTypeFk)
			  	ORDER BY sg.totalLitros
			  	LIMIT 1;
		  
		  UPDATE vn.sale s 
		  		JOIN tmp.sale ts ON ts.id = s.id 
		  		JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = vItemPackingTypeFk
		  		SET s.ticketFk = t.ticketFk
		  		WHERE ISNULL(ts.itemPackingTypeFk);
		  	
	END CASE;
		
	DROP TEMPORARY TABLE tmp.sale;
	DROP TEMPORARY TABLE tmp.saleGroup;
		
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_splitPackingComplete` */;
/*!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_splitPackingComplete`(vTicketFk INT, vSectorFk INT)
BEGIN
	
		DECLARE vNeedToSplit BOOLEAN;
		DECLARE vNewTicketFk INT;
	
		DROP TEMPORARY TABLE IF EXISTS tmpSale;
	
		CREATE TEMPORARY TABLE tmpSale
			SELECT DISTINCT s.id
				FROM vn.ticket t 
					JOIN vn.sale s ON s.ticketFk = t.id
					JOIN vn.item i ON i.id = s.itemFk 
					LEFT JOIN vn.itemShelvingStock iss ON iss.itemFk = s.itemFk AND iss.sectorFk = vSectorFk
					JOIN vn.packagingConfig pc 
					WHERE t.id = vTicketFk
					AND (	s.quantity MOD IFNULL(iss.packing,1) != 0
						OR 
						 	IFNULL(iss.packing,1) = 1
						OR 
							i.`size` <= pc.previousPreparationMinimumSize
						);
		
		SELECT COUNT(*) 
			INTO vNeedToSplit
			FROM tmpSale; 
		
		IF vNeedToSplit THEN
		
			CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
		
			UPDATE vn.sale s
				JOIN vn.tmpSale ts ON ts.id = s.id 
				SET s.ticketFk = vNewTicketFk;
		
		END IF;
	
		DROP TEMPORARY TABLE tmpSale;
	
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_WeightDeclaration` */;
/*!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_WeightDeclaration`(vClientFk INT, vDated DATE)
BEGIN

	DECLARE vTheorycalWeight DECIMAL(10,2);
    DECLARE vRealWeight DECIMAL(10,2);
    DECLARE vRatio DOUBLE;

	SELECT IFNULL(sum(tob.description),0) INTO vRealWeight
		FROM vn.ticketObservation tob
			JOIN vn.observationType ot ON ot.id = tob.observationTypeFk
            JOIN vn.ticket t ON t.id = tob.ticketFk
            WHERE ot.description = 'Peso Aduana'
				AND t.clientFk = vClientFk
                AND t.shipped BETWEEN vDated AND util.dayend(vDated);
                
	SELECT sum(IF(sv.physicalWeight = 0, sv.weight, sv.physicalWeight)) INTO vTheorycalWeight
		FROM vn.ticket t
			JOIN vn.sale s ON s.ticketFk = t.id
            JOIN vn.saleVolume sv ON sv.saleFk = s.id
            JOIN vn.item i ON i.id = s.itemFk
            JOIN vn.itemCost ic ON ic.itemFk = i.id AND ic.warehouseFk = t.warehouseFk
		WHERE t.clientFk = vClientFk
                AND t.shipped BETWEEN vDated AND util.dayend(vDated);
                
	SET vRatio = vRealWeight / vTheorycalWeight;
                
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketWeight;

	CREATE TEMPORARY TABLE tmp.ticketWeight
		ENGINE = MEMORY
		SELECT 	i.intrastatFk,
				ib.ediBotanic,
                FLOOR(sum(s.quantity)) as quantity,
                CAST(vRatio * SUM(IF(sv.physicalWeight = 0, sv.weight, sv.physicalWeight) ) AS DECIMAL(10,2)) physicalWeight,
                o.code as countryCode,
                vDated as Dated
			FROM vn.ticket t
				JOIN vn.sale s ON s.ticketFk = t.id
				JOIN vn.saleVolume sv ON sv.saleFk = s.id
                JOIN vn.item i ON i.id = s.itemFk
                LEFT JOIN vn.itemBotanicalWithGenus ib ON ib.itemFk = i.id
                LEFT JOIN vn.origin o ON o.id = i.originFk
			WHERE t.clientFk = vClientFk
                AND t.shipped BETWEEN vDated AND util.dayend(vDated)
			GROUP BY ib.ediBotanic, o.code;

    
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 `timeBusiness_calculate` */;
/*!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 `timeBusiness_calculate`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN
/**
 * Horas que debe trabajar un empleado según contrato y día. 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 * @table tmp.user(userFk)
 * @return tmp.timeBusinessCalculate
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate;

	CREATE TEMPORARY TABLE tmp.timeBusinessCalculate
		SELECT dated, 
				businessFk,
				userFk, 
				departmentFk, 
				hourStart,
				hourEnd,
				timeTable,
				timeWorkSeconds,
				SEC_TO_TIME(timeWorkSeconds) timeWorkSexagesimal,
				timeWorkSeconds / 3600 timeWorkDecimal,
				timeWorkSeconds timeBusinessSeconds,
				SEC_TO_TIME(timeWorkSeconds) timeBusinessSexagesimal,
				timeWorkSeconds / 3600 timeBusinessDecimal,
				name type,
				permissionRate,
				hoursWeek,
				discountRate,
				isAllowedToWork
			FROM(SELECT t.dated,
						b.business_id businessFk,
						w.userFk,
						bl.department_id departmentFk,  
						IF(j.start = NULL, NULL, GROUP_CONCAT(DISTINCT LEFT(j.start,5) ORDER BY j.start ASC SEPARATOR ' - ')) hourStart , 
						IF(j.start = NULL, NULL, GROUP_CONCAT(DISTINCT LEFT(j.end,5) ORDER BY j.end ASC SEPARATOR ' - ')) hourEnd,
						IF(j.start = NULL, NULL, GROUP_CONCAT(DISTINCT LEFT(j.start,5), " - ",  LEFT(j.end,5) ORDER BY j.end ASC SEPARATOR ' - ')) timeTable,
						IF(j.start = NULL, 0, IFNULL(SUM(TIME_TO_SEC(j.end)) - SUM(TIME_TO_SEC(j.start)),0)) timeWorkSeconds,
						at2.name,
						at2.permissionRate,
						at2.discountRate,
						cl.hours_week hoursWeek,
						at2.isAllowedToWork
					FROM time t
						LEFT JOIN postgresql.business b ON t.dated BETWEEN b.date_start AND IFNULL(b.date_end, vDatedTo )
						LEFT JOIN postgresql.profile pr ON b.client_id = pr.profile_id
						LEFT JOIN worker w ON w.id = pr.workerFk
						JOIN tmp.`user` u ON u.userFK = w.userFK
						JOIN postgresql.business_labour bl ON b.business_id = bl.business_id
						LEFT JOIN postgresql.business_labour_payroll bp ON bl.business_id = bp.business_id
						LEFT JOIN postgresql.professional_category pc ON bl.professional_category_id = pc.professional_category_id
						LEFT JOIN workCenter wc ON bl.workcenter_id = wc.id
						LEFT JOIN postgresql.calendar_labour_type cl ON bl.calendar_labour_type_id = cl.calendar_labour_type_id
						LEFT JOIN postgresql.journey j ON j.business_id = b.business_id AND j.day_id=WEEKDAY(t.dated)+1
						LEFT JOIN postgresql.calendar_employee ce ON ce.business_id=b.business_id AND ce.date = t.dated 
						LEFT JOIN absenceType at2 ON at2.id = ce.calendar_state_id
					WHERE t.dated BETWEEN vDatedFrom AND vDatedTo
					GROUP BY w.userFk,dated
				)sub;

	UPDATE tmp.timeBusinessCalculate t
		LEFT JOIN  postgresql.journey j ON j.business_id = t.businessFk
		SET t.timeWorkSeconds = t.hoursWeek / 5 * 3600,
			t.timeWorkSexagesimal = SEC_TO_TIME( t.hoursWeek / 5 * 3600), 
			t.timeWorkDecimal =  t.hoursWeek / 5, 
			t.timeBusinessSeconds = t.hoursWeek / 5 * 3600,
			t.timeBusinessSexagesimal = SEC_TO_TIME( t.hoursWeek / 5 * 3600), 
			t.timeBusinessDecimal = t.hoursWeek / 5
		WHERE DAYOFWEEK(t.dated) IN(2,3,4,5,6) AND j.journey_id IS NULL  ;

	UPDATE tmp.timeBusinessCalculate t     
		SET t.timeWorkSeconds = t.timeWorkSeconds - (t.timeWorkSeconds * permissionRate)  ,
			t.timeWorkSexagesimal = SEC_TO_TIME ((t.timeWorkDecimal - (t.timeWorkDecimal * permissionRate)) * 3600),
			t.timeWorkDecimal = t.timeWorkDecimal - (t.timeWorkDecimal * permissionRate)
		WHERE permissionRate <> 0;      

	UPDATE tmp.timeBusinessCalculate t     
		JOIN calendarHolidays ch ON ch.dated = t.dated
		JOIN postgresql.business_labour bl ON bl.business_id = t.businessFk AND bl.workcenter_id = ch.workcenterFk 
		SET t.timeWorkSeconds = 0,
			t.timeWorkSexagesimal = 0, 
			t.timeWorkDecimal = 0,
			t.permissionrate = 1,
			t.type = 'Festivo'
		WHERE t.type IS NULL;

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 `timeBusiness_calculateAll` */;
/*!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 `timeBusiness_calculateAll`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.`user`;

	CREATE TEMPORARY TABLE IF NOT EXISTS tmp.`user` 
		SELECT userFk
			FROM vn.worker w
				JOIN vn.`user` u ON u.id = w.userFk
			WHERE userFk IS NOT NULL;
        
	CALL vn.timeBusiness_calculate(vDatedFrom, vDatedTo);

	DROP TEMPORARY TABLE tmp.`user`;
 
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 `timeBusiness_calculateByDepartment` */;
/*!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 `timeBusiness_calculateByDepartment`(vDepartmentFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vDepartmentFk 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT DISTINCT w.userFk
		FROM postgresql.business AS b 
			LEFT JOIN postgresql.profile AS pr ON pr.profile_id = b.client_id
			LEFT JOIN postgresql.business_labour AS bl ON b.business_id = bl.business_id
			LEFT JOIN worker AS w ON w.id = pr.workerFk
			LEFT JOIN department AS d ON bl.department_id = d.id
		WHERE (b.date_start BETWEEN vDatedFrom  AND vDatedTo 
				OR IFNULL(b.date_end, vDatedTo)  BETWEEN vDatedFrom  AND vDatedTo
				OR (b.date_start <= vDatedFrom AND b.date_end >= vDatedTo)
			) AND bl.department_id = vDepartmentFk
		ORDER BY b.date_end DESC;
        
  CALL timeBusiness_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeBusiness_calculateByUser` */;
/*!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 `timeBusiness_calculateByUser`(vUserFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vUserFk 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT id userFk
		FROM user 
        WHERE id = vUserFk; 
  CALL vn.timeBusiness_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeBusiness_calculateByWorker` */;
/*!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 `timeBusiness_calculateByWorker`(vWorkerFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vWorkerFk
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT u.id userFk
		FROM vn.user u
			JOIN vn.worker w ON w.userFk = u.id
        WHERE w.id = vWorkerFk;
        
  CALL vn.timeBusiness_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeControl_calculate` */;
/*!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 `timeControl_calculate`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN
/*
 * @param vDatedFrom
 * @param vDatedTo 
 * Calculo de horas trabajadas por empleado y dia, sin tener encuenta los dias con fichadas incorrectas
 * segun la tabla tmp.timeControlError
 * @return tmp.timeControlCalculate (workerFk, dated, timeWorkSeconds, timeWorkSexagesimal, timeWorkDecimal, timed)
 */
	DECLARE vHourToSeconds INTEGER;
	DECLARE vDatedFromYesterday DATETIME;
	DECLARE vDatedToTomorrow DATETIME; 
	DECLARE vTimeToBreakTime INT;
	DECLARE vBreakTime INT;
	
	SELECT DATE_SUB(vDatedFrom, INTERVAL 1 DAY), DATE_ADD(vDatedTo, INTERVAL 1 DAY) 
		INTO vDatedFromYesterday, vDatedToTomorrow;
	
	SELECT timeToBreakTime, breakTime INTO vTimeToBreakTime, vBreakTime 
		FROM workerTimeControlConfig LIMIT 1;

	CALL timeControl_getError(vDatedFrom, vDatedTo);

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControl;
	CREATE TEMPORARY TABLE tmp.workerTimeControl
			(INDEX (userFk), INDEX (timed))
			ENGINE = MEMORY
		SELECT DISTINCT(wtc.id), 
				wtc.userFk, 
				wtc.timed, 
				wtc.direction,
				TRUE isReal
			FROM workerTimeControl wtc
				JOIN tmp.`user` w ON w.userFk = wtc.userFk
				LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
			WHERE wtc.timed BETWEEN vDatedFromYesterday AND vDatedToTomorrow
				AND tce.id IS NULL
			ORDER BY wtc.userFk, wtc.timed ASC;

	SELECT MAX(id) INTO @vCont 
		FROM tmp.workerTimeControl;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlAux; 
	CREATE TEMPORARY TABLE tmp.workerTimeControlAux (
		`id` int(11) ,
		`userFk` int(10) unsigned ,
		`timed` datetime,
		`direction` enum('in', 'out','middle')
		) ENGINE=MEMORY;


	SET @counter := 0;
	SET @vIsOdd := FALSE;

	-- Cambio de dia en medio de un descanso
	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1 id, userFk, util.dayEnd(dated) timed, 'middle' direction
			FROM(SELECT wtc.userFk,
						DATE(@lastTimed) dated,
						(@vIsOdd := NOT @vIsOdd) isOdd,
						IF(@vIsOdd AND wtc.direction = 'middle' AND DATE(timed) <> DATE(@lastTimed), TRUE, FALSE) hasBreak,
						@lastTimed := wtc.timed
					FROM tmp.workerTimeControl wtc
					ORDER BY wtc.userFk, wtc.timed
				)sub
			WHERE hasBreak;

	SET @counter := 0;
	SET @vIsOdd := FALSE;

	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1, userFk, DATE_ADD(sub.dated, INTERVAL 1 DAY), 'middle'
			FROM(SELECT wtc.userFk,
						DATE(@lastTimed) dated,
						(@vIsOdd := NOT @vIsOdd) isOdd,
						IF(@vIsOdd AND wtc.direction = 'middle' AND DATE(timed) <> DATE(@lastTimed), TRUE, FALSE) hasBreak,
						@lastTimed := wtc.timed
					FROM tmp.workerTimeControl wtc
					ORDER BY wtc.userFk, wtc.timed
				)sub
			WHERE hasBreak;

	-- Cambio de dia
	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1 id, sub.userFk, util.dayEnd(sub.dated) timed, 'out' direction
			FROM (SELECT MAX(wtc.timed) timed, wtc.userFk, date(wtc.timed) dated
					FROM workerTimeControl wtc
						JOIN tmp.`user` w ON w.userFk = wtc.userFk
						LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
					WHERE wtc.timed BETWEEN vDatedFromYesterday AND vDatedToTomorrow
						AND tce.id IS NULL
					GROUP BY wtc.userFk, DATE(wtc.timed)
				) sub
				JOIN tmp.workerTimeControl wtc ON wtc.timed = sub.timed AND wtc.userFk = sub.userFk
			WHERE wtc.direction <> 'out';

	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1, sub.userFk, DATE_ADD(sub.dated, INTERVAL 1 DAY), 'in'
			FROM (SELECT MAX(wtc.timed) timed, wtc.userFk, date(wtc.timed) dated
					FROM workerTimeControl wtc
						JOIN tmp.`user` w ON w.userFk = wtc.userFk
						LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
					WHERE wtc.timed BETWEEN vDatedFromYesterday AND vDatedToTomorrow
						AND tce.id IS NULL
					GROUP BY wtc.userFk, DATE(wtc.timed)
				) sub
				JOIN tmp.workerTimeControl wtc ON wtc.timed = sub.timed AND wtc.userFk = sub.userFk
			WHERE wtc.direction <> 'out';

	INSERT INTO tmp.workerTimeControl (id, userFk, timed, direction, isReal)
		SELECT id, userFk, timed, direction, FALSE FROM tmp.workerTimeControlAux;

	SET vHourToSeconds = 3600;
	SET @vIsOdd := TRUE;
	SET @vDated := 0;
	SET @vLastTimed := 0;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerBreakDays;
	CREATE TEMPORARY TABLE tmp.workerBreakDays
			(INDEX (userFk), INDEX (dated))
			ENGINE = MEMORY
		SELECT sub.userFk, sub.dated
			FROM (SELECT (@vIsOdd := NOT @vIsOdd),
						IF(wtc.direction = 'in', @vIsOdd := TRUE, NULL),
						IF(@vIsOdd, @vLastTimed := UNIX_TIMESTAMP(wtc.timed), NULL),
						IF(@vIsOdd, 0, UNIX_TIMESTAMP(wtc.timed) - @vLastTimed) timeWork,
						IF(direction='in', @vDated := DATE(wtc.timed), @vDated) dated,
						wtc.userFk
					FROM tmp.workerTimeControl wtc
					ORDER BY wtc.userFk, wtc.timed, wtc.id 
					LIMIT 10000000000000000000
				)sub
			GROUP BY sub.userFk, sub.dated
			HAVING SUM(sub.timeWork) >= vTimeToBreakTime;

	SET @vIsOdd := TRUE;
	SET @vDated := 0;
	SET @vLastTimed := 0;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;

	CREATE TEMPORARY TABLE tmp.timeControlCalculate
			(INDEX (userFk, dated))
			ENGINE = MEMORY
		SELECT sub.userFk,
				sub.dated,
				IF(wb.userFk, vBreakTime, 0) + SUM(sub.timeWork) timeWorkSeconds,
				SEC_TO_TIME(IF(wb.userFk, vBreakTime, 0) + SUM(sub.timeWork)) timeWorkSexagesimal,
				(IF(wb.userFk, vBreakTime, 0) + SUM(sub.timeWork)) / vHourToSeconds timeWorkDecimal,
				CAST(GROUP_CONCAT(DATE_FORMAT(sub.realTimed, "%H:%i") ORDER BY sub.timed ASC SEPARATOR ' - ') AS CHAR(256)) timed
			FROM (SELECT (@vIsOdd := NOT @vIsOdd),
						IF(direction='in', @vIsOdd := TRUE, 0),
						IF(@vIsOdd, @vLastTimed := UNIX_TIMESTAMP(timed), 0),
						IF(@vIsOdd, 0, UNIX_TIMESTAMP(timed) - @vLastTimed) timeWork,
						timed,
						userFk,
						DATE(timed) dated,
						IF(isReal, timed, NULL) realTimed
					FROM tmp.workerTimeControl 
						WHERE timed BETWEEN vDatedFromYesterday AND vDatedTo
					ORDER BY userFk, timed, id 
				)sub
				LEFT JOIN tmp.workerBreakDays wb ON wb.userFk = sub.userFk AND wb.dated = sub.dated
			WHERE sub.timed BETWEEN vDatedFrom AND vDatedTo
			GROUP BY sub.userFk, sub.dated;

	DROP TEMPORARY TABLE tmp.workerBreakDays;
	DROP TEMPORARY TABLE tmp.timeControlError;
	DROP TEMPORARY TABLE tmp.workerTimeControlAux;
	DROP TEMPORARY TABLE tmp.workerTimeControl;
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 `timeControl_calculateAll` */;
/*!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 `timeControl_calculateAll`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.`user`;

	CREATE TEMPORARY TABLE IF NOT EXISTS tmp.`user` 
		SELECT userFk
			FROM vn.worker w
				JOIN vn.`user` u ON u.id = w.userFk
			WHERE userFk IS NOT NULL;
        
	CALL vn.timeControl_calculate(vDatedFrom, vDatedTo);

	DROP TEMPORARY TABLE tmp.`user`;
 
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 `timeControl_calculateByDepartment` */;
/*!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 `timeControl_calculateByDepartment`(vDepartmentFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vDepartmentFk 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT DISTINCT w.userFk
		FROM postgresql.business AS b 
			LEFT JOIN postgresql.profile AS pr ON pr.profile_id = b.client_id
			LEFT JOIN postgresql.business_labour AS bl ON b.business_id = bl.business_id
			LEFT JOIN worker AS w ON w.id = pr.workerFk
			LEFT JOIN department AS d ON bl.department_id = d.id
		WHERE (b.date_start BETWEEN vDatedFrom  AND vDatedTo 
				OR IFNULL(b.date_end, vDatedTo)  BETWEEN vDatedFrom  AND vDatedTo
				OR (b.date_start <= vDatedFrom AND b.date_end >= vDatedTo)
              ) AND bl.department_id = vDepartmentFk
		ORDER BY b.date_end DESC;
        
  CALL timeControl_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeControl_calculateByUser` */;
/*!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 `timeControl_calculateByUser`(vUserFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vUserFk 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT id userFk
		FROM user 
        WHERE id = vUserFk; 
  CALL vn.timeControl_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeControl_calculateByWorker` */;
/*!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 `timeControl_calculateByWorker`(vWorkerFk INT, vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN

/**
 * @param vWorkerFk 
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 */
  
  DROP TEMPORARY TABLE IF EXISTS tmp.`user`;
  
  CREATE TEMPORARY TABLE tmp.`user`
	SELECT u.id userFk
		FROM vn.user u
			JOIN vn.worker w ON w.userFk = u.id
        WHERE w.id = vWorkerFk;
        
  CALL vn.timeControl_calculate(vDatedFrom, vDatedTo);
  
  DROP TEMPORARY TABLE tmp.`user`;

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 `timeControl_getError` */;
/*!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 `timeControl_getError`(vDatedFrom DATETIME, vDatedTo DATETIME)
BEGIN
/*
 * @param vDatedFrom
 * @param vDatedTo 
 * @table tmp.`user`(userFk)
 * Fichadas incorrectas de las cuales no se puede calcular horas trabajadas
 * @return tmp.timeControlError (id)
 */
	DECLARE vDayMaxTime INTEGER; 

	SET @journeyCounter := 0;
	SET @lastUserFk := NULL;

	SELECT dayMaxTime INTO vDayMaxTime
		FROM workerTimeControlConfig LIMIT 1;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControl; 
	CREATE TEMPORARY TABLE tmp.timeControl 
			(INDEX(id), INDEX(journeyCounter))
			ENGINE = MEMORY
		SELECT 	sub.id,
				sub.direction, 
				sub.timed,
				IF(sub.direction = 'in' OR @hasOut OR sub.userFk <> @lastUserFk, @journeyCounter := @journeyCounter + 1, @journeyCounter) journeyCounter,
				@lastUserFk := sub.userFk workerFk,	
				IF(sub.direction = 'out', @hasOut:= TRUE, @hasOut:= FALSE) 
			FROM (
				SELECT  DISTINCT wtc.id,
						wtc.direction,
						wtc.timed,
						wtc.userFk
					FROM workerTimeControl wtc
						JOIN tmp.`user` w ON w.userFk = wtc.userFk
					WHERE wtc.timed BETWEEN DATE_SUB(vDatedFrom, INTERVAL 1 DAY) AND DATE_ADD(vDatedTo, INTERVAL 1 DAY)
					ORDER BY wtc.userFk, wtc.timed
			) sub;
		
	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlAux; 
	CREATE TEMPORARY TABLE tmp.timeControlAux
			(INDEX(id), INDEX(journeyCounter))
			ENGINE = MEMORY
		SELECT * FROM tmp.timeControl;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlError; 
		CREATE TEMPORARY TABLE tmp.timeControlError 
			(INDEX(id))
			ENGINE = MEMORY
			SELECT id 
				FROM tmp.timeControlAux tca
					JOIN (
						SELECT journeyCounter, 
								UNIX_TIMESTAMP(MAX(timed)) - UNIX_TIMESTAMP(MIN(timed)) timeWork,
								SUM(direction = 'in') totalIn, 
								SUM(direction = 'out') totalOut,
								timed
							FROM tmp.timeControl
							GROUP BY journeyCounter
							HAVING COUNT(*) MOD 2 = 1 
								OR totalIn <> 1 
								OR totalOut <> 1 
								OR timeWork >= vDayMaxTime
					)sub ON sub.journeyCounter = tca.journeyCounter
				WHERE sub.timed BETWEEN vDatedFrom AND vDatedTo;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControl; 
	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlAux; 
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 `timeWorkerControl_check` */;
/*!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 `timeWorkerControl_check`(vUserFk INT, vDated DATE,vTabletFk VARCHAR(100))
proc: BEGIN
/**
 * deprecated call workerTimeControl_check
 */
CALL vn.workerTimeControl_check(vUserFk,vDated,vTabletFk);
	
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 `tpvTransaction_checkStatus` */;
/*!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 `tpvTransaction_checkStatus`()
BEGIN
/**
 * 
 * Envia mail con los cobros web no
 * trasladados a la ficha del cliente.
 *
 */
	INSERT INTO mail (receiver,replyTo,subject,body)
		SELECT 'administracion@verdnatura.es',
				'noreply@verdnatura.es',
				CONCAT('Cobro web no trasladado a la ficha del cliente  ', t.clientFk),
				CONCAT('Hay un importe de ', t.amount/100, '€ del cliente ', t.clientFk, ' con fecha ', t.created,
				', que no se ha trasladado a recibos. Si nos ha llegado el importe al banco confirme el pago en
				<a href="https://salix.verdnatura.es/#!/client/',t.clientFk,'/web-payment">
				https://salix.verdnatura.es/#!/client/',t.clientFk,'/web-payment</a>')
			FROM hedera.tpvTransaction t
			WHERE t.receiptFk IS NULL
				AND t.status = 'ok'
				AND t.created < DATE_ADD(NOW(),INTERVAL - 2 DAY)
			GROUP BY t.clientFk;

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 `travelVolume` */;
/*!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 `travelVolume`(vTravelFk INT)
BEGIN
	
	SELECT 	w1.name AS ORI, 
			w2.name AS DES, 
			tr.shipped shipment,
			tr.landed landing,
			a.name Agencia, 
			s.name Proveedor,
			e.id Id_Entrada,
			e.REF Referencia,
			CAST(ROUND(SUM(GREATEST(b.stickers ,b.quantity /b.packing ) *
			 vn.item_getVolume(b.itemFk ,b.packageFk)) / vc.trolleyM3 / 1000000 ,1) AS DECIMAL(10,2)) AS CC,
			CAST(ROUND(SUM(GREATEST(b.stickers ,b.quantity /b.packing ) *
			 vn.item_getVolume(b.itemFk ,b.packageFk)) / vc.palletM3 / 1000000,1) AS DECIMAL(10,2)) AS espais
	FROM vn.buy b 
		JOIN vn.entry e ON e.id = b.entryFk 
		JOIN vn.supplier s ON s.id = e.supplierFk 
		JOIN vn.travel tr ON tr.id = e.travelFk 
		JOIN vn.agencyMode a ON a.id = tr.agencyModeFk
		JOIN vn.warehouse w1 ON w1.id = tr.warehouseInFk 
		JOIN vn.warehouse w2 ON w2.id = tr.warehouseOutFk 
		JOIN vn.volumeConfig vc 
		JOIN vn.item i ON i.id = b.itemFk 
		JOIN vn.itemType it ON it.id = i.typeFk
		WHERE tr.id = vTravelFk;
	
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 `travelVolume_get` */;
/*!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 `travelVolume_get`(vFromDated DATE, vToDated DATE, vWarehouseFk INT)
BEGIN
	
	SELECT 	tr.landed Fecha,
			a.name Agencia, 
			count(DISTINCT e.id) numEntradas, 
			FLOOR(sum(item_getVolume(b.itemFk, b.packageFk) * b.stickers / 1000000 )) AS m3
		FROM vn.travel tr
		JOIN vn.agencyMode a ON a.id = tr.agencyModeFk
		JOIN vn.entry e ON e.travelFk = tr.id 
		JOIN vn.buy b ON b.entryFk = e.id 
		WHERE tr.landed BETWEEN vFromDated AND vToDated 
			AND e.isRaid = FALSE 
			AND tr.warehouseInFk = vWarehouseFk
		GROUP BY tr.landed , a.name ;
		
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_checkDates` */;
/*!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_checkDates`(vShipped DATE, vLanded DATE)
BEGIN
/**
 * Checks the landing/shipment dates of travel, throws an error
 * ir they are not correct.
 *
 * @param vShipped The shipment date
 * @param vLanded The landing date
 */
 
	IF vLanded < vShipped THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Landing cannot be lesser than shipment';
	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 `travel_clone` */;
/*!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_clone`(vSelf INT, vDays INT, OUT vNewTravelFk INT)
BEGIN
	
	/**
	 * Clona un travel el número de dias indicado y devuelve su Id
	 * 
	 * @param vSelf Identificador de vn.travel
	 * @param vDays Número de dias a futuro
	 * 
	 * @return vNewTravelFk Nuevo número de travel
	 */
	
	SELECT tr.id INTO vNewTravelFk
		FROM vn.travel tr
			JOIN vn.travel tr2 USING(shipped, warehouseInFk, warehouseOutFk, agencyModeFk, `ref`)
		WHERE tr2.id = vSelf
			AND tr.landed = TIMESTAMPADD(DAY, vDays, tr2.landed);
		
	IF ISNULL(vNewTravelFk) THEN
	
		START TRANSACTION;
	
		INSERT INTO vn.travel(	shipped,
								shipmentHour,
								landed,
								landingHour,
								warehouseInFk,
								warehouseOutFk,
								agencyModeFk,
								`ref`,
								cargoSupplierFk)
			SELECT 	shipped,
					shipmentHour,
					TIMESTAMPADD(DAY, vDays, landed),
					landingHour,
					warehouseInFk,
					warehouseOutFk,
					agencyModeFk,
					`ref`,
					cargoSupplierFk
				FROM vn.travel 
					WHERE id = vSelf;
				
		SELECT LAST_INSERT_ID() INTO vNewTravelFk; 
	
		COMMIT;
	
	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 `travel_cloneWithEntries` */;
/*!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_cloneWithEntries`(
	IN vTravelFk INT, 
	IN vDateStart DATE, 
	IN vDateEnd DATE,
	IN vWarehouseOutFk INT,
	IN vWarehouseInFk INT, 
	IN vRef VARCHAR(255), 
	IN vAgencyModeFk INT, 
	OUT vNewTravelFk INT)
BEGIN
/**
 * Clona un travel junto con sus entradas y compras
 *
 * @param vTravelFk travel plantilla a clonar
 * @param vDateStart fecha del shipment del nuevo travel
 * @param vDateEnd fecha del landing del nuevo travel
 * @param vWarehouseOutFk fecha del salida del nuevo travel
 * @param vWarehouseInFk warehouse de landing del nuevo travel
 * @param vRef referencia del nuevo travel
 * @param vAgencyModeFk del nuevo travel
 * @param vNewTravelFk id del nuevo travel
 */
	DECLARE vEntryNew INT;
	DECLARE vDone BOOLEAN DEFAULT FALSE;
	DECLARE vAuxEntryFk INT;
	DECLARE vRsEntry CURSOR FOR
		SELECT e.id
			FROM entry e
				JOIN travel t 
					ON t.id = e.travelFk
			WHERE e.travelFk = vTravelFk;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	DECLARE EXIT HANDLER FOR SQLEXCEPTION/*, 1062 Duplicate key*/
		BEGIN 
			ROLLBACK;
		
		END;
	
	START TRANSACTION;
	INSERT INTO travel (shipped, landed, warehouseInFk, warehouseOutFk, agencyModeFk, `ref`, isDelivered, isReceived, m3, kg)
		SELECT vDateStart, vDateEnd, vWarehouseInFk, vWarehouseOutFk, vAgencyModeFk, vRef, isDelivered, isReceived, m3, kg
			FROM travel
			WHERE id = vTravelFk;
	
	SET vNewTravelFk = LAST_INSERT_ID();
	CALL logAdd(vNewTravelFk, 'insert', 'travel', CONCAT('clona travel ',vTravelFk));
	SET vDone = FALSE;
	SET @isModeInventory = TRUE;
	OPEN vRsEntry ;
	FETCH vRsEntry INTO vAuxEntryFk;
	
	WHILE NOT vDone DO
		INSERT INTO entry (
				supplierFk,
				ref,
				isExcludedFromAvailable,
				isConfirmed, 
				isOrdered,
				isRaid,
				commission,
				created,
				evaNotes,
				travelFk,
				currencyFk,
				companyFk,
				gestDocFk, 
				invoiceInFk)
			 SELECT supplierFk,
					ref,
					isExcludedFromAvailable,
					isConfirmed, 
					isOrdered,
					isRaid,
					commission,
					created,
					evaNotes,
					vNewTravelFk,
					currencyFk,
					companyFk,
					gestDocFk, 
					invoiceInFk
			FROM entry
			WHERE id = vAuxEntryFk;
						
		SET vEntryNew  = LAST_INSERT_ID();
		
		CALL logAdd(vEntryNew, 'insert', 'entry', CONCAT('clona entrada ',vAuxEntryFk));	
		INSERT INTO buy (
				entryFk,
				itemFk,
				quantity,
				buyingValue,
				packageFk,
				stickers,
				freightValue,
				packageValue,
				comissionValue,
				packing,
				`grouping`,
				groupingMode,
				location,
				price1,
				price2,
				price3,
				minPrice,
				producer,
				printedStickers,
				isChecked,
				weight)
			SELECT vEntryNew,
					itemFk,
					quantity,
					buyingValue,
					packageFk,
					stickers,
					freightValue,
					packageValue,
					comissionValue,
					packing,
					`grouping`,
					groupingMode,
					location,
					price1,
					price2,
					price3,
					minPrice,
					producer,
					printedStickers,
					isChecked,
					weight
				FROM buy
				WHERE entryFk = vAuxEntryFk;       
							
		FETCH vRsEntry INTO vAuxEntryFk;
	END WHILE;
	SET @isModeInventory = FALSE;
	CLOSE vRsEntry;
	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 `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`()
BEGIN
/**
 * Recounts the number of entries of changed travels.
 */
	DECLARE vDone BOOL;
	DECLARE vTravelFk INT;
    DECLARE vTotalEntries INT;

	DECLARE cCur CURSOR FOR
		SELECT travelFk FROM travelRecalc;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	OPEN cCur;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH cCur INTO vTravelFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		SELECT COUNT(*) INTO vTotalEntries
			FROM entry
			WHERE travelFk = vTravelFk;
            
		UPDATE travel
			SET totalEntries = vTotalEntries
			WHERE id = vTravelFk;
            
		DELETE FROM travelRecalc WHERE travelFk = vTravelFk;
	END LOOP;

	CLOSE cCur;
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_moveRaids` */;
/*!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_moveRaids`()
BEGIN

/*
 * Desplaza al dia siguiente los travels que contengan redadas y avisa a los compradores
 * 
 */
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vWorkerName VARCHAR(50);
	DECLARE vRaid TEXT;
	DECLARE vWorker VARCHAR(50) DEFAULT '';
	DECLARE vMailBody TEXT DEFAULT '';

	DECLARE vCur CURSOR FOR
		SELECT GROUP_CONCAT( DISTINCT CONCAT('https://salix.verdnatura.es/#!/travel/', ttr.id, '/summary ') ORDER BY ttr.id SEPARATOR '\n\r'),
			u.name
			FROM tmp.travel ttr
				JOIN entry e ON e.travelFk = ttr.id 
				JOIN buy b ON b.entryFk = e.id
				JOIN item i ON i.id = b.itemFk
				JOIN itemType it ON it.id = i.typeFk
				JOIN account.user u ON u.id = it.workerFk
			GROUP BY u.name;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
	SET vDone = TRUE; 

	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		ROLLBACK;
		RESIGNAL;
	END;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.travel;
	CREATE TEMPORARY TABLE tmp.travel
		SELECT tr.id,tr.landed
			FROM travel tr
					JOIN entry e ON e.travelFk = tr.id 
				WHERE tr.landed = util.tomorrow()
					AND e.isRaid
				GROUP BY tr.id;

	START TRANSACTION;

	UPDATE travel tr
		JOIN tmp.travel ttr ON ttr.id = tr.id
		SET tr.landed = TIMESTAMPADD(DAY, 1, tr.landed);

	INSERT INTO travelLog (originFk, userFk , action, description)
		SELECT ttr.id, account.myUser_getId(), 'update', CONCAT('Se ha cambiado la fecha del travel al dia ', util.tomorrow())
			FROM tmp.travel ttr;

	OPEN vCur;

	l: LOOP
		SET vDone = FALSE;
		FETCH vCur INTO vRaid, vWorkerName;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL `vn`.`mail_insert`(CONCAT(vWorkerName, '@verdnatura.es'),
								'noreply@verdnatura.es',
								'Cambio de fecha en Redadas',
								CONCAT('Se ha movido las siguientes redadas: \n\r ', vRaid)
								);

	END LOOP;
	CLOSE vCur;
	COMMIT;
	DROP TEMPORARY TABLE tmp.travel;

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_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 `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 ;
/*!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_weeklyClone` */;
/*!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_weeklyClone`(vSinceWeek INT, vToWeek INT)
BEGIN
/**
 * Clona los travels plantilla para las semanas pasadas por parámetros
 *
 * @param vSinceWeek Número de semanas en el futuro para empezar a clonar
 * @param vToWeek Número de semenas en el futuro hasta donde clonar
 */

	DECLARE vCounter INT;
	DECLARE vCurrentTravelFk INT;
	DECLARE vShipped DATE;
	DECLARE vLanded DATE;
	DECLARE vWarehouseInFk INT;
	DECLARE vWarehouseOutFk INT;
	DECLARE vAgencyModeFk INT;
	DECLARE vRef VARCHAR(255);
	DECLARE vDone BOOLEAN DEFAULT FALSE;
	DECLARE vRsTravel CURSOR FOR
		SELECT 	travelFk,
				@a := TIMESTAMPADD(DAY,vCounter * 7 - WEEKDAY(CURDATE()) - 1 + weekDay,CURDATE()),
				@a := TIMESTAMPADD(DAY,duration,@a),
				warehouseOutFk,
				warehouseInFk,
				`ref`,
				agencyModeFk
			FROM travelClonedWeekly
			WHERE travelFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;	

	SET vCounter = vSinceWeek;
	vWeekLoop :LOOP
		INSERT IGNORE INTO travel (shipped, landed, warehouseOutFk, warehouseInFk, agencyModeFk, ref, cargoSupplierFk, kg)
			SELECT 	@a := TIMESTAMPADD(DAY, vCounter * 7 - WEEKDAY(CURDATE()) - 1 + weekDay,CURDATE()),
					@a := TIMESTAMPADD(DAY, duration, @a),
					warehouseOutFk,
					warehouseInFk,
					agencyModeFk,
					ref,
					supplierFk,
					kg
				FROM travelClonedWeekly
				WHERE travelFk IS NULL;
		OPEN vRsTravel;
		FETCH vRsTravel INTO vCurrentTravelFk, vShipped, vLanded, vWarehouseOutFk, vWarehouseInFk, vRef, vAgencyModeFk;
		SET vDone = FALSE;
		WHILE NOT vDone DO
			CALL travel_cloneWithEntries(vCurrentTravelFk, vShipped, vLanded, vWarehouseOutFk, vWarehouseInFk, vRef, vAgencyModeFk, @newTravel);
			FETCH vRsTravel INTO vCurrentTravelFk, vShipped, vLanded, vWarehouseOutFk, vWarehouseInFk, vRef, vAgencyModeFk;
		END WHILE;
		CLOSE vRsTravel;

		IF vCounter = vToWeek THEN
			LEAVE vWeekLoop;
		END IF;
		SET vCounter = vCounter + 1;

	END LOOP vWeekLoop;
	
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 `typeTagMake` */;
/*!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 `typeTagMake`(vTypeFk INT)
BEGIN
/*
 * Plantilla para modificar reemplazar todos los tags
 * por los valores que tienen los articulos
 * 
 * @param vTypeFk tipo a modificar
 * 
 */
	DELETE it.* 
		FROM itemTag it 
			JOIN item i ON i.id = it.itemFk
		WHERE i.typeFk = vTypeFk;

	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, CONCAT(i.size,' cm'), 1
			FROM item i
				JOIN tag t ON t.name = 'Longitud' COLLATE utf8_general_ci
			WHERE i.typeFk  =  vTypeFk;
            
	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, i.category, 5
			FROM item i
				JOIN tag t ON t.name = 'Categoria' COLLATE utf8_general_ci
			WHERE i.typeFk  =  vTypeFk;
    	
	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, ink.name, 2
			FROM item i
				JOIN tag t ON t.name = 'Color' COLLATE utf8_general_ci
                JOIN ink ON ink.id = i.inkFk
			WHERE i.typeFk  =  vTypeFk;
            
    INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, p.name, 3
			FROM item i
				JOIN tag t ON t.name = 'Productor' COLLATE utf8_general_ci
                JOIN producer p ON p.id = i.producerFk
			WHERE i.typeFk  =  vTypeFk;    
            
	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, o.name, 4
			FROM item i
				JOIN tag t ON t.name = 'Origen' COLLATE utf8_general_ci
                JOIN origin o ON o.id = i.originFk
			WHERE i.typeFk  =  vTypeFk;
     /*      
	INSERT INTO itemTag(itemFk, tagFk, value, priority)
		SELECT  i.id, t.id, i.stems, 6
			FROM item i
				JOIN tag t ON t.name = 'Tallos' COLLATE utf8_general_ci
			WHERE i.typeFk  =  vTypeFk;  
     */   
-- CALL itemTagArrangedUpdate(NULL);

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 `updatePedidosInternos` */;
/*!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 `updatePedidosInternos`(vItemFk INT)
BEGIN

	UPDATE vn.item SET upToDown = 0 WHERE item.id = vItemFk;
    

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 `visible_getMisfit` */;
/*!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 `visible_getMisfit`(vSectorFk INT)
BEGIN
	
	/* Devuelve una tabla temporal con los descuadres entre el visible teórico y lo ubicado en la práctica
	 * 
	 * @param vSectorFk Identificador de vn.sector
	 * 
	 * @return tmp.stockMisfit(itemFk, visible, parked)
	 */
	
	DECLARE vCalcVisibleFk INT;
	DECLARE vWarehouseFk INT;

	SELECT warehouseFk INTO vWarehouseFk
		FROM vn.sector s 
		WHERE s.id = vSectorFk;
	
	CALL cache.visible_refresh(vCalcVisibleFk, FALSE, vWarehouseFk);

	DROP TEMPORARY TABLE IF EXISTS tmp.stockMisfit;

	CREATE TEMPORARY TABLE tmp.stockMisfit(
		itemFk INT PRIMARY KEY,
		visible INT NOT NULL DEFAULT 0,
		parked INT NOT NULL DEFAULT 0)
	ENGINE = MEMORY;

	INSERT INTO tmp.stockMisfit(itemFk, parked)
		SELECT iss.itemFk , sum(iss.visible )
			FROM vn.itemShelvingStock iss 
				JOIN vn.sector s ON s.id = iss.sectorFk 
			WHERE vSectorFk IN (s.id, s.sonFk)
			GROUP BY iss.itemFk;
			
	INSERT INTO tmp.stockMisfit(itemFk, visible)
		SELECT v.item_id , v.visible 
			FROM cache.visible v 
			WHERE v.calc_id = vCalcVisibleFk		
			ON DUPLICATE KEY UPDATE visible = v.visible;
		
	DELETE FROM tmp.stockMisfit
		WHERE visible = parked;

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 `warehouseFitting` */;
/*!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 `warehouseFitting`(IN vWhOrigin INT , IN vWhDestiny INT)
BEGIN
	DECLARE vCacheVisibleOriginFk INT;
    DECLARE vCacheVisibleDestinyFk INT;
    
	CALL cache.visible_refresh(vCacheVisibleOriginFk, FALSE, vWhOrigin);
    CALL cache.visible_refresh(vCacheVisibleDestinyFk, FALSE, vWhDestiny);
    
    SELECT i.id itemFk,
		   i.longName,
           i.size,
           i.subName,
           vOrigin.visible AS Origen,
           vDestiny.visible Destino
           
		FROM vn.item i
			JOIN vn.itemType it ON it.id = i.typeFk
			LEFT JOIN cache.visible vOrigin ON vOrigin.calc_id = vCacheVisibleOriginFk AND vOrigin.item_id = i.id
            LEFT JOIN cache.visible vDestiny ON vDestiny.calc_id = vCacheVisibleDestinyFk AND vDestiny.item_id = i.id
            WHERE (vOrigin.visible OR vDestiny.visible)
				AND it.categoryFk < 6
			ORDER BY IF(vOrigin.visible,0,1), longName, size, subName;
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 `warehouseFitting_byTravel` */;
/*!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 `warehouseFitting_byTravel`(IN vTravelFk INT)
BEGIN

	DECLARE vWhOrigin INT;
    DECLARE vWhDestiny INT;
    
    SELECT warehouseInFk, warehouseOutFk INTO vWhDestiny, vWhOrigin
		FROM vn.travel
        WHERE id = vTravelFk;
        
	CALL vn.warehouseFitting(vWhOrigin, vWhDestiny);
    
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 `workerCalculateBoss` */;
/*!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 `workerCalculateBoss`(vWorker INT)
BEGIN
/**
* Actualiza la tabla workerBosses
* vWorker: id del trabajador
*
*/
	DECLARE vBoss INT;
	DECLARE vWorkerCompare INT DEFAULT vWorker;

	l: LOOP
		SELECT bossFk INTO vBoss
			FROM vn.worker
			WHERE id=vWorkerCompare;

		IF vBoss=0 OR vWorkerCompare=vBoss THEN
			LEAVE l;
		END IF;

		REPLACE INTO vn.workerBosses(workerFk,bossFk)
			VALUES(vWorker,vBoss);

		SET vWorkerCompare = vBoss;

	END LOOP;
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 `workerCalendar_calculateBusiness` */;
/*!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 `workerCalendar_calculateBusiness`(vYear INT, vBusinessFk INT)
BEGIN

/**
 * Calcula los días y horas de vacaciones en función de un contrato y año
 *
 * @param vYear
 * @param vBusinessFk  
 * @return tmp.workerCalendarCalculateBusiness (days, hours, daysEnjoyed, hoursEnjoyed)
 */

	DECLARE vStarted DATE;
	DECLARE vEnded DATE;
	DECLARE vDaysHoliday DECIMAL(5,2);
	DECLARE vHoursWeek DECIMAL(5,2);
	DECLARE vDaysToSubtract DECIMAL(5,2);
	DECLARE vDaysHolidayEnjoyed DECIMAL(5,2);
	DECLARE vDifDays INT;

	SELECT IF(b.date_start < CONCAT(vYear,"-01-01"), CONCAT(vYear,"-01-01"),b.date_start), 
					IF(b.date_end IS NULL OR YEAR(b.date_end)>vYear , CONCAT(vYear,"-12-31"), b.date_end), 
					IF(wbt.hasHolidayEntitlement, w.days, 0),
					c.hours_week
				INTO vStarted, 
					vEnded, 
					vDaysHoliday, 
					vHoursWeek
			FROM postgresql.business b 
				JOIN postgresql.business_labour_payroll blp ON blp.business_id = b.business_id
				JOIN workerBusinessType wbt ON wbt.id = cod_contrato
				JOIN postgresql.business_labour bl ON bl.business_id = b.business_id
				JOIN workCenterHoliday w ON w.workcenterFk = bl.workcenter_id
				LEFT JOIN postgresql.calendar_labour_type c ON c.calendar_labour_type_id=bl.calendar_labour_type_id
			WHERE b.business_id = vBusinessFk
				AND w.year = vYear;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerCalendarCalculateBusiness;
	
	IF vStarted < vEnded THEN
		SET vDifDays = DAYOFYEAR(vEnded) - DAYOFYEAR(vStarted) + 1;

		SELECT IFNULL(SUM(holidayEntitlementRate), 0) , 
				SUM(-(discountRate - 1))
					INTO vDaysToSubtract, 
						vDaysHolidayEnjoyed 
			FROM workerCalendar w  
				JOIN absenceType a ON a.id = w.absenceTypeFk  
			WHERE w.businessFk = vBusinessFk 
				AND YEAR(dated) = vYear;
	END IF;

	CREATE TEMPORARY TABLE tmp.workerCalendarCalculateBusiness	
		ENGINE = MEMORY
		SELECT @days := IFNULL(ROUND((vDaysHoliday * (vDifDays - vDaysToSubtract) / IF(util.isLeapYear(vYear) , 366, 365)), 1), 0) days,
			@days * (vHoursWeek / 5) hours,
			@daysEnjoyed := IFNULL(ROUND(vDaysHolidayEnjoyed, 1), 0) daysEnjoyed,
			@daysEnjoyed * (vHoursWeek / 5) hoursEnjoyed;
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 `workerCalendar_calculateYear` */;
/*!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 `workerCalendar_calculateYear`(vYear INT, vWorkerFk INT)
BEGIN

/**
 * Calcula los días y horas de vacaciones en función de un trabajador y año
 *
 * @param vYear 
 * @param vWorkerFk 
 * @return tmp.workerCalendarCalculateYear (days, hours, daysEnjoyed, hoursEnjoyed)
 */	
	DECLARE vDone BOOL;
	DECLARE vBusinessFk INT;

	DECLARE cur CURSOR FOR
		SELECT b.business_id 
			FROM postgresql.business b 
				LEFT JOIN postgresql.profile AS pr ON pr.profile_id = b.client_id
			WHERE vYear BETWEEN YEAR(b.date_start) AND IFNULL(YEAR(b.date_end), vYear ) 
				AND pr.workerFk = vWorkerFk;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;	
	
	DROP TEMPORARY TABLE IF EXISTS tmp.workerCalendarCalculateYear;

	CREATE TEMPORARY TABLE tmp.workerCalendarCalculateYear
			(days DEC(5,2), 
			 hours DEC(5,2),
			 daysEnjoyed DEC(5,2), 
			 hoursEnjoyed DEC(5,2)) 
		ENGINE = MEMORY;
	INSERT INTO tmp.workerCalendarCalculateYear VALUES(0, 0, 0, 0);
				
	OPEN cur;

	l: LOOP
		SET vDone = FALSE;
		FETCH cur INTO vBusinessFk;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL workerCalendar_calculateBusiness(vYear, vBusinessFk);
		UPDATE tmp.workerCalendarCalculateYear w
				JOIN tmp.workerCalendarCalculateBusiness wc 
			SET w.days = w.days + wc.days,
				w.hours = w.hours + wc.hours,
				w.daysEnjoyed = w.daysEnjoyed + wc.daysEnjoyed,
				w.hoursEnjoyed = w.hoursEnjoyed + wc.hoursEnjoyed;
			
		DROP TEMPORARY TABLE tmp.workerCalendarCalculateBusiness;

	END LOOP;

	CLOSE cur;

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 `workerCreate` */;
/*!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 `workerCreate`(
  vFirstname VARCHAR(50),
  vLastName VARCHAR(50), 
  vCode CHAR(3),
  vBossFk INT,
  vUserFk INT,
  vFi VARCHAR(15) ,
  vBirth DATE
)
BEGIN
/**
 * Create new worker
 *
 */
  INSERT INTO worker(id, code, firstName, lastName, userFk, bossFk, fi, birth) 
    VALUES (vUserFk, vCode, vFirstname, vLastName, vUserFk, vBossFk, vFi, vBirth);
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 `workerCreateExternal` */;
/*!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 `workerCreateExternal`(
    vFirstName VARCHAR(50),
    vSurname1 VARCHAR(50),
    vSurname2 VARCHAR(50),
    vUser VARCHAR(20),
    vPassword VARCHAR(50),
    vWorkerCode VARCHAR(3),
    vRole INT(2)
    )
BEGIN

	DECLARE vUserId INT;
    DECLARE vWorkerPako INT DEFAULT 2;
    DECLARE vSurnames VARCHAR(100);

	INSERT INTO account.user(name,password,role)
		SELECT vUser,MD5(vPassword),vRole;
            
	SET vUserId = LAST_INSERT_ID();
    /* 
		INSERT INTO vn.worker(firstName,lastName,bossFk,workerCode,user_id)
			SELECT vFirstName,CONCAT(vSurname1,' ',vSurname2),2,vWorkerCode,vUser;
	*/
    
    IF vSurname2 IS NULL THEN
		SET vSurnames = vSurname1;
    ELSE
		SET vSurnames = CONCAT(vSurname1, ' ', vSurname2);
    END IF;
	
	INSERT INTO vn2008.Trabajadores(Nombre, Apellidos, boss, CodigoTrabajador, user_id)
		SELECT vFirstName, vSurnames, vWorkerPako, vWorkerCode, vUserId;
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 `workerDepartmentByDate` */;
/*!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 `workerDepartmentByDate`(vDate DATE)
BEGIN

	DROP TEMPORARY TABLE IF EXISTS tmp.workerDepartmentByDate;
    CREATE TEMPORARY TABLE tmp.workerDepartmentByDate
		ENGINE = MEMORY
		SELECT w.userFk, 
            w.lastName name, 
            w.firstName firstname, 
            d.name department, 
            d.id departmentFk,
            b.date_start, 
            d.isProduction, 
            CAST(12 * blp.importepactado / clt.hours_week / 52 AS DECIMAL(10,2)) costeHora,
            w.fi nif
		FROM postgresql.profile pr 
			JOIN postgresql.business b ON b.client_id = pr.profile_id
			JOIN postgresql.business_labour bl ON bl.business_id = b.business_id
            JOIN postgresql.calendar_labour_type clt ON clt.calendar_labour_type_id = bl.calendar_labour_type_id
            JOIN postgresql.business_labour_payroll blp ON blp.business_id = b.business_id
			JOIN department d ON d.id = bl.department_id
			JOIN worker w ON w.id = pr.workerFk
		WHERE b.date_start <= vDate 
			AND (b.date_end > vDate OR b.date_end IS NULL);
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 `workerDisable` */;
/*!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  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `workerDisable`(vUserId int)
mainLabel:BEGIN

	IF (SELECT COUNT(*) FROM workerDisableExcluded WHERE workerFk = vUserId AND (dated > CURDATE() OR dated IS NULL)) > 0 THEN
		LEAVE mainLabel;
	END IF;
	DELETE FROM account.account
		WHERE id = vUserId;

	UPDATE account.user 
		SET role = 2
		WHERE id = vUserId;	

	DELETE FROM pbx.sip 
		WHERE user_id = vUserId;   

	UPDATE `client` c
		JOIN payMethod p ON p.name = 'CONTADO'
		SET c.credit = 0, c.payMethodFk = p.id, hasCoreVnl = FALSE
		WHERE c.id = vUserId;
	
	UPDATE `client` c
		SET c.salesPersonFk = null
		WHERE c.salesPersonFk = vUserId;
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 `workerDisableAll` */;
/*!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 `workerDisableAll`()
BEGIN
	DECLARE done BOOL DEFAULT FALSE;
	DECLARE vUserFk INT;

	DECLARE rs CURSOR FOR
		SELECT a.id
			FROM (SELECT client_id, business_id 
					FROM (SELECT business_id, client_id
							FROM postgresql.business
							ORDER BY client_id, date_end IS NULL DESC , date_end DESC
							LIMIT 10000000000000000000)sub 
					GROUP BY client_id)sub2
				JOIN postgresql.business b ON sub2.client_id = b.client_id AND sub2.business_id = b.business_id
				JOIN postgresql.profile pr ON b.client_id = pr.profile_id
				JOIN account.account a ON pr.workerFk = a.id
			WHERE b.date_end IS NOT NULL
				AND b.date_end < CURDATE()
				AND b.date_end > TIMESTAMPADD(DAY, -70, CURDATE());

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN rs;

	FETCH rs INTO vUserFk;

	WHILE NOT done DO
		CALL workerDisable(vUserFk);
		FETCH rs INTO vUserFk;

	END WHILE;

	CLOSE rs;
	
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 `workerForAllCalculateBoss` */;
/*!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 `workerForAllCalculateBoss`()
BEGIN
/**
* Actualiza la tabla workerBosses utilizando el procedimiento
* vn.workerCalculateBoss(), actualiza todos los trabajadores en esa tabla
*
*/
	DECLARE vWorker INT;
	DECLARE vDone BOOL;

	DECLARE cur CURSOR FOR
	SELECT id FROM worker;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	OPEN cur;

	l: LOOP
		SET vDone = FALSE;
		FETCH cur INTO vWorker;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL workerCalculateBoss(vWorker);
	END LOOP;

	CLOSE cur;

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 `workerJourney_replace` */;
/*!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 `workerJourney_replace`(
	vDatedFrom DATE, 
	vDatedTo DATE, 
	vWorkerFk INT)
BEGIN
/**
 * Actualiza la tabla workerJourney para que actue como caché permanente revisable 
 * de las jornadas laborales.
 * @param vDatedFrom workerTimeControl
 * @param vDatedTo workerTimeControl
 * @param vWorkerFk, en caso de pasar 0 ó NULL se aplica a todos
 */	
	DECLARE vDatedTimeTo DATETIME;
	DECLARE vMaxTimePerDay INT; 
	DECLARE vMinHoursToBreak DECIMAL(10,2);
	DECLARE vBreakHours DECIMAL(10,2);
	DECLARE vMonthByYear INT;
	DECLARE vWeeksByYear INT DEFAULT 52;
	DECLARE vMonthsByYear INT DEFAULT 12;
	DECLARE vDaysByWeek INT DEFAULT 5;
	DECLARE vDatedFromYesterday DATETIME;
	DECLARE vDatedToTomorrow DATETIME; 
	
	SELECT DATE_SUB(vDatedFrom, INTERVAL 1 DAY), DATE_ADD(vDatedTo, INTERVAL 1 DAY) 
		INTO vDatedFromYesterday, vDatedToTomorrow;

	SET vDatedTimeTo = util.dayEnd(vDatedTo);
	
	SELECT minHoursToBreak, breakHours, maxTimePerDay 
			INTO vMinHoursToBreak, vBreakHours, vMaxTimePerDay
		FROM workerTimeControlConfig;

	DELETE FROM workerJourney
		WHERE dated BETWEEN vDatedFrom AND vDatedTo 
			AND NOT isPaid
			AND NOT isUpdated
			AND (vWorkerFk IS NULL OR userFK = vWorkerFk); 

	-- Se inserta todos los días del periodo por worker y business en el rango de fechas. 
	INSERT IGNORE INTO workerJourney(userFk, dated, businessFk)
		 SELECT w.workerFk, t.dated, w.businessFk
				FROM workerLabour w 
					JOIN time t ON t.dated BETWEEN w.started AND IFNULL(w.ended,CURDATE())
				WHERE t.dated BETWEEN vDatedFrom AND vDatedTo
					AND (vWorkerFk IS NULL OR w.workerFk = vWorkerFk)
				ORDER BY w.workerFk, t.dated, w.businessFk;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.`user`;

	IF vWorkerFk THEN
		CALL timeControl_calculateByUser(vWorkerFk, vDatedFrom , vDatedTimeTo);
		CREATE TEMPORARY TABLE IF NOT EXISTS tmp.`user` 
			SELECT vWorkerFk userFk;	
	ELSE
		CALL timeControl_calculateAll(vDatedFrom, vDatedTimeTo);
		CREATE TEMPORARY TABLE IF NOT EXISTS tmp.`user` 
			SELECT id userFk
				FROM worker w;
	END IF; 

	UPDATE workerJourney wj
		JOIN tmp.timeControlCalculate t ON wj.dated = t.dated AND wj.userFk = t.userFk
			SET wj.total = CAST(IF(t.timeWorkDecimal >= vMinHoursToBreak, 
					t.timeWorkDecimal - vBreakHours, 
					t.timeWorkDecimal) AS DECIMAL (10,2)),
				wj.lunch = IF(t.timeWorkDecimal >= vMinHoursToBreak , vBreakHours , 0)
		WHERE wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND NOT wj.isPaid
			AND NOT wj.isUpdated
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk);
	
	-- NOCTURNIDAD 
	CALL timeControl_getError(vDatedFrom, vDatedTimeTo);

	SET @vIsOdd := TRUE;
	SET @vDated := NULL;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControl;
	CREATE TEMPORARY TABLE tmp.workerTimeControl
			(INDEX (userFk), INDEX (timed))
			ENGINE = MEMORY
		SELECT DISTINCT(wtc.id), 
				wtc.userFk, 
				wtc.timed, 
				wtc.direction
			FROM workerTimeControl wtc
				JOIN tmp.`user` w ON w.userFk = wtc.userFk
				LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
			WHERE wtc.timed BETWEEN vDatedFrom AND vDatedToTomorrow
				AND tce.id IS NULL
				AND (vWorkerFk IS NULL OR wtc.userFk = vWorkerFk)
			ORDER BY wtc.userFk, wtc.timed ASC;

	SELECT MAX(id) INTO @vCont 
		FROM tmp.workerTimeControl;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlAux; 
	CREATE TEMPORARY TABLE tmp.workerTimeControlAux (
		`id` int(11) ,
		`userFk` int(10) unsigned ,
		`timed` datetime,
		`direction` enum('in', 'out','middle')
		) ENGINE=MEMORY;

	SET @vIsOdd := TRUE;
	SET @lastUserFk := NULL;
	SET @lastDirection := NULL;

	-- Cambio de dia en medio de un descanso
	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1,
				lastUserFk,
				util.dayEnd(dated),
				'middle'
			FROM (SELECT IF(@lastUserFk <> userFk, @vIsOdd := TRUE, NULL),
						DATE(@lastTimed) dated,
						@lastUserFk lastUserFk,
						IF(direction ='middle', @vIsOdd := NOT @vIsOdd, FALSE) isOdd,
						IF(@vIsOdd 
							AND @lastDirection = 'middle' 
							AND (DATE(@lastTimed) <> date(timed) 
								OR @lastUserFk <> userFk), TRUE, FALSE) hasBreak,
						@lastTimed := wtc.timed,
						@lastUserFk := userFk,
						@lastDirection := direction
					FROM tmp.workerTimeControl wtc
					ORDER BY wtc.userFk, wtc.timed)sub
			WHERE hasBreak;

	SET @vIsOdd := TRUE;
	SET @lastUserFk := NULL;
	SET @lastDirection := NULL;

	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1, 
				lastUserFk, 
				DATE_ADD(sub.dated, INTERVAL 1 DAY), 
				'middle'
			FROM (SELECT IF(@lastUserFk <> userFk, @vIsOdd := TRUE, NULL),
						DATE(@lastTimed) dated,
						@lastUserFk lastUserFk,
						IF(direction ='middle', @vIsOdd := NOT @vIsOdd, FALSE) isOdd,
						IF(@vIsOdd 
							AND @lastDirection = 'middle' 
							AND (DATE(@lastTimed)<>date(timed)
								OR @lastUserFk<>userFk), TRUE, FALSE) hasBreak,
						@lastTimed := wtc.timed,
						@lastUserFk := userFk,
						@lastDirection := direction
					FROM tmp.workerTimeControl wtc
					ORDER BY wtc.userFk, wtc.timed)sub
			WHERE hasBreak;

	-- Cambio de dia
	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1,
				wtc.userFk, 
				util.dayEnd(date(wtc.timed)),
				'out'
			FROM workerTimeControl wtc
				JOIN tmp.`user` w ON w.userFk = wtc.userFk
				LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
			WHERE wtc.timed BETWEEN vDatedFromYesterday AND vDatedToTomorrow
				AND wtc.direction <> 'out'
			GROUP BY wtc.userFk, DATE(wtc.timed);

	INSERT INTO tmp.workerTimeControlAux (id, userFk, timed, direction)
		SELECT @vCont:= @vCont + 1, 
				wtc.userFk, 
				DATE_ADD(date(wtc.timed), INTERVAL 1 DAY),
				'in'
			FROM workerTimeControl wtc
				JOIN tmp.`user` w ON w.userFk = wtc.userFk
				LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
			WHERE wtc.timed BETWEEN vDatedFromYesterday AND vDatedToTomorrow
				AND wtc.direction <> 'out'
			GROUP BY wtc.userFk, DATE(wtc.timed);

	INSERT INTO tmp.workerTimeControl (id, userFk, timed, direction)
		SELECT id, userFk, timed, direction
			FROM tmp.workerTimeControlAux;

	SET @lastUserFk := NULL;
	SET @vIsOdd := TRUE;
	SET @vDated := NULL;
	SET @vLastTimed := NULL;

	UPDATE workerJourney wj
			JOIN (SELECT sub.dated, userFk, SUM(NigthlyHours) NigthlyHours
					FROM(SELECT (@vIsOdd := NOT @vIsOdd) isOdd,
								IF(direction='in', @vIsOdd := TRUE, @vIsOdd := @vIsOdd),
								IF(@vIsOdd, @vLastTimed:=UNIX_TIMESTAMP(timed),@vLastTimed),
								IF(direction='in', @vDated := DATE(wtc.timed), @vDated ) dated,
								wtc.userFk,
								IF(UNIX_TIMESTAMP(timed)- @vLastTimed < vMaxTimePerDay, 
									workerNigthlyHours_calculate(FROM_UNIXTIME(@vLastTimed), wtc.timed), 
									0) NigthlyHours,
								@lastUserFk := userFk
							FROM (SELECT DISTINCT(wtc.id), wtc.userFk, wtc.timed, wtc.direction
									FROM tmp.workerTimeControl wtc
										LEFT JOIN tmp.timeControlError tce ON tce.id = wtc.id
									WHERE wtc.timed BETWEEN vDatedFrom AND util.dayEnd(vDatedToTomorrow)
										AND tce.id IS NULL
									ORDER BY userFk, timed ASC
									LIMIT 10000000000000000000
								) wtc
							ORDER BY wtc.userFk, wtc.timed
						)sub
					WHERE sub.dated BETWEEN vDatedFrom AND vDatedTo	 
					GROUP BY userFk, sub.dated
				)night ON night.userFk = wj.userFk AND night.dated = wj.dated
		SET wj.nocturn = night.NigthlyHours
		WHERE NOT wj.isPaid
			AND NOT isUpdated
			AND night.NigthlyHours <> 0;


	-- Horas téoricas y precio de la hora ordinaria
	UPDATE workerJourney wj
			JOIN postgresql.business_labour_payroll blp 
				ON blp.business_id = wj.businessFk
			JOIN postgresql.business_labour bl 
				ON bl.business_id = wj.businessFk
			JOIN postgresql.calendar_labour_type cl 
				ON cl.calendar_labour_type_id = bl.calendar_labour_type_id
		SET wj.priceOrdinaryHour = 
				(vMonthsByYear * blp.importepactado) / 
				(vWeeksByYear * cl.hours_week),
			wj.contractJourney = cl.hours_week / vDaysByWeek
		WHERE wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk)
			AND NOT wj.isPaid
			AND NOT isUpdated;

	-- Precio Extras, Vacaciones y Nocturnas 
	UPDATE workerJourney wj
			JOIN(SELECT MAX(w.dated), t.dated, w.holidayInc, w.nightInc, w.extraInc
					FROM time t
						JOIN workerHourPrice w ON w.dated <= t.dated
					WHERE t.dated BETWEEN vDatedFrom AND vDatedTo
					GROUP BY t.dated
				) sub ON sub.dated = wj.dated
		SET wj.priceHolidayHour = wj.priceOrdinaryHour * sub.holidayInc,
			wj.priceNocturnHour = wj.priceOrdinaryHour * sub.nightInc,
			wj.priceExtraHour = wj.priceOrdinaryHour * sub.extraInc
		WHERE wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk)
			AND NOT wj.isPaid
			AND NOT wj.isUpdated;

	-- Elimina el precio de las horas extras para los contratos parciales.
	UPDATE workerJourney wj
			JOIN postgresql.business_labour bl 
				ON bl.business_id = wj.businessFk
			JOIN postgresql.calendar_labour_type cl 
				ON cl.calendar_labour_type_id = bl.calendar_labour_type_id
		SET wj.priceExtraHour = 0
		WHERE cl.isPartial
			AND wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk)
			AND NOT wj.isPaid 
			AND NOT wj.isUpdated;

	-- Ausencias
	UPDATE workerJourney wj
			JOIN businessCalendar bc ON bc.businessFk = wj.businessFk 
				AND bc.dated = wj.dated
			JOIN absenceType ab ON ab.id = bc.absenceTypeFk
			JOIN postgresql.business_labour bl ON bl.business_id = wj.businessFk
		SET wj.permission = ab.permissionRate * wj.contractJourney,
			wj.contractJourney = IF(ab.permissionRate = 1, 0, ab.permissionRate) * wj.contractJourney
		WHERE ab.permissionRate > 0
			AND wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk)
			AND NOT wj.isPaid
			AND NOT wj.isUpdated;

	-- Sábados / Domingos
	 UPDATE workerJourney
		SET holiday = IF(DAYNAME(dated)='sábado', 0, total),
			contractJourney = 0
		WHERE DAYNAME(dated) IN ('sábado', 'domingo') 
			AND dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR userFk = vWorkerFk)
			AND NOT isPaid
			AND NOT isUpdated;

	-- Festivos por centro de trabajo
	UPDATE workerJourney wj
			JOIN calendarHolidays ch ON ch.dated = wj.dated
			JOIN postgresql.business_labour bl ON bl.business_id = wj.businessFk 
				AND bl.workcenter_id = ch.workcenterFk 
		SET wj.holiday = wj.total,
			wj.permission = wj.contractJourney,
			wj.contractJourney = 0
		WHERE wj.dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR wj.userFk = vWorkerFk)
			AND NOT wj.isPaid
			AND NOT wj.isUpdated;

	-- Horas extras
	UPDATE workerJourney 
		SET extra = lunch + total - contractJourney
		WHERE dated BETWEEN vDatedFrom AND vDatedTo
			AND (vWorkerFk IS NULL OR userFk = vWorkerFk)
			AND NOT isPaid
			AND NOT isUpdated;

	DROP TEMPORARY TABLE tmp.timeControlCalculate;
	DROP TEMPORARY TABLE tmp.`user`;
	DROP TEMPORARY TABLE tmp.timeControlError;
	DROP TEMPORARY TABLE tmp.workerTimeControlAux;
	DROP TEMPORARY TABLE tmp.workerTimeControl;
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 `workerMistakeType_get` */;
/*!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 `workerMistakeType_get`()
BEGIN
	
/**
 * Obtiene los tipos de error para los trabajadores
 */
	
	SELECT code, description 
		FROM workerMistakeType 
		ORDER BY description;
	
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 `workerMistake_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 `workerMistake_add`(vWorkerFk INT, vWorkerMistakeTypeFk VARCHAR(10), vUserFk INT )
BEGIN

/**
 * Añade error al trabajador
 *
 * @param vWorkerFk id del trabajador al cual se le va a añadir error
 * @param vWorkerMistakeTypeFk code del tipo de error
 * @param vUserFk id del usuario que pone el error
 *
 */
	DECLARE vWorkerName VARCHAR(255) DEFAULT account.user_getNameFromId(vUserFk);

	IF(account.user_hasRole(vWorkerName,'coolerBoss')) 
	THEN
		INSERT INTO vn.workerMistake(userFk, workerMistakeTypeFk)
		VALUES(vWorkerFk, vWorkerMistakeTypeFk);
	ELSE
		CALL util.throw('No tienes permisos para realizar la acción');

	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 `workerShelving_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 `workerShelving_Add`(vWorkerFk INT, vBarcode VARCHAR(12))
BEGIN
/*
 * Inserta en workerShelving asociando los carros al trabajador
 * @Param vWorkerFk es id del trabajador
 * @Param vBarcode se puede pasar tanto el smarttag como el shelving
 */
	DECLARE vIsShelvingFk BOOL;

	SELECT COUNT(*) > 0 INTO vIsShelvingFk
		FROM vn.shelving s 
		WHERE s.code = vBarcode COLLATE utf8_general_ci;

	IF NOT vIsShelvingFk THEN

		SELECT st.shelvingFk INTO vBarcode
			FROM vn.smartTag st
			WHERE st.code = vBarcode COLLATE utf8_general_ci;
		
	END IF;

	INSERT INTO vn.workerShelving (workerFk, shelvingFk)
	VALUES(vWorkerFk, vBarcode);
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 `workerShelving_delete` */;
/*!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 `workerShelving_delete`(vWorkerFk INT, vBarcode VARCHAR(12))
BEGIN
/*
 * Borra de workerShelving el carro o etiqueta insertado por el  trabajador
 * @param vWorkerFk es id del trabajador
 * @param vBarcode se puede pasar tanto el smarttag como el shelving
 */
	DECLARE vIsShelvingFk BOOL;


	SELECT COUNT(*) > 0 INTO vIsShelvingFk
		FROM vn.shelving s 
		WHERE s.code = vBarcode COLLATE utf8_general_ci;

	
	IF NOT vIsShelvingFk THEN

		SELECT st.shelvingFk INTO vBarcode
			FROM vn.smartTag st
			WHERE st.code = vBarcode COLLATE utf8_general_ci;
		
	END IF;
	
	DELETE FROM vn.workerShelving 
		WHERE shelvingFk = vBarcode COLLATE utf8_general_ci 
			AND workerFk = vWorkerFk ;

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 `workerTimeControlAdd` */;
/*!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 `workerTimeControlAdd`(IN vUserFk INT, IN vWarehouseFk INT, IN vDated DATETIME)
BEGIN

	/*INSERT INTO workerTimeControl(userFk, timed, manual, warehouseFk)
		VALUES(vUserFk, vDated, FALSE, vWarehouseFk);
        
	CALL vn.workerTimeControlSOWP(vUserFk , vDated);*/
    
    CALL vn.workerTimeControl_add(vUserFk,vWarehouseFk,NOW(),FALSE);
 

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 `workerTimeControlPinGenerate` */;
/*!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 `workerTimeControlPinGenerate`(
	vWorkerFk INT)
BEGIN
/**
 * Create new pin for workerFk or new pin for all workers if vWorkerFk is null
 *
 */

    
	
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 `workerTimeControlSetOrder` */;
/*!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 `workerTimeControlSetOrder`()
BEGIN

	SET @order := 1;
	SET @userFk := 0;
	SET @day := 0;

	UPDATE tmp.workerTimeControl
		SET `order` = IF(userFk = @userFk AND day(timed) = @day, @order := @order + 1, @order := 1),
			userFk = @userFk := userFk,
			manual = manual + (0 * @day := day(timed))
		ORDER BY userFk, timed;

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 `workerTimeControlSetOrder_by_User_and_dateRange` */;
/*!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 `workerTimeControlSetOrder_by_User_and_dateRange`(vUserFk INT, vStarted DATE, vFinished DATE)
BEGIN

	SET @order := 0;
    SET @day := '2000-01-01';

	UPDATE vn.workerTimeControl w
		SET w.`order` = @order := IF(@day = @day := date(timed), @order, 0) + 1
        WHERE w.userFk = vUserFk
        AND w.timed BETWEEN vStarted AND util.dayend(vFinished)
        ORDER BY w.timed;

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 `workerTimeControlSOWP` */;
/*!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 `workerTimeControlSOWP`(IN vUserFk INT, IN vDated DATE)
BEGIN
		SET @order := 0;
	
		UPDATE workerTimeControl 
			SET `order` =  @order := @order + 1 
			WHERE vUserFk =userFk  
            AND vDated = DATE(timed)
			ORDER BY timed;
            
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 `workerTimeControl_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 `workerTimeControl_add`(IN vUserFk INT, IN vWarehouseFk INT, IN vTimed DATETIME, IN vIsManual BOOL)
BEGIN
	
	
	SELECT workerTimeControl_add(vUserFk,vWarehouseFk,vTimed,vIsManual);
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 `workerTimeControl_calculateOddDays` */;
/*!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 `workerTimeControl_calculateOddDays`()
BEGIN
/**
 * Calculo de las fichadas impares por empleado y dia.
 *
 * @return tmp.workerTimeControlOddDays (userFk, dated)
 */
	SET @cont := FALSE;
	SET @lastUserFk:= NULL;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlOddDays;
	CREATE TEMPORARY TABLE tmp.workerTimeControlOddDays
		SELECT sub2.userFk workerFk, sub2.dated
			FROM (
				SELECT userFk,
						dated,
						COUNT(*) cont2
					FROM (
						SELECT DATE(wtc.timed) dated,
								userFk,
								IFNULL(@cont, @cont := TRUE ),
								IF(direction = 'in' OR userFk <> @lastUserFk, @cont := @cont+1, TRUE),
								@cont cont,
								@lastUserFk := userFk
							FROM workerTimeControl wtc
							WHERE wtc.timed BETWEEN TIMESTAMPADD(YEAR,-1,CURDATE()) AND util.dayEnd(CURDATE())
							ORDER BY userFk, timed
							LIMIT 10000000000000000000)sub
					GROUP BY cont
					HAVING cont2 MOD 2 = 1
			)sub2
			JOIN worker w ON w.userFk = sub2.userFk;
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 `workerTimeControl_check` */;
/*!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 `workerTimeControl_check`(vUserFk INT, vDated DATE,vTabletFk VARCHAR(100))
proc: BEGIN
/**
 * Verifica si el empleado puede fichar en el momento actual, si puede fichar llama a workerTimeControlAdd
 *
 * @param vUserFk Identificador del trabajador
 * @return Retorna si encuentra un problema 'odd','maxTimeWork','breakDay','breakWeek' ;
 *	En caso de tener algun problema retorna el primero que encuentra
 */
	DECLARE vLastIn DATETIME ;
	DECLARE vLastOut DATETIME ;
	DECLARE vDayWorkMax INT;
	DECLARE vDayBreak INT;
	DECLARE vWeekBreak INT ;
	DECLARE vWeekScope INT;
	DECLARE vDayStayMax INT;
	DECLARE vProblem VARCHAR(20) DEFAULT NULL;
	DECLARE vTimedWorked INT;
	DECLARE vCalendarStateType VARCHAR(20) DEFAULT NULL;
	DECLARE vDepartmentFk INT;
	DECLARE vTo VARCHAR(50) DEFAULT NULL;
	DECLARE vUserName VARCHAR(50) DEFAULT NULL;
	DECLARE vBody VARCHAR(255) DEFAULT NULL;
		
	SELECT dayBreak, weekBreak, weekScope, dayWorkMax, dayStayMax 
		INTO vDayBreak, vWeekBreak, vWeekScope, vDayWorkMax, vDayStayMax
		FROM workerTimeControlParams;

	SELECT MAX(timed) INTO vLastIn
		FROM workerTimeControl 
		WHERE userFk = vUserFk 
			AND direction = 'in';
		
	SELECT MAX(timed) INTO vLastOut
		FROM workerTimeControl 
		WHERE userFk = vUserFk 
			AND direction = 'out'; 

	SELECT CONCAT(u.name,'@verdnatura.es') INTO vTo
		FROM account.user u
		WHERE u.id = (SELECT bossFk FROM worker WHERE id = vUserFk);   
		
	SELECT CONCAT(firstName,' ',lastName) INTO vUserName
		FROM worker w
		WHERE w.id = vUserFk;


	IF UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(vLastIn) > vDayStayMax THEN -- NUEVA JORNADA
		
		-- VERIFICAR DESCANSO DIARIO 
		IF UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(vLastOut) < vDayBreak THEN 
			SELECT "Descansos 12 h" AS problem;
			-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Descansos 12 h") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
			LEAVE proc;
		END IF;   
		
		-- VERIFICAR FICHADAS IMPARES DEL ÚLTIMO DÍA QUE SE FICHÓ
		IF (SELECT MOD(COUNT(*),2) -- <>0 							
				FROM workerTimeControl 
				WHERE userFk = vUserFk
					AND timed >= vLastIn
			) THEN				
			SELECT "Dias con fichadas impares" AS problem;
			-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Dias con fichadas impares") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
			LEAVE proc;	  
		END IF;
		
		-- VERIFICAR VACACIONES
		SELECT at2.name INTO vCalendarStateType
			FROM postgresql.calendar_employee ce
				JOIN postgresql.business b USING(business_id)
				JOIN postgresql.profile pr ON pr.profile_id = b.client_id
				JOIN absenceType at2 ON at2.id = ce.calendar_state_id
			WHERE ce.date = CURDATE()
				AND at2.isAllowedToWork = FALSE
				AND pr.workerFk = vUserFk
			LIMIT 1;
		
			IF(LENGTH(vCalendarStateType)) THEN
			SELECT vCalendarStateType AS problem;
			-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Vacaciones") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
			LEAVE proc;	
				
			END IF;
		
		
		-- VERIFICAR CONTRATO EN VIGOR
			IF (SELECT COUNT(*)
			FROM postgresql.business b
				JOIN postgresql.profile pr ON pr.profile_id = b.client_id
			WHERE pr.workerFk = vUserFk
				AND b.date_start <= vDated
				AND IFNULL(b.date_end,vDated) >= vDated
				) = 0 THEN
				SELECT "No hay un contrato en vigor" AS problem;
				-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"No hay un contrato en vigor") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
				LEAVE proc;	
					
			END IF;

		-- VERIFICAR DESCANSO SEMANAL
		SET @vHasBreakWeek:= FALSE;
		SET @vLastTimed:= UNIX_TIMESTAMP((NOW() - INTERVAL vWeekScope SECOND)); 
		
		DROP TEMPORARY TABLE IF EXISTS tmp.trash;
		CREATE TEMPORARY TABLE tmp.trash
		SELECT  IF(vWeekBreak-(UNIX_TIMESTAMP(timed)-@vLastTimed) <= 0, @vHasBreakWeek:=TRUE, TRUE) alias,
				@vLastTimed:= UNIX_TIMESTAMP(timed)
			FROM workerTimeControl 
			WHERE timed>= (NOW() - INTERVAL vWeekScope SECOND)
				AND userFk= vUserFk
				AND direction IN ('in','out')
			ORDER BY timed ASC;   
			
		IF UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(vLastOut) < vWeekBreak AND @vHasBreakWeek = FALSE THEN -- REVISA SI EL DESCANSO SE HA REALIZADO DESPUÉS DE LA ÚLTIMA FICHADA     
			SELECT "Descansos 36 h" AS problem;
			-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Descansos 36 h") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
			LEAVE proc;
		END IF;
		
		DROP TEMPORARY TABLE tmp.trash;    

	ELSE  -- DIA ACTUAL   
		
		-- VERIFICA QUE EL TIEMPO EFECTIVO NO SUPERE EL MÁXIMO
		SELECT IFNULL(SUM(if( mod(wtc.order,2)=1, -UNIX_TIMESTAMP(timed), UNIX_TIMESTAMP(timed))),0) -  IF( MOD(COUNT(*),2), UNIX_TIMESTAMP(NOW()), 0) INTO vTimedWorked 
			FROM workerTimeControl wtc
			WHERE userFk = vUserFk 
				AND timed >= vLastIn
			ORDER BY timed;

		IF  vTimedWorked > vDayWorkMax THEN 
			SELECT "Jornadas" AS problem;
			-- ENVIAMOS CORREO AL BOSSFK
				SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Jornadas") INTO vBody;
				CALL mail_insert(vTo,vTo,'error al fichar',vBody);
			LEAVE proc;
		END IF;

	END IF;

		-- VERIFICAR DEPARTAMENTO
	/*	IF vTabletFk IS NOT NULL  THEN
			SELECT wtcu.departmentFk INTO vDepartmentFk
				FROM workerTimeControlUserInfo wtcu
				WHERE wtcu.userFk = vUserFk;
			IF (SELECT COUNT(td.tabletFk)
						FROM tabletDepartment td
						WHERE td.tabletFk = vTabletFk AND td.departmentFk = vDepartmentFk
					) = 0 THEN
					SELECT "No perteneces a este departamento." AS problem;
					-- ENVIAMOS CORREO AL BOSSFK
					SELECT CONCAT(vUserName,' No a podido fichar por el siguiente problema: ',"No perteneces a este departamento.") INTO vBody;
					CALL mail_insert(vTo,vTo,'error al fichar',vBody);
					LEAVE proc;	
			END IF;
		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 `workerTimeControl_checkBreak` */;
/*!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 `workerTimeControl_checkBreak`(vStarted DATE)
BEGIN
/**
 * Retorna los trabajadores que no han respetado el descanso semanal de 36/72 horas 
 * El sistema verificará el descanso corto en la siguiente semana
 * o el largo en las 2 siguientes semanas a partir de la fecha dada
 * @param vStarted día inicio de la semana en el que se quiere verificar
 * @return tmp.workerWithoutWeekBreak (workerFk)
 */
	DECLARE vShortEnded DATETIME;
	DECLARE vLongEnded DATETIME;
	DECLARE vShortWeekBreak INT;
	DECLARE vLongWeekBreak INT;

	SELECT util.dayEnd(DATE_ADD(vStarted, INTERVAL shortWeekDays DAY)), 
			util.dayEnd(DATE_ADD(vStarted, INTERVAL longWeekDays DAY)),
			shortWeekBreak, 
			longWeekBreak
			INTO vShortEnded, vLongEnded, vShortWeekBreak, vLongWeekBreak
		FROM workerTimeControlConfig;
	
	SET @previousTimed:= UNIX_TIMESTAMP(vStarted);
	SET @lastUserFk := NULL;
	
	-- Descanso corto en la semana
	
	DROP TEMPORARY TABLE IF EXISTS tmp.worker;
	CREATE TEMPORARY TABLE tmp.worker
		(PRIMARY KEY(workerFk))
		ENGINE = MEMORY
		SELECT DISTINCT userFk workerFk
			FROM workerTimeControl 
			WHERE timed BETWEEN vStarted AND vShortEnded
				AND	direction IN ('in', 'out');
	
	DROP TEMPORARY TABLE IF EXISTS tmp.worker2;
	CREATE TEMPORARY TABLE tmp.worker2
		(PRIMARY KEY(workerFk))
		ENGINE = MEMORY
		SELECT workerFk
			FROM tmp.worker;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerWithoutShortWeekBreak;
	CREATE TEMPORARY TABLE tmp.workerWithoutShortWeekBreak
		SELECT sub2.userFk workerFk
			FROM(SELECT sub.userFk,
						IF(sub.userFk <> @lastUserFk,
									@previousTimed:= sub.timed, 
									FALSE),
						IF(sub.timed - @previousTimed >= vShortWeekBreak, 
							TRUE, 
							FALSE) hasShortWeekBreak,
						@previousTimed:= sub.timed,
						@lastUserFk:= sub.userFk
					FROM (
						SELECT userFk, UNIX_TIMESTAMP(timed) timed
							FROM workerTimeControl 
							WHERE timed BETWEEN vStarted AND vShortEnded
								AND	direction IN ('in', 'out')
						UNION	
						SELECT w.workerFk,
								UNIX_TIMESTAMP(IFNULL(
									MIN(wtc.timed), 
									DATE_ADD(vShortEnded, INTERVAL vShortWeekBreak SECOND)))
							FROM tmp.worker w
								LEFT JOIN workerTimeControl wtc 
									ON wtc.userFk = w.workerFk 
									AND wtc.timed BETWEEN vShortEnded 
										AND DATE_ADD(vShortEnded, INTERVAL vShortWeekBreak SECOND) 
							GROUP BY w.workerFk
						UNION
						SELECT w.workerFk,
								UNIX_TIMESTAMP(IFNULL(
									MAX(wtc.timed),
									DATE_SUB(vStarted, INTERVAL vShortWeekBreak SECOND)))
							FROM tmp.worker2 w
								LEFT JOIN workerTimeControl wtc 
									ON wtc.userFk = w.workerFk 
									AND wtc.timed BETWEEN 
										DATE_SUB(vStarted, INTERVAL vShortWeekBreak SECOND) 
										AND vStarted
							GROUP BY w.workerFk
						ORDER BY userFk, timed
						LIMIT 10000000000000000000
						)sub
				)sub2
			GROUP BY sub2.userFk
			HAVING NOT SUM(hasShortWeekBreak);

	-- Descanso largo en las 2 siguientes semanas 
	DROP TEMPORARY TABLE tmp.worker;
	CREATE TEMPORARY TABLE tmp.worker
			(PRIMARY KEY(workerFk))
			ENGINE = MEMORY
		SELECT workerFk
			FROM tmp.workerWithoutShortWeekBreak;

	DROP TEMPORARY TABLE tmp.worker2;
	CREATE TEMPORARY TABLE tmp.worker2
			(PRIMARY KEY(workerFk))
			ENGINE = MEMORY
		SELECT workerFk
			FROM tmp.workerWithoutShortWeekBreak;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerWithoutWeekBreak;
	CREATE TEMPORARY TABLE tmp.workerWithoutWeekBreak
			(PRIMARY KEY(workerFk))
			ENGINE = MEMORY
		SELECT sub2.userFk workerFk
			FROM(SELECT userFk, 
						IF(userFk <> @lastUserFk,
							@previousTimed:= timed, 
							TRUE),
						IF(timed - @previousTimed >= vLongWeekBreak, 
							TRUE, 
							FALSE) hasLongWeekBreak,
						@previousTimed:= timed,
						@lastUserFk:= userFk
					FROM (SELECT userFk, UNIX_TIMESTAMP(timed) timed
							FROM workerTimeControl wtc
								JOIN tmp.workerWithoutShortWeekBreak wws ON wws.workerFk = wtc.userFk
							WHERE timed BETWEEN vStarted AND vLongEnded
								AND	direction IN ('in', 'out')
						UNION	
						SELECT w.workerFk,
								UNIX_TIMESTAMP(IFNULL(MIN(wtc.timed), 
									DATE_ADD(vLongEnded, INTERVAL vLongWeekBreak SECOND)))
							FROM tmp.worker w
								LEFT JOIN workerTimeControl wtc 
									ON wtc.userFk = w.workerFk 
									AND timed BETWEEN vLongEnded 
										AND DATE_ADD(vLongEnded, INTERVAL vLongWeekBreak SECOND) 
							GROUP BY w.workerFk
						UNION
						SELECT w.workerFk, 
								UNIX_TIMESTAMP(IFNULL(MAX(wtc.timed), 
									DATE_SUB(vStarted, INTERVAL vLongWeekBreak SECOND)))
							FROM tmp.worker2 w
								LEFT JOIN workerTimeControl wtc 
									ON wtc.userFk = w.workerFk 
									AND timed BETWEEN DATE_SUB(vStarted, INTERVAL vLongWeekBreak SECOND) 
										AND vStarted
							GROUP BY w.workerFk
						ORDER BY userFk, timed
						LIMIT 10000000000000000000
						)sub
				)sub2
			GROUP BY userFk
			HAVING NOT SUM(hasLongWeekBreak);

	DROP TEMPORARY TABLE tmp.workerWithoutShortWeekBreak, tmp.worker, tmp.worker2;
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 `workerTimeControl_clockIn` */;
/*!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 `workerTimeControl_clockIn`(
		vWorker INT, 
		vTimed DATETIME, 
		vDirection VARCHAR(10))
BEGIN
/**
 * Verifica si el empleado puede fichar
 * @param vWorker Identificador del trabajador
 * @param vTimed valor de la fichada, IF vTimed IS NULL vTimed = NOW()
 * @param vDirection solo se pueden pasa los valores del campo 
 * 	workerTimeControl.direction ENUM('in', 'out', 'middle')	 
 * @return Si todo es correcto, retorna el número de id la tabla workerTimeControl. 
 * Si hay algún problema, devuelve el mesaje a que se debe mostrar al usuario
 * Solo retorna el primer problema, en caso de no ocurrir ningún error se añadirá 
 * fichada a la tabla vn.workerTimeControl
 */
	DECLARE vLastIn DATETIME;
	DECLARE vLastOut DATETIME;
	DECLARE vNextIn DATETIME;
	DECLARE vLastDirection VARCHAR(6);
	DECLARE vNextDirection VARCHAR(6);
	DECLARE vDayBreak INT;
	DECLARE vShortWeekBreak INT;
	DECLARE vLongWeekBreak INT;
	DECLARE vWeekScope INT;
	DECLARE vGap INT;
	DECLARE vMailTo VARCHAR(50) DEFAULT NULL;
	DECLARE vUserName VARCHAR(50) DEFAULT NULL;
	DECLARE vIsError BOOLEAN DEFAULT FALSE;
	DECLARE vErrorMessage VARCHAR(255) DEFAULT NULL;
	DECLARE vErrorCode VARCHAR(50);
	DECLARE vDated DATE;
	DECLARE vIsAllowedToWork VARCHAR(50);
	DECLARE vDepartmentFk INT;
	DECLARE vTimedLoop BIGINT;
	DECLARE vTimedLoopPrevious BIGINT;
	DECLARE vHasBreakWeek BOOLEAN DEFAULT FALSE;
	DECLARE vManual BOOLEAN DEFAULT TRUE;
	DECLARE vDone INT DEFAULT FALSE;

	DECLARE vCursor CURSOR FOR
		SELECT UNIX_TIMESTAMP(vTimed) timed
		UNION
		SELECT UNIX_TIMESTAMP(timed)
			FROM workerTimeControl 
			WHERE timed BETWEEN (vTimed - INTERVAL vGap SECOND) AND vTimed 
				AND userFk = vWorker 
				AND direction IN ('in', 'out')
		ORDER BY timed ASC;
	
	DECLARE vCursor2 CURSOR FOR
		SELECT UNIX_TIMESTAMP(vTimed) timed
		UNION
		SELECT UNIX_TIMESTAMP(timed)
			FROM workerTimeControl 
			WHERE timed BETWEEN vTimed AND (vTimed + INTERVAL vGap SECOND) 
				AND userFk = vWorker 
				AND direction IN ('in', 'out')
		ORDER BY timed ASC;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	DECLARE EXIT HANDLER FOR SQLSTATE '45000' 
	BEGIN

		SELECT CONCAT(u.name, '@verdnatura.es'), 
				CONCAT(w.firstName, ' ', w.lastName) 
				INTO vMailTo, vUserName
			FROM account.user u
				JOIN worker w ON w.bossFk = u.id 
			WHERE w.id = vWorker;

		CASE vErrorCode 
			WHEN 'IS_NOT_ALLOWED_FUTURE' THEN
				SELECT 'No se permite fichar a futuro' INTO vErrorMessage;
			WHEN 'INACTIVE_BUSINESS' THEN
				SELECT 'No hay un contrato en vigor' INTO vErrorMessage;
			WHEN 'IS_NOT_ALLOWED_WORK' THEN
				SELECT 'No está permitido trabajar' INTO vErrorMessage;
			WHEN 'ODD_WORKERTIMECONTROL' THEN
				SELECT 'Fichadas impares' INTO vErrorMessage;
			WHEN 'BREAK_DAY' THEN
				SELECT CONCAT('Descanso diario ', FORMAT(vDayBreak/3600, 0), 'h.') 
					INTO vErrorMessage;
			WHEN 'BREAK_WEEK' THEN
				SELECT CONCAT('Descanso semanal ', 
					FORMAT(vShortWeekBreak / 3600,0) ,'h. / ',
					FORMAT(vLongWeekBreak / 3600, 0) ,'h.') INTO vErrorMessage;
			WHEN 'WRONG_DIRECTION' THEN
				SELECT 'Dirección incorrecta' INTO vErrorMessage;
			ELSE 
				SELECT 'Error sin definir'INTO vErrorMessage;
		END CASE;
		
		SELECT vErrorMessage `error`;
		SELECT CONCAT(vUserName, 
				' no ha podido fichar por el siguiente problema: ', 
				vErrorMessage) 
			INTO vErrorMessage;
		CALL mail_insert( vMailTo, vMailTo, 'Error al fichar', vErrorMessage);
		
	END;

	IF (vTimed IS NULL) THEN 
		SET vTimed = NOW();
		SET vManual = FALSE;
	END IF;
	
	SET vDated = DATE(vTimed);
		
	SELECT IF(pc.category_name = 'Conductor +3500kg', 
				wc.dayBreakDriver, 
				wc.dayBreak), 
			wc.shortWeekBreak,
			wc.longWeekBreak,
			wc.weekScope
			INTO vDayBreak, 
			vShortWeekBreak,
			vLongWeekBreak,
			vWeekScope
		FROM workerLabour w
			JOIN postgresql.business_labour bl ON bl.business_id = w.businessFk
			JOIN postgresql.professional_category pc 
				ON pc.professional_category_id = bl.professional_category_id
			JOIN workerTimeControlConfig wc ON TRUE
		WHERE w.workerFk = vWorker 
			AND vDated BETWEEN w.started AND IFNULL(w.ended, vDated);		

	SELECT timed INTO vLastIn
		FROM workerTimeControl 
		WHERE userFk = vWorker
			AND direction = 'in' 
			AND timed < vTimed
		ORDER BY timed DESC
		LIMIT 1;	

	SELECT timed INTO vLastOut
		FROM workerTimeControl 
		WHERE userFk = vWorker
			AND direction = 'out' 
			AND timed < vTimed
		ORDER BY timed DESC
		LIMIT 1;

	SELECT timed INTO vNextIn
		FROM workerTimeControl 
		WHERE userFk = vWorker
			AND direction = 'in' 
			AND timed > vTimed
		ORDER BY timed ASC
		LIMIT 1;

	SELECT direction INTO vNextDirection
		FROM workerTimeControl 
		WHERE userFk = vWorker
			AND timed > vTimed
		ORDER BY timed ASC
		LIMIT 1;
			
	SELECT direction INTO vLastDirection
		FROM workerTimeControl 
		WHERE userFk = vWorker
			AND timed < vTimed
		ORDER BY timed DESC
		LIMIT 1;	

	-- FICHADAS A FUTURO
	IF vTimed > DATE_ADD(NOW(), INTERVAL 60 SECOND) THEN 
		SET vErrorCode = 'IS_NOT_ALLOWED_FUTURE';
		CALL util.throw(vErrorCode); 
	END IF;
	
	-- CONTRATO EN VIGOR
	IF vDayBreak IS NULL THEN
		SET vErrorCode = 'INACTIVE_BUSINESS';
		CALL util.throw(vErrorCode); 
	END IF;

	-- VERIFICAR SI ESTÁ PERMITIDO TRABAJAR
	CALL timeBusiness_calculateByWorker(vWorker, vDated, vDated);
	SELECT isAllowedToWork INTO vIsAllowedToWork 
		FROM tmp.timeBusinessCalculate;
		DROP TEMPORARY TABLE tmp.timeBusinessCalculate;
	
	IF NOT vIsAllowedToWork THEN
		SET vErrorCode = 'IS_NOT_ALLOWED_WORK'; 
		CALL util.throw(vErrorCode);
	END IF;
		
	-- DIRECCION CORRECTA 
	CALL workerTimeControl_direction(vWorker, vTimed);
	IF (SELECT 
			IF(IF(option1 IN ('inMiddle', 'outMiddle'),
					'middle', 
					option1) <> vDirection
				AND IF(option2 IN ('inMiddle', 'outMiddle'),
					'middle', 
					IFNULL(option2, '')) <> vDirection, 
				TRUE , 
				FALSE) 
			FROM tmp.workerTimeControlDirection
		) THEN 
		SET vIsError = TRUE;
	END IF;
		
	DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
	IF vIsError = TRUE THEN
		SET vErrorCode = 'WRONG_DIRECTION';	
		CALL util.throw(vErrorCode); 
	END IF;	
		
	-- FICHADAS IMPARES
	IF (SELECT IF(vDirection = 'in', 
				MOD(COUNT(*), 2) , 
				IF (vDirection = 'out', NOT MOD(COUNT(*), 2), FALSE)) 
			FROM workerTimeControl 
			WHERE userFk = vWorker
				AND timed BETWEEN vLastIn AND vTimed
		) THEN 
		SET vErrorCode = 'ODD_WORKERTIMECONTROL'; 
		CALL util.throw(vErrorCode); 
	END IF;

	-- DESCANSO DIARIO 
	CASE vDirection
		WHEN 'in' THEN
			IF UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(vLastOut) <= vDayBreak THEN 
				SET vIsError = TRUE;
			END IF;
		WHEN 'out' THEN
			IF UNIX_TIMESTAMP(vNextIn) - UNIX_TIMESTAMP(vTimed) <= vDayBreak THEN 
				SET vIsError = TRUE;
			END IF;
		ELSE BEGIN END;
	END CASE;
		
	IF vIsError THEN
		SET vErrorCode = 'BREAK_DAY';	
		CALL util.throw(vErrorCode); 
	END IF;

	-- VERIFICAR DESCANSO SEMANAL
	IF (vDirection IN('in', 'out')) THEN 
		-- VERIFICA DESCANSO CORTO EN LA ÚLTIMA SEMANA 
		SET vGap = vWeekScope;
		SET vTimedLoopPrevious = UNIX_TIMESTAMP((vTimed - INTERVAL vGap SECOND));
		SET vDone = FALSE;
		OPEN vCursor;
			l:LOOP
				FETCH vCursor INTO vTimedLoop;
				IF vDone THEN 
					LEAVE l;
				END IF;
				IF vShortWeekBreak - (vTimedLoop - vTimedLoopPrevious) <= 0 THEN					
					SET vHasBreakWeek = TRUE;
					LEAVE l;
				END IF;
				SET vTimedLoopPrevious = vTimedLoop;
			END LOOP l;	
		CLOSE vCursor;
		-- VERIFICA DESCANSO LARGO EN LA ÚLTIMAS 2 SEMANAS
		IF NOT vHasBreakWeek THEN
			SET vGap = vWeekScope * 2;
			SET vTimedLoopPrevious = UNIX_TIMESTAMP(vTimed - INTERVAL vGap SECOND);
			SET vDone = FALSE;
			OPEN vCursor;
				l:LOOP
					FETCH vCursor INTO vTimedLoop;
					IF vDone THEN 
						LEAVE l;
					END IF;
					IF vLongWeekBreak - (vTimedLoop - vTimedLoopPrevious) <= 0 THEN
						SET vHasBreakWeek = TRUE;							
						LEAVE l;
					END IF;
					SET vTimedLoopPrevious = vTimedLoop;
				END LOOP l;	
			CLOSE vCursor;
		END IF;

		IF vManual THEN
			-- VERIFICA DESCANSO CORTO EN LA PRÓXIMA SEMANA 
			SET vGap = vWeekScope;
			SET vTimedLoopPrevious = vTimed;
			SET vDone = FALSE;
			OPEN vCursor2;
				l:LOOP
					FETCH vCursor2 INTO vTimedLoop;
					IF vDone THEN 
						LEAVE l;
					END IF;
					IF vShortWeekBreak - (vTimedLoop - vTimedLoopPrevious) <= 0 THEN
						SET vHasBreakWeek = TRUE;
						LEAVE l;
					END IF;
					SET vTimedLoopPrevious = vTimedLoop;
				END LOOP l;	
			CLOSE vCursor2;
			-- VERIFICA DESCANSO LARGO EN LAS PRÓXIMAS 2 SEMANAS
			IF NOT vHasBreakWeek THEN
				SET vGap = vWeekScope * 2;
				SET vTimedLoopPrevious = vTimed;
				SET vDone = FALSE;
				OPEN vCursor2;
					l:LOOP
						FETCH vCursor2 INTO vTimedLoop;
						IF vDone THEN 
							LEAVE l;
						END IF;
						IF vShortWeekBreak - (vTimedLoop - vTimedLoopPrevious) <= 0 THEN
							SET vHasBreakWeek = TRUE;
							LEAVE l;
						END IF;
						SET vTimedLoopPrevious = vTimedLoop;
					END LOOP l;	
				CLOSE vCursor2;
			END IF;
		END IF;
		IF NOT vHasBreakWeek THEN
			SET vErrorCode = 'BREAK_WEEK';	
			CALL util.throw(vErrorCode); 
		END IF;	
	END IF;

	-- SE PERMITE FICHAR
	INSERT INTO workerTimeControl(userFk, timed, direction, manual)
		VALUES(vWorker, vTimed, vDirection, vManual);
	
	SELECT LAST_INSERT_ID() 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              = 'NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `workerTimeControl_direction` */;
/*!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_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `workerTimeControl_direction`(vWorkerFk VARCHAR(10), vTimed DATETIME)
BEGIN
/**
 * Devuelve que direcciones de fichadas son lógicas a partir de la anterior fichada
 * @param vWorkerFk Identificador del trabajador
 * @return (option1, option2)
 * Los valores posibles de retorno son ('in', 'inMiddle', 'outMiddle', 'out') 		
 */
	DECLARE vLastIn DATETIME ;
	DECLARE vIsMiddleOdd BOOLEAN ;

	IF (vTimed IS NULL) THEN 
		SET vTimed = NOW();
	END IF;
	
	SELECT timed INTO vLastIn
		FROM workerTimeControl 
		WHERE userFk = vWorkerFk
			AND direction = 'in' 
			AND timed < vTimed
		ORDER BY timed DESC
		LIMIT 1;
	
	SELECT (COUNT(*)mod 2 = 1) INTO vIsMiddleOdd
		FROM workerTimeControl 
		WHERE userFk = vWorkerFk
			AND direction = 'middle' 
			AND timed BETWEEN vLastIn AND NOW();

	DROP TEMPORARY TABLE IF EXISTS tmp.workerTimeControlDirection;
	CREATE TEMPORARY TABLE tmp.workerTimeControlDirection
		SELECT IF(isCorrect, option1, NULL) option1,
				IF(isCorrect, option2, NULL) option2
			FROM( SELECT IF(w.direction <> 'out' AND (UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(w.timed) > wc.dayBreak), FALSE, TRUE) isCorrect,
						CASE WHEN w.direction ='in' THEN 'inMiddle'
							WHEN w.direction = 'out' THEN 'in'
							WHEN w.direction = 'middle' AND vIsMiddleOdd THEN 'outMiddle'
							WHEN w.direction IS NULL THEN 'in'
							ELSE 'inMiddle'
						END option1,
						CASE WHEN w.direction ='in' THEN 'out'
							WHEN w.direction = 'out' THEN NULL
							WHEN w.direction = 'middle' AND vIsMiddleOdd THEN NULL
							WHEN w.direction IS NULL THEN NULL
							ELSE 'out'
						END option2
					FROM workerTimeControl w
						JOIN workerTimeControlConfig wc ON TRUE
					WHERE w.timed <= vTimed
						AND w.userFk = vWorkerFk
					ORDER BY w.timed DESC
					LIMIT 1)sub;

	IF (SELECT IF(COUNT(*)=0, TRUE, FALSE) FROM tmp.workerTimeControlDirection ) THEN
		INSERT INTO tmp.workerTimeControlDirection (option1, option2)
			VALUES('in', NULL);
	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 `workerTimeControl_getClockIn` */;
/*!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 `workerTimeControl_getClockIn`(
	vUserFk INT, 
	vDated DATE)
BEGIN
/**
 * Muestra una tabla con los 7 días inmediatamente anteriores a la fecha proporcionada
 * y las fichadas de cada día, en columnas por día
 * @param vUserFk Identificador del trabajador
 * @param vDated Fecha proporcionada
 */
	CALL timeControl_calculateByWorker(
		vUserFk, 
		DATE_SUB(vDated, INTERVAL 6 DAY), util.dayEnd(vDated));
		
	SET @position := 0;
	SET @lastDated := NULL;

	SELECT *
		FROM( SELECT MAX(6daysAgo) 6daysAgo,
					MAX(6daysAgoDirection) 6daysAgoDirection,
					MAX(5daysAgo) 5daysAgo,
					MAX(5daysAgoDirection) 5daysAgoDirection,
					MAX(4daysAgo) 4daysAgo,
					MAX(4daysAgoDirection) 4daysAgoDirection,
					MAX(3daysAgo) 3daysAgo,
					MAX(3daysAgoDirection) 3daysAgoDirection,
					MAX(2daysAgo) 2daysAgo,
					MAX(2daysAgoDirection) 2daysAgoDirection,
					MAX(1daysAgo) 1daysAgo,
					MAX(1daysAgoDirection) 1daysAgoDirection,
					MAX(0daysAgo) 0daysAgo, 
					MAX(0daysAgoDirection) 0daysAgoDirection
				FROM(SELECT IF(daysAgo = 6, timed, '') 6daysAgo,
							IF(daysAgo = 5, timed, '') 5daysAgo,
							IF(daysAgo = 4, timed, '') 4daysAgo,
							IF(daysAgo = 3, timed, '') 3daysAgo,
							IF(daysAgo = 2, timed, '') 2daysAgo,
							IF(daysAgo = 1, timed, '') 1daysAgo,
							IF(daysAgo = 0, timed, '') 0daysAgo,
							IF(daysAgo = 6, direction, '') 6daysAgoDirection,
							IF(daysAgo = 5, direction, '') 5daysAgoDirection,
							IF(daysAgo = 4, direction, '') 4daysAgoDirection,
							IF(daysAgo = 3, direction, '') 3daysAgoDirection,
							IF(daysAgo = 2, direction, '') 2daysAgoDirection,
							IF(daysAgo = 1, direction, '') 1daysAgoDirection,
							IF(daysAgo = 0, direction, '') 0daysAgoDirection,

							direction,
							position
						FROM(SELECT DATEDIFF(vDated, timed) daysAgo,
									TIME_FORMAT(timed,'%H:%i') timed, 
									IF(DATE(timed) <> @lastDated, @position := 0, NULL),
									@position := @position+1 position,
									@lastDated := DATE(timed),
									direction
								FROM workerTimeControl wtc
								WHERE wtc.userFk = vUserFk
									AND wtc.timed >= TIMESTAMPADD(DAY, -6,vDated)
								ORDER BY wtc.timed
								LIMIT 10000000000000000000
							)sub
					)sub2
				GROUP BY position) sub3 
					JOIN (SELECT MAX(IF(daysAgo = 6, timeWorkSeconds, 0)) 6daysAgoTotal,
								MAX(IF(daysAgo = 5, timeWorkSeconds, 0)) 5daysAgoTotal,
								MAX(IF(daysAgo = 4, timeWorkSeconds, 0)) 4daysAgoTotal,
								MAX(IF(daysAgo = 3, timeWorkSeconds, 0)) 3daysAgoTotal,
								MAX(IF(daysAgo = 2, timeWorkSeconds, 0)) 2daysAgoTotal,
								MAX(IF(daysAgo = 1, timeWorkSeconds, 0)) 1daysAgoTotal,
								MAX(IF(daysAgo = 0, timeWorkSeconds, 0)) 0daysAgoTotal 
							FROM (SELECT DATEDIFF(vDated, dated) daysAgo,
										timeWorkSeconds
									FROM tmp.timeControlCalculate) sub4)sub5 ON TRUE;
	
		DROP TEMPORARY TABLE tmp.timeControlCalculate;
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 `workerTimeControl_login` */;
/*!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 `workerTimeControl_login`(vWorkerFk VARCHAR(10))
BEGIN
/**
 * Consulta la información del usuario y los botones que tiene que activar en la tablet tras hacer login
 * Solo retornará 1 ó 2 opciones de las 4 posibles
 * @param vWorkerFk Identificador del trabajador
 * @return (name, surname, userFk, departmentFk, button1, button2)
 * Los valores posibles para button son ('in', 'inMiddle', 'outMiddle', 'out')
 */
	CALL vn.workerTimeControl_direction(vWorkerFk, NOW());

	SELECT wi.name,
			wi.surname,
			wi.userFk,
			wi.departmentFk,
			w.option1 button1,
			w.option2 button2
		FROM  workerTimeControlUserInfo wi
			JOIN tmp.workerTimeControlDirection w
		WHERE wi.userFk = vWorkerFk
		LIMIT 1;

	DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
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 `workerTimeControl_remove` */;
/*!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 `workerTimeControl_remove`(IN vUserFk INT, IN vTimed DATETIME)
BEGIN

	DECLARE vDirectionRemove VARCHAR(6);
	DECLARE vDirectionPrevious VARCHAR(6);
    DECLARE vTimedPrevious DATETIME;

	SELECT direction INTO vDirectionRemove 
		FROM vn.workerTimeControl 
		WHERE userFk = vUserFk 
			AND timed = vTimed ;

	IF vDirectionRemove = 'out' THEN
	
		 SELECT timed, direction INTO vTimedPrevious, vDirectionPrevious
			FROM vn.workerTimeControl 
			WHERE userFk =  vUserFk 
				AND timed < vTimed
			ORDER BY timed DESC
			LIMIT 1;       
                
         IF  vDirectionPrevious = "middle" THEN
			UPDATE vn.workerTimeControl 
				SET direction = "out"
                WHERE userFk = vUserFk
					AND timed = vTimedPrevious;
         END IF;
   
	ELSE IF vDirectionRemove = 'in' THEN

			UPDATE vn.workerTimeControl 
				SET direction = "in"
				WHERE userFk = vUserFk
					AND timed > vTimed
				ORDER BY timed ASC
				LIMIT 1; 
          END IF;
			
	END IF;
	
	DELETE FROM vn.workerTimeControl
		WHERE userFk =  vUserFk 
			AND timed = vTimed;
            
    CALL vn.workerTimeControlSOWP(vUserFk, vTimed);
 
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 `workerTimeControl_repair` */;
/*!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 `workerTimeControl_repair`()
proc: BEGIN
/**
 * Corrige las fichadas
 *
 */

/*1- poner todos a middle*/
UPDATE vn.workerTimeControl SET direction = 'middle';

/*2- poner los out*/
UPDATE vn.workerTimeControl wtc 
	JOIN 
		(SELECT userFk,MAX(timed) maxTimed FROM
				(SELECT id, userFk, timed, date(timed) dated
					FROM vn.workerTimeControl 
				) sub 
		GROUP BY userFk,dated
		)sub
	SET direction = "out"
	WHERE   wtc.userFk = sub.userFk 
		AND wtc.timed =  sub.maxTimed;
        
 /*3- poner los in*/       
UPDATE vn.workerTimeControl wtc 
	JOIN 
		(SELECT userFk,MIN(timed) maxTimed FROM
				(SELECT id, userFk, timed, date(timed) dated
					FROM vn.workerTimeControl 
				) sub 
		GROUP BY userFk,dated
		)sub
	SET direction = "in"
	WHERE   wtc.userFk = sub.userFk 
		AND wtc.timed =  sub.maxTimed ;   
	
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 `workerTimeControl_sendMail` */;
/*!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 `workerTimeControl_sendMail`(vWeek INT, vYear INT, vWorkerFk INT)
BEGIN
/**
 * Inserta en la tabla vn.mail para notificar a los empleados que teletrabajan de las jornadas que se han registrado. 
 * Inserta fichadas en el casos que se determina que el empleado está realizando teletrabajo
 *
 * @param vWeek 
 * @param vYear 
 * @param vWorkerFk -> En el caso de querer generarlo para todos los empleados deberá de informarse como NULL
 */
	DECLARE vStarted VARCHAR(25);
	DECLARE vEnded VARCHAR(25);
	DECLARE vDone BOOL;
	DECLARE vReceiver VARCHAR(255);
	DECLARE vReceiverOld VARCHAR(255);
	DECLARE vDated DATE;
	DECLARE vTimeWorkDecimal DECIMAL(5,2);
	DECLARE vTimeWorkSexagesimal VARCHAR(5);
	DECLARE vTimeWorkedDecimal DECIMAL(5,2);
	DECLARE vTimeWorkedSexagesimal VARCHAR(5);
	DECLARE vTimeWorkDecimalTotal DECIMAL(5,2);
	DECLARE vTimeTable VARCHAR(100);
	DECLARE vTimeTableDecimal DECIMAL(5,2);
	DECLARE vWorkerFkOld INTEGER;
	DECLARE vBusinessFk INTEGER;
	DECLARE vHeader TEXT;
	DECLARE vBody TEXT;
	DECLARE vFooter TEXT;
	DECLARE vReturn INTEGER;
	DECLARE vAbsenceType VARCHAR(50);
	DECLARE vWorkerInfo VARCHAR(90);
	DECLARE vPermissionRate DECIMAL(5,2);
	DECLARE vIsTeleworking BOOL;
	DECLARE vIsTeleworkingOld BOOL;
	DECLARE vError BOOL DEFAULT FALSE;

	DECLARE vCursor CURSOR FOR
		SELECT CONCAT(u.name, '@verdnatura.es'), u.id, tb.dated, tb.timeWorkDecimal, LEFT(tb.timeWorkSexagesimal,5) timeWorkSexagesimal, 
				tb.timeTable, tc.timeWorkDecimal timeWorkedDecimal, LEFT(tc.timeWorkSexagesimal,5) timeWorkedSexagesimal, tb.type, tb.businessFk,tb.permissionRate, d.isTeleworking
			FROM tmp.timeBusinessCalculate tb
				JOIN user u ON u.id = tb.userFk 
				JOIN department d ON d.id = tb.departmentFk
				JOIN postgresql.business b ON b.business_id = tb.businessFk
				LEFT JOIN tmp.timeControlCalculate tc ON tc.userFk = tb.userFk AND tc.dated = tb.dated
				LEFT JOIN worker w ON w.id = u.id
				LEFT JOIN `user` u2 ON u2.id = w.bossFk
				JOIN (SELECT tb.userFk,
								SUM(IF(tb.type IS NULL,
										IF(tc.timeWorkDecimal > 0, FALSE, IF(tb.timeWorkDecimal > 0, TRUE, FALSE)), 
										TRUE))isTeleworkingWeek
							FROM tmp.timeBusinessCalculate1 tb
								LEFT JOIN tmp.timeControlCalculate1 tc ON tc.userFk = tb.userFk AND tc.dated = tb.dated
							GROUP BY tb.userFk
							HAVING isTeleworkingWeek > 0
				 )sub ON sub.userFk = u.id
			WHERE d.hasToRefill AND
				IFNULL(vWorkerFk,u.id) = u.id AND
				b.companyCodeFk = 'VNL'
		ORDER BY u.id, tb.dated;		 

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
	
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
	BEGIN
		SET vError = TRUE;
		
		INSERT INTO tmp.error(workerFk)
			SELECT vWorkerFk;
	END;
	
	DROP TABLE IF EXISTS tmp.timeControlCalculate;
	DROP TABLE IF EXISTS tmp.timeBusinessCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate1;
	DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate1;
	DROP TEMPORARY TABLE IF EXISTS tmp.error;

	CREATE TEMPORARY TABLE tmp.error (workerFk INT);

	SELECT CONCAT (MIN(dated), ' 00:00:00'), CONCAT (MAX(dated), ' 23:59:59') INTO vStarted, vEnded
		FROM time 
		WHERE year = vYear AND 
			 week = vWeek;

	DELETE FROM workerTimeControl 
		WHERE IFNULL(vWorkerFk, userFk) = userFk AND
			 timed BETWEEN vStarted AND vEnded AND 
		 isSendMail;

	UPDATE workerTimeControlMail
		SET updated = NOW(), state = 'SENDED'
		WHERE year = vYear AND 
			 week = vWeek AND
		 IFNULL(vWorkerFk, workerFk) = workerFk ;

	IF vWorkerFk IS NULL THEN
		CALL timeControl_calculateAll(vStarted,vEnded);
		CALL timeBusiness_calculateAll(vStarted,vEnded); 
	ELSE
		CALL timeControl_calculateByUser(vWorkerFk,vStarted,vEnded);
		CALL timeBusiness_calculateByUser(vWorkerFk,vStarted,vEnded);
	END IF;

	CREATE TEMPORARY TABLE tmp.timeControlCalculate1
		SELECT * FROM tmp.timeControlCalculate;
	CREATE TEMPORARY TABLE tmp.timeBusinessCalculate1
		SELECT * FROM tmp.timeBusinessCalculate;

	SET vTimeWorkDecimalTotal = 0;
	SET vBody= '';
	OPEN vCursor;
	FETCH vCursor INTO vReceiver, vWorkerFk, vDated, vTimeWorkDecimal, vTimeWorkSexagesimal, vTimeTable, vTimeWorkedDecimal, vTimeWorkedSexagesimal, vAbsenceType, vBusinessFk, vPermissionRate, vIsTeleworking ;
	SET vWorkerFkOld = vWorkerFk ;
	SET vReceiverOld = vReceiver;
	SET vIsTeleworkingOld = vIsTeleworking;
proc: LOOP
	 IF vDone THEN
			LEAVE proc;
		 END IF;
		
		START TRANSACTION;
		SET vError = FALSE;

		IF vTimeWorkDecimal>0 AND vTimeWorkedDecimal IS NULL AND IFNULL(vPermissionRate, TRUE) THEN
			IF vTimeTable IS NULL THEN 
				INSERT INTO workerTimeControl (userFk, timed, manual, direction, isSendMail)
					SELECT vWorkerFk, CONCAT(vDated,' 08:00'), TRUE, 'in', TRUE;
				IF vTimeWorkDecimal >= 5 THEN
					INSERT INTO workerTimeControl (userFk, timed, manual, direction, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated,' 09:00'), TRUE, 'middle', TRUE;
					INSERT INTO workerTimeControl (userFk, timed, manual, direction, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated,' 09:20'), TRUE, 'middle', TRUE;
				END IF;
				INSERT INTO workerTimeControl (userFk, timed, manual, direction, isSendMail)
						SELECT vWorkerFk,CONCAT(vDated,' ', LEFT (SEC_TO_TIME(28800 + (vTimeWorkDecimal * 3600)), 5)), TRUE, 'out', TRUE;
			ELSE
			 SELECT SUM(TIME_TO_SEC(j.end)-TIME_TO_SEC(j.start))/3600 INTO vTimeTableDecimal
					FROM postgresql.journey j 
					WHERE j.business_id = vBusinessFk AND 
						j.day_id = WEEKDAY(vDated)+1; 
				IF vTimeWorkDecimal = vTimeTableDecimal THEN
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', j.start), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;
							
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', j.end), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;				 
				ELSE
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', MIN(j.start)), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;				 
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', SEC_TO_TIME(TIME_TO_SEC(MIN(j.start)) + (vTimeWorkDecimal * 3600))), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;						 
				 END IF; 
				 
				 IF vTimeWorkDecimal >= 5 THEN
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', SEC_TO_TIME(TIME_TO_SEC(MIN(j.start)) + 3600)), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;						
					INSERT INTO workerTimeControl (userFk, timed, manual, isSendMail)
						SELECT vWorkerFk, CONCAT(vDated, ' ', SEC_TO_TIME(TIME_TO_SEC(MIN(j.start)) + 4800)), TRUE, TRUE
							FROM postgresql.journey j 
							WHERE j.business_id = vBusinessFk AND 
								j.day_id = WEEKDAY(vDated)+1;						 
				 END IF;
								 
				UPDATE workerTimeControl wtc
					JOIN (SELECT id FROM workerTimeControl 
									WHERE userFk = vWorkerFk AND 
										 timed BETWEEN vDated AND CONCAT(vDated, ' 23:59:59')
									ORDER BY timed ASC
									LIMIT 1)sub on sub.id= wtc.id
					SET direction = 'in' ; 
					
				UPDATE workerTimeControl wtc
					JOIN (SELECT id FROM workerTimeControl 
									WHERE userFk = vWorkerFk AND 
										 timed BETWEEN vDated AND CONCAT(vDated, ' 23:59:59')
									ORDER BY timed DESC 
									LIMIT 1)sub on sub.id= wtc.id
					SET direction = 'out' ;				 
		
			END IF;
		END IF;

		SELECT CONCAT(IFNULL(vBody,""), "<tr>
							 <td bgcolor=\"#8ebb27\" align=\"center\">", DATE_FORMAT(vDated, "%d/%m/%Y"), "</td>
							 <td align=\"center\">", CASE WEEKDAY(vDated)+1
															WHEN 1 THEN 'Lunes'
															WHEN 2 THEN 'Martes'
															WHEN 3 THEN 'Miércoles'
															WHEN 4 THEN 'Jueves'
															WHEN 5 THEN 'Viernes'
															WHEN 6 THEN 'Sábado'
															WHEN 7 THEN 'Domingo'
													 END , "</td>
							 <td align=\"center\">", IFNULL(GROUP_CONCAT(MID(timed, 12, 5) ORDER BY timed ASC SEPARATOR ' - '), " - "),"</td>
							 <td align=\"center\">", IFNULL(vAbsenceType, IF (vTimeWorkedDecimal>0, "Presencial", IF(vTimeWorkDecimal>0, "Teletrabajo", " - "))), "</td>
							 <td align=\"center\">", IFNULL(vTimeWorkedSexagesimal,IF(IFNULL(vPermissionRate, TRUE), vTimeWorkDecimal, 0)), "</td>
						</tr>") INTO vBody
						FROM workerTimeControl 
						WHERE userFk = vWorkerFk AND 
							timed BETWEEN vDated AND CONCAT(vDated," 23:59:59");
		SET vTimeWorkDecimalTotal = vTimeWorkDecimalTotal + IFNULL(vTimeWorkedDecimal, IF( IFNULL(vPermissionRate, TRUE), vTimeWorkDecimal, 0));
		SET vDone = FALSE;
		FETCH vCursor INTO vReceiver, vWorkerFk, vDated, vTimeWorkDecimal, vTimeWorkSexagesimal, vTimeTable, vTimeWorkedDecimal, vTimeWorkedSexagesimal, vAbsenceType, vBusinessFk, vPermissionRate, vIsTeleworking;

		IF vWorkerFk <> vWorkerFkOld OR vDone THEN		
			SELECT CONCAT_WS(' ', fi, firstName, lastName) INTO vWorkerInfo
		 		FROM worker
				WHERE id = vWorkerFkOld;

			SET vHeader = CONCAT("<br><br><br>
							<div align=\"center\">
								<h2>", vWorkerInfo , "</h2>	
								<table cellpadding=\"5\" cellspacing=\"2\" width=\"60%\" style=\"color: #153643; font-family: \"Trebuchet MS\"; font-size: 18px; line-height: 18px;\">
								<tr>
									<td colspan=\"5\">
									Según la información recogida en el sistema adjuntamos la tabla con los registros de las horas trabajadas en el período indicado.
									Si está conforme tiene que contestar indicando únicamente la palabra OK, en caso contrario puede contestar detallando la causa de la disconformidad.
									Rogamos nos conteste lo antes posible. 
									<br><br>
									</td>
								</tr>
								<tr>
									<td bgcolor=\"#8ebb27\" align=\"center\">Fecha</td>
									<td bgcolor=\"#8ebb27\" align=\"center\">Día</td>
									<td bgcolor=\"#8ebb27\" align=\"center\">Fichadas</td>
									<td bgcolor=\"#8ebb27\" align=\"center\">Descripción</td>
									<td bgcolor=\"#8ebb27\" align=\"center\">Horas</td>
								</tr>
								<tr>");

			SET vFooter = CONCAT("<tr>
										<td bgcolor=\"#8ebb27\" align=\"center\">TOTAL</td>
										<td colspan=\"3\"></td>
										<td align=\"center\"><strong>", IFNULL(LEFT (SEC_TO_TIME(vTimeWorkDecimalTotal * 3600), 5), 0), "</strong></td>
								</tr>
								</table>
								</div>");

			IF vIsTeleworkingOld AND NOT vError THEN
				CALL mail_insert(
					vReceiverOld, 
					'timecontrol@verdnatura.es',
					CONCAT('Registro de horas semana ', vWeek, ' año ', vYear) , 
					CONCAT(vHeader, ' ' , vBody, ' ', vFooter)
				);

				INSERT IGNORE INTO workerTimeControlMail (workerFk, year, week)
					 VALUES(vWorkerFkOld, vYear, vWeek);
			ELSE 
				ROLLBACK;
			END IF;

			SET vBody = '';
			SET vTimeWorkDecimalTotal = 0;
			SET vWorkerFkOld = vWorkerFk;
			SET vIsTeleworkingOld = vIsTeleworking;
			SET vReceiverOld = vReceiver;
		END IF;
	COMMIT;
	END LOOP;
	CLOSE vCursor;
		
	INSERT INTO mail (receiver, replyTo, subject, body)
		SELECT 	CONCAT(u.name, '@verdnatura.es'), 
				CONCAT('Error registro de horas semana ', vWeek, ' año ', vYear) , 
				CONCAT('No se ha podido enviar el registro de horas al empleado/s: ', GROUP_CONCAT(DISTINCT CONCAT('<br>', w.id, ' ', w.firstName, ' ', w.lastName)))
			FROM tmp.error e
				JOIN worker w ON w.id = e.workerFk
				JOIN user u ON u.id = w.bossFk
			GROUP BY w.bossFk;	
	
	DROP TABLE tmp.timeControlCalculate;
	DROP TABLE tmp.timeBusinessCalculate;
	DROP TABLE tmp.timeControlCalculate1;
	DROP TABLE tmp.timeBusinessCalculate1;
	DROP TABLE tmp.error;
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 `workerTimeControl_sendMailByDepartment` */;
/*!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 `workerTimeControl_sendMailByDepartment`(IN vDatedFrom DATETIME, IN vDatedTo DATETIME, IN vWorkerFk INT)
BEGIN
/**
 * Inserta el registro de horario semanalmente de PRODUCCION, CAMARA, REPARTO, TALLER NATURAL y TALLER ARTIFICIAL en vn.mail.
 *
 * @param vDatedFrom
 * @param vDatedTo
 * @param vWorkerFk -> En el caso de querer generarlo para todos los empleados deberá de pasarse = NULL
 */
	SET session group_concat_max_len = 15000;

	DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate;
	DROP TEMPORARY TABLE IF EXISTS tmp.reportHours;

	IF vWorkerFk IS NULL THEN
		CALL timeControl_calculateAll(vDatedFrom,vDatedTo);
		CALL timeBusiness_calculateAll(vDatedFrom,vDatedTo);
	ELSE
		CALL timeControl_calculateByUser(vWorkerFk,vDatedFrom,vDatedTo);
		CALL timeBusiness_calculateByUser(vWorkerFk,vDatedFrom,vDatedTo);
	END IF;

	CREATE TEMPORARY TABLE tmp.reportHours
		SELECT  t.dated,
				IF (tm.hoursWeek IS NULL,'', GROUP_CONCAT(DATE_FORMAT(wtc.timed,'%H:%i') ORDER BY wtc.timed ASC SEPARATOR ' ') ) timeWorkDay,
				SEC_TO_TIME(IFNULL(tm.timeWorkSeconds, 0)) tm,
				SEC_TO_TIME(IFNULL(tc.timeWorkSeconds, 0)) tc,
				SEC_TO_TIME(IFNULL(tc.timeWorkSeconds, 0) - IFNULL(tm.timeWorkSeconds, 0)) balance,
				w.lastName,
				w.firstname,
				c.fi,
				w.id,
				MONTHNAME(t.dated) mes,
				YEAR(t.dated) año,
				w.userFk,
				tm.hoursWeek,
				tm.type,
				wl.started,
				wl.ended,
				d.name,
				tm.businessFk
			FROM time t
				LEFT JOIN tmp.timeBusinessCalculate tm ON tm.dated = t.dated
				LEFT JOIN tmp.timeControlCalculate tc ON tc.dated = tm.dated AND tc.userFk = tm.userFk
				LEFT JOIN vn.workerTimeControl wtc ON wtc.userFk = tm.userFk AND DATE(wtc.timed) = t.dated
				LEFT JOIN workerLabour wl ON  wl.workerFk = tm.userFk AND wl.businessFk = tm.businessFk
				LEFT JOIN workCenter wc ON wc.id  = wl.workCenterFk
				LEFT JOIN department d ON d.id = wl.departmentFk
				LEFT JOIN worker w ON w.id = tm.userFk
				LEFT JOIN client c ON c.id = w.id
				WHERE wc.name NOT IN ('VNH')
					AND d.hasToSendMail
				GROUP BY tm.userFk,t.dated
				ORDER BY tm.userFk,t.dated;
	
	INSERT INTO vn.mail (receiver, replyTo, subject, body)
		SELECT eu.email, 'laboral@verdnatura.es', CONCAT('Registro de horas semana ', WEEK(vDatedFrom), ' año ', YEAR(vDatedFrom)) ,
				CONCAT('
				<!DOCTYPE html>
				<html>

				<head>
					<style>
						hr { margin-left: 50px;
							margin-right: 50px;}

						.result {font-weight:bold;
								padding-top: 25px;}
					</style>
				<body>
					<div align="center">
					<h2>REGISTRO DE LA JORNADA DE LOS TRABAJADORES</h2>
					<table cellpadding="5" cellspacing="2" width="60%" style="color: #153643; font-family: " Trebuchet MS"; font-size:18px; line-height: 18px;">
						<tr>
							<td align="center" colspan="5">
								Según la información recogida en el sistema, adjuntamos la tabla con los registros. Cualquier incidencia rogamos la comunique a <b>laboral@verdnatura.es</b>.
								<br> De no recibir incidencia por su parte, se entenderá que el registro es correcto. <br>
							</td>
						</tr>
						<tr>
							<td> <b>Empresa: </b> Verdnatura Levante SL</td>
						</tr>
						<tr>
							<td> <b>Trabajador: </b> ',rh.firstname,' ',rh.lastName, '</td>
							<td> <b> NIF: </b> ',rh.fi, '</td>
						</tr>
						<tr>
							<td> <b> AÑO: </b> ',rh.año, '</td>
							<td> <b> MES: </b> ',UPPER(rh.mes), '</td>
							<td> <b> Calendario Laboral: </b>',rh.hoursWeek,' horas semanales </td>
						</tr>
					</table>
					<hr>
					<table cellpadding="5" cellspacing="2" width="60%" style="color: #153643; font-family: " Trebuchet MS"; font-size:18px; line-height: 18px;">
						<tr>
							<td bgcolor="#8ebb27" align="center">Fecha:</td>
							<td bgcolor="#8ebb27" align="center">Día:</td>
							<td bgcolor="#8ebb27" align="center">Fichadas:</td>
							<td bgcolor="#8ebb27" align="center">Horas a trabajar:</td>
							<td bgcolor="#8ebb27" align="center">Horas trabajadas:</td>
							<td bgcolor="#8ebb27" align="center">Balance:</td>
						</tr>',
						GROUP_CONCAT(DISTINCT '<tr> <td bgcolor="#8ebb27" align="center">', DATE_FORMAT( rh.dated, '%d-%m-%y'),
								 '</td> <td align="center">', CONCAT(UCASE(LEFT(DAYNAME(rh.dated), 1)), SUBSTRING(DAYNAME(rh.dated), 2)),
		                         '</td> <td align="center"> ', IFNULL(rh.timeWorkDay,' '),' ', IFNULL(rh.type,' '),
		                         '</td> <td align="center">', rh.tm,
		                         '</td> <td align="center">', SUBSTRING_INDEX(rh.tc, '.', 1),
		                         '</td> <td align="center">', SUBSTRING_INDEX(rh.balance, '.', 1), '</td></tr>' ORDER BY rh.dated SEPARATOR ''),
							'<td align="center"></td>
							<td align="center"></td>
							<td align="center"></td>
							<td class="result" align="right"><b>Total horas trabajadas: </b></td>
							<td class="result" align="center"><b>', SUBSTRING_INDEX(SEC_TO_TIME(SUM(TIME_TO_SEC(rh.tc))), '.', 1),'</b></td>
							<td class="result" align="center"><b>', SUBSTRING_INDEX(SEC_TO_TIME(SUM(TIME_TO_SEC(rh.balance))), '.', 1),'</b></td>
						</tr>
					</table>
				</body>')
			FROM tmp.reportHours rh
			JOIN account.emailUser eu ON rh.id = eu.userFk
		    GROUP BY rh.id;

	DROP TEMPORARY TABLE tmp.timeControlCalculate;
	DROP TEMPORARY TABLE tmp.timeBusinessCalculate;
	DROP TEMPORARY TABLE tmp.reportHours;
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 `workerTimeControl_sendMailByDepartmentLauncher` */;
/*!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 `workerTimeControl_sendMailByDepartmentLauncher`()
BEGIN
	DECLARE vDatedFrom, vDatedTo DATETIME;

	IF (DAYNAME(CURDATE()) = 'miércoles') THEN
		SELECT DATE_SUB(CURDATE(), INTERVAL 9 DAY), CONCAT(DATE_SUB(CURDATE(), INTERVAL 3 DAY), ' 23:59:59') INTO vDatedFrom, vDatedTo;
	
		CALL vn.workerTimeControl_sendMailByDepartment(vDatedFrom, vDatedTo, NULL);
	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 `workerTimeControl_setOrder` */;
/*!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 `workerTimeControl_setOrder`(vUserFk INT, vStarted DATE, vFinished DATE)
BEGIN

	SET @order := 0;
    SET @day := '2000-01-01';

	UPDATE vn.workerTimeControl w
		SET w.`order` = @order := IF(@day = @day := date(timed), @order, 0) + 1
        WHERE w.userFk = vUserFk
        AND w.timed BETWEEN vStarted AND util.dayend(vFinished)
        ORDER BY w.timed;

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 `workerTimeControl_weekCheckBreak` */;
/*!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 `workerTimeControl_weekCheckBreak`(vStarted DATE, vEnded DATE)
BEGIN
/**
 * Retorna los trabajadores que no han respetado el descanso semanal de 36/72 horas 
 * El sistema verificará el descanso corto en la siguiente semana 
 * o el largo en las 2 siguientes semanas a partir de las fechas dadas 
 * @param vStarted día inicio para verificar
 * @param vEnded día final para verificar
 * @return tmp.workerWithoutWeekBreak (workerFk)
 */
	DECLARE vDone INT DEFAULT FALSE;

	IF(vStarted > vEnded) then
		CALL util.throw ('Date end can not be greater then start');
	END IF;

	DROP TEMPORARY TABLE IF EXISTS tmp.workerWithoutWeekBreakInWeek;
	CREATE TEMPORARY TABLE tmp.workerWithoutWeekBreakInWeek
		(workerFk INT,
		PRIMARY KEY(workerFk))
		ENGINE = MEMORY;


	WHILE vStarted <= vEnded DO

		CALL workerTimeControl_checkBreak(vStarted);
		 INSERT IGNORE INTO tmp.workerWithoutWeekBreakInWeek
			SELECT workerFk 
				FROM tmp.workerWithoutWeekBreak;
		DROP TEMPORARY TABLE IF EXISTS tmp.workerWithoutWeekBreak;
		SET vStarted = DATE_ADD(vStarted, INTERVAL 1 DAY); 

	END WHILE;
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 `workerWeekControl` */;
/*!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 `workerWeekControl`(vUserFk INT, vDated DATE, vTabletFk VARCHAR(100))
BEGIN
/*
* Devuelve la cantidad de descansos de 12h y de 36 horas que ha disfrutado el trabajador
* en la semana inmediatamente anterior a la fecha que pasa como parámetro.
* UPDATED PAK 2019/09/02
* PENDING REVIEW
*/
    DECLARE vDescansos12h INT;
    DECLARE vDescansos36h INT;
    DECLARE vJornadas INT;
    DECLARE vImpares INT;
    DECLARE vHasSignedToday BOOLEAN;
    DECLARE v12hoursInMinutes INT DEFAULT 719;
    DECLARE v36hoursInMinutes INT DEFAULT 2159;
    DECLARE vCantWork VARCHAR(50) DEFAULT '';
    DECLARE vDepartmentFk INT;
    DECLARE isEnabled BOOLEAN DEFAULT TRUE;

    SELECT COUNT(*) INTO vHasSignedToday 
        FROM workerTimeControl WHERE timed >= vDated AND userFk = vUserFk;

    SET @day := 0;
    SET @lastTimed := NOW();

    SELECT SUM(IF(interval_in_minutes >= v12hoursInMinutes,1,0)),  SUM(FLOOR(interval_in_minutes/ v36hoursInMinutes)) , SUM(jornadas)
        INTO vDescansos12h, vDescansos36h, vJornadas
        FROM
        (
        SELECT fichada_anterior, fichada_actual, interval_in_minutes, jornadas
            FROM
                (
                SELECT  @lastTimed fichada_anterior, 
                        timed,
                        CAST(time_to_sec(timediff(timed,@lastTimed )) / 60 AS UNSIGNED) as interval_in_minutes,
                        IF(day(timed) != @day, 1, 0) as  jornadas,
                        @day := day(timed) dia_del_mes,
                        @lastTimed := timed fichada_actual                    
                    FROM
                    (
                        SELECT day(timed) as dayNumber, dayname(timed) as dayName, timed
                        FROM 
                            (SELECT TIMESTAMPADD(DAY, -11, NOW()) as timed, vUserFk as userFk -- Fichada virtual para los en los que no se ha trabajado la semana anterior
                                UNION ALL
                            SELECT timed, userFk
                                FROM vn.workerTimeControl wtc
                                WHERE userFk = vUserFk
                                    AND timed >= TIMESTAMPADD(DAY, -10,vDated)
                                UNION ALL
                            SELECT IF(vHasSignedToday, '2000-01-01 00:00', NOW()) as timed, vUserFk         
                            ) sub4
                        ORDER BY timed
                    ) sub
                
                ) sub2
            WHERE fichada_actual >= TIMESTAMPADD(WEEK, -1, vDated)
        ) sub3		;

    SELECT IFNULL(SUM(impar),0) into vImpares
    FROM (
        SELECT 	day(timed) as dayNumber, 
                count(*) mod 2 as impar
            FROM vn.workerTimeControl wtc
            WHERE userFk = vUserFk
                AND timed >= TIMESTAMPADD(WEEK, -1,vDated) AND timed < vDated
            GROUP BY dayNumber
        ) sub;

    -- Vacaciones
	SELECT at2.name INTO vCantWork
		FROM postgresql.calendar_employee ce
			JOIN postgresql.business b USING(business_id)
			JOIN postgresql.profile pr ON pr.profile_id = b.client_id
			JOIN absenceType at2 ON at2.id = ce.calendar_state_id
		WHERE ce.date = CURDATE()
			AND at2.isAllowedToWork = FALSE
			AND pr.workerFk = vUserFk
		LIMIT 1;
        
    -- Contrato en vigor
    SELECT IF(COUNT(*),vCantWork,'Sin contrato') INTO vCantWork
        FROM postgresql.business b
            JOIN postgresql.profile pr ON pr.profile_id = b.client_id
        WHERE pr.workerFk = vUserFk
            AND b.date_start <= vDated
            AND IFNULL(b.date_end,vDated) >= vDated;
            
    -- Departamento si vTabletFk es 0 no hacemos comprobacion (Madrid y Vilassar)
    IF vTabletFk <> '0'  THEN
    -- 1 Obtener el departamento del usuario
            SELECT wtcu.departmentFk INTO vDepartmentFk
                FROM workerTimeControlUserInfo wtcu
                WHERE wtcu.userFk = vUserFk;
    -- 2 Comprobar si la tablet pertenece al departamento		
            SELECT COUNT(td.tabletFk) INTO isEnabled
                FROM tabletDepartment td
                WHERE td.tabletFk = vTabletFk AND td.departmentFk = vDepartmentFk;
        
    END IF;
        
    IF vJornadas IS NOT NULL THEN
        
            SELECT 'Jornadas' as Item, vJornadas as Cantidad, 'Correcto' AS Análisis
            UNION ALL
            SELECT 'Descansos 12 h' as Item, vDescansos12h as Cantidad, IF(vDescansos12h >= vJornadas, 'Correcto','Error: 1 por jornada') as Análisis
            UNION ALL
            SELECT 'Descansos 36 h' as Item, vDescansos36h as Cantidad, IF(vDescansos36h / 2 >= FLOOR(vJornadas/10), 'Correcto','Error: mínimo 2 cada 14 dias') as Análisis
            UNION ALL
            SELECT 'Dias con fichadas impares' as Item, vImpares as Cantidad, IF(vImpares = 0, 'Correcto','Error') as Análisis
            UNION ALL
            SELECT IF (LENGTH(vCantWork),CONCAT('Dia no laborable: ', vCantWork),'Dia laborable') as Item, 
                    '' as Cantidad, 
                    IF(LENGTH(vCantWork),'Error', 'Correcto') as Análisis    
            UNION ALL
            SELECT 'El fichador no pertenece a tu departamento.' as Item, '' as Cantidad, IF(isEnabled, 'Correcto','Error') as Análisis;

    ELSE

            SELECT 'Jornadas' as Item, vJornadas as Cantidad, 'Correcto' AS Análisis
            UNION ALL
            SELECT 'Descansos 12 h' as Item, vDescansos12h as Cantidad, 'Correcto'  as Análisis
            UNION ALL
            SELECT 'Descansos 36 h' as Item, vDescansos36h as Cantidad, 'Correcto'  as Análisis
            UNION ALL
            SELECT 'Dias con fichadas impares' as Item, vImpares as Cantidad, 'Correcto'  as Análisis
            UNION ALL
            SELECT 	IF (LENGTH(vCantWork),CONCAT('Dia no laborable: ', vCantWork),'Dia laborable') as Item, 
                    '' as Cantidad, IF(LENGTH(vCantWork),'Error', 'Correcto') as Análisis
            UNION ALL
            SELECT 'El fichador no pertenece a tu departamento.' as Item, '' as Cantidad, IF(isEnabled, 'Correcto','Error') as Análisis;

    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 `workerWeekTiming` */;
/*!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 `workerWeekTiming`(vUserFk INT, vDated DATE)
BEGIN

/*
*	Muestra una tabla con los 7 dias inmediatamente anteriores a la fecha proporcionada
*   y las fichadas de cada dia, en columnas por dia
*
*/

CALL vn.workerTimeControlSetOrder_by_User_and_dateRange(vUserFk,TIMESTAMPADD(DAY,-8,vDated),vDated);

DROP TEMPORARY TABLE IF EXISTS tmp.workerWeekTiming;
CREATE TEMPORARY TABLE tmp.workerWeekTiming
SELECT  	orden `orden`,
			max(hace7dias) 7_dias_antes, 
			max(hace6dias) 6_dias_antes,
			max(hace5dias) 5_dias_antes,
			max(hace4dias) 4_dias_antes,
			max(hace3dias) 3_dias_antes,
			max(antesdeayer) 2_dias_antes,
			max(ayer) 1_dia_antes,
			max(hoy) mismo_dia
		FROM
		(
		SELECT  IF(dias = 7, fichada, '') as hace7dias,
				IF(dias = 6, fichada, '') as hace6dias,
				IF(dias = 5, fichada, '') as hace5dias,
				IF(dias = 4, fichada, '') as hace4dias,
				IF(dias = 3, fichada, '') as hace3dias,
				IF(dias = 2, fichada, '') as antesdeayer,
				IF(dias = 1, fichada, '') as ayer,
				IF(dias = 0, fichada, '') as hoy,
				orden

		FROM
			(
				SELECT `order` as orden, datediff(vDated, timed) as dias, date(timed) as fecha, TIME_FORMAT(timed,'%H:%i') as fichada
					FROM vn.workerTimeControl wtc
					WHERE userFk = vUserFk
						AND timed >= TIMESTAMPADD(DAY, -7, vDated)
			) sub
		)sub2
	GROUP BY orden
	;
    
DROP TEMPORARY TABLE IF EXISTS tmp.workerWeekTiming_Aux;
CREATE TEMPORARY TABLE tmp.workerWeekTiming_Aux
	SELECT * FROM tmp.workerWeekTiming;

INSERT INTO tmp.workerWeekTiming( 7_dias_antes,6_dias_antes,5_dias_antes,4_dias_antes,3_dias_antes,2_dias_antes,1_dia_antes,mismo_dia)
	VALUES('total','','','','','','','');
    
INSERT INTO tmp.workerWeekTiming( orden, 7_dias_antes,6_dias_antes,5_dias_antes,4_dias_antes,3_dias_antes,2_dias_antes,1_dia_antes, mismo_dia)
SELECT 	0, 
		IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(7_dias_antes), TIME_TO_SEC(7_dias_antes)))),'%H:%i'),''),
		IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(6_dias_antes), TIME_TO_SEC(6_dias_antes)))),'%H:%i'),''),
        IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(5_dias_antes), TIME_TO_SEC(5_dias_antes)))),'%H:%i'),''),
        IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(4_dias_antes), TIME_TO_SEC(4_dias_antes)))),'%H:%i'),''),
        IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(3_dias_antes), TIME_TO_SEC(3_dias_antes)))),'%H:%i'),''),
        IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(2_dias_antes), TIME_TO_SEC(2_dias_antes)))),'%H:%i'),''),
        IFNULL(DATE_FORMAT(SEC_TO_TIME(SUM(IF(orden MOD 2, - TIME_TO_SEC(1_dia_antes), TIME_TO_SEC(1_dia_antes)))),'%H:%i'),''),
        ''
	FROM tmp.workerWeekTiming_Aux;
    
INSERT INTO tmp.workerWeekTiming_Aux( orden, 1_dia_antes)
SELECT 	0, 	ROUND((
		IFNULL(TIME_TO_SEC(7_dias_antes),0) +
		IFNULL(TIME_TO_SEC(6_dias_antes),0) +
		IFNULL(TIME_TO_SEC(5_dias_antes),0) +
		IFNULL(TIME_TO_SEC(4_dias_antes),0) +
		IFNULL(TIME_TO_SEC(3_dias_antes),0) +
		IFNULL(TIME_TO_SEC(2_dias_antes),0) +
		IFNULL(TIME_TO_SEC(1_dia_antes),0)
			) / 3600,1)
	FROM tmp.workerWeekTiming
		WHERE orden = 0;	


INSERT INTO tmp.workerWeekTiming( 7_dias_antes,6_dias_antes,5_dias_antes,4_dias_antes,3_dias_antes,2_dias_antes,1_dia_antes,mismo_dia)
	SELECT '','','','','','',1_dia_antes,''
    FROM tmp.workerWeekTiming_Aux
		WHERE orden = 0;
		
SELECT 7_dias_antes,6_dias_antes,5_dias_antes,4_dias_antes,3_dias_antes,2_dias_antes,1_dia_antes,mismo_dia FROM tmp.workerWeekTiming;

DROP TEMPORARY TABLE tmp.workerWeekTiming;
DROP TEMPORARY TABLE tmp.workerWeekTiming_Aux;

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 `worker_calculateCommission` */;
/*!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 `worker_calculateCommission`(vYear INT, vQuarter INT)
BEGIN

	DECLARE vPlusTeamAmount INT;
	DECLARE vPlusNewBornAmount INT;
	DECLARE vPlusSalesAmount INT;
	DECLARE vMinimumSalesByQuarter INT;
	DECLARE vPlusTeamRange INT;
	DECLARE vPlusNewBornRange INT;
	DECLARE vRankingSalesRange INT;

/*
	-- Jerarquia
    DROP TEMPORARY TABLE IF EXISTS rankingHierarchy;
	CREATE TEMPORARY TABLE rankingHierarchy
	SELECT COUNT(*) - 1 teamMembers, wb.bossFk
		FROM vn.worker ww
			JOIN vn.worker wb ON ww.id = wb.bossFk
		GROUP BY wb.bossFk;
       */
       
	SELECT plusTeamAmount, plusNewBornAmount, plusSalesAmount, minimumSalesByQuarter, plusTeamRange, plusNewBornRange, rankingSalesRange
		INTO vPlusTeamAmount, vPlusNewBornAmount, vPlusSalesAmount, vMinimumSalesByQuarter, vPlusTeamRange, vPlusNewBornRange, vRankingSalesRange
		FROM commissionConfig;
    -- Ventas
	DROP TEMPORARY TABLE IF EXISTS rankingSale;
	CREATE TEMPORARY TABLE rankingSale
			(PRIMARY KEY(workerFk)) ENGINE = MEMORY 
		SELECT IF(SUM(v.importe) > vMinimumSalesByQuarter, 
						SUM(IFNULL(v.comision,0)),
                        0) as commission,
				SUM(v.importe) sales,
				v.Id_Trabajador workerFk
			FROM bs.vendedores v 
			WHERE v.año = vYear AND CEIL(mes/3) = vQuarter
			GROUP BY v.Id_Trabajador;
            
    -- Ranking ventas
	SET @position:= 0;
	DROP TEMPORARY TABLE IF EXISTS rankingSelling;
	CREATE TEMPORARY TABLE rankingSelling
			(PRIMARY KEY(userFk)) ENGINE = MEMORY 
				SELECT userFk, @position:= @position + 1 position
			FROM (
             SELECT SUM(`v`.`importe`) AS `importe`,
					`u`.`name` AS `name`,
					`u`.`id` AS `userFk`
				FROM
					(`bs`.`vendedores` `v`
					JOIN `account`.`user` `u` ON (`u`.`id` = `v`.`Id_Trabajador`))
				WHERE
					`v`.`año` = vYear
						AND CEIL(`v`.`mes` / 3) = vQuarter
						AND `u`.`name` NOT IN ('ismaelalcolea' , 'ruben')
				GROUP BY `v`.`Id_Trabajador`
				ORDER BY SUM(`v`.`importe`) DESC
				LIMIT vRankingSalesRange
            ) t;
            
    CALL rankingTeamByQuarter(vYear, vQuarter); 
    
	-- comerciales que computan / total integrantes
    DROP TEMPORARY TABLE IF EXISTS teamNames;
    CREATE TEMPORARY TABLE teamNames
			(PRIMARY KEY(departmentFk)) ENGINE = MEMORY 
		SELECT DISTINCT departmentFk, teamPeople
				FROM tmp.rankingTeam;
    
    -- Ranking por equipos	
    DROP TEMPORARY TABLE IF EXISTS rankingTeam;
    CREATE TEMPORARY TABLE rankingTeam
			(PRIMARY KEY(departmentFk)) ENGINE = MEMORY 
		SELECT DISTINCT departmentFk
				FROM teamNames
                LIMIT vPlusTeamRange;
                
	-- Ranking por nuevos clientes
    SET @position:= 0;
    DROP TEMPORARY TABLE IF EXISTS rankingNewBorn;
    CREATE TEMPORARY TABLE rankingNewBorn
			(PRIMARY KEY(userFk)) ENGINE = MEMORY 
		SELECT userFk, @position:= @position + 1 position
			FROM (
				 SELECT SUM(amount) AS total,
						n.userFk
					FROM newBornSales n
					WHERE n.dated >= util.quarterFirstDay(vYear, vQuarter)
							AND n.firstShipped >= util.quarterFirstDay(vYear -1, vQuarter)
					GROUP BY userFk
					ORDER BY SUM(amount) DESC
					LIMIT vPlusNewBornRange
            ) t;
        
    -- Sumatorio de ventas
	SELECT uBoss.`name` as team, 
			u.`name`, 
			r.commission,
			-- IF(rh.bossFk, 200 + (teamMembers * 30), 0) plusResponsibility,
			@plusRankingSellers := ((vRankingSalesRange + 1) - rs.position) * 40 plusRankingSellers,
            @plusRankingTeam := IF(rt.departmentFk, vPlusTeamAmount, 0) plusRankingTeam,
            @plusRankingNewBorn := ((vPlusNewBornRange + 1) - rnb.position) * vPlusNewBornAmount plusRankingNewBorn,
            IFNULL(r.commission,0) + IFNULL(@plusRankingSellers,0) + @plusRankingTeam + IFNULL(@plusRankingNewBorn, 0) total,
			sales, rs.position, teamPeople,
            vYear year,
			vQuarter quarter
		FROM rankingSale r
			-- LEFT JOIN rankingHierarchy rh ON rh.bossFk = r.workerFk
			JOIN account.user u ON u.id = r.workerFk
            JOIN vn2008.jerarquia j ON j.worker_id = r.workerFk
			LEFT JOIN `account`.`user` uBoss ON uBoss.id = j.boss_id
			LEFT JOIN rankingSelling rs ON rs.userFk = r.workerFk
            LEFT JOIN workerDepartment wd ON wd.workerFk = r.workerFk
            LEFT JOIN rankingTeam rt ON rt.departmentFk = wd.departmentFk AND r.commission
            LEFT JOIN teamNames tn ON tn.departmentFk = wd.departmentFk 
            LEFT JOIN vn.rankingNewBorn rnb ON rnb.userFk = r.workerFk;
            
	DROP TEMPORARY TABLE tmp.rankingTeam;
    DROP TEMPORARY TABLE 
		rankingSelling,
		rankingTeam,
        teamNames,
        rankingNewBorn,
        rankingSale;
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 `worker_calculateSalaryRoleDelivery` */;
/*!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 `worker_calculateSalaryRoleDelivery`(vWorkerFk INTEGER,vDateFrom DATE,vDateTo DATE)
BEGIN
/**
 * Calcula el salario de trabajadores para los departamentos de reparto, paletizado
 *
 * @param vDateFrom 
 * @param vDateTo 
 * @param vWorkerFk 
 * @return tmp.workerSalaryRoleDelivery 
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.workerSalaryRoleDelivery;

	CREATE TEMPORARY TABLE tmp.workerSalaryRoleDelivery
		SELECT w.id workerFk,
				r.created dated,
				r.id,
				SUM(t.packages) packages, 
				CAST(time_to_sec(TIMEDIFF( DATE_FORMAT(r.finished, '%H:%i:%s'),DATE_FORMAT(r.time, '%H:%i:%s'))) / (60 * 60) AS DECIMAL(10, 1)) hours , 
				r.kmEnd-r.kmStart km,
				r.m3 m3Delivery, 
				CAST(r.m3/loadWorker AS DECIMAL(10,2)) m3Load,
				CAST(rc.m3Distribution*r.m3 AS DECIMAL(10,2)) amountDelivery,
				CASE loadWorker
					WHEN 1 THEN CAST(r.m3/ loadWorker*rc.load1m3 AS DECIMAL(10,2))
					WHEN 2 THEN CAST(r.m3/ loadWorker*rc.load2m3 AS DECIMAL(10,2))
					WHEN 3 THEN CAST(r.m3/ loadWorker*rc.load3m3 AS DECIMAL(10,2))
					WHEN 4 THEN CAST(r.m3/ loadWorker*rc.load4m3 AS DECIMAL(10,2))
					WHEN 5 THEN CAST(r.m3/ loadWorker*rc.load5m3 AS DECIMAL(10,2))
					ELSE CAST(r.m3/ loadWorker*rc.load6m3 AS DECIMAL(10,2))
				END amountLoad,
				IF(v.isKmTruckRate, rc.kmTruckRate, rc.kmRate)*(r.kmEnd-r.kmStart) amountKm, 
				CAST('' AS CHAR(45)) description,
				CAST( 0 AS DECIMAL(10,2)) extra,
				CAST( 0 AS DECIMAL(10,2)) maxSalary
			FROM route r
				LEFT JOIN ticket t ON t.routeFk = r.id
				LEFT JOIN vehicle v ON v.id = r.vehicleFk
				LEFT JOIN worker w ON w.id = r.workerFk
				LEFT JOIN routeConfig rc ON TRUE
				LEFT JOIN (SELECT rw.routeFk, COUNT(rw.workerFk) loadWorker
								FROM routeLoadWorker rw
									JOIN routeLoadWorker rw2 ON rw.routeFk = rw2.routeFk AND rw2.workerFk = vWorkerFk
								GROUP BY rw2.routeFk
							) sub ON sub.routeFk=r.id	
			WHERE r.created BETWEEN vDateFrom AND vDateTo AND w.id = vWorkerFk
			GROUP BY r.id;
	
	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,
												dated,
												id,
												packages, 
												km,
												m3Load,
												amountLoad)
		SELECT w.id ,
				r.created ,
				r.id,
				SUM(t.packages) , 
				r.kmEnd-r.kmStart ,
				CAST(r.m3/loadWorker AS DECIMAL(10,2)) ,
				CASE loadWorker
					WHEN 1 THEN CAST(r.m3/ loadWorker*rc.load1m3 AS DECIMAL(10,2))
					WHEN 2 THEN CAST(r.m3/ loadWorker*rc.load2m3 AS DECIMAL(10,2))
					WHEN 3 THEN CAST(r.m3/ loadWorker*rc.load3m3 AS DECIMAL(10,2))
					WHEN 4 THEN CAST(r.m3/ loadWorker*rc.load4m3 AS DECIMAL(10,2))
					WHEN 5 THEN CAST(r.m3/ loadWorker*rc.load5m3 AS DECIMAL(10,2))
				ELSE CAST(r.m3/ loadWorker*rc.load6m3 AS DECIMAL(10,2))
				END
			FROM (SELECT rw.routeFk, COUNT(rw.workerFk) loadWorker
					FROM routeLoadWorker rw
						JOIN routeLoadWorker rw2 ON rw.routeFk = rw2.routeFk AND rw2.workerFk = vWorkerFk
					GROUP BY rw2.routeFk) sub 
				LEFT JOIN route r ON sub.routeFk = r.id	
				LEFT JOIN ticket t ON t.routeFk = r.id
				LEFT JOIN worker w ON w.id = r.workerFk
				LEFT JOIN routeConfig rc ON TRUE
			WHERE r.created BETWEEN vDateFrom AND vDateTo AND w.id <> vWorkerFk
			GROUP BY r.id;

	INSERT INTO tmp.workerSalaryRoleDelivery(workerFk,
												dated,
												description,
												extra)
		SELECT workerFk,
				dated,
				GROUP_CONCAT(ra.name) ,
				CAST(SUM(rc.price) AS DECIMAL(9,2)) 
			FROM routeComplement rc
				JOIN routeAction ra ON rc.routeActionFk=ra.id		
			WHERE dated BETWEEN vDateFrom AND vDateTo AND workerFk=vWorkerFk
			GROUP BY dated;

	CALL timeBusiness_calculateByWorker(vWorkerFk, vDateFrom, vDateTo);

	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,
												dated,
												description,
												extra)
		SELECT w.id,
				tb.dated,
				tb.type COLLATE utf8_general_ci,
				CASE
					WHEN tb.type = 'Vacaciones 1/2 día' OR tb.type = 'Permiso retribuido 1/2 día' 
						THEN CAST(((12 * blp.importepactado) / (52 * tb.hoursWeek)) * 4 AS DECIMAL(10,2))
					WHEN tb.type = 'Vacaciones' OR tb.type = 'Baja enfermedad común' OR tb.type = 'Permiso retribuido' OR tb.type = 'Festivo'
						THEN CAST(((12 * blp.importepactado) / (52 * tb.hoursWeek)) * 8 AS DECIMAL(10,2))
					WHEN tb.type = 'Maternidad/Paternidad'
						THEN 0
				END
			FROM worker w
				JOIN tmp.timeBusinessCalculate tb ON tb.userFk = w.id
				JOIN postgresql.business_labour_payroll blp ON blp.business_id = tb.businessFk
				JOIN time tm ON tm.dated = tb.dated
			WHERE tb.dated BETWEEN vDateFrom AND vDateTo AND 
				w.id = vWorkerFk AND 
				tb.type IN ('Vacaciones 1/2 día', 'Vacaciones', 'Baja enfermedad común','Festivo','Permiso retribuido 1/2 día','Permiso retribuido', 'Maternidad/Paternidad')
			GROUP BY tb.dated;
	
	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,
												dated,
												m3Delivery, 
												amountLoad,
												description)	
		SELECT wdc.workerFk ,
				r.created, 
				SUM(r.m3) , 
				CASE
					WHEN wdc.category = 1 
						THEN CAST(SUM(r.m3) * rc.distributionM3Category1 AS DECIMAL (10,2))
					WHEN wdc.category = 2
						THEN CAST(SUM(r.m3) * rc.distributionM3Category2 AS DECIMAL (10,2))
				END amountLoad,
				'Gestión de la distribución' description
			FROM route r
				JOIN agencyMode am ON am.id= r.agencyModeFk
				JOIN agency a ON a.id = am.agencyFk
				JOIN workerDistributionCategory wdc ON wdc.workerFk = vWorkerFk
				JOIN workerLabour wl ON r.created BETWEEN wl.started AND IFNULL(wl.ended, CURDATE()) AND wl.workerFk = wdc.workerFk AND a.workCenterFk = wl.workCenterFk
				JOIN department v ON v.id = departmentFk
				JOIN routeConfig rc 
			WHERE r.m3>0 AND created BETWEEN vDateFrom AND vDateTo AND 
				am.name NOT LIKE "REC_%" AND 
				v.name= "REPARTO"
			GROUP BY r.created;

	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,
												dated,
												m3Delivery, 
												amountLoad,
												description)		
		SELECT sub.workerFk,
				r.created, 
				SUM(r.m3), 
				CAST( (SUM(r.m3)*sub.percentage /100) * rc.m3Palletization AS DECIMAL (10,2) ), 
				'Gestión de paletizado'
			FROM route r
				JOIN agencyMode am ON am.id= r.agencyModeFk
				JOIN agency a ON a.id = am.agencyFk
				JOIN (SELECT percentage,workerFk ,dated
							FROM routeUserPercentage ru 
							WHERE workerFk = vWorkerFk AND ru.dated <= vDateTo
							ORDER BY dated DESC LIMIT 1
					) sub
				JOIN routeConfig rc 
				JOIN workerLabour wl ON r.created BETWEEN wl.started AND IFNULL(wl.ended, CURDATE()) AND 
					wl.workerFk = sub.workerFk 
				JOIN department v ON v.id = departmentFk
			WHERE r.m3>0 AND 
				r.created BETWEEN vDateFrom AND vDateTo AND 
				am.name NOT LIKE "REC_%" AND 
				v.name= "PALETIZADO"
			GROUP BY r.created;
		
	DROP TEMPORARY TABLE IF EXISTS tmp.daysToRateHoliday;
		CREATE TEMPORARY TABLE tmp.daysToRateHoliday
			SELECT *
				FROM tmp.workerSalaryRoleDelivery tb
					WHERE (tb.description IN ('Festivo') OR dayofweek(tb.dated)=1) AND tb.extra = 0 ;

/*	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,dated,id,packages,hours,km,m3Delivery,m3Load,amountDelivery,amountLoad,AmountKm,description, extra)
		 SELECT workerFk, 
				dated, 
				d.id, 
				packages, 
				hours, 
				km, 
				m3Delivery, 
				m3Load, 
				amountDelivery * r.rateHoliday, 
				amountLoad * r.rateHoliday, 
				AmountKm * r.rateHoliday, 
				CONCAT('Plus festivo: ',description), 
				extra
			FROM tmp.daysToRateHoliday d 
				LEFT JOIN routeConfig r ON TRUE;*/
	
	DROP TEMPORARY TABLE IF EXISTS tmp.daysToDelete;
	CREATE TEMPORARY TABLE tmp.daysToDelete
		SELECT dated
			FROM tmp.workerSalaryRoleDelivery d
				WHERE d.description IN ('Baja enfermedad común', 'Maternidad/Paternidad');

	DELETE d 
		FROM tmp.workerSalaryRoleDelivery d
			JOIN tmp.daysToDelete dd on dd.dated = d.dated
		WHERE d.description NOT IN ('Baja enfermedad común', 'Maternidad/Paternidad');

	INSERT INTO tmp.workerSalaryRoleDelivery (workerFk,
												dated,
												description, 
												extra,
												maxSalary)
		SELECT wdc.workerFk ,
					CONCAT(YEAR(t.dated),'-', MONTH(t.dated),'-01') , 
					CASE
						WHEN wdc.category = 1 
							THEN rc.plusCategory1Concept
						WHEN wdc.category = 2 
							THEN rc.plusCategory2Concept
					END,
					CASE
						WHEN wdc.category = 1 
							THEN CAST(rc.plusCategory1 AS DECIMAL (10,2))
						WHEN wdc.category = 2 
							THEN CAST(rc.plusCategory2 AS DECIMAL (10,2))
					END,
					CASE
						WHEN wdc.category = 1 
							THEN CAST(rc.maxSalaryCategory1 AS DECIMAL (10,2))
						WHEN wdc.category = 2 
							THEN CAST(rc.maxSalaryCategory2 AS DECIMAL (10,2))
					END
				FROM worker w
					JOIN workerDistributionCategory wdc ON wdc.workerFk = w.id
					JOIN routeConfig rc
					JOIN time t on t.dated BETWEEN vDateFrom AND vDateTo
				WHERE w.id = vWorkerFk
				GROUP BY MONTH(t.dated), YEAR(t.dated);

	DROP TEMPORARY TABLE tmp.daysToRateHoliday;
	DROP TEMPORARY TABLE tmp.daysToDelete;
	DROP TEMPORARY TABLE tmp.timeBusinessCalculate;
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 `worker_getFromHasMistake` */;
/*!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 `worker_getFromHasMistake`(vDepartmentFk INT)
BEGIN

/**
 * Obtiene los trabajadores de los departamentos que se les puede poner error
 * @param vDepartmentFk id del departamento
 *
 */
	
	SELECT w.id,w.firstName, w.lastName,d.name 
		FROM worker w 
			JOIN workerDepartment wd ON wd.workerFk = w.id 
			JOIN department d ON d.id = wd.departmentFk 
		WHERE d.id = vDepartmentFk
		ORDER BY firstName;

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 `worker_getHierarchy` */;
/*!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 `worker_getHierarchy`(vBoss INT)
BEGIN
    DECLARE EXIT HANDLER FOR 1062 BEGIN
		CALL util.throw('INFINITE_LOOP');
    END;

	DROP TEMPORARY TABLE IF EXISTS workerHierarchy;
	CREATE TEMPORARY TABLE workerHierarchy
		(PRIMARY KEY (workerFk))
		ENGINE = MEMORY
		SELECT vBoss AS workerFk;
            
	DROP TEMPORARY TABLE IF EXISTS tmp.workerHierarchyList;
	CREATE TEMPORARY TABLE tmp.workerHierarchyList
		(PRIMARY KEY (workerFk))
		ENGINE = MEMORY
		SELECT vBoss AS workerFk, 0 AS isChecked;


    WHILE (SELECT COUNT(*) FROM tmp.workerHierarchyList WHERE NOT isChecked) > 0 DO

	INSERT INTO tmp.workerHierarchyList
		SELECT w.id, 0 
			FROM worker w
				JOIN workerHierarchy wh ON wh.workerFk = w.bossFk;

	UPDATE tmp.workerHierarchyList whl
			JOIN workerHierarchy wh ON  wh.workerFk = whl.workerFk
		SET whl.isChecked = 1;

	TRUNCATE workerHierarchy;

	INSERT INTO workerHierarchy
		SELECT workerFk 
			FROM tmp.workerHierarchyList
			WHERE NOT isChecked;

    END WHILE;
    
    DROP TEMPORARY TABLE IF EXISTS workerHierarchy;
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 `worker_getSector` */;
/*!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 `worker_getSector`()
BEGIN

/**
 * Obtiene el sector del usuario conectado
*/

	SELECT s.id,s.description,s.warehouseFk
	FROM sector s
		JOIN worker w ON w.sectorFk  = s.id 
	WHERE w.id = account.myUser_getId();

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 `worker_updateSector` */;
/*!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 `worker_updateSector`(vSectorFk INT)
BEGIN

/**
 * ACtualiza el sector del usuario conectado
 *
 * @param vSectorFk id del sector  
*/
	UPDATE worker
		SET sectorFk = vSectorFk
	WHERE id = account.myUser_getId();
	

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 `workingHours` */;
/*!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 `workingHours`(username varchar(255), logon boolean)
BEGIN
	DECLARE userid int(11);
        
  	SELECT vn.getUserId(username) INTO userid;
    SELECT username, userid;
		IF userid IS NOT NULL THEN     
			IF (logon) THEN
				CALL vn.workingHoursTimeIn(userid);
			ELSE
				CALL vn.workingHoursTimeOut(userid);
			END IF;
		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 `workingHoursTimeIn` */;
/*!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 `workingHoursTimeIn`(vUserId INT(11))
BEGIN
	INSERT INTO vn.workingHours (timeIn, userId)
		VALUES (NOW(),vUserId);
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 `workingHoursTimeOut` */;
/*!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 `workingHoursTimeOut`(vUserId INT(11))
BEGIN
	UPDATE vn.workingHours
		SET timeOut = NOW()
		WHERE userId = vUserId
			AND DATE(timeIn) = CURDATE();
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 `wrongEqualizatedClient` */;
/*!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 `wrongEqualizatedClient`()
BEGIN
	SELECT clientFk, c.name, c.isActive, c.isTaxDataChecked, count(ie) as num
	FROM vn.client c
		JOIN 
		(
		SELECT DISTINCT 
				`a`.`clientFk` ,
				 a.isEqualizated = 0 as ie
				
			FROM
				`vn`.`address` `a`
		) sub ON sub.clientFk = c.id
		WHERE c.hasToInvoiceByAddress = FALSE
        
		GROUP BY clientFk
		HAVING num > 1
	UNION ALL
    SELECT DISTINCT c.id, c.name, c.isActive, c.isTaxDataChecked,1
			FROM
				`vn`.`address` `a`
				JOIN `vn`.`client` `c` ON `c`.`id` = `a`.`clientFk`
			WHERE ABS(a.isEqualizated) <> ABS(c.isEqualizated)
            AND c.hasToInvoiceByAddress = FALSE;
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 `zoneClosure_recalc` */;
/*!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 `zoneClosure_recalc`()
proc: BEGIN
/**
 * Recalculates the delivery time (hour) for every zone in days + scope in future
 */
    DECLARE vScope INT;
    DECLARE vCounter INT DEFAULT 0;
    DECLARE vShipped DATE DEFAULT CURDATE();

	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK('vn.zoneClosure_recalc');
        RESIGNAL;
	END;

	IF NOT GET_LOCK('vn.zoneClosure_recalc', 0) THEN
		LEAVE proc;
	END IF;

	SELECT scope INTO vScope
		FROM zoneConfig;
        
	DROP TEMPORARY TABLE IF EXISTS tmp.zone;
    CREATE TEMPORARY TABLE tmp.zone
		(INDEX (id))
		ENGINE = MEMORY
        SELECT id FROM zone;
              
	TRUNCATE TABLE zoneClosure;
    
    WHILE vCounter <= vScope DO
    
		CALL zone_getOptionsForShipment(vShipped, TRUE);
        
		REPLACE zoneClosure(zoneFk, dated, `hour`)
			SELECT zoneFk, vShipped, `hour` 
				FROM tmp.zoneOption;
		
        SET vCounter = vCounter + 1;
        SET vShipped = TIMESTAMPADD(DAY, 1, vShipped);
    END WHILE;
    
    -- DROP TEMPORARY TABLE tmp.zone;
	DO RELEASE_LOCK('vn.zoneClosure_recalc');
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 `zoneGeo_calcTree` */;
/*!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 `zoneGeo_calcTree`()
BEGIN
/**
 * Calculates the #path, #lft, #rgt, #sons and #depth columns of
 * the #zoneGeo table. To build the tree, it uses the #parentFk
 * column.
 */
	DECLARE vIndex INT DEFAULT 0;
	DECLARE vSons INT;

	DROP TEMPORARY TABLE IF EXISTS tNestedTree;
	CREATE TEMPORARY TABLE tNestedTree
		SELECT id, path, lft, rgt, depth, sons
			FROM zoneGeo LIMIT 0;

	SET max_sp_recursion_depth = 5;
	CALL zoneGeo_calcTreeRec(NULL, '/', 0, vIndex, vSons);
	SET max_sp_recursion_depth = 0;

	UPDATE zoneGeo z
		JOIN tNestedTree t ON t.id = z.id
		SET z.path = t.path,
			z.lft = t.lft,
			z.rgt = t.rgt,
			z.depth = t.depth,
			z.sons = t.sons;

	DROP TEMPORARY TABLE tNestedTree;
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 `zoneGeo_calcTreeRec` */;
/*!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 `zoneGeo_calcTreeRec`(
	vSelf INT,
    vPath VARCHAR(255),
    vDepth INT,
    INOUT vIndex INT,
    OUT vSons INT
)
BEGIN
/**
 * Calculates and sets the #path, #lft, #rgt, #sons and #depth
 * columns for all children of the passed node. Once calculated
 * the last node rgt index and the number of sons are returned.
 * To update it's children, this procedure calls itself recursively
 * for each one.
 *
 * @vSelf The node identifier
 * @vPath The initial path
 * @vDepth The initial depth
 * @vIndex The initial lft index
 * @vSons The number of direct sons
 */
    DECLARE vChildFk INT;
    DECLARE vLft INT;
    DECLARE vMySons INT;
	DECLARE vDone BOOL;
	DECLARE vChildren CURSOR FOR
		SELECT id FROM zoneGeo
			WHERE (vSelf IS NULL AND parentFk IS NULL)
				OR (vSelf IS NOT NULL AND parentFk = vSelf);

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
    
    SET vSons = 0;

	OPEN vChildren;
	myLoop: LOOP
		SET vDone = FALSE;
		FETCH vChildren INTO vChildFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;
        
        SET vIndex = vIndex + 1;
        SET vLft = vIndex;
        SET vSons = vSons + 1;
    
		CALL zoneGeo_calcTreeRec(
			vChildFk,
            CONCAT(vPath, vChildFk, '/'),
            vDepth + 1,
            vIndex,
            vMySons
		);

        SET vIndex = vIndex + 1;

		INSERT INTO tNestedTree
			SET id = vChildFk,
				path = vPath,
				lft = vLft,
				rgt = vIndex,
				depth = vDepth,
				sons = vMySons;
	END LOOP;
	CLOSE vChildren;
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 `zoneGeo_checkName` */;
/*!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 `zoneGeo_checkName`(vName VARCHAR(255))
BEGIN
	IF vName = '' THEN
		SIGNAL SQLSTATE '45000'
			SET MESSAGE_TEXT = 'Column `name` cannot be empty';
	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 `zoneGeo_delete` */;
/*!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 `zoneGeo_delete`(vSelf INT)
BEGIN
/**
 * Deletes a node from the #zoneGeo table. Also sets a mark
 * to force the tree recalculation.
 *
 * @vSelf The node identifier
 */
	DELETE FROM zoneGeo WHERE id = vSelf;
	UPDATE zoneGeoRecalc SET isChanged = TRUE;
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 `zoneGeo_doCalc` */;
/*!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 `zoneGeo_doCalc`()
proc: BEGIN
/**
 * Recalculates the zones tree.
 */
    DECLARE vIsChanged BOOL;

	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK('vn.zoneGeo_doCalc');
        RESIGNAL;
	END;

	IF !GET_LOCK('vn.zoneGeo_doCalc', 0) THEN
		LEAVE proc;
	END IF;

	SELECT isChanged INTO vIsChanged
		FROM zoneGeoRecalc;
        
	IF vIsChanged THEN
		UPDATE zoneGeoRecalc SET isChanged = FALSE;
        CALL vn.zoneGeo_calcTree;
	END IF;

	DO RELEASE_LOCK('vn.zoneGeo_doCalc');
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 `zoneGeo_setParent` */;
/*!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 `zoneGeo_setParent`(vSelf INT, vParentFk INT)
BEGIN
/**
 * Updates the parent of a node. Also sets a mark
 * to force the tree recalculation.
 *
 * @vSelf The node identifier
 * @vParentFk The new parent identifier
 */
	UPDATE zoneGeo SET parentFk = vParentFk
		WHERE id = vSelf;

	UPDATE zoneGeoRecalc SET isChanged = TRUE;
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 `zoneGeo_throwNotEditable` */;
/*!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 `zoneGeo_throwNotEditable`()
BEGIN
	SIGNAL SQLSTATE '45000'
		SET MESSAGE_TEXT = 'Column `geoFk` cannot be modified';
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 `zone_ETD_byTime` */;
/*!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 `zone_ETD_byTime`()
BEGIN
	
	SET @m := 0;
	
	DROP TEMPORARY TABLE IF EXISTS tmpZone;
	CREATE TEMPORARY TABLE tmpZone
	SELECT 	remainingVolume, 
			hourTheoretical, 
			@m := @m + minutesLess totalMinutes
		FROM zoneEstimatedDelivery ze
			WHERE ze.remainingVolume 
		ORDER BY ze.hourTheoretical DESC;

	SELECT * FROM tmpZone;

	DROP TABLE tmpZone;
	
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 `zone_excludeFromGeo` */;
/*!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 `zone_excludeFromGeo`(vZoneGeo INT)
BEGIN
/**
 * Excluye zonas a partir un geoFk.
 *
 * @table tmp.zoneOption(zoneFk, hour, travelingDays, price, bonus, landed, shipped) The computed options
 * @param vZoneGeo The zone geo
 * @return tmp.zoneOption The computed options
 */	
	DELETE t FROM tmp.zoneOption t
		JOIN zoneExclusion e ON e.zoneFk = t.zoneFk AND e.`dated` = t.landed
		LEFT JOIN zoneExclusionGeo eg ON eg.zoneExclusionFk = e.id
		JOIN zoneGeo zg1 ON zg1.id = eg.geoFk
		JOIN zoneGeo zg2 ON zg2.id = vZoneGeo
	WHERE zg2.`path` LIKE CONCAT(zg1.`path`,'%');

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 `zone_getAgency` */;
/*!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 `zone_getAgency`(vAddress INT, vLanded DATE)
BEGIN
/**
 * Devuelve el listado de agencias disponibles para la fecha 
 * y dirección pasadas.
 *
 * @param vAddress Id de dirección de envío, %NULL si es recogida
 * @param vLanded Fecha de recogida
 * @return tmp.zoneGetAgency Listado de agencias disponibles
 */
	CALL zone_getFromGeo(address_getGeo(vAddress));
	CALL zone_getOptionsForLanding(vLanded, FALSE);

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetAgency;
	CREATE TEMPORARY TABLE tmp.zoneGetAgency
	(INDEX (agencyModeFk)) ENGINE = MEMORY
		SELECT am.name agencyMode, 
				am.description,
				z.agencyModeFk, 
				am.deliveryMethodFk,
				TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
				TRUE isIncluded,
				zo.zoneFk,
				am.web AS isVisible
			FROM tmp.zoneOption zo
				JOIN zone z ON z.id = zo.zoneFk
				JOIN agencyMode am ON am.id = z.agencyModeFk
			GROUP BY agencyModeFk;
		
	DROP TEMPORARY TABLE
		tmp.zone,
		tmp.zoneOption;
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 `zone_getAvailable` */;
/*!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 `zone_getAvailable`(vAddress INT, vLanded DATE)
BEGIN
    CALL zone_getFromGeo(address_getGeo(vAddress));
    CALL zone_getOptionsForLanding(vLanded, FALSE);

    SELECT * FROM tmp.zoneOption;

	DROP TEMPORARY TABLE
		tmp.zone,
        tmp.zoneOption;
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 `zone_getClosed` */;
/*!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 `zone_getClosed`()
proc:BEGIN
/**
 * Devuelve una tabla con las zonas cerradas para hoy
 *
 * @table tmp.closedZones(zoneFk, warehouseFk);
 */
	DROP TEMPORARY TABLE IF EXISTS tmp.closedZones;
	
	CREATE TEMPORARY TABLE tmp.closedZones (
		`zoneFk` int(11) NOT NULL,
		`warehouseFk` smallint(6) unsigned NOT NULL,
		PRIMARY KEY `zoneFk` (`zoneFk`,`warehouseFk`),
		KEY `warehouseFk` (`warehouseFk`))
		ENGINE=MEMORY DEFAULT CHARSET=utf8;

	INSERT INTO tmp.closedZones(zoneFk, warehouseFk)
		SELECT zoneFk, warehouseFk
		FROM (
			SELECT t.zoneFk, t.warehouseFk, count(DISTINCT t.id) numTickets, pc.minTicketsToCloseZone
					FROM vn.ticket t
						JOIN vn.expedition e ON e.ticketFk = t.id
						JOIN vn.`zone`z on z.id = t.zoneFk
						JOIN vn.agencyMode am ON am.id = z.agencyModeFk
						JOIN vn.agency a ON a.id = am.agencyFk
						JOIN vn.productionConfig pc
					WHERE a.isOwn
						AND pc.isZoneClosedByExpeditionActivated
						AND e.created >= CURDATE()
					GROUP BY t.zoneFk, t.warehouseFk
					HAVING numTickets >= minTicketsToCloseZone) sub;
	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 `zone_getCollisions` */;
/*!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 `zone_getCollisions`()
BEGIN
/**
 * Calcula si para un mismo codigo postal y dia 
 * hay mas de una zona configurada y manda correo
 *
 */
	DECLARE vGeoFk INT DEFAULT NULL;
	DECLARE vZoneFk INT;
	DECLARE vIsDone INT DEFAULT FALSE;
	DECLARE vTableCollisions TEXT;
	DECLARE cur1 CURSOR FOR SELECT zoneFk from tmp.zoneOption;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vIsDone = TRUE;

	DROP TEMPORARY TABLE IF EXISTS tmp.zone;
	CREATE TEMPORARY TABLE tmp.zone
		SELECT z.id 
			FROM zone z
				JOIN agencyMode am ON am.id = z.agencyModeFk
				JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
			WHERE dm.code IN ('AGENCY','DELIVERY'); 

	CALL zone_getOptionsForShipment(CURDATE(),FALSE);

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneNodes;
	CREATE TEMPORARY TABLE tmp.zoneNodes (
			geoFk INT,
			name VARCHAR(100),
			parentFk INT,
			sons INT,
			isChecked BOOL DEFAULT 0,
			zoneFk INT,
			PRIMARY KEY zoneFkk (zoneFk, geoFk),
			INDEX(geoFk))
			ENGINE = MEMORY;
		
	OPEN cur1;
	cur1Loop: LOOP
		SET vIsDone = FALSE;
		FETCH cur1 INTO vZoneFk;
		IF vIsDone THEN
			LEAVE cur1Loop;
	    END IF;
	   
		CALL zone_getLeaves2(vZoneFk, NULL, NULL);

		myLoop: LOOP	
			SET vGeoFk = NULL;
			SELECT geoFk INTO vGeoFk 
				FROM tmp.zoneNodes zn
				WHERE NOT isChecked
				LIMIT 1;
			
			IF vGeoFk IS NULL THEN
				LEAVE myLoop;
			END IF;
		
			CALL zone_getLeaves2(vZoneFk, vGeoFk, NULL);
			UPDATE tmp.zoneNodes
				SET isChecked = TRUE 
				WHERE geoFk = vGeoFk;
		END LOOP;

	END LOOP;
	CLOSE cur1;
	DELETE FROM tmp.zoneNodes 
		WHERE sons > 0;
	
	DROP TEMPORARY TABLE IF EXISTS geoCollision;
	CREATE TEMPORARY TABLE geoCollision
		SELECT z.agencyModeFk, zn.geoFk, zw.warehouseFk
			FROM tmp.zoneNodes zn
				JOIN zone z ON z.id = zn.zoneFk
				JOIN zoneWarehouse zw ON z.id = zw.zoneFk 
	        GROUP BY z.agencyModeFk, zn.geoFk, zw.warehouseFk
	        HAVING count(*) > 1;
	
	SELECT '<table  cellspacing="10">
				<tr>
					<th>C.Postal</th>
					<th>Número de zona</th>
					<th>Precio</th>
					<th>Zona</th>
					<th>Almacén</th>
					<th>Salix</th>
                 </tr>' INTO vTableCollisions;
                
    INSERT INTO mail (receiver,replyTo,subject,body)                
		SELECT 'pepe@verdnatura.es' receiver,
	           'noreply@verdnatura.es' replyTo,
	            CONCAT('Colisiones en zonas ', CURDATE()) subject,
	            CONCAT(vTableCollisions,
	            	GROUP_CONCAT(sub.td SEPARATOR ''),
	            	'</table>') body
			FROM(SELECT 
					CONCAT('<tr>
						<td>', zn.name, '</td>
						<td>', zoneFk,'</td>
						<td>', z.price,'</td>
						<td>', z.name,'</td>
						<td>', w.name, '</td>
						<td>', CONCAT('<a href="https://salix.verdnatura.es/#!/zone/', 
								zoneFk,
								'/location?q=%7B%22search%22:%22',
								zn.name, 
								'%22%7D">'
								'https://salix.verdnatura.es/#!/zone/', 
								zoneFk,
								'/location?q=%7B%22search%22:%22',
								zn.name, 
								'%22%7D</a>'),'</td>
						</tr>') td
				FROM tmp.zoneNodes zn
					JOIN zone z ON z.id = zn.zoneFk
					JOIN geoCollision gc ON gc.agencyModeFk = z.agencyModeFk AND zn.geoFk = gc.geoFk
					JOIN warehouse w ON w.id = gc.warehouseFk) sub;
			
	DROP TEMPORARY TABLE 
		geoCollision, 
		tmp.zone,
		tmp.zoneNodes;
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 `zone_getEvents` */;
/*!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 `zone_getEvents`(
	vGeoFk INT,
    vAgencyModeFk INT)
BEGIN
/**
 * Returns available events for the passed province/postcode and agency.
 *
 * @param vGeoFk The geo id
 * @param vAgencyModeFk The agency mode id
 */
	DECLARE vDeliveryMethodFk VARCHAR(255);
    
	DROP TEMPORARY TABLE IF EXISTS tZone;
	CREATE TEMPORARY TABLE tZone
		(id INT PRIMARY KEY)
		ENGINE = MEMORY;
        
	SELECT dm.`code` INTO vDeliveryMethodFk
		FROM agencyMode am
			JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
        WHERE am.id = vAgencyModeFk;
        
	IF vDeliveryMethodFk = 'PICKUP' THEN
		INSERT INTO tZone
			SELECT id
				FROM zone
                WHERE agencyModeFk = vAgencyModeFk;
	ELSE
		CALL zone_getFromGeo(vGeoFk);

		IF vAgencyModeFk IS NOT NULL THEN
			INSERT INTO tZone
				SELECT t.id
					FROM tmp.zone t
						JOIN zone z ON z.id = t.id
					WHERE z.agencyModeFk = vAgencyModeFk;
		ELSE
			INSERT INTO tZone
				SELECT t.id 
					FROM tmp.zone t
						JOIN zone z ON z.id = t.id
						JOIN agencyMode am  ON am.id = z.agencyModeFk 
						JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
				WHERE dm.`code` IN ('AGENCY', 'DELIVERY');
		END IF;
		DROP TEMPORARY TABLE tmp.zone;
	END IF;
    
	SELECT e.zoneFk, e.`type`, e.dated, e.`started`, e.`ended`, e.weekDays
		FROM tZone t
			JOIN zoneEvent e ON e.zoneFk = t.id;

	SELECT e.zoneFk, e.dated
		FROM tZone t
			JOIN zoneExclusion e ON e.zoneFk = t.id
			LEFT JOIN zoneExclusionGeo eg ON eg.zoneExclusionFk = e.id
			JOIN zoneGeo zg1 ON zg1.id = eg.geoFk
			JOIN zoneGeo zg2 ON zg2.id = vGeoFk
		WHERE eg.zoneExclusionFk IS NULL OR zg2.`path` LIKE CONCAT(zg1.`path`,'%');
            
	DROP TEMPORARY TABLE tZone;
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 `zone_getFromGeo` */;
/*!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 `zone_getFromGeo`(vGeoFk INT)
BEGIN
/**
 * Returns all zones which have the passed geo included.
 *
 * @param vGeoFk The geo id
 * @return tmp.zone(id) The list of zones
 */
 	DECLARE vChildFk INT DEFAULT vGeoFk;
 	DECLARE vParentFk INT;
    DECLARE vLevel INT DEFAULT 1;
	
    DROP TEMPORARY TABLE IF EXISTS tNodes;
	CREATE TEMPORARY TABLE tNodes
		(PRIMARY KEY (id))
        ENGINE = MEMORY
		SELECT vGeoFk id, vLevel `level`;
 
	myLoop: LOOP
		SELECT parentFk INTO vParentFk
			FROM zoneGeo
			WHERE id = vChildFk;
		
        SET vChildFk = vParentFk;
        SET vLevel = vLevel + 1;

		INSERT IGNORE INTO tNodes
			SELECT vChildFk, vLevel
				FROM DUAL
				WHERE vChildFk IS NOT NULL;
        
        IF ROW_COUNT() = 0 THEN
			LEAVE myLoop;
		END IF;
    END LOOP;

    DROP TEMPORARY TABLE IF EXISTS tmp.zone;
    CREATE TEMPORARY TABLE tmp.zone
		(INDEX (id))
		ENGINE = MEMORY
        SELECT id FROM (
			SELECT zoneFk id, isIncluded
				FROM (
					SELECT i.zoneFk, i.isIncluded
						FROM tNodes n
							JOIN zoneIncluded i ON i.geoFk = n.id
						ORDER BY zoneFk, n.`level`
						LIMIT 10000000000000000000
				) t
				GROUP BY id HAVING isIncluded
		) t;

	DROP TEMPORARY TABLE tNodes;
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 `zone_getLanded` */;
/*!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 `zone_getLanded`(vShipped DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT, vShowExpiredZones BOOLEAN)
BEGIN
/**
 * Devuelve una tabla temporal con el dia de recepcion para vShipped.
 * Excluye las que tengan cajas preparadas
 *
 * @param vShipped Fecha de preparacion de mercancia
 * @param vAddressFk Id de consignatario, %NULL para recogida
 * @param vAgencyModeFk Id agencia
 * @param vWarehouseFk vWarehouseFk
 * @table tmp.zoneGetLanded Datos de recepción
 */
	DECLARE vZoneGeo INT;

	SELECT address_getGeo(vAddressFk) INTO vZoneGeo;

	CALL vn.zone_getFromGeo(vZoneGeo);
	CALL vn.zone_getOptionsForShipment(vShipped, vShowExpiredZones);
	CALL vn.zone_excludeFromGeo(vZoneGeo);
	CALL vn.zone_getClosed();

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
	CREATE TEMPORARY TABLE tmp.zoneGetLanded
			ENGINE = MEMORY
		SELECT vWarehouseFk warehouseFk,
			TIMESTAMPADD(DAY,zo.travelingDays, vShipped) landed,
			zo.zoneFk
		FROM tmp.zoneOption zo
			JOIN vn.`zone` z ON z.id = zo.zoneFk
			JOIN vn.zoneWarehouse zw ON zw.zoneFk = z.id
			LEFT JOIN tmp.closedZones cz 
							ON cz.warehouseFk = zw.warehouseFk
								AND cz.zoneFk = zw.zoneFk
								AND zo.shipped = CURDATE()
		WHERE z.agencyModeFk = vAgencyModeFk
			AND zw.warehouseFk = vWarehouseFk
			AND (ISNULL(cz.zoneFk) OR vShowExpiredZones);

	DROP TEMPORARY TABLE
		tmp.`zone`,
		tmp.zoneOption,
		tmp.closedZones;
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 `zone_getLeaves` */;
/*!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 `zone_getLeaves`(vSelf INT, vParentFk INT, vSearch VARCHAR(255))
BEGIN 
/**
 * Devuelve las ubicaciones incluidas en la ruta y que sean hijos de parentFk.
 * @param vSelf Id de la zona
 * @param vParentFk Id del geo a calcular
 * @param vSearch cadena a buscar
 */
	DECLARE vIsNumber BOOL;
	DECLARE vIsSearch BOOL DEFAULT vSearch IS NOT NULL AND vSearch != '';

	DROP TEMPORARY TABLE IF EXISTS tNodes;
	CREATE TEMPORARY TABLE tNodes
		(UNIQUE (id))
		ENGINE = MEMORY
		SELECT id 
			FROM zoneGeo 
			LIMIT 0;

	IF vIsSearch THEN
		SET vIsNumber = vSearch REGEXP '^[0-9]+$';
	
		INSERT INTO tNodes
			SELECT id 
				FROM zoneGeo
				WHERE (vIsNumber AND `name` = vSearch)
					OR (!vIsNumber AND `name` LIKE CONCAT('%', vSearch, '%'))
				LIMIT 1000;
			
	ELSEIF vParentFk IS NULL THEN
		INSERT INTO tNodes
			SELECT geoFk 
				FROM zoneIncluded
				WHERE zoneFk = vSelf;
	END IF;

	IF vParentFk IS NULL THEN
		DROP TEMPORARY TABLE IF EXISTS tChilds;
		CREATE TEMPORARY TABLE tChilds
			ENGINE = MEMORY
			SELECT id 
				FROM tNodes;

		DROP TEMPORARY TABLE IF EXISTS tParents;
		CREATE TEMPORARY TABLE tParents
			ENGINE = MEMORY
			SELECT id 
				FROM zoneGeo 
				LIMIT 0;

		myLoop: LOOP
			DELETE FROM tParents;
			INSERT INTO tParents
				SELECT parentFk id
					FROM zoneGeo g
						JOIN tChilds c ON c.id = g.id
					WHERE g.parentFk IS NOT NULL;
			
			INSERT IGNORE INTO tNodes
				SELECT id 
					FROM tParents;
			
			IF ROW_COUNT() = 0 THEN
				LEAVE myLoop;
			END IF;
			
			DELETE FROM tChilds;
			INSERT INTO tChilds
				SELECT id 
					FROM tParents;
		END LOOP;
		
		DROP TEMPORARY TABLE tChilds, tParents;
	END IF;

	IF !vIsSearch THEN
		INSERT IGNORE INTO tNodes
			SELECT id 
				FROM zoneGeo
				WHERE parentFk <=> vParentFk;
	END IF;

	SELECT  g.id,
			g.name,
			g.parentFk,
			g.sons,
			isIncluded selected
		FROM zoneGeo g
			JOIN tNodes n ON n.id = g.id
			LEFT JOIN zoneIncluded i ON i.geoFk = g.id AND i.zoneFk = vSelf
		ORDER BY `depth`, selected DESC, name;

	DROP TEMPORARY TABLE tNodes;
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 `zone_getLeaves2` */;
/*!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 `zone_getLeaves2`(vSelf INT, vParentFk INT, vSearch VARCHAR(255))
BEGIN 
/**
 * Devuelve los geoFk incluidos en la ruta y que sean hijos de parentFk
 * @param vSelf Id de la zona
 * @param vParentFk Id del geo a calcular
 * @param vSearch cadena a buscar
 * 
 * @return tmp.zoneNodes(geoFk, name, parentFk, sons, isChecked, zoneFk)
 *
 */
	DECLARE vIsNumber BOOL;
	DECLARE vIsSearch BOOL DEFAULT vSearch IS NOT NULL AND vSearch != '';

	DROP TEMPORARY TABLE IF EXISTS tNodes;
	CREATE TEMPORARY TABLE tNodes
		(UNIQUE (id))
		ENGINE = MEMORY
		SELECT id 
			FROM zoneGeo 
			LIMIT 0;

	IF vIsSearch THEN
		SET vIsNumber = vSearch REGEXP '^[0-9]+$';

		INSERT INTO tNodes
			SELECT id 
				FROM zoneGeo
				WHERE (vIsNumber AND `name` = vSearch)
					OR (!vIsNumber AND `name` LIKE CONCAT('%', vSearch, '%'))
				LIMIT 1000;
			
	ELSEIF vParentFk IS NULL THEN
		INSERT INTO tNodes
			SELECT geoFk 
				FROM zoneIncluded
				WHERE zoneFk = vSelf;
	END IF;

	IF vParentFk IS NULL THEN
		DROP TEMPORARY TABLE IF EXISTS tChilds;
		CREATE TEMPORARY TABLE tChilds
			(INDEX(id))
			ENGINE = MEMORY
			SELECT id 
				FROM tNodes;

		DROP TEMPORARY TABLE IF EXISTS tParents;
		CREATE TEMPORARY TABLE tParents
			(INDEX(id))
			ENGINE = MEMORY
			SELECT id 
				FROM zoneGeo 
				LIMIT 0;

		myLoop: LOOP
			DELETE FROM tParents;
			INSERT INTO tParents
				SELECT parentFk id
					FROM zoneGeo g
						JOIN tChilds c ON c.id = g.id
					WHERE g.parentFk IS NOT NULL;
			
			INSERT IGNORE INTO tNodes
				SELECT id 
					FROM tParents;
			
			IF ROW_COUNT() = 0 THEN
				LEAVE myLoop;
			END IF;
			
			DELETE FROM tChilds;
			INSERT INTO tChilds
				SELECT id 
					FROM tParents;
		END LOOP;
		
		DROP TEMPORARY TABLE tChilds, tParents;
	END IF;

	IF !vIsSearch THEN
		INSERT IGNORE INTO tNodes
			SELECT id 
				FROM zoneGeo
				WHERE parentFk <=> vParentFk;
	END IF;

	INSERT IGNORE INTO tmp.zoneNodes(geoFk, name, parentFk, sons, isChecked, zoneFk)
		SELECT  g.id,
				g.`name`,
				g.parentFk,
				g.sons,
				NOT g.sons OR type = 'country',
				vSelf
			FROM zoneGeo g
				JOIN tNodes n ON n.id = g.id
				LEFT JOIN zoneIncluded i ON i.geoFk = g.id AND i.zoneFk = vSelf
			WHERE i.isIncluded = TRUE 
				OR (i.isIncluded IS NULL AND vParentFk IS NOT NULL);
			
	DROP TEMPORARY TABLE tNodes;
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 `zone_getOptionsForLanding` */;
/*!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 `zone_getOptionsForLanding`(vLanded DATE, vShowExpiredZones BOOLEAN)
BEGIN
/**
 * Gets computed options for the passed zones and delivery date.
 *
 * @table tmp.zone(id) The zones ids
 * @param vLanded The delivery date
 * @return tmp.zoneOption The computed options
 */	
	DROP TEMPORARY TABLE IF EXISTS tmp.zoneOption;
	CREATE TEMPORARY TABLE tmp.zoneOption
		ENGINE = MEMORY
		SELECT
				zoneFk,
				`hour`,
				travelingDays,
				price,
				bonus,
				vLanded landed,
				TIMESTAMPADD(DAY, -travelingDays, vLanded) shipped
			FROM (
				SELECT t.id zoneFk,
						TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
						IFNULL(e.travelingDays, z.travelingDays) travelingDays,
						IFNULL(e.price, z.price) price,
						IFNULL(e.bonus, z.bonus) bonus
					FROM tmp.zone t
						JOIN zone z ON z.id = t.id
						JOIN zoneEvent e ON e.zoneFk = t.id
					WHERE (
							e.`type` = 'day'
							AND e.dated = vLanded
						) OR (
							e.`type` != 'day'
							AND e.weekDays & (1 << WEEKDAY(vLanded))
							AND (e.`started` IS NULL OR vLanded >= e.`started`)
							AND (e.`ended` IS NULL OR vLanded <= e.`ended`)
						)
					ORDER BY
						zoneFk,
						CASE
							WHEN e.`type` = 'day'
								THEN 1
							WHEN e.`type` = 'range'
								THEN 2
								ELSE 3
						END
					LIMIT 10000000000000000000
			) t
			GROUP BY zoneFk;	
	
	DELETE t FROM tmp.zoneOption t
		JOIN zoneExclusion e ON e.zoneFk = t.zoneFk AND e.`dated` = t.landed
		LEFT JOIN zoneExclusionGeo eg ON eg.zoneExclusionFk = e.id
	WHERE eg.zoneExclusionFk IS NULL;
			
	IF NOT vShowExpiredZones THEN
		DELETE FROM tmp.zoneOption
			WHERE shipped < CURDATE()
				OR (shipped = CURDATE() AND CURTIME() > `hour`);
	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 `zone_getOptionsForShipment` */;
/*!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 `zone_getOptionsForShipment`(vShipped DATE, vShowExpiredZones BOOLEAN)
BEGIN
/**
 * Gets computed options for the passed zones and shipping date.
 *
 * @table tmp.zones(id) The zones ids
 * @param vShipped The shipping date
 * @return tmp.zoneOption(zoneFk, hour, travelingDays, price, bonus, specificity) The computed options
 */
	DECLARE vHour TIME DEFAULT TIME(NOW());
		
	DROP TEMPORARY TABLE IF EXISTS tLandings;
	CREATE TEMPORARY TABLE tLandings
		(INDEX (eventFk))
		ENGINE = MEMORY
		SELECT e.id eventFk,
				@travelingDays := IFNULL(e.travelingDays, z.travelingDays) travelingDays,
				TIMESTAMPADD(DAY, @travelingDays, vShipped) landed
			FROM tmp.zone t
				JOIN zone z ON z.id = t.id
				JOIN zoneEvent e ON e.zoneFk = t.id;

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneOption;
	CREATE TEMPORARY TABLE tmp.zoneOption
		ENGINE = MEMORY
		SELECT *
			FROM (
				SELECT t.id zoneFk,
						TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
						l.travelingDays,
						IFNULL(e.price, z.price) price,
						IFNULL(e.bonus, z.bonus) bonus,
						l.landed,
						vShipped shipped
					FROM tmp.zone t
						JOIN zone z ON z.id = t.id
						JOIN zoneEvent e ON e.zoneFk = t.id
						JOIN tLandings l ON l.eventFk = e.id
					WHERE (
							e.`type` = 'day'
							AND e.`dated` = l.landed
						) OR (
							e.`type` != 'day'
							AND e.weekDays & (1 << WEEKDAY(l.landed))
							AND (e.`started` IS NULL OR l.landed >= e.`started`)
							AND (e.`ended` IS NULL OR l.landed <= e.`ended`)
						)
					ORDER BY
						zoneFk,
						CASE
							WHEN e.`type` = 'day'
								THEN 1
							WHEN e.`type` = 'range'
								THEN 2
								ELSE 3
						END
					LIMIT 10000000000000000000
			) t
			GROUP BY zoneFk;

	DROP TEMPORARY TABLE tLandings;

	DELETE t FROM tmp.zoneOption t
		JOIN zoneExclusion e ON e.zoneFk = t.zoneFk AND e.`dated` = t.landed
		LEFT JOIN zoneExclusionGeo eg ON eg.zoneExclusionFk = e.id
	WHERE eg.zoneExclusionFk IS NULL;

	IF NOT vShowExpiredZones THEN
		DELETE FROM tmp.zoneOption
			WHERE vShipped < CURDATE()
				OR (vShipped = CURDATE() AND CURTIME() > `hour`);
	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 `zone_getShipped` */;
/*!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 `zone_getShipped`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT, vShowExpiredZones BOOLEAN)
BEGIN
/**
 * Devuelve la mínima fecha de envío para cada warehouse
 * Excluye aquellas zonas que ya tienen cajas preparadas en ese almacén
 *
 * @param vLanded La fecha de recepcion
 * @param vAddressFk Id del consignatario
 * @param vAgencyModeFk Id de la agencia
 * @return tmp.zoneGetShipped
 */
	DECLARE vZoneGeo INT;

	SELECT address_getGeo(vAddressFk) INTO vZoneGeo;
	
	CALL vn.zone_getFromGeo(vZoneGeo);
	CALL vn.zone_getOptionsForLanding(vLanded, vShowExpiredZones);
	CALL vn.zone_excludeFromGeo(vZoneGeo);
	CALL vn.zone_getClosed();

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetShipped;
	CREATE TEMPORARY TABLE tmp.zoneGetShipped
			ENGINE = MEMORY
		SELECT * FROM (
				SELECT 	zo.zoneFk,
						zo.shipped,
						zo.`hour`,
						zw.warehouseFk,
						z.agencyModeFk,
						zo.price,
						zo.bonus
					FROM tmp.zoneOption zo
						JOIN vn.zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
						JOIN vn.`zone` z ON z.id = zo.zoneFk
						LEFT JOIN tmp.closedZones cz 
							ON cz.warehouseFk = zw.warehouseFk
								AND cz.zoneFk = zw.zoneFk
								AND zo.shipped = CURDATE()
					WHERE z.agencyModeFk = vAgencyModeFk
						AND (ISNULL(cz.zoneFk) OR vShowExpiredZones)
				ORDER BY shipped
				LIMIT 10000000000000000000) t
			GROUP BY warehouseFk;

	DROP TEMPORARY TABLE
		tmp.`zone`,
		tmp.zoneOption,
		tmp.closedZones;
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 `zone_getState` */;
/*!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 `zone_getState`(vDated DATE)
BEGIN
/**
 * Devuelve las zonas y el estado para la fecha solicitada
 * 
 * @param vDated Fecha en cuestión
 */	
	DROP TEMPORARY TABLE IF EXISTS tmp.zone;

	CREATE TEMPORARY TABLE tmp.zone (
		id INT PRIMARY KEY)
		ENGINE=MEMORY;

	INSERT INTO tmp.zone(id)
		SELECT id
			FROM vn.zone;

	CALL vn.zone_getOptionsForShipment(vDated, TRUE);

	CALL vn.zone_getClosed();
	
	SELECT zo.zoneFk,
			zo.`hour`etd,
			(zo.`hour` <= TIME(now())) isLate,
			!ISNULL(cz.zoneFk) isFull,
			zw.warehouseFk,
			zo.landed
		FROM tmp.zoneOption zo
			JOIN vn.zone z ON z.id = zo.zoneFk
			JOIN vn.zoneWarehouse zw ON zw.zoneFk = z.id
			LEFT JOIN tmp.closedZones cz 
				ON cz.warehouseFk = zw.warehouseFk 
					AND cz.zoneFk = zo.zoneFk;
	
	DROP TEMPORARY TABLE 
		tmp.closedZones,
		tmp.zoneOption,
		tmp.zone;

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 `zone_getWarehouse` */;
/*!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 `zone_getWarehouse`(vAddress INT, vLanded DATE, vWarehouse INT)
BEGIN
/**
 * Devuelve el listado de agencias disponibles para la fecha,
 * dirección y almacén pasados.
 * 
 * @param vAddress
 * @param vWarehouse warehouse
 * @param vLanded Fecha de recogida
 * @select Listado de agencias disponibles
 */
 
	CALL zone_getFromGeo(address_getGeo(vAddress));
    CALL zone_getOptionsForLanding(vLanded, FALSE);
    
	SELECT am.id agencyModeFk, 
			am.name agencyMode, 
			am.description, 
			am.deliveryMethodFk,
			TIMESTAMPADD(DAY, -zo.travelingDays, vLanded) shipped, 
			zw.warehouseFk,
			z.id zoneFk
		FROM tmp.zoneOption zo
			JOIN zone z ON z.id = zo.zoneFk
            JOIN agencyMode am ON am.id = z.agencyModeFk
            JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
		WHERE zw.warehouseFk = vWarehouse
		GROUP BY z.agencyModeFk
		ORDER BY agencyMode;
        
	DROP TEMPORARY TABLE
		tmp.zone,
        tmp.zoneOption;
        
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 `zone_upcomingDeliveries` */;
/*!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 `zone_upcomingDeliveries`()
BEGIN

	DECLARE vForwardDays INT;
    
    SELECT forwardDays INTO vForwardDays FROM zoneConfig;
	CALL util.time_createTable(CURDATE(), DATE_ADD(CURDATE(), INTERVAL vForwardDays DAY));

	DROP TEMPORARY TABLE IF EXISTS tLandings;
	CREATE TEMPORARY TABLE tLandings
		(INDEX (eventFk))
		ENGINE = MEMORY
		SELECT e.id eventFk,
				@travelingDays := IFNULL(e.travelingDays, z.travelingDays) travelingDays,
				TIMESTAMPADD(DAY, @travelingDays, ti.dated) landed,
				ti.dated shipped
			FROM zone z
				JOIN zoneEvent e ON e.zoneFk = z.id
				JOIN tmp.time ti ON ti.dated BETWEEN curdate() AND TIMESTAMPADD(DAY, vForwardDays, curdate());

	DROP TEMPORARY TABLE IF EXISTS tmp.zoneOption;			
	CREATE TEMPORARY TABLE tmp.zoneOption
		ENGINE = MEMORY
		SELECT *
			FROM (
				SELECT z.id zoneFk,
						TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
						l.travelingDays,
						IFNULL(e.price, z.price) price,
						IFNULL(e.bonus, z.bonus) bonus,
						l.landed,
						l.shipped
					FROM zone z
						JOIN zoneEvent e ON e.zoneFk = z.id
						JOIN tLandings l ON l.eventFk = e.id
					WHERE (
							e.`type` = 'day'
							AND e.`dated` = l.landed
						) OR (
							e.`type` != 'day'
							AND e.weekDays & (1 << WEEKDAY(l.landed))
							AND (e.`started` IS NULL OR l.landed >= e.`started`)
							AND (e.`ended` IS NULL OR l.landed <= e.`ended`)
						)
					ORDER BY
						zoneFk,
						CASE
							WHEN e.`type` = 'day'
								THEN 1
							WHEN e.`type` = 'range'
								THEN 2
								ELSE 3
						END
					LIMIT 10000000000000000000
			) t
			GROUP BY zoneFk, landed;

	DELETE t FROM tmp.zoneOption t
		JOIN zoneExclusion e ON e.zoneFk = t.zoneFk AND e.`dated` = t.landed
		LEFT JOIN zoneExclusionGeo eg ON eg.zoneExclusionFk = e.id
	WHERE eg.zoneExclusionFk IS NULL;
			
	SELECT MAX(zo.`hour`) `hour`, zg.`name`, zo.shipped, zo.zoneFk
		FROM tmp.zoneOption zo
			JOIN `zone` z ON z.id = zo.zoneFk
			JOIN agencyMode am ON am.id = z.agencyModeFk
			JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
			JOIN zoneIncluded zi ON zi.zoneFk = z.id
            JOIN zoneGeo zg ON zg.id = zi.geoFk AND zg.type = 'province'
		WHERE dm.code = 'DELIVERY'
        GROUP BY shipped, zg.`name`
		ORDER BY shipped, zg.`name`;
	
    DROP TEMPORARY TABLE tmp.time, tLandings;
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: `vncontrol`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `vncontrol` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `vncontrol`;

--
-- Table structure for table `accion`
--

DROP TABLE IF EXISTS `accion`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accion` (
  `accion_id` int(11) NOT NULL AUTO_INCREMENT,
  `accion` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`accion_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `fallo__`
--

DROP TABLE IF EXISTS `fallo__`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fallo__` (
  `queja_id` int(10) unsigned NOT NULL,
  `accion_id` int(11) NOT NULL,
  PRIMARY KEY (`queja_id`,`accion_id`),
  KEY `accion` (`accion_id`,`queja_id`),
  KEY `fallo` (`queja_id`),
  CONSTRAINT `accion` FOREIGN KEY (`accion_id`) REFERENCES `accion` (`accion_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `inter`
--

DROP TABLE IF EXISTS `inter`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `inter` (
  `inter_id` int(11) NOT NULL AUTO_INCREMENT,
  `state_id` tinyint(3) unsigned NOT NULL,
  `fallo_id` int(10) unsigned NOT NULL DEFAULT '21',
  `nota` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `odbc_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `Id_Ticket` int(11) DEFAULT NULL,
  `Id_Trabajador` int(11) DEFAULT NULL,
  `Id_Supervisor` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`inter_id`),
  KEY `currante` (`Id_Trabajador`),
  KEY `responsable` (`Id_Supervisor`),
  KEY `ticket` (`Id_Ticket`),
  KEY `inter_state` (`state_id`),
  KEY `inter_id` (`Id_Ticket`,`inter_id`) USING BTREE,
  CONSTRAINT `inter_ibfk_1` FOREIGN KEY (`Id_Ticket`) REFERENCES `vn`.`ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `inter_state` FOREIGN KEY (`state_id`) REFERENCES `vn`.`state` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `responsable` FOREIGN KEY (`Id_Supervisor`) REFERENCES `vn`.`worker` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 `vncontrol`.`ticketTracking_beforeInsert`
	BEFORE INSERT ON `inter`
	FOR EACH ROW
BEGIN
	DECLARE vState VARCHAR(15);
    DECLARE vZoneFk INT;
    DECLARE vHasStowAway BOOLEAN;
    DECLARE vBoardingStateFk INT;
        
    SELECT s.code INTO vState
        FROM vn.state s
        WHERE s.id = NEW.state_id;
        
    SELECT t.zonefk INTO vZoneFk
        FROM vn.ticket t
        WHERE t.id = NEW.Id_Ticket;  
    
    IF vState = 'OK' AND vZoneFk IS NULL THEN
        CALL util.throw("ASSIGN_ZONE_FIRST");
    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 `vncontrol`.`ticketTracking_afterInsert`
	AFTER INSERT ON `inter`
	FOR EACH ROW
BEGIN

 	DECLARE vNumTicketsPrepared INT;
	
	REPLACE vn.ticketLastState(ticketFk, ticketTrackingFk, name)
		SELECT NEW.Id_Ticket, NEW.inter_id, `name`
			FROM vn.state
			WHERE id = NEW.state_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 `vncontrol`.`ticketTracking_afterUpdate`
	AFTER UPDATE ON `inter`
	FOR EACH ROW
BEGIN
	DECLARE vTicketFk INT;
    DECLARE vTicketTrackingFk INT;
    DECLARE vStateName VARCHAR(15);
    
	IF NEW.state_id <> OLD.state_id THEN
		REPLACE vn.ticketLastState(ticketFk, ticketTrackingFk, name)
			SELECT NEW.Id_Ticket, NEW.inter_id, `name`
				FROM vn.state
				WHERE id = NEW.state_id;
    END IF;
    
    IF NEW.Id_Ticket <> OLD.Id_Ticket THEN
		SELECT i.Id_Ticket, i.inter_id, s.`name`
			INTO vTicketFk, vTicketTrackingFk, vStateName 
			FROM vncontrol.inter i 
				JOIN vn.state s ON i.state_id = s.id 
			WHERE Id_Ticket = NEW.Id_Ticket 
			ORDER BY odbc_date DESC 
			LIMIT 1;

		IF vTicketFk > 0 THEN
			REPLACE INTO vn.ticketLastState(ticketFk, ticketTrackingFk,name)
				VALUES(vTicketFk, vTicketTrackingFk, vStateName);
		END IF;
	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 `vncontrol`.`ticketTracking_afterDelete`
	AFTER DELETE ON `inter`
	FOR EACH ROW
BEGIN
	DECLARE vTicketFk INT;
	DECLARE vTicketTrackingFk INT;
	DECLARE vStateName VARCHAR(15);

	DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'
	BEGIN
		DELETE FROM vn.ticketLastState
			WHERE ticketFk = OLD.Id_Ticket;
	END;

	SELECT i.Id_Ticket, i.inter_id, s.`name`
		INTO vTicketFk, vTicketTrackingFk, vStateName 
		FROM vncontrol.inter i 
			JOIN vn.state s ON i.state_id = s.id 
		WHERE Id_Ticket = OLD.Id_Ticket 
		ORDER BY odbc_date DESC 
		LIMIT 1;

	IF vTicketFk > 0 THEN
		REPLACE INTO vn.ticketLastState(ticketFk, ticketTrackingFk,name)
			VALUES(vTicketFk, vTicketTrackingFk, vStateName);
	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 */ ;

--
-- Dumping events for database 'vncontrol'
--

--
-- Dumping routines for database 'vncontrol'
--
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `clean` */;
/*!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 `clean`()
BEGIN
    DECLARE vDate DATETIME DEFAULT TIMESTAMPADD(MONTH, -2, CURDATE());
    DELETE i FROM inter i JOIN vn.ticket t ON i.Id_Ticket = t.id
		WHERE t.shipped <= vDate;
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`
--

USE `account`;

--
-- Final view structure for view `accountDovecot`
--

/*!50001 DROP TABLE IF EXISTS `accountDovecot`*/;
/*!50001 DROP VIEW IF EXISTS `accountDovecot`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `accountDovecot` AS select `u`.`name` AS `name`,`u`.`password` AS `password` from (`user` `u` join `account` `a` on((`a`.`id` = `u`.`id`))) where `u`.`active` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `emailUser`
--

/*!50001 DROP TABLE IF EXISTS `emailUser`*/;
/*!50001 DROP VIEW IF EXISTS `emailUser`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `emailUser` AS select `u`.`id` AS `userFk`,concat(`u`.`name`,'@',`mc`.`domain`) AS `email` from (`user` `u` join `mailConfig` `mc`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myRole`
--

/*!50001 DROP TABLE IF EXISTS `myRole`*/;
/*!50001 DROP VIEW IF EXISTS `myRole`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myRole` AS select `r`.`inheritsFrom` AS `id` from (`roleRole` `r` join `user` `u` on((`u`.`role` = `r`.`role`))) where (`u`.`id` = `myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myUser`
--

/*!50001 DROP TABLE IF EXISTS `myUser`*/;
/*!50001 DROP VIEW IF EXISTS `myUser`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myUser` AS select `u`.`id` AS `id`,`u`.`name` AS `name`,`u`.`active` AS `active`,`u`.`email` AS `email`,`u`.`nickname` AS `nickname`,`u`.`lang` AS `lang`,`u`.`role` AS `role`,`u`.`recoverPass` AS `recoverPass` from `user` `u` where (`u`.`name` = `myUser_getName`()) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `bs`
--

USE `bs`;

--
-- Final view structure for view `bajasLaborales`
--

/*!50001 DROP TABLE IF EXISTS `bajasLaborales`*/;
/*!50001 DROP VIEW IF EXISTS `bajasLaborales`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `bajasLaborales` AS select `w`.`firstName` AS `firstname`,`w`.`lastName` AS `name`,`b`.`business_id` AS `business_id`,max(`ce`.`date`) AS `lastDate`,max(ifnull(`b`.`date_end`,curdate())) AS `endContract`,`at`.`name` AS `type`,cast(count(0) as decimal(10,0)) AS `dias`,`w`.`id` AS `userFk` from ((((`postgresql`.`calendar_employee` `ce` join `postgresql`.`business` `b` on((`b`.`business_id` = `ce`.`business_id`))) join `postgresql`.`profile` `pr` on((`pr`.`profile_id` = `b`.`client_id`))) join `vn`.`worker` `w` on((`w`.`id` = `pr`.`workerFk`))) join `vn`.`absenceType` `at` on((`at`.`id` = `ce`.`calendar_state_id`))) where ((`ce`.`date` >= (curdate() + interval -(1) year)) and (`at`.`name` not in ('Vacaciones','Vacaciones 1/2 día','Compensar','Festivo'))) group by `w`.`firstName`,`w`.`lastName`,`at`.`name` having (`endContract` >= curdate()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `lastIndicators`
--

/*!50001 DROP TABLE IF EXISTS `lastIndicators`*/;
/*!50001 DROP VIEW IF EXISTS `lastIndicators`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `lastIndicators` AS select `i`.`updated` AS `updated`,`i`.`lastYearSales` AS `lastYearSales`,(`i`.`lastYearSales` - `yi`.`lastYearSales`) AS `incLastYearSales`,`i`.`totalGreuge` AS `totalGreuge`,(`i`.`totalGreuge` - `yi`.`totalGreuge`) AS `incTotalGreuge`,`i`.`latePaymentRate` AS `latePaymentRate`,(`i`.`latePaymentRate` - `yi`.`latePaymentRate`) AS `incLatePaymentRate`,`i`.`countEmployee` AS `countEmployee`,(`i`.`countEmployee` - `yi`.`countEmployee`) AS `incCountEmployee`,`i`.`averageMana` AS `averageMana`,(`i`.`averageMana` - `yi`.`averageMana`) AS `incAverageMana`,`i`.`bankingPool` AS `bankingPool`,(`i`.`bankingPool` - `yi`.`bankingPool`) AS `incbankingPool`,`i`.`lastMonthActiveClients` AS `lastMonthActiveClients`,(`i`.`lastMonthActiveClients` - `yi`.`lastMonthActiveClients`) AS `incLastMonthActiveClients`,`i`.`lastMonthLostClients` AS `lastMonthLostClients`,(`i`.`lastMonthLostClients` - `yi`.`lastMonthLostClients`) AS `incLastMonthLostClients`,`i`.`lastMonthNewClients` AS `lastMonthNewClients`,(`i`.`lastMonthNewClients` - `yi`.`lastMonthNewClients`) AS `incLastMonthNewClients`,`i`.`lastMonthWebBuyingRate` AS `lastMonthWebBuyingRate`,(`i`.`lastMonthWebBuyingRate` - `yi`.`lastMonthWebBuyingRate`) AS `incLastMonthWebBuyingRate`,`i`.`productionHours__` AS `productionHours__`,`i`.`dailyWorkersCost__` AS `dailyWorkersCost__`,`i`.`volumeM3__` AS `volumeM3__`,`i`.`salesValue__` AS `salesValue__`,`i`.`valueM3__` AS `valueM3__`,`i`.`hoursM3__` AS `hoursM3__`,`i`.`workerCostM3__` AS `workerCostM3__`,`i`.`salesWorkersCostRate__` AS `salesWorkersCostRate__`,`i`.`thisWeekSales` AS `thisWeekSales`,`i`.`lastYearWeekSales` AS `lastYearWeekSales` from (`indicators` `i` join `indicators` `yi` on((`yi`.`updated` = (select (max(`indicators`.`updated`) + interval -(1) day) from `indicators`)))) where (`i`.`updated` = (select max(`indicators`.`updated`) from `indicators`)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `packingSpeed`
--

/*!50001 DROP TABLE IF EXISTS `packingSpeed`*/;
/*!50001 DROP VIEW IF EXISTS `packingSpeed`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `packingSpeed` AS select hour(`e`.`created`) AS `hora`,minute(`e`.`created`) AS `minuto`,ifnull(`p`.`volume`,((`p`.`width` * `p`.`height`) * `p`.`depth`)) AS `cm3`,`t`.`warehouseFk` AS `warehouse_id`,`e`.`created` AS `odbc_date` from ((`vn`.`expedition` `e` join `vn`.`packaging` `p` on((`p`.`id` = `e`.`packagingFk`))) join `vn`.`ticket` `t` on((`t`.`id` = `e`.`ticketFk`))) where (`e`.`created` between curdate() and `util`.`dayend`(curdate())) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `s1_ticketDetail`
--

/*!50001 DROP TABLE IF EXISTS `s1_ticketDetail`*/;
/*!50001 DROP VIEW IF EXISTS `s1_ticketDetail`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `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` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `s21_saleDetail`
--

/*!50001 DROP TABLE IF EXISTS `s21_saleDetail`*/;
/*!50001 DROP VIEW IF EXISTS `s21_saleDetail`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `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` and (`s`.`quantity` > 0)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `vendedores`
--

/*!50001 DROP TABLE IF EXISTS `vendedores`*/;
/*!50001 DROP VIEW IF EXISTS `vendedores`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vendedores` AS select `sp`.`workerFk` AS `Id_Trabajador`,`sp`.`year` AS `año`,`sp`.`month` AS `mes`,`sp`.`amount` AS `importe`,`sp`.`commission` AS `comision`,`sp`.`leasedCommission` AS `comisionArrendada`,`sp`.`cededCommission` AS `comisionCedida`,`sp`.`newCommission` AS `comisionNuevos`,`sp`.`leasedReplacement` AS `sustitucionArrendada`,`sp`.`itemTypeBorrowed` AS `itemTypeBorrowed`,`sp`.`portfolioWeight` AS `portfolioWeight`,`sp`.`updated` AS `updated` from `salesPerson` `sp` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ventas`
--

/*!50001 DROP TABLE IF EXISTS `ventas`*/;
/*!50001 DROP VIEW IF EXISTS `ventas`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ventas` AS select `s`.`saleFk` AS `Id_Movimiento`,`s`.`amount` AS `importe`,`s`.`surcharge` AS `recargo`,`s`.`dated` AS `fecha`,`s`.`typeFk` AS `tipo_id`,`s`.`clientFk` AS `Id_Cliente`,`s`.`companyFk` AS `empresa_id`,`s`.`margin` AS `margen` from `sale` `s` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `cache`
--

USE `cache`;

--
-- Current Database: `edi`
--

USE `edi`;

--
-- Final view structure for view `errorList`
--

/*!50001 DROP TABLE IF EXISTS `errorList`*/;
/*!50001 DROP VIEW IF EXISTS `errorList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `errorList` AS select `po`.`id` AS `id`,`c`.`name` AS `name`,`i`.`longName` AS `longName`,`po`.`quantity` AS `quantity`,left(`po`.`error`,4) AS `stock`,`po`.`error` AS `error`,`po`.`deliveryInformationID` AS `deliveryInformationID`,`po`.`supplyResponseID` AS `supplyResponseID`,`po`.`OrderTradeLineDateTime` AS `OrderTradeLineDateTime`,`po`.`EndUserPartyGLN` AS `EndUserPartyGLN` from ((`edi`.`putOrder` `po` left join `vn`.`client` `c` on((`c`.`id` = `po`.`EndUserPartyGLN`))) left join `vn`.`item` `i` on((`i`.`supplyResponseFk` = `po`.`supplyResponseID`))) where ((`po`.`OrderTradeLineDateTime` > (curdate() + interval -(12) hour)) and (`po`.`OrderStatus` = 3) and (left(`po`.`error`,4) <> '(0) ')) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `supplyOffer`
--

/*!50001 DROP TABLE IF EXISTS `supplyOffer`*/;
/*!50001 DROP VIEW IF EXISTS `supplyOffer`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `supplyOffer` AS select `sr`.`vmpID` AS `vmpID`,`di`.`ID` AS `diId`,`sr`.`ID` AS `srId`,`sr`.`Item_ArticleCode` AS `Item_ArticleCode`,`sr`.`VBNOmschrijving` AS `product_name`,`s`.`company_name` AS `company_name`,cast(`sr`.`Price` as decimal(10,3)) AS `Price`,`sr`.`Quality` AS `Quality`,`sr`.`s1` AS `s1`,`sr`.`s2` AS `s2`,`sr`.`s3` AS `s3`,`sr`.`s4` AS `s4`,`sr`.`s5` AS `s5`,`sr`.`s6` AS `s6`,`sr`.`NumberOfUnits` AS `NumberOfUnits`,least(if((`sr`.`EmbalageCode` = 800),((`sr`.`EmbalageCode` * 10) + `sr`.`NumberOfItemsPerCask`),`sr`.`EmbalageCode`),ifnull(`idt`.`bucket_id`,'999')) AS `EmbalageCode`,`di`.`LatestDeliveryDateTime` AS `LatestDeliveryDateTime`,`di`.`EarliestDespatchDateTime` AS `EarliestDespatchDateTime`,`di`.`FirstOrderDateTime` AS `FirstOrderDateTime`,`di`.`LatestOrderDateTime` AS `LatestOrderDateTime`,`sr`.`NumberOfItemsPerCask` AS `NumberOfItemsPerCask`,`sr`.`NumberOfLayersPerTrolley` AS `NumberOfLayersPerTrolley`,`sr`.`MinimumNumberToOrder` AS `MinimumNumberToOrder`,`sr`.`MaximumNumberToOrder` AS `MaximumNumberToOrder`,`sr`.`IncrementalOrderableQuantity` AS `IncrementalOrderableQuantity`,`sr`.`PackingPrice` AS `PackingPrice`,`sr`.`MarketPlaceID` AS `MarketPlaceID`,`sr`.`PictureReference` AS `PictureReference`,`sr`.`updated` AS `supplyResponseUpdated`,`i`.`group_id` AS `group_id`,`mp`.`name` AS `marketPlace`,`di`.`DeliveryPrice` AS `DeliveryPrice`,`di`.`ChargeAmount` AS `ChargeAmount`,`di`.`MinimumQuantity` AS `MinimumQuantity`,`di`.`MaximumQuantity Integer` AS `MaximumQuantity`,cast((`sr`.`MinimumNumberToOrder` * (case `sr`.`MinimumOrderUnitType` when 1 then 1 when 2 then (`sr`.`NumberOfItemsPerCask` / `sr`.`NumberBunchesPerCask`) when 3 then `sr`.`NumberOfItemsPerCask` when 4 then (floor(((128 * 56) / (`b`.`x_size` * `b`.`y_size`))) * `sr`.`NumberOfItemsPerCask`) when 5 then ((floor(((128 * 56) / (`b`.`x_size` * `b`.`y_size`))) * `sr`.`NumberOfItemsPerCask`) * `sr`.`NumberOfLayersPerTrolley`) end)) as decimal(10,0)) AS `OrderUnit`,cast((`sr`.`IncrementalOrderableQuantity` * (case `sr`.`IncrementalOrderableQuantityType` when 1 then 1 when 2 then (`sr`.`NumberOfItemsPerCask` / `sr`.`NumberBunchesPerCask`) when 3 then `sr`.`NumberOfItemsPerCask` when 4 then (floor(((128 * 56) / (`b`.`x_size` * `b`.`y_size`))) * `sr`.`NumberOfItemsPerCask`) when 5 then ((floor(((128 * 56) / (`b`.`x_size` * `b`.`y_size`))) * `sr`.`NumberOfItemsPerCask`) * `sr`.`NumberOfLayersPerTrolley`) end)) as decimal(10,0)) AS `IncrementalOrderUnit`,`mp`.`isEarlyBird` AS `isEarlyBird`,`v`.`isVNHSupplier` AS `isVNHSupplier`,`igo`.`expenseFk` AS `expenseFk`,`igo`.`intrastatFk` AS `intrastatFk`,`igo`.`originFk` AS `originFk`,ifnull(`idt`.`itemTypeFk`,`igo`.`itemTypeFk`) AS `itemTypeFk` from (((((((((`edi`.`deliveryInformation` `di` join `edi`.`supplyResponse` `sr` on((`sr`.`ID` = `di`.`supplyResponseID`))) left join `edi`.`supplier` `s` on((`s`.`glnAddressCode` = `sr`.`SupplierGLN`))) join `edi`.`bucket` `b` on((`b`.`bucket_id` = `sr`.`EmbalageCode`))) join `edi`.`item` `i` on((`i`.`id` = `sr`.`Item_ArticleCode`))) join `edi`.`marketPlace` `mp` on((`mp`.`id` = `sr`.`MarketPlaceID`))) join `vn`.`floramondoConfig` `fm`) left join `edi`.`item_defaultType` `idt` on((`idt`.`item_id` = `i`.`id`))) join `edi`.`VMPSettings` `v` on((`v`.`VMPID` = `sr`.`vmpID`))) join `edi`.`item_groupToOffer` `igo` on((`igo`.`group_code` = `i`.`group_id`))) where ((`v`.`isBlocked` = 0) and (`s`.`isBanned` = 0) and (`sr`.`NumberOfUnits` > 0) and (now() between `di`.`FirstOrderDateTime` and `di`.`LatestOrderDateTime`) and (`mp`.`isOffered` = 1) and (`di`.`LatestDeliveryDateTime` between cast(`fm`.`nextLanded` as date) and concat(cast(`fm`.`nextLanded` as date),' ',`fm`.`MaxLatestDeliveryHour`))) group by `sr`.`ID` having (`EmbalageCode` <> 999) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `hedera`
--

USE `hedera`;

--
-- Final view structure for view `mainAccountBank`
--

/*!50001 DROP TABLE IF EXISTS `mainAccountBank`*/;
/*!50001 DROP VIEW IF EXISTS `mainAccountBank`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `mainAccountBank` AS select `e`.`name` AS `name`,`a`.`iban` AS `iban` from ((`hedera`.`mainAccount` `c` join `vn`.`supplierAccount` `a` on((`a`.`id` = `c`.`accountFk`))) join `vn`.`bankEntity` `e` on((`e`.`id` = `a`.`bankEntityFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myAddress`
--

/*!50001 DROP TABLE IF EXISTS `myAddress`*/;
/*!50001 DROP VIEW IF EXISTS `myAddress`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myAddress` AS select `t`.`id` AS `id`,`t`.`clientFk` AS `clientFk`,`t`.`street` AS `street`,`t`.`city` AS `city`,`t`.`postalCode` AS `postalCode`,`t`.`provinceFk` AS `provinceFk`,`t`.`nickname` AS `nickname`,`t`.`isDefaultAddress` AS `isDefaultAddress`,`t`.`isActive` AS `isActive`,`t`.`longitude` AS `longitude`,`t`.`latitude` AS `latitude`,`t`.`agencyModeFk` AS `agencyModeFk` from `vn`.`address` `t` where (`t`.`clientFk` = `account`.`myUser_getId`()) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myBasket`
--

/*!50001 DROP TABLE IF EXISTS `myBasket`*/;
/*!50001 DROP VIEW IF EXISTS `myBasket`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myBasket` AS select `o`.`id` AS `id`,`o`.`date_make` AS `made`,`o`.`date_send` AS `sent`,`o`.`customer_id` AS `clientFk`,`o`.`delivery_method_id` AS `deliveryMethodFk`,`o`.`agency_id` AS `agencyModeFk`,`o`.`address_id` AS `addressFk`,`o`.`company_id` AS `companyFk`,`o`.`note` AS `notes` from `hedera`.`order` `o` where (`o`.`id` = `MYBASKET_GETID`()) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myBasketDefaults`
--

/*!50001 DROP TABLE IF EXISTS `myBasketDefaults`*/;
/*!50001 DROP VIEW IF EXISTS `myBasketDefaults`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myBasketDefaults` AS select coalesce(`dm`.`code`,`cm`.`code`) AS `deliveryMethod`,coalesce(`ad`.`agencyModeFk`,`oc`.`defaultAgencyFk`) AS `agencyModeFk`,`c`.`defaultAddressFk` AS `addressFk`,`oc`.`defaultAgencyFk` AS `defaultAgencyFk` from ((((((`hedera`.`orderConfig` `oc` join `vn`.`agencyMode` `ca` on((`ca`.`id` = `oc`.`defaultAgencyFk`))) join `vn`.`deliveryMethod` `cm` on((`cm`.`id` = `ca`.`deliveryMethodFk`))) left join `vn`.`client` `c` on((`c`.`id` = `account`.`myUser_getId`()))) left join `vn`.`address` `ad` on((`ad`.`id` = `c`.`defaultAddressFk`))) left join `vn`.`agencyMode` `a` on((`a`.`id` = `ad`.`agencyModeFk`))) left join `vn`.`deliveryMethod` `dm` on((`dm`.`id` = `a`.`deliveryMethodFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myBasketItem`
--

/*!50001 DROP TABLE IF EXISTS `myBasketItem`*/;
/*!50001 DROP VIEW IF EXISTS `myBasketItem`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myBasketItem` AS select `r`.`id` AS `id`,`r`.`orderFk` AS `orderFk`,`r`.`warehouseFk` AS `warehouseFk`,`r`.`itemFk` AS `itemFk`,`r`.`amount` AS `amount`,`r`.`price` AS `price` from `hedera`.`orderRow` `r` where (`r`.`orderFk` = `MYBASKET_GETID`()) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myClient`
--

/*!50001 DROP TABLE IF EXISTS `myClient`*/;
/*!50001 DROP VIEW IF EXISTS `myClient`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myClient` AS select `c`.`id` AS `id`,`c`.`isToBeMailed` AS `isToBeMailed`,`c`.`defaultAddressFk` AS `defaultAddressFk`,`c`.`credit` AS `credit` from `vn`.`client` `c` where (`c`.`id` = `account`.`myUser_getId`()) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myInvoice`
--

/*!50001 DROP TABLE IF EXISTS `myInvoice`*/;
/*!50001 DROP VIEW IF EXISTS `myInvoice`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myInvoice` AS select `i`.`id` AS `id`,`i`.`ref` AS `ref`,`i`.`issued` AS `issued`,`i`.`amount` AS `amount`,`i`.`hasPdf` AS `hasPdf` from `vn`.`invoiceOut` `i` where (`i`.`clientFk` = `account`.`myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myMenu`
--

/*!50001 DROP TABLE IF EXISTS `myMenu`*/;
/*!50001 DROP VIEW IF EXISTS `myMenu`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myMenu` AS select `t`.`id` AS `id`,`t`.`path` AS `path`,`t`.`description` AS `description`,`t`.`parentFk` AS `parentFk` from (`hedera`.`menu` `t` join `account`.`myRole` `r` on((`r`.`id` = `t`.`roleFk`))) order by `t`.`parentFk`,`t`.`displayOrder`,`t`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myOrder`
--

/*!50001 DROP TABLE IF EXISTS `myOrder`*/;
/*!50001 DROP VIEW IF EXISTS `myOrder`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myOrder` AS select `o`.`id` AS `id`,`o`.`date_send` AS `landed`,`o`.`customer_id` AS `clientFk`,`o`.`delivery_method_id` AS `deliveryMethodFk`,`o`.`agency_id` AS `agencyModeFk`,`o`.`address_id` AS `addressFk`,`o`.`company_id` AS `companyFk`,`o`.`note` AS `note`,`o`.`source_app` AS `sourceApp`,`o`.`confirmed` AS `isConfirmed`,`o`.`date_make` AS `created`,`o`.`first_row_stamp` AS `firstRowStamp`,`o`.`confirm_date` AS `confirmed` from `hedera`.`order` `o` where (`o`.`customer_id` = `account`.`myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myOrderRow`
--

/*!50001 DROP TABLE IF EXISTS `myOrderRow`*/;
/*!50001 DROP VIEW IF EXISTS `myOrderRow`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myOrderRow` AS select `orw`.`id` AS `id`,`orw`.`order_id` AS `Fk`,`orw`.`item_id` AS `itemFk`,`orw`.`warehouse_id` AS `warehouseFk`,`orw`.`shipment` AS `shipped`,`orw`.`amount` AS `amount`,`orw`.`price` AS `price`,`orw`.`rate` AS `rate`,`orw`.`created` AS `created`,`orw`.`Id_Movimiento` AS `saleFk` from (`hedera`.`order_row` `orw` join `hedera`.`myOrder` `o` on((`o`.`id` = `orw`.`order_id`))) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myOrderTicket`
--

/*!50001 DROP TABLE IF EXISTS `myOrderTicket`*/;
/*!50001 DROP VIEW IF EXISTS `myOrderTicket`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myOrderTicket` AS select `o`.`id` AS `orderFk`,`ot`.`ticketFk` AS `ticketFk` from (`hedera`.`myOrder` `o` join `hedera`.`orderTicket` `ot` on((`ot`.`orderFk` = `o`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myTicket`
--

/*!50001 DROP TABLE IF EXISTS `myTicket`*/;
/*!50001 DROP VIEW IF EXISTS `myTicket`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myTicket` AS select `t`.`id` AS `id`,`t`.`clientFk` AS `clientFk`,`t`.`warehouseFk` AS `warehouseFk`,`t`.`shipped` AS `shipped`,`t`.`landed` AS `landed`,`t`.`nickname` AS `nickname`,`t`.`agencyModeFk` AS `agencyModeFk`,`t`.`refFk` AS `refFk`,`t`.`addressFk` AS `addressFk`,`t`.`location` AS `location`,`t`.`companyFk` AS `companyFk` from `vn`.`ticket` `t` where (`t`.`clientFk` = `account`.`myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myTicketRow`
--

/*!50001 DROP TABLE IF EXISTS `myTicketRow`*/;
/*!50001 DROP VIEW IF EXISTS `myTicketRow`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myTicketRow` AS select `s`.`id` AS `id`,`s`.`itemFk` AS `itemFk`,`s`.`ticketFk` AS `ticketFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`s`.`price` AS `price`,`s`.`discount` AS `discount`,`s`.`reserved` AS `reserved`,`s`.`isPicked` AS `isPicked` from (`vn`.`sale` `s` join `hedera`.`myTicket` `t` on((`s`.`ticketFk` = `t`.`id`))) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myTicketService`
--

/*!50001 DROP TABLE IF EXISTS `myTicketService`*/;
/*!50001 DROP VIEW IF EXISTS `myTicketService`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myTicketService` AS select `s`.`id` AS `id`,`s`.`description` AS `description`,`s`.`quantity` AS `quantity`,`s`.`price` AS `price`,`s`.`taxClassFk` AS `taxClassFk`,`s`.`ticketFk` AS `ticketFk`,`s`.`ticketServiceTypeFk` AS `ticketServiceTypeFk` from (`vn`.`ticketService` `s` join `hedera`.`myTicket` `t` on((`s`.`ticketFk` = `t`.`id`))) */
/*!50002 WITH CASCADED CHECK OPTION */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myTicketState`
--

/*!50001 DROP TABLE IF EXISTS `myTicketState`*/;
/*!50001 DROP VIEW IF EXISTS `myTicketState`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myTicketState` AS select `t`.`id` AS `id`,`t`.`clientFk` AS `clientFk`,`t`.`warehouseFk` AS `warehouseFk`,`t`.`shipped` AS `shipped`,`t`.`landed` AS `landed`,`t`.`nickname` AS `nickname`,`t`.`agencyModeFk` AS `agencyModeFk`,`t`.`refFk` AS `refFk`,`t`.`addressFk` AS `addressFk`,`t`.`location` AS `location`,`t`.`companyFk` AS `companyFk`,`ts`.`alertLevel` AS `alertLevel`,`ts`.`code` AS `code` from (`vn`.`ticket` `t` left join `vn`.`ticketState` `ts` on((`ts`.`ticketFk` = `t`.`id`))) where (`t`.`clientFk` = `account`.`myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `myTpvTransaction`
--

/*!50001 DROP TABLE IF EXISTS `myTpvTransaction`*/;
/*!50001 DROP VIEW IF EXISTS `myTpvTransaction`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `myTpvTransaction` AS select `t`.`id` AS `id`,`t`.`merchantFk` AS `merchantFk`,`t`.`clientFk` AS `clientFk`,`t`.`receiptFk` AS `receiptFk`,`t`.`amount` AS `amount`,`t`.`response` AS `response`,`t`.`status` AS `status`,`t`.`created` AS `created` from `hedera`.`tpvTransaction` `t` where (`t`.`clientFk` = `account`.`myUser_getId`()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `orderTicket`
--

/*!50001 DROP TABLE IF EXISTS `orderTicket`*/;
/*!50001 DROP VIEW IF EXISTS `orderTicket`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `orderTicket` AS select `b`.`orderFk` AS `orderFk`,`b`.`ticketFk` AS `ticketFk` from `vn`.`orderTicket` `b` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `order_component`
--

/*!50001 DROP TABLE IF EXISTS `order_component`*/;
/*!50001 DROP VIEW IF EXISTS `order_component`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `order_component` AS select `t`.`rowFk` AS `order_row_id`,`t`.`componentFk` AS `component_id`,`t`.`price` AS `price` from `orderRowComponent` `t` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `order_row`
--

/*!50001 DROP TABLE IF EXISTS `order_row`*/;
/*!50001 DROP VIEW IF EXISTS `order_row`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `order_row` AS select `t`.`id` AS `id`,`t`.`orderFk` AS `order_id`,`t`.`itemFk` AS `item_id`,`t`.`warehouseFk` AS `warehouse_id`,`t`.`shipment` AS `shipment`,`t`.`amount` AS `amount`,`t`.`price` AS `price`,`t`.`rate` AS `rate`,`t`.`created` AS `created`,`t`.`saleFk` AS `Id_Movimiento` from `orderRow` `t` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `nst`
--

USE `nst`;

--
-- Current Database: `pbx`
--

USE `pbx`;

--
-- Final view structure for view `cdrConf`
--

/*!50001 DROP TABLE IF EXISTS `cdrConf`*/;
/*!50001 DROP VIEW IF EXISTS `cdrConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `cdrConf` AS select `c`.`call_date` AS `calldate`,`c`.`clid` AS `clid`,`c`.`src` AS `src`,`c`.`dst` AS `dst`,`c`.`dcontext` AS `dcontext`,`c`.`channel` AS `channel`,`c`.`dst_channel` AS `dstchannel`,`c`.`last_app` AS `lastapp`,`c`.`last_data` AS `lastdata`,`c`.`duration` AS `duration`,`c`.`billsec` AS `billsec`,`c`.`disposition` AS `disposition`,`c`.`ama_flags` AS `amaflags`,`c`.`account_code` AS `accountcode`,`c`.`unique_id` AS `uniqueid`,`c`.`user_field` AS `userfield` from `cdr` `c` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `followmeConf`
--

/*!50001 DROP TABLE IF EXISTS `followmeConf`*/;
/*!50001 DROP VIEW IF EXISTS `followmeConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `followmeConf` AS select `f`.`extension` AS `name`,`c`.`music` AS `music`,`c`.`context` AS `context`,`c`.`takeCall` AS `takecall`,`c`.`declineCall` AS `declinecall` from (`followme` `f` join `followmeConfig` `c`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `followmeNumberConf`
--

/*!50001 DROP TABLE IF EXISTS `followmeNumberConf`*/;
/*!50001 DROP VIEW IF EXISTS `followmeNumberConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `followmeNumberConf` AS select `f`.`extension` AS `name`,1 AS `ordinal`,`f`.`phone` AS `phonenumber`,`c`.`timeout` AS `timeout` from (`followme` `f` join `followmeConfig` `c`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `queueConf`
--

/*!50001 DROP TABLE IF EXISTS `queueConf`*/;
/*!50001 DROP VIEW IF EXISTS `queueConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `queueConf` AS select `q`.`name` AS `name`,`c`.`strategy` AS `strategy`,`c`.`timeout` AS `timeout`,`c`.`retry` AS `retry`,`c`.`weight` AS `weight`,`c`.`maxLen` AS `maxlen`,`c`.`ringInUse` AS `ringinuse` from (`queue` `q` join `queueConfig` `c` on((`q`.`config` = `c`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `queueMemberConf`
--

/*!50001 DROP TABLE IF EXISTS `queueMemberConf`*/;
/*!50001 DROP VIEW IF EXISTS `queueMemberConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `queueMemberConf` AS select `m`.`id` AS `uniqueid`,`m`.`queue` AS `queue_name`,concat('SIP/',`m`.`extension`) AS `interface`,0 AS `paused` from `queueMember` `m` union all select `p`.`id` AS `id`,`p`.`queue` AS `queue`,concat('Local/',`p`.`phone`,'@outgoing') AS `phone`,0 AS `paused` from `queuePhone` `p` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `sipConf`
--

/*!50001 DROP TABLE IF EXISTS `sipConf`*/;
/*!50001 DROP VIEW IF EXISTS `sipConf`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `sipConf` AS select `s`.`user_id` AS `id`,`s`.`extension` AS `name`,NULL AS `callbackextension`,`s`.`md5Secret` AS `md5secret`,`u`.`nickname` AS `callerid`,`c`.`host` AS `host`,`c`.`deny` AS `deny`,`c`.`permit` AS `permit`,`c`.`type` AS `type`,`c`.`context` AS `context`,`c`.`incomingLimit` AS `incominglimit`,`c`.`pickupGroup` AS `pickupgroup`,`c`.`careInvite` AS `careinvite`,`c`.`insecure` AS `insecure`,`c`.`transport` AS `transport`,`c`.`nat` AS `nat`,`r`.`ipAddr` AS `ipaddr`,`r`.`regSeconds` AS `regseconds`,`r`.`port` AS `port`,`r`.`defaultUser` AS `defaultuser`,`r`.`userAgent` AS `useragent`,`r`.`lastMs` AS `lastms`,`r`.`fullContact` AS `fullcontact`,`r`.`regServer` AS `regserver` from (((`pbx`.`sip` `s` join `account`.`user` `u` on((`u`.`id` = `s`.`user_id`))) left join `pbx`.`sipReg` `r` on((`s`.`user_id` = `r`.`userId`))) join `pbx`.`sipConfig` `c`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `postgresql`
--

USE `postgresql`;

--
-- Final view structure for view `calendar_employee`
--

/*!50001 DROP TABLE IF EXISTS `calendar_employee`*/;
/*!50001 DROP VIEW IF EXISTS `calendar_employee`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `calendar_employee` AS select `ce`.`id` AS `id`,`ce`.`businessFk` AS `business_id`,`ce`.`dayOffTypeFk` AS `calendar_state_id`,`ce`.`dated` AS `date` from `vn`.`calendar` `ce` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `sage`
--

USE `sage`;

--
-- Final view structure for view `clientLastTwoMonths`
--

/*!50001 DROP TABLE IF EXISTS `clientLastTwoMonths`*/;
/*!50001 DROP VIEW IF EXISTS `clientLastTwoMonths`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `clientLastTwoMonths` AS select `vn`.`invoiceOut`.`clientFk` AS `clientFk`,`vn`.`invoiceOut`.`companyFk` AS `companyFk` from `vn`.`invoiceOut` where (`vn`.`invoiceOut`.`issued` > (curdate() - interval 2 month)) union select `vn`.`receipt`.`clientFk` AS `clientFk`,`vn`.`receipt`.`companyFk` AS `companyFk` from `vn`.`receipt` where (`vn`.`receipt`.`payed` > (curdate() - interval 2 month)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `invoiceInList`
--

/*!50001 DROP TABLE IF EXISTS `invoiceInList`*/;
/*!50001 DROP VIEW IF EXISTS `invoiceInList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `invoiceInList` AS select `vn`.`invoiceIn`.`id` AS `id`,`vn`.`invoiceIn`.`supplierRef` AS `supplierRef`,`vn`.`invoiceIn`.`serial` AS `serial`,`vn`.`invoiceIn`.`supplierFk` AS `supplierFk`,`vn`.`invoiceIn`.`issued` AS `issued`,if((`vn`.`invoiceIn`.`expenceFkDeductible` > 0),1,0) AS `isVatDeductible`,`vn`.`invoiceIn`.`serialNumber` AS `serialNumber` from `vn`.`invoiceIn` where (`vn`.`invoiceIn`.`issued` >= (date_format(curdate(),'%Y-01-01') + interval -(1) year)) union all select `vn`.`dua`.`id` AS `id`,`vn`.`dua`.`code` AS `code`,'D' AS `D`,`c`.`id` AS `supplierFk`,`vn`.`dua`.`issued` AS `issued`,0 AS `FALSE`,`vn`.`dua`.`id` AS `serialNumber` from (`vn`.`dua` join `vn`.`company` `c` on((`c`.`code` = 'VNL'))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `supplierLastThreeMonths`
--

/*!50001 DROP TABLE IF EXISTS `supplierLastThreeMonths`*/;
/*!50001 DROP VIEW IF EXISTS `supplierLastThreeMonths`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `supplierLastThreeMonths` AS select `vn`.`invoiceIn`.`supplierFk` AS `supplierFk`,`vn`.`invoiceIn`.`companyFk` AS `companyFk` from `vn`.`invoiceIn` where (`vn`.`invoiceIn`.`issued` > (curdate() - interval 3 month)) union select `vn`.`payment`.`supplierFk` AS `supplierFk`,`vn`.`payment`.`companyFk` AS `companyFk` from `vn`.`payment` where (`vn`.`payment`.`received` > (curdate() + interval -(3) month)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `salix`
--

USE `salix`;

--
-- Final view structure for view `Account`
--

/*!50001 DROP TABLE IF EXISTS `Account`*/;
/*!50001 DROP VIEW IF EXISTS `Account`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `Account` AS select `u`.`id` AS `id`,`u`.`name` AS `name`,`u`.`password` AS `password`,`u`.`role` AS `roleFk`,`u`.`active` AS `active`,`u`.`email` AS `email`,`u`.`created` AS `created`,`u`.`updated` AS `updated` from `account`.`user` `u` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `Role`
--

/*!50001 DROP TABLE IF EXISTS `Role`*/;
/*!50001 DROP VIEW IF EXISTS `Role`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `Role` AS select `r`.`id` AS `id`,`r`.`name` AS `name`,`r`.`description` AS `description`,`r`.`created` AS `created`,`r`.`modified` AS `modified` from `account`.`role` `r` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `RoleMapping`
--

/*!50001 DROP TABLE IF EXISTS `RoleMapping`*/;
/*!50001 DROP VIEW IF EXISTS `RoleMapping`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `RoleMapping` AS select ((`u`.`id` * 1000) + `r`.`inheritsFrom`) AS `id`,'USER' AS `principalType`,`u`.`id` AS `principalId`,`r`.`inheritsFrom` AS `roleId` from (`account`.`user` `u` join `account`.`roleRole` `r` on((`r`.`role` = `u`.`role`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `User`
--

/*!50001 DROP TABLE IF EXISTS `User`*/;
/*!50001 DROP VIEW IF EXISTS `User`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `User` AS select `account`.`user`.`id` AS `id`,`account`.`user`.`realm` AS `realm`,`account`.`user`.`name` AS `username`,`account`.`user`.`bcryptPassword` AS `password`,`account`.`user`.`email` AS `email`,`account`.`user`.`emailVerified` AS `emailVerified`,`account`.`user`.`verificationToken` AS `verificationToken` from `account`.`user` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `stock`
--

USE `stock`;

--
-- Current Database: `util`
--

USE `util`;

--
-- Current Database: `vn`
--

USE `vn`;

--
-- Final view structure for view `NewView`
--

/*!50001 DROP TABLE IF EXISTS `NewView`*/;
/*!50001 DROP VIEW IF EXISTS `NewView`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `NewView` AS select `c`.`id` AS `clientFk`,max(`t`.`shipped`) AS `lastShipped`,`pc`.`notBuyingMonths` AS `notBuyingMonths` from ((`client` `c` join `productionConfig` `pc`) left join `ticket` `t` on(((`c`.`id` = `t`.`clientFk`) and (`t`.`shipped` < (curdate() + interval -(`pc`.`rookieDays`) day))))) group by `c`.`id` having (isnull(`lastShipped`) or (`lastShipped` < (curdate() + interval -(`notBuyingMonths`) month))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `__coolerPathDetail`
--

/*!50001 DROP TABLE IF EXISTS `__coolerPathDetail`*/;
/*!50001 DROP VIEW IF EXISTS `__coolerPathDetail`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `__coolerPathDetail` AS select `c`.`cooler_path_detail_id` AS `id`,`c`.`cooler_path_id` AS `coolerPathFk`,`c`.`pasillo` AS `hallway` from `vn2008`.`cooler_path_detail` `c` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `agencyTerm`
--

/*!50001 DROP TABLE IF EXISTS `agencyTerm`*/;
/*!50001 DROP VIEW IF EXISTS `agencyTerm`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8 */;
/*!50001 SET character_set_results     = utf8 */;
/*!50001 SET collation_connection      = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `agencyTerm` AS select `sat`.`agencyFk` AS `agencyFk`,`sat`.`minimumPackages` AS `minimumPackages`,`sat`.`kmPrice` AS `kmPrice`,`sat`.`packagePrice` AS `packagePrice`,`sat`.`routePrice` AS `routePrice`,`sat`.`minimumKm` AS `minimumKm`,`sat`.`minimumM3` AS `minimumM3`,`sat`.`m3Price` AS `m3Price` from `supplierAgencyTerm` `sat` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `annualAverageInvoiced`
--

/*!50001 DROP TABLE IF EXISTS `annualAverageInvoiced`*/;
/*!50001 DROP VIEW IF EXISTS `annualAverageInvoiced`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `annualAverageInvoiced` AS select `cec`.`clientFk` AS `clientFk`,`cec`.`invoiced` AS `invoiced` from `bs`.`clientAnnualConsumption` `cec` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `awbVolume`
--

/*!50001 DROP TABLE IF EXISTS `awbVolume`*/;
/*!50001 DROP VIEW IF EXISTS `awbVolume`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `awbVolume` AS select `d`.`awbFk` AS `awbFk`,(((`b`.`stickers` * `i`.`density`) * if((`p`.`volume` > 0),`p`.`volume`,((`p`.`width` * `p`.`depth`) * if((`p`.`height` = 0),(`i`.`size` + 10),`p`.`height`)))) / 167000) AS `volume`,`b`.`id` AS `buyFk` from (((((((`buy` `b` join `item` `i` on((`b`.`itemFk` = `i`.`id`))) join `itemType` `it` on((`i`.`typeFk` = `it`.`id`))) join `packaging` `p` on((`p`.`id` = `b`.`packageFk`))) join `entry` `e` on((`b`.`entryFk` = `e`.`id`))) join `travel` `t` on((`t`.`id` = `e`.`travelFk`))) join `duaEntry` `de` on((`de`.`entryFk` = `e`.`id`))) join `dua` `d` on((`d`.`id` = `de`.`duaFk`))) where (`t`.`shipped` > makedate((year(curdate()) - 1),1)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `bank`
--

/*!50001 DROP TABLE IF EXISTS `bank`*/;
/*!50001 DROP VIEW IF EXISTS `bank`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `bank` AS select `a`.`id` AS `id`,`a`.`bank` AS `bank`,`a`.`account` AS `account`,`a`.`accountingTypeFk` AS `cash`,`a`.`entityFk` AS `entityFk`,`a`.`isActive` AS `isActive`,`a`.`currencyFk` AS `currencyFk`,`a`.`code` AS `code` from `accounting` `a` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `bankPolicy`
--

/*!50001 DROP TABLE IF EXISTS `bankPolicy`*/;
/*!50001 DROP VIEW IF EXISTS `bankPolicy`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `bankPolicy` AS select `bp`.`poliza_id` AS `id`,`bp`.`referencia` AS `ref`,`bp`.`importe` AS `amount`,`bp`.`com_dispuesto` AS `balanceInterestDrawn`,`bp`.`com_no_dispuesto` AS `commissionAvailableBalances`,`bp`.`com_anual` AS `openingCommission`,`bp`.`apertura` AS `started`,`bp`.`cierre` AS `ended`,`bp`.`Id_Banco` AS `bankFk`,`bp`.`empresa_id` AS `companyFk`,`bp`.`supplierFk` AS `supplierFk`,`bp`.`description` AS `description`,`bp`.`hasGuarantee` AS `hasGuarantee`,`bp`.`dmsFk` AS `dmsFk`,`bp`.`notaryFk` AS `notaryFk`,`bp`.`currencyFk` AS `currencyFk`,`bp`.`amortizationTypeFk` AS `amortizationTypeFk`,`bp`.`periodicityTypeFk` AS `periodicityTypeFk`,`bp`.`insuranceExpired` AS `insuranceExpired` from `vn2008`.`Bancos_poliza` `bp` order by `bp`.`poliza_id` desc */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `businessCalendar`
--

/*!50001 DROP TABLE IF EXISTS `businessCalendar`*/;
/*!50001 DROP VIEW IF EXISTS `businessCalendar`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `businessCalendar` AS select `ce`.`id` AS `id`,`ce`.`business_id` AS `businessFk`,`ce`.`calendar_state_id` AS `absenceTypeFk`,`ce`.`date` AS `dated` from `postgresql`.`calendar_employee` `ce` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `buyer`
--

/*!50001 DROP TABLE IF EXISTS `buyer`*/;
/*!50001 DROP VIEW IF EXISTS `buyer`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `buyer` AS select distinct `u`.`id` AS `userFk`,`u`.`nickname` AS `nickname` from (`account`.`user` `u` join `vn`.`itemType` `it` on((`it`.`workerFk` = `u`.`id`))) where `u`.`active` order by `u`.`nickname` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `buyerSales`
--

/*!50001 DROP TABLE IF EXISTS `buyerSales`*/;
/*!50001 DROP VIEW IF EXISTS `buyerSales`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `buyerSales` AS select `v`.`importe` AS `importe`,`w`.`code` AS `comprador`,`t`.`year` AS `año`,`t`.`week` AS `semana` from (((`bs`.`ventas` `v` join `vn`.`time` `t` on((`t`.`dated` = `v`.`fecha`))) join `vn`.`itemType` `it` on((`it`.`id` = `v`.`tipo_id`))) join `vn`.`worker` `w` on((`w`.`id` = `it`.`workerFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `clientLost`
--

/*!50001 DROP TABLE IF EXISTS `clientLost`*/;
/*!50001 DROP VIEW IF EXISTS `clientLost`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `clientLost` AS select `c`.`id` AS `clientFk`,max(`t`.`shipped`) AS `lastShipped`,`pc`.`notBuyingMonths` AS `notBuyingMonths` from ((`client` `c` join `productionConfig` `pc`) left join `ticket` `t` on(((`c`.`id` = `t`.`clientFk`) and (`t`.`shipped` < (curdate() + interval -(`pc`.`rookieDays`) day))))) group by `c`.`id` having (isnull(`lastShipped`) or (`lastShipped` < (curdate() + interval -(`notBuyingMonths`) month))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `clientPhoneBook`
--

/*!50001 DROP TABLE IF EXISTS `clientPhoneBook`*/;
/*!50001 DROP VIEW IF EXISTS `clientPhoneBook`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `clientPhoneBook` AS select `c`.`id` AS `clientFk`,trim(`c`.`phone`) AS `phone` from `client` `c` where (`c`.`phone` and `c`.`isActive`) union select `c`.`id` AS `clientFk`,trim(`c`.`mobile`) AS `phone` from `client` `c` where (`c`.`mobile` and `c`.`isActive`) union select `a`.`clientFk` AS `clientFk`,trim(`a`.`phone`) AS `phone` from (`address` `a` join `client` `c` on((`c`.`id` = `a`.`clientFk`))) where (`a`.`phone` and `c`.`isActive`) union select `a`.`clientFk` AS `clientFk`,trim(`a`.`mobile`) AS `phone` from (`address` `a` join `client` `c` on((`c`.`id` = `a`.`clientFk`))) where (`a`.`mobile` and `c`.`isActive`) union select `cc`.`clientFk` AS `clientFk`,trim(`cc`.`phone`) AS `phone` from (`clientContact` `cc` left join `client` `c` on((`c`.`id` = `cc`.`clientFk`))) where (`c`.`phone` and `c`.`isActive`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `cmr_list`
--

/*!50001 DROP TABLE IF EXISTS `cmr_list`*/;
/*!50001 DROP VIEW IF EXISTS `cmr_list`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `cmr_list` AS select `cmr`.`id` AS `cmrFk`,`cmr`.`ticketFk` AS `ticketFk`,`cmr`.`truckPlate` AS `truckPlate`,`cmr`.`observations` AS `observations`,`cmr`.`senderInstruccions` AS `senderInstruccions`,`cmr`.`paymentInstruccions` AS `paymentInstruccions`,`cmr`.`specialAgreements` AS `specialAgreements`,`cmr`.`created` AS `created`,`cmr`.`packagesList` AS `packagesList`,`aTo`.`nickname` AS `clientName`,`aTo`.`postalCode` AS `clientPostalCode`,`aTo`.`street` AS `clientStreet`,`aTo`.`city` AS `clientCity`,`pTo`.`name` AS `clientProvince`,`cTo`.`country` AS `clientCountry`,`su`.`name` AS `companyName`,`su`.`street` AS `companyStreet`,`su`.`postCode` AS `companyPostCode`,`su`.`city` AS `companyCity`,`cSu`.`country` AS `companyCountry`,concat(`aFrom`.`street`,' ',`aFrom`.`postalCode`,' ',`aFrom`.`city`,' (',`cFrom`.`country`,')') AS `warehouseAddress`,`cmr`.`created` AS `shipped`,`aTo`.`nickname` AS `clientOficialName`,`cmr`.`supplierFk` AS `supplierFk`,`aSu`.`name` AS `carrierName`,`aSu`.`street` AS `carrierStreet`,`aSu`.`postCode` AS `carrierPostCode`,`aSu`.`city` AS `carrierCity`,`cAs`.`country` AS `carrierCountry`,ifnull(`aTo`.`phone`,`client`.`phone`) AS `phone`,ifnull(`aTo`.`mobile`,`client`.`mobile`) AS `mobile`,`aTo`.`id` AS `addressFk`,`c`.`stamp` AS `stamp`,`cmr`.`merchandiseDetail` AS `merchandiseDetail` from ((((((((((((`cmr` left join `address` `aTo` on((`aTo`.`id` = `cmr`.`addressToFk`))) left join `province` `pTo` on((`pTo`.`id` = `aTo`.`provinceFk`))) left join `country` `cTo` on((`cTo`.`id` = `pTo`.`countryFk`))) left join `client` on((`client`.`id` = `aTo`.`clientFk`))) left join `supplier` `su` on((`su`.`id` = `cmr`.`companyFk`))) left join `country` `cSu` on((`cSu`.`id` = `su`.`countryFk`))) left join `address` `aFrom` on((`aFrom`.`id` = `cmr`.`addressFromFk`))) left join `province` `pFrom` on((`pFrom`.`id` = `aFrom`.`provinceFk`))) left join `country` `cFrom` on((`cFrom`.`id` = `pFrom`.`countryFk`))) left join `supplier` `aSu` on((`aSu`.`id` = `cmr`.`supplierFk`))) left join `country` `cAs` on((`cAs`.`id` = `aSu`.`countryFk`))) join `company` `c` on((`c`.`id` = `cmr`.`companyFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `collectionSmartTag`
--

/*!50001 DROP TABLE IF EXISTS `collectionSmartTag`*/;
/*!50001 DROP VIEW IF EXISTS `collectionSmartTag`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `collectionSmartTag` AS select `st`.`code` AS `code`,`tc`.`ticketFk` AS `ticketFk`,`tc`.`level` AS `level`,`tc`.`wagon` AS `wagon`,`st`.`shelvingFk` AS `shelvingFk`,`tc`.`collectionFk` AS `collectionFk`,`am`.`name` AS `agencyFk`,`t`.`clientFk` AS `clientFk` from (((((`ticketCollection` `tc` join `smartTag` `st` on((`st`.`code` = (`tc`.`smartTagFk` collate utf8_general_ci)))) join `ticket` `t` on((`t`.`id` = `tc`.`ticketFk`))) join `collection` `c` on((`c`.`id` = `tc`.`collectionFk`))) join `worker` `w` on((`w`.`id` = `c`.`workerFk`))) join `agencyMode` `am` on((`am`.`id` = `t`.`agencyModeFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `collectionSmartTag2`
--

/*!50001 DROP TABLE IF EXISTS `collectionSmartTag2`*/;
/*!50001 DROP VIEW IF EXISTS `collectionSmartTag2`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `collectionSmartTag2` AS select `st`.`code` AS `code`,`tc`.`ticketFk` AS `ticketFk`,`tc`.`level` AS `level`,`tc`.`wagon` AS `wagon`,`st`.`shelvingFk` AS `shelvingFk`,`tc`.`collectionFk` AS `collectionFk`,`am`.`name` AS `agencyFk`,`t`.`clientFk` AS `clientFk`,`u`.`name` AS `worker`,`t`.`shipped` AS `shipped`,`t`.`landed` AS `landed` from ((((((`vn`.`ticketCollection` `tc` join `vn`.`smartTag` `st` on((`st`.`code` = (`tc`.`smartTagFk` collate utf8_general_ci)))) join `vn`.`ticket` `t` on((`t`.`id` = `tc`.`ticketFk`))) join `vn`.`collection` `c` on((`c`.`id` = `tc`.`collectionFk`))) join `vn`.`worker` `w` on((`w`.`id` = `c`.`workerFk`))) join `vn`.`agencyMode` `am` on((`am`.`id` = `t`.`agencyModeFk`))) join `account`.`user` `u` on((`u`.`id` = `w`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `defaulter`
--

/*!50001 DROP TABLE IF EXISTS `defaulter`*/;
/*!50001 DROP VIEW IF EXISTS `defaulter`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `defaulter` AS select `d`.`clientFk` AS `clientFk`,`d`.`created` AS `created`,`d`.`amount` AS `amount`,`d`.`defaulterSinced` AS `defaulterSinced`,`d`.`hasChanged` AS `hasChanged` from `bs`.`defaulter` `d` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `departmentTree`
--

/*!50001 DROP TABLE IF EXISTS `departmentTree`*/;
/*!50001 DROP VIEW IF EXISTS `departmentTree`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `departmentTree` AS select `node`.`id` AS `id`,concat(convert(repeat(repeat(' ',5),(count(`parent`.`id`) - 1)) using utf8),`node`.`name`) AS `dep` from (`department` `node` join `department` `parent`) where (`node`.`lft` between `parent`.`lft` and `parent`.`rgt`) group by `node`.`id` order by `node`.`lft` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ediGenus`
--

/*!50001 DROP TABLE IF EXISTS `ediGenus`*/;
/*!50001 DROP VIEW IF EXISTS `ediGenus`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ediGenus` AS select `g`.`genus_id` AS `id`,`g`.`latin_genus_name` AS `latinGenusName`,`g`.`entry_date` AS `entried`,`g`.`expiry_date` AS `dued`,`g`.`change_date_time` AS `modified` from `edi`.`genus` `g` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ediSpecie`
--

/*!50001 DROP TABLE IF EXISTS `ediSpecie`*/;
/*!50001 DROP VIEW IF EXISTS `ediSpecie`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ediSpecie` AS select `s`.`specie_id` AS `id`,`s`.`genus_id` AS `genusFk`,`s`.`latin_species_name` AS `latinSpeciesName`,`s`.`entry_date` AS `entried`,`s`.`expiry_date` AS `dued`,`s`.`change_date_time` AS `modified` from `edi`.`specie` `s` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ektSubAddress`
--

/*!50001 DROP TABLE IF EXISTS `ektSubAddress`*/;
/*!50001 DROP VIEW IF EXISTS `ektSubAddress`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ektSubAddress` AS select `eea`.`sub` AS `sub`,`a`.`clientFk` AS `clientFk`,`a`.`nickname` AS `nickname`,`eea`.`addressFk` AS `addressFk` from (`ektEntryAssign` `eea` join `address` `a` on((`a`.`id` = `eea`.`addressFk`))) group by `eea`.`sub` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `exchangeInsuranceEntry`
--

/*!50001 DROP TABLE IF EXISTS `exchangeInsuranceEntry`*/;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceEntry`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `exchangeInsuranceEntry` AS select max(`tr`.`landed`) AS `dated`,cast(sum(((`b`.`buyingValue` + `b`.`freightValue`) * `b`.`quantity`)) as decimal(10,2)) AS `Dolares`,cast((sum(((`b`.`buyingValue` + `b`.`freightValue`) * `b`.`quantity`)) / sum(((((100 + `e`.`commission`) / 100) * (`b`.`buyingValue` + `b`.`freightValue`)) * `b`.`quantity`))) as decimal(10,4)) AS `rate` from ((`entry` `e` join `buy` `b` on((`e`.`id` = `b`.`entryFk`))) join `travel` `tr` on((`tr`.`id` = `e`.`travelFk`))) where ((`tr`.`landed` between '2016-01-31' and curdate()) and (`e`.`commission` < 0) and (`e`.`currencyFk` = 2)) group by month(`tr`.`landed`),year(`tr`.`landed`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `exchangeInsuranceIn`
--

/*!50001 DROP TABLE IF EXISTS `exchangeInsuranceIn`*/;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceIn`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `exchangeInsuranceIn` AS select `exchangeInsuranceInPrevious`.`dated` AS `dated`,sum(`exchangeInsuranceInPrevious`.`amount`) AS `amount`,cast((sum((`exchangeInsuranceInPrevious`.`amount` * `exchangeInsuranceInPrevious`.`rate`)) / sum(`exchangeInsuranceInPrevious`.`amount`)) as decimal(10,4)) AS `rate` from `vn`.`exchangeInsuranceInPrevious` group by `exchangeInsuranceInPrevious`.`dated` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `exchangeInsuranceOut`
--

/*!50001 DROP TABLE IF EXISTS `exchangeInsuranceOut`*/;
/*!50001 DROP VIEW IF EXISTS `exchangeInsuranceOut`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `exchangeInsuranceOut` AS select `p`.`received` AS `received`,sum(`p`.`divisa`) AS `divisa`,(sum(`p`.`divisa`) / sum(`p`.`amount`)) AS `rate` from ((`payment` `p` join `bank` `b` on((`b`.`id` = `p`.`bankFk`))) join `accountingType` `at2` on((`at2`.`id` = `b`.`cash`))) where ((`p`.`currencyFk` = 2) and (`at2`.`code` = 'wireTransfer') and (`p`.`supplierFk` <> 2213)) group by `p`.`received` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `exchangeReportSourcePrevious`
--

/*!50001 DROP TABLE IF EXISTS `exchangeReportSourcePrevious`*/;
/*!50001 DROP VIEW IF EXISTS `exchangeReportSourcePrevious`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `exchangeReportSourcePrevious` AS select `exchangeInsuranceIn`.`dated` AS `dated`,`exchangeInsuranceIn`.`amount` AS `amountIn`,`exchangeInsuranceIn`.`rate` AS `rateIn`,0.00 AS `amountOut`,0.00 AS `rateOut`,0.00 AS `amountEntry`,0.00 AS `rateEntry` from `vn`.`exchangeInsuranceIn` union all select `exchangeInsuranceOut`.`received` AS `received`,0.00 AS `amountIn`,0.00 AS `ratedIn`,`exchangeInsuranceOut`.`divisa` AS `amountOut`,`exchangeInsuranceOut`.`rate` AS `ratedOut`,0.00 AS `amountEntry`,0.00 AS `rateEntry` from `vn`.`exchangeInsuranceOut` union all select `exchangeInsuranceEntry`.`dated` AS `dated`,0.00 AS `amountIn`,0.00 AS `ratedIn`,0.00 AS `amountOut`,0.00 AS `ratedOut`,`exchangeInsuranceEntry`.`Dolares` AS `amountEntry`,`exchangeInsuranceEntry`.`rate` AS `rateEntry` from `vn`.`exchangeInsuranceEntry` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionCommon`
--

/*!50001 DROP TABLE IF EXISTS `expeditionCommon`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionCommon`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionCommon` AS select `et`.`id` AS `truckFk`,`et`.`ETD` AS `etd`,ifnull(ucase(`et`.`description`),'SIN ESCANEAR') AS `description`,`es`.`palletFk` AS `palletFk`,`t`.`routeFk` AS `routeFk`,`es`.`id` AS `scanFk`,`e`.`id` AS `expeditionFk`,`r`.`expeditionTruckFk` AS `expeditionTruckFk`,`t`.`warehouseFk` AS `warehouseFk`,`e`.`created` AS `lastPacked`,`t`.`id` AS `ticketFk` from (((((`expeditionTruck` `et` left join `routesMonitor` `r` on((`et`.`id` = `r`.`expeditionTruckFk`))) left join `ticket` `t` on((`r`.`routeFk` = `t`.`routeFk`))) left join `expedition` `e` on((`t`.`id` = `e`.`ticketFk`))) left join `expeditionScan` `es` on((`e`.`id` = `es`.`expeditionFk`))) left join `expeditionPallet` `ep` on((`es`.`palletFk` = `ep`.`id`))) where (`et`.`ETD` >= curdate()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionPallet_Print`
--

/*!50001 DROP TABLE IF EXISTS `expeditionPallet_Print`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionPallet_Print`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionPallet_Print` AS select `et2`.`description` AS `truck`,`t`.`routeFk` AS `routeFk`,`r`.`description` AS `zone`,count(`es`.`id`) AS `eti`,`ep`.`id` AS `palletFk`,(`et`.`id` <=> `rm`.`expeditionTruckFk`) AS `isMatch`,`t`.`warehouseFk` AS `warehouseFk`,if((`r`.`created` > (curdate() + interval 1 day)),ucase(dayname(`r`.`created`)),NULL) AS `nombreDia` from (((((((`vn`.`expeditionTruck` `et` join `vn`.`expeditionPallet` `ep` on((`ep`.`truckFk` = `et`.`id`))) join `vn`.`expeditionScan` `es` on((`es`.`palletFk` = `ep`.`id`))) join `vn`.`expedition` `e` on((`e`.`id` = `es`.`expeditionFk`))) join `vn`.`ticket` `t` on((`t`.`id` = `e`.`ticketFk`))) join `vn`.`route` `r` on((`r`.`id` = `t`.`routeFk`))) left join `vn2008`.`Rutas_monitor` `rm` on((`rm`.`Id_Ruta` = `r`.`id`))) left join `vn`.`expeditionTruck` `et2` on((`et2`.`id` = `rm`.`expeditionTruckFk`))) where (`ep`.`isPrint` = 0) group by `ep`.`id`,`t`.`routeFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionRoute_Monitor`
--

/*!50001 DROP TABLE IF EXISTS `expeditionRoute_Monitor`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionRoute_Monitor`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionRoute_Monitor` AS select `r`.`id` AS `routeFk`,count(distinct if(isnull(`e`.`id`),`t`.`id`,NULL)) AS `tickets`,count(distinct `e`.`id`) AS `expeditions`,count(distinct `es`.`id`) AS `scanned`,max(`e`.`created`) AS `lastPacked`,`r`.`created` AS `created` from ((((((`route` `r` left join `routesMonitor` `rm` on((`r`.`id` = `rm`.`routeFk`))) left join `expeditionTruck` `et` on((`et`.`id` = `rm`.`expeditionTruckFk`))) join `ticket` `t` on((`t`.`routeFk` = `r`.`id`))) left join `expedition` `e` on((`e`.`ticketFk` = `t`.`id`))) left join `expeditionScan` `es` on((`es`.`expeditionFk` = `e`.`id`))) left join `stowaway` `st` on((`st`.`id` = `t`.`id`))) where ((`r`.`created` >= `util`.`yesterday`()) and isnull(`st`.`id`)) group by `r`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionRoute_freeTickets`
--

/*!50001 DROP TABLE IF EXISTS `expeditionRoute_freeTickets`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionRoute_freeTickets`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionRoute_freeTickets` AS select `t`.`routeFk` AS `routeFk`,`tss`.`ticket` AS `ticket`,`s`.`name` AS `code`,`w`.`name` AS `almacen`,`tss`.`updated` AS `updated`,`p`.`code` AS `parkingCode` from ((((((`vn`.`ticketState` `tss` join `vn`.`ticket` `t` on((`t`.`id` = `tss`.`ticket`))) join `vn`.`warehouse` `w` on((`w`.`id` = `t`.`warehouseFk`))) join `vn`.`state` `s` on((`s`.`id` = `tss`.`state`))) left join `vn`.`stowaway` `st` on((`st`.`id` = `t`.`id`))) left join `vn`.`ticketParking` `tp` on((`tp`.`ticketFk` = `t`.`id`))) left join `vn`.`parking` `p` on((`p`.`id` = `tp`.`parkingFk`))) where ((ifnull(`t`.`packages`,0) = 0) and isnull(`st`.`id`)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionScan_Monitor`
--

/*!50001 DROP TABLE IF EXISTS `expeditionScan_Monitor`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionScan_Monitor`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionScan_Monitor` AS select `et`.`id` AS `truckFk`,`et`.`ETD` AS `ETD`,`et`.`description` AS `description`,`ep`.`id` AS `palletFk`,`ep`.`position` AS `position`,`ep`.`built` AS `built`,`es`.`id` AS `scanFk`,`es`.`expeditionFk` AS `expeditionFk`,`es`.`scanned` AS `scanned` from ((`expeditionTruck` `et` left join `expeditionPallet` `ep` on((`ep`.`truckFk` = `et`.`id`))) left join `expeditionScan` `es` on((`es`.`palletFk` = `ep`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionSticker`
--

/*!50001 DROP TABLE IF EXISTS `expeditionSticker`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionSticker`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionSticker` AS select `e`.`id` AS `expeditionFk`,`e`.`ticketFk` AS `ticketFk`,`t`.`addressFk` AS `addressFk`,`t`.`clientFk` AS `clientFk`,`a`.`street` AS `street`,`a`.`postalCode` AS `postalCode`,`a`.`city` AS `city`,`a`.`nickname` AS `nickname`,concat('R(',convert(right(`t`.`routeFk`,3) using utf8mb4),')') AS `routeFk`,`rm`.`beachFk` AS `beachFk`,if(`t`.`routeFk`,ifnull(`et`.`description`,replace(`am`.`name`,'ZONA ','Z')),`z`.`name`) AS `zona`,`p`.`name` AS `province`,ifnull(`c`.`mobile`,ifnull(`a`.`mobile`,ifnull(`c`.`phone`,`a`.`phone`))) AS `phone`,`w`.`code` AS `workerCode` from (((((((((((`expedition` `e` join `ticket` `t` on((`t`.`id` = `e`.`ticketFk`))) join `address` `a` on((`a`.`id` = `t`.`addressFk`))) join `province` `p` on((`p`.`id` = `a`.`provinceFk`))) left join `routesMonitor` `rm` on((`rm`.`routeFk` = `t`.`routeFk`))) left join `expeditionTruck` `et` on((`et`.`id` = `rm`.`expeditionTruckFk`))) left join `beach` `b` on((`b`.`code` = `rm`.`beachFk`))) left join `zone` `z` on((`z`.`id` = `t`.`zoneFk`))) left join `route` `r` on((`r`.`id` = `t`.`routeFk`))) left join `agencyMode` `am` on((`am`.`id` = `r`.`agencyModeFk`))) join `client` `c` on((`c`.`id` = `a`.`clientFk`))) join `worker` `w` on((`w`.`id` = `e`.`workerFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionTicket_NoBoxes`
--

/*!50001 DROP TABLE IF EXISTS `expeditionTicket_NoBoxes`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionTicket_NoBoxes`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionTicket_NoBoxes` AS select `t`.`id` AS `ticketFk`,`t`.`warehouseFk` AS `warehouseFk`,`t`.`routeFk` AS `routeFk`,`et`.`description` AS `description` from (((`ticket` `t` left join `expedition` `e` on((`e`.`ticketFk` = `t`.`id`))) join `routesMonitor` `rm` on((`rm`.`routeFk` = `t`.`routeFk`))) join `expeditionTruck` `et` on((`et`.`id` = `rm`.`expeditionTruckFk`))) where (isnull(`e`.`id`) and (`et`.`ETD` > curdate())) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionTimeExpended`
--

/*!50001 DROP TABLE IF EXISTS `expeditionTimeExpended`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionTimeExpended`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionTimeExpended` AS select `e`.`ticketFk` AS `ticketFk`,min(`e`.`created`) AS `started`,max(`e`.`created`) AS `finished`,max(`e`.`counter`) AS `cajas`,`w`.`code` AS `code`,`t`.`warehouseFk` AS `warehouseFk` from ((`expedition` `e` join `worker` `w` on((`w`.`id` = `e`.`workerFk`))) join `ticket` `t` on((`t`.`id` = `e`.`ticketFk`))) where (`e`.`created` > curdate()) group by `e`.`ticketFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionTruck_Control`
--

/*!50001 DROP TABLE IF EXISTS `expeditionTruck_Control`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionTruck_Control` AS select `e`.`truckFk` AS `id`,`e`.`etd` AS `ETD`,`e`.`description` AS `description`,count(distinct if(isnull(`e`.`expeditionFk`),`e`.`ticketFk`,NULL)) AS `ticketsSinBultos`,count(distinct `e`.`palletFk`) AS `pallets`,count(distinct `e`.`routeFk`) AS `routes`,count(distinct `e`.`scanFk`) AS `scans`,count(distinct `e`.`expeditionFk`) AS `expeditions`,sum((`e`.`truckFk` <> `e`.`expeditionTruckFk`)) AS `fallos`,max(`e`.`lastPacked`) AS `lastPacked` from `expeditionCommon` `e` group by `e`.`truckFk` order by `fallos` desc,`e`.`etd` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionTruck_Control_Detail`
--

/*!50001 DROP TABLE IF EXISTS `expeditionTruck_Control_Detail`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control_Detail`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionTruck_Control_Detail` AS select `e`.`truckFk` AS `id`,`e`.`etd` AS `ETD`,`e`.`description` AS `destino`,`e`.`palletFk` AS `pallet`,count(distinct `e`.`routeFk`) AS `routes`,count(distinct `e`.`scanFk`) AS `scans`,count(distinct `e`.`expeditionTruckFk`) AS `destinos`,sum((`e`.`truckFk` <> `e`.`expeditionTruckFk`)) AS `fallos`,max(`e`.`lastPacked`) AS `lastPacked` from `expeditionCommon` `e` group by `e`.`truckFk`,`e`.`palletFk` order by `fallos` desc,`e`.`etd`,`e`.`truckFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `expeditionTruck_Control_Detail_Pallet`
--

/*!50001 DROP TABLE IF EXISTS `expeditionTruck_Control_Detail_Pallet`*/;
/*!50001 DROP VIEW IF EXISTS `expeditionTruck_Control_Detail_Pallet`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `expeditionTruck_Control_Detail_Pallet` AS select `e`.`truckFk` AS `id`,`e`.`etd` AS `ETD`,`e`.`description` AS `destino`,`e`.`palletFk` AS `pallet`,`e`.`routeFk` AS `route`,count(distinct `e`.`scanFk`) AS `scans`,`et`.`description` AS `destinos`,sum((`e`.`truckFk` <> `e`.`expeditionTruckFk`)) AS `fallos`,`e`.`expeditionTruckFk` AS `expeditionTruckFk`,max(`e`.`lastPacked`) AS `lastPacked` from (`expeditionCommon` `e` left join `expeditionTruck` `et` on((`et`.`id` = `e`.`expeditionTruckFk`))) group by `e`.`truckFk`,`e`.`palletFk`,`e`.`routeFk` order by `fallos` desc,`e`.`palletFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `firstTicketShipped`
--

/*!50001 DROP TABLE IF EXISTS `firstTicketShipped`*/;
/*!50001 DROP VIEW IF EXISTS `firstTicketShipped`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `firstTicketShipped` AS select min(`ticket`.`shipped`) AS `shipped`,`ticket`.`clientFk` AS `clientFk` from `ticket` where (`ticket`.`shipped` > '2001-01-01') group by `ticket`.`clientFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `floraHollandBuyedItems`
--

/*!50001 DROP TABLE IF EXISTS `floraHollandBuyedItems`*/;
/*!50001 DROP VIEW IF EXISTS `floraHollandBuyedItems`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `floraHollandBuyedItems` AS select `b`.`itemFk` AS `itemFk`,`i`.`longName` AS `longName`,`b`.`quantity` AS `quantity`,`b`.`buyingValue` AS `buyingValue`,`tr`.`landed` AS `landed`,`e`.`companyFk` AS `companyFk` from (((((`buy` `b` join `item` `i` on((`b`.`itemFk` = `i`.`id`))) join `itemType` `it` on((`it`.`id` = `i`.`typeFk`))) join `itemCategory` `ic` on((`ic`.`id` = `it`.`categoryFk`))) join `entry` `e` on((`e`.`id` = `b`.`entryFk`))) join `travel` `tr` on(((`tr`.`id` = `e`.`travelFk`) and (`ic`.`id` not in (8,6)) and (`b`.`buyingValue` <> 0) and (`b`.`quantity` <> 0) and (`e`.`supplierFk` in (1664,1665,1666,1465,1433))))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `inkL10n`
--

/*!50001 DROP TABLE IF EXISTS `inkL10n`*/;
/*!50001 DROP VIEW IF EXISTS `inkL10n`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `inkL10n` AS select `k`.`id` AS `id`,ifnull(`i`.`name`,`k`.`name`) AS `name` from (`ink` `k` left join `inkI18n` `i` on(((`i`.`inkFk` = `k`.`id`) and (`i`.`lang` = `util`.`lang`())))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `invoiceCorrectionDataSource`
--

/*!50001 DROP TABLE IF EXISTS `invoiceCorrectionDataSource`*/;
/*!50001 DROP VIEW IF EXISTS `invoiceCorrectionDataSource`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `invoiceCorrectionDataSource` AS select `s`.`itemFk` AS `itemFk`,`s`.`quantity` AS `quantity`,`s`.`concept` AS `concept`,`s`.`price` AS `price`,`s`.`discount` AS `discount`,`t`.`refFk` AS `refFk`,`s`.`id` AS `saleFk`,`t`.`shipped` AS `shipped` from (`sale` `s` join `ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) where (`t`.`shipped` > (curdate() + interval -(3) year)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemBotanicalWithGenus`
--

/*!50001 DROP TABLE IF EXISTS `itemBotanicalWithGenus`*/;
/*!50001 DROP VIEW IF EXISTS `itemBotanicalWithGenus`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemBotanicalWithGenus` AS select `ib`.`itemFk` AS `itemFk`,concat(`g`.`name`,' ',ifnull(`s`.`name`,'')) AS `ediBotanic` from ((`itemBotanical` `ib` left join `specie` `s` on((`s`.`id` = `ib`.`specieFk`))) left join `genus` `g` on((`g`.`id` = `ib`.`genusFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemCategoryL10n`
--

/*!50001 DROP TABLE IF EXISTS `itemCategoryL10n`*/;
/*!50001 DROP VIEW IF EXISTS `itemCategoryL10n`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemCategoryL10n` AS select `c`.`id` AS `id`,ifnull(`i`.`name`,`c`.`name`) AS `name` from (`itemCategory` `c` left join `itemCategoryI18n` `i` on(((`i`.`categoryFk` = `c`.`id`) and (`i`.`lang` = `util`.`lang`())))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemColor`
--

/*!50001 DROP TABLE IF EXISTS `itemColor`*/;
/*!50001 DROP VIEW IF EXISTS `itemColor`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemColor` AS select `it`.`itemFk` AS `itemFk`,`it`.`value` AS `color` from (`itemTag` `it` join `tag` `t` on((`t`.`id` = `it`.`tagFk`))) where (`t`.`code` = 'COLOR') */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemEntryIn`
--

/*!50001 DROP TABLE IF EXISTS `itemEntryIn`*/;
/*!50001 DROP VIEW IF EXISTS `itemEntryIn`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemEntryIn` AS select `t`.`warehouseInFk` AS `warehouseInFk`,`t`.`landed` AS `landed`,`b`.`itemFk` AS `itemFk`,`b`.`quantity` AS `quantity`,`t`.`isReceived` AS `isReceived`,`e`.`isRaid` AS `isVirtualStock`,`e`.`id` AS `entryFk` from ((`buy` `b` join `entry` `e` on((`b`.`entryFk` = `e`.`id`))) join `travel` `t` on((`e`.`travelFk` = `t`.`id`))) where ((`e`.`isExcludedFromAvailable` = 0) and (`b`.`quantity` <> 0)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemEntryOut`
--

/*!50001 DROP TABLE IF EXISTS `itemEntryOut`*/;
/*!50001 DROP VIEW IF EXISTS `itemEntryOut`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemEntryOut` AS select `t`.`warehouseOutFk` AS `warehouseOutFk`,`t`.`shipped` AS `shipped`,`b`.`itemFk` AS `itemFk`,-(`b`.`quantity`) AS `quantity`,`t`.`isDelivered` AS `isDelivered`,`e`.`id` AS `entryFk` from ((`buy` `b` join `entry` `e` on((`b`.`entryFk` = `e`.`id`))) join `travel` `t` on((`e`.`travelFk` = `t`.`id`))) where ((`e`.`isExcludedFromAvailable` = 0) and (`e`.`isRaid` = 0) and (`b`.`quantity` <> 0)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemInk`
--

/*!50001 DROP TABLE IF EXISTS `itemInk`*/;
/*!50001 DROP VIEW IF EXISTS `itemInk`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemInk` AS select `i`.`longName` AS `longName`,`i`.`inkFk` AS `inkFk`,`ink`.`name` AS `color` from (`item` `i` join `ink` on((`ink`.`id` = `i`.`inkFk`))) where `ink`.`isRealColor` group by `i`.`longName` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemPlacementSupplyList`
--

/*!50001 DROP TABLE IF EXISTS `itemPlacementSupplyList`*/;
/*!50001 DROP VIEW IF EXISTS `itemPlacementSupplyList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemPlacementSupplyList` AS select `ips`.`id` AS `id`,`ips`.`itemFk` AS `itemFk`,`ips`.`quantity` AS `quantity`,`ips`.`priority` AS `priority`,ifnull(`isps`.`created`,`ips`.`created`) AS `created`,`ips`.`userFk` AS `userFk`,`ips`.`repoUserFk` AS `repoUserFk`,(`ips`.`quantity` - sum(ifnull(`isps`.`quantity`,0))) AS `saldo`,concat(`i`.`longName`,' ',`i`.`size`) AS `longName`,`i`.`subName` AS `subName`,`i`.`size` AS `size`,`w`.`code` AS `workerCode`,`rw`.`code` AS `repoCode`,`ips`.`sectorFk` AS `sectorFk` from ((((`itemPlacementSupply` `ips` join `item` `i` on((`i`.`id` = `ips`.`itemFk`))) left join `worker` `w` on((`w`.`userFk` = `ips`.`userFk`))) left join `worker` `rw` on((`rw`.`userFk` = `ips`.`repoUserFk`))) left join `itemShelvingPlacementSupply` `isps` on((`isps`.`itemPlacementSupplyFk` = `ips`.`id`))) where (`ips`.`created` >= curdate()) group by `ips`.`priority`,`ips`.`id`,`ips`.`sectorFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemProductor`
--

/*!50001 DROP TABLE IF EXISTS `itemProductor`*/;
/*!50001 DROP VIEW IF EXISTS `itemProductor`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemProductor` AS select `it`.`itemFk` AS `itemFk`,`it`.`value` AS `productor` from (`itemTag` `it` join `tag` `t` on((`t`.`id` = `it`.`tagFk`))) where (`t`.`code` = 'PRODUCER') */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemSearch`
--

/*!50001 DROP TABLE IF EXISTS `itemSearch`*/;
/*!50001 DROP VIEW IF EXISTS `itemSearch`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemSearch` AS select `s`.`itemFk` AS `itemFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`t`.`nickname` AS `nickname`,`t`.`shipped` AS `shipped` from ((`sale` `s` join `ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `warehouse` `w` on((`w`.`id` = `t`.`warehouseFk`))) where ((`t`.`shipped` between `util`.`yesterday`() and `util`.`tomorrow`()) and (`w`.`name` in ('VNH','Floramondo'))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingAvailable`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingAvailable`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingAvailable`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingAvailable` AS select `s`.`id` AS `saleFk`,`tst`.`updated` AS `Modificado`,`s`.`ticketFk` AS `ticketFk`,0 AS `isPicked`,`s`.`itemFk` AS `itemFk`,`s`.`quantity` AS `quantity`,`s`.`concept` AS `concept`,`i`.`size` AS `size`,`st`.`name` AS `Estado`,`st`.`sectorProdPriority` AS `sectorProdPriority`,`stock`.`visible` AS `available`,`stock`.`sectorFk` AS `sectorFk`,`stock`.`shelvingFk` AS `matricula`,`stock`.`parkingFk` AS `parking`,`stock`.`itemShelvingFk` AS `itemShelving`,`am`.`name` AS `Agency`,`t`.`shipped` AS `shipped`,`stock`.`grouping` AS `grouping`,`stock`.`packing` AS `packing`,`z`.`hour` AS `hour`,`st`.`isPreviousPreparable` AS `isPreviousPreparable`,`sv`.`physicalVolume` AS `physicalVolume`,`t`.`warehouseFk` AS `warehouseFk` from (((((((((`vn`.`sale` `s` join `vn`.`ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `vn`.`agencyMode` `am` on((`am`.`id` = `t`.`agencyModeFk`))) join `vn`.`ticketStateToday` `tst` on((`tst`.`ticket` = `t`.`id`))) join `vn`.`state` `st` on((`st`.`id` = `tst`.`state`))) join `vn`.`item` `i` on((`i`.`id` = `s`.`itemFk`))) join `vn`.`itemShelvingStock` `stock` on((`stock`.`itemFk` = `i`.`id`))) left join `vn`.`saleTracking` `stk` on((`stk`.`saleFk` = `s`.`id`))) left join `vn`.`zone` `z` on((`z`.`id` = `t`.`zoneFk`))) left join `vn`.`saleVolume` `sv` on((`sv`.`saleFk` = `s`.`id`))) where ((`t`.`shipped` between `util`.`yesterday`() and `util`.`dayend`(curdate())) and isnull(`stk`.`id`) and (`stock`.`visible` > 0) and isnull(`stk`.`saleFk`) and `st`.`isPreviousPreparable`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingList`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingList`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingList` AS select `ish`.`shelvingFk` AS `shelvingFk`,`ish`.`visible` AS `visible`,`ish`.`created` AS `created`,`pk`.`code` AS `parking`,`ish`.`itemFk` AS `itemFk`,`i`.`longName` AS `longName`,`i`.`size` AS `size`,`i`.`subName` AS `subName`,`sh`.`parked` AS `parked`,`pk`.`sectorFk` AS `sectorFk` from (((`itemShelving` `ish` join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) join `item` `i` on((`i`.`id` = `ish`.`itemFk`))) left join `parking` `pk` on((`pk`.`id` = `sh`.`parkingFk`))) order by `ish`.`created` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingPlacementSupplyStock`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingPlacementSupplyStock`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingPlacementSupplyStock`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingPlacementSupplyStock` AS select `ish`.`id` AS `itemShelvingFk`,`ish`.`itemFk` AS `itemFk`,`ish`.`packing` AS `packing`,`ish`.`visible` AS `stock`,`i`.`longName` AS `longName`,`i`.`size` AS `size`,`i`.`subName` AS `subName`,`sh`.`code` AS `shelving`,`p`.`code` AS `parking`,`ish`.`created` AS `created`,ifnull(`sh`.`priority`,1) AS `priority`,`p`.`id` AS `parkingFk`,`p`.`sectorFk` AS `sectorFk` from (((`itemShelving` `ish` join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) left join `parking` `p` on((`p`.`id` = `sh`.`parkingFk`))) join `item` `i` on((`i`.`id` = `ish`.`itemFk`))) group by `ish`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingSaleSum`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingSaleSum`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingSaleSum`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingSaleSum` AS select `iss`.`id` AS `id`,`iss`.`itemShelvingFk` AS `itemShelvingFk`,`iss`.`saleFk` AS `saleFk`,sum(`iss`.`quantity`) AS `quantity`,`iss`.`created` AS `created`,`p`.`sectorFk` AS `sectorFk` from (((`itemShelvingSale` `iss` join `itemShelving` `ish` on((`ish`.`id` = `iss`.`itemShelvingFk`))) join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) join `parking` `p` on((`p`.`id` = `sh`.`parkingFk`))) group by `iss`.`saleFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingStock`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingStock`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStock`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingStock` AS select `ish`.`itemFk` AS `itemFk`,sum(`ish`.`visible`) AS `visible`,min(`ish`.`packing`) AS `packing`,min(`ish`.`grouping`) AS `grouping`,`s`.`description` AS `sector`,sum(`ish`.`visible`) AS `visibleOriginal`,0 AS `removed`,`p`.`sectorFk` AS `sectorFk`,`s`.`warehouseFk` AS `warehouseFk`,`ish`.`shelvingFk` AS `shelvingFk`,`p`.`code` AS `parkingCode`,`sh`.`parkingFk` AS `parkingFk`,`ish`.`id` AS `itemShelvingFk`,`ish`.`created` AS `created`,`s`.`isPreviousPrepared` AS `isPreviousPrepared` from (((`itemShelving` `ish` left join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) left join `parking` `p` on((`p`.`id` = `sh`.`parkingFk`))) left join `sector` `s` on((`s`.`id` = `p`.`sectorFk`))) where ((`ish`.`visible` <> 0) and `p`.`sectorFk`) group by `ish`.`itemFk`,`p`.`sectorFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingStockFull`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingStockFull`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStockFull`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingStockFull` AS select `ish`.`itemFk` AS `itemFk`,`ish`.`visible` AS `quantity`,`ish`.`packing` AS `packing`,`ish`.`grouping` AS `grouping`,`s`.`description` AS `sector`,`issr`.`removed` AS `removed`,`p`.`sectorFk` AS `sectorFk`,`s`.`warehouseFk` AS `warehouseFk`,`ish`.`shelvingFk` AS `shelvingFk`,`p`.`code` AS `parkingCode`,`sh`.`parkingFk` AS `parkingFk`,`ish`.`id` AS `itemShelvingFk`,`ish`.`created` AS `created` from ((((`itemShelving` `ish` join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) join `parking` `p` on((`p`.`id` = `sh`.`parkingFk`))) join `sector` `s` on((`s`.`id` = `p`.`sectorFk`))) left join `itemShelvingStockRemoved` `issr` on((`issr`.`itemShelvingFk` = `ish`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingStockRemoved`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingStockRemoved`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStockRemoved`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingStockRemoved` AS select `ish`.`id` AS `itemShelvingFk`,`ish`.`itemFk` AS `itemFk`,0 AS `removed` from ((`itemShelving` `ish` left join `itemShelvingSale` `iss` on((`iss`.`itemShelvingFk` = `ish`.`id`))) left join `itemShelvingPlacementSupply` `isps` on((`isps`.`itemShelvingFk` = `ish`.`id`))) group by `ish`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemShelvingStock_byWarehouse`
--

/*!50001 DROP TABLE IF EXISTS `itemShelvingStock_byWarehouse`*/;
/*!50001 DROP VIEW IF EXISTS `itemShelvingStock_byWarehouse`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemShelvingStock_byWarehouse` AS select `ish`.`itemFk` AS `itemFk`,sum(`ish`.`visible`) AS `visible`,`s`.`warehouseFk` AS `warehouseFk` from (((`itemShelving` `ish` join `shelving` `sh` on((`sh`.`code` = `ish`.`shelvingFk`))) join `parking` `p` on((`p`.`id` = `sh`.`parkingFk`))) join `sector` `s` on((`s`.`id` = `p`.`sectorFk`))) group by `ish`.`itemFk`,`s`.`warehouseFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemTagged`
--

/*!50001 DROP TABLE IF EXISTS `itemTagged`*/;
/*!50001 DROP VIEW IF EXISTS `itemTagged`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemTagged` AS select distinct `itemTag`.`itemFk` AS `itemFk` from `itemTag` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemTicketOut`
--

/*!50001 DROP TABLE IF EXISTS `itemTicketOut`*/;
/*!50001 DROP VIEW IF EXISTS `itemTicketOut`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemTicketOut` AS select `t`.`warehouseFk` AS `warehouseFk`,`t`.`shipped` AS `shipped`,`s`.`itemFk` AS `itemFk`,-(`s`.`quantity`) AS `quantity`,`s`.`isPicked` AS `isPicked`,`s`.`reserved` AS `reserved`,`t`.`refFk` AS `refFk`,`s`.`id` AS `saleFk`,`s`.`ticketFk` AS `ticketFk` from (`sale` `s` join `ticket` `t` on((`s`.`ticketFk` = `t`.`id`))) where (`s`.`quantity` <> 0) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `itemTypeL10n`
--

/*!50001 DROP TABLE IF EXISTS `itemTypeL10n`*/;
/*!50001 DROP VIEW IF EXISTS `itemTypeL10n`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `itemTypeL10n` AS select `t`.`id` AS `id`,ifnull(`i`.`name`,`t`.`name`) AS `name` from (`itemType` `t` left join `itemTypeI18n` `i` on(((`i`.`typeFk` = `t`.`id`) and (`i`.`lang` = `util`.`LANG`())))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `item_Free_Id`
--

/*!50001 DROP TABLE IF EXISTS `item_Free_Id`*/;
/*!50001 DROP VIEW IF EXISTS `item_Free_Id`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `item_Free_Id` AS select (`i1`.`id` + 1) AS `newId` from (`item` `i1` left join `item` `i2` on(((`i1`.`id` + 1) = `i2`.`id`))) where (isnull(`i2`.`id`) and (`i1`.`id` > 400000)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `labelInfo`
--

/*!50001 DROP TABLE IF EXISTS `labelInfo`*/;
/*!50001 DROP VIEW IF EXISTS `labelInfo`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `labelInfo` AS select `i`.`id` AS `itemId`,`i`.`name` AS `itemName`,`b`.`stickers` AS `stickers`,`b`.`printedStickers` AS `life`,`i`.`inkFk` AS `colorCode`,`i`.`stems` AS `stems`,`i`.`category` AS `category`,`i`.`subName` AS `productor`,`b`.`packing` AS `packing`,`clb`.`warehouse_id` AS `warehouse_id`,`i`.`size` AS `size`,`b`.`isPickedOff` AS `isPickedOff`,`e`.`evaNotes` AS `notes`,`w`.`name` AS `wh_in`,`e`.`id` AS `entryId`,`b`.`id` AS `buyId` from (((((`vn`.`buy` `b` join `vn`.`item` `i` on((`i`.`id` = `b`.`itemFk`))) join `cache`.`last_buy` `clb` on((`clb`.`item_id` = `i`.`id`))) join `vn`.`entry` `e` on((`e`.`id` = `b`.`entryFk`))) left join `vn`.`travel` `tr` on((`tr`.`id` = `e`.`travelFk`))) join `vn`.`warehouse` `w` on((`w`.`id` = `tr`.`warehouseInFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `lastHourProduction`
--

/*!50001 DROP TABLE IF EXISTS `lastHourProduction`*/;
/*!50001 DROP VIEW IF EXISTS `lastHourProduction`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `lastHourProduction` AS select `t`.`warehouseFk` AS `warehouseFk`,cast(sum((ifnull(`p`.`volume`,((`p`.`width` * `p`.`height`) * `p`.`depth`)) / 1000000)) as decimal(5,1)) AS `m3` from (((`warehouse` `w` join `ticket` `t` on((`t`.`warehouseFk` = `w`.`id`))) left join `expedition` `e` on((`t`.`id` = `e`.`ticketFk`))) left join `packaging` `p` on((`p`.`id` = `e`.`packagingFk`))) where (`e`.`created` between (now() - interval 1 hour) and now()) group by `t`.`warehouseFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `lastPurchases`
--

/*!50001 DROP TABLE IF EXISTS `lastPurchases`*/;
/*!50001 DROP VIEW IF EXISTS `lastPurchases`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `lastPurchases` AS select `tr`.`landed` AS `landed`,`w`.`id` AS `warehouseFk`,`w`.`name` AS `warehouse`,`i`.`longName` AS `longName`,`i`.`subName` AS `subName`,`e`.`id` AS `entryFk`,`b`.`stickers` AS `stickers`,`b`.`packing` AS `packing`,`e`.`ref` AS `ref`,`b`.`itemFk` AS `itemFk`,`ek`.`pro` AS `pro`,`ek`.`ref` AS `ektRef`,`ek`.`agj` AS `agj` from (((((`vn`.`buy` `b` join `vn`.`entry` `e` on((`e`.`id` = `b`.`entryFk`))) join `vn`.`item` `i` on((`i`.`id` = `b`.`itemFk`))) join `vn`.`travel` `tr` on((`tr`.`id` = `e`.`travelFk`))) join `vn`.`warehouse` `w` on((`w`.`id` = `tr`.`warehouseInFk`))) left join `edi`.`ekt` `ek` on((`ek`.`id` = `b`.`ektFk`))) where ((`tr`.`landed` between `util`.`yesterday`() and `util`.`tomorrow`()) and (`e`.`isRaid` = 0) and (`b`.`stickers` > 0)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `lastTopClaims`
--

/*!50001 DROP TABLE IF EXISTS `lastTopClaims`*/;
/*!50001 DROP VIEW IF EXISTS `lastTopClaims`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `lastTopClaims` AS select `s`.`itemFk` AS `itemFk`,`i`.`longName` AS `itemName`,`it`.`name` AS `itemTypeName`,count(0) AS `claimsNumber`,round(sum(((((`cb`.`quantity` * `s`.`price`) * (1 - ((`c`.`responsibility` - 1) / 4))) * (100 - `s`.`discount`)) / 100)),2) AS `claimedAmount`,round(sum((((`cb`.`quantity` * `s`.`price`) * (100 - `s`.`discount`)) / 100)),2) AS `totalAmount` from ((((`claim` `c` join `claimBeginning` `cb` on((`cb`.`claimFk` = `c`.`id`))) join `sale` `s` on((`s`.`id` = `cb`.`saleFk`))) join `item` `i` on((`i`.`id` = `s`.`itemFk`))) join `itemType` `it` on((`it`.`id` = `i`.`typeFk`))) where (`c`.`created` >= (curdate() + interval -(1) week)) group by `s`.`itemFk` having (((`claimedAmount` > 100) and (`claimsNumber` > 2)) or (`claimsNumber` > 4)) order by `claimsNumber` desc */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `mistake`
--

/*!50001 DROP TABLE IF EXISTS `mistake`*/;
/*!50001 DROP VIEW IF EXISTS `mistake`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `mistake` AS select `wr`.`code` AS `revisador`,`s`.`concept` AS `concept`,`w`.`code` AS `sacador`,`w`.`firstName` AS `firstName`,`w`.`lastName` AS `lastName`,`mt`.`description` AS `description`,cast(`iss`.`created` as date) AS `created`,`w`.`id` AS `workerFk` from (((((`saleMistake` `sm` join `mistakeType` `mt` on((`mt`.`id` = `sm`.`typeFk`))) join `worker` `wr` on((`wr`.`id` = `sm`.`userFk`))) join `sale` `s` on((`s`.`id` = `sm`.`saleFk`))) join `itemShelvingSale` `iss` on((`iss`.`saleFk` = `sm`.`saleFk`))) join `worker` `w` on((`w`.`id` = `iss`.`userFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `mistakeRatio`
--

/*!50001 DROP TABLE IF EXISTS `mistakeRatio`*/;
/*!50001 DROP VIEW IF EXISTS `mistakeRatio`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `mistakeRatio` AS select `wr`.`code` AS `revisador`,`w`.`code` AS `sacador`,`w`.`firstName` AS `firstName`,`w`.`lastName` AS `lastName`,`mt`.`description` AS `description`,cast(`iss`.`created` as date) AS `created`,`w`.`id` AS `workerFk`,`sm`.`saleFk` AS `saleFk` from ((((`itemShelvingSale` `iss` join `worker` `w` on((`w`.`id` = `iss`.`userFk`))) left join `saleMistake` `sm` on((`iss`.`saleFk` = `sm`.`saleFk`))) left join `mistakeType` `mt` on((`mt`.`id` = `sm`.`typeFk`))) left join `worker` `wr` on((`wr`.`id` = `sm`.`userFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `newBornSales`
--

/*!50001 DROP TABLE IF EXISTS `newBornSales`*/;
/*!50001 DROP VIEW IF EXISTS `newBornSales`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `newBornSales` AS select `v`.`importe` AS `amount`,`v`.`Id_Cliente` AS `clientFk`,`c`.`salesPersonFk` AS `userFk`,`v`.`fecha` AS `dated`,`cn`.`firstShipped` AS `firstShipped` from ((((`bs`.`clientNewBorn` `cn` join `bs`.`ventas` `v` on((((`cn`.`firstShipped` + interval 1 year) > `v`.`fecha`) and (`v`.`Id_Cliente` = `cn`.`clientFk`)))) join `vn`.`client` `c` on((`c`.`id` = `v`.`Id_Cliente`))) join `account`.`user` `u` on((`u`.`id` = `c`.`salesPersonFk`))) join `account`.`role` `r` on((`r`.`id` = `u`.`role`))) where ((`r`.`name` = 'salesPerson') and (`u`.`name` not in ('ismaelalcolea','ruben'))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `originL10n`
--

/*!50001 DROP TABLE IF EXISTS `originL10n`*/;
/*!50001 DROP VIEW IF EXISTS `originL10n`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `originL10n` AS select `o`.`id` AS `id`,ifnull(`i`.`name`,`o`.`name`) AS `name` from (`origin` `o` left join `originI18n` `i` on(((`i`.`originFk` = `o`.`id`) and (`i`.`lang` = `util`.`lang`())))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `packageEquivalentItem`
--

/*!50001 DROP TABLE IF EXISTS `packageEquivalentItem`*/;
/*!50001 DROP VIEW IF EXISTS `packageEquivalentItem`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `packageEquivalentItem` AS select `p`.`itemFk` AS `itemFk`,`p2`.`itemFk` AS `equivalentFk` from ((`packageEquivalent` `pe` join `packaging` `p` on((`p`.`id` = `pe`.`packagingFk`))) join `packaging` `p2` on((`p2`.`id` = `pe`.`equivalentFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `personMedia`
--

/*!50001 DROP TABLE IF EXISTS `personMedia`*/;
/*!50001 DROP VIEW IF EXISTS `personMedia`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `personMedia` AS select `po`.`workerFk` AS `workerFk`,`m`.`value` AS `mediaValue` from (((`postgresql`.`profile` `po` join `postgresql`.`profile_media` `pom` on((`pom`.`profile_id` = `po`.`profile_id`))) join `postgresql`.`media` `m` on((`m`.`media_id` = `pom`.`media_id`))) join `postgresql`.`media_type` `mt` on((`mt`.`media_type_id` = `m`.`media_type_id`))) where (`mt`.`name` = 'movil personal') */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `phoneBook`
--

/*!50001 DROP TABLE IF EXISTS `phoneBook`*/;
/*!50001 DROP VIEW IF EXISTS `phoneBook`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `phoneBook` AS select 'C' AS `Tipo`,`client`.`id` AS `Id`,`client`.`name` AS `Cliente`,`client`.`phone` AS `Telefono` from `client` where (`client`.`phone` is not null) union select 'C' AS `Tipo`,`client`.`id` AS `Id`,`client`.`name` AS `Cliente`,`client`.`mobile` AS `Movil` from `client` where (`client`.`mobile` is not null) union select 'C' AS `Tipo`,`clientContact`.`clientFk` AS `clientFk`,`clientContact`.`name` AS `name`,`clientContact`.`phone` AS `phone` from `clientContact` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `productionVolume`
--

/*!50001 DROP TABLE IF EXISTS `productionVolume`*/;
/*!50001 DROP VIEW IF EXISTS `productionVolume`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `productionVolume` AS select hour(`e`.`created`) AS `hora`,minute(`e`.`created`) AS `minuto`,ifnull(`p`.`volume`,ifnull(((`p`.`width` * `p`.`height`) * `p`.`depth`),94500)) AS `cm3`,`t`.`warehouseFk` AS `warehouseFk`,`e`.`created` AS `created` from (((`expedition` `e` left join `packaging` `p` on((`p`.`itemFk` = `e`.`itemFk`))) join `ticket` `t` on((`t`.`id` = `e`.`ticketFk`))) join `client` `c` on((`c`.`id` = `t`.`clientFk`))) where ((`e`.`created` between curdate() and `util`.`dayend`(curdate())) and `c`.`isRelevant`) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `productionVolume_LastHour`
--

/*!50001 DROP TABLE IF EXISTS `productionVolume_LastHour`*/;
/*!50001 DROP VIEW IF EXISTS `productionVolume_LastHour`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `productionVolume_LastHour` AS select cast(sum((`productionVolume`.`cm3` / 1000000)) as decimal(10,0)) AS `m3`,`productionVolume`.`warehouseFk` AS `warehouseFk` from `productionVolume` where ((`productionVolume`.`created` > (now() + interval -(1) hour)) and (`productionVolume`.`warehouseFk` in (1,44,60))) group by `productionVolume`.`warehouseFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `returnBuckets`
--

/*!50001 DROP TABLE IF EXISTS `returnBuckets`*/;
/*!50001 DROP VIEW IF EXISTS `returnBuckets`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `returnBuckets` AS select `cr`.`idCubos_Retorno` AS `id`,`cr`.`Soporte` AS `freightContainerType`,`cr`.`Vacio` AS `freightPackagingEmpty`,`cr`.`Lleno` AS `freightPackagingFull` from `vn2008`.`Cubos_Retorno` `cr` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `role`
--

/*!50001 DROP TABLE IF EXISTS `role`*/;
/*!50001 DROP VIEW IF EXISTS `role`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `role` AS select `account`.`role`.`id` AS `id`,`account`.`role`.`name` AS `name`,`account`.`role`.`description` AS `description`,`account`.`role`.`hasLogin` AS `hasLogin` from `account`.`role` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `routesReduced`
--

/*!50001 DROP TABLE IF EXISTS `routesReduced`*/;
/*!50001 DROP VIEW IF EXISTS `routesReduced`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `routesReduced` AS select `et`.`description` AS `description`,`rm`.`name` AS `name`,`t`.`routeFk` AS `routeFk`,`et`.`ETD` AS `ETD`,`rm`.`bufferFk` AS `bufferFk`,`rm`.`beachFk` AS `beachFk`,`i`.`itemPackingTypeFk` AS `itempackingTypeFk` from (((((((`vn`.`expeditionTruck` `et` join `vn`.`routesMonitor` `rm` on((`rm`.`expeditionTruckFk` = `et`.`id`))) join `vn`.`ticket` `t` on((`t`.`routeFk` = `rm`.`routeFk`))) join `vn`.`ticketState` `ts` on((`ts`.`ticketFk` = `t`.`id`))) join `vn`.`state` `st` on((`st`.`id` = `ts`.`stateFk`))) join `vn`.`sale` `s` on((`s`.`ticketFk` = `t`.`id`))) join `vn`.`item` `i` on((`i`.`id` = `s`.`itemFk`))) join `vn`.`config` `c`) where (`et`.`ETD` > `util`.`yesterday`()) group by `t`.`routeFk` order by `et`.`ETD`,`t`.`routeFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleCost`
--

/*!50001 DROP TABLE IF EXISTS `saleCost`*/;
/*!50001 DROP VIEW IF EXISTS `saleCost`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleCost` AS select `s`.`itemFk` AS `itemFk`,`s`.`ticketFk` AS `ticketFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`s`.`discount` AS `discount`,`s`.`price` AS `price`,`c`.`name` AS `component`,`sc`.`value` AS `coste` from (((`sale` `s` join `saleComponent` `sc` on((`sc`.`saleFk` = `s`.`id`))) join `component` `c` on((`c`.`id` = `sc`.`componentFk`))) join `componentType` `ct` on((`ct`.`id` = `c`.`typeFk`))) where (`ct`.`type` = 'coste') */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleLabel`
--

/*!50001 DROP TABLE IF EXISTS `saleLabel`*/;
/*!50001 DROP VIEW IF EXISTS `saleLabel`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `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` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleMistakeList`
--

/*!50001 DROP TABLE IF EXISTS `saleMistakeList`*/;
/*!50001 DROP VIEW IF EXISTS `saleMistakeList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleMistakeList` AS select `st`.`saleFk` AS `saleFk`,`st`.`workerFk` AS `workerFk`,concat(`w2`.`firstName`,' ',`w2`.`lastName`) AS `sacador`,`st`.`created` AS `created`,concat(`w`.`firstName`,' ',`w`.`lastName`) AS `revisador`,`mt`.`description` AS `description`,`sm`.`created` AS `controlled` from (((((`vn`.`saleTracking` `st` join `vn`.`worker` `w2` on((`w2`.`id` = `st`.`workerFk`))) join `vncontrol`.`accion` `a` on(((`a`.`accion_id` = `st`.`actionFk`) and (`a`.`accion` = 'SACAR')))) left join `vn`.`saleMistake` `sm` on((`st`.`saleFk` = `sm`.`saleFk`))) left join `vn`.`mistakeType` `mt` on((`mt`.`id` = `sm`.`typeFk`))) left join `vn`.`worker` `w` on((`w`.`id` = `sm`.`userFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleMistake_list__2`
--

/*!50001 DROP TABLE IF EXISTS `saleMistake_list__2`*/;
/*!50001 DROP VIEW IF EXISTS `saleMistake_list__2`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleMistake_list__2` AS select `st`.`saleFk` AS `saleFk`,`st`.`workerFk` AS `workerFk`,concat(`w2`.`firstName`,' ',`w2`.`lastName`) AS `sacador`,`st`.`created` AS `created`,concat(`w`.`firstName`,' ',`w`.`lastName`) AS `revisador`,`mt`.`description` AS `description`,`sm`.`created` AS `controlled` from (((((`vn`.`saleTracking` `st` join `vn`.`worker` `w2` on((`w2`.`id` = `st`.`workerFk`))) join `vncontrol`.`accion` `a` on(((`a`.`accion_id` = `st`.`actionFk`) and (`a`.`accion` = 'SACAR')))) left join `vn`.`saleMistake` `sm` on((`st`.`saleFk` = `sm`.`saleFk`))) left join `vn`.`mistakeType` `mt` on((`mt`.`id` = `sm`.`typeFk`))) left join `vn`.`worker` `w` on((`w`.`id` = `sm`.`userFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleSaleTracking`
--

/*!50001 DROP TABLE IF EXISTS `saleSaleTracking`*/;
/*!50001 DROP VIEW IF EXISTS `saleSaleTracking`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleSaleTracking` AS select distinct `st`.`saleFk` AS `saleFk` from `saleTracking` `st` where (`st`.`created` >= (curdate() + interval -(1) day)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleValue`
--

/*!50001 DROP TABLE IF EXISTS `saleValue`*/;
/*!50001 DROP VIEW IF EXISTS `saleValue`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleValue` AS select `wh`.`name` AS `warehouse`,`c`.`name` AS `client`,`c`.`typeFk` AS `clientTypeFk`,`u`.`name` AS `buyer`,`it`.`id` AS `itemTypeFk`,`it`.`name` AS `family`,`s`.`itemFk` AS `itemFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,(((`b`.`buyingValue` + `b`.`freightValue`) + `b`.`comissionValue`) + `b`.`packageValue`) AS `cost`,((((`b`.`buyingValue` + `b`.`freightValue`) + `b`.`comissionValue`) + `b`.`packageValue`) * `s`.`quantity`) AS `value`,`tm`.`year` AS `year`,`tm`.`week` AS `week` from (((((((((`vn`.`sale` `s` join `vn`.`item` `i` on((`i`.`id` = `s`.`itemFk`))) join `vn`.`itemType` `it` on((`it`.`id` = `i`.`typeFk`))) join `account`.`user` `u` on((`u`.`id` = `it`.`workerFk`))) join `vn`.`ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `vn`.`client` `c` on((`c`.`id` = `t`.`clientFk`))) join `vn`.`warehouse` `wh` on((`wh`.`id` = `t`.`warehouseFk`))) join `vn`.`time` `tm` on((`tm`.`dated` = cast(`t`.`shipped` as date)))) join `cache`.`last_buy` `lb` on(((`lb`.`item_id` = `i`.`id`) and (`lb`.`warehouse_id` = `wh`.`id`)))) join `vn`.`buy` `b` on((`b`.`id` = `lb`.`buy_id`))) where (`wh`.`isManaged` <> 0) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleVolume`
--

/*!50001 DROP TABLE IF EXISTS `saleVolume`*/;
/*!50001 DROP VIEW IF EXISTS `saleVolume`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleVolume` AS select `s`.`ticketFk` AS `ticketFk`,`s`.`id` AS `saleFk`,round(((`ic`.`cm3delivery` * `s`.`quantity`) / 1000),0) AS `litros`,`t`.`routeFk` AS `routeFk`,`t`.`shipped` AS `shipped`,`t`.`landed` AS `landed`,((`s`.`quantity` * `ic`.`cm3delivery`) / 1000000) AS `volume`,((`s`.`quantity` * `ic`.`grams`) / 1000) AS `physicalWeight`,(((`s`.`quantity` * `ic`.`cm3delivery`) * greatest(`i`.`density`,167)) / 1000000) AS `weight`,((`s`.`quantity` * `ic`.`cm3delivery`) / 1000000) AS `physicalVolume`,(((`s`.`quantity` * `ic`.`cm3delivery`) * ifnull(`t`.`zonePrice`,`z`.`price`)) / (`vc`.`standardFlowerBox` * 1000)) AS `freight`,`t`.`zoneFk` AS `zoneFk`,`t`.`clientFk` AS `clientFk`,`s`.`isPicked` AS `isPicked`,(((`s`.`quantity` * `s`.`price`) * (100 - `s`.`discount`)) / 100) AS `eurosValue`,`i`.`itemPackingTypeFk` AS `itemPackingTypeFk` from (((((`sale` `s` join `item` `i` on((`i`.`id` = `s`.`itemFk`))) join `ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `zone` `z` on((`z`.`id` = `t`.`zoneFk`))) join `volumeConfig` `vc`) join `itemCost` `ic` on(((`ic`.`itemFk` = `s`.`itemFk`) and (`ic`.`warehouseFk` = `t`.`warehouseFk`)))) where (`s`.`quantity` > 0) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `saleVolume_Today_VNH`
--

/*!50001 DROP TABLE IF EXISTS `saleVolume_Today_VNH`*/;
/*!50001 DROP VIEW IF EXISTS `saleVolume_Today_VNH`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `saleVolume_Today_VNH` AS select `t`.`nickname` AS `Cliente`,`p`.`name` AS `Provincia`,`c`.`country` AS `Pais`,cast(sum(`sv`.`volume`) as decimal(5,1)) AS `volume` from (((((`saleVolume` `sv` join `ticket` `t` on((`t`.`id` = `sv`.`ticketFk`))) join `address` `a` on((`a`.`id` = `t`.`addressFk`))) join `province` `p` on((`p`.`id` = `a`.`provinceFk`))) join `country` `c` on((`c`.`id` = `p`.`countryFk`))) join `warehouse` `w` on((`w`.`id` = `t`.`warehouseFk`))) where ((`w`.`name` = 'VNH') and (`t`.`shipped` between curdate() and `util`.`dayend`(curdate()))) group by `t`.`nickname`,`p`.`name` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `sale_freightComponent`
--

/*!50001 DROP TABLE IF EXISTS `sale_freightComponent`*/;
/*!50001 DROP VIEW IF EXISTS `sale_freightComponent`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `sale_freightComponent` AS select `t`.`id` AS `ticketFk`,(`sc`.`value` * `s`.`quantity`) AS `amount`,`t`.`shipped` AS `shipped` from ((((`ticket` `t` straight_join `sale` `s` on((`t`.`id` = `s`.`ticketFk`))) join `saleComponent` `sc` on((`sc`.`saleFk` = `s`.`id`))) join `component` `c` on((`c`.`id` = `sc`.`componentFk`))) join `componentType` `ct` on(((`ct`.`id` = `c`.`typeFk`) and (`ct`.`type` = 'agencia')))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `salesPersonSince`
--

/*!50001 DROP TABLE IF EXISTS `salesPersonSince`*/;
/*!50001 DROP VIEW IF EXISTS `salesPersonSince`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `salesPersonSince` AS select `pr`.`workerFk` AS `workerFk`,min(`b`.`date_start`) AS `started` from (((`postgresql`.`profile` `pr` left join `postgresql`.`business` `b` on((`pr`.`profile_id` = `b`.`client_id`))) left join `postgresql`.`business_labour` `bl` on((`b`.`business_id` = `bl`.`business_id`))) join `postgresql`.`professional_category` `pc` on((`pc`.`professional_category_id` = `bl`.`professional_category_id`))) where (`pc`.`category_name` = 'Aux ventas') group by `pr`.`workerFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `salesPreparedLastHour`
--

/*!50001 DROP TABLE IF EXISTS `salesPreparedLastHour`*/;
/*!50001 DROP VIEW IF EXISTS `salesPreparedLastHour`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `salesPreparedLastHour` AS select `t`.`warehouseFk` AS `warehouseFk`,`st`.`saleFk` AS `saleFk`,`st`.`isChecked` AS `isChecked`,`st`.`originalQuantity` AS `originalQuantity`,`a`.`accion` AS `accion`,`st`.`created` AS `created`,`e`.`code` AS `code`,`w`.`firstName` AS `firstname`,`w`.`lastName` AS `lastName`,`w`.`code` AS `workerCode`,((`ic`.`cm3delivery` * `s`.`quantity`) / 1000) AS `litros`,`s`.`concept` AS `concept`,`d`.`name` AS `departmentName` from (((((((((`vn`.`saleTracking` `st` left join `vn`.`salesPreviousPreparated` `prevPrepSales` on((`prevPrepSales`.`saleFk` = `st`.`saleFk`))) join `vn`.`sale` `s` on((`s`.`id` = `st`.`saleFk`))) join `vn`.`ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `vn`.`itemCost` `ic` on(((`ic`.`warehouseFk` = `t`.`warehouseFk`) and (`ic`.`itemFk` = `s`.`itemFk`)))) join `vn`.`worker` `w` on((`w`.`id` = `st`.`workerFk`))) join `vn`.`state` `e` on((`e`.`id` = `st`.`stateFk`))) join `vncontrol`.`accion` `a` on((`a`.`accion_id` = `st`.`actionFk`))) join `vn`.`workerDepartment` `wd` on((`wd`.`workerFk` = `st`.`workerFk`))) join `vn`.`department` `d` on((`d`.`id` = `wd`.`departmentFk`))) where ((`st`.`created` > (now() + interval -(1) hour)) and isnull(`prevPrepSales`.`saleFk`) and (not((`d`.`name` like 'EQUIPO%')))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `salesPreviousPreparated`
--

/*!50001 DROP TABLE IF EXISTS `salesPreviousPreparated`*/;
/*!50001 DROP VIEW IF EXISTS `salesPreviousPreparated`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `salesPreviousPreparated` AS select `st`.`saleFk` AS `saleFk` from (`saleTracking` `st` join `state` `e` on((`e`.`id` = `st`.`stateFk`))) where ((`st`.`created` > curdate()) and (`e`.`code` like 'PREVIOUS_PREPARATION')) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `supplierPackaging`
--

/*!50001 DROP TABLE IF EXISTS `supplierPackaging`*/;
/*!50001 DROP VIEW IF EXISTS `supplierPackaging`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `supplierPackaging` AS select `e`.`supplierFk` AS `supplierFk`,`b`.`itemFk` AS `itemFk`,`i`.`longName` AS `longName`,`s`.`name` AS `supplier`,`b`.`entryFk` AS `entryFk`,`tr`.`landed` AS `landed`,-(least(`b`.`quantity`,0)) AS `out`,greatest(`b`.`quantity`,0) AS `in`,`w`.`name` AS `warehouse`,`b`.`buyingValue` AS `buyingValue` from ((((((`buy` `b` join `item` `i` on((`i`.`id` = `b`.`itemFk`))) join `packaging` `p` on((`p`.`itemFk` = `i`.`id`))) join `entry` `e` on((`e`.`id` = `b`.`entryFk`))) join `supplier` `s` on((`s`.`id` = `e`.`supplierFk`))) join `travel` `tr` on((`tr`.`id` = `e`.`travelFk`))) join `warehouse` `w` on((`w`.`id` = `tr`.`warehouseInFk`))) where `p`.`isPackageReturnable` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `tagL10n`
--

/*!50001 DROP TABLE IF EXISTS `tagL10n`*/;
/*!50001 DROP VIEW IF EXISTS `tagL10n`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `tagL10n` AS select `t`.`id` AS `id`,ifnull(`i`.`name`,`t`.`name`) AS `name` from (`tag` `t` left join `tagI18n` `i` on(((`i`.`tagFk` = `t`.`id`) and (`i`.`lang` = `util`.`LANG`())))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketLastUpdated`
--

/*!50001 DROP TABLE IF EXISTS `ticketLastUpdated`*/;
/*!50001 DROP VIEW IF EXISTS `ticketLastUpdated`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketLastUpdated` AS select `ticketLastUpdatedList`.`ticketFk` AS `ticketFk`,max(`ticketLastUpdatedList`.`created`) AS `lastUpdated` from `vn`.`ticketLastUpdatedList` group by `ticketLastUpdatedList`.`ticketFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketLastUpdatedList`
--

/*!50001 DROP TABLE IF EXISTS `ticketLastUpdatedList`*/;
/*!50001 DROP VIEW IF EXISTS `ticketLastUpdatedList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketLastUpdatedList` AS select `s`.`ticketFk` AS `ticketFk`,`st`.`created` AS `created` from (`vn`.`saleTracking` `st` join `vn`.`sale` `s` on((`s`.`id` = `st`.`saleFk`))) where (`st`.`created` > curdate()) union all select `i`.`Id_Ticket` AS `Id_Ticket`,`i`.`odbc_date` AS `odbc_date` from `vncontrol`.`inter` `i` where (`i`.`odbc_date` > curdate()) union all select `s`.`ticketFk` AS `ticketFk`,`iss`.`created` AS `created` from (`vn`.`itemShelvingSale` `iss` join `vn`.`sale` `s` on((`s`.`id` = `iss`.`saleFk`))) where (`iss`.`created` > curdate()) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketLocation`
--

/*!50001 DROP TABLE IF EXISTS `ticketLocation`*/;
/*!50001 DROP VIEW IF EXISTS `ticketLocation`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketLocation` AS select `tl`.`Id_Ticket` AS `ticketFk`,`tl`.`longitude` AS `longitude`,`tl`.`latitude` AS `latitude` from `vn2008`.`ticket_location` `tl` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketMRW`
--

/*!50001 DROP TABLE IF EXISTS `ticketMRW`*/;
/*!50001 DROP VIEW IF EXISTS `ticketMRW`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!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 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketNotInvoiced`
--

/*!50001 DROP TABLE IF EXISTS `ticketNotInvoiced`*/;
/*!50001 DROP VIEW IF EXISTS `ticketNotInvoiced`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketNotInvoiced` AS select `t`.`companyFk` AS `companyFk`,`cm`.`code` AS `companyCode`,`t`.`clientFk` AS `clientFk`,`c`.`name` AS `clientName`,`t`.`shipped` AS `shipped`,cast(sum((((`s`.`quantity` * `s`.`price`) * (100 - `s`.`discount`)) / 100)) as decimal(10,2)) AS `value` from (((`ticket` `t` join `sale` `s` on((`s`.`ticketFk` = `t`.`id`))) join `client` `c` on((`c`.`id` = `t`.`clientFk`))) join `company` `cm` on((`cm`.`id` = `t`.`companyFk`))) where (isnull(`t`.`refFk`) and (`t`.`shipped` > '2017-01-01')) group by `t`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketPackingList`
--

/*!50001 DROP TABLE IF EXISTS `ticketPackingList`*/;
/*!50001 DROP VIEW IF EXISTS `ticketPackingList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketPackingList` AS select `t`.`nickname` AS `nickname`,`t`.`id` AS `ticketFk`,`am`.`name` AS `agencyMode`,`am`.`flag` AS `flag`,`p`.`name` AS `province`,`s`.`itemFk` AS `itemFk`,`s`.`concept` AS `concept`,`s`.`quantity` AS `quantity`,`sv`.`litros` AS `litros`,`to`.`description` AS `observaciones` from (((((((`ticket` `t` join `address` `a` on((`a`.`id` = `t`.`addressFk`))) join `province` `p` on((`p`.`id` = `a`.`provinceFk`))) join `agencyMode` `am` on((`am`.`id` = `t`.`agencyModeFk`))) left join `sale` `s` on((`s`.`ticketFk` = `t`.`id`))) left join `saleVolume` `sv` on((`sv`.`saleFk` = `s`.`id`))) join `observationType` `ot` on((`ot`.`code` = 'packager'))) left join `ticketObservation` `to` on(((`to`.`ticketFk` = `t`.`id`) and (`ot`.`id` = `to`.`observationTypeFk`)))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketPreviousPreparingList`
--

/*!50001 DROP TABLE IF EXISTS `ticketPreviousPreparingList`*/;
/*!50001 DROP VIEW IF EXISTS `ticketPreviousPreparingList`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketPreviousPreparingList` AS select `s`.`ticketFk` AS `ticketFk`,`w`.`code` AS `code`,count(`s`.`id`) AS `saleLines`,sum((`s`.`isPicked` <> 0)) AS `alreadyMadeSaleLines`,(sum((`s`.`isPicked` <> 0)) / count(`s`.`id`)) AS `madeRate`,`sg`.`created` AS `created`,`p`.`code` AS `parking`,`iss`.`sectorFk` AS `sectorFk`,`al`.`code` AS `alertCode` from (((((((`vn`.`saleGroup` `sg` join `vn`.`saleGroupDetail` `sgd` on((`sgd`.`saleGroupFk` = `sg`.`id`))) join `vn`.`sale` `s` on((`s`.`id` = `sgd`.`saleFk`))) join `vn`.`ticketState` `tls` on((`tls`.`ticketFk` = `s`.`ticketFk`))) join `vn`.`alertLevel` `al` on((`al`.`id` = `tls`.`alertLevel`))) join `vn`.`worker` `w` on((`w`.`id` = `sg`.`userFk`))) left join `vn`.`parking` `p` on((`p`.`id` = `sg`.`parkingFk`))) join `vn`.`itemShelvingStock` `iss` on((`iss`.`itemFk` = `s`.`itemFk`))) where (`sg`.`created` >= (curdate() + interval 0.1 day)) group by `sg`.`id` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketState`
--

/*!50001 DROP TABLE IF EXISTS `ticketState`*/;
/*!50001 DROP VIEW IF EXISTS `ticketState`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketState` AS select `i`.`odbc_date` AS `updated`,`i`.`state_id` AS `stateFk`,`i`.`Id_Trabajador` AS `workerFk`,`tls`.`ticketFk` AS `ticketFk`,`s`.`id` AS `state`,`s`.`order` AS `productionOrder`,`s`.`alertLevel` AS `alertLevel`,`s`.`code` AS `code`,`tls`.`ticketFk` AS `ticket`,`i`.`Id_Trabajador` AS `worker`,`s`.`isPreviousPreparable` AS `isPreviousPreparable`,`s`.`isPicked` AS `isPicked` from ((`vn`.`ticketLastState` `tls` join `vncontrol`.`inter` `i` on((`i`.`inter_id` = `tls`.`ticketTrackingFk`))) join `vn`.`state` `s` on((`s`.`id` = `i`.`state_id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketStateToday`
--

/*!50001 DROP TABLE IF EXISTS `ticketStateToday`*/;
/*!50001 DROP VIEW IF EXISTS `ticketStateToday`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketStateToday` AS select `ts`.`ticket` AS `ticket`,`ts`.`state` AS `state`,`ts`.`productionOrder` AS `productionOrder`,`ts`.`alertLevel` AS `alertLevel`,`ts`.`worker` AS `worker`,`ts`.`code` AS `code`,`ts`.`updated` AS `updated`,`ts`.`isPicked` AS `isPicked` from (`vn`.`ticketState` `ts` join `vn`.`ticket` `t` on((`t`.`id` = `ts`.`ticket`))) where (`t`.`shipped` between curdate() and `MIDNIGHT`(curdate())) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `ticketTracking`
--

/*!50001 DROP TABLE IF EXISTS `ticketTracking`*/;
/*!50001 DROP VIEW IF EXISTS `ticketTracking`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `ticketTracking` AS select `i`.`inter_id` AS `id`,`i`.`state_id` AS `stateFk`,`i`.`odbc_date` AS `created`,`i`.`Id_Ticket` AS `ticketFk`,`i`.`Id_Trabajador` AS `workerFk` from `vncontrol`.`inter` `i` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `tr2`
--

/*!50001 DROP TABLE IF EXISTS `tr2`*/;
/*!50001 DROP VIEW IF EXISTS `tr2`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `tr2` AS select `travel`.`id` AS `id`,`travel`.`shipped` AS `shipped`,`travel`.`shipmentHour` AS `shipmentHour`,`travel`.`landed` AS `landed`,`travel`.`landingHour` AS `landingHour`,`travel`.`warehouseInFk` AS `warehouseInFk`,`travel`.`warehouseOutFk` AS `warehouseOutFk`,`travel`.`agencyModeFk` AS `agencyFk`,`travel`.`ref` AS `ref`,`travel`.`isDelivered` AS `isDelivered`,`travel`.`isReceived` AS `isReceived`,`travel`.`m3` AS `m3`,`travel`.`kg` AS `kg`,`travel`.`cargoSupplierFk` AS `cargoSupplierFk`,`travel`.`totalEntries` AS `totalEntries` from `travel` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `traceabilityBuy`
--

/*!50001 DROP TABLE IF EXISTS `traceabilityBuy`*/;
/*!50001 DROP VIEW IF EXISTS `traceabilityBuy`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `traceabilityBuy` AS select `b`.`id` AS `buyFk`,`b`.`quantity` AS `quantity`,`tr`.`landed` AS `landed`,`w`.`name` AS `warehouseName`,`b`.`entryFk` AS `entryFk`,`s`.`name` AS `supplierName`,ifnull(`b`.`itemOriginalFk`,`b`.`itemFk`) AS `itemFk` from ((((`buy` `b` join `entry` `e` on((`e`.`id` = `b`.`entryFk`))) join `travel` `tr` on((`tr`.`id` = `e`.`travelFk`))) join `supplier` `s` on((`s`.`id` = `e`.`supplierFk`))) join `warehouse` `w` on((`w`.`id` = `tr`.`warehouseInFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `traceabilitySale`
--

/*!50001 DROP TABLE IF EXISTS `traceabilitySale`*/;
/*!50001 DROP VIEW IF EXISTS `traceabilitySale`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `traceabilitySale` AS select `s`.`ticketFk` AS `ticketFk`,`sb`.`buyFk` AS `buyFk`,`t`.`shipped` AS `shipped`,`t`.`nickname` AS `nickname`,`s`.`quantity` AS `quantity`,concat(`w`.`firstName`,' ',`w`.`lastName`) AS `worker` from (((`saleBuy` `sb` join `sale` `s` on((`s`.`id` = `sb`.`saleFk`))) join `ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `worker` `w` on((`w`.`id` = `sb`.`workerFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `user`
--

/*!50001 DROP TABLE IF EXISTS `user`*/;
/*!50001 DROP VIEW IF EXISTS `user`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `user` AS select `account`.`user`.`id` AS `id`,`account`.`user`.`name` AS `name`,`account`.`user`.`password` AS `password`,`account`.`user`.`role` AS `role`,`account`.`user`.`active` AS `active`,`account`.`user`.`recoverPass` AS `recoverPass`,`account`.`user`.`lastPassChange` AS `lastPassChange` from `account`.`user` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerBusinessDated`
--

/*!50001 DROP TABLE IF EXISTS `workerBusinessDated`*/;
/*!50001 DROP VIEW IF EXISTS `workerBusinessDated`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerBusinessDated` AS select `t`.`dated` AS `dated`,`b`.`business_id` AS `business_id`,`pr`.`workerFk` AS `workerFk` from ((`vn`.`time` `t` left join `postgresql`.`business` `b` on((`t`.`dated` between `b`.`date_start` and ifnull(`b`.`date_end`,curdate())))) left join `postgresql`.`profile` `pr` on((`b`.`client_id` = `pr`.`profile_id`))) where (`t`.`dated` > (curdate() + interval -(2) year)) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerCalendar`
--

/*!50001 DROP TABLE IF EXISTS `workerCalendar`*/;
/*!50001 DROP VIEW IF EXISTS `workerCalendar`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerCalendar` AS select `ce`.`business_id` AS `businessFk`,`pr`.`workerFk` AS `workerFk`,`ce`.`calendar_state_id` AS `absenceTypeFk`,`ce`.`date` AS `dated` from ((`postgresql`.`profile` `pr` join `postgresql`.`business` `b` on((`b`.`client_id` = `pr`.`profile_id`))) join `postgresql`.`calendar_employee` `ce` on((`ce`.`business_id` = `b`.`business_id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerDepartment`
--

/*!50001 DROP TABLE IF EXISTS `workerDepartment`*/;
/*!50001 DROP VIEW IF EXISTS `workerDepartment`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerDepartment` AS select `pr`.`workerFk` AS `workerFk`,`bl`.`department_id` AS `departmentFk` from (`postgresql`.`profile` `pr` left join (`postgresql`.`business` `b` left join `postgresql`.`business_labour` `bl` on((`b`.`business_id` = `bl`.`business_id`))) on((`pr`.`profile_id` = `b`.`client_id`))) where ((isnull(`b`.`date_end`) and (`b`.`date_start` <= curdate())) or ((`b`.`date_end` >= curdate()) and (`b`.`date_start` <= curdate()))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerLabour`
--

/*!50001 DROP TABLE IF EXISTS `workerLabour`*/;
/*!50001 DROP VIEW IF EXISTS `workerLabour`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerLabour` AS select `b`.`business_id` AS `businessFk`,`pr`.`workerFk` AS `workerFk`,`bl`.`workcenter_id` AS `workCenterFk`,`b`.`date_start` AS `started`,`b`.`date_end` AS `ended`,`d`.`id` AS `departmentFk`,`b`.`payedHolidays` AS `payedHolidays` from (((`postgresql`.`profile` `pr` join `postgresql`.`business` `b` on((`b`.`client_id` = `pr`.`profile_id`))) join `postgresql`.`business_labour` `bl` on((`b`.`business_id` = `bl`.`business_id`))) join `vn`.`department` `d` on((`d`.`id` = `bl`.`department_id`))) order by `b`.`date_start` desc */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerMedia`
--

/*!50001 DROP TABLE IF EXISTS `workerMedia`*/;
/*!50001 DROP VIEW IF EXISTS `workerMedia`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerMedia` AS select `po`.`workerFk` AS `workerFk`,`m`.`value` AS `mediaValue` from (((`postgresql`.`profile` `po` join `postgresql`.`profile_media` `pom` on((`pom`.`profile_id` = `po`.`profile_id`))) join `postgresql`.`media` `m` on((`m`.`media_id` = `pom`.`media_id`))) join `postgresql`.`media_type` `mt` on((`mt`.`media_type_id` = `m`.`media_type_id`))) where (`mt`.`name` = 'movil empresa') */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerSpeedExpedition`
--

/*!50001 DROP TABLE IF EXISTS `workerSpeedExpedition`*/;
/*!50001 DROP VIEW IF EXISTS `workerSpeedExpedition`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerSpeedExpedition` AS select `sv`.`ticketFk` AS `ticketFk`,sum(`sv`.`litros`) AS `litros`,sum(if((`sub`.`started` > (now() + interval -(1) hour)),`sv`.`litros`,0)) AS `literLastHour`,cast(((60 * sum(`sv`.`litros`)) / time_to_sec(timediff(max(`sub`.`finished`),min(`sub`.`started`)))) as decimal(10,1)) AS `litersByMinute`,`sub`.`code` AS `workerCode`,`sub`.`cajas` AS `cajas`,`sub`.`warehouseFk` AS `warehouseFk` from (`saleVolume` `sv` join `expeditionTimeExpended` `sub` on((`sub`.`ticketFk` = `sv`.`ticketFk`))) group by `workerCode` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerSpeedSaleTracking`
--

/*!50001 DROP TABLE IF EXISTS `workerSpeedSaleTracking`*/;
/*!50001 DROP VIEW IF EXISTS `workerSpeedSaleTracking`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerSpeedSaleTracking` AS select `salesPreparedLastHour`.`warehouseFk` AS `warehouseFk`,`salesPreparedLastHour`.`accion` AS `accion`,`salesPreparedLastHour`.`workerCode` AS `workerCode`,sum(`salesPreparedLastHour`.`litros`) AS `sumaLitros`,min(`salesPreparedLastHour`.`created`) AS `started`,max(`salesPreparedLastHour`.`created`) AS `finished`,sum(if((`salesPreparedLastHour`.`created` >= (now() + interval -(1) hour)),`salesPreparedLastHour`.`litros`,0)) AS `sumaLitrosLastHour`,cast(((60 * sum(`salesPreparedLastHour`.`litros`)) / time_to_sec(timediff(max(`salesPreparedLastHour`.`created`),min(`salesPreparedLastHour`.`created`)))) as decimal(10,1)) AS `litersByMinute`,`salesPreparedLastHour`.`departmentName` AS `departmentName` from `vn`.`salesPreparedLastHour` group by `salesPreparedLastHour`.`warehouseFk`,`salesPreparedLastHour`.`accion`,`salesPreparedLastHour`.`workerCode` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerTeamCollegues`
--

/*!50001 DROP TABLE IF EXISTS `workerTeamCollegues`*/;
/*!50001 DROP VIEW IF EXISTS `workerTeamCollegues`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerTeamCollegues` AS select distinct `w`.`workerFk` AS `workerFk`,`t`.`workerFk` AS `collegueFk` from (`workerTeam` `w` join `workerTeam` `t` on((`w`.`team` = `t`.`team`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerTimeControlUserInfo`
--

/*!50001 DROP TABLE IF EXISTS `workerTimeControlUserInfo`*/;
/*!50001 DROP VIEW IF EXISTS `workerTimeControlUserInfo`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerTimeControlUserInfo` AS select `u`.`id` AS `userFk`,`w`.`firstName` AS `name`,`w`.`lastName` AS `surname`,`u`.`name` AS `user`,`u`.`password` AS `password`,`u`.`bcryptPassword` AS `bcryptPassword`,`wd`.`departmentFk` AS `departmentFk`,left(`c`.`fi`,8) AS `dni` from (((`account`.`user` `u` join `vn`.`worker` `w` on((`w`.`userFk` = `u`.`id`))) join `vn`.`client` `c` on((`c`.`id` = `u`.`id`))) left join `vn`.`workerDepartment` `wd` on((`wd`.`workerFk` = `w`.`id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerTimeControlWorking`
--

/*!50001 DROP TABLE IF EXISTS `workerTimeControlWorking`*/;
/*!50001 DROP VIEW IF EXISTS `workerTimeControlWorking`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerTimeControlWorking` AS select `wtc`.`userFk` AS `userFk`,`wtc`.`timed` AS `timed`,`w`.`firstName` AS `name`,`w`.`lastName` AS `surname`,`pm`.`mediaValue` AS `phone`,`wm`.`mediaValue` AS `workerPhone`,`d`.`name` AS `department`,`wc`.`name` AS `workerCenter`,count(`wtc`.`order`) AS `maxOrder` from (((((((`vn`.`workerTimeControl` `wtc` join `vn`.`worker` `w` on((`w`.`userFk` = `wtc`.`userFk`))) left join `vn`.`personMedia` `pm` on((`pm`.`workerFk` = `w`.`id`))) left join `vn`.`workerMedia` `wm` on((`wm`.`workerFk` = `w`.`id`))) left join `vn`.`workerDepartment` `wd` on((`wd`.`workerFk` = `w`.`id`))) left join `vn`.`department` `d` on((`d`.`id` = `wd`.`departmentFk`))) left join `vn`.`workerLabour` `wl` on((`wl`.`businessFk` = (select `wl2`.`businessFk` from `vn`.`workerLabour` `wl2` where (`wl2`.`workerFk` = `w`.`id`) order by `wl2`.`started` desc limit 1)))) left join `vn`.`workCenter` `wc` on((`wc`.`id` = `wl`.`workCenterFk`))) where (cast(`wtc`.`timed` as date) = curdate()) group by `wtc`.`userFk` having ((`maxOrder` % 2) = 1) order by `wtc`.`timed` desc */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerTimeJourneyNG`
--

/*!50001 DROP TABLE IF EXISTS `workerTimeJourneyNG`*/;
/*!50001 DROP VIEW IF EXISTS `workerTimeJourneyNG`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerTimeJourneyNG` AS select `wtc`.`userFk` AS `userFk`,cast(`wtc`.`timed` as date) AS `dated`,(if((`wtc`.`order` % 2),-(1),1) * (hour(`wtc`.`timed`) + (minute(`wtc`.`timed`) / 60))) AS `Journey`,dayname(`wtc`.`timed`) AS `dayName`,`w`.`lastName` AS `name`,`w`.`firstName` AS `firstname` from (`workerTimeControl` `wtc` join `worker` `w` on((`w`.`userFk` = `wtc`.`userFk`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `workerWithoutTractor`
--

/*!50001 DROP TABLE IF EXISTS `workerWithoutTractor`*/;
/*!50001 DROP VIEW IF EXISTS `workerWithoutTractor`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `workerWithoutTractor` AS select `c`.`workerFk` AS `workerFk`,`cl`.`name` AS `Trabajador`,count(distinct `c`.`id`) AS `Colecciones`,max(`c`.`created`) AS `created` from ((`collection` `c` join `client` `cl` on((`cl`.`id` = `c`.`workerFk`))) left join `machineWorker` `mw` on(((`mw`.`workerFk` = `c`.`workerFk`) and (`mw`.`inTimed` > curdate())))) where ((`c`.`created` > curdate()) and isnull(`mw`.`workerFk`)) group by `c`.`workerFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `zoneEstimatedDelivery`
--

/*!50001 DROP TABLE IF EXISTS `zoneEstimatedDelivery`*/;
/*!50001 DROP VIEW IF EXISTS `zoneEstimatedDelivery`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `zoneEstimatedDelivery` AS select `t`.`zoneFk` AS `zoneFk`,cast((curdate() + interval ((hour(ifnull(`zc`.`hour`,`z`.`hour`)) * 60) + minute(ifnull(`zc`.`hour`,`z`.`hour`))) minute) as time) AS `hourTheoretical`,cast(sum(`sv`.`volume`) as decimal(5,1)) AS `totalVolume`,cast(sum(if((`s`.`alertLevel` < 2),`sv`.`volume`,0)) as decimal(5,1)) AS `remainingVolume`,greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0)) AS `speed`,cast((`zc`.`hour` + interval ((-(sum(if((`s`.`alertLevel` < 2),`sv`.`volume`,0))) * 60) / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0))) minute) as time) AS `hourEffective`,floor(((-(sum(if((`s`.`alertLevel` < 2),`sv`.`volume`,0))) * 60) / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0)))) AS `minutesLess`,cast((`zc`.`hour` + interval ((-(sum(if((`s`.`alertLevel` < 2),`sv`.`volume`,0))) * 60) / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0))) minute) as time) AS `etc` from (((((((((`vn`.`ticket` `t` join `vn`.`ticketStateToday` `tst` on((`tst`.`ticket` = `t`.`id`))) join `vn`.`state` `s` on((`s`.`id` = `tst`.`state`))) join `vn`.`saleVolume` `sv` on((`sv`.`ticketFk` = `t`.`id`))) left join `vn`.`lastHourProduction` `lhp` on((`lhp`.`warehouseFk` = `t`.`warehouseFk`))) join `vn`.`warehouse` `w` on((`w`.`id` = `t`.`warehouseFk`))) join `vn`.`warehouseAlias` `wa` on((`wa`.`id` = `w`.`aliasFk`))) join `vn`.`zone` `z` on((`z`.`id` = `t`.`zoneFk`))) left join `vn`.`zoneClosure` `zc` on(((`zc`.`zoneFk` = `t`.`zoneFk`) and (`zc`.`dated` = curdate())))) left join `cache`.`departure_limit` `dl` on(((`dl`.`warehouse_id` = `t`.`warehouseFk`) and (`dl`.`fecha` = curdate())))) where (`w`.`hasProduction` and (cast(`t`.`shipped` as date) = curdate())) group by `t`.`zoneFk` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Current Database: `vncontrol`
--

USE `vncontrol`;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2022-08-03  9:39:55