refs #6915 test_master24_8 #2067

Merged
alexm merged 561 commits from test_master24_8 into master 2024-02-22 07:31:34 +00:00
103 changed files with 1368 additions and 1088 deletions
Showing only changes of commit 6691155217 - Show all commits

2
Jenkinsfile vendored
View File

@ -103,7 +103,7 @@ pipeline {
NODE_ENV = '' NODE_ENV = ''
} }
steps { steps {
sh 'npm run test:back:ci' sh 'node back/tests.js --ci --junit --network jenkins'
} }
post { post {
always { always {

View File

@ -49,7 +49,6 @@ module.exports = Self => {
Self.uploadFile = async(ctx, options) => { Self.uploadFile = async(ctx, options) => {
const models = Self.app.models; const models = Self.app.models;
const TempContainer = models.TempContainer; const TempContainer = models.TempContainer;
const DmsContainer = models.DmsContainer;
const fileOptions = {}; const fileOptions = {};
const args = ctx.args; const args = ctx.args;
@ -79,19 +78,21 @@ module.exports = Self => {
const addedDms = []; const addedDms = [];
for (const uploadedFile of files) { for (const uploadedFile of files) {
const newDms = await createDms(ctx, uploadedFile, myOptions);
const pathHash = DmsContainer.getHash(newDms.id);
const file = await TempContainer.getFile(tempContainer.name, uploadedFile.name); const file = await TempContainer.getFile(tempContainer.name, uploadedFile.name);
srcFile = path.join(file.client.root, file.container, file.name); srcFile = path.join(file.client.root, file.container, file.name);
const dmsContainer = await DmsContainer.container(pathHash); const data = {
const dstFile = path.join(dmsContainer.client.root, pathHash, newDms.file); workerFk: ctx.req.accessToken.userId,
dmsTypeFk: args.dmsTypeId,
await fs.move(srcFile, dstFile, { companyFk: args.companyId,
overwrite: true warehouseFk: args.warehouseId,
}); reference: args.reference,
description: args.description,
contentType: args.contentType,
hasFile: args.hasFile
};
const extension = await models.DmsContainer.getFileExtension(uploadedFile.name);
const newDms = await Self.createFromFile(data, extension, srcFile, myOptions);
addedDms.push(newDms); addedDms.push(newDms);
} }
@ -107,27 +108,4 @@ module.exports = Self => {
throw e; throw e;
} }
}; };
async function createDms(ctx, file, myOptions) {
const models = Self.app.models;
const myUserId = ctx.req.accessToken.userId;
const args = ctx.args;
const newDms = await Self.create({
workerFk: myUserId,
dmsTypeFk: args.dmsTypeId,
companyFk: args.companyId,
warehouseFk: args.warehouseId,
reference: args.reference,
description: args.description,
contentType: file.type,
hasFile: args.hasFile
}, myOptions);
let fileName = file.name;
const extension = models.DmsContainer.getFileExtension(fileName);
fileName = `${newDms.id}.${extension}`;
return newDms.updateAttribute('file', fileName, myOptions);
}
}; };

View File

@ -87,6 +87,6 @@ module.exports = Self => {
await fs.access(file.path); await fs.access(file.path);
const stream = fs.createReadStream(file.path); const stream = fs.createReadStream(file.path);
return [stream, file.contentType, `filename="${file.name}"`]; return [stream, file.contentType, `filename="${fileName}"`];
}; };
}; };

View File

@ -1,4 +1,6 @@
const UserError = require('vn-loopback/util/user-error'); const UserError = require('vn-loopback/util/user-error');
const fs = require('fs-extra');
const path = require('path');
module.exports = Self => { module.exports = Self => {
require('../methods/dms/downloadFile')(Self); require('../methods/dms/downloadFile')(Self);
@ -35,4 +37,32 @@ module.exports = Self => {
return [stream, dms.contentType, `filename="${dms.file}"`]; return [stream, dms.contentType, `filename="${dms.file}"`];
}; };
Self.getPath = async function(dms) {
const models = Self.app.models;
const pathHash = await models.DmsContainer.getHash(dms.id);
const dmsContainer = await models.DmsContainer.container(pathHash);
const dstFile = path.join(dmsContainer.client.root, pathHash, dms.file);
return dstFile;
};
Self.createWithExtension = async function(data, extension, options) {
const newDms = await Self.create(data, options);
return newDms.updateAttribute('file', `${newDms.id}.${extension}`, options);
};
Self.createFromFile = async function(data, extension, srcFile, options) {
const dms = await Self.createWithExtension(data, extension, options);
const dstFile = await Self.getPath(dms);
await fs.move(srcFile, dstFile, {overwrite: true});
return dms;
};
Self.createFromStream = async function(data, extension, stream, options) {
const dms = await Self.createWithExtension(data, extension, options);
const dstFile = await Self.getPath(dms);
const writeStream = await fs.createWriteStream(dstFile);
await stream.pipe(writeStream);
return dms;
};
}; };

View File

@ -17,7 +17,8 @@ const opts = getopts(process.argv.slice(2), {
let server; let server;
const PARALLEL = false; const PARALLEL = false;
const TIMEOUT = 900000; const SETUP_TIMEOUT = 15 * 60 * 1000;
const SPEC_TIMEOUT = 30 * 1000;
process.on('exit', teardown); process.on('exit', teardown);
process.on('uncaughtException', onError); process.on('uncaughtException', onError);
@ -74,9 +75,9 @@ async function test() {
let runner; let runner;
const config = { const config = {
globalSetup: setup, globalSetup: setup,
globalSetupTimeout: TIMEOUT, globalSetupTimeout: SETUP_TIMEOUT,
globalTeardown: teardown, globalTeardown: teardown,
globalTeardownTimeout: TIMEOUT, globalTeardownTimeout: SETUP_TIMEOUT,
spec_dir: '.', spec_dir: '.',
spec_files: [ spec_files: [
'back/**/*[sS]pec.js', 'back/**/*[sS]pec.js',
@ -111,10 +112,11 @@ async function test() {
runner.addReporter(new JunitReporter.JUnitXmlReporter()); runner.addReporter(new JunitReporter.JUnitXmlReporter());
} }
if (opts.ci) if (opts.ci)
runner.jasmine.DEFAULT_TIMEOUT_INTERVAL = TIMEOUT; runner.jasmine.DEFAULT_TIMEOUT_INTERVAL = SPEC_TIMEOUT;
// runner.loadConfigFile('back/jasmine.json'); // runner.loadConfigFile('back/jasmine.json');
runner.loadConfig(config); runner.loadConfig(config);
process.env.SPEC_IS_RUNNING = true;
await runner.execute(); await runner.execute();
} }

View File

@ -66,9 +66,6 @@ UPDATE vn.supplier
SET isTrucker = 1 SET isTrucker = 1
WHERE id = 2; WHERE id = 2;
INSERT INTO vn.cmr (id, truckPlate, observations, senderInstruccions, paymentInstruccions, specialAgreements, created, companyFk, addressToFk, addressFromFk, supplierFk, packagesList, merchandiseDetail, state, landed, ead)
VALUES (2, NULL, NULL, NULL, 'Carriage paid', NULL, '2022-06-27 13:31:11.000', 442, 3, 2, 2, NULL, NULL, NULL, NULL, NULL);
-- XXX: tpv -- XXX: tpv
UPDATE `vn`.`claimRatio` SET `claimAmount` = '10' WHERE (`clientFk` = '1101'); UPDATE `vn`.`claimRatio` SET `claimAmount` = '10' WHERE (`clientFk` = '1101');

View File

@ -725,40 +725,40 @@ INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agen
(6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3), (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3),
(7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5); (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5);
INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`) INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`)
VALUES VALUES
(1 , 3, 1, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Bat cave', 121, NULL, 0, 1, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1), (1 , 3, 1, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Bat cave', 121, NULL, 0, 1, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 1),
(2 , 1, 1, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Bat cave', 1, NULL, 0, 1, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2), (2 , 1, 1, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Bat cave', 1, NULL, 0, 1, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 2, 2),
(3 , 1, 7, 1, 6, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -2 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 3, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), NULL), (3 , 1, 7, 1, 6, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -2 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 3, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), NULL, 3),
(4 , 3, 2, 1, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -3 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -3 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 9, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -3 MONTH), NULL), (4 , 3, 2, 1, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -3 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -3 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 9, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -3 MONTH), NULL, NULL),
(5 , 3, 3, 3, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL -4 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -4 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 10, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -4 MONTH), NULL), (5 , 3, 3, 3, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL -4 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -4 MONTH), INTERVAL +1 DAY), 1104, 'Stark tower', 124, NULL, 0, 10, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -4 MONTH), NULL, NULL),
(6 , 1, 3, 3, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Mountain Drive Gotham', 1, NULL, 0, 10, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), NULL), (6 , 1, 3, 3, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL -1 MONTH), INTERVAL +1 DAY), 1101, 'Mountain Drive Gotham', 1, NULL, 0, 10, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), NULL, NULL),
(7 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'Mountain Drive Gotham', 1, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (7 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'Mountain Drive Gotham', 1, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(8 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'Bat cave', 121, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (8 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'Bat cave', 121, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(9 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1104, 'Stark tower', 124, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (9 , NULL, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1104, 'Stark tower', 124, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(10, 1, 1, 5, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1102, 'Ingram Street', 2, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (10, 1, 1, 5, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1102, 'Ingram Street', 2, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(11, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1102, 'NY roofs', 122, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (11, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1102, 'NY roofs', 122, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(12, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (12, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(13, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (13, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(14, 1, 2, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1104, 'Malibu Point', 4, NULL, 0, 9, 5, 1, util.VN_CURDATE(), NULL), (14, 1, 2, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1104, 'Malibu Point', 4, NULL, 0, 9, 5, 1, util.VN_CURDATE(), NULL, NULL),
(15, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1105, 'An incredibly long alias for testing purposes', 125, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (15, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1105, 'An incredibly long alias for testing purposes', 125, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(16, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1106, 'Many Places', 126, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (16, 1, 7, 1, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1106, 'Many Places', 126, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(17, 1, 7, 2, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1106, 'Many Places', 126, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL), (17, 1, 7, 2, 6, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1106, 'Many Places', 126, NULL, 0, 3, 5, 1, util.VN_CURDATE(), NULL, NULL),
(18, 1, 4, 4, 4, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1108, 'Cerebro', 128, NULL, 0, 12, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +12 HOUR), NULL), (18, 1, 4, 4, 4, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1108, 'Cerebro', 128, NULL, 0, 12, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +12 HOUR), NULL, NULL),
(19, 1, 5, 5, NULL, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1109, 'Somewhere in Thailand', 129, NULL, 1, NULL, 5, 1, util.VN_CURDATE(), NULL), (19, 1, 5, 5, NULL, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1109, 'Somewhere in Thailand', 129, NULL, 1, NULL, 5, 1, util.VN_CURDATE(), NULL, NULL),
(20, 1, 5, 5, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Thailand', 129, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL), (20, 1, 5, 5, 3, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Thailand', 129, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL, NULL),
(21, NULL, 5, 5, 5, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Holland', 102, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL), (21, NULL, 5, 5, 5, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Holland', 102, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL, NULL),
(22, NULL, 5, 5, 5, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Japan', 103, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL), (22, NULL, 5, 5, 5, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(util.VN_CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 1109, 'Somewhere in Japan', 103, NULL, 0, 13, 5, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL +1 MONTH), NULL, NULL),
(23, NULL, 8, 1, 7, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'address 21', 121, NULL, 0, 5, 5, 1, util.VN_CURDATE(), NULL), (23, NULL, 8, 1, 7, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1101, 'address 21', 121, NULL, 0, 5, 5, 1, util.VN_CURDATE(), NULL, NULL),
(24 ,NULL, 8, 1, 7, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Bruce Wayne', 1, NULL, 0, 5, 5, 1, util.VN_CURDATE(), NULL), (24 ,NULL, 8, 1, 7, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Bruce Wayne', 1, NULL, 0, 5, 5, 1, util.VN_CURDATE(), NULL, NULL),
(25 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Bruce Wayne', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (25 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Bruce Wayne', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(26 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'An incredibly long alias for testing purposes', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (26 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'An incredibly long alias for testing purposes', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(27 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Wolverine', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (27 ,NULL, 8, 1, NULL, util.VN_CURDATE(), util.VN_CURDATE(), 1101, 'Wolverine', 1, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(28, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (28, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(29, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (29, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(30, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (30, 1, 8, 1, 1, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(31, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL), (31, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL),
(32, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL); (32, 1, 8, 1, 1, DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL + 2 DAY), 1103, 'Phone Box', 123, NULL, 0, 1, 5, 1, util.VN_CURDATE(), NULL, NULL);
INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`) INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`)
VALUES VALUES
@ -2405,7 +2405,7 @@ INSERT INTO `vn`.`dmsType`(`id`, `name`, `readRoleFk`, `writeRoleFk`, `code`)
(14, 'Ticket', 1, 1, 'ticket'), (14, 'Ticket', 1, 1, 'ticket'),
(15, 'Presupuestos', NULL, NULL, 'budgets'), (15, 'Presupuestos', NULL, NULL, 'budgets'),
(16, 'Logistica', NULL, NULL, 'logistics'), (16, 'Logistica', NULL, NULL, 'logistics'),
(17, 'cmr', NULL, NULL, 'cmr'), (17, 'cmr', 1, 1, 'cmr'),
(18, 'dua', NULL, NULL, 'dua'), (18, 'dua', NULL, NULL, 'dua'),
(19, 'inmovilizado', NULL, NULL, 'fixedAssets'), (19, 'inmovilizado', NULL, NULL, 'fixedAssets'),
(20, 'Reclamación', 1, 1, 'claim'); (20, 'Reclamación', 1, 1, 'claim');
@ -3062,3 +3062,8 @@ INSERT INTO `vn`.`clientSms` (`id`, `clientFk`, `smsFk`, `ticketFk`)
(4, 1103, 4, 32), (4, 1103, 4, 32),
(13, 1101, 1, NULL), (13, 1101, 1, NULL),
(14, 1101, 4, 27); (14, 1101, 4, 27);
INSERT INTO `vn`.`cmr` (id,truckPlate,observations,senderInstruccions,paymentInstruccions,specialAgreements,companyFk,addressToFk,addressFromFk,supplierFk,packagesList,merchandiseDetail,state)
VALUES (1,'123456A','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet',442,1,2,1,'Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet'),
(2,'123456N','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet',69,3,4,2,'Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet'),
(3,'123456B','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet',567,5,6,69,'Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet','Lorem ipsum dolor sit amet');

View File

@ -1,16 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `bi`.`nz`(vData DOUBLE)
RETURNS double
DETERMINISTIC
BEGIN
/**
* Devuelve 0, si el parámetro es NULL:
*/
DECLARE vResult DOUBLE;
SET vResult = IFNULL(vData,0);
RETURN vResult;
END$$
DELIMITER ;

View File

@ -42,9 +42,9 @@ BEGIN
CREATE TEMPORARY TABLE maxInvoice CREATE TEMPORARY TABLE maxInvoice
(PRIMARY KEY (Id_Cliente)) (PRIMARY KEY (Id_Cliente))
ENGINE = MEMORY ENGINE = MEMORY
SELECT DISTINCT Id_Cliente, max(Fecha) as maxFecha SELECT DISTINCT clientFk Id_Cliente, max(issued) as maxFecha
FROM vn2008.Facturas FROM vn.invoiceOut
GROUP BY Id_Cliente GROUP BY clientFk
HAVING maxFecha < timestampadd(month,-2,datFEC); HAVING maxFecha < timestampadd(month,-2,datFEC);
WHILE datFEC < util.VN_CURDATE() DO WHILE datFEC < util.VN_CURDATE() DO
@ -53,10 +53,10 @@ BEGIN
SELECT Id_Cliente, datFEC as Fecha, Greuge, Ventas, 0 SELECT Id_Cliente, datFEC as Fecha, Greuge, Ventas, 0
FROM ( FROM (
SELECT Id_Cliente, sum(Importe) as Greuge SELECT clientFk Id_Cliente, sum(amount) as Greuge
FROM vn2008.Greuges FROM vn.greuge
where Fecha <= datFEC where shipped <= datFEC
group by Id_Cliente group by clientFk
) sub ) sub
RIGHT JOIN RIGHT JOIN

View File

@ -11,8 +11,8 @@ BEGIN
-- Reclamaciones demasiado sensibles -- Reclamaciones demasiado sensibles
INSERT INTO vn2008.Greuges(Fecha, Id_Cliente, Comentario, INSERT INTO vn.greuge(shipped, clientFk, description,
Importe, Greuges_type_id,Id_Ticket) amount, greugeTypeFk, ticketFk)
SELECT cm.Fecha SELECT cm.Fecha
, cm.Id_Cliente , cm.Id_Cliente
, concat('Claim ',cm.id,' : ', m.Concepte) , concat('Claim ',cm.id,' : ', m.Concepte)
@ -29,8 +29,8 @@ BEGIN
-- Reclamaciones que pasan a Maná -- Reclamaciones que pasan a Maná
INSERT INTO vn2008.Greuges(Fecha, Id_Cliente, Comentario, INSERT INTO vn.greuge(shipped, clientFk, description,
Importe , Greuges_type_id,Id_Ticket) amount, greugeTypeFk, ticketFk)
SELECT cm.Fecha SELECT cm.Fecha
, cm.Id_Cliente , cm.Id_Cliente
, concat('Claim_mana ',cm.id,' : ', m.Concepte) , concat('Claim_mana ',cm.id,' : ', m.Concepte)
@ -73,12 +73,12 @@ BEGIN
AND s.alert_level >= 3; AND s.alert_level >= 3;
DELETE g.* DELETE g.*
FROM vn2008.Greuges g FROM vn.greuge g
JOIN tmp.ticket_list t ON g.Id_Ticket = t.Id_Ticket JOIN tmp.ticket_list t ON g.ticketFk = t.Id_Ticket
WHERE Greuges_type_id = 2; WHERE g.greugeTypeFk = 2;
INSERT INTO vn2008.Greuges (Id_Cliente,Comentario,Importe,Fecha, INSERT INTO vn.greuge(clientFk, description, amount,shipped,
Greuges_type_id, Id_Ticket) greugeTypeFk, ticketFk)
SELECT Id_Cliente SELECT Id_Cliente
,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2) ,concat('recobro ', m.Id_Ticket), - round(SUM(mc.Valor*Cantidad),2)
AS dif AS dif
@ -130,13 +130,13 @@ BEGIN
-- Calculamos el porcentaje del recobro para añadirlo al precio de venta -- Calculamos el porcentaje del recobro para añadirlo al precio de venta
UPDATE bi.claims_ratio cr UPDATE bi.claims_ratio cr
JOIN ( JOIN (
SELECT Id_Cliente, nz(SUM(Importe)) AS Greuge SELECT clientFk Id_Cliente, IFNULL(SUM(amount), 0) AS Greuge
FROM vn2008.Greuges FROM vn.greuge
WHERE Fecha <= util.VN_CURDATE() WHERE shipped <= util.VN_CURDATE()
GROUP BY Id_Cliente GROUP BY clientFk
) g ON g.Id_Cliente = cr.Id_Cliente ) g ON g.Id_Cliente = cr.Id_Cliente
SET recobro = GREATEST(0,round(nz(Greuge) / SET recobro = GREATEST(0,round(IFNULL(Greuge, 0) /
(nz(Consumo) * vMonthToRefund / 12 ) ,3)); (IFNULL(Consumo, 0) * vMonthToRefund / 12 ) ,3));
-- Protección neonatos -- Protección neonatos
UPDATE bi.claims_ratio cr UPDATE bi.claims_ratio cr

View File

@ -14,8 +14,8 @@ BEGIN
WHERE hasChanged AND date = vDate; WHERE hasChanged AND date = vDate;
DECLARE invoices CURSOR FOR DECLARE invoices CURSOR FOR
SELECT Vencimiento, importe FROM vn2008.Facturas f SELECT dued Vencimiento, amount importe FROM vn.invoiceOut
WHERE f.Fecha >= '2016-01-01' AND f.Id_Cliente = vClient ORDER BY f.Fecha DESC; WHERE issued >= '2016-01-01' AND clientFk = vClient ORDER BY issued DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

View File

@ -19,8 +19,8 @@ BEGIN
FROM FROM
vn.ticket t vn.ticket t
JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk
LEFT JOIN vn2008.expeditions e ON e.ticket_id = t.id LEFT JOIN vn.expedition e ON e.ticketFk = t.id
JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.EsBulto JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk
JOIN vn.zone z ON t.zoneFk = z.id JOIN vn.zone z ON t.zoneFk = z.id
WHERE WHERE
t.shipped between datSTART AND datEND t.shipped between datSTART AND datEND
@ -64,17 +64,17 @@ BEGIN
CREATE TEMPORARY TABLE tmp.dp_aux CREATE TEMPORARY TABLE tmp.dp_aux
(PRIMARY KEY (ticketFk)) (PRIMARY KEY (ticketFk))
ENGINE = MEMORY ENGINE = MEMORY
SELECT dp.ticketFk, sum(Importe) Importe SELECT dp.ticketFk, sum(g.amount) Importe
FROM tmp.dp FROM tmp.dp
JOIN vn2008.Greuges g ON g.Id_Ticket = dp.ticketFk JOIN vn.greuge g ON g.ticketFk = dp.ticketFk
WHERE Greuges_type_id = 1 -- dif_porte WHERE g.greugeTypeFk = 1 -- dif_porte
GROUP BY dp.ticketFk; GROUP BY dp.ticketFk;
UPDATE tmp.dp UPDATE tmp.dp
JOIN tmp.dp_aux USING(ticketFk) JOIN tmp.dp_aux USING(ticketFk)
SET greuge = IFNULL(Importe,0); SET greuge = IFNULL(Importe,0);
INSERT INTO vn2008.Greuges (Id_Cliente,Comentario,Importe,Fecha, Greuges_type_id, Id_Ticket) INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk)
SELECT dp.clientFk SELECT dp.clientFk
, concat('dif_porte ', dp.ticketFk) , concat('dif_porte ', dp.ticketFk)
, round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe , round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe

View File

@ -37,9 +37,9 @@ BEGIN
FROM FROM
vn2008.Clientes c vn2008.Clientes c
LEFT JOIN LEFT JOIN
(SELECT g.Id_Cliente, CAST( SUM(Importe) as DECIMAL(12,2)) AS Greuge (SELECT g.clientFk Id_Cliente, CAST( SUM(g.amount) as DECIMAL(12,2)) AS Greuge
FROM vn2008.Greuges g FROM vn.greuge g
JOIN vn.`client` c ON c.id = g.Id_Cliente JOIN vn.`client` c ON c.id = g.clientFk
LEFT JOIN vn.worker w ON c.salesPersonFk = w.id LEFT JOIN vn.worker w ON c.salesPersonFk = w.id
WHERE (c.salesPersonFk = vWorker OR w.bossFk = vWorker) WHERE (c.salesPersonFk = vWorker OR w.bossFk = vWorker)
GROUP BY Id_Cliente GROUP BY Id_Cliente
@ -98,9 +98,9 @@ BEGIN
GROUP BY c.Id_Cliente) CmLy ON CmLy.Id_Cliente = c.Id_Cliente GROUP BY c.Id_Cliente) CmLy ON CmLy.Id_Cliente = c.Id_Cliente
LEFT JOIN LEFT JOIN
(SELECT c.Id_Cliente, (SELECT c.Id_Cliente,
IF(MAX(Fecha) < DATE_FORMAT(TIMESTAMPADD(MONTH, - 1, vDate), '%Y- %m-01'), TRUE, FALSE) muerto IF(MAX(io.issued) < DATE_FORMAT(TIMESTAMPADD(MONTH, - 1, vDate), '%Y- %m-01'), TRUE, FALSE) muerto
FROM vn2008.Facturas f FROM vn.invoiceOut io
JOIN vn2008.Clientes c ON c.Id_cliente = f.Id_Cliente JOIN vn2008.Clientes c ON c.Id_cliente = io.clientFk
LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador LEFT JOIN vn2008.Trabajadores tr ON c.Id_Trabajador = tr.Id_Trabajador
WHERE (c.Id_Trabajador = vWorker OR tr.boss = vWorker) WHERE (c.Id_Trabajador = vWorker OR tr.boss = vWorker)
GROUP BY Id_Cliente) dead ON dead.Id_Cliente = c.Id_Cliente GROUP BY Id_Cliente) dead ON dead.Id_Cliente = c.Id_Cliente

View File

@ -82,11 +82,11 @@ BEGIN
AND Fechacobro > vFromDated AND Fechacobro > vFromDated
AND Fechacobro <= vToDated AND Fechacobro <= vToDated
UNION ALL UNION ALL
SELECT g.Id_Cliente, g.Importe SELECT clientFk, amount
FROM vn2008.Greuges g FROM vn.greuge
WHERE Greuges_type_id = vManaGreugeTypeId WHERE greugeTypeFk = vManaGreugeTypeId
AND Fecha > vFromDated AND shipped > vFromDated
AND Fecha <= vToDated AND shipped <= vToDated
UNION ALL UNION ALL
SELECT clientFk, mana SELECT clientFk, mana
FROM vn.clientManaCache FROM vn.clientManaCache

View File

@ -23,9 +23,9 @@ BEGIN
ENGINE = MEMORY ENGINE = MEMORY
SELECT Id_Ticket SELECT Id_Ticket
FROM vn2008.Tickets t FROM vn2008.Tickets t
JOIN vn2008.Facturas f ON f.Id_Factura = t.Factura JOIN vn.invoiceOut io ON io.id = t.Factura
WHERE year(f.Fecha) = vYear WHERE year(io.issued) = vYear
AND month(f.Fecha) = vMonth; AND month(io.issued) = vMonth;
INSERT INTO bs.ventas_contables(year INSERT INTO bs.ventas_contables(year
, month , month

View File

@ -13,9 +13,9 @@ BEGIN
(PRIMARY KEY (Id_Ticket)) (PRIMARY KEY (Id_Ticket))
SELECT Id_Ticket SELECT Id_Ticket
FROM vn2008.Tickets t FROM vn2008.Tickets t
JOIN vn2008.Facturas f ON f.Id_Factura = t.Factura JOIN vn.invoiceOut io ON io.id = t.Factura
WHERE year(f.Fecha) = vYear WHERE year(io.issued) = vYear
AND month(f.Fecha) = vMonth; AND month(io.issued) = vMonth;
SELECT vYear Año, SELECT vYear Año,
vMonth Mes, vMonth Mes,

View File

@ -24,20 +24,20 @@ BEGIN
WHERE date BETWEEN @datSTART WHERE date BETWEEN @datSTART
AND @datEND ) tm AND @datEND ) tm
LEFT JOIN LEFT JOIN
(SELECT DISTINCT tm.yearMonth, f.Id_Cliente , 1 as Compra (SELECT DISTINCT tm.yearMonth, io.clientFk Id_Cliente , 1 as Compra
FROM vn2008.Facturas f FROM vn.invoiceOut io
JOIN vn2008.time tm ON tm.date = f.Fecha JOIN vn2008.time tm ON tm.date = io.issued
WHERE Fecha BETWEEN @datSTART WHERE io.issued BETWEEN @datSTART
AND @datEND) f ON f.yearMonth = tm.yearMonth AND @datEND) f ON f.yearMonth = tm.yearMonth
AND f.Id_Cliente = c.Id_Cliente; AND f.Id_Cliente = c.Id_Cliente;
UPDATE tmp.VivosMuertos vm UPDATE tmp.VivosMuertos vm
JOIN JOIN
(SELECT MIN(tm.yearMonth) firstMonth, f.Id_Cliente (SELECT MIN(tm.yearMonth) firstMonth, io.clientFk Id_Cliente
FROM vn2008.Facturas f FROM vn.invoiceOut io
JOIN vn2008.time tm ON tm.date = f.Fecha JOIN vn2008.time tm ON tm.date = io.issued
WHERE Fecha BETWEEN @datSTART AND @datEND WHERE io.issued BETWEEN @datSTART AND @datEND
GROUP BY f.Id_Cliente ) fm ON fm.firstMonth = vm.yearMonth GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth
AND fm.Id_Cliente = vm.Id_Cliente AND fm.Id_Cliente = vm.Id_Cliente
SET Nuevo = 1; SET Nuevo = 1;
@ -46,11 +46,11 @@ BEGIN
UPDATE tmp.VivosMuertos vm UPDATE tmp.VivosMuertos vm
JOIN ( JOIN (
SELECT MAX(tm.yearMonth) firstMonth, f.Id_Cliente SELECT MAX(tm.yearMonth) firstMonth, io.clientFk Id_Cliente
FROM vn2008.Facturas f FROM vn.invoiceOut io
JOIN vn2008.time tm ON tm.date = f.Fecha JOIN vn2008.time tm ON tm.date = io.issued
WHERE Fecha BETWEEN @datSTART AND @datEND WHERE io.issued BETWEEN @datSTART AND @datEND
GROUP BY f.Id_Cliente ) fm ON fm.firstMonth = vm.yearMonth GROUP BY io.clientFk) fm ON fm.firstMonth = vm.yearMonth
AND fm.Id_Cliente = vm.Id_Cliente AND fm.Id_Cliente = vm.Id_Cliente
SET Muerto = 1 SET Muerto = 1

View File

@ -16,8 +16,8 @@ BEGIN
FROM ( FROM (
SELECT DISTINCT t.Id_Ruta SELECT DISTINCT t.Id_Ruta
FROM vn2008.scan_line sl FROM vn2008.scan_line sl
JOIN vn2008.expeditions e ON e.expeditions_id = sl.code JOIN expedition e ON e.id = sl.code
JOIN vn2008.Tickets t ON t.Id_Ticket = e.ticket_id JOIN vn2008.Tickets t ON t.Id_Ticket = e.ticketFk
WHERE sl.scan_id = vScanId WHERE sl.scan_id = vScanId
AND t.Id_Ruta AND t.Id_Ruta
) t1; ) t1;

View File

@ -1,14 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`nz`(vQuantity DOUBLE)
RETURNS double
DETERMINISTIC
BEGIN
DECLARE vResult DOUBLE;
SET vResult = IFNULL(vQuantity,0);
RETURN vResult;
END$$
DELIMITER ;

View File

@ -0,0 +1,41 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`XDiario_check`()
BEGIN
/**
* Realiza la revisión diaria de los asientos contables,
* identificando y notificando los asientos descuadrados
* y ajustando los saldos en caso necesario.
*/
INSERT INTO mail (receiver, subject, body)
SELECT 'cau@verdnatura.es',
'Asientos descuadrados',
GROUP_CONCAT(CONCAT(' Asiento: ', ASIEN, ' - Importe:', recon) SEPARATOR ' | \n')
FROM (
SELECT ASIEN,
SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0)) recon
FROM XDiario
WHERE NOT enlazado
GROUP BY ASIEN
HAVING ABS(SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0))) > 0.01
) sub
HAVING COUNT(*);
UPDATE XDiario xd
JOIN (
SELECT xd.id, SUBCTA, recon
FROM XDiario xd
JOIN (
SELECT ASIEN,
SUM(IFNULL(ROUND(Eurodebe, 2), 0)) - SUM(IFNULL(ROUND(EUROHABER, 2), 0)) recon
FROM XDiario
WHERE NOT enlazado
GROUP BY ASIEN
HAVING recon
) sub ON sub.ASIEN = xd.ASIEN
WHERE xd.SUBCTA > '5999999999'
GROUP BY xd.ASIEN
) sub ON sub.id = xd.id
SET xd.Eurohaber = IF(IFNULL(xd.Eurohaber, 0) = 0, xd.Eurohaber, xd.Eurohaber + sub.recon),
xd.Eurodebe = IF(IFNULL(xd.Eurodebe, 0) = 0, xd.Eurodebe, xd.Eurodebe - sub.recon);
END$$
DELIMITER ;

View File

@ -48,7 +48,7 @@ BEGIN
SELECT lc.companyFk, SELECT lc.companyFk,
c.id, c.id,
0, 0,
- (NZ(lc.credit) - NZ(lc.debit)) - (IFNULL(lc.credit, 0) - IFNULL(lc.debit, 0))
FROM tmp.ledgerComparative lc FROM tmp.ledgerComparative lc
JOIN client c ON c.accountingAccount = lc.account JOIN client c ON c.accountingAccount = lc.account
WHERE lc.`date` BETWEEN vDateFrom AND vDateTo WHERE lc.`date` BETWEEN vDateFrom AND vDateTo

View File

@ -0,0 +1,211 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_getTransfer`(
vSelf INT
)
BEGIN
/**
* Retorna los artículos trasladables a partir de una entrada.
*
* @param vSelf Id de entrada
*/
DECLARE vDateShipped DATE;
DECLARE vDateLanded DATE;
DECLARE vWarehouseIn INT;
DECLARE vWarehouseOut INT;
DECLARE vCalcVisible INT;
DECLARE vInventoryDate DATE DEFAULT vn.getInventoryDate();
SELECT shipped, landed, warehouseInFk, warehouseOutFk
INTO vDateShipped, vDateLanded, vWarehouseIn, vWarehouseOut
FROM vn.travel t
JOIN vn.entry e ON e.travelFk = t.id
WHERE e.id = vSelf;
CALL vn.rate_getPrices(vDateShipped, vWarehouseIn);
-- Traslado en almacen origen
CREATE OR REPLACE TEMPORARY TABLE tBuy
(PRIMARY KEY (itemFk), INDEX(buyFk))
ENGINE = MEMORY
SELECT *
FROM (
SELECT b.itemFk, b.id buyFk
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
WHERE t.landed BETWEEN vInventoryDate AND vDateShipped
AND NOT b.isIgnored
AND b.price2 >= 0
ORDER BY (vWarehouseOut = t.warehouseInFk) DESC, t.landed DESC
LIMIT 10000000000000000000
) sub
GROUP BY itemFk;
IF vDateShipped >= util.VN_CURDATE() THEN
CALL `cache`.visible_refresh(vCalcVisible, TRUE, vWarehouseOut);
CREATE OR REPLACE TEMPORARY TABLE tItem (
`itemFk` int(10) unsigned NOT NULL,
`visible` int(11) NOT NULL DEFAULT 0,
`available` int(11) NOT NULL DEFAULT 0,
`visibleLanding` int(11) NOT NULL DEFAULT 0,
`availableLanding` int(11) NOT NULL DEFAULT 0,
UNIQUE INDEX i USING HASH (itemFk)
) ENGINE = MEMORY;
INSERT INTO tItem(itemFk, visible)
SELECT item_id itemFk, visible
FROM `cache`.visible
WHERE calc_id = vCalcVisible
AND visible;
CALL `cache`.visible_refresh(vCalcVisible, TRUE, vWarehouseIn);
INSERT INTO tItem(itemFk, visibleLanding)
SELECT item_id, `visible`
FROM `cache`.`visible` v
WHERE v.calc_id = vCalcVisible
AND v.`visible`
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
CALL vn2008.availableTraslate(vWarehouseOut, vDateShipped, NULL);
INSERT INTO tItem(itemFk, available)
SELECT a.item_id, a.available
FROM vn2008.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE available = a.available;
CALL vn2008.availableTraslate(vWarehouseIn, vDateLanded, vWarehouseOut);
INSERT INTO tItem(itemFk, availableLanding)
SELECT a.item_id, a.available
FROM vn2008.availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE availableLanding = a.available;
ELSE
CALL vn.item_getStock(vWarehouseOut, vDateShipped, NULL);
CREATE OR REPLACE TEMPORARY TABLE tItem
(UNIQUE INDEX i USING HASH (itemFk))
ENGINE = MEMORY
SELECT itemFk,
`visible`,
available,
0 visibleLanding,
0 availableLanding
FROM tmp.itemList;
END IF;
CALL vn.buyUltimateFromInterval(vWarehouseIn,vInventoryDate, vDateLanded);
CREATE OR REPLACE TEMPORARY TABLE tTransfer
ENGINE = MEMORY
SELECT it.code `type`,
it.categoryFk,
i.typeFk,
i.id itemFk,
i.name item,
i.`size`,
i.category,
i.inkFk,
o.code originCode,
b2.quantity,
i.stems,
CAST(ti.visible AS DECIMAL(10,0)) vis1,
CAST(ti.available AS DECIMAL(10,0)) ava1,
CAST(ti.visibleLanding AS DECIMAL(10,0)) vis2,
CAST(ti.availableLanding AS DECIMAL(10,0)) ava2,
COALESCE(b2.`grouping`, b.`grouping`) `grouping`,
COALESCE(b2.packing, b.packing) packing,
COALESCE(b3.groupingMode, b2.groupingMode, b.groupingMode) package,
IFNULL(p.name, s.nickname) productor,
TRUE tinta,
b.packagingFk,
b2.id buyFk,
b2.stickers,
b.ektFk,
it.workerFk,
pa.volume,
IFNULL(pa.width, 0) width,
IFNULL(pa.`depth`, 0) `depth`,
IFNULL(pa.height, 0) height,
IFNULL(b.buyingValue, 0) buyingValue,
IFNULL(b.comissionValue, 0) comissionValue,
IFNULL(b.freightValue, 0) freightValue,
am.m3,
e.commission,
pa.isPackageReturnable,
IFNULL(pa2.value, pa.value) `value`,
r.rate3 r3,
r.rate2 r2,
it.promo,
b.`grouping` groupingOrigin,
b.packing packingOrigin,
b.id buyFkOrigin,
pa.returnCost,
b.weight
FROM vn.item i
JOIN tItem ti ON ti.itemFk = i.id
LEFT JOIN vn.producer p ON p.id = i.producerFk
LEFT JOIN vn.itemType it ON it.id = i.typeFk
JOIN vn.itemCategory ic ON ic.id = it.categoryFk
LEFT JOIN vn.origin o ON o.id = i.originFk
LEFT JOIN tBuy lb ON lb.itemFk = i.id
LEFT JOIN vn.buy b ON b.id = lb.buyFk
LEFT JOIN vn.packaging pa ON pa.id = b.packagingFk
LEFT JOIN vn.entry e2 ON e2.id = b.entryFk
LEFT JOIN vn.supplier s ON s.id = e2.supplierFk
LEFT JOIN vn.entry e ON e.id = vSelf
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
LEFT JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
LEFT JOIN vn.buy b2 ON b2.itemFk = i.id
AND b2.entryFk = vSelf
LEFT JOIN vn.packaging pa2 ON pa2.id = b.packagingFk
LEFT JOIN tmp.rate r ON TRUE
LEFT JOIN tmp.buyUltimateFromInterval bufi ON bufi.itemFk = i.id
LEFT JOIN vn.buy b3 ON b3.id = bufi.buyFk
WHERE ic.display
AND NOT e.isRaid
AND (ti.visible OR ti.available)
ORDER BY i.typeFk, i.name, i.id, i.size, i.category, o.name;
CREATE INDEX tIndex USING HASH ON tTransfer (itemFk);
SET @carriage := 0;
SET @comission := 0;
SET @packaging := 0;
SET @rate3 := 0;
SET @cost := 0;
SELECT *,
quantity - MOD(quantity , `grouping`) subQuantity,
MOD(quantity, `grouping`) soll,
ROUND((IF(volume > 0,volume, width * `depth` *
IF(height = 0, `size` + 10, height))) /
packing, 0) cm3,
buyingValue + comissionValue + freightValue cost,
@carriage := ROUND((IF(volume > 0, volume, width * `depth` *
IF(height = 0, `size` + 10, height))) *
m3 / 1000000 / Packing, 3) carriage,
@comission := ROUND((buyingValue + comissionValue + freightValue) *
commission / 100, 3) commission,
ROUND(@packaging := (returnCost + IF(isPackageReturnable, 0, value))
/ packing, 3) packaging,
@cost := IFNULL((buyingValue + comissionValue + freightValue), 0) +
IFNULL(@packaging, 0) +
IFNULL(@carriage, 0) +
IFNULL(@comission, 0) expense,
@rate3 := ROUND(@cost / ( (100 - r3 - promo) / 100), 2) rate3,
ROUND(@rate3 * (1 + ((r2 - r3)/100)), 2) rate2,
FALSE selected
FROM tTransfer;
DROP TEMPORARY TABLE IF EXISTS
tTransfer,
tItem,
tBuy,
tmp.buyUltimateFromInterval,
tmp.rate,
tmp.itemList;
END$$
DELIMITER ;

View File

@ -3,13 +3,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`getDayExpeditions`(
BEGIN BEGIN
SELECT SELECT
e.expeditions_id as expeditionFk, e.id as expeditionFk,
date_format(e.odbc_date,'%Y-%m-%d') as expeditionDate, date_format(e.created,'%Y-%m-%d') as expeditionDate,
e.ticket_id as ticketFk, e.ticketFk,
t.routeFk as routeFk t.routeFk as routeFk
FROM vn2008.expeditions e FROM expedition e
INNER JOIN vn.ticket t ON t.id = e.ticket_id INNER JOIN ticket t ON t.id = e.ticketFk
WHERE DATE(odbc_date) = util.VN_CURDATE(); WHERE DATE(e.created) = util.VN_CURDATE();
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -50,31 +50,30 @@ BEGIN
) alb ON alb.itemFk = i.id ) alb ON alb.itemFk = i.id
LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as venta SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as venta
FROM vn2008.item_out FROM itemTicketOut
WHERE dat BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE())) WHERE shipped BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
AND warehouse_id = vWarehouseFk AND warehouseFk = vWarehouseFk
GROUP BY item_id GROUP BY itemFk
) sale ON sale.item_id = i.id ) sale ON sale.item_id = i.id
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as compra SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as compra
FROM vn2008.item_entry_in FROM itemEntryIn
WHERE dat BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE())) WHERE landed BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
AND warehouse_id = vWarehouseFk AND warehouseInFk = vWarehouseFk
AND isVirtualStock = FALSE AND isVirtualStock = FALSE
GROUP BY item_id GROUP BY itemFk
) buy ON buy.item_id = i.id ) buy ON buy.item_id = i.id
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as traslado SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as traslado
FROM vn2008.item_entry_out FROM itemEntryOut
WHERE dat BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE())) WHERE shipped BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY,vDaysInFuture , util.dayend(util.VN_CURDATE()))
AND warehouse_id = vWarehouseFk AND warehouseOutFk = vWarehouseFk
GROUP BY item_id GROUP BY itemFk
) mov ON mov.item_id = i.id ) mov ON mov.item_id = i.id
WHERE (v.amount OR fue.Fuentes OR alb.Albenfruit) WHERE (v.amount OR fue.Fuentes OR alb.Albenfruit)
AND i.itemPackingTypeFk = 'H' AND i.itemPackingTypeFk = 'H'
AND ic.shortLife AND ic.shortLife;
;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -143,12 +143,12 @@ proc:BEGIN
CREATE TEMPORARY TABLE tmp.itemOutTime CREATE TEMPORARY TABLE tmp.itemOutTime
SELECT *,SUM(amount) quantity SELECT *,SUM(amount) quantity
FROM FROM
(SELECT item_id itemFk, (SELECT io.itemFk,
amount, io.quantity amount,
IF(HOUR(t.shipped), HOUR(t.shipped), HOUR(z.`hour`)) as hours, IF(HOUR(t.shipped), HOUR(t.shipped), HOUR(z.`hour`)) as hours,
IF(MINUTE(t.shipped), MINUTE(t.shipped), MINUTE(z.`hour`)) as minutes IF(MINUTE(t.shipped), MINUTE(t.shipped), MINUTE(z.`hour`)) as minutes
FROM vn2008.item_out io FROM itemTicketOut io
JOIN tmp.itemShelvingRadar isr ON isr.itemFk = io.item_id JOIN tmp.itemShelvingRadar isr ON isr.itemFk = io.itemFk
JOIN vn.ticket t on t.id= io.ticketFk JOIN vn.ticket t on t.id= io.ticketFk
JOIN vn.ticketState ts on ts.ticketFk = io.ticketFk JOIN vn.ticketState ts on ts.ticketFk = io.ticketFk
JOIN vn.state s ON s.id = ts.stateFk JOIN vn.state s ON s.id = ts.stateFk
@ -160,10 +160,10 @@ proc:BEGIN
) stPrevious ON `stPrevious`.`saleFk` = io.saleFk ) stPrevious ON `stPrevious`.`saleFk` = io.saleFk
WHERE t.warehouseFk = vWarehouseFk WHERE t.warehouseFk = vWarehouseFk
AND s.isPicked = 0 AND s.isPicked = 0
AND NOT io.Reservado AND NOT io.reserved
AND stPrevious.saleFk IS NULL AND stPrevious.saleFk IS NULL
AND io.dat >= util.VN_CURDATE() AND io.shipped >= util.VN_CURDATE()
AND io.dat < util.VN_CURDATE() + INTERVAL 1 DAY AND io.shipped < util.VN_CURDATE() + INTERVAL 1 DAY
) sub ) sub
GROUP BY itemFk, hours, minutes; GROUP BY itemFk, hours, minutes;

View File

@ -23,7 +23,8 @@ BEGIN
SUM(IFNULL(sub.amount,0)) lack, SUM(IFNULL(sub.amount,0)) lack,
i.inkFk, i.inkFk,
IFNULL(im.timed, util.midnight()) timed, IFNULL(im.timed, util.midnight()) timed,
IFNULL(izc.timed, util.midnight()) minTimed IFNULL(izc.timed, util.midnight()) minTimed,
o.name originFk
FROM (SELECT item_id, FROM (SELECT item_id,
warehouse_id, warehouse_id,
amount amount
@ -42,6 +43,7 @@ BEGIN
JOIN itemCategory ic ON ic.id = it.categoryFk JOIN itemCategory ic ON ic.id = it.categoryFk
LEFT JOIN tmp.itemMinETD im ON im.itemFk = i.id LEFT JOIN tmp.itemMinETD im ON im.itemFk = i.id
LEFT JOIN tmp.itemZoneClosure izc ON izc.itemFk = i.id LEFT JOIN tmp.itemZoneClosure izc ON izc.itemFk = i.id
JOIN origin o ON o.id = i.originFk
WHERE w.isForTicket WHERE w.isForTicket
AND ic.display AND ic.display
AND it.code != 'GEN' AND it.code != 'GEN'

View File

@ -34,26 +34,26 @@ BEGIN
) fue ON fue.itemFk = i.id ) fue ON fue.itemFk = i.id
LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk LEFT JOIN cache.stock v ON i.id = v.item_id AND v.warehouse_id = vWarehouseFk
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as venta SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as venta
FROM vn2008.item_out FROM itemTicketOut
WHERE dat BETWEEN util.VN_CURDATE() AND util.dayend(vDated) WHERE shipped BETWEEN util.VN_CURDATE() AND util.dayend(vDated)
AND warehouse_id = vWarehouseFk AND warehouseFk = vWarehouseFk
GROUP BY item_id GROUP BY itemFk
) sale ON sale.item_id = i.id ) sale ON sale.item_id = i.id
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as compra SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as compra
FROM vn2008.item_entry_in FROM itemEntryIn
WHERE dat BETWEEN util.VN_CURDATE() AND util.dayend(vDated) WHERE landed BETWEEN util.VN_CURDATE() AND util.dayend(vDated)
AND warehouse_id = vWarehouseFk AND warehouseInFk = vWarehouseFk
AND isVirtualStock = FALSE AND isVirtualStock = FALSE
GROUP BY item_id GROUP BY itemFk
) buy ON buy.item_id = i.id ) buy ON buy.item_id = i.id
LEFT JOIN ( LEFT JOIN (
SELECT item_id, CAST(sum(amount)AS DECIMAL(10,0)) as traslado SELECT itemFk item_id, CAST(sum(quantity)AS DECIMAL(10,0)) as traslado
FROM vn2008.item_entry_out FROM itemEntryOut
WHERE dat BETWEEN util.VN_CURDATE() AND util.dayend(vDated) WHERE shipped BETWEEN util.VN_CURDATE() AND util.dayend(vDated)
AND warehouse_id = vWarehouseFk AND warehouseOutFk = vWarehouseFk
GROUP BY item_id GROUP BY itemFk
) mov ON mov.item_id = i.id ) mov ON mov.item_id = i.id
WHERE v.amount; WHERE v.amount;

View File

@ -60,7 +60,7 @@ BEGIN
SELECT lc.companyFk, SELECT lc.companyFk,
s.id, s.id,
0, 0,
- (NZ(lc.debit) - NZ(lc.credit)) - (IFNULL(lc.debit, 0) - IFNULL(lc.credit, 0))
FROM tmp.ledgerComparative lc FROM tmp.ledgerComparative lc
JOIN supplier s ON s.account = lc.account JOIN supplier s ON s.account = lc.account
WHERE lc.`date` BETWEEN vDateFrom AND vDateTo WHERE lc.`date` BETWEEN vDateFrom AND vDateTo

View File

@ -0,0 +1,139 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`supplier_statement`(
vSupplierFk INT,
vCurrencyFk INT,
vCompanyFk INT,
vOrderBy VARCHAR(15),
vIsConciliated BOOL
)
BEGIN
/**
* Crea un estado de cuenta de proveedores calculando
* los saldos en euros y en la moneda especificada.
*
* @param vSupplierFk Id del proveedor
* @param vCurrencyFk Id de la moneda
* @param vCompanyFk Id de la empresa
* @param vOrderBy Criterio de ordenación
* @param vIsConciliated Indica si está conciliado o no
* @return tmp.supplierStatement
*/
SET @euroBalance:= 0;
SET @currencyBalance:= 0;
CREATE OR REPLACE TEMPORARY TABLE tmp.supplierStatement
ENGINE = MEMORY
SELECT *,
@euroBalance:= ROUND(
@euroBalance + IFNULL(paymentEuros, 0) -
IFNULL(invoiceEuros, 0), 2
) euroBalance,
@currencyBalance:= ROUND(
@currencyBalance + IFNULL(paymentCurrency, 0) -
IFNULL(invoiceCurrency, 0), 2
) currencyBalance
FROM (
SELECT * FROM
(
SELECT NULL bankFk,
ii.companyFk,
ii.serial,
ii.id,
CASE
WHEN vOrderBy = 'issued' THEN ii.issued
WHEN vOrderBy = 'bookEntried' THEN ii.bookEntried
WHEN vOrderBy = 'booked' THEN ii.booked
WHEN vOrderBy = 'dueDate' THEN iid.dueDated
END dated,
CONCAT('S/Fra ', ii.supplierRef) sref,
IF(ii.currencyFk > 1,
ROUND(SUM(iid.foreignValue) / SUM(iid.amount), 3),
NULL
) changeValue,
CAST(SUM(iid.amount) AS DECIMAL(10,2)) invoiceEuros,
CAST(SUM(iid.foreignValue) AS DECIMAL(10,2)) invoiceCurrency,
NULL paymentEuros,
NULL paymentCurrency,
ii.currencyFk,
ii.isBooked,
c.code,
'invoiceIn' statementType
FROM invoiceIn ii
JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
JOIN currency c ON c.id = ii.currencyFk
WHERE ii.issued > '2014-12-31'
AND ii.supplierFk = vSupplierFk
AND vCurrencyFk IN (ii.currencyFk, 0)
AND vCompanyFk IN (ii.companyFk, 0)
AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
GROUP BY iid.id
UNION ALL
SELECT p.bankFk,
p.companyFk,
NULL,
p.id,
CASE
WHEN vOrderBy = 'issued' THEN p.received
WHEN vOrderBy = 'bookEntried' THEN p.received
WHEN vOrderBy = 'booked' THEN p.received
WHEN vOrderBy = 'dueDate' THEN p.dueDated
END,
CONCAT(IFNULL(pm.name, ''),
IF(pn.concept <> '',
CONCAT(' : ', pn.concept),
'')
),
IF(p.currencyFk > 1, p.divisa / p.amount, NULL),
NULL,
NULL,
p.amount,
p.divisa,
p.currencyFk,
p.isConciliated,
c.code,
'payment'
FROM payment p
LEFT JOIN currency c ON c.id = p.currencyFk
LEFT JOIN bank b ON b.id = p.bankFk
LEFT JOIN payMethod pm ON pm.id = p.payMethodFk
LEFT JOIN promissoryNote pn ON pn.paymentFk = p.id
WHERE p.received > '2014-12-31'
AND p.supplierFk = vSupplierFk
AND vCurrencyFk IN (p.currencyFk, 0)
AND vCompanyFk IN (p.companyFk, 0)
AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
UNION ALL
SELECT NULL,
companyFk,
NULL,
se.id,
CASE
WHEN vOrderBy = 'issued' THEN se.dated
WHEN vOrderBy = 'bookEntried' THEN se.dated
WHEN vOrderBy = 'booked' THEN se.dated
WHEN vOrderBy = 'dueDate' THEN se.dueDated
END,
se.description,
1,
amount,
NULL,
NULL,
NULL,
currencyFk,
isConciliated,
c.`code`,
'expense'
FROM supplierExpense se
JOIN currency c ON c.id = se.currencyFk
WHERE se.supplierFk = vSupplierFk
AND vCurrencyFk IN (se.currencyFk,0)
AND vCompanyFk IN (se.companyFk,0)
AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
) sub
ORDER BY (dated IS NULL AND NOT isBooked),
dated,
IF(vOrderBy = 'dueDate', id, NULL)
LIMIT 10000000000000000000
) t;
END$$
DELIMITER ;

View File

@ -0,0 +1,109 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_getDetailFromContinent`(
vContinentFk INT
)
BEGIN
/**
* Devuelve los detalles de los vuelos que tienen
* un almacén de salida de un continente.
*
* @param vContinentFk Id de continente
*/
DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL 12 WEEK;
SELECT IFNULL(CONCAT(" ", entryFk), travelFk) travelAndEntry,
sub.*
FROM (
SELECT tr.id travelFk,
NULL entryFk,
TRUE isTravel,
am.name agency,
tr.ref,
tr.shipped,
wOut.name originBoxes,
tr.landed,
wIn.name destination,
SUM(b.stickers) stickers,
NULL evaNotes,
tr.kg,
CAST(SUM(b.weight * b.stickers) AS INT) loadedkg,
CAST(
SUM(vc.aerealVolumetricDensity *
b.stickers *
IF(p.volume,
p.volume,
p.width * p.depth * p.height
) / 1000000
) AS INT
) volumeKg,
NULL loadPriority,
NULL invoiceAmount,
s.nickname freighter,
NULL reference
FROM travel tr
LEFT JOIN supplier s ON s.id = tr.cargoSupplierFk
LEFT JOIN entry e ON e.travelFk = tr.id
LEFT JOIN buy b ON b.entryFk = e.id
LEFT JOIN packaging p ON p.id = b.packagingFk
LEFT JOIN item i ON i.id = b.itemFk
LEFT JOIN itemType it ON it.id = i.typeFk
JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
JOIN country co ON co.id = wOut.countryFk
JOIN agencyMode am ON am.id = tr.agencyModeFk
JOIN volumeConfig vc
WHERE tr.landed >= vDateFrom
AND co.continentFk = vContinentFk
GROUP BY tr.id
UNION ALL
SELECT e.travelFk,
e.id,
FALSE,
s.name,
e.invoiceNumber,
tr.shipped,
wOut.name,
tr.landed,
wIn.name,
SUM(b.stickers),
e.evaNotes,
NULL,
CAST(SUM(b.weight * b.stickers) AS INT),
CAST(
SUM(vc.aerealVolumetricDensity *
b.stickers *
IF(p.volume,
p.volume,
p.width * p.depth * p.height
) / 1000000
) AS INT
),
loadPriority,
e.invoiceAmount,
s2.nickname,
e.reference
FROM entry e
JOIN buy b ON b.entryFk = e.id
JOIN packaging p ON p.id = b.packagingFk
JOIN item i ON i.id = b.itemFk
JOIN itemType it ON it.id = i.typeFk
JOIN supplier s ON s.id = e.supplierFk
JOIN travel tr ON tr.id = e.travelFk
LEFT JOIN supplier s2 ON s2.id = tr.cargoSupplierFk
JOIN warehouse wIn ON wIn.id = tr.warehouseInFk
JOIN warehouse wOut ON wOut.id = tr.warehouseOutFk
JOIN country co ON co.id = wOut.countryFk
JOIN volumeConfig vc
WHERE tr.landed >= vDateFrom
AND co.continentFk = vContinentFk
GROUP BY e.id
) sub
ORDER BY landed ASC,
shipped ASC,
travelFk,
isTravel DESC,
(loadPriority > 0) DESC,
loadPriority,
agency,
evaNotes;
END$$
DELIMITER ;

View File

@ -1,5 +1,5 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`budgetNotes_BeforeInsert` CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`budgetNotes_beforeInsert`
BEFORE INSERT ON `budgetNotes` BEFORE INSERT ON `budgetNotes`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN

View File

@ -10,7 +10,7 @@ BEGIN
IF NEW.freightItemFk IS NOT NULL THEN IF NEW.freightItemFk IS NOT NULL THEN
UPDATE ticket SET packages = nz(packages) + 1 WHERE id = NEW.ticketFk; UPDATE ticket SET packages = IFNULL(packages, 0) + 1 WHERE id = NEW.ticketFk;
SELECT IFNULL(MAX(counter),0) +1 INTO intcounter SELECT IFNULL(MAX(counter),0) +1 INTO intcounter
FROM expedition e FROM expedition e

View File

@ -1,7 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`agencyWarehouse`
AS SELECT `a`.`agency_id` AS `agencyFk`,
`a`.`warehouse_id` AS `warehouseFk`,
`a`.`Vista` AS `agencyType`
FROM `vn2008`.`agency_warehouse` `a`

View File

@ -1,9 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`clientDefaultCompany`
AS SELECT `t`.`Id_Clientes_empresa` AS `id`,
`t`.`Id_Cliente` AS `clientFk`,
`t`.`empresa_id` AS `companyFk`,
`t`.`fecha_ini` AS `started`,
`t`.`fecha_fin` AS `finished`
FROM `vn2008`.`Clientes_empresa` `t`

View File

@ -1,6 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`coolerPath`
AS SELECT `c`.`cooler_path_id` AS `id`,
`c`.`description` AS `description`
FROM `vn2008`.`cooler_path` `c`

View File

@ -1,7 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn`.`grantGroup`
AS SELECT `vn2008`.`Grupos`.`id` AS `id`,
`vn2008`.`Grupos`.`Grupo` AS `description`,
`vn2008`.`Grupos`.`observation_type_id` AS `observationTypeFk`
FROM `vn2008`.`Grupos`

View File

@ -1,14 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn2008`.`nz`(dblCANTIDAD DOUBLE)
RETURNS double
DETERMINISTIC
BEGIN
DECLARE dblRESULT DOUBLE;
SET dblRESULT = IFNULL(dblCANTIDAD,0);
RETURN dblRESULT;
END$$
DELIMITER ;

View File

@ -47,13 +47,13 @@ BEGIN
UNION ALL UNION ALL
SELECT empresa_id, Id_Cliente, - Importe SELECT io.companyFk, io.clientFk Id_Cliente, - io.amount
FROM Facturas f FROM vn.invoiceOut io
JOIN Clientes c using(Id_Cliente) JOIN Clientes c ON c.Id_Cliente = io.clientFk
JOIN pay_met pm on pm.id = pay_met_id JOIN pay_met pm on pm.id = pay_met_id
WHERE f.Vencimiento > vFechaRemesa WHERE io.dued > vFechaRemesa
AND pay_met_id = 4 AND pm.deudaviva AND pay_met_id = 4 AND pm.deudaviva
AND Importe > 0 AND io.amount > 0
) risk ON c.Id_Cliente = risk.clientFk ) risk ON c.Id_Cliente = risk.clientFk
GROUP BY risk.companyFk, Id_Cliente GROUP BY risk.companyFk, Id_Cliente

View File

@ -13,9 +13,9 @@ SELECT Agencia,
FROM Tickets ti FROM Tickets ti
INNER JOIN Consignatarios ON ti.Id_Consigna = Consignatarios.Id_consigna INNER JOIN Consignatarios ON ti.Id_Consigna = Consignatarios.Id_consigna
INNER JOIN Agencias ON ti.Id_Agencia = Agencias.Id_Agencia INNER JOIN Agencias ON ti.Id_Agencia = Agencias.Id_Agencia
LEFT JOIN (SELECT Ticket_Id,count(*) AS ncajas FROM expeditions WHERE Id_Article=94 GROUP BY ticket_id) sub1 ON ti.Id_Ticket=sub1.Ticket_Id LEFT JOIN (SELECT ticketFk,count(*) AS ncajas FROM vn.expedition WHERE packagingFk=94 GROUP BY ticketFk) sub1 ON ti.Id_Ticket=sub1.ticketFk
LEFT JOIN (SELECT Ticket_Id,count(*) AS nbultos FROM expeditions WHERE Id_Article IS NULL GROUP BY ticket_id) sub2 ON ti.Id_Ticket=sub2.Ticket_Id LEFT JOIN (SELECT ticketFk,count(*) AS nbultos FROM vn.expedition WHERE packagingFk IS NULL GROUP BY ticketFk) sub2 ON ti.Id_Ticket=sub2.ticketFk
LEFT JOIN (SELECT Ticket_Id,count(*) AS notros FROM expeditions WHERE Id_Article >0 GROUP BY ticket_id) sub3 ON ti.Id_Ticket=sub3.Ticket_Id LEFT JOIN (SELECT ticketFk,count(*) AS notros FROM vn.expedition WHERE packagingFk >0 GROUP BY ticketFk) sub3 ON ti.Id_Ticket=sub3.ticketFk
INNER JOIN vn.ticketState ts ON ti.Id_ticket = ts.ticketFk INNER JOIN vn.ticketState ts ON ti.Id_ticket = ts.ticketFk
WHERE ti.Fecha=util.VN_CURDATE() AND WHERE ti.Fecha=util.VN_CURDATE() AND
ts.userFk=intId_Trabajador ts.userFk=intId_Trabajador

View File

@ -1,34 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`XDiario_Quadrator`()
BEGIN
INSERT INTO vn.mail (receiver, subject, body)
SELECT 'cau@verdnatura.es',
'asientos descuadrados',
group_concat(CONCAT(' Asiento: ', ASIEN, '- importe:', quadre) SEPARATOR ' \r\n ')
FROM (
SELECT ASIEN, SUM(IFNULL(ROUND(Eurodebe,2),0))- SUM(IFNULL(ROUND(EUROHABER,2),0)) quadre
FROM vn.XDiario
WHERE enlazado = FALSE
GROUP BY ASIEN
HAVING ABS(SUM(IFNULL(ROUND(Eurodebe,2),0))- SUM(IFNULL(ROUND(EUROHABER,2),0))) > 0.01
) t
HAVING count(*) > 0;
UPDATE vn.XDiario XD
INNER JOIN(
SELECT XD.id, SUBCTA, Quadre FROM vn.XDiario XD
INNER JOIN (
SELECT ASIEN, SUM(IFNULL(ROUND(Eurodebe,2),0))- SUM(IFNULL(ROUND(EUROHABER,2),0)) as Quadre
FROM vn.XDiario
WHERE enlazado = FALSE
GROUP BY ASIEN
HAVING Quadre != 0
) sub USING(ASIEN)
WHERE SUBCTA > '5999999999'
GROUP BY ASIEN
) sub2 USING(id)
SET Eurohaber = IF(IFNULL(Eurohaber,0) = 0, Eurohaber, Eurohaber + Quadre),
Eurodebe = IF(IFNULL(Eurodebe,0) = 0, Eurodebe, Eurodebe - Quadre);
END$$
DELIMITER ;

View File

@ -67,12 +67,12 @@ proc: BEGIN
CREATE TEMPORARY TABLE tmp.itemCalc CREATE TEMPORARY TABLE tmp.itemCalc
(INDEX (itemFk,warehouseFk)) (INDEX (itemFk,warehouseFk))
ENGINE = MEMORY ENGINE = MEMORY
SELECT i.item_id itemFk, vWarehouseLanding warehouseFk, i.dat dated, i.amount quantity SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
FROM item_out i FROM vn.itemTicketOut i
JOIN itemRangeLive ir ON ir.itemFK = i.item_id JOIN itemRangeLive ir ON ir.itemFK = i.itemFk
WHERE i.dat >= vDatedFrom WHERE i.shipped >= vDatedFrom
AND (ir.dated IS NULL OR i.dat <= ir.dated) AND (ir.dated IS NULL OR i.shipped <= ir.dated)
AND i.warehouse_id = vWarehouseLanding AND i.warehouseFk = vWarehouseLanding
UNION ALL UNION ALL
SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
FROM vn.buy b FROM vn.buy b
@ -86,12 +86,12 @@ proc: BEGIN
AND t.landed >= vDatedFrom AND t.landed >= vDatedFrom
AND (ir.dated IS NULL OR t.landed <= ir.dated) AND (ir.dated IS NULL OR t.landed <= ir.dated)
UNION ALL UNION ALL
SELECT i.item_id, vWarehouseLanding, i.dat, i.amount SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
FROM item_entry_out i FROM vn.itemEntryOut i
JOIN itemRangeLive ir ON ir.itemFk = i.item_id JOIN itemRangeLive ir ON ir.itemFk = i.itemFk
WHERE i.dat >= vDatedFrom WHERE i.shipped >= vDatedFrom
AND (ir.dated IS NULL OR i.dat <= ir.dated) AND (ir.dated IS NULL OR i.shipped <= ir.dated)
AND i.warehouse_id = vWarehouseLanding AND i.warehouseOutFk = vWarehouseLanding
UNION ALL UNION ALL
SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
FROM hedera.order_row r FROM hedera.order_row r

View File

@ -122,9 +122,9 @@ BEGIN
-- Añadimos los gastos, para facilitar el formulario -- Añadimos los gastos, para facilitar el formulario
UPDATE tmp.balance b UPDATE tmp.balance b
JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
JOIN (SELECT Id_Gasto, Gasto JOIN (SELECT id Id_Gasto, name Gasto
FROM vn2008.Gastos FROM vn.expense
GROUP BY Id_Gasto) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci GROUP BY id) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci
SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci
, b.Gasto = g.Gasto COLLATE utf8_general_ci ; , b.Gasto = g.Gasto COLLATE utf8_general_ci ;

View File

@ -21,18 +21,10 @@ proc: BEGIN
SET vRangeDeleteTicket = 60; SET vRangeDeleteTicket = 60;
DELETE FROM cdr WHERE calldate < vDate18; DELETE FROM cdr WHERE calldate < vDate18;
DELETE FROM Monitoring WHERE ODBC_TIME < vDate;
DELETE FROM Conteo WHERE Fecha < vDate;
DELETE FROM mail WHERE DATE_ODBC < vDate; DELETE FROM mail WHERE DATE_ODBC < vDate;
DELETE FROM expeditions_deleted WHERE odbc_date < vDate26;
DELETE FROM Movimientos_mark WHERE odbc_date < vDate; DELETE FROM Movimientos_mark WHERE odbc_date < vDate;
DELETE FROM Splits WHERE Fecha < vDate18; DELETE FROM Splits WHERE Fecha < vDate18;
DELETE ts
FROM Tickets_stack ts
JOIN Tickets t ON ts.Id_Ticket = t.Id_Ticket
WHERE t.Fecha < vDate;
DELETE tobs DELETE tobs
FROM ticket_observation tobs FROM ticket_observation tobs
JOIN Tickets t ON tobs.Id_Ticket = t.Id_Ticket JOIN Tickets t ON tobs.Id_Ticket = t.Id_Ticket
@ -64,13 +56,6 @@ proc: BEGIN
JOIN travel t ON t.id = e.travel_id JOIN travel t ON t.id = e.travel_id
WHERE t.landing <= vDate; WHERE t.landing <= vDate;
DELETE co
FROM Compres_ok co JOIN Compres c ON c.Id_Compra = co.Id_Compra
JOIN Entradas e ON e.Id_Entrada = c.Id_Entrada
JOIN travel t ON t.id = e.travel_id
WHERE t.landing <= vDate;
DELETE FROM scan WHERE odbc_date < vDate6 AND id <> 1;
IF v_full THEN IF v_full THEN
CREATE OR REPLACE TEMPORARY TABLE tTicketDelete CREATE OR REPLACE TEMPORARY TABLE tTicketDelete
SELECT DISTINCT tl.originFk ticketFk SELECT DISTINCT tl.originFk ticketFk

View File

@ -18,11 +18,11 @@ SELECT * FROM
WHERE Id_Cliente = vCustomer WHERE Id_Cliente = vCustomer
AND Fechacobro >= '2017-01-01' AND Fechacobro >= '2017-01-01'
UNION ALL UNION ALL
SELECT vn.getDueDate(f.Fecha,c.Vencimiento), - Importe SELECT vn.getDueDate(io.issued,c.Vencimiento), - io.amount
FROM Facturas f FROM vn.invoiceOut io
JOIN Clientes c ON f.Id_Cliente = c.Id_Cliente JOIN Clientes c ON io.clientFk = c.Id_Cliente
WHERE f.Id_Cliente = vCustomer WHERE io.clientFk = vCustomer
AND Fecha >= '2017-01-01' AND io.issued >= '2017-01-01'
UNION ALL UNION ALL
SELECT '2016-12-31', Debt SELECT '2016-12-31', Debt
FROM bi.customerDebtInventory FROM bi.customerDebtInventory

View File

@ -8,12 +8,6 @@ BEGIN
END; END;
START TRANSACTION; START TRANSACTION;
INSERT INTO vn.clientCredit(clientFk, amount)
SELECT c.id, 0
FROM vn.`client` c
JOIN vn.payMethod pm ON pm.id = c.payMethodFk
WHERE c.credit <> 0 AND pm.`code` = 'card';
UPDATE vn.`client` c UPDATE vn.`client` c
JOIN vn.payMethod pm ON pm.id = c.payMethodFk JOIN vn.payMethod pm ON pm.id = c.payMethodFk
SET credit = 0 SET credit = 0
@ -45,10 +39,6 @@ BEGIN
JOIN clientes_credit USING(Id_Cliente) JOIN clientes_credit USING(Id_Cliente)
SET Clientes.Credito = newCredit; SET Clientes.Credito = newCredit;
INSERT INTO credit(Id_Cliente, amount, Id_Trabajador)
SELECT Id_Cliente, newCredit, NULL
FROM clientes_credit;
DROP TEMPORARY TABLE clientes_credit; DROP TEMPORARY TABLE clientes_credit;
COMMIT; COMMIT;
END$$ END$$

View File

@ -1,117 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`supplierStatement`(vSupplierFk INT, vCurrencyFk INT, vCompanyFk INT, vOrderBy VARCHAR(15), vOnlyConciliated BIT)
BEGIN
SET @saldo_eur:= 0;
SET @saldo_div:= 0;
select vOnlyConciliated;
DROP TEMPORARY TABLE IF EXISTS tmp.supplierStatement;
CREATE TEMPORARY TABLE tmp.supplierStatement ENGINE = MEMORY
SELECT
*,
@saldo_eur:= round(@saldo_eur + IFNULL(Pago_Euros, 0) - IFNULL(Fac_Euros, 0) ,2 ) AS saldo_eur,
@saldo_div:= round(@saldo_div + IFNULL(Pago_Divisas, 0) - IFNULL(Fac_Divisas, 0) ,2 ) AS saldo_div
FROM
(SELECT * FROM
(SELECT
NULL as banco_id,
r.empresa_id,
r.serie,
r.id,
CASE
WHEN vOrderBy = 'issued' THEN r.fecha
WHEN vOrderBy = 'bookEntried' THEN r.bookEntried
WHEN vOrderBy = 'booked' THEN r.dateBooking
WHEN vOrderBy = 'dueDate' THEN rv.fecha
END AS fecha,
CONCAT('S/Fra ', r.sref) sref,
if(r.moneda_id > 1,round(sum(divisa) / sum(cantidad),3),NULL) val_cambio,
CAST(sum(cantidad) as DECIMAL(10,2)) as Fac_Euros,
CAST(sum(divisa) as DECIMAL(10,2)) as Fac_Divisas,
NULL AS Pago_Euros,
NULL AS Pago_Divisas,
r.moneda_id,
r.contabilizada,
Moneda,
NULL as pago_sdc_id,
'invoiceIn' statementType
FROM
recibida r
JOIN recibida_vencimiento rv on rv.recibida_id = r.id
JOIN Monedas m on m.Id_Moneda = r.moneda_id
WHERE
r.fecha > '2014-12-31'
AND r.proveedor_id = vSupplierFk
AND vCurrencyFk IN (r.moneda_id, 0)
AND vCompanyFk IN (r.empresa_id,0)
AND (vOnlyConciliated = r.contabilizada OR NOT vOnlyConciliated)
GROUP BY rv.id
UNION ALL
SELECT
p.id_banco,
p.empresa_id,
NULL,
p.id,
CASE
WHEN vOrderBy = 'issued' THEN p.Fecha
WHEN vOrderBy = 'bookEntried' THEN p.Fecha
WHEN vOrderBy = 'booked' THEN p.Fecha
WHEN vOrderBy = 'dueDate' THEN p.dueDated
END AS fecha,
CONCAT(IFNULL(name, ''), IF(pre.concepto <> '', CONCAT(' : ', pre.concepto), '')),
if(p.id_moneda > 1, p.divisa / importe, NULL) tip_cambio,
NULL,
NULL,
p.importe,
p.divisa,
p.id_moneda,
p.conciliado,
Moneda,
NULL as pago_sdc_id,
'payment' statementType
FROM
pago p
LEFT JOIN Monedas ON Monedas.Id_Moneda = p.id_moneda
LEFT JOIN Bancos ON p.id_banco = Bancos.Id_banco
LEFT JOIN pay_met pm ON p.pay_met_id = pm.id
LEFT JOIN Pagares pre ON pre.pago_id = p.id
WHERE
Fecha > '2014-12-31'
AND p.Id_Proveedor = vSupplierFk
AND vCurrencyFk IN (p.id_moneda,0)
AND vCompanyFk IN (p.empresa_id,0)
AND (vOnlyConciliated = p.conciliado OR NOT vOnlyConciliated)
UNION ALL
SELECT
NULL,
companyFk,
NULL,
se.id,
CASE
WHEN vOrderBy = 'issued' THEN se.dated
WHEN vOrderBy = 'bookEntried' THEN se.dated
WHEN vOrderBy = 'booked' THEN se.dated
WHEN vOrderBy = 'dueDate' THEN se.dueDated
END AS fecha,
se.description,
1 tip_cambio,
amount,
NULL,
NULL,
NULL,
currencyFk,
isConciliated,
c.`code`,
NULL,
'expense' statementType
FROM vn.supplierExpense se
JOIN vn.currency c on c.id= se.currencyFk
WHERE se.supplierFk = vSupplierFk
AND vCurrencyFk IN (se.currencyFk,0)
AND vCompanyFk IN (se.companyFk,0)
AND (vOnlyConciliated = se.isConciliated OR NOT vOnlyConciliated)
) AS SUB
ORDER BY (fecha is null and NOT contabilizada),fecha, IF(vOrderBy = 'dueDate', id, NULL) LIMIT 10000000000000000000) t;
END$$
DELIMITER ;

View File

@ -1,182 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`traslado`(IN i_entrada INTEGER)
BEGIN
DECLARE dateShipment DATE;
DECLARE dateLanding DATE;
DECLARE warehouseShipment INTEGER;
DECLARE warehouseLanding INTEGER;
DECLARE v_calc_visible INTEGER;
DECLARE vInventoryDate DATE;
SET vInventoryDate := vn.getInventoryDate();
SELECT shipment, landing, warehouse_id_out, warehouse_id
INTO dateShipment, dateLanding, warehouseShipment, warehouseLanding
FROM travel t JOIN Entradas e ON t.id = e.travel_id
WHERE Id_Entrada = i_entrada;
CALL vn.rate_getPrices(dateShipment, warehouseLanding);
-- Traslado en almacen origen
DROP TEMPORARY TABLE IF EXISTS buy_edi_temp;
CREATE TEMPORARY TABLE buy_edi_temp
(KEY (Id_Article), INDEX(Id_Compra)) ENGINE = MEMORY
SELECT *
FROM (SELECT c.Id_Article, c.Id_Compra
FROM Compres c INNER JOIN Entradas e USING(Id_Entrada)
INNER JOIN travel t ON t.id = e.travel_id
WHERE t.landing BETWEEN vInventoryDate AND dateShipment
AND c.Novincular = FALSE
AND c.Tarifa2 >= 0
ORDER BY (warehouseShipment = t.warehouse_id) DESC, t.landing DESC
LIMIT 10000000000000000000) t
GROUP BY Id_Article;
IF dateShipment >= util.VN_CURDATE() THEN
CALL `cache`.visible_refresh(v_calc_visible, TRUE, warehouseShipment);
DROP TEMPORARY TABLE IF EXISTS tmp.item;
CREATE TEMPORARY TABLE tmp.item (
`itemFk` int(10) unsigned NOT NULL,
`visible` int(11) NOT NULL DEFAULT 0,
`available` int(11) NOT NULL DEFAULT 0,
`visibleLanding` int(11) NOT NULL DEFAULT 0,
`availableLanding` int(11) NOT NULL DEFAULT 0,
UNIQUE INDEX i USING HASH (itemFk)
) ENGINE = MEMORY;
INSERT INTO tmp.item(itemFk, visible)
SELECT item_id itemFk, visible
FROM `cache`.visible
WHERE calc_id = v_calc_visible
AND visible;
CALL `cache`.visible_refresh(v_calc_visible, TRUE, warehouseLanding);
INSERT INTO tmp.item(itemFk, visibleLanding)
SELECT item_id, `visible`
FROM `cache`.`visible` v
WHERE v.calc_id = v_calc_visible
AND v.`visible`
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
CALL availableTraslate(warehouseShipment, dateShipment, NULL);
INSERT INTO tmp.item(itemFk, available)
SELECT a.item_id, a.available
FROM availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE available = a.available;
CALL availableTraslate(warehouseLanding, dateLanding, warehouseShipment);
INSERT INTO tmp.item(itemFk, availableLanding)
SELECT a.item_id, a.available
FROM availableTraslate a
WHERE a.available
ON DUPLICATE KEY UPDATE availableLanding = a.available;
ELSE
CALL vn.item_getStock(warehouseShipment, dateShipment, NULL);
DROP TEMPORARY TABLE IF EXISTS tmp.item;
CREATE TEMPORARY TABLE tmp.item (UNIQUE INDEX i USING HASH (itemFk)) ENGINE = MEMORY
SELECT itemFk, `visible`, available , 0 visibleLanding, 0 availableLanding
FROM tmp.itemList;
DROP TEMPORARY TABLE tmp.itemList;
END IF;
CALL vn.buyUltimateFromInterval(warehouseLanding,vInventoryDate, dateLanding);
DROP TEMPORARY TABLE IF EXISTS Traslados;
CREATE TEMPORARY TABLE Traslados ENGINE = MEMORY
SELECT tp.Id_Tipo AS Tipo,
tp.reino_id,
ar.tipo_id,
ar.Id_Article AS article_id,
ar.Article,
ar.Medida,
ar.Categoria,
ar.Color,
Origen.abreviatura as Origen,
CE.Cantidad,
ar.Tallos,
CAST(AIM.visible AS DECIMAL(10,0)) as vis1,
CAST(AIM.available AS DECIMAL(10,0)) as dis1,
CAST(AIM.visibleLanding AS DECIMAL(10,0)) as vis2,
CAST(AIM.availableLanding AS DECIMAL(10,0)) as dis2,
COALESCE(CE.`grouping`, C.`grouping`) as `grouping`,
COALESCE(CE.Packing, C.Packing) as Packing,
COALESCE(cl.caja, CE.caja, C.caja) as caja,
IFNULL(p.name, P2.Alias) AS Productor,
C.Id_Cubo,
1 Tinta,
CE.Id_Compra,
CE.Etiquetas,
C.buy_edi_id,
tp.Id_Trabajador,
CB.Volumen,
IFNULL(CB.x,0) x,
IFNULL(CB.y,0) y,
IFNULL(CB.z,0) z,
IFNULL(C.Costefijo,0) Costefijo,
IFNULL(C.Comisionfija,0) Comisionfija,
IFNULL(C.Portefijo,0) Portefijo,
A.m3,
E.comision,
CB.Retornable,
IFNULL(CEB.Valor,CB.Valor) Valor,
r.rate3 t3, r.rate2 t2, tp.promo,
C.`grouping` groupingOrigin,
C.Packing PackingOrigin,
C.Id_Compra CompraOrigin,
CB.costeRetorno,
C.weight
FROM Articles ar
JOIN tmp.item AIM ON AIM.itemFk = ar.Id_Article
LEFT JOIN producer p ON p.producer_id = ar.producer_id
LEFT JOIN Tipos tp ON tp.tipo_id = ar.tipo_id
JOIN vn.itemCategory ic ON ic.id = tp.reino_id
LEFT JOIN Origen ON Origen.id = ar.id_origen
LEFT JOIN buy_edi_temp lb ON lb.Id_Article = ar.Id_Article
LEFT JOIN Compres C ON C.Id_Compra = lb.Id_Compra
LEFT JOIN Cubos CB ON CB.Id_Cubo = C.Id_Cubo
LEFT JOIN Entradas E2 ON E2.Id_Entrada = C.Id_Entrada
LEFT JOIN Proveedores P2 ON P2.Id_Proveedor = E2.Id_Proveedor
LEFT JOIN Entradas E ON E.Id_Entrada = i_entrada
LEFT JOIN travel TR ON TR.id = E.travel_id
LEFT JOIN Agencias A ON A.Id_Agencia = TR.agency_id
LEFT JOIN Compres CE ON CE.Id_Article = ar.Id_Article AND CE.Id_Entrada = i_entrada
LEFT JOIN Cubos CEB ON CEB.Id_Cubo = CE.Id_Cubo
LEFT JOIN tmp.rate r ON TRUE
LEFT JOIN tmp.buyUltimateFromInterval bufi ON bufi.itemFk = ar.Id_Article
LEFT JOIN Compres cl ON cl.Id_Compra = bufi.buyFk
WHERE ic.display
AND E.Redada = FALSE
AND (AIM.visible != 0 OR AIM.available != 0)
ORDER BY tipo_id, Article, article_id, Medida, Categoria, Origen;
CREATE INDEX tindex USING HASH ON Traslados (article_id);
SELECT t.*,
Cantidad - MOD(Cantidad , `grouping`) as Subcantidad,
MOD(Cantidad , `grouping`) as Soll,
ROUND((IF(Volumen > 0,Volumen,x * y * IF(z = 0, Medida + 10, z))) / Packing,0) as cm3,
Costefijo + Comisionfija + Portefijo AS Cost,
@porte := ROUND((IF(Volumen > 0,Volumen,x * y * IF(z = 0, Medida + 10, z))) * m3 / 1000000 / Packing ,3) AS Porte,
@comision := ROUND((Costefijo + Comisionfija + Portefijo) * comision / 100 ,3) AS Comision,
ROUND(@embalaje := (costeRetorno + IF(Retornable != 0, 0, Valor)) / packing ,3) AS Embalaje,
@coste := IFNULL((Costefijo + Comisionfija + Portefijo),0) + IFNULL(@embalaje,0) + IFNULL(@porte,0) + IFNULL(@comision,0) AS Coste,
@t3 := ROUND(@coste / ( (100 - t3 - t.promo)/100),2) AS Tarifa3,
ROUND(@t3 * (1 + ((t2 - t3)/100)),2) AS Tarifa2,
0 selected
FROM Traslados t;
DROP TEMPORARY TABLE Traslados;
DROP TEMPORARY TABLE tmp.item;
DROP TEMPORARY TABLE buy_edi_temp;
DROP TEMPORARY TABLE tmp.buyUltimateFromInterval;
DROP TEMPORARY TABLE tmp.rate;
END$$
DELIMITER ;

View File

@ -1,119 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`travelDetail`()
BEGIN
/**
* Returns the details of the travels that have a departure warehouse in Ecuador or Colombia.
*/
DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL 12 WEEK;
SELECT IFNULL(CONCAT(" ",Entrada),travel) travelAndEntry,
travel,
Entrada,
IsTravel,
Agencia,
ref,
shipment,
OrigenCajas,
landing,
Destino,
Etiquetas,
Notas_Eva,
kg,
loadedKg,
volumeKg,
loadPriority,
invoiceAmount,
Carguera,
reference
FROM
(SELECT TRUE IsTravel,
tr.id travel,
NULL Entrada,
ag.Agencia,
tr.ref,
tr.shipment,
wo.name OrigenCajas,
tr.landing,
w.name Destino,
SUM(c.Etiquetas) Etiquetas,
NULL Notas_Eva,
tr.kg,
CAST(SUM(c.weight * c.Etiquetas) AS INT) loadedkg,
CAST(
SUM(vc.aerealVolumetricDensity *
c.Etiquetas *
IF(cb.Volumen,
cb.Volumen,
cb.X * cb.Y * cb.Z
) / 1000000
) AS INT
) volumeKg,
NULL loadPriority,
NULL invoiceAmount,
pc.Alias Carguera,
NULL reference
FROM travel tr
LEFT JOIN Proveedores pc ON pc.Id_Proveedor = tr.cargoSupplierFk
LEFT JOIN Entradas e ON e.travel_id = tr.id
LEFT JOIN Compres c ON c.Id_Entrada = e.Id_Entrada
LEFT JOIN Cubos cb ON cb.Id_Cubo = c.Id_Cubo
LEFT JOIN Articles a ON a.Id_Article = c.Id_Article
LEFT JOIN Tipos tp ON tp.tipo_id = a.tipo_id
JOIN warehouse w ON w.id = tr.warehouse_id
JOIN warehouse wo ON wo.id = tr.warehouse_id_out
JOIN Agencias ag ON ag.Id_Agencia = tr.agency_id
JOIN vn.volumeConfig vc
WHERE tr.landing >= vDateFrom
AND (wo.name="Colombia" OR wo.name="Ecuador")
GROUP BY tr.id
UNION ALL
SELECT 0 IsTravel,
e.travel_id travel,
e.Id_Entrada,
p.Proveedor,
e.Referencia,
tr.shipment,
wo.name OrigenCajas,
tr.landing,
w.name Destino,
SUM(Etiquetas) Etiquetas,
e.Notas_Eva,
NULL kg,
CAST(SUM(c.weight * c.Etiquetas) AS INT) loadedkg,
CAST(
SUM(vc.aerealVolumetricDensity *
c.Etiquetas *
IF(cb.Volumen,
cb.Volumen,
cb.X * cb.Y * cb.Z
) / 1000000
) AS INT
) volumeKg,
loadPriority,
e.invoiceAmount,
pc.Alias carguera,
e.reference
FROM Entradas e
JOIN Compres c ON c.Id_Entrada = e.Id_Entrada
JOIN Cubos cb ON cb.Id_Cubo = c.Id_Cubo
JOIN Articles a ON a.Id_Article = c.Id_Article
JOIN Tipos tp ON tp.tipo_id = a.tipo_id
JOIN Proveedores p ON p.Id_Proveedor = e.Id_Proveedor
JOIN travel tr ON tr.id = e.travel_id
LEFT JOIN Proveedores pc ON pc.Id_Proveedor = tr.cargoSupplierFk
JOIN warehouse w ON w.id = tr.warehouse_id
JOIN warehouse wo ON wo.id = tr.warehouse_id_out
JOIN vn.volumeConfig vc
WHERE tr.landing >= vDateFrom
AND (wo.name="Colombia" OR wo.name="Ecuador")
GROUP BY e.Id_Entrada
) sub
ORDER BY landing ASC,
shipment ASC,
travel,
IsTravel DESC,
(loadPriority > 0) DESC,
loadPriority,
Agencia,
Notas_Eva;
END$$
DELIMITER ;

View File

@ -1,20 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`Facturas`
AS SELECT `io`.`id` AS `factura_id`,
`io`.`ref` AS `Id_Factura`,
`io`.`serial` AS `Serie`,
`io`.`issued` AS `Fecha`,
`io`.`amount` AS `Importe`,
`io`.`clientFk` AS `Id_Cliente`,
`io`.`created` AS `odbc_date`,
`io`.`companyFk` AS `empresa_id`,
`io`.`dued` AS `Vencimiento`,
`io`.`booked` AS `booked`,
`io`.`bankFk` AS `Id_Banco`,
`io`.`siiTypeInvoiceOutFk` AS `siiTypeInvoiceOutFk`,
`io`.`cplusTaxBreakFk` AS `cplusTaxBreakFk`,
`io`.`cplusSubjectOpFk` AS `cplusSubjectOpFk`,
`io`.`siiTrascendencyInvoiceOutFk` AS `siiTrascendencyInvoiceOutFk`,
`io`.`hasPdf` AS `pdf`
FROM `vn`.`invoiceOut` `io`

View File

@ -1,7 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`Gastos`
AS SELECT `e`.`id` AS `Id_Gasto`,
`e`.`name` AS `Gasto`,
`e`.`isWithheld` AS `isWithheld`
FROM `vn`.`expense` `e`

View File

@ -1,12 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`Greuges`
AS SELECT `g`.`Id` AS `Id`,
`g`.`clientFk` AS `Id_Cliente`,
`g`.`description` AS `Comentario`,
`g`.`amount` AS `Importe`,
`g`.`shipped` AS `Fecha`,
`g`.`created` AS `odbc_date`,
`g`.`greugeTypeFk` AS `Greuges_type_id`,
`g`.`ticketFk` AS `Id_Ticket`
FROM `vn`.`greuge` `g`

View File

@ -1,6 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`Greuges_type`
AS SELECT `gt`.`id` AS `Greuges_type_id`,
`gt`.`name` AS `name`
FROM `vn`.`greugeType` `gt`

View File

@ -1,8 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`Intrastat`
AS SELECT `i`.`id` AS `Codintrastat`,
`i`.`description` AS `Definicion`,
`i`.`taxClassFk` AS `iva_group_id`,
`i`.`taxCodeFk` AS `iva_codigo_id`
FROM `vn`.`intrastat` `i`

View File

@ -0,0 +1,9 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`credit`
AS SELECT `c`.`id` AS `id`,
`c`.`clientFk` AS `Id_Cliente`,
`c`.`workerFk` AS `Id_Trabajador`,
`c`.`amount` AS `amount`,
`c`.`created` AS `odbc_date`
FROM `vn`.`clientCredit` `c`

View File

@ -1,16 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`expeditions`
AS SELECT `e`.`id` AS `expeditions_id`,
`e`.`agencyModeFk` AS `agency_id`,
`e`.`ticketFk` AS `ticket_id`,
`e`.`freightItemFk` AS `EsBulto`,
`e`.`created` AS `odbc_date`,
`e`.`counter` AS `counter`,
`e`.`workerFk` AS `workerFk`,
`e`.`externalId` AS `externalId`,
`p`.`itemFk` AS `Id_article`
FROM (
`vn`.`expedition` `e`
LEFT JOIN `vn`.`packaging` `p` ON(`p`.`id` = `e`.`packagingFk`)
)

View File

@ -1,16 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`gestdoc`
AS SELECT `d`.`id` AS `id`,
`d`.`dmsTypeFk` AS `gesttip_id`,
`d`.`file` AS `file`,
`d`.`contentType` AS `contentType`,
`d`.`workerFk` AS `trabajador_id`,
`d`.`warehouseFk` AS `warehouse_id`,
`d`.`companyFk` AS `emp_id`,
`d`.`hardCopyNumber` AS `orden`,
`d`.`hasFile` AS `original`,
`d`.`reference` AS `sref`,
`d`.`description` AS `brief`,
`d`.`created` AS `odbc_date`
FROM `vn`.`dms` `d`

View File

@ -1,9 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`gesttip`
AS SELECT `g`.`id` AS `id`,
`g`.`name` AS `tipo`,
`g`.`readRoleFk` AS `readRoleFk`,
`g`.`writeRoleFk` AS `writeRoleFk`,
`g`.`code` AS `code`
FROM `vn`.`dmsType` `g`

View File

@ -1,13 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`intrastat_data`
AS SELECT `ii`.`id` AS `id`,
`ii`.`invoiceInFk` AS `recibida_id`,
`ii`.`net` AS `neto`,
`ii`.`intrastatFk` AS `intrastat_id`,
`ii`.`amount` AS `importe`,
`ii`.`stems` AS `unidades`,
`ii`.`countryFk` AS `Paises_Id`,
`ii`.`dated` AS `odbc_date`,
`ii`.`statisticalValue` AS `valorestadistico`
FROM `vn`.`invoiceInIntrastat` `ii`

View File

@ -1,9 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`invoiceCorrection`
AS SELECT `ic`.`correctingFk` AS `correctingFk`,
`ic`.`correctedFk` AS `correctedFk`,
`ic`.`cplusRectificationTypeFk` AS `cplusRectificationTypeFk`,
`ic`.`siiTypeInvoiceOutFk` AS `siiTypeInvoiceOutFk`,
`ic`.`invoiceCorrectionTypeFk` AS `invoiceCorrectionTypeFk`
FROM `vn`.`invoiceCorrection` `ic`

View File

@ -1,9 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`itemTag`
AS SELECT `i`.`id` AS `id`,
`i`.`itemFk` AS `itemFk`,
`i`.`tagFk` AS `tagFk`,
`i`.`value` AS `value`,
`i`.`priority` AS `priority`
FROM `vn`.`itemTag` `i`

View File

@ -1,20 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`item_entry_in`
AS SELECT `t`.`warehouse_id` AS `warehouse_id`,
`t`.`warehouse_id_out` AS `warehouse_id_out`,
`t`.`landing` AS `dat`,
`m`.`Id_Article` AS `item_id`,
`m`.`Cantidad` AS `amount`,
`t`.`received` AS `received`,
`e`.`Redada` AS `isVirtualStock`,
`e`.`Id_Entrada` AS `entryFk`
FROM (
(
`vn2008`.`Compres` `m`
JOIN `vn2008`.`Entradas` `e` ON(`m`.`Id_Entrada` = `e`.`Id_Entrada`)
)
JOIN `vn2008`.`travel` `t` ON(`e`.`travel_id` = `t`.`id`)
)
WHERE `e`.`Inventario` = 0
AND `m`.`Cantidad` <> 0

View File

@ -1,27 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`item_entry_out`
AS SELECT `t`.`warehouse_id_out` AS `warehouse_id`,
`t`.`shipment` AS `dat`,
`m`.`Id_Article` AS `item_id`,
- `m`.`Cantidad` AS `amount`,
`t`.`delivered` <> 0
OR IFNULL(`co`.`valor`, 0) AS `delivered`,
`e`.`Id_Entrada` AS `entryFk`
FROM (
(
(
`vn2008`.`Compres` `m`
JOIN `vn2008`.`Entradas` `e` ON(`m`.`Id_Entrada` = `e`.`Id_Entrada`)
)
JOIN `vn2008`.`travel` `t` ON(`e`.`travel_id` = `t`.`id`)
)
LEFT JOIN `vn2008`.`Compres_ok` `co` ON(
`co`.`Id_Compra` = `m`.`Id_Compra`
AND `co`.`Id_Accion` = 3
AND `co`.`valor` <> 0
)
)
WHERE `e`.`Inventario` = 0
AND `e`.`Redada` = 0
AND `m`.`Cantidad` <> 0

View File

@ -1,17 +0,0 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`item_out`
AS SELECT `t`.`warehouse_id` AS `warehouse_id`,
`t`.`Fecha` AS `dat`,
`m`.`Id_Article` AS `item_id`,
- `m`.`Cantidad` AS `amount`,
`m`.`OK` AS `ok`,
`m`.`Reservado` AS `Reservado`,
`t`.`Factura` AS `invoice`,
`m`.`Id_Movimiento` AS `saleFk`,
`m`.`Id_Ticket` AS `ticketFk`
FROM (
`vn2008`.`Movimientos` `m`
JOIN `vn2008`.`Tickets` `t` ON(`m`.`Id_Ticket` = `t`.`Id_Ticket`)
)
WHERE `m`.`Cantidad` <> 0

View File

@ -6,9 +6,11 @@ CHANGE COLUMN IF EXISTS `Id_Gasto` `expenseFk` varchar(10) DEFAULT NULL;
ALTER TABLE vn.balanceNestTree ALTER TABLE vn.balanceNestTree
MODIFY COLUMN IF EXISTS expenseFk varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL NULL; MODIFY COLUMN IF EXISTS expenseFk varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL NULL;
UPDATE vn.balanceNestTree UPDATE vn.balanceNestTree b
SET expenseFk = NULL LEFT JOIN vn.expense e ON e.id = b.expenseFk COLLATE utf8mb3_general_ci
WHERE expenseFk =''; SET b.expenseFk = NULL
WHERE b.expenseFk =''
OR (e.id IS NULL AND b.expenseFk IS NOT NULL);
ALTER TABLE IF EXISTS vn.balanceNestTree ADD CONSTRAINT balanceNestTree_expense_FK ALTER TABLE IF EXISTS vn.balanceNestTree ADD CONSTRAINT balanceNestTree_expense_FK
FOREIGN KEY (expenseFk) REFERENCES vn.expense(id) ON DELETE CASCADE ON UPDATE CASCADE; FOREIGN KEY (expenseFk) REFERENCES vn.expense(id) ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,15 @@
REVOKE SELECT ON TABLE vn2008.expeditions FROM employee;
REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE vn2008.Gastos FROM administrative;
REVOKE SELECT ON TABLE vn2008.Facturas FROM salesPerson;
REVOKE SELECT ON TABLE vn2008.Facturas FROM logistic;
REVOKE SELECT ON TABLE vn2008.Facturas FROM palletizer;
REVOKE SELECT ON TABLE vn2008.Facturas FROM hr;
REVOKE SELECT ON TABLE vn2008.gestdoc FROM employee;
REVOKE INSERT, UPDATE ON TABLE vn2008.gestdoc FROM administrative;
REVOKE DELETE ON TABLE vn2008.gestdoc FROM hr;
REVOKE SELECT ON TABLE vn2008.gesttip FROM employee;
REVOKE SELECT ON TABLE vn2008.Greuges FROM employee;
REVOKE SELECT ON TABLE vn2008.Greuges_type FROM financial;
REVOKE SELECT ON TABLE vn2008.intrastat_data FROM buyer;
REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE vn2008.intrastat_data FROM administrative;
REVOKE SELECT, INSERT ON TABLE vn2008.invoiceCorrection FROM administrative;

View File

@ -0,0 +1,17 @@
-- Para la tabla Monitoring
ALTER TABLE IF EXISTS vn2008.Monitoring RENAME vn2008.Monitoring__;
ALTER TABLE IF EXISTS vn2008.Monitoring__ COMMENT='refs #6371 deprecated 2024-01-11';
-- Para la tabla Movimientos_avisar
ALTER TABLE IF EXISTS vn2008.Movimientos_avisar RENAME vn2008.Movimientos_avisar__;
ALTER TABLE IF EXISTS vn2008.Movimientos_avisar__ COMMENT='refs #6371 deprecated 2024-01-11';
-- Para la tabla Movimientos_revisar
ALTER TABLE IF EXISTS vn2008.Movimientos_revisar RENAME vn2008.Movimientos_revisar__;
ALTER TABLE IF EXISTS vn2008.Movimientos_revisar__ COMMENT='refs #6371 deprecated 2024-01-11';
-- Para la tabla Proveedores_escritos
ALTER TABLE IF EXISTS vn2008.Proveedores_escritos RENAME vn2008.Proveedores_escritos__;
ALTER TABLE IF EXISTS vn2008.Proveedores_escritos__ COMMENT='refs #6371 deprecated 2024-01-11';

View File

@ -0,0 +1,35 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`supplier_statement`()
BEGIN
SELECT 1;
END$$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE vn.supplier_statement TO administrative, buyer, hrBoss;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`XDiario_check`()
BEGIN
SELECT 1;
END$$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE vn.XDiario_check TO adminBoss;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_getDetailFromContinent`()
BEGIN
SELECT 1;
END$$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE vn.travel_getDetailFromContinent TO buyer;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_getTransfer`()
BEGIN
SELECT 1;
END$$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE vn.entry_getTransfer TO claimManager, buyer;

View File

@ -0,0 +1,13 @@
ALTER TABLE vn.vehicle ADD supplierFk int(10) unsigned NULL COMMENT 'supplier from whom the vehicle was purchased';
ALTER TABLE vn.vehicle ADD CONSTRAINT vehicle_supplierFk FOREIGN KEY (supplierFk) REFERENCES vn.supplier(id);
ALTER TABLE vn.vehicle ADD import decimal(10,2) NULL;
ALTER TABLE vn.vehicle ADD supplierCoolerFk int(10) unsigned NULL;
ALTER TABLE vn.vehicle ADD CONSTRAINT vehicle_supplierCoolerFk FOREIGN KEY (supplierCoolerFk) REFERENCES vn.supplier(id) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE vn.vehicle ADD vin varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL;
ALTER TABLE vn.vehicle ADD bankPolicyFk int(11) NULL;
ALTER TABLE vn.vehicle ADD CONSTRAINT vehicle_bankPolicyFk FOREIGN KEY (bankPolicyFk) REFERENCES vn.bankPolicy(id) ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,6 @@
CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`credit`AS
SELECT 1;
GRANT SELECT ON TABLE vn2008.credit TO financialBoss;

View File

@ -0,0 +1 @@
DROP TABLE vn.timeControlDevice;

View File

@ -10,7 +10,7 @@ const Myt = require('@verdnatura/myt/myt');
const Run = require('@verdnatura/myt/myt-run'); const Run = require('@verdnatura/myt/myt-run');
const axios = require('axios'); const axios = require('axios');
const e2eConfig = require('./config.js'); const e2eConfig = require('./helpers/config.js');
const log = require('fancy-log'); const log = require('fancy-log');
process.on('warning', warning => { process.on('warning', warning => {
@ -23,11 +23,12 @@ async function test() {
const opts = getopts(process.argv.slice(2), { const opts = getopts(process.argv.slice(2), {
boolean: ['show'] boolean: ['show']
}); });
process.env.E2E_SHOW = opts.show; if (opts.show)
process.env.E2E_SHOW = true;
console.log('Building and running DB container.'); console.log('Building and running DB container.');
const myt = new Myt(); const myt = new Myt();
await myt.init({workspace: path.join(__dirname, '../..')}); await myt.init({workspace: path.join(__dirname, '..')});
await myt.run(Run); await myt.run(Run);
await myt.deinit(); await myt.deinit();

View File

@ -206,5 +206,6 @@
"Incorrect pin": "Incorrect pin.", "Incorrect pin": "Incorrect pin.",
"The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified", "The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
"Name should be uppercase": "Name should be uppercase", "Name should be uppercase": "Name should be uppercase",
"You cannot update these fields": "You cannot update these fields" "You cannot update these fields": "You cannot update these fields",
"CountryFK cannot be empty": "Country cannot be empty"
} }

View File

@ -337,8 +337,11 @@
"You already have the mailAlias": "Ya tienes este alias de correo", "You already have the mailAlias": "Ya tienes este alias de correo",
"The alias cant be modified": "Este alias de correo no puede ser modificado", "The alias cant be modified": "Este alias de correo no puede ser modificado",
"No tickets to invoice": "No hay tickets para facturar", "No tickets to invoice": "No hay tickets para facturar",
"This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado",
"Name should be uppercase": "El nombre debe ir en mayúscula", "Name should be uppercase": "El nombre debe ir en mayúscula",
"Bank entity must be specified": "La entidad bancaria es obligatoria", "Bank entity must be specified": "La entidad bancaria es obligatoria",
"An email is necessary": "Es necesario un email", "An email is necessary": "Es necesario un email",
"You cannot update these fields": "No puedes actualizar estos campos" "You cannot update these fields": "No puedes actualizar estos campos",
"CountryFK cannot be empty": "El país no puede estar vacío",
"Cmr file does not exist": "El archivo del cmr no existe"
} }

View File

@ -0,0 +1,89 @@
const {Email} = require('vn-print');
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethodCtx('cmrEmail', {
description: 'Sends the email with an cmr attached PDF',
accessType: 'WRITE',
accepts: [
{
arg: 'tickets',
type: ['number'],
required: true,
description: 'The ticket id',
}
],
http: {
path: '/cmrEmail',
verb: 'POST'
}
});
Self.cmrEmail = async function(ctx, tickets, options) {
const models = Self.app.models;
const myOptions = {};
let tx;
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
for (const ticketId of tickets) {
const ticket = await models.Ticket.findOne({
where: {
id: ticketId
},
include: [{
relation: 'client',
fields: ['email']
}]
}, myOptions);
const recipient = ticket.client().email;
if (!recipient)
throw new UserError('There is no assigned email for this client');
const dms = await models.TicketDms.findOne({
where: {ticketFk: ticketId},
include: [{
relation: 'dms',
fields: ['id'],
scope: {
relation: 'dmsType',
scope: {
where: {code: 'cmr'}
}
}
}]
}, myOptions);
if (!dms) throw new UserError('Cmr file does not exist');
const response = await models.Dms.downloadFile(ctx, dms.id);
const email = new Email('cmr', {
ticketId,
lang: ctx.req.getLocale(),
recipient
});
await email.send({
overrideAttachments: true,
attachments: [{
filename: `${ticket.cmrFk}.pdf`,
content: response[0]
}]
});
}
if (tx) await tx.commit();
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};

View File

@ -1,6 +1,4 @@
const JSZip = require('jszip'); const JSZip = require('jszip');
const axios = require('axios');
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('downloadCmrsZip', { Self.remoteMethodCtx('downloadCmrsZip', {
@ -37,35 +35,20 @@ module.exports = Self => {
Self.downloadCmrsZip = async function(ctx, ids, options) { Self.downloadCmrsZip = async function(ctx, ids, options) {
const models = Self.app.models; const models = Self.app.models;
const myOptions = {}; const myOptions = {};
const token = ctx.req.accessToken;
const zip = new JSZip(); const zip = new JSZip();
if (typeof options == 'object') if (typeof options == 'object')
Object.assign(myOptions, options); Object.assign(myOptions, options);
const zipConfig = await models.ZipConfig.findOne(null, myOptions);
let totalSize = 0;
ids = ids.split(','); ids = ids.split(',');
try {
for (let id of ids) {
if (zipConfig && totalSize > zipConfig.maxSize) throw new UserError('Files are too large');
const response = await axios.get(
`${ctx.req.headers.referer}api/Routes/${id}/cmr?access_token=${token.id}`, {
...myOptions,
responseType: 'arraybuffer',
});
if (response.headers['content-type'] !== 'application/pdf') for (const id of ids) {
throw new UserError(`The response is not a PDF`); ctx.args = ctx.args || {};
ctx.args.id = Number(id);
zip.file(`${id}.pdf`, response.data, { binary: true }); const [data] = await models.Route.cmr(ctx, myOptions);
zip.file(`${id}.pdf`, data, {binary: true});
} }
const zipStream = zip.generateNodeStream({streamFiles: true});
const zipStream = zip.generateNodeStream({ streamFiles: true });
return [zipStream, 'application/zip', `filename="cmrs.zip"`]; return [zipStream, 'application/zip', `filename="cmrs.zip"`];
} catch (e) {
throw e;
}
}; };
}; };

View File

@ -1,3 +1,4 @@
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('driverRouteEmail', { Self.remoteMethodCtx('driverRouteEmail', {
description: 'Sends the driver route email with an attached PDF', description: 'Sends the driver route email with an attached PDF',
@ -9,24 +10,14 @@ module.exports = Self => {
required: true, required: true,
description: 'The client id', description: 'The client id',
http: {source: 'path'} http: {source: 'path'}
}, }, {
{
arg: 'recipient',
type: 'string',
description: 'The recipient email',
required: true,
},
{
arg: 'replyTo', arg: 'replyTo',
type: 'string', type: 'string',
description: 'The sender email to reply to', description: 'The sender email to reply to',
required: false }, {
},
{
arg: 'recipientId', arg: 'recipientId',
type: 'number', type: 'number',
description: 'The recipient id to send to the recipient preferred language', description: 'The recipient id to send to the recipient preferred language',
required: false
} }
], ],
returns: { returns: {
@ -39,5 +30,28 @@ module.exports = Self => {
} }
}); });
Self.driverRouteEmail = ctx => Self.sendTemplate(ctx, 'driver-route'); Self.driverRouteEmail = async(ctx, id) => {
const models = Self.app.models;
const {workerFk, agencyMode} = await Self.findById(id, {
fields: ['workerFk', 'agencyModeFk'],
include: {relation: 'agencyMode'}
});
const {reportMail} = agencyMode();
let user;
let account;
if (workerFk) {
user = await models.VnUser.findById(workerFk, {
fields: ['active', 'id'],
include: {relation: 'emailUser'}
});
account = await models.Account.findById(workerFk);
}
if (user?.active && account) ctx.args.recipient = user.emailUser().email;
else ctx.args.recipient = reportMail;
if (!ctx.args.recipient) throw new UserError('An email is necessary');
return Self.sendTemplate(ctx, 'driver-route');
};
}; };

View File

@ -1,5 +1,5 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; const {ParameterizedSQL} = require('loopback-connector');
module.exports = Self => { module.exports = Self => {
Self.remoteMethod('getTickets', { Self.remoteMethod('getTickets', {
@ -83,13 +83,15 @@ module.exports = Self => {
const where = filter.where; const where = filter.where;
where['r.id'] = filter.id; where['r.id'] = filter.id;
where.and = [{or: [
{'t.packages': {gt: 0}},
{and: [{'ot.code': 'delivery'}, {'tob.observationTypeFk': {neq: null}}]}
]}];
stmt.merge(conn.makeWhere(filter.where)); stmt.merge(conn.makeWhere(filter.where));
stmt.merge(conn.makeGroupBy('t.id')); stmt.merge(conn.makeGroupBy('t.id'));
stmt.merge(conn.makeOrderBy(filter.order)); stmt.merge(conn.makeOrderBy(filter.order));
const tickets = await conn.executeStmt(stmt, myOptions); return conn.executeStmt(stmt, myOptions);
return tickets;
}; };
}; };

View File

@ -0,0 +1,25 @@
const models = require('vn-loopback/server/server').models;
describe('route downloadCmrsZip()', () => {
it('should create a zip file with the given cmr ids', async() => {
const tx = await models.Route.beginTransaction({});
const ctx = {
req: {
getLocale: () => {
return 'en';
},
accessToken: {userId: 9}
}
};
let cmrs = '1,2';
try {
const stream = await models.Route.downloadCmrsZip(ctx, cmrs);
expect(stream[0]).toBeDefined();
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -0,0 +1,58 @@
{
"name": "Cmr",
"base": "VnModel",
"options": {
"mysql": {
"table": "cmr"
}
},
"properties": {
"id": {
"type": "number",
"id": true,
"description": "Identifier"
},
"truckPlate": {
"type": "number"
},
"observations": {
"type": "string"
},
"senderInstrucctions": {
"type": "string"
},
"paymentInstruccions": {
"type": "string"
},
"specialAgreements": {
"type": "string"
},
"created": {
"type": "date"
},
"companyFk": {
"type": "number"
},
"addressToFk": {
"type": "number"
},
"addressFromFk": {
"type": "number"
},
"supplierFk": {
"type": "number"
},
"packagesList": {
"type": "string"
},
"merchandiseDetail": {
"type": "string"
},
"landed": {
"type": "date"
},
"ead": {
"type": "date"
}
}
}

View File

@ -17,6 +17,7 @@ module.exports = Self => {
require('../methods/route/cmr')(Self); require('../methods/route/cmr')(Self);
require('../methods/route/getExternalCmrs')(Self); require('../methods/route/getExternalCmrs')(Self);
require('../methods/route/downloadCmrsZip')(Self); require('../methods/route/downloadCmrsZip')(Self);
require('../methods/route/cmrEmail')(Self);
require('../methods/route/getExpeditionSummary')(Self); require('../methods/route/getExpeditionSummary')(Self);
require('../methods/route/getByWorker')(Self); require('../methods/route/getByWorker')(Self);

View File

@ -22,7 +22,6 @@
label="Vehicle" label="Vehicle"
ng-model="$ctrl.route.vehicleFk" ng-model="$ctrl.route.vehicleFk"
url="Vehicles" url="Vehicles"
where="{warehouseFk: $ctrl.vnConfig.warehouseFk}"
show-field="numberPlate"> show-field="numberPlate">
</vn-autocomplete> </vn-autocomplete>
<vn-autocomplete <vn-autocomplete

View File

@ -0,0 +1,86 @@
const {Readable} = require('stream');
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethodCtx('saveCmr', {
description: 'Save cmr',
accessType: 'WRITE',
accepts: [
{
arg: 'tickets',
type: ['number'],
required: true,
description: 'The tickets'
}
],
http: {
path: `/saveCmr`,
verb: 'POST'
}
});
Self.saveCmr = async(ctx, tickets, options) => {
const models = Self.app.models;
const myOptions = {userId: ctx.req.accessToken.userId};
let tx;
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
const dmsTypeCmr = await models.DmsType.findOne({
where: {code: 'cmr'},
fields: ['id']
}, myOptions);
for (const ticketId of tickets) {
const ticket = await models.Ticket.findById(ticketId, myOptions);
if (ticket.cmrFk) {
const hasDmsCmr = await models.TicketDms.findOne({
where: {ticketFk: ticketId},
include: {
relation: 'dms',
fields: ['dmsFk'],
scope: {
where: {dmsTypeFk: dmsTypeCmr.id}
}
}
}, myOptions);
if (hasDmsCmr?.dms())
throw new UserError('This ticket already has a cmr saved');
ctx.args.id = ticket.cmrFk;
const response = await models.Route.cmr(ctx, myOptions);
const pdfStream = Readable.from(Buffer.from(response[0]));
const data = {
workerFk: ctx.req.accessToken.userId,
dmsTypeFk: dmsTypeCmr.id,
companyFk: ticket.companyFk,
warehouseFk: ticket.warehouseFk,
reference: ticket.id,
contentType: 'application/pdf',
hasFile: true
};
const dms = await models.Dms.createFromStream(data, 'pdf', pdfStream, myOptions);
await models.TicketDms.create({
ticketFk: ticketId,
dmsFk: dms.id
}, myOptions);
}
}
if (tx) await tx.commit();
return;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};

View File

@ -33,8 +33,8 @@ module.exports = Self => {
const models = Self.app.models; const models = Self.app.models;
const myOptions = {userId: ctx.req.accessToken.userId}; const myOptions = {userId: ctx.req.accessToken.userId};
let tx; let tx;
let dms; let ticket;
let gestDocCreated = false; let externalTickets = [];
if (typeof options == 'object') if (typeof options == 'object')
Object.assign(myOptions, options); Object.assign(myOptions, options);
@ -44,6 +44,11 @@ module.exports = Self => {
myOptions.transaction = tx; myOptions.transaction = tx;
} }
const dmsTypeTicket = await models.DmsType.findOne({
where: {code: 'ticket'},
fields: ['id']
}, myOptions);
async function setLocation(ticketId) { async function setLocation(ticketId) {
await models.Delivery.create({ await models.Delivery.create({
ticketFk: ticketId, ticketFk: ticketId,
@ -53,102 +58,106 @@ module.exports = Self => {
}, myOptions); }, myOptions);
} }
async function gestDocExists(ticketId) { async function hasSignDms(ticketId) {
const ticketDms = await models.TicketDms.findOne({ const ticketDms = await models.TicketDms.findOne({
where: {ticketFk: ticketId}, where: {ticketFk: ticketId},
fields: ['dmsFk']
}, myOptions);
if (!ticketDms) return false;
const ticket = await models.Ticket.findById(ticketId, {fields: ['isSigned']}, myOptions);
if (ticket.isSigned == true)
return true;
else
await models.Dms.destroyAll({where: {reference: ticketId}}, myOptions);
return false;
}
async function createGestDoc(id) {
const ticket = await models.Ticket.findById(id,
{
include: [ include: [
{ {
relation: 'warehouse', relation: 'dms',
fields: ['id'],
scope: { scope: {
fields: ['id'] where: {dmsTypeFk: dmsTypeTicket.id}
} }
}, { }
relation: 'client', ]
}, myOptions);
if (ticketDms?.dms()?.id) return true;
}
async function createGestDoc() {
const ctxUploadFile = Object.assign({}, ctx);
ctxUploadFile.args = {
warehouseId: ticket.warehouseFk,
companyId: ticket.companyFk,
dmsTypeId: dmsTypeTicket.id,
reference: ticket.id,
description: `Firma del cliente - Ruta ${ticket.route().id}`,
contentType: 'image/png',
hasFile: true
};
const dms = await models.Dms.uploadFile(ctxUploadFile, myOptions);
await models.TicketDms.create({ticketFk: ticket.id, dmsFk: dms[0].id}, myOptions);
}
try {
for (const ticketId of tickets) {
ticket = await models.Ticket.findById(ticketId, {
include: [{
relation: 'address',
scope: { scope: {
fields: ['name'] include: {
relation: 'province',
scope: {
include: {
relation: 'country',
scope: {
fields: ['code']
}
}
}
}
} }
}, { }, {
relation: 'route', relation: 'route',
scope: { scope: {
fields: ['id'] fields: ['id']
} }
} }]
]
}, myOptions); }, myOptions);
const dmsType = await models.DmsType.findOne({where: {code: 'Ticket'}, fields: ['id']}, myOptions);
const ctxUploadFile = Object.assign({}, ctx);
if (ticket.route() === null)
throw new UserError('Ticket without route');
ctxUploadFile.args = {
warehouseId: ticket.warehouseFk,
companyId: ticket.companyFk,
dmsTypeId: dmsType.id,
reference: '',
description: `Firma del cliente - Ruta ${ticket.route().id}`,
hasFile: false
};
dms = await models.Dms.uploadFile(ctxUploadFile, myOptions);
gestDocCreated = true;
}
try { const ticketState = await models.TicketState.findOne({
for (const ticketId of tickets) { where: {ticketFk: ticketId},
const ticketState = await models.TicketState.findOne(
{where: {ticketFk: ticketId},
fields: ['alertLevel'] fields: ['alertLevel']
}, myOptions); }, myOptions);
const packedAlertLevel = await models.AlertLevel.findOne({where: {code: 'PACKED'}, const packedAlertLevel = await models.AlertLevel.findOne({
where: {code: 'PACKED'},
fields: ['id'] fields: ['id']
}, myOptions); }, myOptions);
if (!ticketState) if (!ticketState)
throw new UserError('Ticket does not exist'); throw new UserError('Ticket does not exist');
if (!ticket.route())
throw new UserError('Ticket without route');
if (ticketState.alertLevel < packedAlertLevel.id) if (ticketState.alertLevel < packedAlertLevel.id)
throw new UserError('This ticket cannot be signed because it has not been boxed'); throw new UserError('This ticket cannot be signed because it has not been boxed');
if (await gestDocExists(ticketId)) if (await ticket.isSigned)
throw new UserError('Ticket is already signed'); throw new UserError('Ticket is already signed');
if (location) await setLocation(ticketId); if (location) await setLocation(ticketId);
if (!gestDocCreated) await createGestDoc(ticketId); if (!await hasSignDms(ticketId))
await models.TicketDms.create({ticketFk: ticketId, dmsFk: dms[0].id}, myOptions); await createGestDoc(ticketId);
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
await ticket.updateAttribute('isSigned', true, myOptions); await ticket.updateAttribute('isSigned', true, myOptions);
const deliveryState = await models.State.findOne({ const deliveryState = await models.State.findOne({
where: { where: {code: 'DELIVERED'}
code: 'DELIVERED'
}
}, myOptions); }, myOptions);
await models.Ticket.state(ctx, { await models.Ticket.state(ctx, {
ticketFk: ticketId, ticketFk: ticketId,
stateFk: deliveryState.id stateFk: deliveryState.id
}, myOptions); }, myOptions);
}
if (ticket?.address()?.province()?.country()?.code != 'ES') {
await models.Ticket.saveCmr(ctx, [ticketId], myOptions);
externalTickets.push(ticketId);
}
}
if (tx) await tx.commit(); if (tx) await tx.commit();
return;
} catch (e) { } catch (e) {
if (tx) await tx.rollback(); if (tx) await tx.rollback();
throw e; throw e;
} }
await models.Route.cmrEmail(ctx, externalTickets);
}; };
}; };

View File

@ -0,0 +1,41 @@
const models = require('vn-loopback/server/server').models;
describe('ticket saveCmr()', () => {
it(`should save cmr`, async() => {
const tx = await models.Ticket.beginTransaction({});
const ctx = {
req: {
getLocale: () => {
return 'en';
},
accessToken: {userId: 9}
},
args: {}
};
try {
const options = {transaction: tx};
const ticket = [2];
await models.Ticket.saveCmr(ctx, ticket, options);
const hasDmsCmr = await models.TicketDms.findOne({
where: {ticketFk: ticket[0]},
include: [{
relation: 'dms',
fields: ['id'],
scope: {
relation: 'dmsType',
scope: {
where: {code: 'cmr'}
}
}
}]
}, options);
expect(hasDmsCmr?.dms()?.id).toBeGreaterThanOrEqual(1);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -1,14 +1,11 @@
const models = require('vn-loopback/server/server').models; const models = require('vn-loopback/server/server').models;
describe('Ticket saveSign()', () => { describe('Ticket saveSign()', () => {
const FormData = require('form-data');
const data = new FormData();
let ctx = {req: { let ctx = {req: {
accessToken: {userId: 9}, getLocale: () => {
headers: { return 'en';
...data.getHeaders() },
} accessToken: {userId: 9}
}}; }};
it(`should throw error if the ticket's alert level is lower than 2`, async() => { it(`should throw error if the ticket's alert level is lower than 2`, async() => {
@ -17,9 +14,9 @@ describe('Ticket saveSign()', () => {
let error; let error;
try { try {
const options = {transaction: tx}; const options = {transaction: tx};
ctx.args = {tickets: [ticketWithOkState]}; const tickets = [ticketWithOkState];
await models.Ticket.saveSign(ctx, options); await models.Ticket.saveSign(ctx, tickets, options);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {

View File

@ -41,6 +41,7 @@ module.exports = function(Self) {
require('../methods/ticket/collectionLabel')(Self); require('../methods/ticket/collectionLabel')(Self);
require('../methods/ticket/expeditionPalletLabel')(Self); require('../methods/ticket/expeditionPalletLabel')(Self);
require('../methods/ticket/saveSign')(Self); require('../methods/ticket/saveSign')(Self);
require('../methods/ticket/saveCmr')(Self);
require('../methods/ticket/invoiceTickets')(Self); require('../methods/ticket/invoiceTickets')(Self);
require('../methods/ticket/invoiceTicketsAndPdf')(Self); require('../methods/ticket/invoiceTicketsAndPdf')(Self);
require('../methods/ticket/docuwareDownload')(Self); require('../methods/ticket/docuwareDownload')(Self);

View File

@ -66,6 +66,9 @@
}, },
"weight": { "weight": {
"type": "number" "type": "number"
},
"cmrFk": {
"type": "number"
} }
}, },
"relations": { "relations": {
@ -139,6 +142,11 @@
"type": "belongsTo", "type": "belongsTo",
"model": "Zone", "model": "Zone",
"foreignKey": "zoneFk" "foreignKey": "zoneFk"
},
"cmrFk": {
"type": "belongsTo",
"model": "Cmr",
"foreignKey": "cmrFk"
} }
} }
} }

View File

@ -105,14 +105,11 @@
"yaml-loader": "^0.5.0" "yaml-loader": "^0.5.0"
}, },
"scripts": { "scripts": {
"dbtest": "nodemon -q db/tests.js -w db/tests",
"test:back": "nodemon -q back/tests.js --config back/nodemonConfig.json", "test:back": "nodemon -q back/tests.js --config back/nodemonConfig.json",
"test:back:ci": "node back/tests.js --ci --junit --network jenkins", "test:e2e": "node e2e/tests.js",
"test:e2e": "node e2e/helpers/tests.js",
"test:front": "jest --watch", "test:front": "jest --watch",
"back": "nodemon --inspect -w modules ./node_modules/gulp/bin/gulp.js back", "back": "nodemon --inspect -w modules ./node_modules/gulp/bin/gulp.js back",
"lint": "eslint ./ --cache --ignore-pattern .gitignore", "lint": "eslint ./ --cache --ignore-pattern .gitignore"
"docker": "docker build --progress=plain -t salix-db ./db"
}, },
"jest": { "jest": {
"projects": [ "projects": [

View File

@ -35,7 +35,8 @@ module.exports = {
logger.error(`[Print] => ${err.message}`); logger.error(`[Print] => ${err.message}`);
}); });
cluster.on('queue', () => logger.info('Printing task initialized by pool')); cluster.on('queue', () =>
process.env.SPEC_IS_RUNNING === 'false' && logger.info('Printing task initialized by pool'));
}); });
} }
}; };

View File

@ -0,0 +1,11 @@
const Stylesheet = require(`vn-print/core/stylesheet`);
const path = require('path');
const vnPrintPath = path.resolve('print');
module.exports = new Stylesheet([
`${vnPrintPath}/common/css/spacing.css`,
`${vnPrintPath}/common/css/misc.css`,
`${vnPrintPath}/common/css/layout.css`,
`${vnPrintPath}/common/css/email.css`])
.mergeStyles();

View File

@ -0,0 +1,6 @@
[
{
"filename": "cmr.pdf",
"component": "cmr"
}
]

View File

@ -0,0 +1,12 @@
<email-body v-bind="$props">
<div class="grid-row">
<div class="grid-block vn-pa-ml">
<h1>{{ $t('title') }}</h1>
<p>{{$t('dear')}},</p>
<p v-html="$t('description', [cmr.id, cmr.ticketFk])"></p>
<p v-html="$t('poll')"></p>
<p v-html="$t('help')"></p>
<p v-html="$t('conclusion')"></p>
</div>
</div>
</email-body>

View File

@ -0,0 +1,22 @@
const Component = require(`vn-print/core/component`);
const emailBody = new Component('email-body');
module.exports = {
name: 'cmr',
async serverPrefetch() {
this.cmr = await this.fetchCmr(this.ticketId);
},
methods: {
fetchCmr(ticketId) {
return this.findOneFromDef('cmr', [ticketId]);
},
},
components: {
'email-body': emailBody.build(),
},
props: {
ticketId: {
type: Number,
required: true
}
}
};

View File

@ -0,0 +1,9 @@
subject: Your CMR
title: Your CMR
dear: Dear Customer
description: The CMR <strong>{0}</strong> corresponding to order <strong>{1}</strong> is now available. <br/>
You can download it by clicking on the attachment in this email.
poll: If you wish, you can respond to our satisfaction survey to
help us provide better service. Your opinion is very important to us!
help: If you have any doubts, do not hesitate to ask, <strong>we are here to serve you!</strong>
conclusion: Thank you for your attention!

View File

@ -0,0 +1,9 @@
subject: Tu CMR
title: Tu CMR
dear: Estimado cliente
description: Ya está disponible el CMR <strong>{0}</strong> correspondiente al pedido <strong>{1}</strong>. <br/>
Puedes descargarla haciendo clic en el adjunto de este correo.
poll: Si lo deseas, puedes responder a nuestra encuesta de satisfacción para
ayudarnos a prestar un mejor servicio. ¡Tu opinión es muy importante para nosotros!
help: Cualquier duda que te surja, no dudes en consultarla, <strong>¡estamos para atenderte!</strong>
conclusion: ¡Gracias por tu atención!

Some files were not shown because too many files have changed in this diff Show More