diff --git a/back/methods/chat/send.js b/back/methods/chat/send.js new file mode 100644 index 0000000000..c36178b0f2 --- /dev/null +++ b/back/methods/chat/send.js @@ -0,0 +1,138 @@ +const request = require('request-promise-native'); +module.exports = Self => { + Self.remoteMethodCtx('send', { + description: 'Send a RocketChat message', + accessType: 'WRITE', + accepts: [{ + arg: 'to', + type: 'String', + required: true, + description: 'User (@) or channel (#) to send the message' + }, { + arg: 'message', + type: 'String', + required: true, + description: 'The message' + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/send`, + verb: 'POST' + } + }); + + Self.send = async(ctx, to, message) => { + const models = Self.app.models; + const accessToken = ctx.req.accessToken; + const sender = await models.Account.findById(accessToken.userId); + const recipient = to.replace('@', ''); + + if (sender.name != recipient) + return sendMessage(sender, to, `@${sender.name}: ${message} `); + }; + + async function sendMessage(sender, channel, message) { + const config = await getConfig(); + const avatar = `${config.host}/avatar/${sender.name}`; + const uri = `${config.api}/chat.postMessage`; + + return sendAuth(uri, { + 'channel': channel, + 'avatar': avatar, + 'text': message + }).catch(async error => { + if (error.statusCode === 401 && !this.resendAttempted) { + this.resendAttempted = true; + + return sendMessage(sender, channel, message); + } + + throw new Error(error.message); + }); + } + + /** + * Returns a rocketchat token + * @return {Object} userId and authToken + */ + async function getAuthToken() { + if (!this.auth || this.auth && !this.auth.authToken) { + const config = await getConfig(); + const uri = `${config.api}/login`; + const res = await send(uri, { + user: config.user, + password: config.password + }); + + this.auth = res.data; + } + + return this.auth; + } + + /** + * Returns a rocketchat config + * @return {Object} Auth config + */ + async function getConfig() { + if (!this.chatConfig) { + const models = Self.app.models; + + this.chatConfig = await models.ChatConfig.findOne(); + } + + return this.chatConfig; + } + + /** + * Send unauthenticated request + * @param {*} uri - Request uri + * @param {*} body - Request params + * @param {*} options - Request options + * + * @return {Object} Request response + */ + async function send(uri, body, options) { + if (process.env.NODE_ENV !== 'production') { + return new Promise(resolve => { + return resolve({statusCode: 200, message: 'Fake notification sent'}); + }); + } + + const defaultOptions = { + method: 'POST', + uri: uri, + body: body, + headers: {'content-type': 'application/json'}, + json: true + }; + + if (options) Object.assign(defaultOptions, options); + + return request(defaultOptions); + } + + /** + * Send authenticated request + * @param {*} uri - Request uri + * @param {*} body - Request params + * + * @return {Object} Request response + */ + async function sendAuth(uri, body) { + const login = await getAuthToken(); + const options = { + headers: {'content-type': 'application/json'} + }; + + if (login) { + options.headers['X-Auth-Token'] = login.authToken; + options.headers['X-User-Id'] = login.userId; + } + + return send(uri, body, options); + } +}; diff --git a/back/methods/chat/sendCheckingPresence.js b/back/methods/chat/sendCheckingPresence.js new file mode 100644 index 0000000000..ac5836af3a --- /dev/null +++ b/back/methods/chat/sendCheckingPresence.js @@ -0,0 +1,53 @@ +module.exports = Self => { + Self.remoteMethodCtx('sendCheckingPresence', { + description: 'Sends a RocketChat message to a working worker or department channel', + accessType: 'WRITE', + accepts: [{ + arg: 'workerId', + type: 'Number', + required: true, + description: 'The worker id of the destinatary' + }, { + arg: 'message', + type: 'String', + required: true, + description: 'The message' + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/sendCheckingPresence`, + verb: 'POST' + } + }); + + Self.sendCheckingPresence = async(ctx, workerId, message) => { + const models = Self.app.models; + const account = await models.Account.findById(workerId); + + const query = `SELECT worker_isWorking(?) isWorking`; + const [result] = await Self.rawSql(query, [workerId]); + + let room; + if (result.isWorking) + room = `@${account.name}`; + else { + const workerDepartment = await models.WorkerDepartment.findById(workerId, { + include: { + relation: 'department' + } + }); + const department = workerDepartment.department(); + const channelName = department.chatName; + room = `#${channelName}`; + + if (channelName) + room = `#${channelName}`; + else room = `@${account.name}`; + } + + return Self.send(ctx, room, message); + }; +}; diff --git a/back/methods/chat/sendMessage.js b/back/methods/chat/sendMessage.js index a861ba07ed..b6eaf79a88 100644 --- a/back/methods/chat/sendMessage.js +++ b/back/methods/chat/sendMessage.js @@ -1,4 +1,3 @@ -const request = require('request-promise-native'); module.exports = Self => { Self.remoteMethodCtx('sendMessage', { description: 'Send a RocketChat message', @@ -24,115 +23,8 @@ module.exports = Self => { } }); + // FIXME: Deprecate this method #2019 Self.sendMessage = async(ctx, to, message) => { - const models = Self.app.models; - const accessToken = ctx.req.accessToken; - const sender = await models.Account.findById(accessToken.userId); - const recipient = to.replace('@', ''); - - if (sender.name != recipient) - return sendMessage(sender, to, `@${sender.name}: ${message} `); + return Self.send(ctx, to, message); }; - - async function sendMessage(sender, channel, message) { - const config = await getConfig(); - - const avatar = `${config.host}/avatar/${sender.name}`; - const uri = `${config.api}/chat.postMessage`; - return sendAuth(uri, { - 'channel': channel, - 'avatar': avatar, - 'text': message - }).catch(async error => { - if (error.statusCode === 401 && !this.resendAttempted) { - this.resendAttempted = true; - - return sendMessage(sender, channel, message); - } - - throw new Error(error.message); - }); - } - - /** - * Returns a rocketchat token - * @return {Object} userId and authToken - */ - async function getAuthToken() { - if (!this.auth || this.auth && !this.auth.authToken) { - const config = await getConfig(); - const uri = `${config.api}/login`; - const res = await send(uri, { - user: config.user, - password: config.password - }); - - this.auth = res.data; - } - - return this.auth; - } - - /** - * Returns a rocketchat config - * @return {Object} Auth config - */ - async function getConfig() { - if (!this.chatConfig) { - const models = Self.app.models; - - this.chatConfig = await models.ChatConfig.findOne(); - } - - return this.chatConfig; - } - - /** - * Send unauthenticated request - * @param {*} uri - Request uri - * @param {*} body - Request params - * @param {*} options - Request options - * - * @return {Object} Request response - */ - async function send(uri, body, options) { - if (process.env.NODE_ENV !== 'production') { - return new Promise(resolve => { - return resolve({statusCode: 200, message: 'Fake notification sent'}); - }); - } - - const defaultOptions = { - method: 'POST', - uri: uri, - body: body, - headers: {'content-type': 'application/json'}, - json: true - }; - - if (options) Object.assign(defaultOptions, options); - - return request(defaultOptions); - } - - /** - * Send authenticated request - * @param {*} uri - Request uri - * @param {*} body - Request params - * - * @return {Object} Request response - */ - async function sendAuth(uri, body) { - const login = await getAuthToken(); - const options = { - headers: {'content-type': 'application/json'} - }; - - if (login) { - options.headers['X-Auth-Token'] = login.authToken; - options.headers['X-User-Id'] = login.userId; - } - - return send(uri, body, options); - } }; diff --git a/back/methods/chat/spec/send.spec.js b/back/methods/chat/spec/send.spec.js index ebb62a0c8b..b2585a9a15 100644 --- a/back/methods/chat/spec/send.spec.js +++ b/back/methods/chat/spec/send.spec.js @@ -1,9 +1,9 @@ const app = require('vn-loopback/server/server'); -describe('chat sendMessage()', () => { +describe('chat send()', () => { it('should return a "Fake notification sent" as response', async() => { let ctx = {req: {accessToken: {userId: 1}}}; - let response = await app.models.Chat.sendMessage(ctx, '@salesPerson', 'I changed something'); + let response = await app.models.Chat.send(ctx, '@salesPerson', 'I changed something'); expect(response.statusCode).toEqual(200); expect(response.message).toEqual('Fake notification sent'); @@ -11,7 +11,7 @@ describe('chat sendMessage()', () => { it('should not return a response', async() => { let ctx = {req: {accessToken: {userId: 18}}}; - let response = await app.models.Chat.sendMessage(ctx, '@salesPerson', 'I changed something'); + let response = await app.models.Chat.send(ctx, '@salesPerson', 'I changed something'); expect(response).toBeUndefined(); }); diff --git a/back/methods/chat/spec/sendCheckingPresence.spec.js b/back/methods/chat/spec/sendCheckingPresence.spec.js new file mode 100644 index 0000000000..12a1639621 --- /dev/null +++ b/back/methods/chat/spec/sendCheckingPresence.spec.js @@ -0,0 +1,65 @@ +const app = require('vn-loopback/server/server'); + +describe('chat sendCheckingPresence()', () => { + const departmentId = 23; + const workerId = 107; + let timeEntry; + + afterAll(async done => { + const department = await app.models.Department.findById(departmentId); + await department.updateAttribute('chatName', null); + await app.models.WorkerTimeControl.destroyById(timeEntry.id); + done(); + }); + + it(`should call to send() method with the worker username when no department channel is specified + and then return a "Fake notification sent" as response`, async() => { + const ctx = {req: {accessToken: {userId: 1}}}; + const chatModel = app.models.Chat; + spyOn(chatModel, 'send').and.callThrough(); + + const response = await chatModel.sendCheckingPresence(ctx, workerId, 'I changed something'); + + expect(response.statusCode).toEqual(200); + expect(response.message).toEqual('Fake notification sent'); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@HankPym', 'I changed something'); + }); + + it(`should call to send() method with the worker department channel if is specified + and then return a "Fake notification sent" as response`, async() => { + const ctx = {req: {accessToken: {userId: 1}}}; + const chatModel = app.models.Chat; + spyOn(chatModel, 'send').and.callThrough(); + + const department = await app.models.Department.findById(departmentId); + await department.updateAttribute('chatName', 'cooler'); + + const response = await chatModel.sendCheckingPresence(ctx, workerId, 'I changed something'); + + expect(response.statusCode).toEqual(200); + expect(response.message).toEqual('Fake notification sent'); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '#cooler', 'I changed something'); + }); + + it(`should call to send() method with the worker username when the worker is working`, async() => { + const ctx = {req: {accessToken: {userId: 1}}}; + const chatModel = app.models.Chat; + spyOn(chatModel, 'send').and.callThrough(); + + const today = new Date(); + today.setHours(6, 0); + + timeEntry = await app.models.WorkerTimeControl.create({ + userFk: workerId, + timed: today, + manual: false, + direction: 'in' + }); + + const response = await chatModel.sendCheckingPresence(ctx, workerId, 'I changed something'); + + expect(response.statusCode).toEqual(200); + expect(response.message).toEqual('Fake notification sent'); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@HankPym', 'I changed something'); + }); +}); diff --git a/back/methods/dms/removeFile.js b/back/methods/dms/removeFile.js index 350bea6bcd..93fae9728b 100644 --- a/back/methods/dms/removeFile.js +++ b/back/methods/dms/removeFile.js @@ -22,8 +22,10 @@ module.exports = Self => { Self.removeFile = async(ctx, id) => { const models = Self.app.models; - const trashDmsType = await models.DmsType.findOne({where: {code: 'trash'}}); const dms = await models.Dms.findById(id); + const trashDmsType = await models.DmsType.findOne({ + where: {code: 'trash'} + }); const hasWriteRole = await models.DmsType.hasWriteRole(ctx, dms.dmsTypeFk); if (!hasWriteRole) diff --git a/back/methods/message/send.js b/back/methods/message/send.js deleted file mode 100644 index c8849774b8..0000000000 --- a/back/methods/message/send.js +++ /dev/null @@ -1,48 +0,0 @@ -module.exports = Self => { - Self.remoteMethodCtx('send', { - description: 'Send message to user', - accessType: 'WRITE', - accepts: [{ - arg: 'data', - type: 'object', - required: true, - description: 'recipientFk, message', - http: {source: 'body'} - }, { - arg: 'context', - type: 'object', - http: function(ctx) { - return ctx; - } - }], - returns: { - type: 'boolean', - root: true - }, - http: { - path: `/:recipient/send`, - verb: 'post' - } - }); - - Self.send = async(ctx, data, options) => { - const accessToken = ctx.options && ctx.options.accessToken || ctx.req && ctx.req.accessToken; - const userId = accessToken.userId; - const models = Self.app.models; - const sender = await models.Account.findById(userId, null, options); - const recipient = await models.Account.findById(data.recipientFk, null, options); - - await Self.create({ - sender: sender.name, - recipient: recipient.name, - message: data.message - }, options); - - return await models.MessageInbox.create({ - sender: sender.name, - recipient: recipient.name, - finalRecipient: recipient.name, - message: data.message - }, options); - }; -}; diff --git a/back/methods/message/specs/send.spec.js b/back/methods/message/specs/send.spec.js deleted file mode 100644 index 6749bd7cd6..0000000000 --- a/back/methods/message/specs/send.spec.js +++ /dev/null @@ -1,14 +0,0 @@ -const app = require('vn-loopback/server/server'); - -describe('message send()', () => { - it('should return a response containing the same message in params', async() => { - let ctx = {req: {accessToken: {userId: 1}}}; - let params = { - recipientFk: 1, - message: 'I changed something' - }; - let response = await app.models.Message.send(ctx, params, {transaction: 'You'}); - - expect(response.message).toEqual(params.message); - }); -}); diff --git a/back/model-config.json b/back/model-config.json index a770a200a1..50603be3ff 100644 --- a/back/model-config.json +++ b/back/model-config.json @@ -23,12 +23,6 @@ "Delivery": { "dataSource": "vn" }, - "Message": { - "dataSource": "vn" - }, - "MessageInbox": { - "dataSource": "vn" - }, "Province": { "dataSource": "vn" }, @@ -59,12 +53,6 @@ "Postcode": { "dataSource": "vn" }, - "UserPhoneType": { - "dataSource": "vn" - }, - "UserPhone": { - "dataSource": "vn" - }, "UserLog": { "dataSource": "vn" } diff --git a/back/models/chat.js b/back/models/chat.js index 8086c6d3db..ecd47029cd 100644 --- a/back/models/chat.js +++ b/back/models/chat.js @@ -1,3 +1,5 @@ module.exports = Self => { + require('../methods/chat/send')(Self); require('../methods/chat/sendMessage')(Self); + require('../methods/chat/sendCheckingPresence')(Self); }; diff --git a/back/models/dms.json b/back/models/dms.json index bf6e44311d..1d9e3ec21b 100644 --- a/back/models/dms.json +++ b/back/models/dms.json @@ -3,6 +3,9 @@ "name": "Dms", "description": "Documental Managment system", "base": "VnModel", + "log": { + "showField": "reference" + }, "options": { "mysql": { "table": "dms" diff --git a/back/models/message-inbox.json b/back/models/message-inbox.json deleted file mode 100644 index 238f3e590a..0000000000 --- a/back/models/message-inbox.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "MessageInbox", - "base": "VnModel", - "options": { - "mysql": { - "table": "messageInbox" - } - }, - "properties": { - "id": { - "type": "Number", - "id": true, - "description": "Identifier" - }, - "sender": { - "type": "String", - "required": true - }, - "recipient": { - "type": "String", - "required": true - }, - "finalRecipient": { - "type": "String", - "required": true - }, - "message": { - "type": "String" - } - }, - "relations": { - "remitter": { - "type": "belongsTo", - "model": "User", - "foreignKey": "sender" - }, - "receptor": { - "type": "belongsTo", - "model": "User", - "foreignKey": "recipient" - } - } -} \ No newline at end of file diff --git a/back/models/message.js b/back/models/message.js deleted file mode 100644 index 6a53476f90..0000000000 --- a/back/models/message.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = Self => { - require('../methods/message/send')(Self); -}; diff --git a/back/models/message.json b/back/models/message.json deleted file mode 100644 index 2a855c9079..0000000000 --- a/back/models/message.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "Message", - "base": "VnModel", - "options": { - "mysql": { - "table": "message" - } - }, - "properties": { - "id": { - "type": "Number", - "id": true, - "description": "Identifier" - }, - "sender": { - "type": "String", - "required": true - }, - "recipient": { - "type": "String", - "required": true - }, - "message": { - "type": "String" - } - }, - "relations": { - "remitter": { - "type": "belongsTo", - "model": "User", - "foreignKey": "sender" - }, - "receptor": { - "type": "belongsTo", - "model": "User", - "foreignKey": "recipient" - } - } -} \ No newline at end of file diff --git a/back/models/user-phone-type.json b/back/models/user-phone-type.json deleted file mode 100644 index 9410bd8db2..0000000000 --- a/back/models/user-phone-type.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "UserPhoneType", - "base": "VnModel", - "options": { - "mysql": { - "table": "userPhoneType" - } - }, - "properties": { - "code": { - "id": true, - "type": "String" - }, - "description": { - "type": "String" - } - }, - "acls": [ - { - "accessType": "READ", - "principalType": "ROLE", - "principalId": "$everyone", - "permission": "ALLOW" - } - ] -} diff --git a/back/models/user-phone.js b/back/models/user-phone.js deleted file mode 100644 index 6f6c20049f..0000000000 --- a/back/models/user-phone.js +++ /dev/null @@ -1,9 +0,0 @@ -let UserError = require('vn-loopback/util/user-error'); - -module.exports = Self => { - Self.rewriteDbError(function(err) { - if (err.code === 'ER_DUP_ENTRY') - return new UserError(`This phone already exists`); - return err; - }); -}; diff --git a/back/models/user-phone.json b/back/models/user-phone.json deleted file mode 100644 index f264ff28fa..0000000000 --- a/back/models/user-phone.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "UserPhone", - "base": "Loggable", - "log": { - "model":"UserLog", - "relation": "user" - }, - "options": { - "mysql": { - "table": "userPhone" - } - }, - "properties": { - "id": { - "id": true, - "type": "Number" - }, - "phone": { - "type": "Number", - "required": true - }, - "typeFk": { - "type": "String", - "required": true - } - }, - "relations": { - "user": { - "type": "belongsTo", - "model": "Account", - "foreignKey": "userFk" - }, - "type": { - "type": "belongsTo", - "model": "UserPhoneType", - "foreignKey": "typeFk" - } - } -} diff --git a/db/changes/10140-kings/00-ACL.sql b/db/changes/10140-kings/00-ACL.sql index 7d22bc2708..fa507a3c32 100644 --- a/db/changes/10140-kings/00-ACL.sql +++ b/db/changes/10140-kings/00-ACL.sql @@ -1,3 +1,3 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Thermograph', '*', '*', 'ALLOW', 'ROLE', 'buyer'); INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('TravelThermograph', '*', '*', 'ALLOW', 'ROLE', 'buyer'); - \ No newline at end of file +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Entry', '*', '*', 'ALLOW', 'ROLE', 'buyer'); diff --git a/db/changes/10140-kings/00-department.sql b/db/changes/10140-kings/00-department.sql new file mode 100644 index 0000000000..29008d753e --- /dev/null +++ b/db/changes/10140-kings/00-department.sql @@ -0,0 +1,2 @@ +ALTER TABLE `vn`.`department` +ADD COLUMN `chatName` VARCHAR(45) NULL AFTER `path`; diff --git a/db/changes/10140-kings/00-travelThermograph.sql b/db/changes/10140-kings/00-travelThermograph.sql new file mode 100644 index 0000000000..c19151a45d --- /dev/null +++ b/db/changes/10140-kings/00-travelThermograph.sql @@ -0,0 +1,7 @@ +ALTER TABLE `vn`.`travelThermograph` +ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST, +DROP PRIMARY KEY, +ADD PRIMARY KEY (`id`); + +ALTER TABLE `vn`.`travelThermograph` +ADD UNIQUE INDEX `thermograph_created` (`thermographFk` ASC, `created` ASC) VISIBLE; \ No newline at end of file diff --git a/db/changes/10140-kings/00-weekWaste_getDetail.sql b/db/changes/10140-kings/00-weekWaste_getDetail.sql new file mode 100644 index 0000000000..a7e099f585 --- /dev/null +++ b/db/changes/10140-kings/00-weekWaste_getDetail.sql @@ -0,0 +1,29 @@ +USE `bs`; +DROP procedure IF EXISTS `weekWaste_getDetail`; + +DELIMITER $$ +USE `bs`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `weekWaste_getDetail`() +BEGIN + DECLARE vLastWeek DATE; + DECLARE vWeek INT; + DECLARE vYear INT; + + SET vLastWeek = TIMESTAMPADD(WEEK,-1,CURDATE()); + SET vYear = YEAR(vLastWeek); + SET vWeek = WEEK(vLastWeek, 1); + + SELECT *, 100 * dwindle / total AS percentage + FROM ( + SELECT buyer, + ws.family, + sum(ws.saleTotal) AS total, + sum(ws.saleWaste) AS dwindle + FROM bs.waste ws + WHERE year = vYear AND week = vWeek + GROUP BY buyer, family + ) sub + ORDER BY percentage DESC; +END$$ + +DELIMITER ; diff --git a/db/changes/10140-kings/00-worker_isWorking.sql b/db/changes/10140-kings/00-worker_isWorking.sql new file mode 100644 index 0000000000..b80d287e0a --- /dev/null +++ b/db/changes/10140-kings/00-worker_isWorking.sql @@ -0,0 +1,32 @@ +USE `vn`; +DROP function IF EXISTS `worker_isWorking`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` 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 ; + diff --git a/db/dump/dumpedFixtures.sql b/db/dump/dumpedFixtures.sql index 111b98084c..ecb869fbae 100644 --- a/db/dump/dumpedFixtures.sql +++ b/db/dump/dumpedFixtures.sql @@ -36,7 +36,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `account`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -61,7 +61,7 @@ USE `account`; LOCK TABLES `role` WRITE; /*!40000 ALTER TABLE `role` DISABLE KEYS */; -INSERT INTO `role` VALUES (0,'root','Rol con todos los privilegios',0,'2018-04-23 14:33:36','2018-04-23 14:33:59'),(1,'employee','Empleado básico',1,'2017-05-19 07:04:58','2017-11-29 10:06:31'),(2,'customer','Privilegios básicos de un cliente',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(3,'agency','Consultar tablas de predicciones de bultos',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(5,'administrative','Tareas relacionadas con la contabilidad',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(6,'guest','Privilegios para usuarios sin cuenta',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(9,'developer','Desarrolladores del sistema',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(11,'account','Privilegios relacionados con el login',0,'2017-05-19 07:04:58','2017-09-20 17:06:35'),(13,'teamBoss','Jefe de departamento',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(15,'logistic','Departamento de compras, responsables de la logistica',1,'2017-05-19 07:04:58','2018-02-12 10:50:10'),(16,'logisticBoss','Jefe del departamento de logística',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(17,'adminBoss','Jefe del departamento de administración',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(18,'salesPerson','Departamento de ventas',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(19,'salesBoss','Jefe del departamento de ventas',1,'2017-05-19 07:04:58','2017-08-16 12:38:27'),(20,'manager','Departamento de gerencia',1,'2017-06-01 14:57:02','2017-06-01 14:57:51'),(21,'salesAssistant','Jefe auxiliar de ventas',1,'2017-08-16 12:40:52','2017-08-16 12:40:52'),(22,'teamManager','Jefe de departamento con privilegios de auxiliar de venta.',1,'2017-09-07 09:08:12','2017-09-07 09:08:12'),(30,'financialBoss','Director finaciero',1,'2017-09-21 11:05:36','2017-09-21 11:05:36'),(31,'freelancer','Trabajadores por cuenta ajena',1,'2017-10-10 12:57:26','2017-10-10 12:59:27'),(32,'ett','Trabajadores de empresa temporal',1,'2017-10-10 12:58:58','2017-10-10 12:59:20'),(33,'invoicing','Personal con acceso a facturación',0,'2018-01-29 16:43:34','2018-01-29 16:43:34'),(34,'agencyBoss','Jefe/a del departamento de agencias',1,'2018-01-29 16:44:39','2018-02-23 07:58:53'),(35,'buyer','Departamento de compras',1,'2018-02-12 10:35:42','2018-02-12 10:35:42'),(36,'replenisher','Trabajadores de camara',1,'2018-02-16 14:07:10','2019-04-12 05:38:08'),(37,'hr','Gestor/a de recursos humanos',1,'2018-02-22 17:34:53','2018-02-22 17:34:53'),(38,'hrBoss','Jefe/a de recursos humanos',1,'2018-02-22 17:35:09','2018-02-22 17:35:09'),(39,'adminAssistant','Jefe auxiliar administrativo',1,'2018-02-23 10:37:36','2018-02-23 10:38:41'),(40,'handmade','Departamento de confección',1,'2018-02-23 11:14:53','2018-02-23 11:39:12'),(41,'handmadeBoss','Jefe de departamento de confección',1,'2018-02-23 11:15:09','2018-02-23 11:39:26'),(42,'artificial','Departamento de artificial',1,'2018-02-23 11:39:59','2018-02-23 11:39:59'),(43,'artificialBoss','Jefe del departamento de artificial',1,'2018-02-23 11:40:16','2018-02-23 11:40:16'),(44,'accessory','Departamento de complementos',1,'2018-02-23 11:41:12','2018-02-23 11:41:12'),(45,'accessoryBoss','Jefe del departamento de complementos',1,'2018-02-23 11:41:23','2018-02-23 11:41:23'),(47,'cooler','Empleados de cámara',1,'2018-02-23 13:08:18','2018-02-23 13:08:18'),(48,'coolerBoss','Jefe del departamento de cámara',1,'2018-02-23 13:12:01','2018-02-23 13:12:01'),(49,'production','Empleado de producción',0,'2018-02-26 15:28:23','2019-01-21 12:57:21'),(50,'productionBoss','Jefe de producción',1,'2018-02-26 15:34:12','2018-02-26 15:34:12'),(51,'marketing','Departamento de marketing',1,'2018-03-01 07:28:39','2018-03-01 07:28:39'),(52,'marketingBoss','Jefe del departamento de marketing',1,'2018-03-01 07:28:57','2018-03-01 07:28:57'),(53,'insurance','Gestor de seguros de cambio',0,'2018-03-05 07:44:35','2019-02-01 13:47:57'),(54,'itemPicker','Sacador en cámara',1,'2018-03-05 12:08:17','2018-03-05 12:08:17'),(55,'itemPickerBoss','Jefe de sacadores',1,'2018-03-05 12:08:31','2018-03-05 12:08:31'),(56,'delivery','Personal de reparto',1,'2018-05-30 06:07:02','2018-05-30 06:07:02'),(57,'deliveryBoss','Jefe de personal de reparto',1,'2018-05-30 06:07:19','2018-05-30 06:07:19'),(58,'packager','Departamento encajadores',1,'2019-01-21 12:43:45','2019-01-21 12:43:45'),(59,'packagerBoss','Jefe departamento encajadores',1,'2019-01-21 12:44:10','2019-01-21 12:44:10'),(60,'productionAssi','Tareas relacionadas con producción y administración',1,'2019-01-29 13:29:01','2019-01-29 13:29:01'),(61,'replenisherBos','Jefe de Complementos/Camara',1,'2019-07-01 06:44:07','2019-07-01 06:44:07'),(62,'noLogin','Role without login access to MySQL',0,'2019-07-01 06:50:19','2019-07-02 13:42:05'),(64,'balanceSheet','Consulta de Balance',0,'2019-07-16 12:12:08','2019-07-16 12:12:08'),(65,'officeBoss','Jefe de filial',1,'2019-08-02 06:54:26','2019-08-02 06:54:26'),(66,'sysadmin','Administrador de sistema',1,'2019-08-08 06:58:56','2019-08-08 06:58:56'),(67,'adminOfficer','categoria profesional oficial de administración',1,'2020-01-03 08:09:23','2020-01-03 08:09:23'); +INSERT INTO `role` VALUES (0,'root','Rol con todos los privilegios',0,'2018-04-23 14:33:36','2018-04-23 14:33:59'),(1,'employee','Empleado básico',1,'2017-05-19 07:04:58','2017-11-29 10:06:31'),(2,'customer','Privilegios básicos de un cliente',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(3,'agency','Consultar tablas de predicciones de bultos',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(5,'administrative','Tareas relacionadas con la contabilidad',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(6,'guest','Privilegios para usuarios sin cuenta',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(9,'developer','Desarrolladores del sistema',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(11,'account','Privilegios relacionados con el login',0,'2017-05-19 07:04:58','2017-09-20 17:06:35'),(13,'teamBoss','Jefe de departamento',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(15,'logistic','Departamento de compras, responsables de la logistica',1,'2017-05-19 07:04:58','2018-02-12 10:50:10'),(16,'logisticBoss','Jefe del departamento de logística',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(17,'adminBoss','Jefe del departamento de administración',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(18,'salesPerson','Departamento de ventas',1,'2017-05-19 07:04:58','2017-05-19 07:04:58'),(19,'salesBoss','Jefe del departamento de ventas',1,'2017-05-19 07:04:58','2017-08-16 12:38:27'),(20,'manager','Departamento de gerencia',1,'2017-06-01 14:57:02','2017-06-01 14:57:51'),(21,'salesAssistant','Jefe auxiliar de ventas',1,'2017-08-16 12:40:52','2017-08-16 12:40:52'),(22,'teamManager','Jefe de departamento con privilegios de auxiliar de venta.',1,'2017-09-07 09:08:12','2017-09-07 09:08:12'),(30,'financialBoss','Director finaciero',1,'2017-09-21 11:05:36','2017-09-21 11:05:36'),(31,'freelancer','Trabajadores por cuenta ajena',1,'2017-10-10 12:57:26','2017-10-10 12:59:27'),(32,'ett','Trabajadores de empresa temporal',1,'2017-10-10 12:58:58','2017-10-10 12:59:20'),(33,'invoicing','Personal con acceso a facturación',0,'2018-01-29 16:43:34','2018-01-29 16:43:34'),(34,'agencyBoss','Jefe/a del departamento de agencias',1,'2018-01-29 16:44:39','2018-02-23 07:58:53'),(35,'buyer','Departamento de compras',1,'2018-02-12 10:35:42','2018-02-12 10:35:42'),(36,'replenisher','Trabajadores de camara',1,'2018-02-16 14:07:10','2019-04-12 05:38:08'),(37,'hr','Gestor/a de recursos humanos',1,'2018-02-22 17:34:53','2018-02-22 17:34:53'),(38,'hrBoss','Jefe/a de recursos humanos',1,'2018-02-22 17:35:09','2018-02-22 17:35:09'),(39,'adminAssistant','Jefe auxiliar administrativo',1,'2018-02-23 10:37:36','2018-02-23 10:38:41'),(40,'handmade','Departamento de confección',1,'2018-02-23 11:14:53','2018-02-23 11:39:12'),(41,'handmadeBoss','Jefe de departamento de confección',1,'2018-02-23 11:15:09','2018-02-23 11:39:26'),(42,'artificial','Departamento de artificial',1,'2018-02-23 11:39:59','2018-02-23 11:39:59'),(43,'artificialBoss','Jefe del departamento de artificial',1,'2018-02-23 11:40:16','2018-02-23 11:40:16'),(44,'accessory','Departamento de complementos',1,'2018-02-23 11:41:12','2018-02-23 11:41:12'),(45,'accessoryBoss','Jefe del departamento de complementos',1,'2018-02-23 11:41:23','2018-02-23 11:41:23'),(47,'cooler','Empleados de cámara',1,'2018-02-23 13:08:18','2018-02-23 13:08:18'),(48,'coolerBoss','Jefe del departamento de cámara',1,'2018-02-23 13:12:01','2018-02-23 13:12:01'),(49,'production','Empleado de producción',0,'2018-02-26 15:28:23','2019-01-21 12:57:21'),(50,'productionBoss','Jefe de producción',1,'2018-02-26 15:34:12','2018-02-26 15:34:12'),(51,'marketing','Departamento de marketing',1,'2018-03-01 07:28:39','2018-03-01 07:28:39'),(52,'marketingBoss','Jefe del departamento de marketing',1,'2018-03-01 07:28:57','2018-03-01 07:28:57'),(53,'insurance','Gestor de seguros de cambio',0,'2018-03-05 07:44:35','2019-02-01 13:47:57'),(54,'itemPicker','Sacador en cámara',1,'2018-03-05 12:08:17','2018-03-05 12:08:17'),(55,'itemPickerBoss','Jefe de sacadores',1,'2018-03-05 12:08:31','2018-03-05 12:08:31'),(56,'delivery','Personal de reparto',1,'2018-05-30 06:07:02','2018-05-30 06:07:02'),(57,'deliveryBoss','Jefe de personal de reparto',1,'2018-05-30 06:07:19','2018-05-30 06:07:19'),(58,'packager','Departamento encajadores',1,'2019-01-21 12:43:45','2019-01-21 12:43:45'),(59,'packagerBoss','Jefe departamento encajadores',1,'2019-01-21 12:44:10','2019-01-21 12:44:10'),(60,'productionAssi','Tareas relacionadas con producción y administración',1,'2019-01-29 13:29:01','2019-01-29 13:29:01'),(61,'replenisherBos','Jefe de Complementos/Camara',1,'2019-07-01 06:44:07','2019-07-01 06:44:07'),(62,'noLogin','Role without login access to MySQL',0,'2019-07-01 06:50:19','2019-07-02 13:42:05'),(64,'balanceSheet','Consulta de Balance',0,'2019-07-16 12:12:08','2019-07-16 12:12:08'),(65,'officeBoss','Jefe de filial',1,'2019-08-02 06:54:26','2019-08-02 06:54:26'),(66,'sysadmin','Administrador de sistema',1,'2019-08-08 06:58:56','2019-08-08 06:58:56'),(67,'adminOfficer','categoria profesional oficial de administración',1,'2020-01-03 08:09:23','2020-01-03 08:09:23'),(69,'sAssistantBoss','Jefe de auxiliares de venta',1,'2020-01-14 17:11:56','2020-01-14 17:11:56'); /*!40000 ALTER TABLE `role` ENABLE KEYS */; UNLOCK TABLES; @@ -71,7 +71,7 @@ UNLOCK TABLES; LOCK TABLES `roleInherit` WRITE; /*!40000 ALTER TABLE `roleInherit` DISABLE KEYS */; -INSERT INTO `roleInherit` VALUES (9,0),(66,0),(5,1),(13,1),(18,1),(31,1),(32,1),(34,1),(35,1),(37,1),(40,1),(42,1),(44,1),(47,1),(51,1),(53,1),(54,1),(56,1),(58,1),(1,2),(1,3),(30,5),(39,5),(60,5),(67,5),(11,6),(1,11),(2,11),(3,11),(16,13),(20,13),(21,13),(22,13),(34,13),(41,13),(43,13),(45,13),(48,13),(50,13),(52,13),(55,13),(57,13),(59,13),(61,13),(16,15),(20,16),(21,18),(52,19),(65,19),(17,20),(30,20),(5,21),(19,21),(22,21),(39,21),(30,22),(5,33),(34,33),(15,35),(41,35),(52,35),(65,35),(49,36),(61,36),(17,37),(38,37),(67,37),(17,39),(41,40),(43,42),(36,44),(45,44),(36,47),(48,47),(50,49),(60,50),(65,50),(52,51),(21,53),(30,53),(55,54),(57,56),(15,57),(39,57),(50,57),(60,57),(49,58),(59,58),(50,59),(17,64),(30,64),(38,64),(20,65); +INSERT INTO `roleInherit` VALUES (9,0),(66,0),(5,1),(13,1),(18,1),(31,1),(32,1),(34,1),(35,1),(37,1),(40,1),(42,1),(44,1),(47,1),(51,1),(53,1),(54,1),(56,1),(58,1),(1,2),(1,3),(30,5),(39,5),(60,5),(67,5),(69,5),(11,6),(1,11),(2,11),(3,11),(16,13),(20,13),(21,13),(22,13),(34,13),(41,13),(43,13),(45,13),(48,13),(50,13),(52,13),(55,13),(57,13),(59,13),(61,13),(16,15),(20,16),(21,18),(52,19),(65,19),(17,20),(30,20),(5,21),(19,21),(22,21),(39,21),(69,21),(30,22),(5,33),(34,33),(15,35),(41,35),(52,35),(65,35),(49,36),(61,36),(17,37),(38,37),(60,37),(67,37),(17,39),(41,40),(43,42),(36,44),(45,44),(36,47),(48,47),(50,49),(60,50),(65,50),(52,51),(21,53),(30,53),(55,54),(57,56),(15,57),(39,57),(50,57),(60,57),(49,58),(59,58),(50,59),(17,64),(30,64),(38,64),(20,65); /*!40000 ALTER TABLE `roleInherit` ENABLE KEYS */; UNLOCK TABLES; @@ -81,7 +81,7 @@ UNLOCK TABLES; LOCK TABLES `roleRole` WRITE; /*!40000 ALTER TABLE `roleRole` DISABLE KEYS */; -INSERT INTO `roleRole` VALUES (0,0),(0,1),(0,2),(0,3),(0,5),(0,6),(0,9),(0,11),(0,13),(0,15),(0,16),(0,17),(0,18),(0,19),(0,20),(0,21),(0,22),(0,30),(0,31),(0,32),(0,33),(0,34),(0,35),(0,36),(0,37),(0,38),(0,39),(0,40),(0,41),(0,42),(0,43),(0,44),(0,45),(0,47),(0,48),(0,49),(0,50),(0,51),(0,52),(0,53),(0,54),(0,55),(0,56),(0,57),(0,58),(0,59),(0,60),(0,61),(0,62),(0,64),(0,65),(0,66),(0,67),(1,1),(1,2),(1,3),(1,6),(1,11),(2,2),(2,6),(2,11),(3,3),(3,6),(3,11),(5,1),(5,2),(5,3),(5,5),(5,6),(5,11),(5,13),(5,18),(5,21),(5,33),(5,53),(6,6),(9,0),(9,1),(9,2),(9,3),(9,5),(9,6),(9,9),(9,11),(9,13),(9,15),(9,16),(9,17),(9,18),(9,19),(9,20),(9,21),(9,22),(9,30),(9,31),(9,32),(9,33),(9,34),(9,35),(9,36),(9,37),(9,38),(9,39),(9,40),(9,41),(9,42),(9,43),(9,44),(9,45),(9,47),(9,48),(9,49),(9,50),(9,51),(9,52),(9,53),(9,54),(9,55),(9,56),(9,57),(9,58),(9,59),(9,60),(9,61),(9,62),(9,64),(9,65),(9,66),(9,67),(11,6),(11,11),(13,1),(13,2),(13,3),(13,6),(13,11),(13,13),(15,1),(15,2),(15,3),(15,6),(15,11),(15,13),(15,15),(15,35),(15,56),(15,57),(16,1),(16,2),(16,3),(16,6),(16,11),(16,13),(16,15),(16,16),(16,35),(16,56),(16,57),(17,1),(17,2),(17,3),(17,5),(17,6),(17,11),(17,13),(17,15),(17,16),(17,17),(17,18),(17,19),(17,20),(17,21),(17,33),(17,35),(17,36),(17,37),(17,39),(17,44),(17,47),(17,49),(17,50),(17,53),(17,56),(17,57),(17,58),(17,59),(17,64),(17,65),(18,1),(18,2),(18,3),(18,6),(18,11),(18,18),(19,1),(19,2),(19,3),(19,6),(19,11),(19,13),(19,18),(19,19),(19,21),(19,53),(20,1),(20,2),(20,3),(20,6),(20,11),(20,13),(20,15),(20,16),(20,18),(20,19),(20,20),(20,21),(20,35),(20,36),(20,44),(20,47),(20,49),(20,50),(20,53),(20,56),(20,57),(20,58),(20,59),(20,65),(21,1),(21,2),(21,3),(21,6),(21,11),(21,13),(21,18),(21,21),(21,53),(22,1),(22,2),(22,3),(22,6),(22,11),(22,13),(22,18),(22,21),(22,22),(22,53),(30,1),(30,2),(30,3),(30,5),(30,6),(30,11),(30,13),(30,15),(30,16),(30,18),(30,19),(30,20),(30,21),(30,22),(30,30),(30,33),(30,35),(30,36),(30,44),(30,47),(30,49),(30,50),(30,53),(30,56),(30,57),(30,58),(30,59),(30,64),(30,65),(31,1),(31,2),(31,3),(31,6),(31,11),(31,31),(32,1),(32,2),(32,3),(32,6),(32,11),(32,32),(33,33),(34,1),(34,2),(34,3),(34,6),(34,11),(34,13),(34,33),(34,34),(35,1),(35,2),(35,3),(35,6),(35,11),(35,35),(36,1),(36,2),(36,3),(36,6),(36,11),(36,36),(36,44),(36,47),(37,1),(37,2),(37,3),(37,6),(37,11),(37,37),(38,1),(38,2),(38,3),(38,6),(38,11),(38,37),(38,38),(38,64),(39,1),(39,2),(39,3),(39,5),(39,6),(39,11),(39,13),(39,18),(39,21),(39,33),(39,39),(39,53),(39,56),(39,57),(40,1),(40,2),(40,3),(40,6),(40,11),(40,40),(41,1),(41,2),(41,3),(41,6),(41,11),(41,13),(41,35),(41,40),(41,41),(42,1),(42,2),(42,3),(42,6),(42,11),(42,42),(43,1),(43,2),(43,3),(43,6),(43,11),(43,13),(43,42),(43,43),(44,1),(44,2),(44,3),(44,6),(44,11),(44,44),(45,1),(45,2),(45,3),(45,6),(45,11),(45,13),(45,44),(45,45),(47,1),(47,2),(47,3),(47,6),(47,11),(47,47),(48,1),(48,2),(48,3),(48,6),(48,11),(48,13),(48,47),(48,48),(49,1),(49,2),(49,3),(49,6),(49,11),(49,36),(49,44),(49,47),(49,49),(49,58),(50,1),(50,2),(50,3),(50,6),(50,11),(50,13),(50,36),(50,44),(50,47),(50,49),(50,50),(50,56),(50,57),(50,58),(50,59),(51,1),(51,2),(51,3),(51,6),(51,11),(51,51),(52,1),(52,2),(52,3),(52,6),(52,11),(52,13),(52,18),(52,19),(52,21),(52,35),(52,51),(52,52),(52,53),(53,1),(53,2),(53,3),(53,6),(53,11),(53,53),(54,1),(54,2),(54,3),(54,6),(54,11),(54,54),(55,1),(55,2),(55,3),(55,6),(55,11),(55,13),(55,54),(55,55),(56,1),(56,2),(56,3),(56,6),(56,11),(56,56),(57,1),(57,2),(57,3),(57,6),(57,11),(57,13),(57,56),(57,57),(58,1),(58,2),(58,3),(58,6),(58,11),(58,58),(59,1),(59,2),(59,3),(59,6),(59,11),(59,13),(59,58),(59,59),(60,1),(60,2),(60,3),(60,5),(60,6),(60,11),(60,13),(60,18),(60,21),(60,33),(60,36),(60,44),(60,47),(60,49),(60,50),(60,53),(60,56),(60,57),(60,58),(60,59),(60,60),(61,1),(61,2),(61,3),(61,6),(61,11),(61,13),(61,36),(61,44),(61,47),(61,61),(62,62),(64,64),(65,1),(65,2),(65,3),(65,6),(65,11),(65,13),(65,18),(65,19),(65,21),(65,35),(65,36),(65,44),(65,47),(65,49),(65,50),(65,53),(65,56),(65,57),(65,58),(65,59),(65,65),(66,0),(66,1),(66,2),(66,3),(66,5),(66,6),(66,9),(66,11),(66,13),(66,15),(66,16),(66,17),(66,18),(66,19),(66,20),(66,21),(66,22),(66,30),(66,31),(66,32),(66,33),(66,34),(66,35),(66,36),(66,37),(66,38),(66,39),(66,40),(66,41),(66,42),(66,43),(66,44),(66,45),(66,47),(66,48),(66,49),(66,50),(66,51),(66,52),(66,53),(66,54),(66,55),(66,56),(66,57),(66,58),(66,59),(66,60),(66,61),(66,62),(66,64),(66,65),(66,66),(66,67),(67,1),(67,2),(67,3),(67,5),(67,6),(67,11),(67,13),(67,18),(67,21),(67,33),(67,37),(67,53),(67,67); +INSERT INTO `roleRole` VALUES (0,0),(0,1),(0,2),(0,3),(0,5),(0,6),(0,9),(0,11),(0,13),(0,15),(0,16),(0,17),(0,18),(0,19),(0,20),(0,21),(0,22),(0,30),(0,31),(0,32),(0,33),(0,34),(0,35),(0,36),(0,37),(0,38),(0,39),(0,40),(0,41),(0,42),(0,43),(0,44),(0,45),(0,47),(0,48),(0,49),(0,50),(0,51),(0,52),(0,53),(0,54),(0,55),(0,56),(0,57),(0,58),(0,59),(0,60),(0,61),(0,62),(0,64),(0,65),(0,66),(0,67),(0,69),(1,1),(1,2),(1,3),(1,6),(1,11),(2,2),(2,6),(2,11),(3,3),(3,6),(3,11),(5,1),(5,2),(5,3),(5,5),(5,6),(5,11),(5,13),(5,18),(5,21),(5,33),(5,53),(6,6),(9,0),(9,1),(9,2),(9,3),(9,5),(9,6),(9,9),(9,11),(9,13),(9,15),(9,16),(9,17),(9,18),(9,19),(9,20),(9,21),(9,22),(9,30),(9,31),(9,32),(9,33),(9,34),(9,35),(9,36),(9,37),(9,38),(9,39),(9,40),(9,41),(9,42),(9,43),(9,44),(9,45),(9,47),(9,48),(9,49),(9,50),(9,51),(9,52),(9,53),(9,54),(9,55),(9,56),(9,57),(9,58),(9,59),(9,60),(9,61),(9,62),(9,64),(9,65),(9,66),(9,67),(9,69),(11,6),(11,11),(13,1),(13,2),(13,3),(13,6),(13,11),(13,13),(15,1),(15,2),(15,3),(15,6),(15,11),(15,13),(15,15),(15,35),(15,56),(15,57),(16,1),(16,2),(16,3),(16,6),(16,11),(16,13),(16,15),(16,16),(16,35),(16,56),(16,57),(17,1),(17,2),(17,3),(17,5),(17,6),(17,11),(17,13),(17,15),(17,16),(17,17),(17,18),(17,19),(17,20),(17,21),(17,33),(17,35),(17,36),(17,37),(17,39),(17,44),(17,47),(17,49),(17,50),(17,53),(17,56),(17,57),(17,58),(17,59),(17,64),(17,65),(18,1),(18,2),(18,3),(18,6),(18,11),(18,18),(19,1),(19,2),(19,3),(19,6),(19,11),(19,13),(19,18),(19,19),(19,21),(19,53),(20,1),(20,2),(20,3),(20,6),(20,11),(20,13),(20,15),(20,16),(20,18),(20,19),(20,20),(20,21),(20,35),(20,36),(20,44),(20,47),(20,49),(20,50),(20,53),(20,56),(20,57),(20,58),(20,59),(20,65),(21,1),(21,2),(21,3),(21,6),(21,11),(21,13),(21,18),(21,21),(21,53),(22,1),(22,2),(22,3),(22,6),(22,11),(22,13),(22,18),(22,21),(22,22),(22,53),(30,1),(30,2),(30,3),(30,5),(30,6),(30,11),(30,13),(30,15),(30,16),(30,18),(30,19),(30,20),(30,21),(30,22),(30,30),(30,33),(30,35),(30,36),(30,44),(30,47),(30,49),(30,50),(30,53),(30,56),(30,57),(30,58),(30,59),(30,64),(30,65),(31,1),(31,2),(31,3),(31,6),(31,11),(31,31),(32,1),(32,2),(32,3),(32,6),(32,11),(32,32),(33,33),(34,1),(34,2),(34,3),(34,6),(34,11),(34,13),(34,33),(34,34),(35,1),(35,2),(35,3),(35,6),(35,11),(35,35),(36,1),(36,2),(36,3),(36,6),(36,11),(36,36),(36,44),(36,47),(37,1),(37,2),(37,3),(37,6),(37,11),(37,37),(38,1),(38,2),(38,3),(38,6),(38,11),(38,37),(38,38),(38,64),(39,1),(39,2),(39,3),(39,5),(39,6),(39,11),(39,13),(39,18),(39,21),(39,33),(39,39),(39,53),(39,56),(39,57),(40,1),(40,2),(40,3),(40,6),(40,11),(40,40),(41,1),(41,2),(41,3),(41,6),(41,11),(41,13),(41,35),(41,40),(41,41),(42,1),(42,2),(42,3),(42,6),(42,11),(42,42),(43,1),(43,2),(43,3),(43,6),(43,11),(43,13),(43,42),(43,43),(44,1),(44,2),(44,3),(44,6),(44,11),(44,44),(45,1),(45,2),(45,3),(45,6),(45,11),(45,13),(45,44),(45,45),(47,1),(47,2),(47,3),(47,6),(47,11),(47,47),(48,1),(48,2),(48,3),(48,6),(48,11),(48,13),(48,47),(48,48),(49,1),(49,2),(49,3),(49,6),(49,11),(49,36),(49,44),(49,47),(49,49),(49,58),(50,1),(50,2),(50,3),(50,6),(50,11),(50,13),(50,36),(50,44),(50,47),(50,49),(50,50),(50,56),(50,57),(50,58),(50,59),(51,1),(51,2),(51,3),(51,6),(51,11),(51,51),(52,1),(52,2),(52,3),(52,6),(52,11),(52,13),(52,18),(52,19),(52,21),(52,35),(52,51),(52,52),(52,53),(53,1),(53,2),(53,3),(53,6),(53,11),(53,53),(54,1),(54,2),(54,3),(54,6),(54,11),(54,54),(55,1),(55,2),(55,3),(55,6),(55,11),(55,13),(55,54),(55,55),(56,1),(56,2),(56,3),(56,6),(56,11),(56,56),(57,1),(57,2),(57,3),(57,6),(57,11),(57,13),(57,56),(57,57),(58,1),(58,2),(58,3),(58,6),(58,11),(58,58),(59,1),(59,2),(59,3),(59,6),(59,11),(59,13),(59,58),(59,59),(60,1),(60,2),(60,3),(60,5),(60,6),(60,11),(60,13),(60,18),(60,21),(60,33),(60,36),(60,37),(60,44),(60,47),(60,49),(60,50),(60,53),(60,56),(60,57),(60,58),(60,59),(60,60),(61,1),(61,2),(61,3),(61,6),(61,11),(61,13),(61,36),(61,44),(61,47),(61,61),(62,62),(64,64),(65,1),(65,2),(65,3),(65,6),(65,11),(65,13),(65,18),(65,19),(65,21),(65,35),(65,36),(65,44),(65,47),(65,49),(65,50),(65,53),(65,56),(65,57),(65,58),(65,59),(65,65),(66,0),(66,1),(66,2),(66,3),(66,5),(66,6),(66,9),(66,11),(66,13),(66,15),(66,16),(66,17),(66,18),(66,19),(66,20),(66,21),(66,22),(66,30),(66,31),(66,32),(66,33),(66,34),(66,35),(66,36),(66,37),(66,38),(66,39),(66,40),(66,41),(66,42),(66,43),(66,44),(66,45),(66,47),(66,48),(66,49),(66,50),(66,51),(66,52),(66,53),(66,54),(66,55),(66,56),(66,57),(66,58),(66,59),(66,60),(66,61),(66,62),(66,64),(66,65),(66,66),(66,67),(66,69),(67,1),(67,2),(67,3),(67,5),(67,6),(67,11),(67,13),(67,18),(67,21),(67,33),(67,37),(67,53),(67,67),(69,1),(69,2),(69,3),(69,5),(69,6),(69,11),(69,13),(69,18),(69,21),(69,33),(69,53),(69,69); /*!40000 ALTER TABLE `roleRole` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -94,7 +94,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `salix`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -142,7 +142,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `vn`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -177,7 +177,7 @@ UNLOCK TABLES; LOCK TABLES `bookingPlanner` WRITE; /*!40000 ALTER TABLE `bookingPlanner` DISABLE KEYS */; -INSERT INTO `bookingPlanner` VALUES (5,'2017-06-30 22:00:00','4770000002','WORLD',1,4,1),(6,'2017-06-30 22:00:00','4770000010','NATIONAL',2,1,1),(8,'2017-06-30 22:00:00','4770000021','NATIONAL',3,2,1),(9,'2017-06-30 22:00:00','4770000101','EQU',3,1,1),(11,'2017-06-30 22:00:00','4770000110','EQU',2,1,1),(12,'2017-06-30 22:00:00','4770000215','EQU',4,2,1),(13,'2017-06-30 22:00:00','4770000521','EQU',5,2,1),(15,'2017-06-30 22:00:00','4771000000','CEE',2,1,1),(16,'2017-06-30 22:00:00','4771000001','CEE',5,3,1),(19,'2017-07-05 11:54:58','4770000020','NATIONAL',1,4,1),(20,'2017-07-05 12:09:24','4771000000','CEE',3,2,1),(21,'2017-07-05 12:09:24','4771000000','CEE',1,4,1),(22,'2017-07-05 12:12:14','4770000002','WORLD',2,1,1),(23,'2017-07-05 12:12:14','4770000002','WORLD',3,2,1),(24,'2017-07-06 08:07:21','4770000002','WORLD',1,4,5),(25,'2017-07-06 08:07:21','HolandaRED','NATIONAL',2,1,5),(27,'2017-07-06 08:07:21','HolandaGEN','NATIONAL',3,2,5),(32,'2017-07-06 08:07:21','4771000000','CEE',2,1,5),(33,'2017-07-06 08:07:21','4771000001','CEE',5,3,5),(34,'2017-07-06 08:07:21','4770000020','NATIONAL',1,4,5),(35,'2017-07-06 08:07:21','4771000000','CEE',3,2,5),(36,'2017-07-06 08:07:21','4771000000','CEE',1,4,5),(37,'2017-07-06 08:07:21','4770000002','WORLD',2,1,5),(38,'2017-07-06 08:07:21','4770000002','WORLD',3,2,5),(70,'2017-07-06 08:08:48','4770000002','WORLD',1,4,30),(71,'2017-07-06 08:08:48','IGIC reduc','NATIONAL',2,1,30),(72,'2017-07-06 08:08:48','4770000020','NATIONAL',1,4,30),(73,'2017-07-06 08:08:48','IGIC gener','NATIONAL',3,2,30),(78,'2017-07-06 08:08:48','4770000020','NATIONAL',1,4,30),(79,'2017-07-06 08:08:48','4770000002','WORLD',2,1,30),(80,'2017-07-06 08:08:48','4770000002','WORLD',3,2,30),(81,'2017-07-05 22:00:00','IGIC cero','NATIONAL',1,5,30),(82,'2019-01-01 11:51:56','4770000504','EQU',10,5,1),(83,'2019-09-11 10:54:03','4770000405','EQU',11,5,1),(84,'2019-09-11 10:58:17','4770000004','NATIONAL',9,5,1),(85,'2019-09-18 22:00:00','4771000000','CEE',6,5,1); +INSERT INTO `bookingPlanner` VALUES (5,'2017-06-30 22:00:00','4770000002','WORLD',7,4,1),(6,'2017-06-30 22:00:00','4770000010','NATIONAL',3,1,1),(8,'2017-06-30 22:00:00','4770000021','NATIONAL',1,2,1),(9,'2017-06-30 22:00:00','4770000101','EQU',3,1,1),(11,'2017-06-30 22:00:00','4770000110','EQU',4,1,1),(12,'2017-06-30 22:00:00','4770000215','EQU',1,2,1),(13,'2017-06-30 22:00:00','4770000521','EQU',2,2,1),(15,'2017-06-30 22:00:00','4771000000','CEE',3,1,1),(16,'2017-06-30 22:00:00','4771000001','CEE',8,3,1),(19,'2017-07-05 11:54:58','4770000020','NATIONAL',7,4,1),(20,'2017-07-05 12:09:24','4771000000','CEE',1,2,1),(21,'2017-07-05 12:09:24','4771000000','CEE',7,4,1),(22,'2017-07-05 12:12:14','4770000002','WORLD',3,1,1),(23,'2017-07-05 12:12:14','4770000002','WORLD',1,2,1),(24,'2017-07-06 08:07:21','4770000002','WORLD',7,4,5),(25,'2017-07-06 08:07:21','HolandaRED','NATIONAL',3,1,5),(27,'2017-07-06 08:07:21','HolandaGEN','NATIONAL',1,2,5),(32,'2017-07-06 08:07:21','4771000000','CEE',3,1,5),(33,'2017-07-06 08:07:21','4771000001','CEE',8,3,5),(34,'2017-07-06 08:07:21','4770000020','NATIONAL',7,4,5),(35,'2017-07-06 08:07:21','4771000000','CEE',1,2,5),(36,'2017-07-06 08:07:21','4771000000','CEE',7,4,5),(37,'2017-07-06 08:07:21','4770000002','WORLD',3,1,5),(38,'2017-07-06 08:07:21','4770000002','WORLD',1,2,5),(70,'2017-07-06 08:08:48','4770000002','WORLD',7,4,30),(71,'2017-07-06 08:08:48','IGIC reduc','NATIONAL',3,1,30),(72,'2017-07-06 08:08:48','4770000020','NATIONAL',7,4,30),(73,'2017-07-06 08:08:48','IGIC gener','NATIONAL',1,2,30),(78,'2017-07-06 08:08:48','4770000020','NATIONAL',7,4,30),(79,'2017-07-06 08:08:48','4770000002','WORLD',3,1,30),(80,'2017-07-06 08:08:48','4770000002','WORLD',1,2,30),(81,'2017-07-05 22:00:00','IGIC cero','NATIONAL',5,5,30),(82,'2019-01-01 11:51:56','4770000504','EQU',5,5,1),(83,'2019-09-11 10:54:03','4770000405','EQU',6,5,1),(84,'2019-09-11 10:58:17','4770000004','NATIONAL',5,5,1),(85,'2019-09-18 22:00:00','4771000000','CEE',5,5,1); /*!40000 ALTER TABLE `bookingPlanner` ENABLE KEYS */; UNLOCK TABLES; @@ -227,7 +227,7 @@ UNLOCK TABLES; LOCK TABLES `tag` WRITE; /*!40000 ALTER TABLE `tag` DISABLE KEYS */; -INSERT INTO `tag` VALUES (1,'color','Color',0,0,'ink',NULL,NULL),(2,'','Forma',1,0,NULL,NULL,NULL),(3,'','Material',1,0,NULL,NULL,NULL),(4,'','Longitud',1,1,NULL,'mm',NULL),(5,'','Diámetro',1,1,NULL,'mm',NULL),(6,'','Perímetro',1,1,NULL,'mm',NULL),(7,'','Ancho de la base',1,1,NULL,'mm',NULL),(8,'','Altura',1,1,NULL,'mm',NULL),(9,'','Volumen',1,1,NULL,'ml',NULL),(10,'','Densidad',1,1,NULL,NULL,NULL),(11,'','Calidad',1,0,NULL,NULL,NULL),(12,'','Textura',1,0,NULL,NULL,NULL),(13,'','Material del mango',1,0,NULL,NULL,NULL),(14,'','Compra mínima',1,0,NULL,NULL,NULL),(15,'','Nº pétalos',1,1,NULL,NULL,NULL),(16,'','Ancho',1,1,NULL,'mm',NULL),(18,'','Profundidad',1,1,NULL,'mm',NULL),(19,'','Largo',1,1,NULL,'mm',NULL),(20,'','Ancho superior',1,1,NULL,'mm',NULL),(21,'','Ancho inferior',1,1,NULL,'mm',NULL),(22,'','Gramaje',1,1,NULL,'g',NULL),(23,'stems','Tallos',1,1,NULL,NULL,NULL),(24,'','Estado',1,0,NULL,NULL,NULL),(25,'','Color principal',0,0,'ink',NULL,NULL),(26,'','Color secundario',0,0,'ink',NULL,NULL),(27,'','Longitud(cm)',1,1,NULL,'cm',NULL),(28,'','Diámetro base',1,1,'','mm',NULL),(29,'','Colección',1,0,NULL,NULL,NULL),(30,'','Uds / caja',1,1,NULL,NULL,NULL),(31,'','Contenido',1,0,NULL,NULL,NULL),(32,'','Peso',1,1,NULL,'g',NULL),(33,'','Grosor',1,1,NULL,'mm',NULL),(34,'','Marca',1,0,NULL,NULL,NULL),(35,'origin','Origen',0,0,'origin',NULL,NULL),(36,'','Proveedor',1,0,NULL,NULL,NULL),(37,'producer','Productor',0,0,'producer',NULL,NULL),(38,'','Duración',1,1,NULL,'s',NULL),(39,'','Flor',1,0,NULL,NULL,NULL),(40,'','Soporte',1,0,NULL,NULL,NULL),(41,'','Tamaño flor',1,0,NULL,NULL,NULL),(42,'','Apertura',1,0,NULL,NULL,NULL),(43,'','Tallo',1,0,NULL,NULL,NULL),(44,'','Nº hojas',1,1,NULL,NULL,NULL),(45,'','Dimensiones',1,0,NULL,NULL,NULL),(46,'','Diámetro boca',1,1,NULL,'mm',NULL),(47,'','Nº flores',1,1,NULL,NULL,NULL),(48,'','Uds / paquete',1,1,NULL,NULL,NULL),(49,'','Maceta',1,1,NULL,'cm',NULL),(50,'','Textura flor',1,0,NULL,NULL,NULL),(51,'','Textura hoja',1,0,NULL,NULL,NULL),(52,'','Tipo de IVA',1,0,NULL,NULL,NULL),(53,'','Tronco',1,0,NULL,NULL,NULL),(54,'','Hoja',1,0,NULL,NULL,NULL),(55,'','Formato',1,0,NULL,NULL,NULL),(56,'','Genero',1,0,NULL,NULL,NULL),(57,'','Especie',1,0,NULL,NULL,NULL),(58,'','Variedad',1,0,NULL,NULL,NULL),(59,'','Medida grande',1,0,NULL,NULL,NULL),(60,'','Medida mediano',1,0,NULL,NULL,NULL),(61,'','Medida pequeño',1,0,NULL,NULL,NULL),(62,'','Medida pequeño',1,0,NULL,NULL,NULL),(63,'','Recipiente interior',1,0,NULL,NULL,NULL),(64,'','Material secundario',1,0,NULL,NULL,NULL),(65,'','Colores',1,0,NULL,NULL,NULL),(66,'','Referencia',1,0,NULL,NULL,NULL),(67,'','Categoria',1,0,NULL,NULL,NULL),(68,'','Amb',1,0,NULL,NULL,NULL),(69,'','Anchura',1,1,NULL,'cm',NULL),(70,'','Hueco interior',1,0,NULL,NULL,NULL),(71,'','Tamaño',1,0,NULL,NULL,NULL),(72,'','Color botón',1,0,NULL,NULL,NULL),(73,'','Tamaño minimo del botón',1,0,NULL,NULL,NULL),(74,'','Obtentor',1,0,NULL,NULL,NULL),(75,'','Longitud del brote',1,0,NULL,NULL,NULL),(76,'','Tallos / u.v.',1,0,NULL,NULL,NULL),(77,'','Madera de',1,0,NULL,NULL,NULL),(78,'','Unidad de venta',1,0,NULL,NULL,NULL),(79,'','Temporal',1,0,NULL,NULL,NULL),(80,'','Gramaje/tallo',1,1,NULL,'g',NULL),(81,'','Peso/paquete',1,1,NULL,'g',NULL),(82,'','Flexibilidad del tallo',1,0,NULL,NULL,NULL),(83,'','Nº planchas',1,1,NULL,NULL,NULL),(84,'','Nº páginas',1,1,NULL,NULL,NULL),(85,'','Editorial',1,0,NULL,NULL,NULL),(86,'','Idioma',1,0,NULL,NULL,NULL),(87,'','Fecha publicación',1,0,NULL,NULL,NULL),(88,'','Cubierta',1,0,NULL,NULL,NULL),(89,'','Encuadernación',1,0,NULL,NULL,NULL),(90,'','Autor',1,0,NULL,NULL,NULL),(91,'','Envoltorio',1,0,NULL,NULL,NULL),(92,'','Nombre temporal',1,0,NULL,NULL,NULL),(93,'','Modelo',1,0,NULL,NULL,NULL),(94,'','Producto',1,0,NULL,NULL,NULL),(95,'','Título',1,0,NULL,NULL,NULL),(96,'','Tomo',1,0,NULL,NULL,NULL),(97,'','Articulo',1,0,NULL,NULL,NULL),(98,'','Metodo de cultivo',1,0,NULL,NULL,NULL),(99,'','Edad',1,0,NULL,NULL,NULL),(100,'','Agotado',1,0,NULL,NULL,NULL),(101,'','Altura con asa',1,1,NULL,'cm',NULL),(102,'','Nº tallos',1,1,NULL,NULL,NULL),(103,'','Cultivo',1,0,NULL,NULL,NULL),(104,'','Sabor',1,0,NULL,NULL,NULL),(105,'','Talla',1,0,NULL,NULL,NULL),(106,'','Calibre',1,1,NULL,NULL,NULL),(107,'','Dulzura',1,1,NULL,'bx',NULL),(108,'','Piezas',1,0,NULL,NULL,NULL),(109,'','Altura con patas',1,0,NULL,NULL,NULL),(110,'','Envase',1,0,NULL,NULL,NULL); +INSERT INTO `tag` VALUES (1,'color','Color',0,0,'ink',NULL,NULL),(2,'','Forma',1,0,NULL,NULL,NULL),(3,'','Material',1,0,NULL,NULL,NULL),(4,'','Longitud',1,1,NULL,'mm',NULL),(5,'','Diámetro',1,1,NULL,'mm',NULL),(6,'','Perímetro',1,1,NULL,'mm',NULL),(7,'','Ancho de la base',1,1,NULL,'mm',NULL),(8,'','Altura',1,1,NULL,'mm',NULL),(9,'','Volumen',1,1,NULL,'ml',NULL),(10,'','Densidad',1,1,NULL,NULL,NULL),(11,'','Calidad',1,0,NULL,NULL,NULL),(12,'','Textura',1,0,NULL,NULL,NULL),(13,'','Material del mango',1,0,NULL,NULL,NULL),(14,'','Compra mínima',1,0,NULL,NULL,NULL),(15,'','Nº pétalos',1,1,NULL,NULL,NULL),(16,'','Ancho',1,1,NULL,'mm',NULL),(18,'','Profundidad',1,1,NULL,'mm',NULL),(19,'','Largo',1,1,NULL,'mm',NULL),(20,'','Ancho superior',1,1,NULL,'mm',NULL),(21,'','Ancho inferior',1,1,NULL,'mm',NULL),(22,'','Gramaje',1,1,NULL,'g',NULL),(23,'stems','Tallos',1,1,NULL,NULL,NULL),(24,'','Estado',1,0,NULL,NULL,NULL),(25,'','Color principal',0,0,'ink',NULL,NULL),(26,'','Color secundario',0,0,'ink',NULL,NULL),(27,'','Longitud(cm)',1,1,NULL,'cm',NULL),(28,'','Diámetro base',1,1,'','mm',NULL),(29,'','Colección',1,0,NULL,NULL,NULL),(30,'','Uds / caja',1,1,NULL,NULL,NULL),(31,'','Contenido',1,0,NULL,NULL,NULL),(32,'','Peso',1,1,NULL,'g',NULL),(33,'','Grosor',1,1,NULL,'mm',NULL),(34,'','Marca',1,0,NULL,NULL,NULL),(35,'origin','Origen',0,0,'origin',NULL,NULL),(36,'','Proveedor',1,0,NULL,NULL,NULL),(37,'producer','Productor',0,0,'producer',NULL,NULL),(38,'','Duración',1,1,NULL,'s',NULL),(39,'','Flor',1,0,NULL,NULL,NULL),(40,'','Soporte',1,0,NULL,NULL,NULL),(41,'','Tamaño flor',1,0,NULL,NULL,NULL),(42,'','Apertura',1,0,NULL,NULL,NULL),(43,'','Tallo',1,0,NULL,NULL,NULL),(44,'','Nº hojas',1,1,NULL,NULL,NULL),(45,'','Dimensiones',1,0,NULL,NULL,NULL),(46,'','Diámetro boca',1,1,NULL,'mm',NULL),(47,'','Nº flores',1,1,NULL,NULL,NULL),(48,'','Uds / paquete',1,1,NULL,NULL,NULL),(49,'','Maceta',1,1,NULL,'cm',NULL),(50,'','Textura flor',1,0,NULL,NULL,NULL),(51,'','Textura hoja',1,0,NULL,NULL,NULL),(52,'','Tipo de IVA',1,0,NULL,NULL,NULL),(53,'','Tronco',1,0,NULL,NULL,NULL),(54,'','Hoja',1,0,NULL,NULL,NULL),(55,'','Formato',1,0,NULL,NULL,NULL),(56,'','Genero',1,0,NULL,NULL,NULL),(57,'','Especie',1,0,NULL,NULL,NULL),(58,'','Variedad',1,0,NULL,NULL,NULL),(59,'','Medida grande',1,0,NULL,NULL,NULL),(60,'','Medida mediano',1,0,NULL,NULL,NULL),(61,'','Medida pequeño',1,0,NULL,NULL,NULL),(62,'','Medida pequeño',1,0,NULL,NULL,NULL),(63,'','Recipiente interior',1,0,NULL,NULL,NULL),(64,'','Material secundario',1,0,NULL,NULL,NULL),(65,'','Colores',1,0,NULL,NULL,NULL),(66,'','Referencia',1,0,NULL,NULL,NULL),(67,'','Categoria',1,0,NULL,NULL,NULL),(68,'','Amb',1,0,NULL,NULL,NULL),(69,'','Anchura',1,1,NULL,'cm',NULL),(70,'','Hueco interior',1,0,NULL,NULL,NULL),(71,'','Tamaño',1,0,NULL,NULL,NULL),(72,'','Color botón',1,0,NULL,NULL,NULL),(73,'','Tamaño minimo del botón',1,0,NULL,NULL,NULL),(74,'','Obtentor',1,0,NULL,NULL,NULL),(75,'','Longitud del brote',1,0,NULL,NULL,NULL),(76,'','Tallos / u.v.',1,0,NULL,NULL,NULL),(77,'','Madera de',1,0,NULL,NULL,NULL),(78,'','Unidad de venta',1,0,NULL,NULL,NULL),(79,'','Temporal',1,0,NULL,NULL,NULL),(80,'','Gramaje/tallo',1,1,NULL,'g',NULL),(81,'','Peso/paquete',1,1,NULL,'g',NULL),(82,'','Flexibilidad del tallo',1,0,NULL,NULL,NULL),(83,'','Nº planchas',1,1,NULL,NULL,NULL),(84,'','Nº páginas',1,1,NULL,NULL,NULL),(85,'','Editorial',1,0,NULL,NULL,NULL),(86,'','Idioma',1,0,NULL,NULL,NULL),(87,'','Fecha publicación',1,0,NULL,NULL,NULL),(88,'','Cubierta',1,0,NULL,NULL,NULL),(89,'','Encuadernación',1,0,NULL,NULL,NULL),(90,'','Autor',1,0,NULL,NULL,NULL),(91,'','Envoltorio',1,0,NULL,NULL,NULL),(92,'','Nombre temporal',1,0,NULL,NULL,NULL),(93,'','Modelo',1,0,NULL,NULL,NULL),(94,'','Producto',1,0,NULL,NULL,NULL),(95,'','Título',1,0,NULL,NULL,NULL),(96,'','Tomo',1,0,NULL,NULL,NULL),(97,'','Articulo',1,0,NULL,NULL,NULL),(98,'','Metodo de cultivo',1,0,NULL,NULL,NULL),(99,'','Edad',1,0,NULL,NULL,NULL),(100,'','Agotado',1,0,NULL,NULL,NULL),(101,'','Altura con asa',1,1,NULL,'cm',NULL),(102,'','Nº tallos',1,1,NULL,NULL,NULL),(103,'','Cultivo',1,0,NULL,NULL,NULL),(104,'','Sabor',1,0,NULL,NULL,NULL),(105,'','Talla',1,0,NULL,NULL,NULL),(106,'','Calibre',1,1,NULL,NULL,NULL),(107,'','Dulzura',1,1,NULL,'bx',NULL),(108,'','Piezas',1,0,NULL,NULL,NULL),(109,'','Altura con patas',1,0,NULL,NULL,NULL),(110,'','Envase',1,0,NULL,NULL,NULL),(111,'','Nº piezas',1,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `tag` ENABLE KEYS */; UNLOCK TABLES; @@ -287,7 +287,7 @@ UNLOCK TABLES; LOCK TABLES `state` WRITE; /*!40000 ALTER TABLE `state` DISABLE KEYS */; -INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',NULL,1,0,0,0,0),(2,'Libre',1,0,'FREE',NULL,2,0,0,0,0),(3,'OK',3,0,'OK',3,28,1,0,0,0),(4,'Impreso',4,1,'PRINTED',2,29,1,0,1,0),(5,'Preparación',5,1,'ON_PREPARATION',7,5,0,0,0,2),(6,'En Revisión',7,1,'ON_CHECKING',NULL,6,0,1,0,3),(7,'Sin Acabar',2,0,'NOT_READY',NULL,7,0,0,0,0),(8,'Revisado',8,1,'CHECKED',NULL,8,0,1,0,3),(9,'Encajando',9,2,'PACKING',NULL,9,0,1,0,0),(10,'Encajado',10,2,'PACKED',NULL,10,0,1,0,0),(11,'Facturado',0,0,'INVOICED',NULL,11,0,1,0,0),(12,'Bloqueado',0,0,'BLOCKED',NULL,12,0,0,0,0),(13,'En Reparto',11,3,'ON_DELIVERY',NULL,13,0,1,0,0),(14,'Preparado',6,1,'PREPARED',NULL,14,0,1,0,2),(15,'Pte Recogida',12,3,'WAITING_FOR_PICKUP',NULL,15,0,1,0,0),(16,'Entregado',13,3,'DELIVERED',NULL,16,0,1,0,0),(17,'Eliminado',14,3,'ERASED',NULL,17,0,0,0,0),(20,'Asignado',4,1,'PICKER_DESIGNED',NULL,20,1,0,0,0),(21,'Retornado',4,1,'PRINTED_BACK',6,21,0,0,0,0),(22,'¿Fecha?',2,0,'WRONG_DATE',NULL,22,0,0,0,0),(23,'URGENTE',2,0,'LAST_CALL',NULL,23,1,0,0,0),(24,'Encadenado',3,0,'CHAINED',4,24,0,0,0,0),(25,'Embarcando',3,0,'BOARDING',5,25,0,0,0,0),(26,'Prep Previa',5,1,'PREVIOUS_PREPARATION',1,26,0,0,0,1),(27,'Prep Asistida',5,1,'ASSISTED_PREPARATION',7,27,0,0,0,0),(28,'Previa OK',3,1,'OK PREVIOUS',3,28,1,0,0,1),(29,'Previa Impreso',4,1,'PRINTED PREVIOUS',2,29,1,0,1,1); +INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',NULL,1,0,0,0,0),(2,'Libre',1,0,'FREE',NULL,2,0,0,0,0),(3,'OK',3,0,'OK',3,28,1,0,0,0),(4,'Impreso',4,1,'PRINTED',2,29,1,0,1,0),(5,'Preparación',5,1,'ON_PREPARATION',7,5,0,0,0,2),(6,'En Revisión',7,1,'ON_CHECKING',NULL,6,0,1,0,3),(7,'Sin Acabar',2,0,'NOT_READY',NULL,7,0,0,0,0),(8,'Revisado',8,1,'CHECKED',NULL,8,0,1,0,3),(9,'Encajando',9,2,'PACKING',NULL,9,0,1,0,0),(10,'Encajado',10,2,'PACKED',NULL,10,0,1,0,0),(11,'Facturado',0,0,'INVOICED',NULL,11,0,1,0,0),(12,'Bloqueado',0,0,'BLOCKED',NULL,12,0,0,0,0),(13,'En Reparto',11,3,'ON_DELIVERY',NULL,13,0,1,0,0),(14,'Preparado',6,1,'PREPARED',NULL,14,0,1,0,2),(15,'Pte Recogida',12,3,'WAITING_FOR_PICKUP',NULL,15,0,1,0,0),(16,'Entregado',13,3,'DELIVERED',NULL,16,0,1,0,0),(17,'Eliminado',14,3,'ERASED',NULL,17,0,0,0,0),(20,'Asignado',4,1,'PICKER_DESIGNED',NULL,20,1,0,0,0),(21,'Retornado',4,1,'PRINTED_BACK',6,21,0,0,0,0),(22,'¿Fecha?',2,0,'WRONG_DATE',NULL,22,0,0,0,0),(23,'URGENTE',2,0,'LAST_CALL',NULL,23,1,0,0,0),(24,'Encadenado',3,0,'CHAINED',4,24,0,0,0,0),(25,'Embarcando',3,0,'BOARDING',5,25,0,0,0,0),(26,'Prep Previa',5,1,'PREVIOUS_PREPARATION',1,26,0,0,0,1),(27,'Prep Asistida',5,1,'ASSISTED_PREPARATION',7,27,0,0,0,0),(28,'Previa OK',3,1,'OK PREVIOUS',3,28,1,0,0,1),(29,'Previa Impreso',4,1,'PRINTED PREVIOUS',2,29,1,0,1,1),(30,'Embarcado',4,0,'BOARD',5,30,0,0,0,2); /*!40000 ALTER TABLE `state` ENABLE KEYS */; UNLOCK TABLES; @@ -320,7 +320,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `bi`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -368,7 +368,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `cache`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -406,7 +406,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `hedera`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -464,7 +464,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:21 +-- Dump completed on 2020-01-15 7:35:36 USE `postgresql`; -- MySQL dump 10.13 Distrib 5.7.28, for osx10.15 (x86_64) -- @@ -552,4 +552,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 11:05:22 +-- Dump completed on 2020-01-15 7:35:37 diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 4b4b8fa132..bfa56eb266 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -68,13 +68,13 @@ INSERT INTO `account`.`user`(`id`,`name`,`nickname`, `password`,`role`,`active`, (111, 'Missing', 'Missing', 'ac754a330530832ba1bf7687f577da91', 2, 0, NULL, 'es'), (112, 'Trash', 'Trash', 'ac754a330530832ba1bf7687f577da91', 2, 0, NULL, 'es'); -INSERT INTO `vn`.`worker`(`id`, `code`, `firstName`, `lastName`, `userFk`,`bossFk`) +INSERT INTO `vn`.`worker`(`id`, `code`, `firstName`, `lastName`, `userFk`,`bossFk`, `phone`) VALUES - (106, 'LGN', 'David Charles', 'Haller', 106, 19), - (107, 'ANT', 'Hank' , 'Pym' , 107, 19), - (108, 'DCX', 'Charles' , 'Xavier', 108, 19), - (109, 'HLK', 'Bruce' , 'Banner', 109, 19), - (110, 'JJJ', 'Jessica' , 'Jones' , 110, 19); + (106, 'LGN', 'David Charles', 'Haller', 106, 19, 432978106), + (107, 'ANT', 'Hank' , 'Pym' , 107, 19, 432978107), + (108, 'DCX', 'Charles' , 'Xavier', 108, 19, 432978108), + (109, 'HLK', 'Bruce' , 'Banner', 109, 19, 432978109), + (110, 'JJJ', 'Jessica' , 'Jones' , 110, 19, 432978110); INSERT INTO `vn`.`country`(`id`, `country`, `isUeeMember`, `code`, `currencyFk`, `ibanLength`) VALUES @@ -216,21 +216,20 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`) (3, 'Daily Bugle'), (4, 'GCN Channel'), (5, 'The Newspaper'); - -INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`fax`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`,`mailAddress`,`cplusTerIdNifFk`,`hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`) +INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`fax`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`,`mailAddress`,`cplusTerIdNifFk`,`hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`) VALUES - (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 333333333, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (102, 'Petter Parker', '87945234L', 'Spider man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (104, 'Tony Stark', '06089160W', 'Iron man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (105, 'Max Eisenhardt', '251628698', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 333333333, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 8, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), - (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Evil hideout', 'Silla', 46460, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), - (107, 'Hank Pym', '09854837G', 'Ant man', 'Hawk', 'Anthill', 'Silla', 46460, 333333333, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), - (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 333333333, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), - (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 333333333, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), - (110, 'Jessica Jones', '58282869H', 'Jessica Jones', 'Luke Cage', 'NYCC 2015 Poster', 'Silla', 46460, 333333333, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, NULL, 0, 1), - (111, 'Missing', NULL, 'Missing man', 'Anton', 'The space', 'Silla', 46460, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), - (112, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city', 'Silla', 46460, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); + (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (102, 'Petter Parker', '87945234L', 'Spider man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (104, 'Tony Stark', '06089160W', 'Iron man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (105, 'Max Eisenhardt', '251628698', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 8, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), + (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Evil hideout', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), + (107, 'Hank Pym', '09854837G', 'Ant man', 'Hawk', 'Anthill', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), + (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), + (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), + (110, 'Jessica Jones', '58282869H', 'Jessica Jones', 'Luke Cage', 'NYCC 2015 Poster', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, NULL, 0, 1), + (111, 'Missing', NULL, 'Missing man', 'Anton', 'The space', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), + (112, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`) SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), CONCAT(name, 'Social'), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'SILLA', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, CURDATE(), 1 @@ -1128,13 +1127,26 @@ INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `companyFk`, (6, 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 6, 442, 'Movement 6', 'this is the note six', 'observation six'), (7, 2, DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 7, 442, 'Movement 7', 'this is the note seven', 'observation seven'); -INSERT INTO `bi`.`claims_ratio`(`id_Cliente`, `Consumo`, `Reclamaciones`, `Ratio`, `recobro`, `inflacion`) +INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRate`, `priceIncreasing`, `packingRate`) VALUES (101, 500, NULL, 0.00, 0.00, 1.00), (102, 1000, 2.00, 0.01, 0.05, 1.00), (103, 2000, 0.00, 0.00, 0.02, 1.00), (104, 2500, 150.00, 0.02, 0.10, 1.00); +INSERT INTO `bs`.`waste`(`buyer`, `year`, `week`, `family`, `saleTotal`, `saleWaste`, `rate`) + VALUES + ('CharlesXavier', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation', '1062', '51', '4.8'), + ('CharlesXavier', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Colombia', '35074', '687', '2.0'), + ('CharlesXavier', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Mini', '1777', '13', '0.7'), + ('CharlesXavier', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Carnation Short', '9182', '59', '0.6'), + ('DavidCharlesHaller', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Containers', '-74', '0', '0.0'), + ('DavidCharlesHaller', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Packagings', '-7', '0', '0.0'), + ('DavidCharlesHaller', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Freight', '1100', '0', '0.0'), + ('HankPym', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Funeral Accessories', '848', '-187', '-22.1'), + ('HankPym', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Miscellaneous Accessories', '186', '0', '0.0'), + ('HankPym', YEAR(DATE_ADD(CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(CURDATE(), INTERVAL -1 WEEK), 1), 'Adhesives', '277', '0', '0.0'); + INSERT INTO `vn`.`buy`(`id`,`entryFk`,`itemFk`,`buyingValue`,`quantity`,`packageFk`,`stickers`,`freightValue`,`packageValue`,`comissionValue`,`packing`,`grouping`,`groupingMode`,`location`,`price1`,`price2`,`price3`,`minPrice`,`producer`,`printedStickers`,`isChecked`,`isIgnored`, `created`) VALUES (1, 1, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0.00, NULL, 0, 1, 0, DATE_ADD(CURDATE(), INTERVAL -2 MONTH)), @@ -1928,73 +1940,6 @@ INSERT INTO `vn`.`queuePriority`(`id`, `priority`) (2, 'Normal'), (3, 'Baja'); -INSERT INTO `vn`.`userPhoneType` (`code`, `description`) - VALUES - ('businessPhone', 'Telefono de empresa del usuario'), - ('personalPhone', 'Telefono personal del usuario'); - -INSERT INTO `vn`.`userPhone`(`id`, `userFk`, `typeFk`, `phone`) - VALUES - (1, 101, 'personalPhone', 1111111111), - (2, 102, 'personalPhone', 1111111111), - (3, 103, 'personalPhone', 1111111111), - (4, 104, 'personalPhone', 1111111111), - (5, 105, 'personalPhone', 1111111111), - (6, 106, 'personalPhone', 1111111111), - (7, 107, 'personalPhone', 1111111111), - (8, 108, 'personalPhone', 1111111111), - (9, 109, 'personalPhone', 1111111111), - (10, 110, 'personalPhone', 1111111111), - (11, 111, 'personalPhone', 1111111111), - (12, 112, 'personalPhone', 1111111111), - (13, 1, 'personalPhone', 623111111), - (14, 2, 'personalPhone', 623111111), - (15, 3, 'personalPhone', 623111111), - (16, 5, 'personalPhone', 623111111), - (17, 6, 'personalPhone', 623111111), - (18, 9, 'personalPhone', 623111111), - (19, 13, 'personalPhone', 623111111), - (20, 15, 'personalPhone', 623111111), - (21, 16, 'personalPhone', 623111111), - (22, 17, 'personalPhone', 623111111), - (23, 18, 'personalPhone', 623111111), - (24, 19, 'personalPhone', 623111111), - (26, 21, 'personalPhone', 623111111), - (27, 22, 'personalPhone', 623111111), - (28, 30, 'personalPhone', 623111111), - (29, 31, 'personalPhone', 623111111), - (30, 32, 'personalPhone', 623111111), - (31, 34, 'personalPhone', 623111111), - (32, 35, 'personalPhone', 623111111), - (33, 36, 'personalPhone', 623111111), - (34, 37, 'personalPhone', 623111111), - (35, 38, 'personalPhone', 623111111), - (36, 39, 'personalPhone', 623111111), - (37, 40, 'personalPhone', 623111111), - (38, 41, 'personalPhone', 623111111), - (39, 42, 'personalPhone', 623111111), - (40, 43, 'personalPhone', 623111111), - (41, 44, 'personalPhone', 623111111), - (42, 45, 'personalPhone', 623111111), - (43, 47, 'personalPhone', 623111111), - (44, 48, 'personalPhone', 623111111), - (45, 50, 'personalPhone', 623111111), - (46, 51, 'personalPhone', 623111111), - (47, 52, 'personalPhone', 623111111), - (48, 54, 'personalPhone', 623111111), - (49, 55, 'personalPhone', 623111111), - (50, 56, 'personalPhone', 623111111), - (51, 57, 'personalPhone', 623111111), - (52, 58, 'personalPhone', 623111111), - (53, 59, 'personalPhone', 623111111), - (54, 60, 'personalPhone', 623111111), - (55, 61, 'personalPhone', 623111111), - (56, 65, 'personalPhone', 623111111), - (57, 66, 'personalPhone', 623111111), - (65, 107, 'businessPhone', 700987987), - (67, 106, 'businessPhone', 1111111112), - (68, 106, 'personalPhone', 1111111113); - INSERT INTO `vn`.`workerTimeControlParams` (`id`, `dayBreak`, `weekBreak`, `weekScope`, `dayWorkMax`, `dayStayMax`) VALUES (1, 43200, 129600, 734400, 43200, 50400); @@ -2005,11 +1950,14 @@ INSERT INTO `vn`.`thermograph`(`id`, `model`) VALUES ('TMM190901395', 'TEMPMATE'), ('TL.BBA85422', 'TL30'), - ('TZ1905012010', 'DISPOSABLE'); + ('TZ1905012010', 'DISPOSABLE'), + ('138350-0', 'DISPOSABLE'); INSERT INTO `vn`.`travelThermograph`(`thermographFk`, `created`, `warehouseFk`, `travelFk`, `temperature`, `result`, `dmsFk`) VALUES - ('TMM190901395', CURDATE(), 1, 1, 'WARM', 'Ok', NULL), - ('TL.BBA85422', DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 2, 2, 'COOL', 'Ok', NULL), - ('TL.BBA85422', CURDATE(), 2, 1, 'COOL', 'can not read the temperature', NULL), - ('TZ1905012010', CURDATE(), 1, 1, 'WARM', 'Temperature in range', 5); \ No newline at end of file + ('TMM190901395', CURDATE(), 1, 1, 'WARM', 'Ok', NULL), + ('TL.BBA85422', DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 2, 2, 'COOL', 'Ok', NULL), + ('TL.BBA85422', CURDATE(), 2, 1, 'COOL', 'can not read the temperature', NULL), + ('TZ1905012010', CURDATE(), 1, 1, 'WARM', 'Temperature in range', 5), + ('138350-0', DATE_ADD(CURDATE(), INTERVAL -1 MONTH), 1, 1, 'WARM', NULL, 5), + ('138350-0', CURDATE(), 1, NULL, 'COOL', NULL, NULL); \ No newline at end of file diff --git a/db/dump/structure.sql b/db/dump/structure.sql index 2f28066654..be5776c58e 100644 --- a/db/dump/structure.sql +++ b/db/dump/structure.sql @@ -2157,23 +2157,21 @@ CREATE TABLE `calidad_parametros` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `claims_ratio` +-- Temporary table structure for view `claims_ratio` -- DROP TABLE IF EXISTS `claims_ratio`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `claims_ratio` ( - `Id_Cliente` int(11) NOT NULL DEFAULT '0', - `Consumo` decimal(10,2) DEFAULT NULL, - `Reclamaciones` decimal(10,2) DEFAULT NULL, - `Ratio` decimal(5,2) DEFAULT NULL, - `recobro` decimal(5,2) DEFAULT NULL, - `inflacion` decimal(5,2) NOT NULL DEFAULT '1.00', - PRIMARY KEY (`Id_Cliente`), - CONSTRAINT `claims_ratio_ibfk_1` FOREIGN KEY (`Id_Cliente`) 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 */; +/*!50001 DROP VIEW IF EXISTS `claims_ratio`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `claims_ratio` AS SELECT + 1 AS `Id_Cliente`, + 1 AS `Consumo`, + 1 AS `Reclamaciones`, + 1 AS `Ratio`, + 1 AS `recobro`, + 1 AS `inflacion`*/; +SET character_set_client = @saved_cs_client; -- -- Table structure for table `customerDebtInventory` @@ -2349,73 +2347,25 @@ CREATE TABLE `primer_pedido` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `rotacion` +-- Temporary table structure for view `rotacion` -- DROP TABLE IF EXISTS `rotacion`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `rotacion` ( - `Id_Article` int(11) NOT NULL, - `warehouse_id` smallint(6) unsigned NOT NULL, - `total` int(10) NOT NULL DEFAULT '0', - `rotacion` decimal(10,4) NOT NULL DEFAULT '0.0000', - `cm3` int(11) NOT NULL DEFAULT '0', - `almacenaje` decimal(10,4) NOT NULL DEFAULT '0.0000', - `manipulacion` decimal(10,4) NOT NULL DEFAULT '0.0000', - `auxiliar` decimal(10,4) NOT NULL DEFAULT '0.0000', - `mermas` decimal(10,4) NOT NULL DEFAULT '0.0000', - `cm3reparto` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`Id_Article`,`warehouse_id`), - KEY `warehouse_id_rotacion_idx` (`warehouse_id`), - CONSTRAINT `id_article_rotaci` FOREIGN KEY (`Id_Article`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT `warehouse_id_rotaci` FOREIGN KEY (`warehouse_id`) REFERENCES `vn`.`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_general_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `bi`.`rotacion_beforeInsert` - BEFORE INSERT ON `rotacion` - FOR EACH ROW -BEGIN - IF NEW.Id_Article 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_general_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `bi`.`rotacion_beforeUpdate` - BEFORE UPDATE ON `rotacion` - FOR EACH ROW -BEGIN - IF NEW.Id_Article 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 */ ; +/*!50001 DROP VIEW IF EXISTS `rotacion`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `rotacion` AS SELECT + 1 AS `Id_Article`, + 1 AS `warehouse_id`, + 1 AS `total`, + 1 AS `rotacion`, + 1 AS `cm3`, + 1 AS `almacenaje`, + 1 AS `manipulacion`, + 1 AS `auxiliar`, + 1 AS `mermas`, + 1 AS `cm3reparto`*/; +SET character_set_client = @saved_cs_client; -- -- Table structure for table `rutasBoard` @@ -4845,6 +4795,3943 @@ DELIMITER ; /*!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 VIEW `bajasLaborales` AS SELECT + 1 AS `firstname`, + 1 AS `name`, + 1 AS `business_id`, + 1 AS `lastDate`, + 1 AS `endContract`, + 1 AS `type`, + 1 AS `dias`, + 1 AS `userFk`*/; +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` double NOT NULL DEFAULT '0', + `quilla` double NOT NULL DEFAULT '0', + `deuda` double NOT NULL DEFAULT '0', + `liquidez` double NOT NULL DEFAULT '0', + `disponibilidad ajena` double NOT NULL DEFAULT '0', + `saldo_aux` double NOT NULL DEFAULT '0' 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`.`bank` (`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 `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; +/*!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, + `shipped` date NOT NULL, + 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 */; + +-- +-- 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(11) 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(11) NOT NULL, + `fecha` date NOT NULL, + `importe` decimal(10,2) 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 `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 */; + +-- +-- 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 VIEW `lastIndicators` AS SELECT + 1 AS `updated`, + 1 AS `lastYearSales`, + 1 AS `incLastYearSales`, + 1 AS `totalGreuge`, + 1 AS `incTotalGreuge`, + 1 AS `latePaymentRate`, + 1 AS `incLatePaymentRate`, + 1 AS `countEmployee`, + 1 AS `incCountEmployee`, + 1 AS `averageMana`, + 1 AS `incAverageMana`, + 1 AS `bankingPool`, + 1 AS `incbankingPool`, + 1 AS `lastMonthActiveClients`, + 1 AS `incLastMonthActiveClients`, + 1 AS `lastMonthLostClients`, + 1 AS `incLastMonthLostClients`, + 1 AS `lastMonthNewClients`, + 1 AS `incLastMonthNewClients`, + 1 AS `lastMonthWebBuyingRate`, + 1 AS `incLastMonthWebBuyingRate`, + 1 AS `productionHours`, + 1 AS `dailyWorkersCost`, + 1 AS `volumeM3`, + 1 AS `salesValue`, + 1 AS `valueM3`, + 1 AS `hoursM3`, + 1 AS `workerCostM3`, + 1 AS `salesWorkersCostRate`, + 1 AS `thisWeekSales`, + 1 AS `lastYearWeekSales`*/; +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 */; + +-- +-- Temporary table structure for view `m3Silla` +-- + +DROP TABLE IF EXISTS `m3Silla`; +/*!50001 DROP VIEW IF EXISTS `m3Silla`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `m3Silla` AS SELECT + 1 AS `fecha`, + 1 AS `year`, + 1 AS `month`, + 1 AS `week`, + 1 AS `day`, + 1 AS `dayName`, + 1 AS `Volumen`, + 1 AS `Euros`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `m3analisis` +-- + +DROP TABLE IF EXISTS `m3analisis`; +/*!50001 DROP VIEW IF EXISTS `m3analisis`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `m3analisis` AS SELECT + 1 AS `fecha`, + 1 AS `year`, + 1 AS `month`, + 1 AS `week`, + 1 AS `day`, + 1 AS `dayName`, + 1 AS `Volumen`, + 1 AS `Euros`, + 1 AS `Departamento`, + 1 AS `Horas`, + 1 AS `Salarios`, + 1 AS `tiempoM3`, + 1 AS `valorM3`, + 1 AS `costeLaboralM3`, + 1 AS `costeEuros`, + 1 AS `precioHora`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `manaCustomer` +-- + +DROP TABLE IF EXISTS `manaCustomer`; +/*!50001 DROP VIEW IF EXISTS `manaCustomer`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `manaCustomer` AS SELECT + 1 AS `Id_Cliente`, + 1 AS `Mana`, + 1 AS `dated`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `manaSpellersExcluded` +-- + +DROP TABLE IF EXISTS `manaSpellersExcluded`; +/*!50001 DROP VIEW IF EXISTS `manaSpellersExcluded`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `manaSpellersExcluded` AS SELECT + 1 AS `workerFk`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `mana_spellers` +-- + +DROP TABLE IF EXISTS `mana_spellers`; +/*!50001 DROP VIEW IF EXISTS `mana_spellers`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `mana_spellers` AS SELECT + 1 AS `Id_Trabajador`, + 1 AS `size`, + 1 AS `used`, + 1 AS `prices_modifier_rate`, + 1 AS `prices_modifier_activated`, + 1 AS `minRate`, + 1 AS `maxRate`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `mana_spellers_excluded` +-- + +DROP TABLE IF EXISTS `mana_spellers_excluded`; +/*!50001 DROP VIEW IF EXISTS `mana_spellers_excluded`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `mana_spellers_excluded` AS SELECT + 1 AS `Id_Trabajador`*/; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `mermas` +-- + +DROP TABLE IF EXISTS `mermas`; +/*!50001 DROP VIEW IF EXISTS `mermas`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `mermas` AS SELECT + 1 AS `Comprador`, + 1 AS `Familia`, + 1 AS `Referencia`, + 1 AS `Item`, + 1 AS `Cantidad`, + 1 AS `Coste_Unitario`, + 1 AS `Importe`, + 1 AS `Cliente`, + 1 AS `ticketFk`, + 1 AS `Fecha`*/; +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 = 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`@`%`*/ /*!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 = 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`@`%`*/ /*!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 */; + +-- +-- 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 `productivity` +-- + +DROP TABLE IF EXISTS `productivity`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `productivity` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dated` date NOT NULL, + `hh` int(10) unsigned NOT NULL, + `mm` int(10) unsigned NOT NULL, + `m3` double NOT NULL DEFAULT '0', + `workers` int(11) NOT NULL DEFAULT '0', + `wCost` double NOT NULL DEFAULT '0', + `numCoordinadores` int(11) NOT NULL DEFAULT '0', + `costCoordinacion` double NOT NULL DEFAULT '0', + `numSacadores` int(11) NOT NULL DEFAULT '0', + `costSacado` double NOT NULL DEFAULT '0', + `numEncajadores` int(11) NOT NULL DEFAULT '0', + `costEncajado` double NOT NULL DEFAULT '0', + `numPaletizadores` int(11) NOT NULL DEFAULT '0', + `costPaletizado` double NOT NULL DEFAULT '0', + `numCamareros` int(11) NOT NULL DEFAULT '0', + `costCamara` double NOT NULL DEFAULT '0', + `numComplementos` int(11) NOT NULL DEFAULT '0', + `costComplementos` double NOT NULL DEFAULT '0', + `numArtificial` int(11) NOT NULL DEFAULT '0', + `costArtificial` double NOT NULL DEFAULT '0', + `m3FV` double NOT NULL DEFAULT '0', + `m3PCA` double NOT NULL DEFAULT '0', + `m3Artificial` decimal(10,2) NOT NULL 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 `productivityDepartment` +-- + +DROP TABLE IF EXISTS `productivityDepartment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `productivityDepartment` ( + `dated` date NOT NULL, + `amountCoordinacion` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountSacado` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountEncajado` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountPaletizado` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountCamara` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountComplementos` decimal(10,2) NOT NULL DEFAULT '0.00', + `amountArtificial` 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 */; + +-- +-- Table structure for table `productivity_evolution` +-- + +DROP TABLE IF EXISTS `productivity_evolution`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `productivity_evolution` ( + `dated` date NOT NULL, + `m3productionCost` 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 */; + +-- +-- Table structure for table `salaries2018` +-- + +DROP TABLE IF EXISTS `salaries2018`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `salaries2018` ( + `person_id` int(11) NOT NULL DEFAULT '0', + `sex` enum('M','F') CHARACTER SET utf8 NOT NULL DEFAULT 'F' COMMENT 'M Masculino F Femenino', + `edad` int(6) DEFAULT NULL, + `antiguedad` int(6) DEFAULT NULL, + `Modalidad` varchar(22) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `reason` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `worker` varchar(82) CHARACTER SET utf8 DEFAULT NULL, + `totalDays` decimal(32,0) DEFAULT NULL, + `totalAnual` decimal(16,0) DEFAULT NULL, + `virtualMonthlySalary` decimal(16,0) DEFAULT NULL, + `departamento` varchar(45) COLLATE utf8_unicode_ci NOT NULL, + `category_name` varchar(50) CHARACTER SET utf8 NOT NULL, + `level_name` varchar(5) CHARACTER SET utf8 DEFAULT NULL, + `thisYearDateStart` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL, + PRIMARY KEY (`person_id`) +) 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 `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 `vendedores` +-- + +DROP TABLE IF EXISTS `vendedores`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vendedores` ( + `Id_Trabajador` int(11) NOT NULL, + `año` int(4) NOT NULL, + `mes` int(2) NOT NULL, + `importe` decimal(10,2) DEFAULT NULL, + `comision` decimal(10,2) DEFAULT NULL, + `comisionArrendada` decimal(10,2) DEFAULT NULL COMMENT 'comision proveniente de clientes que han sido donados. Ver tabla Clientes_cedidos', + `comisionCedida` decimal(10,2) DEFAULT NULL COMMENT 'comision generada por los clientes que han sido donados. Ver tabla Clientes_cedidos', + `comisionNuevos` decimal(10,2) DEFAULT NULL, + `sustitucionArrendada` decimal(10,2) DEFAULT NULL, + `itemTypeBorrowed` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`Id_Trabajador`,`año`,`mes`), + CONSTRAINT `trabajador_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 `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(11) 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 */; + +-- +-- Table structure for table `ventas` +-- + +DROP TABLE IF EXISTS `ventas`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ventas` ( + `Id_Movimiento` int(11) NOT NULL, + `importe` decimal(10,3) NOT NULL DEFAULT '0.000', + `recargo` decimal(10,3) NOT NULL DEFAULT '0.000', + `fecha` date NOT NULL, + `tipo_id` smallint(5) unsigned NOT NULL, + `Id_Cliente` int(11) NOT NULL DEFAULT '1', + `empresa_id` smallint(5) unsigned NOT NULL DEFAULT '442', + PRIMARY KEY (`Id_Movimiento`), + KEY `tip_to_tip_idx` (`tipo_id`), + KEY `clientes_bs_ventas_idx` (`Id_Cliente`), + KEY `empresa_bs_ventas_idx` (`empresa_id`), + KEY `fecha_bs` (`fecha`), + CONSTRAINT `clientes_bs_ventas` FOREIGN KEY (`Id_Cliente`) REFERENCES `vn`.`client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `empresa_bs_ventas` FOREIGN KEY (`empresa_id`) REFERENCES `vn`.`company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `mov_to_mov` FOREIGN KEY (`Id_Movimiento`) REFERENCES `vn`.`sale` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `tip_to_tip` FOREIGN KEY (`tipo_id`) 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 `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 `warehouseProduction_kk` +-- + +DROP TABLE IF EXISTS `warehouseProduction_kk`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `warehouseProduction_kk` ( + `fecha` date NOT NULL, + `warehouse_id` smallint(6) unsigned NOT NULL, + `m3` decimal(10,0) NOT NULL DEFAULT '0', + `labourCost` decimal(10,0) NOT NULL DEFAULT '0', + `workerHours` decimal(10,0) NOT NULL DEFAULT '0', + PRIMARY KEY (`fecha`,`warehouse_id`), + KEY `warehouseProduction_fk1_idx` (`warehouse_id`), + CONSTRAINT `warehouseProduction_fk1` 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 `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, + `saleTotal` decimal(16,0) DEFAULT NULL, + `saleWaste` decimal(16,0) DEFAULT NULL, + `rate` decimal(3,1) DEFAULT NULL, + PRIMARY KEY (`buyer`,`year`,`week`,`family`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Temporary table structure for view `workerMana` +-- + +DROP TABLE IF EXISTS `workerMana`; +/*!50001 DROP VIEW IF EXISTS `workerMana`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `workerMana` AS SELECT + 1 AS `workerFk`, + 1 AS `amount`*/; +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 */; + +-- +-- 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`@`%`*/ /*!50106 EVENT `nightTask_launchAll` ON SCHEDULE EVERY 1 DAY STARTS '2017-08-27 02:00:00' ON COMPLETION NOT 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 */ ;; +DELIMITER ; +/*!50106 SET TIME_ZONE= @save_time_zone */ ; + +-- +-- Dumping routines for database 'bs' +-- +/*!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 */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` FUNCTION `tramo`(vDateTime DATETIME) RETURNS varchar(20) CHARSET utf8 COLLATE utf8_unicode_ci +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 DROP PROCEDURE IF EXISTS `analisisComponentes` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `analisisComponentes`() +BEGIN + +DECLARE vDateStart DATE DEFAULT '2016-01-01'; +DECLARE vDateEnd DATE DEFAULT '2016-11-30'; +DECLARE vDate DATE; + +SET vDate = vDateStart; + +DELETE FROM bs.ventasComponentes; + +WHILE vDate <= vDateEnd DO + + INSERT INTO bs.ventasComponentes + SELECT vDate as Fecha, mc.Id_Componente, cast(sum(m.Cantidad * mc.Valor) AS DECIMAL(10,2)) as Importe + FROM vn2008.Movimientos_componentes mc + JOIN vn2008.Movimientos m ON m.Id_Movimiento = mc.Id_Movimiento + JOIN bs.ventas v ON v.Id_Movimiento = mc.Id_Movimiento + WHERE v.fecha = vDate + AND empresa_id IN (442,567) + GROUP BY mc.Id_Componente; + + SET vDate = TIMESTAMPADD(DAY,1,vDate); + + IF DAY(vDate) MOD 28 = 0 THEN + + SELECT vDate; + + END IF; + +END WHILE; + + SELECT 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `bancos_evolution_add`() +BEGIN + /* + + Inserta en la tabla bancos_evolution los saldos acumulados + + */ + + + DECLARE vCurrentDate DATE; + DECLARE vStartingDate DATE DEFAULT '2016-01-01'; + DECLARE vMaxDate DATE DEFAULT TIMESTAMPADD(MONTH, 7, CURDATE()); + + DELETE FROM bs.bancos_evolution WHERE Fecha > vStartingDate; + + SET vCurrentDate = vStartingDate; + + WHILE vCurrentDate < vMaxDate DO + + REPLACE bs.bancos_evolution( Fecha + ,Id_Banco + ,saldo) + + SELECT vCurrentDate + , Id_Banco + , sum(saldo) + + FROM + ( + + SELECT Id_Banco + ,saldo_aux as 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 + WHERE cash IN (0,3) + AND Cajafecha = vCurrentDate + AND (Serie = 'MB' OR cash = 3) + GROUP BY Id_Banco + + UNION ALL + + SELECT id_banco, - importe -- pagos futuros + FROM vn2008.pago + WHERE fecha = vCurrentDate + AND fecha >= CURDATE() + AND NOT conciliado + + UNION ALL + + SELECT Id_Banco, Entregado -- cobros futuros + FROM vn2008.Recibos + WHERE Fechacobro = vCurrentDate + AND Fechacobro > CURDATE() + + UNION ALL + + SELECT sp.Id_Banco, Importe -- saldos de la tabla prevision + FROM vn2008.Saldos_Prevision sp + JOIN vn2008.Bancos b using(Id_Banco) + WHERE cash IN (0,3) + AND Fecha = vCurrentDate + + + + )sub + GROUP BY Id_Banco; + + -- Utilizamos el saldo_auxiliar para calcular lo dispuesto en las polizas + + UPDATE bs.bancos_evolution be + SET saldo_aux = saldo; + + -- Ahora actualizamos la quilla + UPDATE bs.bancos_evolution be + LEFT JOIN + ( + SELECT Id_Banco, - sum(importe) as quilla + FROM vn2008.Bancos_poliza + WHERE vCurrentDate between apertura AND IFNULL(cierre, vCurrentDate) + GROUP BY Id_Banco + ) sub using(Id_Banco) + SET be.quilla = sub.quilla + WHERE be.Fecha = vCurrentDate; + + + SET vCurrentDate = TIMESTAMPADD(DAY,1,vCurrentDate); + + END WHILE; + + + -- Deuda + UPDATE bs.bancos_evolution be + JOIN vn2008.Bancos using(Id_Banco) + SET be.deuda = IF(cash = 3, be.saldo_aux, 0) + , be.saldo = IF(cash = 3, 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 DROP PROCEDURE IF EXISTS `carteras_add` */; +ALTER DATABASE `bs` CHARACTER SET latin1 COLLATE latin1_swedish_ci ; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `carteras_add`() +BEGIN + +DELETE FROM bs.carteras +WHERE Año >= YEAR(CURDATE()) - 1; + +INSERT INTO bs.carteras(Año,Mes,CodigoTrabajador,Peso) +SELECT year as Año, month as Mes, CodigoTrabajador, sum(importe) as Peso +FROM vn2008.time t +JOIN bs.ventas v on t.date = v.fecha +JOIN vn2008.Clientes c on c.Id_Cliente = v.Id_Cliente +JOIN vn2008.Trabajadores tr on tr.Id_Trabajador = c.Id_Trabajador +WHERE t.year >= YEAR(CURDATE()) - 1 +GROUP BY CodigoTrabajador, Año, Mes; + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +ALTER DATABASE `bs` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `clean`() +BEGIN + DECLARE vFourYearsAgo DATETIME; + + SET vFourYearsAgo = TIMESTAMPADD(YEAR, -4,CURDATE()); + + DELETE FROM ventas + WHERE fecha < vFourYearsAgo; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `clientDied` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `clientDied`() +BEGIN + + IF DAY(CURDATE()) = 6 THEN + + 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 as clientName, + maxIssued as lastInvoiced, + w.code AS workerCode, + b.code AS 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 vn2008.jerarquia j ON j.worker_id = w.id + JOIN vn.worker b ON b.id = j.boss_id + JOIN bs.mana_spellers ms ON ms.Id_Trabajador = 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; + + 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 DROP PROCEDURE IF EXISTS `clientNewBorn_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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `clientNewBorn_Update`() +BEGIN + + DECLARE fromDated DATE DEFAULT '2019-04-01'; + + -- Eliminamos clientes que ya no son nuevos + DELETE FROM bs.clientNewBorn + WHERE shipped < TIMESTAMPADD(YEAR,-1,CURDATE()); + + -- Clientes nuevos + REPLACE bs.clientNewBorn(clientFk,shipped) + SELECT t.clientFk, MIN(t.shipped) as shipped + FROM vn.ticket t + WHERE shipped > '2001-01-01' + GROUP BY t.clientFk + HAVING shipped >= GREATEST(TIMESTAMPADD(YEAR,-1,CURDATE()), fromDated); + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `comercialesCompleto`(IN vWorker INT, vDate DATE) +BEGIN + +CALL vn.worker_GetHierarchy(vWorker); + +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 Id_Cliente, CAST( SUM(Importe) as DECIMAL(12,2)) AS Greuge + FROM vn2008.Greuges + 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 USING (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 DATE(Fecha) BETWEEN vDate AND 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 + MONTH(fecha) = MONTH(vDate) + AND YEAR(fecha) = YEAR(vDate) - 1 + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `comercialesCompleto__`(IN vWorker INT, vDate DATE) +BEGIN + +CALL vn.subordinateGetList(vWorker); + +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 Id_Cliente, CAST( SUM(Importe) as DECIMAL(12,2)) AS Greuge + FROM vn2008.Greuges + 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 USING (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 DATE(Fecha) BETWEEN vDate AND 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 + MONTH(fecha) = MONTH(vDate) + AND YEAR(fecha) = YEAR(vDate) - 1 + 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.subordinate s ON s.workerFk = c.Id_Trabajador; + +DROP TEMPORARY TABLE tmp.subordinate; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `compradores_add` */; +ALTER DATABASE `bs` CHARACTER SET latin1 COLLATE latin1_swedish_ci ; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `compradores_add`(IN intYEAR INT, IN intWEEK_START INT, IN intWEEK_END INT) +BEGIN + +REPLACE bs.compradores + +SELECT tp.Id_Trabajador + , intYEAR as año + , tm.week as semana + , sum(importe) as importe + , 0 as comision + +FROM bs.ventas v +JOIN vn2008.time tm on tm.date = v.fecha +JOIN vn2008.Tipos tp using(tipo_id) +WHERE tm.year = intYEAR and tm.week between intWEEK_START and intWEEK_END +AND reino_id != 6 +GROUP BY tp.Id_Trabajador, 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 */ ; +ALTER DATABASE `bs` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 (year = vYear AND week >= vWeek) + OR year > vYear; + + 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 DROP PROCEDURE IF EXISTS `compradores_evolution_add` */; +ALTER DATABASE `bs` CHARACTER SET latin1 COLLATE latin1_swedish_ci ; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `compradores_evolution_add`() +BEGIN +/* + +Inserta en la tabla compradores_evolution las ventas acumuladas en los ultimos 365 dias + +*/ + +DECLARE datFEC DATE; + + +SELECT TIMESTAMPADD(DAY,1,MAX(fecha)) INTO datFEC FROM bs.compradores_evolution; + + WHILE datFEC < CURDATE() DO + + SELECT datFEC; + + 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 */ ; +ALTER DATABASE `bs` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; +/*!50003 DROP PROCEDURE IF EXISTS `fondo_evolution_add` */; +ALTER DATABASE `bs` CHARACTER SET latin1 COLLATE latin1_swedish_ci ; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` 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 + + -- esto solo sirve para no aburrirse mientras esperamos... + + IF day(datFEC) mod 28 = 0 then + 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(Facturas.Importe) AS Facturas + FROM vn2008.Facturas + INNER JOIN vn2008.Clientes ON Facturas.Id_Cliente = Clientes.Id_cliente + WHERE Clientes.`real` + AND empresa_id <>1381 + AND Fecha between '2011-01-01' and datFEC) fac + JOIN + ( + SELECT - Sum(Entregado) AS Cobros + FROM vn2008.Recibos + INNER JOIN vn2008.Clientes ON Recibos.Id_Cliente = Clientes.Id_cliente + WHERE Clientes.`real` + AND empresa_id <> 1381 + AND Fechacobro Between '2011-01-01' and datFEC) cob + JOIN + ( + SELECT - Sum(cantidad) AS Recibidas + FROM vn2008.recibida + INNER JOIN vn2008.recibida_vencimiento ON recibida.id = recibida_vencimiento.recibida_id + WHERE empresa_id <> 1381 + AND recibida.fecha Between '2015-01-01' and datFEC) rec + JOIN + ( + SELECT Sum(importe) AS Pagos + FROM vn2008.pago + WHERE empresa_id <>1381 AND pago.fecha 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 */ ; +ALTER DATABASE `bs` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 bs.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 bs.ventas WHERE fecha BETWEEN oneMonthBefore AND vDated) + WHERE updated = vDated; + + -- Número de trabajadores activos + UPDATE indicators + SET countEmployee = + ( SELECT CAST(SUM(hours_week) / 40 AS DECIMAL (10 , 2 )) + FROM + postgresql.business AS b + JOIN postgresql.profile p ON p.profile_id = b.provider_id + JOIN postgresql.person pe ON pe.person_id = p.person_id + LEFT JOIN + postgresql.business_labour AS bl ON bl.business_id = b.business_id + LEFT JOIN + postgresql.calendar_labour_type AS cl ON cl.calendar_labour_type_id = bl.calendar_labour_type_id + WHERE + (vDated BETWEEN b.date_start AND b.date_end OR (b.date_end IS NULL AND b.date_start <= vDated)) + AND pe.name = 'VERDNATURA LEVANTE SL' + ) + WHERE updated = vDated; + + -- Maná medio acumulado por comercial + UPDATE indicators + SET averageMana = + (SELECT avg(used) + FROM bs.mana_spellers + ) + 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; + + -- Indicadores de producción + UPDATE indicators i + JOIN productionIndicators pi ON pi.dated = i.updated + SET i.productionHours = pi.productionHours, + i.dailyWorkersCost = pi.dailyWorkersCost, + i.volumeM3 = pi.volumeM3, + i.salesValue = pi.salesValue, + i.valueM3 = pi.valueM3, + i.hoursM3 = pi.hoursM3, + i.workerCostM3 = pi.workerCostM3, + i.salesWorkersCostRate = pi.salesWorkersCostRate + WHERE updated BETWEEN oneMonthBefore AND vDated; + + -- CAP Para el calculo de las ventas agrupado por semanas + + SELECT week + FROM vn.time + WHERE dated=vDated INTO vWeek; + + TRUNCATE `bs`.`salesByWeek`; + + INSERT INTO `bs`.`salesByWeek` (week,year,sales) + SELECT `t`.`week` AS `week`,`t`.`year` AS `year`, SUM(`v`.`importe` + `v`.`recargo`) AS `sales` + FROM `bs`.`ventas` `v` + LEFT JOIN `vn`.`time` `t` ON `t`.`dated` = fecha + GROUP BY `t`.`week` , `t`.`year` + ORDER BY `t`.`week` , `t`.`year`; + + -- CAP Indicador Ventas semana actual + UPDATE indicators i + JOIN `bs`.`salesByWeek` s ON s.week= vWeek AND s.year = YEAR(vDated) + SET i.thisWeekSales = s.sales + WHERE updated = vDated; + + -- CAP indicador ventas semana actual en el año pasado + UPDATE indicators i + JOIN `bs`.`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 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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` 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(i.compression * s.quantity * r.cm3) / 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 bi.rotacion r ON r.Id_Article = s.itemFk AND r.warehouse_id = 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `manaCustomerUpdate`() +BEGIN +DECLARE vToDated DATE; + DECLARE vFromDated DATE; + DECLARE vForDeleteDated DATE; + DECLARE vManaId INT DEFAULT 37; + DECLARE vManaAutoId INT DEFAULT 39; + DECLARE vManaBankId INT DEFAULT 66; + DECLARE vManaGreugeTypeId INT DEFAULT 3; + + SELECT IFNULL(max(dated), '2016-01-01') + INTO vFromDated + FROM bs.manaCustomer; + + DELETE + FROM bs.manaCustomer + WHERE dated = vFromDated; + + SELECT IFNULL(max(dated), '2016-01-01') + INTO vFromDated + FROM bs.manaCustomer; + + WHILE timestampadd(DAY,30,vFromDated) < CURDATE() DO + + SELECT + timestampadd(DAY,30,vFromDated), + timestampadd(DAY,-90,vFromDated) + INTO + vToDated, + vForDeleteDated; + + DELETE FROM bs.manaCustomer + WHERE dated <= vForDeleteDated; + + + INSERT INTO bs.manaCustomer(Id_Cliente, 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) + 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 Id_Cliente, mana + FROM bs.manaCustomer + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `manaSpellers_actualize`() +BEGIN + + /* PAK 2019/08/09 updated + * + * Recalcula el valor del campo con el modificador de precio para el componente de maná automático. + * La tabla mana_spellers es una caché + * + */ + + UPDATE mana_spellers me + JOIN + (SELECT Id_Trabajador, FLOOR(SUM(importe)/12) as pesoCarteraMensual + FROM bs.vendedores + WHERE año * 100 + mes >= (YEAR(CURDATE()) -1) * 100 + MONTH(CURDATE()) + GROUP BY Id_Trabajador + ) lastYearSales USING(Id_Trabajador) + SET me.prices_modifier_rate = GREATEST(me.minRate,LEAST(me.maxRate,ROUND(- me.used/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 DROP PROCEDURE IF EXISTS `mermasCacheUpdate__` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `mermasCacheUpdate__`() +BEGIN + + DECLARE vTimeRange INT DEFAULT 30; + DECLARE vCurYearStarted DATE DEFAULT TIMESTAMPADD(DAY, - vTimeRange, CURDATE()); + DECLARE vCurYearFinished DATE DEFAULT CURDATE(); + DECLARE vLastYearStarted DATE DEFAULT TIMESTAMPADD(YEAR, -1 , vCurYearStarted); + DECLARE vLastYearFinished DATE DEFAULT TIMESTAMPADD(YEAR, -1 , vCurYearFinished); + + REPLACE bs.mermasCache + SELECT Comprador, + IF(Fecha < vCurYearStarted, year(CURDATE()) - 1,year(CURDATE())) año, + CAST(sum(Importe) as DECIMAL(10,0)) as Valor_Compra, + CAST(sum(IF(Cliente LIKE 'FALTAS',Importe,0)) as DECIMAL(10,0)) as Faltas, + CAST(sum(IF(Cliente LIKE 'BASURA',Importe,0)) as DECIMAL(10,0)) as Basura + FROM bs.mermas + WHERE Fecha BETWEEN vCurYearStarted AND vCurYearFinished + OR Fecha BETWEEN vLastYearStarted AND vLastYearFinished + GROUP BY año, Comprador; + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` 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 + INSERT INTO vn.mail SET + `sender` = vLogMail, + `subject` = 'Nightly task failed', + `body` = 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 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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 DROP PROCEDURE IF EXISTS `productivityAdd` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `productivityAdd`(vDate DATE) +BEGIN + + DECLARE vDateStart DATETIME DEFAULT vDate; + DECLARE vDateEnd DATETIME DEFAULT util.dayEnd(vDate); + DECLARE myDepLft INT; + DECLARE myDepRgt INT; + + DROP TEMPORARY TABLE IF EXISTS tmp.productivity; + + CREATE TEMPORARY TABLE tmp.productivity + ENGINE = MEMORY + SELECT hh, + mm, + 000.00 as m3, + 000.00 as m3FV, + 000.00 as m3PCA, + 000.00 as m3Artificial, + 0 as workers, + 000.00 as wCost, + 0 as numCoordinadores, + 000.00 as costCoordinacion, + 0 as numSacadores, + 000.00 as costSacado, + 0 as numEncajadores, + 000.00 as costEncajado, + 0 as numPaletizadores, + 000.00 as costPaletizado, + 0 as numCamareros, + 000.00 as costCamara, + 0 as numComplementos, + 000.00 as costComplementos, + 0 as numArtificial, + 000.00 as costArtificial + FROM vn.dayMinute; + +-- Trabajadores + CALL vn.dayMinuteWorker(vDateStart,vDateEnd); -- Genera la tabla tmp.dayMinuteWorker + CALL vn.workerDepartmentByDate(vDate); + + -- General + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + WHERE Almacen IN (1,44) + AND wdd.production + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.workers = sub.workers, p.wCost = sub.Bruto; + + -- Coordinadores + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'COORDINACION'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numCoordinadores = sub.workers, p.costCoordinacion = sub.Bruto; + + -- Sacado + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'SACADO'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numSacadores = sub.workers, p.costSacado = sub.Bruto; + + -- Encajado + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'ENCAJADO'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numEncajadores = sub.workers, p.costEncajado = sub.Bruto; + + -- Paletizado + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'PALETIZADO'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numPaletizadores = sub.workers, p.costPaletizado = sub.Bruto; + + -- Cámara + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'CAMARA'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numCamareros = sub.workers, p.costCamara = sub.Bruto; + + -- Complementos + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'COMPLEMENTOS'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numComplementos = sub.workers, p.costComplementos = sub.Bruto; + + -- Artificial + SELECT lft, rgt INTO myDepLft, myDepRgt + FROM vn.department + WHERE name = 'ARTIFICIAL'; + + UPDATE tmp.productivity p + JOIN + (SELECT Hora, Minuto, count(*) as workers, sum(wdd.costeHora) / 60 as Bruto + FROM tmp.dayMinuteWorker dmw + JOIN tmp.workerDepartmentByDate wdd ON wdd.userFk = dmw.userFk + JOIN vn.department d ON d.id = wdd.departmentFk + WHERE Almacen IN (1,44) + AND d.lft BETWEEN myDepLft AND myDepRgt + GROUP BY Hora, Minuto + ) sub ON p.hh = sub.Hora AND p.mm = sub.Minuto + SET p.numArtificial = sub.workers, p.costArtificial = sub.Bruto; + + -- m3 + CALL vn.ticketBuiltTime(vDate); -- Genera la tabla tmp.ticketBuiltTime(ticketFk,builtTime) + CALL vn.ticketVolumeByDate_ventas(vDate); -- Genera la tabla tmp.ticketVolumeByDate(ticketFk,m3), filtrado por las ventas validas + CALL vn.ticketVolumeByDate_ventas_Artificial(vDate); -- Genera la tabla tmp.ticketVolumeByDate_ventas_Artificial + + UPDATE tmp.productivity p + JOIN + (SELECT HOUR(builtTime) hh, + MINUTE(builtTime) mm, + sum(tvd.m3) as m3, + sum(IF(t.warehouseFk = 1,tvd.m3,0)) as m3FV, + sum(IF(t.warehouseFk = 44,tvd.m3 - IFNULL(tvda.m3,0),0)) as m3PCA, + sum(IFNULL(tvda.m3,0)) as m3Artificial + FROM tmp.ticketBuiltTime tbt + JOIN tmp.ticketVolumeByDate tvd ON tvd.ticketFk = tbt.ticketFk + LEFT JOIN tmp.ticketVolumeByDate_Artificial tvda ON tvda.ticketFk = tbt.ticketFk + JOIN vn.ticket t ON t.id = tbt.ticketFk + WHERE t.warehouseFk IN (1,44) + GROUP BY hh,mm + ) v ON v.hh = p.hh AND v.mm = p.mm + SET p.m3 = v.m3, p.m3FV = v.m3FV, p.m3PCA = v.m3PCA, p.m3Artificial = v.m3Artificial; + + + + DELETE FROM bs.productivity + WHERE dated = vDate; + + INSERT INTO bs.productivity(dated, + hh, + mm, + m3, + m3FV, + m3PCA, + m3Artificial, + workers, + wCost, + numCoordinadores, + costCoordinacion, + numSacadores, + costSacado, + numEncajadores, + costEncajado, + numPaletizadores, + costPaletizado, + numCamareros, + costCamara, + numComplementos, + costComplementos, + numArtificial, + costArtificial) + SELECT vDate, + hh, + mm, + m3, + m3FV, + m3PCA, + m3Artificial, + workers, + wCost, + numCoordinadores, + costCoordinacion, + numSacadores, + costSacado, + numEncajadores, + costEncajado, + numPaletizadores, + costPaletizado, + numCamareros, + costCamara, + numComplementos, + costComplementos, + numArtificial, + costArtificial + FROM tmp.productivity p; + + -- Productivity Evolution + REPLACE bs.productivity_evolution(dated, m3productionCost) + SELECT CURDATE(), sum(wCost) / sum(m3) + FROM bs.productivity + WHERE dated BETWEEN TIMESTAMPADD(YEAR,-1,CURDATE()) AND CURDATE(); + + DROP TEMPORARY TABLE tmp.dayMinuteWorker; + DROP TEMPORARY TABLE tmp.productivity; + DROP TEMPORARY TABLE tmp.ticketBuiltTime; + DROP TEMPORARY TABLE tmp.ticketVolumeByDate; + DROP TEMPORARY TABLE tmp.workerDepartmentByDate; + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `productivityDepartmentAdd` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `productivityDepartmentAdd`(IN vDateStartPeriod DATETIME, IN vDateEndPeriod DATETIME, IN vDateStart DATETIME) +BEGIN + + DECLARE vEndingDate DATETIME; + + SET vEndingDate = vDateStart; + + WHILE vEndingDate <= vDateEndPeriod DO + REPLACE INTO bs.productivityDepartment + SELECT vEndingDate, + CAST(((productivityCoordinacionLastYear - productivityCoordinacion) / 2) * m3 AS DECIMAL (10,2)) AS amountCoordinacion, + CAST(((productivitySacadoLastYear - productivitySacado) / 2) * m3 AS DECIMAL (10,2)) AS amountSacado, + CAST(((productivityEncajadoLastYear - productivityEncajado) / 2) * m3 AS DECIMAL (10,2)) AS amountEncajado, + CAST(((productivityPaletizadoLastYear - productivityPaletizado) / 2) * m3 AS DECIMAL (10,2)) AS amountPaletizado, + CAST(((productivityCamaraLastYear - productivityCamara) / 2) * m3FV AS DECIMAL (10,2)) AS amountCamara, + CAST(((productivityComplementosLastYear - productivityComplementos) / 2) * m3PCA AS DECIMAL (10,2)) AS amountComplementos, + CAST(((productivityArtificialLastYear - productivityArtificial) / 2) * m3Artificial AS DECIMAL (10,2)) AS amountArtificia + FROM + (SELECT + SUM(p.m3) AS m3, SUM(p.m3FV) as m3FV, SUM(p.m3PCA) as m3PCA, SUM(p.m3Artificial) as m3Artificial, + SUM(p.costCoordinacion) / SUM(p.m3) AS productivityCoordinacion, + SUM(p.costSacado) / SUM(p.m3) AS productivitySacado, + SUM(p.costEncajado) / SUM(p.m3) AS productivityEncajado, + SUM(p.costPaletizado) / SUM(p.m3) AS productivityPaletizado, + SUM(p.costCamara) / SUM(p.m3FV) AS productivityCamara, + SUM(p.costComplementos) / SUM(p.m3PCA) AS productivityComplementos, + SUM(p.costArtificial) / SUM(p.m3Artificial) AS productivityArtificial + FROM + bs.productivity p + WHERE + p.dated BETWEEN vDateStartPeriod AND vEndingDate) sub + JOIN + (SELECT + SUM(p.costCoordinacion) / SUM(p.m3) AS productivityCoordinacionLastYear, + SUM(p.costSacado) / SUM(p.m3) AS productivitySacadoLastYear, + SUM(p.costEncajado) / SUM(p.m3) AS productivityEncajadoLastYear, + SUM(p.costPaletizado) / SUM(p.m3) AS productivityPaletizadoLastYear, + SUM(p.costCamara) / SUM(p.m3FV) AS productivityCamaraLastYear, + SUM(p.costComplementos) / SUM(p.m3PCA) AS productivityComplementosLastYear, + SUM(p.costArtificial) / SUM(p.m3Artificial) AS productivityArtificialLastYear + FROM + bs.productivity p + WHERE + p.dated BETWEEN DATE_ADD(vDateStartPeriod, INTERVAL - 1 YEAR) AND DATE_ADD(vEndingDate, INTERVAL - 1 YEAR)) sub1; + + SET vEndingDate = TIMESTAMPADD(DAY,1, vEndingDate); + 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 DROP PROCEDURE IF EXISTS `productivityDepartmentLauncher` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `productivityDepartmentLauncher`() +BEGIN + CALL bs.productivityDepartmentAdd('2019-05-06', CURDATE(),DATE_SUB(CURDATE(), INTERVAL 2 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 DROP PROCEDURE IF EXISTS `productivityLauncher` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `productivityLauncher`() +BEGIN + + DECLARE vDateFrom DATE; + + SELECT LEAST(TIMESTAMPADD(MONTH, -1, CURDATE()),MAX(dated)) + INTO vDateFrom + FROM bs.productivity; + + WHILE CURDATE() > vDateFrom DO + CALL bs.productivityAdd(vDateFrom); + SET vDateFrom = TIMESTAMPADD(DAY,1,vDateFrom); + END WHILE; + + SET vDateFrom = TIMESTAMPADD(MONTH, -13, CURDATE()); + + WHILE TIMESTAMPADD(MONTH, -12, CURDATE()) > vDateFrom DO + CALL bs.productivityAdd(vDateFrom); + SET vDateFrom = TIMESTAMPADD(DAY,1,vDateFrom); + 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 DROP PROCEDURE IF EXISTS `productivityLauncher_manual` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `productivityLauncher_manual`(vDateFrom DATE, vToDate DATE) +BEGIN + + TRUNCATE tmp.log; + + WHILE vToDate >= vDateFrom DO + + INSERT INTO tmp.log(text) VALUES (vDateFrom); + CALL bs.productivityAdd(vDateFrom); + + CALL bs.productivityAdd(TIMESTAMPADD(YEAR, -1,vDateFrom)); + INSERT INTO tmp.log(text) VALUES (TIMESTAMPADD(YEAR, -1,vDateFrom)); + + SET vDateFrom = TIMESTAMPADD(DAY,1,vDateFrom); + + 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 DROP PROCEDURE IF EXISTS `pruebas` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `pruebas`(IN vDateStart DATE, IN vDateEnd DATE) +BEGIN + +WHILE vDateStart <> vDateEnd +DO + UPDATE indicators + SET countEmployee = + ( SELECT CAST(SUM(hours_week) / 40 AS DECIMAL (10 , 2 )) + FROM + postgresql.business AS b + JOIN postgresql.profile p ON p.profile_id = b.provider_id + JOIN postgresql.person pe ON pe.person_id = p.person_id + LEFT JOIN + postgresql.business_labour AS bl ON bl.business_id = b.business_id + LEFT JOIN + postgresql.calendar_labour_type AS cl ON cl.calendar_labour_type_id = bl.calendar_labour_type_id + WHERE + (vDateStart BETWEEN b.date_start AND b.date_end OR (b.date_end IS NULL AND b.date_start <= vDateStart)) + AND pe.name = 'VERDNATURA LEVANTE SL' + ) + WHERE updated = vDateStart; + SET vDateStart = DATE_ADD(vDateStart, 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` 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 DROP PROCEDURE IF EXISTS `userSundayRole` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `userSundayRole`() +BEGIN + -- 4996 Fran Natek Echevarria + DECLARE vDay INT; + SET vDay := (SELECT DAYOFWEEK(CURDATE())); + IF vDay = 1 THEN + UPDATE account.user u + JOIN account.role r + SET u.role = r.id + WHERE u.id = 4996 AND r.name = "salesAssistant"; + ELSE + UPDATE account.user u + JOIN account.role r + SET u.role = r.id + WHERE u.id = 4996 AND r.name = "salesPerson"; + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `vendedores_add`(intYEAR INT, vQuarter INT) +BEGIN + + DECLARE vCommissionRate DOUBLE DEFAULT 0.029; + + -- 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) + SELECT c.Id_Trabajador + , intYEAR + , MONTH(v.fecha) intMONTH + , sum(v.importe) + , sum(v.importe) * vCommissionRate + 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`; + + -- Ventas nuevas + UPDATE vendedores v + JOIN + ( + SELECT c.Id_Trabajador + , sum(importe) * vCommissionRate as comisionNueva + , t.`month` + , t.`year` + FROM ventas v + JOIN bs.clientNewBorn cnb on v.Id_Cliente = cnb.clientFk + JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY c.Id_Trabajador, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionNuevos = sub.comisionNueva, v.comision = v.comision - sub.comisionNueva; + + -- Ventas cedidas + UPDATE vendedores v + JOIN ( + SELECT cc.Id_Trabajador_old as Id_Trabajador + , sum(importe) * vCommissionRate * comision_old as cedido + , sum(importe) * vCommissionRate * comision_new as arrendada + , t.`month` + , t.`year` + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN vn2008.Clientes_cedidos cc on cc.Id_Cliente = c.Id_Cliente AND v.fecha between datSTART and datEND + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY cc.Id_Trabajador_old, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionCedida = sub.cedido, v.comision = v.comision - sub.cedido - sub.arrendada; + + -- Ventas arrendadas + UPDATE vendedores v + JOIN ( + SELECT cc.Id_Trabajador_new as Id_Trabajador + , sum(importe) * vCommissionRate * comision_new as arrendada + , t.`month` + , t.`year` + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN vn2008.Clientes_cedidos cc on cc.Id_Cliente = c.Id_Cliente AND v.fecha between datSTART and datEND + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY cc.Id_Trabajador_new, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionArrendada = sub.arrendada; + + -- Sustitucion cedidas - lended + INSERT INTO vendedores (Id_Trabajador, mes, año, comision) + SELECT c.salesPersonFk + , sum(importe) * vCommissionRate as lended + , t.`month` + , t.`year` + 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); + + -- Sustitucion arrendadas - borrowed + INSERT INTO vendedores (Id_Trabajador, mes, año, sustitucionArrendada) + SELECT scd.substituteFk + , sum(importe) * vCommissionRate as borrowed + , t.`month` + , t.`year` + 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 sustitucionArrendada = sustitucionArrendada + VALUES(sustitucionArrendada); + + DROP TEMPORARY TABLE IF EXISTS tmp.workerItemType; + CREATE TEMPORARY TABLE tmp.workerItemType + (INDEX(ownerWorkerFk, itemTypeFk)) + SELECT wd.workerFk ownerWorkerFk, itemTypeFk, dit.workerFk substituteFk + FROM vn.departmentItemType dit + JOIN vn.workerDepartment wd ON wd.departmentFk = dit.departmentFk; + + -- itemType Lended, prestado + UPDATE vendedores v + JOIN ( + SELECT c.Id_Trabajador + , sum(importe) * vCommissionRate as amount + , t.`month` + , t.`year` + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN tmp.workerItemType wit ON wit.ownerWorkerFk = c.Id_Trabajador AND wit.itemTypeFk = v.tipo_id + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY c.Id_Trabajador, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comision = v.comision - sub.amount; + + -- itemType borrowed, tomado prestado + INSERT INTO vendedores (Id_Trabajador, año, mes, itemTypeBorrowed) + SELECT wit.substituteFk + , t.`year` + , t.`month` + , importe * vCommissionRate + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN tmp.workerItemType wit ON wit.ownerWorkerFk = c.Id_Trabajador AND wit.itemTypeFk = v.tipo_id + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + ON DUPLICATE KEY UPDATE itemTypeBorrowed = itemTypeBorrowed + values(itemTypeBorrowed); + + DROP TEMPORARY TABLE tmp.workerItemType; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `vendedores_add_launcher`() +BEGIN + + call bs.vendedores_add(YEAR(CURDATE()),QUARTER(CURDATE())); + + call bs.vendedores_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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `vendedores_add__`(intYEAR INT, vQuarter INT) +BEGIN + + DECLARE comisionRate DOUBLE DEFAULT 0.029; + + REPLACE vendedores + SELECT c.Id_Trabajador + , intYEAR + , MONTH(v.fecha) intMONTH + , sum(importe) as importe + , sum(importe) * 0.029 as comision + , 0 as comisionArrendada + , 0 as comisionCedida + , 0 as comisionNuevos + , 0 as sustitucionArrendada + , 0 as sustitucionCedida + , 0 as itemTypeLended + , 0 as itemTypeBorrowed + + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY c.Id_Trabajador, t.`month`; + + -- Ventas nuevas + UPDATE vendedores v + JOIN + ( + SELECT c.Id_Trabajador + , sum(importe) * 0.029 as comisionNueva + , t.`month` + , t.`year` + FROM ventas v + JOIN bs.clientNewBorn cnb on v.Id_Cliente = cnb.clientFk + JOIN vn2008.Clientes c ON c.Id_Cliente = v.Id_Cliente + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY c.Id_Trabajador, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionNuevos = sub.comisionNueva, v.comision = v.comision - sub.comisionNueva; + + -- Ventas cedidas + UPDATE vendedores v + JOIN ( + SELECT cc.Id_Trabajador_old as Id_Trabajador + , sum(importe) * 0.029 * comision_old as cedido + , sum(importe) * 0.029 * comision_new as arrendada + , t.`month` + , t.`year` + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN vn2008.Clientes_cedidos cc on cc.Id_Cliente = c.Id_Cliente AND v.fecha between datSTART and datEND + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY cc.Id_Trabajador_old, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionCedida = sub.cedido, v.comision = v.comision - sub.cedido - sub.arrendada; + + -- Ventas arrendadas + UPDATE vendedores v + JOIN ( + SELECT cc.Id_Trabajador_new as Id_Trabajador + , sum(importe) * 0.029 * comision_new as arrendada + , t.`month` + , t.`year` + FROM ventas v + JOIN vn2008.Clientes c on v.Id_Cliente = c.Id_Cliente + JOIN vn2008.Clientes_cedidos cc on cc.Id_Cliente = c.Id_Cliente AND v.fecha between datSTART and datEND + JOIN vn2008.`time` t on t.`date` = v.fecha + WHERE c.Id_Trabajador is not null + AND t.`year` = intYEAR AND QUARTER(v.fecha) = vQuarter + GROUP BY cc.Id_Trabajador_new, t.`month` + ) sub ON sub.Id_Trabajador = v.Id_Trabajador AND sub.`month` = v.mes AND sub.`year` = v.año + SET v.comisionArrendada = sub.arrendada; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` 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 vFirstYear INTEGER DEFAULT 2017; +DECLARE vFirstMonth INTEGER DEFAULT 1; + +DECLARE vDateFrom DATE; +DECLARE vDateTo DATE; + +SET vCurYear = year(CURDATE()); +SET vCurMonth = month(CURDATE()); + +SELECT IFNULL(max(year),vFirstYear), IFNULL(max(month),vFirstMonth) + 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; + + SELECT vDateTo, vDateFrom, vYear, 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_add`(IN datSTART DATETIME, IN datEND DATETIME) +BEGIN + + DECLARE vStartingDate DATETIME; + DECLARE vEndingDate DATETIME; + DECLARE TIPO_PATRIMONIAL INT DEFAULT 188; + + IF datSTART < '2015-10-01' OR datEND < '2015-10-01' THEN + CALL util.throw('fechaDemasiadoAntigua'); + END IF; + + SET datEND = util.dayEnd(datEND); + SET vStartingDate = datSTART; + SET vEndingDate = vn2008.dayend(vStartingDate); + + DELETE + FROM ventas + WHERE fecha between vStartingDate and datEND; + + WHILE vEndingDate <= datEND DO + + REPLACE ventas(Id_Movimiento, importe, recargo, fecha, tipo_id, Id_Cliente, empresa_id) + SELECT Id_Movimiento, + SUM(IF(base, Cantidad * Valor, 0)) as importe, + SUM(IF(base, 0, Cantidad * Valor)) as recargo, + vStartingDate, + a.tipo_id, + cs.Id_Cliente, + t.empresa_id + FROM vn2008.Movimientos_componentes mc + JOIN bi.tarifa_componentes tc using(Id_Componente) + JOIN bi.tarifa_componentes_series tcs using(tarifa_componentes_series_id) + JOIN vn2008.Movimientos m using(Id_Movimiento) + JOIN vn2008.Articles a using(Id_Article) + JOIN vn2008.Tipos tp using(tipo_id) + JOIN vn2008.reinos r on r.id = tp.reino_id + JOIN vn2008.Tickets t using(Id_Ticket) + JOIN vn2008.Consignatarios cs using(Id_Consigna) + JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente + WHERE t.Fecha between vStartingDate and vEndingDate + AND c.typeFk IN ('Normal','handMaking','internalUse') + AND m.Cantidad <> 0 + AND a.tipo_id != TIPO_PATRIMONIAL + AND m.Descuento <> 100 + AND (m.Id_Article = 98 or m.Id_Article = 95 or r.mercancia != 0) + GROUP BY mc.Id_Movimiento + HAVING IFNULL(importe,0) <> 0 OR IFNULL(recargo,0) <> 0; + + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_add_launcher`() +BEGIN + + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_add__`(IN datSTART DATETIME, IN datEND DATETIME) +BEGIN + + DECLARE vStartingDate DATETIME; + DECLARE vEndingDate DATETIME; + DECLARE TIPO_PATRIMONIAL INT DEFAULT 188; + + SET datEND = util.dayEnd(datEND); + SET vStartingDate = GREATEST('2015-10-01',datSTART); + SET vEndingDate = vn2008.dayend(vStartingDate); + + DELETE + FROM ventas + WHERE fecha between vStartingDate and datEND; + + WHILE vEndingDate <= datEND DO + + REPLACE ventas(Id_Movimiento, importe, recargo, fecha, tipo_id, Id_Cliente, empresa_id) + SELECT Id_Movimiento, + SUM(IF(base, Cantidad * Valor, 0)) as importe, + SUM(IF(base, 0, Cantidad * Valor)) as recargo, + vStartingDate, + a.tipo_id, + cs.Id_Cliente, + t.empresa_id + FROM vn2008.Movimientos_componentes mc + JOIN bi.tarifa_componentes tc using(Id_Componente) + JOIN bi.tarifa_componentes_series tcs using(tarifa_componentes_series_id) + JOIN vn2008.Movimientos m using(Id_Movimiento) + JOIN vn2008.Articles a using(Id_Article) + JOIN vn2008.Tipos tp using(tipo_id) + JOIN vn2008.reinos r on r.id = tp.reino_id + JOIN vn2008.Tickets t using(Id_Ticket) + JOIN vn2008.Consignatarios cs using(Id_Consigna) + JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente + WHERE t.Fecha between vStartingDate and vEndingDate + AND datEND >= '2015-10-01' + AND c.typeFk IN ('Normal','handMaking','internalUse') + AND m.Cantidad <> 0 + AND a.tipo_id != TIPO_PATRIMONIAL + AND c.Id_Trabajador IS NOT NULL + AND m.Descuento <> 100 + AND (m.Id_Article = 98 or m.Id_Article = 95 or r.mercancia != 0) + GROUP BY mc.Id_Movimiento + HAVING IFNULL(importe,0) <> 0 OR IFNULL(recargo,0) <> 0; + + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_contables_add`(IN vYear INT, IN vMonth INT) +BEGIN +/** + * Reemplaza las ventas contables. 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)) + 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; + + +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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_contables_add_launcher`() +BEGIN + + 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 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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `ventas_contables_por_cliente`(IN vYear INT, IN vMonth INT) +BEGIN + + +DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; + +CREATE TEMPORARY TABLE tmp.ticket_list + (PRIMARY KEY (Id_Ticket)) + SELECT Id_Ticket + FROM vn2008.Tickets t + JOIN 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; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `vivosMuertos`() +BEGIN + +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 DROP PROCEDURE IF EXISTS `waste_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 */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` PROCEDURE `waste_Add`() +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, + 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 + + ) 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 DROP PROCEDURE IF EXISTS `weekWaste` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `weekWaste`() +BEGIN + DECLARE vWeek INT; + DECLARE vYear INT; + + SELECT week, year + INTO vWeek, vYear + FROM vn.time + WHERE dated = DATE_ADD(CURDATE(), INTERVAL -1 WEEK); + + SELECT *, 100 * dwindle / total AS percentage + FROM ( + SELECT buyer, + sum(saleTotal) as total, + sum(saleWaste) as dwindle + FROM bs.waste + WHERE year = vYear and week = vWeek + GROUP BY buyer + ) sub + ORDER BY percentage 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 DROP PROCEDURE IF EXISTS `weekWaste_byWorker` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `weekWaste_byWorker`(vWorkerFk INT) +BEGIN + + DECLARE vWeek INT; + DECLARE vYear INT; + + SELECT week, year + INTO vWeek, vYear + FROM vn.time + WHERE dated = TIMESTAMPADD(WEEK,-1,CURDATE()); + + SELECT *, 100 * mermas / total as porcentaje + FROM ( + SELECT ws.family, + sum(ws.saleTotal) as total, + sum(ws.saleWaste) as mermas + FROM bs.waste ws + JOIN vn.worker w ON w.user = ws.buyer + WHERE year = vYear AND week = vWeek + AND w.id = vWorkerFk + GROUP BY family + + ) sub + ORDER BY porcentaje 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 DROP PROCEDURE IF EXISTS `weekWaste_getDetail` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `weekWaste_getDetail`() +BEGIN + DECLARE vLastWeek DATE; + DECLARE vWeek INT; + DECLARE vYear INT; + + SET vLastWeek = TIMESTAMPADD(WEEK,-1,CURDATE()); + SET vYear = YEAR(vLastWeek); + SET vWeek = WEEK(vLastWeek, 1); + + SELECT *, 100 * dwindle / total AS percentage + FROM ( + SELECT buyer, + ws.family, + sum(ws.saleTotal) AS total, + sum(ws.saleWaste) AS dwindle + FROM bs.waste ws + WHERE year = vYear AND week = vWeek + GROUP BY buyer, family + ) sub + ORDER BY percentage 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 DROP PROCEDURE IF EXISTS `workerSpeed` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `workerSpeed`() +BEGIN + + /* #UPDATED PAK 2019/09/02 + * #PENDING REVIEW + * + * + * + * + */ + + DECLARE vLastUpdated DATETIME; + DECLARE vSecondsDelay INT DEFAULT 300; + + SELECT IFNULL(MAX(lastUpdated),CURDATE()) INTO vLastUpdated + FROM bs.workerSpeed; + + IF TIMESTAMPDIFF(SECOND, vLastUpdated, NOW()) > vSecondsDelay THEN + + DELETE FROM bs.workerSpeed ; + -- WHERE lastUpdated < CURDATE(); + + -- Sacadores + REPLACE bs.workerSpeed + SELECT workerCode, + accion, + warehouseFk, + CAST(60 * sumaLitros / time_to_sec(timediff(finished, started)) AS DECIMAL(10,1)) as LitrosMinuto, + CAST(sumaLitrosLastHour / 60 AS DECIMAL(10,1)) as LitrosMinutoLastHour, + now() as lastUpdated + FROM + ( + SELECT warehouseFk, + accion, + workerCode, + sum(litros) as sumaLitros, + min(created) as started, + max(created) as finished, + sum(IF(created >= TIMESTAMPADD(HOUR, -1, NOW()),litros, 0)) as sumaLitrosLastHour + FROM + ( + SELECT t.warehouseFk, + st.saleFk, + st.isChecked, + st.originalQuantity, + a.accion, + st.created, + e.code, + w.firstname, + w.lastName, + w.code as workerCode, + r.cm3 * s.quantity / 1000 as litros, + s.concept + FROM vn.saleTracking st + LEFT JOIN + (SELECT saleFk + FROM vn.saleTracking st + JOIN vn.state e ON e.id = st.stateFk + WHERE st.created > CURDATE() + AND e.code LIKE 'PREVIOUS_PREPARATION') 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 bi.rotacion r ON r.warehouse_id = t.warehouseFk AND r.Id_Article = 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 + WHERE st.created > TIMESTAMPADD(HOUR,-1,NOW()) + AND prevPrepSales.saleFk IS NULL + ) sub + GROUP BY warehouseFk, accion, workerCode + ) sub2; + + -- Encajadores + REPLACE bs.workerSpeed + SELECT code as workerCode, + 'ENCAJAR' as accion, + warehouseFk, + CAST(60 * sum(Litros) / time_to_sec(timediff(MAX(finished), MIN(started))) AS DECIMAL(10,1)) as LitrosMinuto, + CAST(sum(litrosUltimaHora) / 60 AS DECIMAL(10,1)) as LitrosMinutoLastHour, + now() as lastUpdated + FROM ( + SELECT sv.ticketFk, + sum(sv.litros) as litros, + sum(IF(started > TIMESTAMPADD(HOUR,-1,NOW()),sv.litros,0)) as litrosUltimaHora, + code, + started, + finished, + cajas, + warehouseFk + FROM vn.saleVolume sv + JOIN + ( + SELECT ticketFk, + min(e.created) as started, + max(e.created) as finished, + max(counter) as cajas, + w.code, + t.warehouseFk + FROM vn.expedition e + JOIN vn.worker w ON w.id = e.workerFk + JOIN vn.ticket t ON t.id = e.ticketFk + WHERE e.created > CURDATE() + GROUP BY ticketFk + ) sub ON sub.ticketFk = sv.ticketFk + GROUP BY sv.ticketFk) sub2 + GROUP BY code; + + END IF; + + SELECT * FROM bs.workerSpeed; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `workerSpeed_detail` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `workerSpeed_detail`(vWorkerCode VARCHAR(3), vAction VARCHAR(25)) +BEGIN + + SELECT * FROM + ( + SELECT time_format(st.created,'%H:%i') as hora, + t.warehouseFk as Almacen, + t.id as ticketFk, + floor(sum(s.quantity * r.cm3) / 1000) as Litros + + FROM vn.saleTracking st + JOIN vn.sale s ON s.id = st.saleFk + JOIN vn.ticket t ON t.id = s.ticketFk + JOIN bi.rotacion r ON r.warehouse_id = t.warehouseFk AND r.Id_Article = 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 + WHERE st.created > CURDATE() + AND a.accion LIKE vAction + AND w.code LIKE vWorkerCode + GROUP BY t.id) sub + ORDER BY hora; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_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` -- @@ -13606,6 +17493,10 @@ CREATE TABLE `business_labour_payroll` ( `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_cod_contrato` (`cod_contrato`), + CONSTRAINT `business_labour_payroll_cod_categoria` FOREIGN KEY (`cod_categoria`) REFERENCES `vn2008`.`payroll_categorias` (`codcategoria`) ON UPDATE CASCADE, + CONSTRAINT `business_labour_payroll_cod_contrato` FOREIGN KEY (`cod_contrato`) REFERENCES `vn2008`.`payroll_contratos` (`CodContrato`) 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 */; @@ -17791,14 +21682,33 @@ CREATE TABLE `claimLog` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Temporary table structure for view `claimRatio` +-- Table structure for table `claimRatio` -- DROP TABLE IF EXISTS `claimRatio`; -/*!50001 DROP VIEW 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 */; + +-- +-- Temporary table structure for view `claimRatio__` +-- + +DROP TABLE IF EXISTS `claimRatio__`; +/*!50001 DROP VIEW IF EXISTS `claimRatio__`*/; SET @saved_cs_client = @@character_set_client; SET character_set_client = utf8; -/*!50001 CREATE VIEW `claimRatio` AS SELECT +/*!50001 CREATE VIEW `claimRatio__` AS SELECT 1 AS `clientFk`, 1 AS `yearSale`, 1 AS `claimAmount`, @@ -18525,6 +22435,7 @@ CREATE TABLE `collectionVolumetry` ( `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) NOT NULL DEFAULT '20', PRIMARY KEY (`id`) ) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -18806,9 +22717,9 @@ DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `vn`.`country_beforeUpdate` BEFORE UPDATE ON `country` FOR EACH ROW BEGIN - IF !(OLD.geoFk <=> NEW.geoFk) THEN - CALL zoneGeo_throwNotEditable; - END IF; + -- IF !(OLD.geoFk <=> NEW.geoFk) THEN + -- CALL zoneGeo_throwNotEditable; + -- END IF; END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -20972,9 +24883,6 @@ DELIMITER ;; BEFORE INSERT ON `item` FOR EACH ROW BEGIN DECLARE vDensity DOUBLE; - DECLARE vInsertId INT; - DECLARE vProducerFk VARCHAR(50); - DECLARE vInkName VARCHAR(50); IF NEW.density IS NULL THEN SELECT density INTO vDensity @@ -21179,6 +25087,7 @@ CREATE TABLE `itemCategory` ( `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', PRIMARY KEY (`id`), UNIQUE KEY `reino_UNIQUE` (`name`), KEY `itemCategory_idx3` (`merchandise`) @@ -21213,6 +25122,19 @@ SET character_set_client = utf8; 1 AS `name`*/; 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 VIEW `itemColor` AS SELECT + 1 AS `itemFk`, + 1 AS `color`*/; +SET character_set_client = @saved_cs_client; + -- -- Table structure for table `itemConversor` -- @@ -21230,6 +25152,71 @@ CREATE TABLE `itemConversor` ( ) 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', + `wated` decimal(10,4) NOT NULL DEFAULT '0.0000', + `cm3delivery` int(11) NOT NULL DEFAULT '0', + 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 = 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`@`%`*/ /*!50003 TRIGGER `vn`.`itemCost_beforeInsert` BEFORE INSERT ON `vn`.`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 = 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`@`%`*/ /*!50003 TRIGGER `vn`.`itemCost_beforeUpdate` BEFORE UPDATE ON `vn`.`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 */ ; + -- -- Temporary table structure for view `itemEntryIn` -- @@ -21434,6 +25421,19 @@ SET character_set_client = utf8; 1 AS `sectorFk`*/; SET character_set_client = @saved_cs_client; +-- +-- 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 VIEW `itemProductor` AS SELECT + 1 AS `itemFk`, + 1 AS `productor`*/; +SET character_set_client = @saved_cs_client; + -- -- Table structure for table `itemRepo` -- @@ -22421,7 +26421,9 @@ CREATE TABLE `orderTicket` ( `orderFk` int(10) unsigned NOT NULL, `ticketFk` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ticketFk`,`orderFk`), - KEY `order_id` (`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 */; @@ -22860,9 +26862,9 @@ DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `postCode_beforeUpdate` BEFORE UPDATE ON `postCode` FOR EACH ROW BEGIN - IF !(OLD.geoFk <=> NEW.geoFk) THEN - CALL zoneGeo_throwNotEditable; - END IF; + -- IF !(OLD.geoFk <=> NEW.geoFk) THEN + -- CALL zoneGeo_throwNotEditable; + -- END IF; END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -22916,22 +26918,6 @@ DELIMITER ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; --- --- Table structure for table `postCodeBack__` --- - -DROP TABLE IF EXISTS `postCodeBack__`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `postCodeBack__` ( - `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_idx2` (`townFk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `priceBuilderTag__` -- @@ -23273,9 +27259,9 @@ DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `vn`.`province_beforeUpdate` BEFORE UPDATE ON `province` FOR EACH ROW BEGIN - IF !(OLD.geoFk <=> NEW.geoFk) THEN - CALL zoneGeo_throwNotEditable; - END IF; + -- IF !(OLD.geoFk <=> NEW.geoFk) THEN + -- CALL zoneGeo_throwNotEditable; + -- END IF; END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -24185,21 +28171,18 @@ CREATE TABLE `sharingCart` ( /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!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 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`@`%`*/ /*!50003 TRIGGER `vn`.`sharingCart_beforeInsert` BEFORE INSERT ON `sharingCart` FOR EACH ROW BEGIN - SET NEW.started = GREATEST(CURDATE(),NEW.started); - SET NEW.ended = GREATEST(CURDATE(),NEW.ended); - - IF NEW.workerFk = NEW.workerSubstitute THEN - SET NEW.workerFk = NULL; -END IF; + IF NEW.workerFk = NEW.workerSubstitute THEN + CALL util.throw ('worker and workerSubstitute must be different'); + END IF; END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -24209,20 +28192,16 @@ 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_general_ci */ ; +/*!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`@`%`*/ /*!50003 TRIGGER `vn`.`sharingCart_beforeUpdate` BEFORE UPDATE ON `sharingCart` FOR EACH ROW - BEGIN - SET NEW.started = GREATEST(CURDATE(),NEW.started); - SET NEW.ended = GREATEST(CURDATE(),NEW.ended); - - IF NEW.workerFk = NEW.workerSubstitute THEN - SET NEW.workerFk = NULL; + IF NEW.workerFk = NEW.workerSubstitute THEN + CALL util.throw ('worker and workerSubstitute must be different'); END IF; END */;; DELIMITER ; @@ -24231,6 +28210,27 @@ DELIMITER ; /*!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(11) NOT NULL, + `substituteFk` int(11) 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` -- @@ -25151,6 +29151,19 @@ DELIMITER ; /*!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` -- @@ -25778,9 +29791,9 @@ DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `town_beforeUpdate` BEFORE UPDATE ON `town` FOR EACH ROW BEGIN - IF !(OLD.geoFk <=> NEW.geoFk) THEN - CALL zoneGeo_throwNotEditable; - END IF; + -- IF !(OLD.geoFk <=> NEW.geoFk) THEN + -- CALL zoneGeo_throwNotEditable; + -- END IF; END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -25990,7 +30003,7 @@ BEGIN 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 @@ -25999,7 +30012,7 @@ BEGIN Id_Ticket = NEW.id, value_old = OLD.isDelivered, value_new = NEW.isDelivered; - END IF; + END IF; */ END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -26031,7 +30044,7 @@ CREATE TABLE `travelLog` ( 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=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -26242,11 +30255,15 @@ CREATE TABLE `warehouse` ( `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, PRIMARY KEY (`id`), UNIQUE KEY `name_UNIQUE` (`name`), KEY `Id_Paises` (`countryFk`), KEY `isComparativeIdx` (`isComparative`), - CONSTRAINT `warehouse_ibfk_1` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) + KEY `warehouse_ibfk_1_idx` (`aliasFk`), + 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 */ ; @@ -26304,7 +30321,8 @@ DROP TABLE IF EXISTS `warehouseAlias`; CREATE TABLE `warehouseAlias` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(15) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + UNIQUE KEY `name_UNIQUE` (`name`) ) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -27105,6 +31123,7 @@ CREATE TABLE `zone` ( `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, PRIMARY KEY (`id`), KEY `fk_zone_1_idx` (`warehouseFk__`), KEY `fk_zone_2_idx` (`agencyModeFk`), @@ -27131,6 +31150,35 @@ CREATE TABLE `zoneCalendar` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!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, + PRIMARY KEY (`id`) +) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `zoneEvent` -- @@ -29173,9 +33221,9 @@ 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 = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!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 ;; @@ -29230,14 +33278,14 @@ BEGIN DROP TEMPORARY TABLE IF EXISTS tmp.workerComercial; CREATE TEMPORARY TABLE tmp.workerComercial ENGINE = MEMORY - SELECT worker FROM `grant` g - JOIN grantGroup gg ON g.`group` = gg.id + 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.worker = wc.worker - JOIN grantGroup gg ON g.`group` = gg.id + 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; @@ -30929,6 +34977,45 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` 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 DROP FUNCTION IF EXISTS `xdiario_new` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -32416,9 +36503,9 @@ 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_general_ci */ ; +/*!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 ;; @@ -32457,6 +36544,7 @@ BEGIN LEFT JOIN sale s ON s.ticketFk = tw.ticketFk WHERE s.itemFk IS NULL; DELETE FROM claim WHERE ticketCreated < v18Month; DELETE FROM message WHERE sendDate < vDateShort; + DELETE FROM travelLog WHERE creationDate < v18Month; DELETE sc FROM saleChecked sc JOIN sale s ON sc.saleFk = s.id WHERE s.created < vDateShort; DELETE bm @@ -33207,35 +37295,31 @@ BEGIN DECLARE vNewTicket INT DEFAULT 0; - IF account.myUserHasRole('administrative') THEN - - CALL vn.clientPackagingOverstock(vClientFk,vGraceDays); - - CALL vn.ticketCreate( - vClientFk - ,curdate() - ,1 -- Silla FV - ,442 -- Verdnatura - ,NULL -- address - ,2 -- Rec_Silla - ,NULL -- route - ,curdate() - ,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; + CALL vn.clientPackagingOverstock(vClientFk,vGraceDays); - END IF; + CALL vn.ticketCreate( + vClientFk + ,curdate() + ,1 -- Silla FV + ,442 -- Verdnatura + ,NULL -- address + ,2 -- Rec_Silla + ,NULL -- route + ,curdate() + ,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; @@ -33370,70 +37454,56 @@ 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 = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!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 ;; CREATE DEFINER=`root`@`%` PROCEDURE `clonTravelComplete`(IN `vTravelFk` INT, IN `vDateStart` DATE, IN `vDateEnd` DATE, IN `vRef` VARCHAR(255)) BEGIN - DECLARE vTravelNew INT; - DECLARE vEntryNew INT; - DECLARE vDone BIT DEFAULT 0; - 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 vRsBuy CURSOR FOR - SELECT b.* - FROM buy b - JOIN entry e - ON b.entryFk = e.id - WHERE e.travelFk = vTravelNew and b.entryFk=entryNew - ORDER BY e.id; - - DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; - - DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - ROLLBACK; - RESIGNAL; - END; - - START TRANSACTION; - - INSERT INTO travel (shipped,landed, warehouseInFk, warehouseOutFk, agencyFk, ref, isDelivered, isReceived, m3, kg) - SELECT vDateStart, vDateEnd,warehouseInFk, warehouseOutFk, agencyFk, vRef, isDelivered, isReceived, m3, kg - FROM travel - WHERE id = vTravelFk; - - SET vTravelNew = LAST_INSERT_ID(); - SET vDone = 0; - OPEN vRsEntry ; - FETCH vRsEntry INTO vAuxEntryFk; + DECLARE vTravelNew INT; + 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; - WHILE NOT vDone DO - INSERT INTO entry (supplierFk, - ref, - isInventory, - isConfirmed, - isOrdered, - isRaid, - commission, - created, - evaNotes, - travelFk, - currencyFk, - companyFk, - gestDocFk, - invoiceInFk) - SELECT supplierFk, + DECLARE vRsBuy CURSOR FOR + SELECT b.* + FROM buy b + JOIN entry e + ON b.entryFk = e.id + WHERE e.travelFk = vTravelNew and b.entryFk=entryNew + ORDER BY e.id; + + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + ROLLBACK; + RESIGNAL; + END; + + START TRANSACTION; + + INSERT INTO travel (shipped,landed, warehouseInFk, warehouseOutFk, agencyFk, ref, isDelivered, isReceived, m3, kg) + SELECT vDateStart, vDateEnd,warehouseInFk, warehouseOutFk, agencyFk, vRef, isDelivered, isReceived, m3, kg + FROM travel + WHERE id = vTravelFk; + + SET vTravelNew = LAST_INSERT_ID(); + SET vDone = FALSE; + OPEN vRsEntry ; + FETCH vRsEntry INTO vAuxEntryFk; + + WHILE NOT vDone DO + INSERT INTO entry (supplierFk, ref, isInventory, isConfirmed, @@ -33442,66 +37512,82 @@ BEGIN commission, created, evaNotes, - vTravelNew, + travelFk, currencyFk, companyFk, gestDocFk, - invoiceInFk - FROM entry - WHERE id = vAuxEntryFk; - - SET vEntryNew = LAST_INSERT_ID(); - - - INSERT INTO buy (entryFk, - itemFk, - quantity, - buyingValue, - packageFk, - stickers, - freightValue, - packageValue, - comissionValue, - packing, - `grouping`, - groupingMode, - location, - price1, - price2, - price3, - minPrice, - producer, - printedStickers, - isChecked) - SELECT vEntryNew, - itemFk, - quantity, - buyingValue, - packageFk, - stickers, - freightValue, - packageValue, - comissionValue, - packing, - `grouping`, - groupingMode, - location, - price1, - price2, - price3, - minPrice, - producer, - printedStickers, - isChecked - FROM buy - WHERE entryFk = vAuxEntryFk; - - - FETCH vRsEntry INTO vAuxEntryFk; - END WHILE; - CLOSE vRsEntry; - COMMIT; - END ;; + invoiceInFk) + SELECT supplierFk, + ref, + isInventory, + isConfirmed, + isOrdered, + isRaid, + commission, + created, + evaNotes, + vTravelNew, + currencyFk, + companyFk, + gestDocFk, + invoiceInFk + FROM entry + WHERE id = vAuxEntryFk; + + SET vEntryNew = LAST_INSERT_ID(); + + + 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; + CLOSE vRsEntry; + COMMIT; +END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; @@ -33513,19 +37599,23 @@ DELIMITER ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8 */ ; /*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_unicode_ci */ ; +/*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`%` PROCEDURE `collectionPlacement_get`(vCollectionFk INT) BEGIN + DECLARE vCalcFk INT; DECLARE vWarehouseFk INT; + DECLARE vWarehouseAliasFk INT; - SELECT t.warehouseFk - INTO vWarehouseFk + SELECT t.warehouseFk, w.aliasFk + INTO vWarehouseFk, vWarehouseAliasFk FROM vn.ticket t JOIN vn.ticketCollection tc ON tc.ticketFk = t.id + JOIN vn.warehouse w ON w.id = t.warehouseFk + WHERE tc.collectionFk = vCollectionFk LIMIT 1; CALL cache.visible_refresh(vCalcFk,FALSE,vWarehouseFk); @@ -33533,14 +37623,19 @@ BEGIN DROP TEMPORARY TABLE IF EXISTS tmp.parked; CREATE TEMPORARY TABLE tmp.parked ENGINE MEMORY - SELECT s.itemFk, - sum(IFNULL(ish.visible,0)) as quantity + SELECT s.itemFk, 0 as quantity FROM vn.ticketCollection tc JOIN vn.sale s ON s.ticketFk = tc.ticketFk - LEFT JOIN vn.itemShelving ish ON ish.itemFk = s.itemFk - WHERE tc.collectionFk = vCollectionFk - GROUP BY s.itemFk; - + WHERE tc.collectionFk = vCollectionFk; + + UPDATE tmp.parked pk + 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 = pk.itemFk + SET pk.quantity = iss.visible; + DROP TEMPORARY TABLE IF EXISTS tmp.`grouping`; CREATE TEMPORARY TABLE tmp.`grouping` ENGINE MEMORY @@ -33580,8 +37675,10 @@ BEGIN 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 JOIN tmp.`grouping` g ON g.itemFk = s.itemFk WHERE tc.collectionFk = vCollectionFk + AND w.aliasFk = vWarehouseAliasFk UNION ALL SELECT s.id as saleFk, s.itemFk, ip.code COLLATE utf8_general_ci as placement, @@ -33597,7 +37694,9 @@ BEGIN JOIN tmp.parked p ON p.itemFk = s.itemFk JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vCalcFk LEFT JOIN tmp.grouping2 g ON g.itemFk = s.itemFk - WHERE tc.collectionFk = vCollectionFk; + WHERE tc.collectionFk = vCollectionFk + -- HAVING visible > 0 + ; DROP TEMPORARY TABLE tmp.parked, @@ -33631,7 +37730,15 @@ BEGIN reserved, max(isPreviousPrepared) as isPreviousPrepared, max(isPrepared) as isPrepared, - max(isControlled) as isControlled + max(isControlled) as isControlled, + color, + productor, + discount, + price, + stems, + category, + origin, + clientFk FROM ( SELECT s.ticketFk, s.id as saleFk, @@ -33640,18 +37747,32 @@ BEGIN i.longName, i.size, s.reserved, - stPrevious.isChecked as isPreviousPrepared, - stPrepared.isChecked as isPrepared, - stControled.isChecked as isControlled + IF(st.semaphore <=> 1, TRUE, FALSE) as isPreviousPrepared, + IF(st.semaphore <=> 2, TRUE, FALSE) as isPrepared, + IF(st.semaphore <=> 3, TRUE, FALSE) as isControlled, + ic.color, + ip.productor, + s.discount, + s.price, + i.stems, + i.category, + o.code AS origin, + t.clientFk FROM vn.sale s JOIN vn.item i ON i.id = s.itemFk - 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.saleTracking str ON str.saleFk = s.id AND str.isChecked = 1 + LEFT JOIN vn.state st ON st.id = str.stateFk + LEFT JOIN vn.itemColor ic ON ic.itemFk = s.itemFk + LEFT JOIN vn.itemProductor ip ON ip.itemFk = s.itemFk + LEFT JOIN vn.origin o ON o.id = i.originFk JOIN vn.ticketCollection tc ON tc.ticketFk = s.ticketFk + JOIN vn.ticket t ON t.id = tc.ticketFk + WHERE tc.collectionFk = vCollectionFk + ) sub GROUP BY saleFk + HAVING quantity > 0 UNION ALL @@ -33660,11 +37781,19 @@ BEGIN 0, 1, CONCAT('POLIZON T',stow.id), - NULL, - NULL, + 0 AS size, + 0 AS reserved, IF(st.semaphore <=> 1,TRUE, FALSE) as isPreviousPrepared, IF(st.semaphore <=> 2,TRUE, FALSE) as isPrepared, - IF(st.semaphore <=> 3,TRUE, FALSE) as isControlled + IF(st.semaphore <=> 3,TRUE, FALSE) as isControlled, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL FROM vn.ticketCollection tc JOIN vn.stowaway stow ON stow.shipFk = tc.ticketFk LEFT JOIN vn.ticketState ts ON ts.ticketFk = stow.id @@ -33689,17 +37818,19 @@ DELIMITER ; DELIMITER ;; CREATE DEFINER=`root`@`%` PROCEDURE `collectionStickers_print`(vCollectionFk INT) BEGIN - + UPDATE vn.ticket t JOIN vn.ticketCollection tc ON tc.ticketFk = t.id SET t.notes = CONCAT('COL ',vCollectionFk,'-',tc.`level`) WHERE tc.collectionFk = vCollectionFk; - - INSERT INTO vn.printServerQueue(reportFk, param1, workerFk) - SELECT 23, tc.ticketFk, getUser() + + INSERT INTO vn.printServerQueue(reportFk, param1, workerFk) + SELECT w.labelReport, tc.ticketFk, getUser() FROM vn.ticketCollection tc + JOIN vn.ticket t ON t.id = tc.ticketFk + JOIN vn.warehouse w ON w.id = t.warehouseFk WHERE tc.collectionFk = vCollectionFk; - + END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -33710,9 +37841,9 @@ 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 = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!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 ;; @@ -33723,9 +37854,9 @@ BEGIN tc.level, am.name as agencyName FROM vn.ticketCollection tc - JOIN vn.ticket t ON t.id = tc.ticketFk - JOIN vn.zone z ON z.id = t.zoneFk - JOIN vn.agencyMode am ON am.id = z.agencyModeFk + JOIN vn.ticket t ON t.id = tc.ticketFk + LEFT JOIN vn.zone z ON z.id = t.zoneFk + LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk WHERE tc.collectionFk = vCollectionFk; END ;; @@ -33763,6 +37894,7 @@ proc:BEGIN DECLARE vVolumetryLitersMax INT; DECLARE vVolumetryLinesMax INT; DECLARE vDone BOOLEAN DEFAULT FALSE; + DECLARE vWorkerCode VARCHAR(3); DECLARE cVolumetry CURSOR FOR SELECT level, liters, `lines` @@ -33770,17 +37902,8 @@ proc:BEGIN ORDER BY `level`; DECLARE cTicket CURSOR FOR - SELECT pb.Id_Ticket ticketFk, - pb.lines, - pb.m3 * 1000 liters - FROM tmp.production_buffer pb - JOIN vn.state s ON s.id = pb.state - LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket - WHERE pb.problems = 0 - AND tc.ticketFk IS NULL - AND s.isPreparable - ORDER BY pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC - LIMIT vMaxTickets; + SELECT * + FROM tmp.ticket; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; @@ -33789,6 +37912,11 @@ proc:BEGIN FROM vn.sector WHERE id = vSectorFk; + SELECT w.code + INTO vWorkerCode + FROM vn.worker w + WHERE w.id = account.myUserGetId(); + IF vIsPreviousPrepared THEN SELECT id INTO vStateFk @@ -33808,13 +37936,20 @@ proc:BEGIN CALL vn2008.production_control_source(vWarehouseFk, 0); - -- Empieza el bucle - OPEN cVolumetry; - OPEN cTicket; + DROP TEMPORARY TABLE IF EXISTS tmp.ticket; - DROP TEMPORARY TABLE IF EXISTS tmp.kk; - CREATE TEMPORARY TABLE tmp.kk - SELECT pb.Id_Ticket ticketFk,pb.Hora, pb.Minuto, + IF (SELECT pb.Agencia + FROM tmp.production_buffer pb + JOIN vn.state s ON s.id = pb.state + LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket + WHERE pb.problems = 0 + AND tc.ticketFk IS NULL + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT 1) = 'REC_SILLA' THEN + + CREATE TEMPORARY TABLE tmp.ticket + SELECT pb.Id_Ticket ticketFk, pb.lines, pb.m3 * 1000 liters FROM tmp.production_buffer pb @@ -33822,10 +37957,32 @@ proc:BEGIN LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket WHERE pb.problems = 0 AND tc.ticketFk IS NULL - AND s.isPreparable - ORDER BY pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC - LIMIT vMaxTickets; + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT 1; + ELSE + + CREATE TEMPORARY TABLE tmp.ticket + SELECT pb.Id_Ticket ticketFk, + pb.lines, + pb.m3 * 1000 liters + FROM tmp.production_buffer pb + JOIN vn.state s ON s.id = pb.state + LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket + WHERE pb.problems = 0 + AND pb.Agencia != 'REC_SILLA' + AND tc.ticketFk IS NULL + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT vMaxTickets; + + END IF; + + -- Empieza el bucle + OPEN cVolumetry; + OPEN cTicket; + FETCH cTicket INTO vTicketFk, vTicketLines, vTicketLiters; FETCH cVolumetry INTO vVolumetryLevel, vVolumetryLiters, vVolumetryLines; @@ -33841,7 +37998,9 @@ proc:BEGIN bucle:WHILE NOT vDone DO IF (vVolumetryLitersMax < vTicketLiters OR vVolumetryLinesMax < vTicketLines) AND vVolumetryLevel > 1 THEN - LEAVE bucle; + + LEAVE bucle; + END IF; SELECT COUNT(*) INTO vIsTicketCollected @@ -33876,7 +38035,9 @@ proc:BEGIN SET vTicketLines = GREATEST(0,vTicketLines - vVolumetryLines); IF vVolumetryLitersMax = 0 OR vVolumetryLinesMax = 0 THEN + LEAVE bucle; + END IF; IF vTicketLiters > 0 OR vTicketLines > 0 THEN @@ -33898,10 +38059,315 @@ proc:BEGIN SET c.stateFk = st.id WHERE c.id = vCollectionFk; + INSERT IGNORE INTO vn.ticketDown(ticketFk) + SELECT DISTINCT tc.ticketFk + FROM vn.ticketCollection tc + JOIN vncontrol.inter vi ON vi.Id_Ticket = tc.ticketFk + JOIN vn.state st ON st.id = vi.state_id + JOIN vn.ticket t ON t.id = tc.ticketFk + JOIN vn.warehouse w ON w.id = t.warehouseFk + WHERE tc.collectionFk = vCollectionFk + AND w.name = 'Silla FV' + AND st.code = 'PREVIOUS_PREPARATION'; + + SELECT vCollectionFk; CLOSE cVolumetry; CLOSE cTicket; + DROP TEMPORARY TABLE IF EXISTS 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 DROP PROCEDURE IF EXISTS `collection_new_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 = 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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `collection_new_beta`(vSectorFk INT) +proc:BEGIN + + DECLARE vIsPreviousPrepared BOOLEAN; + DECLARE vCollectionFk INT; + DECLARE vWarehouseFk INT; + + DECLARE vTicketLiters INT; + DECLARE vTicketLines INT; + DECLARE vTicketFk INT; + DECLARE vTicketHeight INT; + DECLARE vTicketHeightTop INT; + DECLARE vTicketHeightFloor INT; + DECLARE vIsTicketCollected BOOLEAN; + DECLARE vMaxTickets INT; + DECLARE vStateFk INT; + DECLARE vTopTicketFk INT; + DECLARE vFloorTicketFk INT; + + DECLARE vVolumetryLiters INT; + DECLARE vVolumetryLines INT; + DECLARE vVolumetryFk INT; + DECLARE vVolumetryLevel INT; + DECLARE vVolumetryHeight INT; + DECLARE vVolumetryLitersMax INT; + DECLARE vVolumetryLinesMax INT; + DECLARE vVolumetryHeightTop INT; + DECLARE vVolumetryHeightFloor INT; + + + DECLARE vDone BOOLEAN DEFAULT FALSE; + DECLARE vWorkerCode VARCHAR(3); + + + + + + DECLARE cVolumetry CURSOR FOR + SELECT level, liters, `lines`, height + FROM vn.collectionVolumetry + ORDER BY `level`; + + DECLARE cTicket CURSOR FOR + SELECT * + FROM tmp.ticket; + + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; + + SELECT isPreviousPrepared, warehouseFk + INTO vIsPreviousPrepared, vWarehouseFk + FROM vn.sector + WHERE id = vSectorFk; + + SELECT w.code + INTO vWorkerCode + FROM vn.worker w + WHERE w.id = account.myUserGetId(); + + IF vIsPreviousPrepared THEN + + 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; + + SELECT COUNT(*), sum(liters), sum(`lines`) + INTO vMaxTickets, vVolumetryLitersMax, vVolumetryLinesMax + FROM vn.collectionVolumetry; + + CALL vn2008.production_control_source(vWarehouseFk, 0); + + DROP TEMPORARY TABLE IF EXISTS tmp.ticket; + + -- Recogida Silla requiere carros individuales + + IF (SELECT pb.Agencia + FROM tmp.production_buffer pb + JOIN vn.state s ON s.id = pb.state + LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket + WHERE pb.problems = 0 + AND tc.ticketFk IS NULL + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT 1) = 'REC_SILLA' THEN + + CREATE TEMPORARY TABLE tmp.ticket + SELECT pb.Id_Ticket ticketFk, + pb.lines, + pb.m3 * 1000 liters + FROM tmp.production_buffer pb + JOIN vn.state s ON s.id = pb.state + LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket + WHERE pb.problems = 0 + AND tc.ticketFk IS NULL + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT 1; + + ELSE + + CREATE TEMPORARY TABLE tmp.ticket + SELECT pb.Id_Ticket ticketFk, + pb.lines, + pb.m3 * 1000 liters, + 0 as height + FROM tmp.production_buffer pb + JOIN vn.state s ON s.id = pb.state + LEFT JOIN vn.ticketCollection tc ON tc.ticketFk = pb.Id_Ticket + WHERE pb.problems = 0 + AND pb.Agencia != 'REC_SILLA' + AND tc.ticketFk IS NULL + AND (s.isPreparable OR (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode)) + ORDER BY (s.code = 'PICKER_DESIGNED' AND pb.CodigoTrabajador = vWorkerCode) DESC, pb.Hora, pb.Minuto, m3 DESC, pb.lines DESC + LIMIT vMaxTickets; + + -- 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 + JOIN vn.itemType it ON it.id = i.typeFk + JOIN vn.itemCategory ic ON ic.id = it.categoryFk + WHERE ic.isReclining = FALSE + AND tc.collectionFk = vCollectionFk + GROUP BY tc.ticketFk) sub ON sub.ticketFk = t.ticketFk + SET t.height = sub.maxHeigth; + + + -- Si hay un ticket con una planta que supera la máxima altura para la bandeja superior, el pedido ha de ser único. Por tanto, eliminamos el resto. + -- Si hay dos tickets con plantas que superen la medida inferior, el carro llevará una bandeja. Hay que eliminar los otros dos. + + SELECT height, ticketFk + INTO vTicketHeightTop, vTopTicketFk + FROM tmp.ticket + ORDER BY height DESC + LIMIT 1; + + SELECT max(height) + INTO vVolumetryHeightTop + FROM vn.collectionVolumetry; + + SELECT height, ticketFk + INTO vTicketHeightFloor, vFloorTicketFk + FROM tmp.ticket + WHERE ticketFk != vTopTicketFk + ORDER BY height DESC + LIMIT 1; + + SELECT height + INTO vVolumetryHeightFloor + FROM vn.collectionVolumetry + WHERE level = 1; + + IF vTicketHeightTop > vVolumetryHeightTop + OR vTicketHeightFloor > vVolumetryHeightFloor THEN + + DELETE FROM tmp.ticket WHERE ticketFk != vTopTicketFk; + + ELSEIF vTicketHeightFloor <= vVolumetryHeightFloor THEN + + DELETE FROM tmp.ticket WHERE ticketFk NOT IN (vTopTicketFk, vFloorTicketFk); + + END IF; + + + + END IF; + + + -- Empieza el bucle + OPEN cVolumetry; + OPEN cTicket; + + FETCH cTicket INTO vTicketFk, vTicketLines, vTicketLiters, vTicketHeight; + FETCH cVolumetry INTO vVolumetryLevel, vVolumetryLiters, vVolumetryLines, vVolumetryHeight; + + IF NOT vDone THEN + + INSERT INTO vn.collection + SET workerFk = account.myUserGetId(); + + SELECT LAST_INSERT_ID() INTO vCollectionFk; + + END IF; + + bucle:WHILE NOT vDone DO + + IF (vVolumetryLitersMax < vTicketLiters OR vVolumetryLinesMax < vTicketLines) AND vVolumetryLevel > 1 THEN + + LEAVE bucle; + + END IF; + + SELECT COUNT(*) INTO vIsTicketCollected + FROM vn.ticketCollection + WHERE ticketFk = vTicketFk + AND collectionFk = vCollectionFk; + + IF vIsTicketCollected THEN + + UPDATE vn.ticketCollection + SET level = CONCAT(level, vVolumetryLevel) + WHERE ticketFk = vTicketFk + AND collectionFk = vCollectionFk; + + ELSE + + INSERT INTO vn.ticketCollection + SET collectionFk = vCollectionFk, + ticketFk = vTicketFk, + level = vVolumetryLevel; + + INSERT INTO vncontrol.inter + SET state_id = vStateFk, + Id_Ticket = vTicketFk, + Id_Trabajador = account.myUserGetId(); + + END IF; + + SET vVolumetryLitersMax = GREATEST(0,vVolumetryLitersMax - vVolumetryLiters); + SET vVolumetryLinesMax = GREATEST(0,vVolumetryLinesMax - vVolumetryLines); + SET vTicketLiters = GREATEST(0,vTicketLiters - vVolumetryLiters); + SET vTicketLines = GREATEST(0,vTicketLines - vVolumetryLines); + + IF vVolumetryLitersMax = 0 OR vVolumetryLinesMax = 0 THEN + + LEAVE bucle; + + END IF; + + IF vTicketLiters > 0 OR vTicketLines > 0 THEN + + FETCH cVolumetry INTO vVolumetryLevel, vVolumetryLiters, vVolumetryLines, vVolumetryHeight; + + ELSE + + FETCH cTicket INTO vTicketFk, vTicketLines, vTicketLiters, vTicketHeight; + FETCH cVolumetry INTO vVolumetryLevel, vVolumetryLiters, vVolumetryLines, vVolumetryHeight; + + END IF; + + END WHILE; + + + UPDATE vn.collection c + JOIN vn.state st ON st.code = 'ON_PREPARATION' + SET c.stateFk = st.id + WHERE c.id = vCollectionFk; + + INSERT IGNORE INTO vn.ticketDown(ticketFk) + SELECT DISTINCT tc.ticketFk + FROM vn.ticketCollection tc + JOIN vncontrol.inter vi ON vi.Id_Ticket = tc.ticketFk + JOIN vn.state st ON st.id = vi.state_id + JOIN vn.ticket t ON t.id = tc.ticketFk + JOIN vn.warehouse w ON w.id = t.warehouseFk + WHERE tc.collectionFk = vCollectionFk + AND w.name = 'Silla FV' + AND st.code = 'PREVIOUS_PREPARATION'; + + + SELECT vCollectionFk; + + CLOSE cVolumetry; + CLOSE cTicket; + -- DROP TEMPORARY TABLE IF EXISTS tmp.ticket; END ;; DELIMITER ; @@ -38668,14 +43134,71 @@ 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 = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!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 ;; CREATE DEFINER=`root`@`%` 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 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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` PROCEDURE `invoiceTaxMake__`(vInvoice INT, vTaxArea VARCHAR(25)) +BEGIN /** * Factura un conjunto de tickets. * @@ -42478,7 +47001,7 @@ BEGIN SET vColumn = vFromColumn; SET vRow = vFromRow; - SET vCode = CONCAT(LPAD(vColumn,3,'0'),IF(vIsLetterMode, MID(vLetters, vRow, 1), CONCAT('-',LPAD(vRow, 2,'0')))); + 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; @@ -42492,14 +47015,14 @@ BEGIN ON DUPLICATE KEY UPDATE `code` = vCode; SET vRow = vRow + 1; - SET vCode = CONCAT(LPAD(vColumn,3,'0'),IF(vIsLetterMode, MID(vLetters, vRow, 1), CONCAT('-',LPAD(vRow, 2,'0')))); + 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), CONCAT('-',LPAD(vRow, 2,'0')))); + SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0'))); END WHILE; @@ -47431,7 +51954,7 @@ BEGIN SELECT tp.ticketFk, CONCAT(vCollectionFk, ' - ', 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.code = p.sectorFk + 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 @@ -49308,9 +53831,9 @@ 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 = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!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 ;; @@ -49318,6 +53841,43 @@ CREATE DEFINER=`root`@`%` PROCEDURE `travel_weeklyClone`(vSinceWeek INT, vToWeek BEGIN DECLARE vCounter INT; + SET vCounter = vSinceWeek; + vWeekLoop :LOOP + INSERT IGNORE INTO travel (shipped, landed, warehouseOutFk, warehouseInFk, agencyFk, ref, cargoSupplierFk, kg) + SELECT @a := TIMESTAMPADD(DAY,vCounter * 7 - WEEKDAY(CURDATE()) - 1 + weekDay,CURDATE()), + @a := TIMESTAMPADD(DAY,duration,@a), + warehouseOutFk, + warehouseInFk, + agencyModeFk, + ref, + cargoSupplierFk, + kg + FROM travel_cloneWeekly; + IF vCounter = vToWeek THEN + LEAVE vWeekLoop; + END IF; + SET vCounter = vCounter + 1; + 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 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_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` PROCEDURE `travel_weeklyClone__`(vSinceWeek INT, vToWeek INT) +BEGIN + DECLARE vCounter INT; + SET vCounter = vSinceWeek; vWeekLoop :LOOP INSERT IGNORE INTO travel (shipped, landed, warehouseOutFk, warehouseInFk, agencyFk, ref, cargoSupplierFk) @@ -51099,63 +55659,6 @@ SELECT 7_dias_antes,6_dias_antes,5_dias_antes,4_dias_antes,3_dias_antes,2_dias_a 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 DROP PROCEDURE IF EXISTS `worker_getHierarch` */; -/*!50003 SET @saved_cs_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 ;; -CREATE DEFINER=`root`@`%` PROCEDURE `worker_getHierarch`(vBoss INT) -BEGIN --- eliminar no se usa - DECLARE EXIT HANDLER FOR 1062 BEGIN - CALL util.throw('INFINITE_LOOP'); - END; - - DROP TEMPORARY TABLE IF EXISTS workerHierarch; - CREATE TEMPORARY TABLE workerHierarch - (PRIMARY KEY (workerFk)) - ENGINE = MEMORY - SELECT vBoss AS workerFk; - - DROP TEMPORARY TABLE IF EXISTS tmp.workerHierarchList; - CREATE TEMPORARY TABLE tmp.workerHierarchList - (PRIMARY KEY (workerFk)) - ENGINE = MEMORY - SELECT vBoss AS workerFk, 0 AS isChecked; - - - WHILE (SELECT COUNT(*) FROM tmp.workerHierarchList WHERE NOT isChecked) > 0 DO - - INSERT INTO tmp.workerHierarchList - SELECT w.id, 0 - FROM worker w - JOIN workerHierarch wh ON wh.workerFk = w.bossFk; - - UPDATE tmp.workerHierarchList whl - JOIN workerHierarch wh ON wh.workerFk = whl.workerFk - SET whl.isChecked = 1; - - TRUNCATE workerHierarch; - - INSERT INTO workerHierarch - SELECT workerFk - FROM tmp.workerHierarchList - WHERE NOT isChecked; - - END WHILE; - - DROP TEMPORARY TABLE IF EXISTS workerHierarch; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -51218,6 +55721,107 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `worker_getHierarch__` */; +/*!50003 SET @saved_cs_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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `worker_getHierarch__`(vBoss INT) +BEGIN +-- eliminar no se usa + -- usar worker_getHierarchy + DECLARE EXIT HANDLER FOR 1062 BEGIN + CALL util.throw('INFINITE_LOOP'); + END; + + DROP TEMPORARY TABLE IF EXISTS workerHierarch; + CREATE TEMPORARY TABLE workerHierarch + (PRIMARY KEY (workerFk)) + ENGINE = MEMORY + SELECT vBoss AS workerFk; + + DROP TEMPORARY TABLE IF EXISTS tmp.workerHierarchList; + CREATE TEMPORARY TABLE tmp.workerHierarchList + (PRIMARY KEY (workerFk)) + ENGINE = MEMORY + SELECT vBoss AS workerFk, 0 AS isChecked; + + + WHILE (SELECT COUNT(*) FROM tmp.workerHierarchList WHERE NOT isChecked) > 0 DO + + INSERT INTO tmp.workerHierarchList + SELECT w.id, 0 + FROM worker w + JOIN workerHierarch wh ON wh.workerFk = w.bossFk; + + UPDATE tmp.workerHierarchList whl + JOIN workerHierarch wh ON wh.workerFk = whl.workerFk + SET whl.isChecked = 1; + + TRUNCATE workerHierarch; + + INSERT INTO workerHierarch + SELECT workerFk + FROM tmp.workerHierarchList + WHERE NOT isChecked; + + END WHILE; + + DROP TEMPORARY TABLE IF EXISTS workerHierarch; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `worker_getProductionErrors` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!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 ;; +CREATE DEFINER=`root`@`%` PROCEDURE `worker_getProductionErrors`(vDepartment VARCHAR(25), vStateCode VARCHAR(25) CHARSET utf8, vDatedFrom DATETIME, vDatedTo DATETIME) +BEGIN + +DROP TEMPORARY TABLE IF EXISTS tmp.total; + CREATE TEMPORARY TABLE tmp.total + ENGINE = MEMORY + SELECT tt.workerFk, Count(tt.ticketFk) AS CuentaDeId_Ticket + FROM state s + INNER JOIN ticketTracking tt ON s.id = tt.stateFk + INNER JOIN ticket t ON tt.ticketFk = t.id + INNER JOIN worker w ON tt.workerFk = w.id + WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo AND s.code = vStateCode + GROUP BY tt.workerFk; + +SELECT w.code, w.firstName, w.lastName, CAST(tmp.total.CuentaDeId_Ticket AS DECIMAL(10,0)) AS Totaltickets, + CAST(sub.CuentaDeId_Ticket AS DECIMAL(10,0)) AS Fallos +fROM tmp.total + JOIN worker w ON w.id= tmp.total.workerFk +LEFT JOIN ( SELECT Count(s.ticketFk) AS CuentaDeId_Ticket, cd.workerFk + FROM (claimDevelopment cd + INNER JOIN ((sale s + INNER JOIN claimBeginning cb ON s.id = cb.saleFk) + INNER JOIN ticket t ON s.ticketFk = t.id) ON cd.claimFk = cb.claimFk) + INNER JOIN claimResponsible cr ON cd.claimResponsibleFk = cr.id + WHERE t.shipped BETwEEN vDatedFrom AND vDatedTo AND cr.description=vDepartment + GROUP BY cd.workerFk)sub ON tmp.total.workerFk = sub.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 DROP PROCEDURE IF EXISTS `workingHours` */; ALTER DATABASE `vn` CHARACTER SET utf8 COLLATE utf8_general_ci ; /*!50003 SET @saved_cs_client = @@character_set_client */ ; @@ -51372,6 +55976,64 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 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 = 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 ;; +CREATE DEFINER=`root`@`%` 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; + + REPEAT + CALL zone_getOptionsForShipment(vShipped); + INSERT INTO zoneClosure(zoneFk, dated, `hour`) + SELECT zoneFk, vShipped, `hour` FROM tmp.zoneOption; + + SET vCounter = vCounter + 1; + SET vShipped = TIMESTAMPADD(DAY, 1, vShipped); + UNTIL vCounter > vScope + END REPEAT; + + 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 DROP PROCEDURE IF EXISTS `zoneGeo_calcTree` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -52559,52 +57221,20 @@ DELIMITER ;; BEFORE INSERT ON `inter` FOR EACH ROW BEGIN -/* - -- PAK 08/05/18 Los tickets no se pueden marcar como servidos en el futuro - - IF NEW.state_id = 16 AND (SELECT date(landed) FROM vn.ticket WHERE id = NEW.Id_Ticket) > CURDATE() THEN -- Entregado - SET NEW.state_id = 22; -- ¿ Fecha ? - END IF; -*//* - -- PAK 08/05/18 Los sacadores no deben de poner los tickets en revisión - - DECLARE vIsSacador BOOL; + DECLARE vState VARCHAR(15); + DECLARE vZoneFk 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 NEW.state_id = 6 THEN -- Revisión - SELECT COUNT(*) > 0 INTO vIsSacador - FROM inter - WHERE state_id = 5 -- Preparacion - AND Id_Trabajador = NEW.Id_Trabajador - AND Id_Ticket = NEW.Id_Ticket; - - IF vIsSacador THEN - SET NEW.state_id = 5; - END IF; - END IF; -*//* - -- PAK 08/05/18 Este código parece fósil. Lo comento. - - DECLARE contados INT; - DECLARE vSupervisor INT; - - SELECT Id_Trabajador INTO vSupervisor - FROM vn2008.Trabajadores WHERE user_id = account.userGetId(); - - SET NEW.Id_Supervisor = IFNULL(vSupervisor,20); - - IF NEW.state_id = 5 THEN -- Preparación - SELECT COUNT(Id_Ticket) INTO contados - FROM vncontrol.inter - WHERE state_id = 5 - AND Id_Ticket = NEW.Id_Ticket - AND IFNULL(Id_Supervisor,-1) <> vSupervisor - AND TIMESTAMPADD(SECOND, 60, odbc_date) >= NOW(); - - IF contados <> 0 THEN - CALL util.throw ('FALLO_AL_INSERTAR'); - END IF; - END IF; -*/ + 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 */ ; @@ -52870,6 +57500,24 @@ USE `bi`; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; +-- +-- Final view structure for view `claims_ratio` +-- + +/*!50001 DROP VIEW IF EXISTS `claims_ratio`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `claims_ratio` AS select `cr`.`clientFk` AS `Id_Cliente`,`cr`.`yearSale` AS `Consumo`,`cr`.`claimAmount` AS `Reclamaciones`,`cr`.`claimingRate` AS `Ratio`,`cr`.`priceIncreasing` AS `recobro`,`cr`.`packingRate` AS `inflacion` from `vn`.`claimRatio` `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 `customerRiskOverdue` -- @@ -52888,6 +57536,24 @@ USE `bi`; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; +-- +-- Final view structure for view `rotacion` +-- + +/*!50001 DROP VIEW IF EXISTS `rotacion`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `rotacion` AS select `ic`.`itemFk` AS `Id_Article`,`ic`.`warehouseFk` AS `warehouse_id`,`ic`.`quantity` AS `total`,`ic`.`rotation` AS `rotacion`,`ic`.`cm3` AS `cm3`,`ic`.`storage` AS `almacenaje`,`ic`.`handling` AS `manipulacion`,`ic`.`extraCharge` AS `auxiliar`,`ic`.`wated` AS `mermas`,`ic`.`cm3delivery` AS `cm3reparto` from `vn`.`itemCost` `ic` */; +/*!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` -- @@ -52906,6 +57572,192 @@ USE `bi`; /*!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 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 = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `bajasLaborales` AS select `p`.`firstname` AS `firstname`,`p`.`name` AS `name`,`b`.`business_id` AS `business_id`,max(`ce`.`date`) AS `lastDate`,max(ifnull(`b`.`date_end`,curdate())) AS `endContract`,`cs`.`type` AS `type`,cast(count(0) as decimal(10,0)) AS `dias`,`w`.`userFk` 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 `postgresql`.`person` `p` on((`p`.`person_id` = `pr`.`person_id`))) join `postgresql`.`calendar_state` `cs` on((`cs`.`calendar_state_id` = `ce`.`calendar_state_id`))) join `vn`.`worker` `w` on((`w`.`id` = `p`.`id_trabajador`))) where ((`ce`.`date` >= (curdate() + interval -(1) year)) and (`cs`.`type` not in ('Vacaciones','Vacaciones 1/2 día','Compensar','Festivo'))) group by `p`.`firstname`,`p`.`name`,`cs`.`type` 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 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 = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`%` 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 `m3Silla` +-- + +/*!50001 DROP VIEW IF EXISTS `m3Silla`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `m3Silla` AS select `m3`.`fecha` AS `fecha`,`m3`.`year` AS `year`,`m3`.`month` AS `month`,`m3`.`week` AS `week`,`m3`.`day` AS `day`,`m3`.`dayName` AS `dayName`,cast(sum(`m3`.`m3`) as decimal(10,0)) AS `Volumen`,cast(sum(`m3`.`euros`) as decimal(10,0)) AS `Euros` from `m3` where (`m3`.`warehouseFk` in (1,44)) group by `m3`.`fecha` */; +/*!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 `m3analisis` +-- + +/*!50001 DROP VIEW IF EXISTS `m3analisis`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `m3analisis` AS select `m`.`fecha` AS `fecha`,`m`.`year` AS `year`,`m`.`month` AS `month`,`m`.`week` AS `week`,`m`.`day` AS `day`,`m`.`dayName` AS `dayName`,`m`.`Volumen` AS `Volumen`,`m`.`Euros` AS `Euros`,`h`.`Departamento` AS `Departamento`,`h`.`Horas` AS `Horas`,`h`.`Salarios` AS `Salarios`,(`h`.`Horas` / `m`.`Volumen`) AS `tiempoM3`,(`m`.`Euros` / `m`.`Volumen`) AS `valorM3`,(`h`.`Salarios` / `m`.`Volumen`) AS `costeLaboralM3`,(`h`.`Salarios` / `m`.`Euros`) AS `costeEuros`,(`h`.`Salarios` / `h`.`Horas`) AS `precioHora` from (`bs`.`m3Silla` `m` join `bs`.`horasSilla` `h` on((`h`.`Fecha` = `m`.`fecha`))) */; +/*!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 `manaCustomer` +-- + +/*!50001 DROP VIEW IF EXISTS `manaCustomer`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `manaCustomer` AS select `cmc`.`clientFk` AS `Id_Cliente`,`cmc`.`mana` AS `Mana`,`cmc`.`dated` AS `dated` from `vn`.`clientManaCache` `cmc` */; +/*!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 `manaSpellersExcluded` +-- + +/*!50001 DROP VIEW IF EXISTS `manaSpellersExcluded`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `manaSpellersExcluded` AS select `m`.`Id_Trabajador` AS `workerFk` from `bs`.`mana_spellers_excluded` `m` */; +/*!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 `mana_spellers` +-- + +/*!50001 DROP VIEW IF EXISTS `mana_spellers`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `mana_spellers` AS select `wm`.`workerFk` AS `Id_Trabajador`,`wm`.`size` AS `size`,`wm`.`amount` AS `used`,`wm`.`pricesModifierRate` AS `prices_modifier_rate`,`wm`.`isPricesModifierActivated` AS `prices_modifier_activated`,`wm`.`minRate` AS `minRate`,`wm`.`maxRate` AS `maxRate` from `vn`.`workerMana` `wm` */; +/*!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 `mana_spellers_excluded` +-- + +/*!50001 DROP VIEW IF EXISTS `mana_spellers_excluded`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `mana_spellers_excluded` AS select `wme`.`workerFk` AS `Id_Trabajador` from `vn`.`workerManaExcluded` `wme` */; +/*!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 `mermas` +-- + +/*!50001 DROP VIEW IF EXISTS `mermas`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `mermas` AS select `w`.`code` AS `Comprador`,`it`.`name` AS `Familia`,`i`.`id` AS `Referencia`,`i`.`name` AS `Item`,`s`.`quantity` AS `Cantidad`,(((`b`.`buyingValue` + `b`.`freightValue`) + `b`.`comissionValue`) + `b`.`packageValue`) AS `Coste_Unitario`,(`s`.`quantity` * (((`b`.`buyingValue` + `b`.`freightValue`) + `b`.`comissionValue`) + `b`.`packageValue`)) AS `Importe`,`c`.`name` AS `Cliente`,`s`.`ticketFk` AS `ticketFk`,`t`.`shipped` AS `Fecha` from (((((((`vn`.`worker` `w` join `vn`.`itemType` `it` on((`it`.`workerFk` = `w`.`id`))) join `vn`.`item` `i` on((`i`.`typeFk` = `it`.`id`))) join `vn`.`sale` `s` on((`s`.`itemFk` = `i`.`id`))) join `vn`.`ticket` `t` on((`t`.`id` = `s`.`ticketFk`))) join `vn`.`client` `c` on((`c`.`id` = `t`.`clientFk`))) left join `bi`.`Last_buy_id` `lb` on(((`lb`.`Id_Article` = `s`.`itemFk`) and (`lb`.`warehouse_id` = `t`.`warehouseFk`)))) left join `vn`.`buy` `b` on((`b`.`id` = `lb`.`Id_Compra`))) where ((`t`.`shipped` > '2018-01-01') and (`c`.`isRelevant` or (`c`.`id` in (200,400)))) */; +/*!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 `workerMana` +-- + +/*!50001 DROP VIEW IF EXISTS `workerMana`*/; +/*!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`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `workerMana` AS select `m`.`Id_Trabajador` AS `workerFk`,`m`.`used` AS `amount` from `bs`.`mana_spellers` `m` */; +/*!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` -- @@ -53513,10 +58365,10 @@ USE `vn`; /*!50001 SET collation_connection = @saved_col_connection */; -- --- Final view structure for view `claimRatio` +-- Final view structure for view `claimRatio__` -- -/*!50001 DROP VIEW IF EXISTS `claimRatio`*/; +/*!50001 DROP VIEW IF EXISTS `claimRatio__`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; /*!50001 SET @saved_col_connection = @@collation_connection */; @@ -53525,7 +58377,7 @@ USE `vn`; /*!50001 SET collation_connection = utf8_general_ci */; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */ -/*!50001 VIEW `claimRatio` AS select `bi`.`claims_ratio`.`Id_Cliente` AS `clientFk`,`bi`.`claims_ratio`.`Consumo` AS `yearSale`,`bi`.`claims_ratio`.`Reclamaciones` AS `claimAmount`,`bi`.`claims_ratio`.`Ratio` AS `claimingRate`,`bi`.`claims_ratio`.`recobro` AS `priceIncreasing`,`bi`.`claims_ratio`.`inflacion` AS `packingRate` from `bi`.`claims_ratio` */; +/*!50001 VIEW `claimRatio__` AS select `claims_ratio`.`Id_Cliente` AS `clientFk`,`claims_ratio`.`Consumo` AS `yearSale`,`claims_ratio`.`Reclamaciones` AS `claimAmount`,`claims_ratio`.`Ratio` AS `claimingRate`,`claims_ratio`.`recobro` AS `priceIncreasing`,`claims_ratio`.`inflacion` AS `packingRate` from `bi`.`claims_ratio` */; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; @@ -53998,6 +58850,24 @@ USE `vn`; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; +-- +-- Final view structure for view `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 = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`%` 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` -- @@ -54070,6 +58940,24 @@ USE `vn`; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; +-- +-- Final view structure for view `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 = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`%` 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 `itemShelvingAvailable` -- @@ -54751,4 +59639,4 @@ USE `vncontrol`; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-08 13:31:07 +-- Dump completed on 2020-01-22 14:08:58 diff --git a/db/export-structure.sh b/db/export-structure.sh index 5e1b62f037..1959463fff 100755 --- a/db/export-structure.sh +++ b/db/export-structure.sh @@ -3,6 +3,7 @@ SCHEMAS=( account bi + bs cache edi hedera diff --git a/e2e/paths/05-ticket-module/01-sale/01_list_sales.spec.js b/e2e/paths/05-ticket-module/01-sale/01_list_sales.spec.js index 882a1f210a..4e8d9b7845 100644 --- a/e2e/paths/05-ticket-module/01-sale/01_list_sales.spec.js +++ b/e2e/paths/05-ticket-module/01-sale/01_list_sales.spec.js @@ -35,7 +35,7 @@ describe('Ticket List sale path', () => { const value = await page .waitToGetProperty(selectors.ticketSales.firstSaleDiscount, 'innerText'); - expect(value).toContain('0 %'); + expect(value).toContain('0.00%'); }); it('should confirm the first sale contains the total import', async() => { diff --git a/e2e/paths/05-ticket-module/01-sale/02_edit_sale.spec.js b/e2e/paths/05-ticket-module/01-sale/02_edit_sale.spec.js index e981f4927d..250ea7d639 100644 --- a/e2e/paths/05-ticket-module/01-sale/02_edit_sale.spec.js +++ b/e2e/paths/05-ticket-module/01-sale/02_edit_sale.spec.js @@ -177,10 +177,10 @@ xdescribe('Ticket Edit sale path', () => { it('should confirm the discount have been updated', async() => { const result = await nightmare - .waitForTextInElement(`${selectors.ticketSales.firstSaleDiscount} > span`, '50 %') + .waitForTextInElement(`${selectors.ticketSales.firstSaleDiscount} > span`, '50.00%') .waitToGetProperty(`${selectors.ticketSales.firstSaleDiscount} > span`, 'innerText'); - expect(result).toContain('50 %'); + expect(result).toContain('50.00%'); }); it('should confirm the total import for that item have been updated', async() => { diff --git a/front/core/components/textarea/index.js b/front/core/components/textarea/index.js index 8fcae7b0fe..1954b12c61 100644 --- a/front/core/components/textarea/index.js +++ b/front/core/components/textarea/index.js @@ -16,11 +16,21 @@ export default class Textarea extends Field { get rows() { return this.input.rows; } + + set maxlength(value) { + let length = typeof value == 'number' && value > 1 ? value : 50; + this.input.setAttribute('maxlength', length); + } + + get maxlength() { + return this.input.getAttribute('maxlength', length); + } } ngModule.vnComponent('vnTextarea', { controller: Textarea, bindings: { - rows: ' { expect($ctrl.rows).toEqual(3); }); }); + + describe('maxlength() setter', () => { + it(`should set maxlength property of the element to the given value if it's a valid number`, () => { + $ctrl.maxlength = 100; + + expect($ctrl.maxlength).toEqual('100'); + }); + + it(`should set maxlength property of the element to 3 if the given value if it's null`, () => { + $ctrl.maxlength = null; + + expect($ctrl.maxlength).toEqual('50'); + }); + + it(`should set maxlength property of the element to 3 if the given value if it's not a valid number`, () => { + $ctrl.maxlength = 'a'; + + expect($ctrl.maxlength).toEqual('50'); + }); + }); }); diff --git a/front/core/filters/percentage.js b/front/core/filters/percentage.js index 58e67ffa61..41e3f8288c 100644 --- a/front/core/filters/percentage.js +++ b/front/core/filters/percentage.js @@ -1,15 +1,22 @@ import ngModule from '../module'; -/** - * Formats a number multiplying by 100 and adding character %. - * - * @return {String} The formated number - */ -export default function percentage() { - return function(input) { +export default function percentage($translate) { + function percentage(input, fractionSize = 2) { if (input == null || input === '') return null; - return `${input} %`; - }; + + return new Intl.NumberFormat($translate.use(), { + style: 'percent', + minimumFractionDigits: fractionSize, + maximumFractionDigits: fractionSize + }).format(parseFloat(input)); + } + + percentage.$stateful = true; + + return percentage; } + +percentage.$inject = ['$translate']; + ngModule.filter('percentage', percentage); diff --git a/front/core/styles/icons/salixfont.css b/front/core/styles/icons/salixfont.css index e3bdda5038..64f2776ea0 100644 --- a/front/core/styles/icons/salixfont.css +++ b/front/core/styles/icons/salixfont.css @@ -23,6 +23,18 @@ -moz-osx-font-smoothing: grayscale; } +.icon-buyrequest:before { + content: "\e914"; +} +.icon-entry:before { + content: "\e959"; +} +.icon-thermometer:before { + content: "\e95a"; +} +.icon-deletedTicket:before { + content: "\e958"; +} .icon-fruit:before { content: "\e957"; } @@ -134,9 +146,6 @@ .icon-doc:before { content: "\e913"; } -.icon-entry:before { - content: "\e914"; -} .icon-exit:before { content: "\e947"; } @@ -287,6 +296,3 @@ .icon-worker:before { content: "\e943"; } -.icon-deletedTicket:before { - content: "\e958"; -} diff --git a/front/core/styles/icons/salixfont.svg b/front/core/styles/icons/salixfont.svg index 26b1a31e99..2c13f601bd 100644 --- a/front/core/styles/icons/salixfont.svg +++ b/front/core/styles/icons/salixfont.svg @@ -27,7 +27,7 @@ - + @@ -96,4 +96,6 @@ + + \ No newline at end of file diff --git a/front/core/styles/icons/salixfont.ttf b/front/core/styles/icons/salixfont.ttf index 3242d75bec..7a6ad27219 100644 Binary files a/front/core/styles/icons/salixfont.ttf and b/front/core/styles/icons/salixfont.ttf differ diff --git a/front/core/styles/icons/salixfont.woff b/front/core/styles/icons/salixfont.woff index e2f3123911..0e6d9a21a9 100644 Binary files a/front/core/styles/icons/salixfont.woff and b/front/core/styles/icons/salixfont.woff differ diff --git a/front/module-import.js b/front/module-import.js index 21d4689317..0bfe7f8cac 100755 --- a/front/module-import.js +++ b/front/module-import.js @@ -17,5 +17,6 @@ export default function moduleImport(moduleName) { case 'worker' : return import('worker/front'); case 'invoiceOut' : return import('invoiceOut/front'); case 'route' : return import('route/front'); + case 'entry' : return import('entry/front'); } } diff --git a/front/salix/components/layout/style.scss b/front/salix/components/layout/style.scss index b66c620ad5..1a483ab961 100644 --- a/front/salix/components/layout/style.scss +++ b/front/salix/components/layout/style.scss @@ -87,8 +87,7 @@ vn-layout { & > * { display: block; padding: $spacing-md; - box-sizing: border-box; - height: 100% + box-sizing: border-box } &.ng-enter { vn-side-menu { diff --git a/front/salix/components/module-card/style.scss b/front/salix/components/module-card/style.scss index 0ae943efc9..cc3c5b81bf 100644 --- a/front/salix/components/module-card/style.scss +++ b/front/salix/components/module-card/style.scss @@ -2,4 +2,5 @@ .vn-module-card { padding: 0; + height: 100% } \ No newline at end of file diff --git a/front/salix/components/module-main/style.scss b/front/salix/components/module-main/style.scss index d9bdbd940a..cab874d686 100644 --- a/front/salix/components/module-main/style.scss +++ b/front/salix/components/module-main/style.scss @@ -2,4 +2,5 @@ .vn-module-main { padding: 0; + height: 100% } \ No newline at end of file diff --git a/front/salix/locale/es.yml b/front/salix/locale/es.yml index 2f65ab2553..34e1a24879 100644 --- a/front/salix/locale/es.yml +++ b/front/salix/locale/es.yml @@ -43,6 +43,7 @@ Workers: Trabajadores Routes: Rutas Locator: Localizador Invoices out: Facturas emitidas +Entries: Entradas # Common diff --git a/loopback/common/models/loggable.js b/loopback/common/models/loggable.js index a6d0e8474c..d9116a0de9 100644 --- a/loopback/common/models/loggable.js +++ b/loopback/common/models/loggable.js @@ -219,7 +219,7 @@ module.exports = function(Self) { userFk: userFk, action: action, changedModel: ctx.Model.definition.name, - changedModelId: changedModelId, + changedModelId: changedModelId, // Model property with an different data type will throw a NaN error changedModelValue: where, oldInstance: oldInstance, newInstance: newInstance diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js index 0191967b1d..c6f535b7ab 100644 --- a/loopback/common/models/vn-model.js +++ b/loopback/common/models/vn-model.js @@ -155,10 +155,10 @@ module.exports = function(Self) { const result = await realMethod.call(this, data, options); if (cb) cb(null, result); + else return result; } catch (err) { let myErr = replaceErr(err, replaceErrFunc); - if (cb) - cb(myErr); + if (cb) cb(myErr); else throw myErr; } diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 91339d14e3..70d06c9bde 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -57,5 +57,9 @@ "The postcode doesn't exists. Ensure you put the correct format": "The postcode doesn't exists. Ensure you put the correct format", "Can't create stowaway for this ticket": "Can't create stowaway for this ticket", "Has deleted the ticket id": "Has deleted the ticket id [#{{id}}]({{{url}}})", - "Swift / BIC can't be empty": "Swift / BIC can't be empty" + "Swift / BIC can't be empty": "Swift / BIC can't be empty", + "MESSAGE_BOUGHT_UNITS": "Bought {{quantity}} units of {{concept}} (#{{itemId}}) for the ticket id [#{{ticketId}}]({{{url}}})", + "MESSAGE_INSURANCE_CHANGE": "I have changed the insurence credit of client [{{clientName}} (#{{clientId}})]({{{url}}}) to *{{credit}} €*", + "MESSAGE_CHANGED_PAYMETHOD": "I have changed the pay method for client [{{clientName}} (#{{clientId}})]({{{url}}})", + "MESSAGE_CLAIM_ITEM_REGULARIZE": "I sent *{{quantity}}* units of [{{concept}} (#{{itemId}})]({{{itemUrl}}}) to {{nickname}} coming from ticket id [#{{ticketId}}]({{{ticketUrl}}})" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 15fd89f5e2..3de0b16266 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -118,5 +118,9 @@ "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fín", "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fín", "You should mark at least one week day": "Debes marcar al menos un día de la semana", - "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío" + "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío", + "MESSAGE_BOUGHT_UNITS": "Se ha comprado {{quantity}} unidades de {{concept}} (#{{itemId}}) para el ticket id [#{{ticketId}}]({{{url}}})", + "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} (#{{clientId}})]({{{url}}}) a *{{credit}} €*", + "MESSAGE_CHANGED_PAYMETHOD": "He cambiado la forma de pago del cliente [{{clientName}} (#{{clientId}})]({{{url}}})", + "MESSAGE_CLAIM_ITEM_REGULARIZE": "Envio *{{quantity}}* unidades de [{{concept}} (#{{itemId}})]({{{itemUrl}}}) a {{nickname}} provenientes del ticket id [#{{ticketId}}]({{{ticketUrl}}})" } \ No newline at end of file diff --git a/modules/claim/back/methods/claim/regularizeClaim.js b/modules/claim/back/methods/claim/regularizeClaim.js index e1e95728bd..8a4f6dc957 100644 --- a/modules/claim/back/methods/claim/regularizeClaim.js +++ b/modules/claim/back/methods/claim/regularizeClaim.js @@ -19,6 +19,7 @@ module.exports = Self => { Self.regularizeClaim = async(ctx, params) => { const models = Self.app.models; + const $t = ctx.req.__; // $translate const resolvedState = 3; let tx = await Self.beginTransaction({}); @@ -38,8 +39,7 @@ module.exports = Self => { const destination = claimEnd.claimDestination(); const addressFk = destination && destination.addressFk; - if (!addressFk) - continue; + if (!addressFk) continue; let sale = await getSale(claimEnd.saleFk, options); let ticketFk = await getTicketId({ @@ -70,15 +70,19 @@ module.exports = Self => { discount: 100 }, options); - if (sale.ticket().client().salesPerson()) { - await sendMessage(ctx, { - itemFk: sale.itemFk, - ticketFk: sale.ticketFk, - recipientFk: sale.ticket().client().salesPerson().userFk, + const salesPerson = sale.ticket().client().salesPerson(); + if (salesPerson) { + const origin = ctx.req.headers.origin; + const message = $t('MESSAGE_CLAIM_ITEM_REGULARIZE', { quantity: sale.quantity, concept: sale.concept, - nickname: address.nickname - }, options); + itemId: sale.itemFk, + ticketId: sale.ticketFk, + nickname: address.nickname, + ticketUrl: `${origin}/#!/ticket/${sale.ticketFk}/summary`, + itemUrl: `${origin}/#!/item/${sale.itemFk}/summary` + }); + await models.Chat.sendCheckingPresence(ctx, salesPerson.id, message); } } @@ -156,14 +160,4 @@ module.exports = Self => { return ticket.id; } - - async function sendMessage(ctx, params, options) { - const message = `Envio ${params.quantity} unidades de "${params.concept}" (#${params.itemFk}) a ` - + `"${params.nickname}" provenientes del ticket #${params.ticketFk}`; - - await Self.app.models.Message.send(ctx, { - recipientFk: params.recipientFk, - message: message - }, options); - } }; diff --git a/modules/claim/back/methods/claim/specs/regularizeClaim.spec.js b/modules/claim/back/methods/claim/specs/regularizeClaim.spec.js index d838bc9071..fd3fb3c3de 100644 --- a/modules/claim/back/methods/claim/specs/regularizeClaim.spec.js +++ b/modules/claim/back/methods/claim/specs/regularizeClaim.spec.js @@ -22,7 +22,13 @@ describe('regularizeClaim()', () => { }); it('should change claim state to resolved', async() => { - let ctx = {req: {accessToken: {userId: 18}}}; + const ctx = {req: { + accessToken: {userId: 18}, + headers: {origin: 'http://localhost'}} + }; + ctx.req.__ = value => { + return value; + }; let params = {claimFk: claimFk}; claimEnds = await app.models.ClaimEnd.importTicketSales(ctx, { diff --git a/modules/claim/front/action/index.spec.js b/modules/claim/front/action/index.spec.js index 0d10957e7f..539d2e8ef6 100644 --- a/modules/claim/front/action/index.spec.js +++ b/modules/claim/front/action/index.spec.js @@ -206,9 +206,9 @@ describe('claim', () => { return resolve({id: freightPickUpPrice}); })); controller.onUpdateGreugeResponse('accept').then(res => { - console.log('asdas'); + }).catch(error => { - console.log('errorrrr!!'); + }); $httpBackend.flush(); diff --git a/modules/claim/front/dms/index/style.scss b/modules/claim/front/dms/style.scss similarity index 100% rename from modules/claim/front/dms/index/style.scss rename to modules/claim/front/dms/style.scss diff --git a/modules/claim/front/index.js b/modules/claim/front/index.js index 4ea9ac6cc3..b6c39196e9 100644 --- a/modules/claim/front/index.js +++ b/modules/claim/front/index.js @@ -10,4 +10,4 @@ import './descriptor'; import './development'; import './search-panel'; import './summary'; -import './dms/index'; +import './photos'; diff --git a/modules/claim/front/dms/index/index.html b/modules/claim/front/photos/index.html similarity index 100% rename from modules/claim/front/dms/index/index.html rename to modules/claim/front/photos/index.html diff --git a/modules/claim/front/dms/index/index.js b/modules/claim/front/photos/index.js similarity index 97% rename from modules/claim/front/dms/index/index.js rename to modules/claim/front/photos/index.js index e832040004..61256aad1d 100644 --- a/modules/claim/front/dms/index/index.js +++ b/modules/claim/front/photos/index.js @@ -1,4 +1,4 @@ -import ngModule from '../../module'; +import ngModule from '../module'; import './style.scss'; class Controller { @@ -108,7 +108,7 @@ class Controller { Controller.$inject = ['$stateParams', '$scope', '$http', '$translate', 'vnToken', 'vnApp', 'vnConfig']; -ngModule.component('vnClaimDmsIndex', { +ngModule.component('vnClaimPhotos', { template: require('./index.html'), controller: Controller, bindings: { diff --git a/modules/claim/front/dms/index/index.spec.js b/modules/claim/front/photos/index.spec.js similarity index 96% rename from modules/claim/front/dms/index/index.spec.js rename to modules/claim/front/photos/index.spec.js index cbb24ac758..731988a843 100644 --- a/modules/claim/front/dms/index/index.spec.js +++ b/modules/claim/front/photos/index.spec.js @@ -2,7 +2,7 @@ import './index'; import crudModel from 'core/mocks/crud-model'; describe('Claim', () => { - describe('Component vnClaimDmsIndex', () => { + describe('Component vnClaimPhotos', () => { let $componentController; let $scope; let $httpBackend; @@ -16,7 +16,7 @@ describe('Claim', () => { $httpParamSerializer = _$httpParamSerializer_; $httpBackend = _$httpBackend_; $scope = $rootScope.$new(); - controller = $componentController('vnClaimDmsIndex', {$: $scope}); + controller = $componentController('vnClaimPhotos', {$: $scope}); controller.$.model = crudModel; controller.claim = { id: 1, diff --git a/modules/claim/front/dms/locale/es.yml b/modules/claim/front/photos/locale/es.yml similarity index 100% rename from modules/claim/front/dms/locale/es.yml rename to modules/claim/front/photos/locale/es.yml diff --git a/modules/claim/front/photos/style.scss b/modules/claim/front/photos/style.scss new file mode 100644 index 0000000000..35f5485603 --- /dev/null +++ b/modules/claim/front/photos/style.scss @@ -0,0 +1,32 @@ +@import "./variables"; + +vn-claim-photos { + height: 100%; + + .drop-zone { + color: $color-font-secondary; + box-sizing: border-box; + border-radius: 0.5em; + text-align: center; + min-height: 100%; + + .empty-rows { + padding: 5em $spacing-md; + font-size: 1.4em + } + + vn-icon { + font-size: 3em + } + } + + .photo-list { + padding: $spacing-md; + min-height: 100%; + + .photo { + width: 32em; + height: 18em; + } + } +} \ No newline at end of file diff --git a/modules/claim/front/routes.json b/modules/claim/front/routes.json index 80bc77c492..571ca09328 100644 --- a/modules/claim/front/routes.json +++ b/modules/claim/front/routes.json @@ -11,7 +11,7 @@ "card": [ {"state": "claim.card.basicData", "icon": "settings"}, {"state": "claim.card.detail", "icon": "icon-details"}, - {"state": "claim.card.dms.index", "icon": "image"}, + {"state": "claim.card.photos", "icon": "image"}, {"state": "claim.card.development", "icon": "icon-traceability"}, {"state": "claim.card.action", "icon": "icon-actions"} ] @@ -81,14 +81,9 @@ }, "acl": ["salesAssistant"] }, { - "url": "/dms", - "state": "claim.card.dms", - "abstract": true, - "component": "ui-view" - }, { - "url" : "/index", - "state": "claim.card.dms.index", - "component": "vn-claim-dms-index", + "url": "/photos", + "state": "claim.card.photos", + "component": "vn-claim-photos", "description": "Photos", "params": { "claim": "$ctrl.claim" diff --git a/modules/client/back/methods/client/getCard.js b/modules/client/back/methods/client/getCard.js index e3b0edf8a1..6c69d32a8e 100644 --- a/modules/client/back/methods/client/getCard.js +++ b/modules/client/back/methods/client/getCard.js @@ -60,8 +60,6 @@ module.exports = function(Self) { scope: { fields: ['id', 'name', 'active'] } - }, { - relation: 'phones' } ] }); diff --git a/modules/client/back/methods/client/sendSms.js b/modules/client/back/methods/client/sendSms.js new file mode 100644 index 0000000000..a39d4c75a9 --- /dev/null +++ b/modules/client/back/methods/client/sendSms.js @@ -0,0 +1,57 @@ + +module.exports = Self => { + Self.remoteMethodCtx('sendSms', { + description: 'Log the message in clientLog and call the send method', + accessType: 'WRITE', + accepts: [{ + arg: 'id', + type: 'Number', + required: true, + description: 'The ticket id', + http: {source: 'path'} + }, + { + arg: 'destination', + type: 'String', + required: true, + }, + { + arg: 'message', + type: 'String', + required: true, + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/:id/sendSms`, + verb: 'POST' + } + }); + + Self.sendSms = async(ctx, id, destination, message) => { + const userId = ctx.req.accessToken.userId; + + let sms = await Self.app.models.Sms.send(ctx, id, destination, message); + let logRecord = { + originFk: id, + userFk: userId, + action: 'insert', + changedModel: 'sms', + newInstance: { + destinationFk: id, + destination: destination, + message: message, + statusCode: sms.statusCode, + status: sms.status + } + }; + + const clientLog = await Self.app.models.ClientLog.create(logRecord); + + sms.logId = clientLog.id; + + return sms; + }; +}; diff --git a/modules/client/back/methods/client/specs/activeWorkersWithRole.spec.js b/modules/client/back/methods/client/specs/activeWorkersWithRole.spec.js index b9b28fe09f..94288a317c 100644 --- a/modules/client/back/methods/client/specs/activeWorkersWithRole.spec.js +++ b/modules/client/back/methods/client/specs/activeWorkersWithRole.spec.js @@ -7,7 +7,7 @@ describe('Client activeWorkersWithRole', () => { let isSalesPerson = await app.models.Account.hasRole(result[0].id, 'salesPerson'); - expect(result.length).toEqual(14); + expect(result.length).toEqual(15); expect(isSalesPerson).toBeTruthy(); }); diff --git a/modules/client/back/methods/client/specs/listWorkers.spec.js b/modules/client/back/methods/client/specs/listWorkers.spec.js index 728268457c..97f4b591dd 100644 --- a/modules/client/back/methods/client/specs/listWorkers.spec.js +++ b/modules/client/back/methods/client/specs/listWorkers.spec.js @@ -6,7 +6,7 @@ describe('Client listWorkers', () => { .then(result => { let amountOfEmployees = Object.keys(result).length; - expect(amountOfEmployees).toEqual(49); + expect(amountOfEmployees).toEqual(50); done(); }) .catch(done.fail); diff --git a/modules/client/back/methods/client/specs/sendSms.spec.js b/modules/client/back/methods/client/specs/sendSms.spec.js new file mode 100644 index 0000000000..b299ac3c18 --- /dev/null +++ b/modules/client/back/methods/client/specs/sendSms.spec.js @@ -0,0 +1,27 @@ +const app = require('vn-loopback/server/server'); + +describe('client sendSms()', () => { + let createdLog; + + afterAll(async done => { + await app.models.ClientLog.destroyById(createdLog.id); + + done(); + }); + + it('should send a message and log it', async() => { + let ctx = {req: {accessToken: {userId: 9}}}; + let id = 101; + let destination = 222222222; + let message = 'this is the message created in a test'; + + let sms = await app.models.Client.sendSms(ctx, id, destination, message); + + logId = sms.logId; + + createdLog = await app.models.ClientLog.findById(logId); + let json = JSON.parse(JSON.stringify(createdLog.newInstance)); + + expect(json.message).toEqual(message); + }); +}); diff --git a/modules/client/back/methods/client/summary.js b/modules/client/back/methods/client/summary.js index 13e898f091..155d95d9ed 100644 --- a/modules/client/back/methods/client/summary.js +++ b/modules/client/back/methods/client/summary.js @@ -53,9 +53,6 @@ module.exports = Self => { } } }, - { - relation: 'phones' - }, { relation: 'country', scope: { diff --git a/modules/client/back/methods/credit-classification/createWithInsurance.js b/modules/client/back/methods/credit-classification/createWithInsurance.js index 368e9a41a1..0b74b70a2b 100644 --- a/modules/client/back/methods/credit-classification/createWithInsurance.js +++ b/modules/client/back/methods/credit-classification/createWithInsurance.js @@ -23,23 +23,25 @@ module.exports = Self => { }); Self.createWithInsurance = async(data, ctx) => { - let tx = await Self.beginTransaction({}); + const tx = await Self.beginTransaction({}); + const models = Self.app.models; + const $t = ctx.req.__; // $translate try { let options = {transaction: tx}; - let classificationSchema = {client: data.clientFk, started: data.started}; - let newClassification = await Self.create(classificationSchema, options); - let CreditInsurance = Self.app.models.CreditInsurance; - let insuranceSchema = { + const newClassification = await Self.create({ + client: data.clientFk, + started: data.started + }, options); + + await models.CreditInsurance.create({ creditClassification: newClassification.id, credit: data.credit, grade: data.grade - }; + }, options); - let newCreditInsurance = await CreditInsurance.create(insuranceSchema, options); await tx.commit(); - await CreditInsurance.messageSend(newCreditInsurance, ctx.req.accessToken); return newClassification; } catch (e) { diff --git a/modules/client/back/methods/credit-classification/createWithInsurance.spec.js b/modules/client/back/methods/credit-classification/createWithInsurance.spec.js index 4e5b5127e0..21abddb810 100644 --- a/modules/client/back/methods/credit-classification/createWithInsurance.spec.js +++ b/modules/client/back/methods/credit-classification/createWithInsurance.spec.js @@ -1,7 +1,20 @@ const app = require('vn-loopback/server/server'); +const LoopBackContext = require('loopback-context'); describe('Client createWithInsurance', () => { let classificationId; + const activeCtx = { + accessToken: {userId: 101}, + http: { + req: { + headers: {origin: 'http://localhost'} + } + } + }; + const ctx = {req: activeCtx}; + activeCtx.http.req.__ = value => { + return value; + }; afterAll(async done => { await app.models.CreditClassification.destroyById(classificationId); @@ -20,7 +33,9 @@ describe('Client createWithInsurance', () => { it('should not create the insurance if couldnt create the classification', async() => { let error; let data = {clientFk: null, started: Date.now(), credit: 999, grade: 255}; - let ctx = {req: {accessToken: {userId: 101}}}; + spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ + active: activeCtx + }); await app.models.CreditClassification.createWithInsurance(data, ctx) .catch(e => { error = e; @@ -37,7 +52,9 @@ describe('Client createWithInsurance', () => { it('should create a new client credit classification with insurance', async() => { let data = {clientFk: 101, started: Date.now(), credit: 999, grade: 255}; - let ctx = {req: {accessToken: {userId: 101}}}; + spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ + active: activeCtx + }); let result = await app.models.CreditClassification.createWithInsurance(data, ctx); classificationId = result.id; diff --git a/modules/client/back/methods/sms/send.js b/modules/client/back/methods/sms/send.js index e56b5567ed..af956650d5 100644 --- a/modules/client/back/methods/sms/send.js +++ b/modules/client/back/methods/sms/send.js @@ -3,7 +3,7 @@ const xmlParser = require('xml2js').parseString; const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { - Self.remoteMethodCtx('send', { + Self.remoteMethod('send', { description: 'Sends SMS to a destination phone', accessType: 'WRITE', accepts: [{ @@ -83,7 +83,6 @@ module.exports = Self => { }; const sms = await Self.create(newSms); - if (statusCode != 200) throw new UserError(`We weren't able to send this SMS`); diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index 73626b4083..1dba6c6dba 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -24,6 +24,7 @@ module.exports = Self => { require('../methods/client/canBeInvoiced')(Self); require('../methods/client/uploadFile')(Self); require('../methods/client/lastActiveTickets')(Self); + require('../methods/client/sendSms')(Self); // Validations @@ -224,34 +225,38 @@ module.exports = Self => { const newInstance = hookState.newInstance; const oldInstance = hookState.oldInstance; const instance = ctx.instance; + const models = Self.app.models; const payMethodChanged = oldInstance.payMethodFk != newInstance.payMethodFk; const ibanChanged = oldInstance.iban != newInstance.iban; const dueDayChanged = oldInstance.dueDay != newInstance.dueDay; if (payMethodChanged || ibanChanged || dueDayChanged) { - const message = `La forma de pago del cliente con id ${instance.id} ha cambiado`; - const salesPersonFk = instance.salesPersonFk; + const loopBackContext = LoopBackContext.getCurrentContext(); + const httpCtx = {req: loopBackContext.active}; + const httpRequest = httpCtx.req.http.req; + const $t = httpRequest.__; + const origin = httpRequest.headers.origin; - if (salesPersonFk) { - const salesPerson = await Self.app.models.Worker.findById(salesPersonFk); - await Self.app.models.Message.send(ctx, { - recipientFk: salesPerson.userFk, - message: message + const salesPersonId = instance.salesPersonFk; + + if (salesPersonId) { + const fullUrl = `${origin}/#!/client/${instance.id}/billing-data`; + const message = $t('MESSAGE_CHANGED_PAYMETHOD', { + clientId: instance.id, + clientName: instance.name, + url: fullUrl }); + await models.Chat.sendCheckingPresence(httpCtx, salesPersonId, message); } // Send email to client - if (!instance.email) return; - const loopBackContext = LoopBackContext.getCurrentContext(); - const headers = loopBackContext.active.http.req.headers; - const params = { + const serializedParams = httpParamSerializer({ clientId: instance.id, recipient: instance.email - }; - const serializedParams = httpParamSerializer(params); - const query = `${headers.origin}/api/email/payment-update?${serializedParams}`; + }); + const query = `${origin}/api/email/payment-update?${serializedParams}`; await request.get(query); } }); diff --git a/modules/client/back/models/client.json b/modules/client/back/models/client.json index 4529b3caf9..c62ae38322 100644 --- a/modules/client/back/models/client.json +++ b/modules/client/back/models/client.json @@ -200,11 +200,6 @@ "type": "hasOne", "model": "ClaimRatio", "foreignKey": "clientFk" - }, - "phones": { - "type": "hasMany", - "model": "UserPhone", - "foreignKey": "userFk" - } + } } } \ No newline at end of file diff --git a/modules/client/back/models/credit-insurance.js b/modules/client/back/models/credit-insurance.js index 3310ffb112..25117ead3e 100644 --- a/modules/client/back/models/credit-insurance.js +++ b/modules/client/back/models/credit-insurance.js @@ -1,3 +1,5 @@ +const LoopBackContext = require('loopback-context'); + module.exports = function(Self) { Self.validateCredit = function(credit) { return credit >= 0; @@ -38,54 +40,31 @@ module.exports = function(Self) { message: 'The grade must be similar to the last one' }); - Self.messageSend = async function(data, accessToken) { - let filter = { - include: { - relation: 'classification', - scope: { - fields: ['client'], - include: { - relation: 'customer', - scope: { - fields: ['name', 'salesPersonFk'], - include: { - relation: 'salesPerson', - scope: { - fields: 'userFk', - include: { - relation: 'user', - scope: { - fields: ['name'] - } - } - } - } - } - } - } - } - }; - - let ctx = {req: {accessToken: accessToken}}; - let insurance = await Self.findById(data.id, filter); - let customer = insurance.classification().customer(); - - if (!customer.salesPerson()) return; - let salesPersonId = customer.salesPerson().user().id; - let grade = data.grade ? `(Grado ${data.grade})` : '(Sin grado)'; - let params = { - recipientFk: salesPersonId, - message: `He cambiado el crédito asegurado del ` - + `cliente "${customer.name}" a ${data.credit} € ${grade}` - }; - - Self.app.models.Message.send(ctx, params); - }; - - // Update from transaction misses ctx accessToken. - // Fixed passing accessToken from method messageSend() Self.observe('after save', async function(ctx) { - if (ctx.options.accessToken) - await Self.messageSend(ctx.instance, ctx.options.accessToken); + const loopBackContext = LoopBackContext.getCurrentContext(); + const httpCtx = {req: loopBackContext.active}; + const options = ctx.options ? ctx.options : null; + const models = Self.app.models; + + if (!ctx.isNewInstance) return; + + const data = ctx.instance; + const insurance = await Self.findById(data.id, null, options); + const client = insurance.classification().customer(); + const salesPerson = client.salesPerson(); + + if (!salesPerson) return; + + const httpRequest = httpCtx.req.http.req; + const $t = httpRequest.__; + const origin = httpRequest.headers.origin; + const fullPath = `${origin}/#!/client/${client.id}`; + const message = $t('MESSAGE_INSURANCE_CHANGE', { + clientId: client.id, + clientName: client.name, + credit: data.credit, + url: fullPath + }); + await models.Chat.sendCheckingPresence(httpCtx, salesPerson.id, message); }); }; diff --git a/modules/client/back/models/credit-insurance.json b/modules/client/back/models/credit-insurance.json index 688c511fbc..b62c5b4f5a 100644 --- a/modules/client/back/models/credit-insurance.json +++ b/modules/client/back/models/credit-insurance.json @@ -32,5 +32,31 @@ "model": "CreditClassification", "foreignKey": "creditClassification" } + }, + "scope": { + "include": { + "relation": "classification", + "scope": { + "fields": ["client"], + "include": { + "relation": "customer", + "scope": { + "fields": ["name", "salesPersonFk"], + "include": { + "relation": "salesPerson", + "scope": { + "fields": "userFk", + "include": { + "relation": "user", + "scope": { + "fields": ["name"] + } + } + } + } + } + } + } + } } } \ No newline at end of file diff --git a/modules/client/back/models/sms.json b/modules/client/back/models/sms.json index aa9737478c..cb6936d904 100644 --- a/modules/client/back/models/sms.json +++ b/modules/client/back/models/sms.json @@ -1,11 +1,7 @@ { "name": "Sms", "description": "Sms sent to client", - "base": "Loggable", - "log": { - "model":"ClientLog", - "relation": "recipient" - }, + "base": "VnModel", "options": { "mysql": { "table": "sms" @@ -45,11 +41,6 @@ "type": "belongsTo", "model": "Account", "foreignKey": "senderFk" - }, - "recipient": { - "type": "belongsTo", - "model": "Client", - "foreignKey": "destinationFk" } } } diff --git a/modules/client/front/basic-data/index.html b/modules/client/front/basic-data/index.html index fbf883d98b..8c00f7a187 100644 --- a/modules/client/front/basic-data/index.html +++ b/modules/client/front/basic-data/index.html @@ -31,6 +31,20 @@ info="You can save multiple emails"> + + + + + + - + url="ClientContacts" + fields="['id', 'name', 'phone', 'clientFk']" + link="{clientFk: $ctrl.$stateParams.id}" + data="contacts" + auto-load="true"> + data="contacts" + form="form">
- - - + + + + ng-model="contact.phone" + rule="ClientContact" + vn-focus> + tabindex="-1" + ng-click="model.remove($index)"> @@ -51,4 +48,4 @@ - + \ No newline at end of file diff --git a/modules/client/front/contact/index.js b/modules/client/front/contact/index.js new file mode 100644 index 0000000000..4b0cc95ca2 --- /dev/null +++ b/modules/client/front/contact/index.js @@ -0,0 +1,35 @@ +import ngModule from '../module'; + +class Controller { + constructor($scope, $stateParams, $translate) { + this.$scope = $scope; + this.$stateParams = $stateParams; + this.$translate = $translate; + } + + add() { + this.$scope.model.insert({ + clientFk: this.client.id, + name: this.$translate.instant('Phone'), + phone: null + }); + } + + onSubmit() { + this.$scope.watcher.check(); + this.$scope.model.save().then(() => { + this.$scope.watcher.notifySaved(); + this.$scope.model.refresh(); + }); + } +} + +Controller.$inject = ['$scope', '$stateParams', '$translate']; + +ngModule.component('vnClientContact', { + template: require('./index.html'), + controller: Controller, + bindings: { + client: '<' + } +}); diff --git a/modules/client/front/index.js b/modules/client/front/index.js index 514319ee24..324046206a 100644 --- a/modules/client/front/index.js +++ b/modules/client/front/index.js @@ -30,7 +30,7 @@ import './credit-insurance/index'; import './credit-insurance/create'; import './credit-insurance/insurance/index'; import './credit-insurance/insurance/create'; -import './phones'; +import './contact'; import './sample/index'; import './sample/create'; import './web-payment'; diff --git a/modules/client/front/index/index.html b/modules/client/front/index/index.html index 184f187278..f3c3fb728f 100644 --- a/modules/client/front/index/index.html +++ b/modules/client/front/index/index.html @@ -25,6 +25,10 @@ label="Id" value="{{::client.id}}"> + + diff --git a/modules/client/front/phones/index.js b/modules/client/front/phones/index.js deleted file mode 100644 index 9839d27d78..0000000000 --- a/modules/client/front/phones/index.js +++ /dev/null @@ -1,44 +0,0 @@ -import ngModule from '../module'; -import Section from 'salix/components/section'; - -class Controller extends Section { - get client() { - return this._client; - } - - set client(value) { - this._client = value; - if (value) - this.setLink(value); - } - - setLink(value) { - this.$.$applyAsync(()=> { - this.$.model.link = {userFk: value.id}; - this.$.model.refresh(); - }); - } - - onSubmit() { - this.$.watcher.check(); - return this.$.model.save().then(() => { - this.$.watcher.updateOriginalData(); - this.$.watcher.notifySaved(); - this.card.reload(); - }); - } - - add() { - this.$.model.insert(); - } -} - - -ngModule.component('vnClientPhones', { - template: require('./index.html'), - controller: Controller, - require: {card: '^vnClientCard'}, - bindings: { - client: '<' - } -}); diff --git a/modules/client/front/phones/index.spec.js b/modules/client/front/phones/index.spec.js deleted file mode 100644 index 3d0befd685..0000000000 --- a/modules/client/front/phones/index.spec.js +++ /dev/null @@ -1,50 +0,0 @@ -import './index'; -import watcher from 'core/mocks/watcher'; - -describe('Component vnClientPhones', () => { - let controller; - let $element; - let $scope; - - beforeEach(ngModule('client')); - - beforeEach(angular.mock.inject(($componentController, $rootScope) => { - $scope = $rootScope.$new(); - $element = angular.element('
'); - $scope.watcher = watcher; - $scope.model = { - link: 1, - save: () => {} - }; - controller = $componentController('vnClientPhones', {$element, $scope}); - controller.card = {reload: () => {}}; - })); - - describe('setLink()', () => { - it('set the link in the model and refreshes it', () => { - spyOn(controller.$, '$applyAsync'); - let value = {id: 106}; - controller.setLink(value); - - expect(controller.$.$applyAsync).toHaveBeenCalledWith(jasmine.any(Function)); - }); - }); - - describe('onSubmit()', () => { - it('should call watcher functions, reload the card and save the model', done => { - spyOn(controller.$.watcher, 'check'); - spyOn(controller.$.model, 'save').and.returnValue(Promise.resolve()); - - spyOn(controller.$.watcher, 'updateOriginalData'); - spyOn(controller.$.watcher, 'notifySaved'); - spyOn(controller.card, 'reload'); - controller.onSubmit(); - controller.onSubmit().then(() => { - expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith(); - expect(controller.$.watcher.notifySaved).toHaveBeenCalledWith(); - expect(controller.card.reload).toHaveBeenCalledWith(); - done(); - }).catch(done.fail); - }); - }); -}); diff --git a/modules/client/front/routes.json b/modules/client/front/routes.json index 6d96bd2842..ef0d8cc7ad 100644 --- a/modules/client/front/routes.json +++ b/modules/client/front/routes.json @@ -26,7 +26,7 @@ {"state": "client.card.webAccess", "icon": "cloud"}, {"state": "client.card.mandate", "icon": "pan_tool"}, {"state": "client.card.creditInsurance.index", "icon": "icon-solunion"}, - {"state": "client.card.phones", "icon": "contact_phone"}, + {"state": "client.card.contact", "icon": "contact_phone"}, {"state": "client.card.sample.index", "icon": "mail"}, {"state": "client.card.webPayment", "icon": "icon-onlinepayment"}, {"state": "client.card.dms.index", "icon": "cloud_upload"} @@ -282,10 +282,10 @@ "client": "$ctrl.client" } }, { - "url": "/phones", - "state": "client.card.phones", - "component": "vn-client-phones", - "description": "Client phones", + "url": "/contact", + "state": "client.card.contact", + "component": "vn-client-contact", + "description": "Contacts", "params": { "client": "$ctrl.client" } diff --git a/modules/client/front/sms/index.html b/modules/client/front/sms/index.html index 501558512c..ac7a206512 100644 --- a/modules/client/front/sms/index.html +++ b/modules/client/front/sms/index.html @@ -2,22 +2,31 @@ vn-id="SMSDialog" on-response="$ctrl.onResponse($response)"> -
Send SMS
- - - - - - - - +
+
Send SMS
+ + + + + + + + + + + {{'Characters remaining' | translate}}: {{$ctrl.charactersRemaining()}} + + +
diff --git a/modules/client/front/sms/index.js b/modules/client/front/sms/index.js index 580a02d27c..1bf2fb99c8 100644 --- a/modules/client/front/sms/index.js +++ b/modules/client/front/sms/index.js @@ -16,9 +16,19 @@ class Controller extends Component { this.$scope.SMSDialog.show(); } + charactersRemaining() { + let elementMaxLength; + let textAreaLength; + const element = this.$scope.message; + + textAreaLength = element.input.textLength; + elementMaxLength = element.maxlength; + return elementMaxLength - textAreaLength; + } + onResponse(response) { if (response === 'accept') { - this.$http.post(`Sms/send`, this.sms).then(res => { + this.$http.post(`Clients/${this.$params.id}/sendSms`, this.sms).then(res => { this.vnApp.showMessage(this.$translate.instant('SMS sent!')); if (res.data) this.emit('send', {response: res.data}); diff --git a/modules/client/front/sms/index.spec.js b/modules/client/front/sms/index.spec.js index bda1cc0133..c2a7eb9352 100644 --- a/modules/client/front/sms/index.spec.js +++ b/modules/client/front/sms/index.spec.js @@ -8,11 +8,13 @@ describe('Client', () => { beforeEach(ngModule('client')); - beforeEach(angular.mock.inject(($componentController, _$httpBackend_) => { + beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_) => { $httpBackend = _$httpBackend_; + let $scope = $rootScope.$new(); $element = angular.element(''); - controller = $componentController('vnClientSms', {$element}); + controller = $componentController('vnClientSms', {$element, $scope}); controller.client = {id: 101}; + controller.$params = {id: 101}; })); describe('onResponse()', () => { @@ -21,8 +23,7 @@ describe('Client', () => { controller.sms = {destinationFk: 101, destination: 111111111, message: 'My SMS'}; spyOn(controller.vnApp, 'showMessage'); - $httpBackend.when('POST', `Sms/send`, params).respond(200, params); - $httpBackend.expect('POST', `Sms/send`, params).respond(params); + $httpBackend.expect('POST', `Clients/101/sendSms`, params).respond(200, params); controller.onResponse('accept'); $httpBackend.flush(); @@ -30,5 +31,20 @@ describe('Client', () => { expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent!'); }); }); + + describe('charactersRemaining()', () => { + it('should return the characters remaining in a element', () => { + controller.$scope.message = { + input: { + textLength: 50 + }, + maxlength: 150 + }; + + let result = controller.charactersRemaining(); + + expect(result).toEqual(100); + }); + }); }); }); diff --git a/modules/client/front/sms/locale/es.yml b/modules/client/front/sms/locale/es.yml index 10247b9260..f26c8ba24f 100644 --- a/modules/client/front/sms/locale/es.yml +++ b/modules/client/front/sms/locale/es.yml @@ -1,4 +1,5 @@ Send SMS: Enviar SMS Destination: Destinatario Message: Mensaje -SMS sent!: ¡SMS enviado! \ No newline at end of file +SMS sent!: ¡SMS enviado! +Characters remaining: Carácteres restantes \ No newline at end of file diff --git a/modules/client/front/sms/style.scss b/modules/client/front/sms/style.scss index 60a6258809..89723b1962 100644 --- a/modules/client/front/sms/style.scss +++ b/modules/client/front/sms/style.scss @@ -1,7 +1,5 @@ @import "variables"; -vn-client-sms { - textarea { - height: 8em - } +.SMSDialog { + min-width: 25em } \ No newline at end of file diff --git a/modules/client/front/summary/index.html b/modules/client/front/summary/index.html index 7016a19ffa..6678eaa65f 100644 --- a/modules/client/front/summary/index.html +++ b/modules/client/front/summary/index.html @@ -12,10 +12,11 @@ - + + diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js new file mode 100644 index 0000000000..8cbe5e15e6 --- /dev/null +++ b/modules/entry/back/methods/entry/filter.js @@ -0,0 +1,149 @@ + +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; +const buildFilter = require('vn-loopback/util/filter').buildFilter; +const mergeFilters = require('vn-loopback/util/filter').mergeFilters; + +module.exports = Self => { + Self.remoteMethodCtx('filter', { + description: 'Find all instances of the model matched by filter from the data source.', + accessType: 'READ', + accepts: [ + { + arg: 'filter', + type: 'Object', + description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', + http: {source: 'query'} + }, { + arg: 'search', + type: 'String', + description: 'Searchs the entry by id', + http: {source: 'query'} + }, { + arg: 'id', + type: 'Integer', + description: 'The entry id', + http: {source: 'query'} + }, { + arg: 'created', + type: 'Date', + description: 'The created date to filter', + http: {source: 'query'} + }, { + arg: 'travelFk', + type: 'Number', + description: 'The travel id to filter', + http: {source: 'query'} + }, { + arg: 'companyFk', + type: 'Number', + description: 'The company to filter', + http: {source: 'query'} + }, { + arg: 'isBooked', + type: 'Boolean', + description: 'The isBokked filter', + http: {source: 'query'} + }, { + arg: 'isConfirmed', + type: 'Boolean', + description: 'The isConfirmed filter', + http: {source: 'query'} + }, { + arg: 'isOrdered', + type: 'Boolean', + description: 'The isOrdered filter', + http: {source: 'query'} + }, { + arg: 'ref', + type: 'String', + description: 'The ref filter', + http: {source: 'query'} + }, { + arg: 'supplierFk', + type: 'Number', + description: 'The supplier id to filter', + http: {source: 'query'} + }, { + arg: 'currencyFk', + type: 'Number', + description: 'The currency id to filter', + http: {source: 'query'} + } + ], + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/filter`, + verb: 'GET' + } + }); + + Self.filter = async(ctx, filter) => { + let conn = Self.dataSource.connector; + let where = buildFilter(ctx.args, (param, value) => { + switch (param) { + case 'search': + return {'e.id': value}; + case 'ref': + param = `e.${param}`; + return {[param]: {like: `%${value}%`}}; + case 'created': + return {'e.created': {gte: value}}; + case 'id': + case 'isBooked': + case 'isConfirmed': + case 'isOrdered': + case 'companyFk': + case 'travelFk': + case 'currencyFk': + case 'supplierFk': + param = `e.${param}`; + return {[param]: value}; + } + }); + filter = mergeFilters(ctx.args.filter, {where}); + + let stmts = []; + let stmt; + stmt = new ParameterizedSQL( + `SELECT + e.id, + e.supplierFk, + e.dated, + e.ref, + e.isBooked, + e.isInventory, + e.notes, + e.isConfirmed, + e.isOrdered, + e.isRaid, + e.commission, + e.created, + e.evaNotes, + e.travelFk, + e.currencyFk, + e.companyFk, + e.gestDocFk, + e.invoiceInFk, + s.name AS supplierName, + co.code AS companyCode, + cu.code AS currencyCode + FROM vn.entry e + JOIN vn.supplier s ON s.id = e.supplierFk + JOIN vn.travel t ON t.id = e.travelFk + JOIN vn.company co ON co.id = e.companyFk + JOIN vn.currency cu ON cu.id = e.currencyFk` + ); + + + stmt.merge(conn.makeSuffix(filter)); + let itemsIndex = stmts.push(stmt) - 1; + + let sql = ParameterizedSQL.join(stmts, ';'); + let result = await conn.executeStmt(sql); + return itemsIndex === 0 ? result : result[itemsIndex]; + }; +}; + diff --git a/modules/entry/back/methods/entry/specs/filter.spec.js b/modules/entry/back/methods/entry/specs/filter.spec.js new file mode 100644 index 0000000000..9b935d831a --- /dev/null +++ b/modules/entry/back/methods/entry/specs/filter.spec.js @@ -0,0 +1,77 @@ +const app = require('vn-loopback/server/server'); + +describe('Entry filter()', () => { + it('should return the entry matching "search"', async() => { + let ctx = { + args: { + search: 1 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(1); + expect(result[0].id).toEqual(1); + }); + + it('should return the entry matching the currency', async() => { + let ctx = { + args: { + currencyFk: 1 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(7); + }); + + it('should return the entry matching the supplier', async() => { + let ctx = { + args: { + supplierFk: 2 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(5); + }); + + it('should return the entry matching the company', async() => { + let ctx = { + args: { + companyFk: 442 + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(6); + }); + + it('should return the entries matching isBooked', async() => { + let ctx = { + args: { + isBooked: true, + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(0); + }); + + it('should return the routes matching the reference and travel', async() => { + let ctx = { + args: { + reference: 'movement', + travelFk: '2' + } + }; + + let result = await app.models.Entry.filter(ctx); + + expect(result.length).toEqual(2); + }); +}); diff --git a/modules/entry/back/model-config.json b/modules/entry/back/model-config.json new file mode 100644 index 0000000000..cd763c4ea2 --- /dev/null +++ b/modules/entry/back/model-config.json @@ -0,0 +1,5 @@ +{ + "Entry": { + "dataSource": "vn" + } +} diff --git a/modules/entry/back/models/entry.js b/modules/entry/back/models/entry.js new file mode 100644 index 0000000000..4034b7e0aa --- /dev/null +++ b/modules/entry/back/models/entry.js @@ -0,0 +1,4 @@ + +module.exports = Self => { + require('../methods/entry/filter')(Self); +}; diff --git a/modules/travel/back/models/entry.json b/modules/entry/back/models/entry.json similarity index 100% rename from modules/travel/back/models/entry.json rename to modules/entry/back/models/entry.json diff --git a/modules/entry/front/card/index.html b/modules/entry/front/card/index.html new file mode 100644 index 0000000000..d386a9ebf9 --- /dev/null +++ b/modules/entry/front/card/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/entry/front/card/index.js b/modules/entry/front/card/index.js new file mode 100644 index 0000000000..62fed7db04 --- /dev/null +++ b/modules/entry/front/card/index.js @@ -0,0 +1,33 @@ +import ngModule from '../module'; +import ModuleCard from 'salix/components/module-card'; + +class Controller extends ModuleCard { + reload() { + let filter = { + include: [ + { + relation: 'company', + scope: { + fields: ['id', 'code'] + } + }, { + relation: 'travel' + }, { + relation: 'supplier', + scope: { + fields: ['id', 'name'] + } + }, { + relation: 'currency' + } + ] + }; + this.$http.get(`Entries/${this.$params.id}`, {filter}) + .then(response => this.entry = response.data); + } +} + +ngModule.component('vnEntry Card', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/entry/front/descriptor/index.html b/modules/entry/front/descriptor/index.html new file mode 100644 index 0000000000..372479c799 --- /dev/null +++ b/modules/entry/front/descriptor/index.html @@ -0,0 +1,21 @@ +
+
+ + + + + + + +
+
+
+ + + + +
+
+
diff --git a/modules/entry/front/descriptor/index.js b/modules/entry/front/descriptor/index.js new file mode 100644 index 0000000000..a9f5cd6796 --- /dev/null +++ b/modules/entry/front/descriptor/index.js @@ -0,0 +1,20 @@ +import ngModule from '../module'; + +class Controller { + constructor($scope) { + this.$ = $scope; + } +} + +Controller.$inject = ['$scope']; + +ngModule.component('vnEntryDescriptor', { + template: require('./index.html'), + bindings: { + entry: '<' + }, + require: { + card: '^?vnEntryCard' + }, + controller: Controller +}); diff --git a/modules/entry/front/descriptor/locale/es.yml b/modules/entry/front/descriptor/locale/es.yml new file mode 100644 index 0000000000..e5b926f1df --- /dev/null +++ b/modules/entry/front/descriptor/locale/es.yml @@ -0,0 +1 @@ +Reference: Referencia diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js new file mode 100644 index 0000000000..a0272fccf1 --- /dev/null +++ b/modules/entry/front/index.js @@ -0,0 +1,11 @@ +export * from './module'; + +import './main'; +import './index/'; +import './search-panel'; +import './descriptor'; +import './card'; +// import './summary'; +// import './basic-data'; +// import './log'; +// import './create'; diff --git a/modules/entry/front/index/index.html b/modules/entry/front/index/index.html new file mode 100644 index 0000000000..8ddd4d3a39 --- /dev/null +++ b/modules/entry/front/index/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + Id + Created + Travel + Notes + Reference + Booked + Is inventory + Confirmed + Ordered + Is raid + Commission + Supplier + Currency + Company + + + + + {{::entry.id}} + {{::entry.created | date:'dd/MM/yyyy'}} + {{::entry.travelFk}} + {{::entry.notes}} + {{::entry.ref}} + + + + + + {{::entry.commission}} + {{::entry.supplierName}} + {{::entry.currencyCode}} + {{::entry.companyCode}} + + + + +
+ + + + + \ No newline at end of file diff --git a/modules/entry/front/index/index.js b/modules/entry/front/index/index.js new file mode 100644 index 0000000000..ec78c06dfa --- /dev/null +++ b/modules/entry/front/index/index.js @@ -0,0 +1,21 @@ +import ngModule from '../module'; + +export default class Controller { + constructor($scope) { + this.$ = $scope; + } + + onSearch(params) { + if (params) + this.$.model.applyFilter(null, params); + else + this.$.model.clear(); + } +} + +Controller.$inject = ['$scope']; + +ngModule.component('vnEntryIndex', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/entry/front/locale/es.yml b/modules/entry/front/locale/es.yml new file mode 100644 index 0000000000..214be93d4d --- /dev/null +++ b/modules/entry/front/locale/es.yml @@ -0,0 +1,15 @@ +#Ordenar alfabeticamente +Reference: Referencia +Created: Creado +Booked: Facturado +Is inventory: Inventario +Notes: Notas +Travel: Envío +Supplier: Proveedor +Currency: Moneda +Company: Empresa +Confirmed: Confirmada +Ordered: Pedida +Is raid: Redada +Commission: Comisión +# Sections diff --git a/modules/entry/front/main/index.html b/modules/entry/front/main/index.html new file mode 100644 index 0000000000..44b1b2b4e7 --- /dev/null +++ b/modules/entry/front/main/index.html @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/entry/front/main/index.js b/modules/entry/front/main/index.js new file mode 100644 index 0000000000..75f1d098ad --- /dev/null +++ b/modules/entry/front/main/index.js @@ -0,0 +1,9 @@ +import ngModule from '../module'; +import ModuleMain from 'salix/components/module-main'; + +export default class Entry extends ModuleMain {} + +ngModule.vnComponent('vnEntry', { + controller: Entry, + template: require('./index.html') +}); diff --git a/modules/entry/front/module.js b/modules/entry/front/module.js new file mode 100644 index 0000000000..7a2d9943b7 --- /dev/null +++ b/modules/entry/front/module.js @@ -0,0 +1,3 @@ +import {ng} from 'core/vendor'; + +export default ng.module('entry', ['vnCore']); diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json new file mode 100644 index 0000000000..f23ff02bfb --- /dev/null +++ b/modules/entry/front/routes.json @@ -0,0 +1,32 @@ +{ + "module": "entry", + "name": "Entries", + "icon": "icon-entry", + "validations": true, + "menus": { + "main": [ + {"state": "entry.index", "icon": "icon-entry"} + ], + "card": [ + ] + }, + "routes": [ + { + "url": "/entry", + "state": "entry", + "abstract": true, + "component": "vn-entry", + "description": "Entries" + }, { + "url": "/index?q", + "state": "entry.index", + "component": "vn-entry-index", + "description": "Entries" + }, { + "url": "/:id", + "state": "entry.card", + "abstract": true, + "component": "vn-entry-card" + } + ] +} \ No newline at end of file diff --git a/modules/entry/front/search-panel/index.html b/modules/entry/front/search-panel/index.html new file mode 100644 index 0000000000..d648edcddc --- /dev/null +++ b/modules/entry/front/search-panel/index.html @@ -0,0 +1,78 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/modules/entry/front/search-panel/index.js b/modules/entry/front/search-panel/index.js new file mode 100644 index 0000000000..d728fe5e86 --- /dev/null +++ b/modules/entry/front/search-panel/index.js @@ -0,0 +1,7 @@ +import ngModule from '../module'; +import SearchPanel from 'core/components/searchbar/search-panel'; + +ngModule.component('vnEntrySearchPanel', { + template: require('./index.html'), + controller: SearchPanel +}); diff --git a/modules/entry/front/search-panel/locale/es.yml b/modules/entry/front/search-panel/locale/es.yml new file mode 100644 index 0000000000..1f892a7429 --- /dev/null +++ b/modules/entry/front/search-panel/locale/es.yml @@ -0,0 +1,7 @@ +Ticket id: Id ticket +Client id: Id cliente +Nickname: Alias +From: Desde +To: Hasta +Agency: Agencia +Warehouse: Almacén \ No newline at end of file diff --git a/modules/item/back/methods/item/getWasteDetail.js b/modules/item/back/methods/item/getWasteDetail.js new file mode 100644 index 0000000000..906269044c --- /dev/null +++ b/modules/item/back/methods/item/getWasteDetail.js @@ -0,0 +1,41 @@ +module.exports = Self => { + Self.remoteMethod('getWasteDetail', { + description: 'Returns the ', + accessType: 'READ', + accepts: [], + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/getWasteDetail`, + verb: 'GET' + } + }); + + Self.getWasteDetail = async() => { + const [wastes] = await Self.rawSql(`CALL bs.weekWaste_getDetail()`); + + const details = []; + + for (let waste of wastes) { + const buyerName = waste.buyer; + + let buyerDetail = details.find(waste => { + return waste.buyer == buyerName; + }); + + if (!buyerDetail) { + buyerDetail = { + buyer: buyerName, + lines: [] + }; + details.push(buyerDetail); + } + + buyerDetail.lines.push(waste); + } + + return details; + }; +}; diff --git a/modules/item/back/methods/item/specs/getWasteDetail.spec.js b/modules/item/back/methods/item/specs/getWasteDetail.spec.js new file mode 100644 index 0000000000..6ed202178b --- /dev/null +++ b/modules/item/back/methods/item/specs/getWasteDetail.spec.js @@ -0,0 +1,23 @@ +const app = require('vn-loopback/server/server'); + +xdescribe('item getWasteDetail()', () => { + it('should check for the waste breakdown for every worker', async() => { + let result = await app.models.Item.getWasteDetail(); + + const firstBuyer = result[0].buyer; + const firstBuyerLines = result[0].lines; + const secondBuyer = result[1].buyer; + const secondBuyerLines = result[1].lines; + const thirdBuyer = result[2].buyer; + const thirdBuyerLines = result[2].lines; + + expect(result.length).toEqual(3); + expect(firstBuyer).toEqual('CharlesXavier'); + expect(firstBuyerLines.length).toEqual(4); + expect(secondBuyer).toEqual('DavidCharlesHaller'); + expect(secondBuyerLines.length).toEqual(3); + + expect(thirdBuyer).toEqual('HankPym'); + expect(thirdBuyerLines.length).toEqual(3); + }); +}); diff --git a/modules/item/back/models/item.js b/modules/item/back/models/item.js index 628bd5a030..6c221e94df 100644 --- a/modules/item/back/models/item.js +++ b/modules/item/back/models/item.js @@ -11,6 +11,7 @@ module.exports = Self => { require('../methods/item/regularize')(Self); require('../methods/item/getVisibleAvailable')(Self); require('../methods/item/new')(Self); + require('../methods/item/getWasteDetail')(Self); Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'}); diff --git a/modules/item/front/index.js b/modules/item/front/index.js index 2be6f95c24..0f11c05630 100644 --- a/modules/item/front/index.js +++ b/modules/item/front/index.js @@ -20,4 +20,5 @@ import './niche'; import './botanical'; import './barcode'; import './summary'; +import './waste'; diff --git a/modules/item/front/locale/es.yml b/modules/item/front/locale/es.yml index c071d2c69e..9580fd156d 100644 --- a/modules/item/front/locale/es.yml +++ b/modules/item/front/locale/es.yml @@ -60,4 +60,5 @@ Barcodes: Códigos de barras Diary: Histórico Item diary: Registro de compra-venta Last entries: Últimas entradas -Tags: Etiquetas \ No newline at end of file +Tags: Etiquetas +Waste breakdown: Desglose de mermas \ No newline at end of file diff --git a/modules/item/front/routes.json b/modules/item/front/routes.json index bda4f18a97..a3cf0bee68 100644 --- a/modules/item/front/routes.json +++ b/modules/item/front/routes.json @@ -7,7 +7,8 @@ "menus": { "main": [ {"state": "item.index", "icon": "icon-item"}, - {"state": "item.request", "icon": "pan_tool"} + {"state": "item.request", "icon": "pan_tool"}, + {"state": "item.waste", "icon": "icon-claims"} ], "card": [ {"state": "item.card.basicData", "icon": "settings"}, @@ -137,6 +138,12 @@ "item": "$ctrl.item" }, "acl": ["employee"] + }, { + "url" : "/waste", + "state": "item.waste", + "component": "vn-item-waste", + "description": "Waste breakdown", + "acl": ["buyer"] } ] } \ No newline at end of file diff --git a/modules/item/front/waste/index.html b/modules/item/front/waste/index.html new file mode 100644 index 0000000000..d363f0ce0b --- /dev/null +++ b/modules/item/front/waste/index.html @@ -0,0 +1,32 @@ + + + + +
+ +
{{detail.buyer}}
+
+ + + + Family + Percentage + Dwindle + Total + + + + + {{::waste.family}} + {{::(waste.percentage / 100) | percentage: 2}} + {{::waste.dwindle | currency: 'EUR'}} + {{::waste.total | currency: 'EUR'}} + + + +
+
+
diff --git a/modules/item/front/waste/index.js b/modules/item/front/waste/index.js new file mode 100644 index 0000000000..9344c2222d --- /dev/null +++ b/modules/item/front/waste/index.js @@ -0,0 +1,8 @@ +import ngModule from '../module'; +import Component from 'core/lib/component'; +import './style.scss'; + +ngModule.component('vnItemWaste', { + template: require('./index.html'), + controller: Component +}); diff --git a/modules/item/front/waste/locale/es.yml b/modules/item/front/waste/locale/es.yml new file mode 100644 index 0000000000..9f08e3a724 --- /dev/null +++ b/modules/item/front/waste/locale/es.yml @@ -0,0 +1,3 @@ +Family: Familia +Percentage: Porcentaje +Dwindle: Mermas \ No newline at end of file diff --git a/modules/item/front/waste/style.scss b/modules/item/front/waste/style.scss new file mode 100644 index 0000000000..59e9a3b683 --- /dev/null +++ b/modules/item/front/waste/style.scss @@ -0,0 +1,25 @@ +@import "variables"; + +vn-item-waste { + .header { + margin-bottom: 16px; + text-transform: uppercase; + font-size: 15pt; + line-height: 1; + padding: 7px; + padding-bottom: 7px; + padding-bottom: 4px; + font-weight: lighter; + background-color: #fde6ca; + border-bottom: 0.1em solid #f7931e; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + vn-table vn-th.waste-family, + vn-table vn-td.waste-family { + max-width: 4em; + width: 4em + } +} \ No newline at end of file diff --git a/modules/ticket/back/methods/sale/recalculatePrice.js b/modules/ticket/back/methods/sale/recalculatePrice.js index 1bd754f6ad..9ad7e68e7b 100644 --- a/modules/ticket/back/methods/sale/recalculatePrice.js +++ b/modules/ticket/back/methods/sale/recalculatePrice.js @@ -29,6 +29,6 @@ module.exports = Self => { if (!isEditable) throw new UserError(`The sales of this ticket can't be modified`); - return Self.rawSql('CALL vn.ticketCalculateSale(?)', [id]); + return Self.rawSql('CALL vn.sale_calculateComponent(?, null)', [id]); }; }; diff --git a/modules/ticket/back/methods/ticket-request/confirm.js b/modules/ticket/back/methods/ticket-request/confirm.js index 72c41737a6..938efa7e5f 100644 --- a/modules/ticket/back/methods/ticket-request/confirm.js +++ b/modules/ticket/back/methods/ticket-request/confirm.js @@ -32,8 +32,9 @@ module.exports = Self => { Self.confirm = async ctx => { const models = Self.app.models; + const tx = await Self.beginTransaction({}); + const $t = ctx.req.__; // $translate let sale; - let tx = await Self.beginTransaction({}); try { let options = {transaction: tx}; @@ -59,7 +60,7 @@ module.exports = Self => { if (request.saleFk) { sale = await models.Sale.findById(request.saleFk, null, options); - sale.updateAttributes({ + await sale.updateAttributes({ itemFk: ctx.args.itemFk, quantity: ctx.args.quantity, concept: item.name, @@ -71,7 +72,7 @@ module.exports = Self => { quantity: ctx.args.quantity, concept: item.name }, options); - request.updateAttributes({ + await request.updateAttributes({ saleFk: sale.id, itemFk: sale.itemFk, isOk: true @@ -81,13 +82,16 @@ module.exports = Self => { query = `CALL vn.ticketCalculateSale(?)`; await Self.rawSql(query, [sale.id], options); - const message = `Se ha comprado ${sale.quantity} unidades de "${sale.concept}" (#${sale.itemFk}) ` - + `para el ticket #${sale.ticketFk}`; - - await models.Message.send(ctx, { - recipientFk: request.requesterFk, - message: message - }, options); + const origin = ctx.req.headers.origin; + const requesterId = request.requesterFk; + const message = $t('MESSAGE_BOUGHT_UNITS', { + quantity: sale.quantity, + concept: sale.concept, + itemId: sale.itemFk, + ticketId: sale.ticketFk, + url: `${origin}/#!/ticket/${sale.ticketFk}/summary` + }); + await models.Chat.sendCheckingPresence(ctx, requesterId, message); await tx.commit(); diff --git a/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js b/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js index 2383fe5602..6cce70b9c5 100644 --- a/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js +++ b/modules/ticket/back/methods/ticket-request/specs/confirm.spec.js @@ -4,6 +4,15 @@ describe('ticket-request confirm()', () => { let originalRequest; let originalSale; let createdSaleId; + let ctx = { + req: { + accessToken: {userId: 9}, + headers: {origin: 'http://localhost'} + } + }; + ctx.req.__ = value => { + return value; + }; afterAll(async done => { await originalRequest.updateAttributes(originalRequest); @@ -13,9 +22,9 @@ describe('ticket-request confirm()', () => { }); it(`should throw an error if the item doesn't exist`, async() => { - let ctx = {req: {accessToken: {userId: 9}}, args: {itemFk: 999}}; - let error; + ctx.args = {itemFk: 999}; + let error; try { await app.models.TicketRequest.confirm(ctx); } catch (err) { @@ -30,11 +39,12 @@ describe('ticket-request confirm()', () => { const itemId = 4; const quantity = 99999; - let ctx = {req: {accessToken: {userId: 9}}, args: { + ctx.args = { itemFk: itemId, id: requestId, quantity: quantity - }}; + }; + let error; try { @@ -52,18 +62,17 @@ describe('ticket-request confirm()', () => { const itemId = 1; const quantity = 10; + ctx.args = { + itemFk: itemId, + id: requestId, + quantity: quantity + }; + originalRequest = await app.models.TicketRequest.findById(requestId); originalSale = await app.models.Sale.findById(saleId); const request = await app.models.TicketRequest.findById(requestId); await request.updateAttributes({saleFk: saleId}); - - let ctx = {req: {accessToken: {userId: 9}}, args: { - itemFk: itemId, - id: requestId, - quantity: quantity - }}; - await app.models.TicketRequest.confirm(ctx); let updatedSale = await app.models.Sale.findById(saleId); @@ -77,16 +86,14 @@ describe('ticket-request confirm()', () => { const itemId = 1; const quantity = 10; - const request = await app.models.TicketRequest.findById(requestId); - await request.updateAttributes({saleFk: null}); - - let ctx = {req: {accessToken: {userId: 9}}, args: { + ctx.args = { itemFk: itemId, id: requestId, - quantity: quantity, - ticketFk: 1 - }}; + quantity: quantity + }; + const request = await app.models.TicketRequest.findById(requestId); + await request.updateAttributes({saleFk: null}); await app.models.TicketRequest.confirm(ctx); let updatedRequest = await app.models.TicketRequest.findById(requestId); diff --git a/modules/ticket/back/methods/ticket/sendSms.js b/modules/ticket/back/methods/ticket/sendSms.js new file mode 100644 index 0000000000..efcaf4eda4 --- /dev/null +++ b/modules/ticket/back/methods/ticket/sendSms.js @@ -0,0 +1,57 @@ + +module.exports = Self => { + Self.remoteMethodCtx('sendSms', { + description: 'Log the message in ticketLog and call the send method', + accessType: 'WRITE', + accepts: [{ + arg: 'id', + type: 'Number', + required: true, + description: 'The ticket id', + http: {source: 'path'} + }, + { + arg: 'destination', + type: 'String', + required: true, + }, + { + arg: 'message', + type: 'String', + required: true, + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/:id/sendSms`, + verb: 'POST' + } + }); + + Self.sendSms = async(ctx, id, destination, message) => { + const userId = ctx.req.accessToken.userId; + + let sms = await Self.app.models.Sms.send(ctx, id, destination, message); + let logRecord = { + originFk: id, + userFk: userId, + action: 'insert', + changedModel: 'sms', + newInstance: { + destinationFk: id, + destination: destination, + message: message, + statusCode: sms.statusCode, + status: sms.status + } + }; + + const ticketLog = await Self.app.models.TicketLog.create(logRecord); + + sms.logId = ticketLog.id; + + return sms; + }; +}; diff --git a/modules/ticket/back/methods/ticket/setDeleted.js b/modules/ticket/back/methods/ticket/setDeleted.js index fb72c7dbc6..6daad7c39f 100644 --- a/modules/ticket/back/methods/ticket/setDeleted.js +++ b/modules/ticket/back/methods/ticket/setDeleted.js @@ -94,7 +94,7 @@ module.exports = Self => { id: id, url: `${origin}/#!/ticket/${id}/summary` }); - await models.Chat.sendMessage(ctx, `@${salesPersonUser}`, message); + await models.Chat.send(ctx, `@${salesPersonUser}`, message); } return ticket.updateAttribute('isDeleted', true); diff --git a/modules/ticket/back/methods/ticket/specs/sendSms.spec.js b/modules/ticket/back/methods/ticket/specs/sendSms.spec.js new file mode 100644 index 0000000000..20066a5ba8 --- /dev/null +++ b/modules/ticket/back/methods/ticket/specs/sendSms.spec.js @@ -0,0 +1,27 @@ +const app = require('vn-loopback/server/server'); + +describe('ticket sendSms()', () => { + let logId; + + afterAll(async done => { + await app.models.TicketLog.destroyById(logId); + + done(); + }); + + it('should send a message and log it', async() => { + let ctx = {req: {accessToken: {userId: 9}}}; + let id = 11; + let destination = 222222222; + let message = 'this is the message created in a test'; + + let sms = await app.models.Ticket.sendSms(ctx, id, destination, message); + + logId = sms.logId; + + let createdLog = await app.models.TicketLog.findById(logId); + let json = JSON.parse(JSON.stringify(createdLog.newInstance)); + + expect(json.message).toEqual(message); + }); +}); diff --git a/modules/ticket/back/methods/ticket/summary.js b/modules/ticket/back/methods/ticket/summary.js index 2b1d8711c8..d1037f251e 100644 --- a/modules/ticket/back/methods/ticket/summary.js +++ b/modules/ticket/back/methods/ticket/summary.js @@ -51,6 +51,7 @@ module.exports = Self => { include: [ {relation: 'warehouse', scope: {fields: ['name']}}, {relation: 'agencyMode', scope: {fields: ['name']}}, + {relation: 'zone', scope: {fields: ['name']}}, { relation: 'client', scope: { diff --git a/modules/ticket/back/models/ticket.js b/modules/ticket/back/models/ticket.js index 8ba2bfb0d7..45284d60d2 100644 --- a/modules/ticket/back/models/ticket.js +++ b/modules/ticket/back/models/ticket.js @@ -28,6 +28,7 @@ module.exports = Self => { require('../methods/ticket/canHaveStowaway')(Self); require('../methods/ticket/recalculateComponents')(Self); require('../methods/ticket/deleteStowaway')(Self); + require('../methods/ticket/sendSms')(Self); Self.observe('before save', async function(ctx) { if (ctx.isNewInstance) return; diff --git a/modules/ticket/front/descriptor/index.html b/modules/ticket/front/descriptor/index.html index 3632d37f10..f47f3d6efa 100644 --- a/modules/ticket/front/descriptor/index.html +++ b/modules/ticket/front/descriptor/index.html @@ -193,7 +193,7 @@ - + - - Verdnatura le comunica: Su pedido está pendiente de pago. - Por favor, entre en la página web y efectue el pago con tarjeta. Muchas gracias. +SMSPayment: "Verdnatura le comunica:\rSu pedido está pendiente de pago.\rPor favor, entre en la página web y efectue el pago con tarjeta.\rMuchas gracias." Ticket invoiced: Ticket facturado Make invoice: Crear factura Regenerate invoice: Regenerar factura diff --git a/modules/ticket/front/index.js b/modules/ticket/front/index.js index 58ee9136ef..2625d35f31 100644 --- a/modules/ticket/front/index.js +++ b/modules/ticket/front/index.js @@ -34,3 +34,4 @@ import './weekly'; import './dms/index'; import './dms/create'; import './dms/edit'; +import './sms'; diff --git a/modules/ticket/front/sale/locale/es.yml b/modules/ticket/front/sale/locale/es.yml index 3ccdd528e1..74f888f569 100644 --- a/modules/ticket/front/sale/locale/es.yml +++ b/modules/ticket/front/sale/locale/es.yml @@ -24,9 +24,7 @@ Sales to transfer: Líneas a transferir Destination ticket: Ticket destinatario Change ticket state to 'Ok': Cambiar estado del ticket a 'Ok' Reserved: Reservado -SMSAvailability: >- - Verdnatura le comunica: Pedido {{ticketFk}} día {{created | date: "dd/MM/yyyy"}}. - {{notAvailables}} no disponible/s. Disculpe las molestias. +SMSAvailability: "Verdnatura le comunica:\rPedido {{ticketFk}} día {{created | date: 'dd/MM/yyyy'}}.\r{{notAvailables}} no disponible/s.\rDisculpe las molestias." Continue anyway?: ¿Continuar de todas formas? This ticket is now empty: El ticket ha quedado vacio Do you want to delete it?: ¿Quieres eliminarlo? diff --git a/modules/ticket/front/sms/index.html b/modules/ticket/front/sms/index.html new file mode 100644 index 0000000000..ac7a206512 --- /dev/null +++ b/modules/ticket/front/sms/index.html @@ -0,0 +1,35 @@ + + +
+
Send SMS
+ + + + + + + + + + + {{'Characters remaining' | translate}}: {{$ctrl.charactersRemaining()}} + + +
+
+ + + + +
\ No newline at end of file diff --git a/modules/ticket/front/sms/index.js b/modules/ticket/front/sms/index.js new file mode 100644 index 0000000000..1f2c7f9c05 --- /dev/null +++ b/modules/ticket/front/sms/index.js @@ -0,0 +1,48 @@ +import ngModule from '../module'; +import Component from 'core/lib/component'; +import './style.scss'; + +class Controller extends Component { + constructor($element, $scope, $http, $translate, vnApp) { + super($element, $scope); + + this.$scope = $scope; + this.$http = $http; + this.$translate = $translate; + this.vnApp = vnApp; + } + + open() { + this.$scope.SMSDialog.show(); + } + + charactersRemaining() { + let elementMaxLength; + let textAreaLength; + const element = this.$scope.message; + + textAreaLength = element.input.textLength; + elementMaxLength = element.maxlength; + return elementMaxLength - textAreaLength; + } + + onResponse(response) { + if (response === 'accept') { + this.$http.post(`Tickets/${this.$params.id}/sendSms`, this.sms).then(res => { + this.vnApp.showMessage(this.$translate.instant('SMS sent!')); + + if (res.data) this.emit('send', {response: res.data}); + }); + } + } +} + +Controller.$inject = ['$element', '$scope', '$http', '$translate', 'vnApp']; + +ngModule.component('vnTicketSms', { + template: require('./index.html'), + controller: Controller, + bindings: { + sms: '<', + } +}); diff --git a/modules/ticket/front/sms/index.spec.js b/modules/ticket/front/sms/index.spec.js new file mode 100644 index 0000000000..5565c36230 --- /dev/null +++ b/modules/ticket/front/sms/index.spec.js @@ -0,0 +1,49 @@ +import './index'; + +describe('Ticket', () => { + describe('Component vnTicketSms', () => { + let controller; + let $httpBackend; + let $element; + + beforeEach(ngModule('ticket')); + + beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_) => { + $httpBackend = _$httpBackend_; + let $scope = $rootScope.$new(); + $element = angular.element(''); + controller = $componentController('vnTicketSms', {$element, $scope}); + controller.$params = {id: 11}; + })); + + describe('onResponse()', () => { + it('should perform a POST query and show a success snackbar', () => { + let params = {destinationFk: 101, destination: 111111111, message: 'My SMS'}; + controller.sms = {destinationFk: 101, destination: 111111111, message: 'My SMS'}; + + spyOn(controller.vnApp, 'showMessage'); + $httpBackend.expect('POST', `Tickets/11/sendSms`, params).respond(200, params); + + controller.onResponse('accept'); + $httpBackend.flush(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent!'); + }); + }); + + describe('charactersRemaining()', () => { + it('should return the characters remaining in a element', () => { + controller.$scope.message = { + input: { + textLength: 50 + }, + maxlength: 150 + }; + + let result = controller.charactersRemaining(); + + expect(result).toEqual(100); + }); + }); + }); +}); diff --git a/modules/ticket/front/sms/locale/es.yml b/modules/ticket/front/sms/locale/es.yml new file mode 100644 index 0000000000..f26c8ba24f --- /dev/null +++ b/modules/ticket/front/sms/locale/es.yml @@ -0,0 +1,5 @@ +Send SMS: Enviar SMS +Destination: Destinatario +Message: Mensaje +SMS sent!: ¡SMS enviado! +Characters remaining: Carácteres restantes \ No newline at end of file diff --git a/modules/ticket/front/sms/style.scss b/modules/ticket/front/sms/style.scss new file mode 100644 index 0000000000..89723b1962 --- /dev/null +++ b/modules/ticket/front/sms/style.scss @@ -0,0 +1,5 @@ +@import "variables"; + +.SMSDialog { + min-width: 25em +} \ No newline at end of file diff --git a/modules/ticket/front/summary/index.html b/modules/ticket/front/summary/index.html index 9ef27d093a..7bbff4f28d 100644 --- a/modules/ticket/front/summary/index.html +++ b/modules/ticket/front/summary/index.html @@ -24,12 +24,12 @@ + + - - @@ -46,6 +46,9 @@ {{$ctrl.summary.routeFk}} + + diff --git a/modules/ticket/front/summary/index.js b/modules/ticket/front/summary/index.js index 5b5f9fb906..0cfa5614f9 100644 --- a/modules/ticket/front/summary/index.js +++ b/modules/ticket/front/summary/index.js @@ -21,7 +21,7 @@ class Controller { } get formattedAddress() { - if (!this.summary) return; + if (!this.summary) return ''; let address = this.summary.address; let province = address.province ? `(${address.province.name})` : ''; diff --git a/modules/travel/back/methods/travel-thermograph/allowedContentTypes.js b/modules/travel/back/methods/travel-thermograph/allowedContentTypes.js new file mode 100644 index 0000000000..2f5183f926 --- /dev/null +++ b/modules/travel/back/methods/travel-thermograph/allowedContentTypes.js @@ -0,0 +1,23 @@ +module.exports = Self => { + Self.remoteMethodCtx('allowedContentTypes', { + description: 'Returns a list of allowed contentTypes', + accessType: 'READ', + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/allowedContentTypes`, + verb: 'GET' + } + }); + + Self.allowedContentTypes = async() => { + const storageConnector = Self.app.dataSources.storage.connector; + const allowedContentTypes = storageConnector.allowedContentTypes; + const modelAllowedContentTypes = Self.definition.settings.allowedContentTypes; + + return modelAllowedContentTypes || allowedContentTypes; + }; +}; + diff --git a/modules/travel/back/methods/travel/createThermograph.js b/modules/travel/back/methods/travel/createThermograph.js new file mode 100644 index 0000000000..cbf0678d1b --- /dev/null +++ b/modules/travel/back/methods/travel/createThermograph.js @@ -0,0 +1,84 @@ +const UserError = require('vn-loopback/util/user-error'); + +module.exports = Self => { + Self.remoteMethodCtx('createThermograph', { + description: 'Upload and attach a document', + accessType: 'WRITE', + accepts: [{ + arg: 'id', + type: 'Number', + description: 'The travel id', + http: {source: 'path'} + }, { + arg: 'thermographId', + type: 'String', + description: 'The thermograph id', + required: true + }, { + arg: 'warehouseId', + type: 'Number', + description: 'The warehouse id', + required: true + }, { + arg: 'companyId', + type: 'Number', + description: 'The company id', + required: true + }, { + arg: 'dmsTypeId', + type: 'Number', + description: 'The dms type id', + required: true + }, { + arg: 'reference', + type: 'String', + required: true + }, { + arg: 'description', + type: 'String', + required: true + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/:id/createThermograph`, + verb: 'POST' + } + }); + + Self.createThermograph = async(ctx, id, thermographId) => { + const models = Self.app.models; + const tx = await Self.beginTransaction({}); + + try { + const options = {transaction: tx}; + + const travelThermograph = await models.TravelThermograph.findOne({ + where: { + thermographFk: thermographId, + travelFk: null + } + }, options); + + if (!travelThermograph) + throw new UserError('No valid travel thermograph found'); + + const uploadedFiles = await models.Dms.uploadFile(ctx, options); + const firstDms = uploadedFiles[0]; + + await travelThermograph.updateAttributes({ + dmsFk: firstDms.id, + travelFk: id + }, options); + + await tx.commit(); + + return travelThermograph; + } catch (err) { + await tx.rollback(); + throw err; + } + }; +}; diff --git a/modules/travel/back/methods/travel/deleteThermograph.js b/modules/travel/back/methods/travel/deleteThermograph.js new file mode 100644 index 0000000000..ba541c560c --- /dev/null +++ b/modules/travel/back/methods/travel/deleteThermograph.js @@ -0,0 +1,53 @@ + +module.exports = Self => { + Self.remoteMethodCtx('deleteThermograph', { + description: 'Deletes a travel thermograph', + accessType: 'WRITE', + accepts: { + arg: 'id', + type: 'Number', + description: 'The thermograph id', + required: true + }, + returns: { + type: 'object', + root: true + }, + http: { + path: '/deleteThermograph', + verb: 'DELETE' + } + }); + + Self.deleteThermograph = async(ctx, id) => { + const models = Self.app.models; + const userId = ctx.req.accessToken.userId; + const travelThermograph = await models.TravelThermograph.findById(id); + + await models.Dms.removeFile(ctx, travelThermograph.dmsFk); + await Self.rawSql(` + UPDATE travelThermograph + SET travelFk = NULL, dmsFk = NULL + WHERE id = ?`, [id]); + + const oldInstance = { + travelFk: travelThermograph.travelFk, + dmsFk: travelThermograph.dmsFk + }; + + await models.TravelLog.create({ + originFk: travelThermograph.travelFk, + userFk: userId, + action: 'delete', + changedModel: 'TravelThermograph', + changedModelId: id, + oldInstance: oldInstance, + newInstance: {} + }); + + travelThermograph.travelFk = null; + travelThermograph.dmsFk = null; + + return travelThermograph; + }; +}; diff --git a/modules/travel/back/methods/travel/specs/createThermograph.spec.js b/modules/travel/back/methods/travel/specs/createThermograph.spec.js new file mode 100644 index 0000000000..b85dcca044 --- /dev/null +++ b/modules/travel/back/methods/travel/specs/createThermograph.spec.js @@ -0,0 +1,50 @@ +const app = require('vn-loopback/server/server'); + +describe('Travel createThermograph()', () => { + const models = app.models; + const travelId = 3; + const currentUserId = 102; + const thermographId = '138350-0'; + const ctx = {req: {accessToken: {userId: currentUserId}}, args: {dmsTypeId: 1}}; + let travelThermographBefore; + + afterAll(async done => { + await app.models.TravelThermograph.rawSql(` + UPDATE travelThermograph + SET travelFk = NULL, dmsFk = NULL + WHERE id = ?`, [travelThermographBefore.id]); + + done(); + }); + + it(`should set the travelFk and dmsFk properties to the travel thermograph`, async() => { + spyOn(app.models.Dms, 'uploadFile').and.returnValue([{id: 5}]); + + travelThermographBefore = await models.TravelThermograph.findOne({ + where: { + thermographFk: thermographId, + travelFk: null + } + }); + + await models.Travel.createThermograph(ctx, travelId, thermographId); + + const travelThermographAfter = await models.TravelThermograph.findOne({ + where: { + thermographFk: thermographId, + travelFk: travelId + } + }); + + expect(app.models.Dms.uploadFile).toHaveBeenCalledWith(ctx, jasmine.any(Object)); + + expect(travelThermographBefore).toBeDefined(); + expect(travelThermographBefore.thermographFk).toEqual(thermographId); + expect(travelThermographBefore.travelFk).toBeNull(); + expect(travelThermographAfter).toBeDefined(); + + expect(travelThermographAfter.thermographFk).toEqual(thermographId); + expect(travelThermographAfter.travelFk).toEqual(travelId); + expect(travelThermographAfter.dmsFk).toEqual(5); + }); +}); diff --git a/modules/travel/back/methods/travel/specs/deleteThermograph.spec.js b/modules/travel/back/methods/travel/specs/deleteThermograph.spec.js new file mode 100644 index 0000000000..843fa046c8 --- /dev/null +++ b/modules/travel/back/methods/travel/specs/deleteThermograph.spec.js @@ -0,0 +1,56 @@ +const app = require('vn-loopback/server/server'); + +describe('Travel deleteThermograph()', () => { + const models = app.models; + const travelId = 1; + const currentUserId = 102; + const thermographId = 'TZ1905012010'; + const travelThermographId = 4; + const dmsId = 5; + const ctx = {req: {accessToken: {userId: currentUserId}}}; + let travelThermographBefore; + + afterAll(async done => { + await app.models.TravelThermograph.rawSql(` + UPDATE travelThermograph + SET travelFk = ?, dmsFk = ? + WHERE id = ?`, [ + travelThermographBefore.travelFk, + travelThermographBefore.dmsFk, + travelThermographBefore.id + ]); + + done(); + }); + + it(`should set the travelFk and dmsFk properties to null for travel thermograph removal`, async() => { + spyOn(app.models.Dms, 'removeFile').and.returnValue([{id: 5}]); + + travelThermographBefore = await models.TravelThermograph.findOne({ + where: { + thermographFk: thermographId, + travelFk: travelId + } + }); + + await models.Travel.deleteThermograph(ctx, travelThermographId); + + const travelThermographAfter = await models.TravelThermograph.findOne({ + where: { + thermographFk: thermographId, + travelFk: null + } + }); + + expect(app.models.Dms.removeFile).toHaveBeenCalledWith(ctx, dmsId); + + expect(travelThermographBefore).toBeDefined(); + expect(travelThermographBefore.thermographFk).toEqual(thermographId); + expect(travelThermographBefore.travelFk).toEqual(travelId); + expect(travelThermographBefore.dmsFk).toEqual(5); + + expect(travelThermographAfter).toBeDefined(); + expect(travelThermographAfter.thermographFk).toEqual(thermographId); + expect(travelThermographAfter.travelFk).toBeNull(); + }); +}); diff --git a/modules/travel/back/model-config.json b/modules/travel/back/model-config.json index dfd39f7220..03307bd459 100644 --- a/modules/travel/back/model-config.json +++ b/modules/travel/back/model-config.json @@ -1,8 +1,6 @@ { "Travel": { "dataSource": "vn" - },"Entry": { - "dataSource": "vn" },"TravelLog": { "dataSource": "vn" },"Currency": { diff --git a/modules/travel/back/models/currency.json b/modules/travel/back/models/currency.json index 036da89f16..9ee7640b25 100644 --- a/modules/travel/back/models/currency.json +++ b/modules/travel/back/models/currency.json @@ -21,5 +21,13 @@ "ratio": { "type": "Number" } - } + }, + "acls": [ + { + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + } + ] } diff --git a/modules/travel/back/models/travel-log.json b/modules/travel/back/models/travel-log.json index d218211278..d53be88f1c 100644 --- a/modules/travel/back/models/travel-log.json +++ b/modules/travel/back/models/travel-log.json @@ -36,7 +36,7 @@ "type": "Date" }, "changedModelId": { - "type": "Number" + "type": "String" }, "changedModelValue": { "type": "String" diff --git a/modules/travel/back/models/travel-thermograph.js b/modules/travel/back/models/travel-thermograph.js new file mode 100644 index 0000000000..0d70edd7e6 --- /dev/null +++ b/modules/travel/back/models/travel-thermograph.js @@ -0,0 +1,4 @@ +module.exports = Self => { + require('../methods/travel-thermograph/allowedContentTypes')(Self); +}; + diff --git a/modules/travel/back/models/travel-thermograph.json b/modules/travel/back/models/travel-thermograph.json index 31fe1b6d63..b8f7fa41a1 100644 --- a/modules/travel/back/models/travel-thermograph.json +++ b/modules/travel/back/models/travel-thermograph.json @@ -1,21 +1,24 @@ { "name": "TravelThermograph", - "base": "VnModel", + "base": "Loggable", + "log": { + "model":"TravelLog", + "relation": "travel", + "showField": "ref" + }, "options": { "mysql": { "table": "travelThermograph" } }, "properties": { - "thermographFk": { - "type": "String", - "id": 1, - "description": "Identifier" + "id": { + "type": "Number", + "description": "Identifier", + "id": true }, "created": { - "type": "Date", - "id": 2, - "description": "Identifier" + "type": "Date" }, "temperature": { "type": "String" diff --git a/modules/travel/back/models/travel.js b/modules/travel/back/models/travel.js index 5fa55a366c..895de7af19 100644 --- a/modules/travel/back/models/travel.js +++ b/modules/travel/back/models/travel.js @@ -2,4 +2,6 @@ module.exports = Self => { require('../methods/travel/getTravel')(Self); require('../methods/travel/getEntries')(Self); require('../methods/travel/filter')(Self); + require('../methods/travel/createThermograph')(Self); + require('../methods/travel/deleteThermograph')(Self); }; diff --git a/modules/travel/back/models/travel.json b/modules/travel/back/models/travel.json index b4f1545255..0eafe40102 100644 --- a/modules/travel/back/models/travel.json +++ b/modules/travel/back/models/travel.json @@ -2,7 +2,8 @@ "name": "Travel", "base": "Loggable", "log": { - "model":"TravelLog" + "model":"TravelLog", + "showField": "ref" }, "options": { "mysql": { diff --git a/modules/travel/front/index.js b/modules/travel/front/index.js index 02bbb997b5..1f5346e987 100644 --- a/modules/travel/front/index.js +++ b/modules/travel/front/index.js @@ -9,3 +9,6 @@ import './summary'; import './basic-data'; import './log'; import './create'; +import './thermograph/index/'; +import './thermograph/create/'; + diff --git a/modules/travel/front/locale/es.yml b/modules/travel/front/locale/es.yml index 0986729f87..931f79ab86 100644 --- a/modules/travel/front/locale/es.yml +++ b/modules/travel/front/locale/es.yml @@ -15,4 +15,5 @@ Search travels by id: Buscar envíos por identificador New travel: Nuevo envío # Sections Travels: Envíos -Log: Historial \ No newline at end of file +Log: Historial +Thermographs: Termógrafos \ No newline at end of file diff --git a/modules/travel/front/routes.json b/modules/travel/front/routes.json index d9b5208161..fcbe5b92f4 100644 --- a/modules/travel/front/routes.json +++ b/modules/travel/front/routes.json @@ -10,7 +10,8 @@ ], "card": [ {"state": "travel.card.basicData", "icon": "settings"}, - {"state": "travel.card.log", "icon": "history"} + {"state": "travel.card.log", "icon": "history"}, + {"state": "travel.card.thermograph.index", "icon": "icon-thermometer"} ] }, "routes": [ @@ -57,6 +58,29 @@ "state": "travel.create", "component": "vn-travel-create", "description": "New travel" + }, { + "url": "/thermograph", + "state": "travel.card.thermograph", + "abstract": true, + "component": "ui-view" + }, { + "url" : "/index", + "state": "travel.card.thermograph.index", + "component": "vn-travel-thermograph-index", + "description": "Thermographs", + "params": { + "travel": "$ctrl.travel" + }, + "acl": ["buyer"] + }, { + "url" : "/create", + "state": "travel.card.thermograph.create", + "component": "vn-travel-thermograph-create", + "description": "Add thermograph", + "params": { + "travel": "$ctrl.travel" + }, + "acl": ["buyer"] } ] } \ No newline at end of file diff --git a/modules/travel/front/summary/index.html b/modules/travel/front/summary/index.html index 51b73ac06e..5397c72ca2 100644 --- a/modules/travel/front/summary/index.html +++ b/modules/travel/front/summary/index.html @@ -107,6 +107,29 @@ + +

Thermographs

+ + + + Code + Temperature + State + Destination + Created + + + + + {{thermograph.thermographFk}} + {{thermograph.temperature}} + {{thermograph.result}} + {{thermograph.warehouse.name}} + {{thermograph.created | date: 'dd/MM/yyyy'}} + + + +
{ + this.travelThermographs = res.data; + }); + } + total(field) { let total = 0; @@ -43,7 +66,7 @@ class Controller { } } -Controller.$inject = ['$scope', '$http']; +Controller.$inject = ['$element', '$scope', '$httpParamSerializer']; ngModule.component('vnTravelSummary', { template: require('./index.html'), diff --git a/modules/travel/front/summary/index.spec.js b/modules/travel/front/summary/index.spec.js index ec5beb053f..5411d8a0d3 100644 --- a/modules/travel/front/summary/index.spec.js +++ b/modules/travel/front/summary/index.spec.js @@ -3,15 +3,20 @@ import './index'; describe('component vnTravelSummary', () => { let controller; let $httpBackend; - + let $scope; + let $element; + let $httpParamSerializer; beforeEach(angular.mock.module('travel', $translateProvider => { $translateProvider.translations('en', {}); })); - beforeEach(angular.mock.inject(($componentController, _$httpBackend_) => { + beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => { $httpBackend = _$httpBackend_; - controller = $componentController('vnTravelSummary'); + $httpParamSerializer = _$httpParamSerializer_; + $scope = $rootScope.$new(); + $element = angular.element(``); + controller = $componentController('vnTravelSummary', {$element, $scope}); })); describe('travel setter/getter', () => { @@ -24,12 +29,14 @@ describe('component vnTravelSummary', () => { it('should return the travel and then call both getTravel() and getEntries()', () => { spyOn(controller, 'getTravel'); spyOn(controller, 'getEntries'); + spyOn(controller, 'getThermographs'); controller.travel = {id: 99}; expect(controller._travel.id).toEqual(99); expect(controller.getTravel).toHaveBeenCalledWith(); expect(controller.getEntries).toHaveBeenCalledWith(); + expect(controller.getThermographs).toHaveBeenCalledWith(); }); }); @@ -59,6 +66,32 @@ describe('component vnTravelSummary', () => { }); }); + describe('getThermographs()', () => { + it('should call the getThermographs method to get the thermographs', () => { + controller._travel = {id: 2}; + const params = { + filter: { + include: { + relation: 'warehouse', + scope: { + fields: ['id', 'name'] + } + }, + where: { + travelFk: controller._travel.id + } + } + }; + const serializedParams = $httpParamSerializer(params); + const query = `TravelThermographs?${serializedParams}`; + $httpBackend.expectGET(query).respond('I am the thermographs'); + controller.getThermographs(); + $httpBackend.flush(); + + expect(controller.travelThermographs).toEqual('I am the thermographs'); + }); + }); + describe('total()', () => { it('should calculate the total amount of a given property for every row', () => { controller.entries = [ diff --git a/modules/travel/front/thermograph/create/index.html b/modules/travel/front/thermograph/create/index.html new file mode 100644 index 0000000000..02ef542640 --- /dev/null +++ b/modules/travel/front/thermograph/create/index.html @@ -0,0 +1,79 @@ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/modules/travel/front/thermograph/create/index.js b/modules/travel/front/thermograph/create/index.js new file mode 100644 index 0000000000..8e10aca0fc --- /dev/null +++ b/modules/travel/front/thermograph/create/index.js @@ -0,0 +1,97 @@ +import ngModule from '../../module'; + +class Controller { + constructor($scope, $http, $state, $translate, vnApp, vnConfig) { + this.$ = $scope; + this.$http = $http; + this.$state = $state; + this.$translate = $translate; + this.vnApp = vnApp; + this.vnConfig = vnConfig; + this.dms = {files: []}; + } + + get travel() { + return this._travel; + } + + set travel(value) { + this._travel = value; + + if (value) { + this.setDefaultParams(); + this.getAllowedContentTypes(); + } + } + + getAllowedContentTypes() { + this.$http.get('TravelThermographs/allowedContentTypes').then(res => { + const contentTypes = res.data.join(', '); + this.allowedContentTypes = contentTypes; + }); + } + + get contentTypesInfo() { + return this.$translate.instant('ContentTypesInfo', { + allowedContentTypes: this.allowedContentTypes + }); + } + + setDefaultParams() { + const params = {filter: { + where: {code: 'miscellaneous'} + }}; + this.$http.get('DmsTypes/findOne', {params}).then(res => { + const dmsTypeId = res.data && res.data.id; + const companyId = this.vnConfig.companyFk; + const warehouseId = this.vnConfig.warehouseFk; + const defaultParams = { + reference: this.travel.id, + warehouseId: warehouseId, + companyId: companyId, + dmsTypeId: dmsTypeId, + description: this.$translate.instant('FileDescription', { + travelId: this.travel.id + }).toUpperCase() + }; + + this.dms = Object.assign(this.dms, defaultParams); + }); + } + + onSubmit() { + const query = `Travels/${this.travel.id}/createThermograph`; + const options = { + method: 'POST', + url: query, + params: this.dms, + headers: { + 'Content-Type': undefined + }, + transformRequest: files => { + const formData = new FormData(); + + for (let i = 0; i < files.length; i++) + formData.append(files[i].name, files[i]); + + return formData; + }, + data: this.dms.files + }; + this.$http(options).then(res => { + this.vnApp.showSuccess(this.$translate.instant('Data saved!')); + this.$.watcher.updateOriginalData(); + this.$state.go('travel.card.thermograph.index'); + }); + } +} + +Controller.$inject = ['$scope', '$http', '$state', '$translate', 'vnApp', 'vnConfig']; + +ngModule.component('vnTravelThermographCreate', { + template: require('./index.html'), + controller: Controller, + bindings: { + travel: '<' + } +}); diff --git a/modules/travel/front/thermograph/create/index.spec.js b/modules/travel/front/thermograph/create/index.spec.js new file mode 100644 index 0000000000..bf5b8bec5c --- /dev/null +++ b/modules/travel/front/thermograph/create/index.spec.js @@ -0,0 +1,68 @@ +import './index'; + +describe('Ticket', () => { + describe('Component vnTravelThermographCreate', () => { + let controller; + let $scope; + let $httpBackend; + let $httpParamSerializer; + const travelId = 3; + const dmsTypeId = 5; + + beforeEach(ngModule('travel')); + + beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => { + $scope = $rootScope.$new(); + $httpBackend = _$httpBackend_; + $httpParamSerializer = _$httpParamSerializer_; + controller = $componentController('vnTravelThermographCreate', {$scope}); + controller._travel = { + id: travelId + }; + })); + + describe('travel() setter', () => { + it('should set the travel data and then call setDefaultParams() and getAllowedContentTypes()', () => { + spyOn(controller, 'setDefaultParams'); + spyOn(controller, 'getAllowedContentTypes'); + controller.travel = { + id: travelId + }; + + expect(controller.travel).toBeDefined(); + expect(controller.setDefaultParams).toHaveBeenCalledWith(); + expect(controller.getAllowedContentTypes).toHaveBeenCalledWith(); + }); + }); + + describe('setDefaultParams()', () => { + it('should perform a GET query and define the dms property on controller', () => { + const params = {filter: { + where: {code: 'miscellaneous'} + }}; + let serializedParams = $httpParamSerializer(params); + $httpBackend.when('GET', `DmsTypes/findOne?${serializedParams}`).respond({id: dmsTypeId, code: 'miscellaneous'}); + $httpBackend.expect('GET', `DmsTypes/findOne?${serializedParams}`); + controller.setDefaultParams(); + $httpBackend.flush(); + + expect(controller.dms).toBeDefined(); + expect(controller.dms.reference).toEqual(travelId); + expect(controller.dms.dmsTypeId).toEqual(dmsTypeId); + }); + }); + + describe('getAllowedContentTypes()', () => { + it('should make an HTTP GET request to get the allowed content types', () => { + const expectedResponse = ['application/pdf', 'image/png', 'image/jpg']; + $httpBackend.when('GET', `TravelThermographs/allowedContentTypes`).respond(expectedResponse); + $httpBackend.expect('GET', `TravelThermographs/allowedContentTypes`); + controller.getAllowedContentTypes(); + $httpBackend.flush(); + + expect(controller.allowedContentTypes).toBeDefined(); + expect(controller.allowedContentTypes).toEqual('application/pdf, image/png, image/jpg'); + }); + }); + }); +}); diff --git a/modules/travel/front/thermograph/index/index.html b/modules/travel/front/thermograph/index/index.html new file mode 100644 index 0000000000..ca9ebcaea7 --- /dev/null +++ b/modules/travel/front/thermograph/index/index.html @@ -0,0 +1,67 @@ + + + +
+ + + + + Code + Temperature + State + Destination + Created + + + + + + {{thermograph.thermographFk}} + {{thermograph.temperature}} + {{thermograph.result}} + {{thermograph.warehouse.name}} + {{thermograph.created | date: 'dd/MM/yyyy'}} + + + + + + + + + + + + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/modules/travel/front/thermograph/index/index.js b/modules/travel/front/thermograph/index/index.js new file mode 100644 index 0000000000..48487eb7c5 --- /dev/null +++ b/modules/travel/front/thermograph/index/index.js @@ -0,0 +1,47 @@ +import ngModule from '../../module'; +import './style.scss'; +import Component from 'core/lib/component'; + +class Controller extends Component { + constructor($element, $, vnToken) { + super($element, $); + this.accessToken = vnToken.token; + this.filter = { + include: + {relation: 'warehouse', + scope: { + fields: ['id', 'name'] + } + } + }; + } + + showDeleteConfirm(index) { + this.thermographIndex = index; + this.$.confirm.show(); + } + + deleteThermograph() { + const data = this.travelThermographs; + const thermographId = data[this.thermographIndex].id; + const query = `Travels/deleteThermograph?id=${thermographId}`; + this.$http.delete(query).then(() => { + this.vnApp.showSuccess(this.$translate.instant('Thermograph deleted')); + this.$.model.remove(this.thermographIndex); + this.thermographIndex = null; + }); + } +} + +Controller.$inject = ['$element', '$scope', 'vnToken']; + +ngModule.component('vnTravelThermographIndex', { + template: require('./index.html'), + controller: Controller, + require: { + card: '^vnTravelCard' + }, + bindings: { + travel: '<' + } +}); diff --git a/modules/travel/front/thermograph/index/style.scss b/modules/travel/front/thermograph/index/style.scss new file mode 100644 index 0000000000..2c287ed9dd --- /dev/null +++ b/modules/travel/front/thermograph/index/style.scss @@ -0,0 +1,6 @@ +@import "variables"; + +vn-route-tickets form{ + margin: 0 auto; + max-width: $width-lg; +} \ No newline at end of file diff --git a/modules/travel/front/thermograph/locale/es.yml b/modules/travel/front/thermograph/locale/es.yml new file mode 100644 index 0000000000..184e95e738 --- /dev/null +++ b/modules/travel/front/thermograph/locale/es.yml @@ -0,0 +1,17 @@ +Code: Código +Temperature: Temperatura +State: Estado +Destination: Destino +Created: Creado +Remove thermograph: Eliminar termógrafo +Upload file: Subir fichero +Edit file: Editar fichero +Upload: Subir +File: Fichero +FileDescription: Travel id {{travelId}} +ContentTypesInfo: 'Tipos de archivo permitidos: {{allowedContentTypes}}' +Are you sure you want to continue?: ¿Seguro que quieres continuar? +Add thermograph: Añadir termógrafo +Thermograph deleted: Termógrafo eliminado +Thermograph: Termógrafo +Are you sure you want to remove the thermograph?: ¿Seguro que quieres quitar el termógrafo? \ No newline at end of file diff --git a/modules/worker/back/models/department.json b/modules/worker/back/models/department.json index 7de76e0395..d8ec7313a5 100644 --- a/modules/worker/back/models/department.json +++ b/modules/worker/back/models/department.json @@ -25,6 +25,9 @@ }, "sons": { "type": "Number" + }, + "chatName": { + "type": "String" } } } diff --git a/modules/worker/back/models/worker.json b/modules/worker/back/models/worker.json index c5c770fcd4..7456a3caad 100644 --- a/modules/worker/back/models/worker.json +++ b/modules/worker/back/models/worker.json @@ -54,12 +54,6 @@ "type": "hasMany", "model": "WorkerTeamCollegues", "foreignKey": "workerFk" - }, - "phones": { - "type": "hasMany", - "model": "UserPhone", - "foreignKey": "userFk", - "primaryKey": "userFk" } } } \ No newline at end of file diff --git a/modules/worker/front/basic-data/index.html b/modules/worker/front/basic-data/index.html index 1d0d705e71..67439b350e 100644 --- a/modules/worker/front/basic-data/index.html +++ b/modules/worker/front/basic-data/index.html @@ -23,6 +23,14 @@ rule> + + + + diff --git a/modules/worker/front/card/index.js b/modules/worker/front/card/index.js index dd2a244480..14723947e5 100644 --- a/modules/worker/front/card/index.js +++ b/modules/worker/front/card/index.js @@ -28,12 +28,6 @@ class Controller extends ModuleCard { relation: 'department' } } - }, { - relation: 'phones', - scope: { - fields: ['phone'], - order: 'typeFk ASC' - } } ] }; diff --git a/modules/worker/front/descriptor/index.html b/modules/worker/front/descriptor/index.html index 26c2f193ed..d26892bfd9 100644 --- a/modules/worker/front/descriptor/index.html +++ b/modules/worker/front/descriptor/index.html @@ -26,9 +26,8 @@ - + diff --git a/modules/worker/front/index.js b/modules/worker/front/index.js index 775524a3dd..f703e7c213 100644 --- a/modules/worker/front/index.js +++ b/modules/worker/front/index.js @@ -13,7 +13,6 @@ import './department'; import './calendar'; import './time-control'; import './log'; -import './phones'; import './dms/index'; import './dms/create'; import './dms/edit'; diff --git a/modules/worker/front/phones/index.html b/modules/worker/front/phones/index.html deleted file mode 100644 index 95e0366c1b..0000000000 --- a/modules/worker/front/phones/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - -
- - - - - - - - - - - - - - - - - - - -
diff --git a/modules/worker/front/phones/index.js b/modules/worker/front/phones/index.js deleted file mode 100644 index 91d69ac161..0000000000 --- a/modules/worker/front/phones/index.js +++ /dev/null @@ -1,48 +0,0 @@ -import ngModule from '../module'; - -class Controller { - constructor($scope) { - this.$scope = $scope; - } - - get worker() { - return this._worker; - } - - set worker(value) { - this._worker = value; - if (value) - this.setLink(value); - } - - setLink(value) { - this.$scope.$applyAsync(()=> { - this.$scope.model.link = {userFk: value.userFk}; - this.$scope.model.refresh(); - }); - } - - onSubmit() { - this.$scope.watcher.check(); - return this.$scope.model.save().then(() => { - this.$scope.watcher.updateOriginalData(); - this.$scope.watcher.notifySaved(); - this.card.reload(); - }); - } - - add() { - this.$scope.model.insert(); - } -} - -Controller.$inject = ['$scope']; - -ngModule.component('vnWorkerPhones', { - template: require('./index.html'), - controller: Controller, - require: {card: '^vnWorkerCard'}, - bindings: { - worker: '<' - } -}); diff --git a/modules/worker/front/phones/index.spec.js b/modules/worker/front/phones/index.spec.js deleted file mode 100644 index e3f6f9bf5d..0000000000 --- a/modules/worker/front/phones/index.spec.js +++ /dev/null @@ -1,47 +0,0 @@ -import './index'; -import watcher from 'core/mocks/watcher'; - -describe('Component vnWorkerPhones', () => { - let controller; - - beforeEach(ngModule('worker')); - - beforeEach(angular.mock.inject(($componentController, $rootScope) => { - let $scope = $rootScope.$new(); - controller = $componentController('vnWorkerPhones', $scope); - controller.$scope.watcher = watcher; - controller.$scope.model = { - link: 1, - save: () => {} - }; - controller.card = {reload: () => {}}; - })); - - describe('setLink()', () => { - it('set the link in the model and refreshes it', () => { - spyOn(controller.$scope, '$applyAsync'); - let value = {userFk: 106}; - controller.setLink(value); - - expect(controller.$scope.$applyAsync).toHaveBeenCalledWith(jasmine.any(Function)); - }); - }); - - describe('onSubmit()', () => { - it('should call watcher functions, reload the card and save the model', done => { - spyOn(controller.$scope.watcher, 'check'); - spyOn(controller.$scope.model, 'save').and.returnValue(Promise.resolve()); - - spyOn(controller.$scope.watcher, 'updateOriginalData'); - spyOn(controller.$scope.watcher, 'notifySaved'); - spyOn(controller.card, 'reload'); - controller.onSubmit(); - controller.onSubmit().then(() => { - expect(controller.$scope.watcher.updateOriginalData).toHaveBeenCalledWith(); - expect(controller.$scope.watcher.notifySaved).toHaveBeenCalledWith(); - expect(controller.card.reload).toHaveBeenCalledWith(); - done(); - }).catch(done.fail); - }); - }); -}); diff --git a/modules/worker/front/phones/locale/es.yml b/modules/worker/front/phones/locale/es.yml deleted file mode 100644 index 8628f38eee..0000000000 --- a/modules/worker/front/phones/locale/es.yml +++ /dev/null @@ -1,4 +0,0 @@ -Phones: Teléfonos -Type: Tipo -Remove phone: Eliminar teléfono -Add phone: Añadir teléfono \ No newline at end of file diff --git a/modules/worker/front/routes.json b/modules/worker/front/routes.json index 6414c9ed2e..d7eded94b6 100644 --- a/modules/worker/front/routes.json +++ b/modules/worker/front/routes.json @@ -13,7 +13,6 @@ {"state": "worker.card.pbx", "icon": "icon-pbx"}, {"state": "worker.card.calendar", "icon": "icon-calendar"}, {"state": "worker.card.timeControl", "icon": "access_time"}, - {"state": "worker.card.phones", "icon": "contact_phone"}, {"state": "worker.card.dms.index", "icon": "cloud_upload"} ] }, @@ -84,16 +83,6 @@ "description": "Departments", "acl": ["hr"] }, { - "url": "/phones", - "state": "worker.card.phones", - "component": "vn-worker-phones", - "description": "Phones", - "params": { - "worker": "$ctrl.worker" - }, - "acl": ["hr"] - }, - { "url": "/dms", "state": "worker.card.dms", "abstract": true, diff --git a/modules/worker/front/summary/index.html b/modules/worker/front/summary/index.html index de86c1f841..e2c93ea48c 100644 --- a/modules/worker/front/summary/index.html +++ b/modules/worker/front/summary/index.html @@ -12,9 +12,8 @@ - + diff --git a/modules/worker/front/summary/index.js b/modules/worker/front/summary/index.js index f055a0903e..a3fbb34f52 100644 --- a/modules/worker/front/summary/index.js +++ b/modules/worker/front/summary/index.js @@ -50,12 +50,6 @@ class Controller { relation: 'department' } } - }, { - relation: 'phones', - scope: { - fields: ['phone'], - order: 'typeFk ASC' - } } ] }; diff --git a/print/core/filters/date.js b/print/core/filters/date.js index 37b9dd16ff..0988eda755 100644 --- a/print/core/filters/date.js +++ b/print/core/filters/date.js @@ -1,6 +1,6 @@ const Vue = require('vue'); const strftime = require('strftime'); -Vue.filter('date', function(value, specifiers) { +Vue.filter('date', function(value, specifiers = '%d-%m-%Y') { return strftime(specifiers, value); }); diff --git a/print/methods/closure.js b/print/methods/closure.js index 4b25c5abcb..05490609dd 100644 --- a/print/methods/closure.js +++ b/print/methods/closure.js @@ -4,7 +4,7 @@ const smtp = require('../core/smtp'); const config = require('../core/config'); module.exports = app => { - app.get('/api/closure', async function(req, res) { + app.get('/api/closure', async function(request, response) { const failedtickets = []; const tickets = await db.rawSql(` SELECT @@ -59,7 +59,7 @@ module.exports = app => { }); } - res.status(200).json({ + response.status(200).json({ message: 'Closure executed successfully' }); }); diff --git a/print/templates/email/buyer-week-waste/assets/css/import.js b/print/templates/email/buyer-week-waste/assets/css/import.js index b44d6bd371..c742fdf90a 100644 --- a/print/templates/email/buyer-week-waste/assets/css/import.js +++ b/print/templates/email/buyer-week-waste/assets/css/import.js @@ -4,5 +4,6 @@ module.exports = new Stylesheet([ `${appPath}/common/css/spacing.css`, `${appPath}/common/css/misc.css`, `${appPath}/common/css/layout.css`, - `${appPath}/common/css/email.css`]) + `${appPath}/common/css/email.css`, + `${__dirname}/style.css`]) .mergeStyles(); diff --git a/print/templates/email/buyer-week-waste/assets/css/style.css b/print/templates/email/buyer-week-waste/assets/css/style.css new file mode 100644 index 0000000000..5db85befa4 --- /dev/null +++ b/print/templates/email/buyer-week-waste/assets/css/style.css @@ -0,0 +1,5 @@ +.external-link { + border: 2px dashed #8dba25; + border-radius: 3px; + text-align: center +} \ No newline at end of file diff --git a/print/templates/email/buyer-week-waste/buyer-week-waste.html b/print/templates/email/buyer-week-waste/buyer-week-waste.html index 47d162a6f6..b9ebd61755 100644 --- a/print/templates/email/buyer-week-waste/buyer-week-waste.html +++ b/print/templates/email/buyer-week-waste/buyer-week-waste.html @@ -43,14 +43,21 @@ {{waste.buyer}} - {{(waste.percentage / 100) | percentage(4, 4, locale)}} + {{(waste.percentage / 100) | percentage(2, 2, locale)}} {{waste.dwindle | currency('EUR', locale)}} {{waste.total | currency('EUR', locale)}} +

+ +
diff --git a/print/templates/email/buyer-week-waste/locale/es.yml b/print/templates/email/buyer-week-waste/locale/es.yml index 96e49d9ebb..d4220dd917 100644 --- a/print/templates/email/buyer-week-waste/locale/es.yml +++ b/print/templates/email/buyer-week-waste/locale/es.yml @@ -4,5 +4,6 @@ dear: Hola description: A continuación se muestra la merma semanal a fecha de {0}. buyer: Comprador percentage: Porcentaje -weakening: Mermas -total: Total \ No newline at end of file +dwindle: Merma +total: Total +wasteDetailLink: 'Para ver el desglose de mermas haz clic en el siguiente enlace:' \ No newline at end of file diff --git a/print/templates/email/printer-setup/locale/es.yml b/print/templates/email/printer-setup/locale/es.yml index 39568bd1b9..77a3a7299f 100644 --- a/print/templates/email/printer-setup/locale/es.yml +++ b/print/templates/email/printer-setup/locale/es.yml @@ -10,6 +10,8 @@ description: necesitarás el QLabel, el programa para imprimir las cintas. downloadFrom: Puedes descargarlo desde este enlace https://godex.s3-accelerate.amazonaws.com/gGnOPoojkP6vC1lgmrbEqQ.file?v01 + downloadDriver: En este enlace puedes descargar el driver de la impresora https://es.seagullscientific.com/support/downloads/drivers/godex/download/ sections: QLabel: title: Utilización de QLabel diff --git a/print/templates/email/printer-setup/printer-setup.html b/print/templates/email/printer-setup/printer-setup.html index 12dcf48773..6b295bd8f2 100644 --- a/print/templates/email/printer-setup/printer-setup.html +++ b/print/templates/email/printer-setup/printer-setup.html @@ -28,6 +28,7 @@

{{$t('description.instructions')}}

+

{{$t('sections.QLabel.title')}}

{{$t('sections.QLabel.description')}}:

diff --git a/print/templates/reports/delivery-note/delivery-note.html b/print/templates/reports/delivery-note/delivery-note.html index 1bad225de3..77f214c07b 100644 --- a/print/templates/reports/delivery-note/delivery-note.html +++ b/print/templates/reports/delivery-note/delivery-note.html @@ -231,7 +231,7 @@
{{$t('digitalSignature')}}
-
{{signature.created | date}}
+
{{signature.created | date('%d-%m-%Y')}}