7525-devToTest #2542
|
@ -24,6 +24,7 @@ node {
|
||||||
FROM_GIT = env.JOB_NAME.startsWith('gitea/')
|
FROM_GIT = env.JOB_NAME.startsWith('gitea/')
|
||||||
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
|
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
|
||||||
RUN_BUILD = PROTECTED_BRANCH && FROM_GIT
|
RUN_BUILD = PROTECTED_BRANCH && FROM_GIT
|
||||||
|
|
||||||
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
||||||
echo "NODE_NAME: ${env.NODE_NAME}"
|
echo "NODE_NAME: ${env.NODE_NAME}"
|
||||||
echo "WORKSPACE: ${env.WORKSPACE}"
|
echo "WORKSPACE: ${env.WORKSPACE}"
|
||||||
|
@ -59,7 +60,6 @@ pipeline {
|
||||||
}
|
}
|
||||||
environment {
|
environment {
|
||||||
PROJECT_NAME = 'salix'
|
PROJECT_NAME = 'salix'
|
||||||
STACK_NAME = "${env.PROJECT_NAME}-${env.BRANCH_NAME}"
|
|
||||||
}
|
}
|
||||||
stages {
|
stages {
|
||||||
stage('Install') {
|
stage('Install') {
|
||||||
|
@ -203,19 +203,23 @@ pipeline {
|
||||||
sh 'npx myt push $NODE_ENV --force --commit'
|
sh 'npx myt push $NODE_ENV --force --commit'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Docker') {
|
stage('Kubernetes') {
|
||||||
when {
|
when {
|
||||||
expression { FROM_GIT }
|
expression { FROM_GIT }
|
||||||
}
|
}
|
||||||
environment {
|
|
||||||
DOCKER_HOST = "${env.SWARM_HOST}"
|
|
||||||
}
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
def packageJson = readJSON file: 'package.json'
|
def packageJson = readJSON file: 'package.json'
|
||||||
env.VERSION = packageJson.version
|
env.VERSION = packageJson.version
|
||||||
}
|
}
|
||||||
sh "docker stack deploy --with-registry-auth --compose-file docker-compose.yml ${env.STACK_NAME}"
|
withKubeConfig([
|
||||||
|
serverUrl: "$KUBERNETES_API",
|
||||||
|
credentialsId: 'kubernetes',
|
||||||
|
namespace: 'salix'
|
||||||
|
]) {
|
||||||
|
sh 'kubectl set image deployment/salix-back-$BRANCH_NAME salix-back-$BRANCH_NAME=$REGISTRY/salix-back:$VERSION'
|
||||||
|
sh 'kubectl set image deployment/salix-front-$BRANCH_NAME salix-front-$BRANCH_NAME=$REGISTRY/salix-front:$VERSION'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,16 @@ Required applications.
|
||||||
* Node.js
|
* Node.js
|
||||||
* Docker
|
* Docker
|
||||||
* Git
|
* Git
|
||||||
|
* MYT
|
||||||
|
|
||||||
You will need to install globally the following items.
|
You will need to install globally the following items.
|
||||||
```
|
```
|
||||||
$ sudo npm install -g jest gulp-cli
|
$ sudo npm install -g jest gulp-cli
|
||||||
```
|
```
|
||||||
|
After installing MYT you will need the following item.
|
||||||
|
```
|
||||||
|
$ apt install libkrb5-dev libssl-dev
|
||||||
|
```
|
||||||
|
|
||||||
## Installing dependencies and launching
|
## Installing dependencies and launching
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('sendCheckingPresence', {
|
Self.remoteMethodCtx('sendCheckingPresence', {
|
||||||
description: 'Creates a message in the chat model checking the user status',
|
description: 'Creates a message in the chat model checking the user status',
|
||||||
|
@ -37,7 +39,7 @@ module.exports = Self => {
|
||||||
if (!recipient)
|
if (!recipient)
|
||||||
throw new Error(`Could not send message "${message}" to worker id ${recipientId} from user ${userId}`);
|
throw new Error(`Could not send message "${message}" to worker id ${recipientId} from user ${userId}`);
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'test')
|
if (!isProduction())
|
||||||
message = `[Test:Environment to user ${userId}] ` + message;
|
message = `[Test:Environment to user ${userId}] ` + message;
|
||||||
|
|
||||||
const chat = await models.Chat.create({
|
const chat = await models.Chat.create({
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('sendQueued', {
|
Self.remoteMethodCtx('sendQueued', {
|
||||||
description: 'Send a RocketChat message',
|
description: 'Send a RocketChat message',
|
||||||
|
@ -94,7 +96,7 @@ module.exports = Self => {
|
||||||
* @return {Promise} - The request promise
|
* @return {Promise} - The request promise
|
||||||
*/
|
*/
|
||||||
Self.sendMessage = async function sendMessage(senderFk, recipient, message) {
|
Self.sendMessage = async function sendMessage(senderFk, recipient, message) {
|
||||||
if (process.env.NODE_ENV !== 'production') {
|
if (!isProduction(false)) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
return resolve({
|
return resolve({
|
||||||
statusCode: 200,
|
statusCode: 200,
|
||||||
|
@ -149,7 +151,7 @@ module.exports = Self => {
|
||||||
* @return {Promise} - The request promise
|
* @return {Promise} - The request promise
|
||||||
*/
|
*/
|
||||||
Self.getUserStatus = async function getUserStatus(username) {
|
Self.getUserStatus = async function getUserStatus(username) {
|
||||||
if (process.env.NODE_ENV !== 'production') {
|
if (!isProduction(false)) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
return resolve({
|
return resolve({
|
||||||
data: {
|
data: {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('deleteTrashFiles', {
|
Self.remoteMethod('deleteTrashFiles', {
|
||||||
|
@ -22,7 +23,7 @@ module.exports = Self => {
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'test')
|
if (!isProduction())
|
||||||
throw new UserError(`Action not allowed on the test environment`);
|
throw new UserError(`Action not allowed on the test environment`);
|
||||||
|
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('upload', {
|
Self.remoteMethodCtx('upload', {
|
||||||
|
@ -119,7 +120,7 @@ module.exports = Self => {
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
if (process.env.NODE_ENV != 'production')
|
if (!isProduction(false))
|
||||||
throw new UserError('Action not allowed on the test environment');
|
throw new UserError('Action not allowed on the test environment');
|
||||||
|
|
||||||
// delete old
|
// delete old
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('scrub', {
|
Self.remoteMethod('scrub', {
|
||||||
|
@ -43,8 +44,7 @@ module.exports = Self => {
|
||||||
Self.scrub = async function(collection, remove, limit, dryRun, skipLock) {
|
Self.scrub = async function(collection, remove, limit, dryRun, skipLock) {
|
||||||
const $ = Self.app.models;
|
const $ = Self.app.models;
|
||||||
|
|
||||||
const env = process.env.NODE_ENV;
|
dryRun = dryRun || !isProduction(false);
|
||||||
dryRun = dryRun || (env && env !== 'production');
|
|
||||||
|
|
||||||
const instance = await $.ImageCollection.findOne({
|
const instance = await $.ImageCollection.findOne({
|
||||||
fields: ['id'],
|
fields: ['id'],
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
const fs = require('fs/promises');
|
const fs = require('fs/promises');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('upload', {
|
Self.remoteMethodCtx('upload', {
|
||||||
|
@ -41,7 +42,7 @@ module.exports = Self => {
|
||||||
if (!hasWriteRole)
|
if (!hasWriteRole)
|
||||||
throw new UserError(`You don't have enough privileges`);
|
throw new UserError(`You don't have enough privileges`);
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'test')
|
if (!isProduction())
|
||||||
throw new UserError(`Action not allowed on the test environment`);
|
throw new UserError(`Action not allowed on the test environment`);
|
||||||
|
|
||||||
// Upload file to temporary path
|
// Upload file to temporary path
|
||||||
|
|
|
@ -39,8 +39,6 @@ module.exports = Self => {
|
||||||
const xmlString = response.data;
|
const xmlString = response.data;
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
|
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
|
||||||
const [resultElement] = xmlDoc.getElementsByTagName('Mensaje');
|
return xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
|
||||||
|
|
||||||
return resultElement.textContent;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -42,7 +42,8 @@ module.exports = Self => {
|
||||||
throw new UserError(`Some mrwConfig parameters are not set`);
|
throw new UserError(`Some mrwConfig parameters are not set`);
|
||||||
|
|
||||||
const query =
|
const query =
|
||||||
`SELECT CASE co.code
|
`SELECT
|
||||||
|
CASE co.code
|
||||||
WHEN 'ES' THEN a.postalCode
|
WHEN 'ES' THEN a.postalCode
|
||||||
WHEN 'PT' THEN LEFT(a.postalCode, 4)
|
WHEN 'PT' THEN LEFT(a.postalCode, 4)
|
||||||
WHEN 'AD' THEN REPLACE(a.postalCode, 'AD', '00')
|
WHEN 'AD' THEN REPLACE(a.postalCode, 'AD', '00')
|
||||||
|
@ -89,14 +90,9 @@ module.exports = Self => {
|
||||||
const getLabelResponse = await sendXmlDoc('getLabel', {mrw, shipmentId}, 'text/xml');
|
const getLabelResponse = await sendXmlDoc('getLabel', {mrw, shipmentId}, 'text/xml');
|
||||||
const file = getTextByTag(getLabelResponse, 'EtiquetaFile');
|
const file = getTextByTag(getLabelResponse, 'EtiquetaFile');
|
||||||
|
|
||||||
try {
|
|
||||||
await models.Expedition.updateAll({id: expeditionFk}, {externalId: shipmentId}, myOptions);
|
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
} catch (error) {
|
|
||||||
if (tx) await tx.rollback();
|
return {shipmentId, file};
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
return file;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function getTextByTag(xmlDoc, tag) {
|
function getTextByTag(xmlDoc, tag) {
|
||||||
|
|
|
@ -81,9 +81,9 @@ describe('MRWConfig createShipment()', () => {
|
||||||
|
|
||||||
spyOn(axios, 'post').and.callFake(() => Promise.resolve(mockPostResponses.pop()));
|
spyOn(axios, 'post').and.callFake(() => Promise.resolve(mockPostResponses.pop()));
|
||||||
|
|
||||||
const base64Binary = await models.MrwConfig.createShipment(expedition1.id, options);
|
const {file} = await models.MrwConfig.createShipment(expedition1.id, options);
|
||||||
|
|
||||||
expect(base64Binary).toEqual(mockBase64Binary);
|
expect(file).toEqual(mockBase64Binary);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fail if mrwConfig has no data', async() => {
|
it('should fail if mrwConfig has no data', async() => {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
const {Email} = require('vn-print');
|
const {Email} = require('vn-print');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('send', {
|
Self.remoteMethod('send', {
|
||||||
|
@ -70,7 +71,7 @@ module.exports = Self => {
|
||||||
const newParams = Object.assign({}, queueParams, sendParams);
|
const newParams = Object.assign({}, queueParams, sendParams);
|
||||||
const email = new Email(queueName, newParams);
|
const email = new Email(queueName, newParams);
|
||||||
|
|
||||||
if (process.env.NODE_ENV != 'test')
|
if (isProduction())
|
||||||
await email.send();
|
await email.send();
|
||||||
|
|
||||||
await queue.updateAttribute('status', statusSent);
|
await queue.updateAttribute('status', statusSent);
|
||||||
|
|
|
@ -18,15 +18,10 @@ module.exports = Self => {
|
||||||
Self.renewToken = async function(ctx) {
|
Self.renewToken = async function(ctx) {
|
||||||
const {accessToken: token} = ctx.req;
|
const {accessToken: token} = ctx.req;
|
||||||
|
|
||||||
// Check if current token is valid
|
const {courtesyTime} = await models.AccessTokenConfig.findOne({
|
||||||
|
fields: ['courtesyTime']
|
||||||
const {renewPeriod, courtesyTime} = await models.AccessTokenConfig.findOne({
|
|
||||||
fields: ['renewPeriod', 'courtesyTime']
|
|
||||||
});
|
});
|
||||||
const now = Date.now();
|
const isNotExceeded = await Self.validateToken(ctx);
|
||||||
const differenceMilliseconds = now - token.created;
|
|
||||||
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
|
|
||||||
const isNotExceeded = differenceSeconds < renewPeriod - courtesyTime;
|
|
||||||
if (isNotExceeded)
|
if (isNotExceeded)
|
||||||
return token;
|
return token;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('validateToken', {
|
||||||
|
description: 'Validates the current logged user token',
|
||||||
|
accepts: [],
|
||||||
|
accessType: 'READ',
|
||||||
|
returns: {
|
||||||
|
type: 'Boolean',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/validateToken`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.validateToken = async function(ctx) {
|
||||||
|
const {accessToken: token} = ctx.req;
|
||||||
|
|
||||||
|
// Check if current token is valid
|
||||||
|
const {renewPeriod, courtesyTime} = await models.AccessTokenConfig.findOne({
|
||||||
|
fields: ['renewPeriod', 'courtesyTime']
|
||||||
|
});
|
||||||
|
const now = Date.now();
|
||||||
|
const differenceMilliseconds = now - token.created;
|
||||||
|
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
|
||||||
|
const isNotExceeded = differenceSeconds < renewPeriod - courtesyTime;
|
||||||
|
return isNotExceeded;
|
||||||
|
};
|
||||||
|
};
|
|
@ -186,5 +186,8 @@
|
||||||
},
|
},
|
||||||
"AgencyWorkCenter": {
|
"AgencyWorkCenter": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
|
},
|
||||||
|
"RouteConfig": {
|
||||||
|
"dataSource": "vn"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "RouteConfig",
|
||||||
|
"base": "VnModel",
|
||||||
|
"options": {
|
||||||
|
"mysql": {
|
||||||
|
"table": "routeConfig"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Identifier"
|
||||||
|
},
|
||||||
|
"kmMax": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ module.exports = function(Self) {
|
||||||
require('../methods/vn-user/renew-token')(Self);
|
require('../methods/vn-user/renew-token')(Self);
|
||||||
require('../methods/vn-user/share-token')(Self);
|
require('../methods/vn-user/share-token')(Self);
|
||||||
require('../methods/vn-user/update-user')(Self);
|
require('../methods/vn-user/update-user')(Self);
|
||||||
|
require('../methods/vn-user/validate-token')(Self);
|
||||||
|
|
||||||
Self.definition.settings.acls = Self.definition.settings.acls.filter(acl => acl.property !== 'create');
|
Self.definition.settings.acls = Self.definition.settings.acls.filter(acl => acl.property !== 'create');
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,13 @@
|
||||||
"principalId": "$everyone",
|
"principalId": "$everyone",
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"property": "validateToken",
|
||||||
|
"accessType": "EXECUTE",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "$authenticated",
|
||||||
|
"permission": "ALLOW"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"property": "privileges",
|
"property": "privileges",
|
||||||
"accessType": "*",
|
"accessType": "*",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
},
|
},
|
||||||
"vn": {
|
"vn": {
|
||||||
"view": {
|
"view": {
|
||||||
"expeditionPallet_Print": "288cbd6e8289df083ed5eb1a2c808f7a82ba4c90c8ad9781104808a7a54471fb"
|
"expeditionPallet_Print": "06613719475fcdba8309607c38cc78efc2e348cca7bc96b48dc3ae3c12426f54"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1205,11 +1205,11 @@ INSERT INTO `vn`.`saleComponent`(`saleFk`, `componentFk`, `value`)
|
||||||
(32, 36, -92.324),
|
(32, 36, -92.324),
|
||||||
(32, 39, 0.994);
|
(32, 39, 0.994);
|
||||||
|
|
||||||
INSERT INTO `vn`.`itemShelving` (`itemFk`, `shelvingFk`, `visible`, `grouping`, `packing`, `userFk`)
|
INSERT INTO `vn`.`itemShelving` (`itemFk`, `shelvingFk`, `visible`, `grouping`, `packing`,`buyFk`, `userFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(2, 'GVC', 1, 1, 1, 1106),
|
(2, 'GVC', 1, 1, 1, 2,1106),
|
||||||
(4, 'HEJ', 1, 1, 1, 1106),
|
(4, 'HEJ', 1, 1, 1, NULL,1106),
|
||||||
(1, 'UXN', 2, 12, 12, 1106);
|
(1, 'UXN', 2, 12, 12, NULL,1106);
|
||||||
|
|
||||||
INSERT INTO `vn`.`itemShelvingSale` (`itemShelvingFk`, `saleFk`, `quantity`, `created`, `userFk`)
|
INSERT INTO `vn`.`itemShelvingSale` (`itemShelvingFk`, `saleFk`, `quantity`, `created`, `userFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -2549,18 +2549,18 @@ INSERT INTO `vn`.`duaEntry` (`duaFk`, `entryFk`, `value`, `customsValue`, `euroV
|
||||||
(7, 7, 1.00, 1.00, 1.00),
|
(7, 7, 1.00, 1.00, 1.00),
|
||||||
(8, 8, 1.00, 1.00, 1.00);
|
(8, 8, 1.00, 1.00, 1.00);
|
||||||
|
|
||||||
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`)
|
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`, `bookEntried`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1001, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1234, 0, 442, 1),
|
(1, 1001, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1234, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 0, 442, 1),
|
(2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(3, 1003, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1236, 0, 442, 1),
|
(3, 1003, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1236, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(4, 1004, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1237, 0, 442, 1),
|
(4, 1004, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1237, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 0, 442, 1),
|
(5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(6, 1006, 'R', 2, util.VN_CURDATE(), util.VN_CURDATE(), 1239, 0, 442, 1),
|
(6, 1006, 'R', 2, util.VN_CURDATE(), util.VN_CURDATE(), 1239, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 0, 442, 1),
|
(7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 0, 442, 1),
|
(8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1),
|
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1,util.VN_CURDATE()),
|
||||||
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1);
|
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1,util.VN_CURDATE());
|
||||||
|
|
||||||
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageFarmerWithholdingFk`, `daysAgo`)
|
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageFarmerWithholdingFk`, `daysAgo`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -3792,3 +3792,10 @@ INSERT INTO vn.workCenter (id, name, payrollCenterFk, counter, warehouseFk, stre
|
||||||
VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
|
VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
|
||||||
|
|
||||||
UPDATE vn.locker SET workerFk = 1110 WHERE id = 147;
|
UPDATE vn.locker SET workerFk = 1110 WHERE id = 147;
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`ledgerCompany` SET
|
||||||
|
fiscalYear = YEAR(util.VN_CURDATE()),
|
||||||
|
bookEntry = 2;
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`ledgerConfig` SET
|
||||||
|
maxTolerance = 0.01;
|
||||||
|
|
|
@ -23,22 +23,19 @@ BEGIN
|
||||||
DECLARE vXtraLongAgj INT;
|
DECLARE vXtraLongAgj INT;
|
||||||
DECLARE vDefaultKlo INT;
|
DECLARE vDefaultKlo INT;
|
||||||
|
|
||||||
SELECT
|
SELECT usefulAuctionLeftSegmentLength,
|
||||||
ec.usefulAuctionLeftSegmentLength,
|
standardBarcodeLength,
|
||||||
ec.standardBarcodeLength,
|
floridayBarcodeLength,
|
||||||
ec.floridayBarcodeLength,
|
floramondoBarcodeLength,
|
||||||
ec.floramondoBarcodeLength,
|
defaultKlo
|
||||||
ec.defaultKlo
|
INTO vUsefulAuctionLeftSegmentLength,
|
||||||
INTO
|
|
||||||
vUsefulAuctionLeftSegmentLength,
|
|
||||||
vStandardBarcodeLength,
|
vStandardBarcodeLength,
|
||||||
vFloridayBarcodeLength,
|
vFloridayBarcodeLength,
|
||||||
vFloramondoBarcodeLength,
|
vFloramondoBarcodeLength,
|
||||||
vDefaultKlo
|
vDefaultKlo
|
||||||
FROM edi.ektConfig ec;
|
FROM ektConfig;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.ekt;
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ekt
|
||||||
CREATE TEMPORARY TABLE tmp.ekt
|
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT id ektFk FROM ekt LIMIT 0;
|
SELECT id ektFk FROM ekt LIMIT 0;
|
||||||
|
|
||||||
|
@ -46,14 +43,14 @@ BEGIN
|
||||||
WHEN LENGTH(vBarcode) <= vFloridayBarcodeLength THEN
|
WHEN LENGTH(vBarcode) <= vFloridayBarcodeLength THEN
|
||||||
INSERT INTO tmp.ekt
|
INSERT INTO tmp.ekt
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM edi.ektRecent e
|
FROM ektRecent e
|
||||||
WHERE e.cps = vBarcode
|
WHERE e.cps = vBarcode
|
||||||
OR e.batchNumber = vBarcode;
|
OR e.batchNumber = vBarcode;
|
||||||
|
|
||||||
WHEN LENGTH(vBarcode) = vFloramondoBarcodeLength THEN
|
WHEN LENGTH(vBarcode) = vFloramondoBarcodeLength THEN
|
||||||
INSERT INTO tmp.ekt
|
INSERT INTO tmp.ekt
|
||||||
SELECT e.id
|
SELECT e.id
|
||||||
FROM edi.ektRecent e
|
FROM ektRecent e
|
||||||
WHERE e.pro = MID(vBarcode,2,6)
|
WHERE e.pro = MID(vBarcode,2,6)
|
||||||
AND CAST(e.ptd AS SIGNED) = MID(vBarcode, 8, 5);
|
AND CAST(e.ptd AS SIGNED) = MID(vBarcode, 8, 5);
|
||||||
|
|
||||||
|
@ -74,13 +71,15 @@ BEGIN
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM ekt
|
FROM ekt
|
||||||
WHERE fec >= vFec - INTERVAL 1 DAY
|
WHERE fec >= vFec - INTERVAL 1 DAY
|
||||||
AND ((
|
AND (
|
||||||
vKlo = vDefaultKlo
|
(vKlo = vDefaultKlo
|
||||||
AND (klo = vKlo OR klo IS NULL OR klo = 0)
|
AND (klo = vKlo OR klo IS NULL OR klo = 0)
|
||||||
AND agj IN (vShortAgj, vLongAgj, vXtraLongAgj))
|
AND agj IN (vShortAgj, vLongAgj, vXtraLongAgj)
|
||||||
OR (klo = vKlo
|
) OR (
|
||||||
|
klo = vKlo
|
||||||
AND auction = vAuction
|
AND auction = vAuction
|
||||||
AND agj = vShortAgj)
|
AND agj = vShortAgj
|
||||||
|
)
|
||||||
)
|
)
|
||||||
ORDER BY agj DESC, fec DESC
|
ORDER BY agj DESC, fec DESC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -91,9 +90,11 @@ BEGIN
|
||||||
IF NOT vIsFound THEN
|
IF NOT vIsFound THEN
|
||||||
INSERT INTO tmp.ekt
|
INSERT INTO tmp.ekt
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM edi.ektRecent e
|
FROM ektRecent e
|
||||||
WHERE e.batchNumber
|
WHERE e.batchNumber = LEFT(
|
||||||
= LEFT(vBarcode,vUsefulAuctionLeftSegmentLength)
|
vBarcode,
|
||||||
|
vUsefulAuctionLeftSegmentLength
|
||||||
|
)
|
||||||
AND e.batchNumber > 0;
|
AND e.batchNumber > 0;
|
||||||
|
|
||||||
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
||||||
|
@ -103,7 +104,7 @@ BEGIN
|
||||||
IF NOT vIsFound THEN
|
IF NOT vIsFound THEN
|
||||||
INSERT INTO tmp.ekt
|
INSERT INTO tmp.ekt
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM edi.ektRecent e
|
FROM ektRecent e
|
||||||
WHERE e.putOrderFk = vBarcode;
|
WHERE e.putOrderFk = vBarcode;
|
||||||
|
|
||||||
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
||||||
|
@ -113,13 +114,23 @@ BEGIN
|
||||||
IF NOT vIsFound THEN
|
IF NOT vIsFound THEN
|
||||||
INSERT INTO tmp.ekt
|
INSERT INTO tmp.ekt
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM edi.ektRecent e
|
FROM ektRecent e
|
||||||
WHERE e.deliveryNumber
|
WHERE e.deliveryNumber = MID(vBarcode, 4, 13)
|
||||||
= MID(vBarcode, 4, 13)
|
|
||||||
AND e.deliveryNumber > 0;
|
AND e.deliveryNumber > 0;
|
||||||
|
|
||||||
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
-- Solo campo agj
|
||||||
|
IF NOT vIsFound THEN
|
||||||
|
INSERT INTO tmp.ekt
|
||||||
|
SELECT id
|
||||||
|
FROM ektRecent
|
||||||
|
WHERE agj = vShortAgj;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
|
||||||
|
END IF;
|
||||||
|
|
||||||
END CASE;
|
END CASE;
|
||||||
|
|
||||||
IF vIsFound THEN
|
IF vIsFound THEN
|
||||||
|
|
|
@ -40,18 +40,25 @@ proc:BEGIN
|
||||||
postalCode,
|
postalCode,
|
||||||
`type`,
|
`type`,
|
||||||
image,
|
image,
|
||||||
description
|
description,
|
||||||
|
addressFk
|
||||||
)
|
)
|
||||||
SELECT i.name,
|
SELECT CONCAT(i.name, ' by ',a.nickname),
|
||||||
i.`size`,
|
i.minPrice + apc.deliveryCost,
|
||||||
i.id,
|
i.id,
|
||||||
vLanded,
|
vLanded,
|
||||||
vPostalCode,
|
vPostalCode,
|
||||||
it.name,
|
it.name,
|
||||||
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image),
|
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image),
|
||||||
i.description
|
i.description,
|
||||||
|
apc.addressFk
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
|
JOIN addressPostCode apc
|
||||||
|
ON apc.dayOfWeek = dayOfWeek(vLanded)
|
||||||
|
AND NOW() < vLanded - INTERVAL apc.hoursInAdvance HOUR
|
||||||
|
AND apc.postCode = vPostalCode
|
||||||
|
JOIN vn.address a ON a.id = apc.addressFk
|
||||||
WHERE it.code IN ('FNR','FNP');
|
WHERE it.code IN ('FNR','FNP');
|
||||||
|
|
||||||
SELECT *
|
SELECT *
|
||||||
|
|
|
@ -13,8 +13,17 @@ BEGIN
|
||||||
/**
|
/**
|
||||||
* Set actions for contact request
|
* Set actions for contact request
|
||||||
*
|
*
|
||||||
* @param vPostalCode Delivery address postal code
|
* @param vName Name
|
||||||
|
* @param vPhone Phone number
|
||||||
|
* @param vEmail e-mail
|
||||||
|
* @param vMessage text of the message
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
CALL vn.mail_insert(
|
||||||
|
'floranet@verdnatura.es',
|
||||||
|
vEmail,
|
||||||
|
'Contact request',
|
||||||
|
CONCAT('Phone: ',vPhone, ' Message: ', vMessage)
|
||||||
|
);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -21,7 +21,7 @@ BEGIN
|
||||||
apc.dayOfWeek - vCurrentDayOfWeek,
|
apc.dayOfWeek - vCurrentDayOfWeek,
|
||||||
7 - apc.dayOfWeek
|
7 - apc.dayOfWeek
|
||||||
) DAY nextDay,
|
) DAY nextDay,
|
||||||
NOW() + INTERVAL apc.hoursInAdvance - 12 HOUR minDeliveryTime
|
NOW() + INTERVAL apc.hoursInAdvance HOUR minDeliveryTime
|
||||||
FROM addressPostCode apc
|
FROM addressPostCode apc
|
||||||
WHERE apc.postCode = vPostalCode
|
WHERE apc.postCode = vPostalCode
|
||||||
HAVING nextDay > minDeliveryTime) sub;
|
HAVING nextDay > minDeliveryTime) sub;
|
||||||
|
|
|
@ -1,24 +1,127 @@
|
||||||
DROP PROCEDURE IF EXISTS floranet.order_confirm;
|
|
||||||
|
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
$$
|
$$
|
||||||
|
|
||||||
CREATE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
|
CREATE OR REPLACE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
|
||||||
READS SQL DATA
|
READS SQL DATA
|
||||||
|
|
||||||
BEGIN
|
proc:BEGIN
|
||||||
/** Update order.isPaid field.
|
/** Update order.isPaid field, and makes the ticket
|
||||||
*
|
*
|
||||||
* @param vCatalogueFk floranet.catalogue.id
|
* @param vCatalogueFk floranet.catalogue.id
|
||||||
*
|
*
|
||||||
* @returns floranet.order.isPaid
|
* @returns floranet.order.isPaid
|
||||||
*/
|
*/
|
||||||
|
DECLARE vNewTicketFk INT;
|
||||||
|
DECLARE vCustomerEmail VARCHAR(255);
|
||||||
|
DECLARE vFloranetEmail VARCHAR(255);
|
||||||
|
DECLARE vSubjectEmail VARCHAR(100);
|
||||||
|
DECLARE vBodyEmail TEXT;
|
||||||
|
DECLARE vZoneFk INT;
|
||||||
|
|
||||||
|
IF (SELECT isPaid FROM `order` WHERE catalogueFk = vCatalogueFk) THEN
|
||||||
|
CALL util.throw('Esta orden ya está confirmada');
|
||||||
|
END IF;
|
||||||
|
|
||||||
UPDATE `order`
|
UPDATE `order`
|
||||||
SET isPaid = TRUE,
|
SET isPaid = TRUE,
|
||||||
payed = NOW()
|
payed = NOW()
|
||||||
WHERE catalogueFk = vCatalogueFk;
|
WHERE catalogueFk = vCatalogueFk;
|
||||||
|
|
||||||
SELECT isPaid
|
SELECT zoneFk
|
||||||
|
INTO vZoneFk
|
||||||
|
FROM (
|
||||||
|
SELECT zoneFk, COUNT(*) totalCount
|
||||||
|
FROM vn.ticket t
|
||||||
|
JOIN catalogue c ON c.id = vCatalogueFk
|
||||||
|
WHERE t.shipped > util.VN_CURDATE() - INTERVAL 1 YEAR
|
||||||
|
AND t.addressFk = c.addressFk
|
||||||
|
GROUP BY zoneFk
|
||||||
|
ORDER BY totalCount DESC
|
||||||
|
LIMIT 10000000000000000000
|
||||||
|
) sub
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
|
INSERT INTO vn.ticket (
|
||||||
|
clientFk,
|
||||||
|
shipped,
|
||||||
|
addressFk,
|
||||||
|
agencyModeFk,
|
||||||
|
nickname,
|
||||||
|
warehouseFk,
|
||||||
|
routeFk,
|
||||||
|
companyFk,
|
||||||
|
landed,
|
||||||
|
zoneFk
|
||||||
|
)
|
||||||
|
SELECT a.clientFk,
|
||||||
|
c.dated - INTERVAL 1 DAY,
|
||||||
|
c.addressFk,
|
||||||
|
a.agencyModeFk,
|
||||||
|
a.nickname,
|
||||||
|
ag.warehouseFk,
|
||||||
|
NULL,
|
||||||
|
co.id,
|
||||||
|
c.dated,
|
||||||
|
vZoneFk
|
||||||
|
FROM vn.address a
|
||||||
|
JOIN vn.agencyMode am ON am.id = a.agencyModeFk
|
||||||
|
JOIN vn.agency ag ON ag.id = am.agencyFk
|
||||||
|
JOIN catalogue c ON c.addressFk = a.id
|
||||||
|
JOIN vn.company co ON co.code = 'VNL'
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
SET vNewTicketFk = LAST_INSERT_ID();
|
||||||
|
|
||||||
|
INSERT INTO vn.sale(
|
||||||
|
ticketFk,
|
||||||
|
itemFk,
|
||||||
|
concept,
|
||||||
|
price,
|
||||||
|
quantity)
|
||||||
|
SELECT
|
||||||
|
vNewTicketFk,
|
||||||
|
c.itemFk,
|
||||||
|
CONCAT('Entrega: ',c.name),
|
||||||
|
- c.price,
|
||||||
|
1
|
||||||
|
FROM catalogue c
|
||||||
|
JOIN addressPostCode apc
|
||||||
|
ON apc.addressFk = c.addressFk
|
||||||
|
AND apc.dayOfWeek = dayOfWeek(c.dated)
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
SELECT cl.email,
|
||||||
|
cf.email,
|
||||||
|
CONCAT('Nuevo pedido FLORANET para entrega el ',c.dated),
|
||||||
|
CONCAT_WS('\n',
|
||||||
|
CONCAT('Producto: ', c.name),
|
||||||
|
CONCAT('Fecha de entrega: ',c.dated),
|
||||||
|
CONCAT('Destinatario: ', o.deliveryName),
|
||||||
|
CONCAT('Dirección: ', o.address),
|
||||||
|
CONCAT('CP: ', c.postalCode),
|
||||||
|
CONCAT('Foto: ', c.image),
|
||||||
|
CONCAT('Mensaje: ', IFNULL(o.message,"Ninguno.")),
|
||||||
|
CONCAT('Teléfono: ',IFNULL(o.deliveryPhone,"--")),
|
||||||
|
CONCAT('Observaciones: ', IFNULL(o.observations,"No hay."))
|
||||||
|
)
|
||||||
|
INTO vCustomerEmail,
|
||||||
|
vFloranetEmail,
|
||||||
|
vSubjectEmail,
|
||||||
|
vBodyEmail
|
||||||
|
FROM vn.client cl
|
||||||
|
JOIN vn.address a ON a.clientFk = cl.id
|
||||||
|
JOIN catalogue c ON c.addressFk = a.id
|
||||||
|
JOIN `order` o ON o.catalogueFk = c.id
|
||||||
|
JOIN config cf
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
CALL vn.mail_insert(
|
||||||
|
vCustomerEmail,
|
||||||
|
vFloranetEmail,
|
||||||
|
vSubjectEmail,
|
||||||
|
vBodyEmail);
|
||||||
|
|
||||||
|
SELECT isPaid, vNewTicketFk
|
||||||
FROM `order`
|
FROM `order`
|
||||||
WHERE catalogueFk = vCatalogueFk;
|
WHERE catalogueFk = vCatalogueFk;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -7,7 +7,7 @@ BEGIN
|
||||||
*
|
*
|
||||||
* @param vJsonData The order data in json format
|
* @param vJsonData The order data in json format
|
||||||
*/
|
*/
|
||||||
INSERT INTO `order`
|
REPLACE `order`
|
||||||
SET catalogueFk = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.products[0].id')),
|
SET catalogueFk = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.products[0].id')),
|
||||||
customerName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerName')),
|
customerName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerName')),
|
||||||
email = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.email')),
|
email = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.email')),
|
||||||
|
@ -15,7 +15,8 @@ BEGIN
|
||||||
message= JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.message')),
|
message= JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.message')),
|
||||||
deliveryName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryName')),
|
deliveryName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryName')),
|
||||||
address = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.address')),
|
address = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.address')),
|
||||||
deliveryPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryPhone'));
|
deliveryPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryPhone')),
|
||||||
|
observations = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.observations'));
|
||||||
|
|
||||||
SELECT LAST_INSERT_ID() orderFk;
|
SELECT LAST_INSERT_ID() orderFk;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -15,6 +15,5 @@ BEGIN
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
WHERE it.code IN ('FNR','FNP')
|
WHERE it.code IN ('FNR','FNP')
|
||||||
LIMIT 3;
|
LIMIT 3;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -81,7 +81,7 @@ BEGIN
|
||||||
|
|
||||||
-- Código redundante
|
-- Código redundante
|
||||||
|
|
||||||
DO vn.till_new(
|
CALL vn.till_new(
|
||||||
vCustomer
|
vCustomer
|
||||||
,vBank
|
,vBank
|
||||||
,vAmount / 100
|
,vAmount / 100
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`client_userDisable`
|
||||||
|
ON SCHEDULE EVERY 1 MONTH
|
||||||
|
STARTS '2023-06-01 00:00:00.000'
|
||||||
|
ON COMPLETION PRESERVE
|
||||||
|
ENABLE
|
||||||
|
DO CALL client_userDisable()$$
|
||||||
|
DELIMITER ;
|
|
@ -1,25 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`clientsDisable`
|
|
||||||
ON SCHEDULE EVERY 1 MONTH
|
|
||||||
STARTS '2023-06-01 00:00:00.000'
|
|
||||||
ON COMPLETION PRESERVE
|
|
||||||
ENABLE
|
|
||||||
DO BEGIN
|
|
||||||
UPDATE account.user u
|
|
||||||
JOIN client c ON c.id = u.id
|
|
||||||
LEFT JOIN account.account a ON a.id = u.id
|
|
||||||
SET u.active = FALSE
|
|
||||||
WHERE c.typeFk = 'normal'
|
|
||||||
AND a.id IS NULL
|
|
||||||
AND u.active
|
|
||||||
AND c.created < util.VN_CURDATE() - INTERVAL 12 MONTH
|
|
||||||
AND u.id NOT IN (
|
|
||||||
SELECT DISTINCT c.id
|
|
||||||
FROM client c
|
|
||||||
LEFT JOIN ticket t ON t.clientFk = c.id
|
|
||||||
WHERE c.salesPersonFk IS NOT NULL
|
|
||||||
OR t.created > util.VN_CURDATE() - INTERVAL 12 MONTH
|
|
||||||
OR shipped > util.VN_CURDATE() - INTERVAL 12 MONTH
|
|
||||||
);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,79 +1,73 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`till_new`(vClient INT
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`till_new`(
|
||||||
,vBank INT
|
vClient INT,
|
||||||
,vAmount DOUBLE
|
vBank INT,
|
||||||
,vConcept VARCHAR(25)
|
vAmount DOUBLE,
|
||||||
,vDated DATE
|
vConcept VARCHAR(25),
|
||||||
,vSerie CHAR(1)
|
vDated DATE,
|
||||||
,vBatch TINYINT
|
vSerie CHAR(1),
|
||||||
,vNumber INT
|
vBatch TINYINT,
|
||||||
,vCompany SMALLINT
|
vNumber INT,
|
||||||
,vWorker INT
|
vCompany SMALLINT,
|
||||||
|
vWorker INT
|
||||||
)
|
)
|
||||||
RETURNS int(11)
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vAccount VARCHAR(12);
|
DECLARE vAccount VARCHAR(12);
|
||||||
DECLARE vSubaccount VARCHAR(12);
|
DECLARE vSubaccount VARCHAR(12);
|
||||||
DECLARE vAsiento INT DEFAULT NULL;
|
DECLARE vAsiento INT DEFAULT NULL;
|
||||||
|
|
||||||
-- Inserta el registro en cajas
|
-- Inserta el registro en cajas
|
||||||
|
|
||||||
INSERT INTO till
|
INSERT INTO till
|
||||||
SET
|
SET
|
||||||
workerFk = vWorker
|
workerFk = vWorker,
|
||||||
,bankFk = vBank
|
bankFk = vBank,
|
||||||
,`in` = vAmount
|
`in` = vAmount,
|
||||||
,concept = vConcept
|
concept = vConcept,
|
||||||
,dated = vDated
|
dated = vDated,
|
||||||
,serie = vSerie
|
serie = vSerie,
|
||||||
,isAccountable = vBatch
|
isAccountable = vBatch,
|
||||||
,`number` = vNumber
|
`number` = vNumber,
|
||||||
,companyFk = vCompany;
|
companyFk = vCompany;
|
||||||
|
|
||||||
-- Inserta los asientos contables
|
-- Inserta los asientos contables
|
||||||
|
|
||||||
SELECT account INTO vAccount
|
SELECT account INTO vAccount
|
||||||
FROM accounting WHERE id = vBank;
|
FROM accounting WHERE id = vBank;
|
||||||
|
|
||||||
SELECT accountingAccount INTO vSubaccount
|
SELECT accountingAccount INTO vSubaccount
|
||||||
FROM `client` WHERE id = vClient;
|
FROM `client` WHERE id = vClient;
|
||||||
|
|
||||||
SET vAsiento = xdiario_new
|
CALL xdiario_new(
|
||||||
(
|
vAsiento,
|
||||||
vAsiento
|
vDated,
|
||||||
,vDated
|
vAccount,
|
||||||
,vAccount
|
vSubaccount,
|
||||||
,vSubaccount
|
vConcept,
|
||||||
,vConcept
|
vAmount,
|
||||||
,vAmount
|
0,
|
||||||
,0
|
0,
|
||||||
,0
|
NULL, -- Serie
|
||||||
,NULL -- Serie
|
NULL, -- Factura
|
||||||
,NULL -- Factura
|
NULL, -- IVA
|
||||||
,NULL -- IVA
|
NULL, -- Recargo
|
||||||
,NULL -- Recargo
|
FALSE, -- Auxiliar
|
||||||
,FALSE -- Auxiliar
|
vCompany,
|
||||||
,vCompany
|
vAsiento);
|
||||||
);
|
|
||||||
DO xdiario_new
|
|
||||||
(
|
|
||||||
vAsiento
|
|
||||||
,vDated
|
|
||||||
,vSubaccount
|
|
||||||
,vAccount
|
|
||||||
,vConcept
|
|
||||||
,0
|
|
||||||
,vAmount
|
|
||||||
,0
|
|
||||||
,NULL -- Serie
|
|
||||||
,NULL -- Factura
|
|
||||||
,NULL -- IVA
|
|
||||||
,NULL -- Recargo
|
|
||||||
,FALSE -- Auxiliar
|
|
||||||
,vCompany
|
|
||||||
);
|
|
||||||
|
|
||||||
RETURN NULL;
|
CALL xdiario_new(
|
||||||
|
vAsiento,
|
||||||
|
vDated,
|
||||||
|
vSubaccount,
|
||||||
|
vAccount,
|
||||||
|
vConcept,
|
||||||
|
0,
|
||||||
|
vAmount,
|
||||||
|
0,
|
||||||
|
NULL, -- Serie
|
||||||
|
NULL, -- Factura
|
||||||
|
NULL, -- IVA
|
||||||
|
NULL, -- Recargo
|
||||||
|
FALSE, -- Auxiliar
|
||||||
|
vCompany,
|
||||||
|
vAsiento);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`xdiario_new`(
|
|
||||||
vBookNumber INT,
|
|
||||||
vDated DATE,
|
|
||||||
vSubaccount VARCHAR(12),
|
|
||||||
vAccount VARCHAR(12),
|
|
||||||
vConcept VARCHAR(25),
|
|
||||||
vDebit DOUBLE,
|
|
||||||
vCredit DOUBLE,
|
|
||||||
vEuro DOUBLE,
|
|
||||||
vSerie CHAR(1),
|
|
||||||
vInvoice VARCHAR(8),
|
|
||||||
vVat DOUBLE,
|
|
||||||
vRe DOUBLE,
|
|
||||||
vAux TINYINT,
|
|
||||||
vCompanyFk INT
|
|
||||||
)
|
|
||||||
RETURNS int(11)
|
|
||||||
NOT DETERMINISTIC
|
|
||||||
NO SQL
|
|
||||||
BEGIN
|
|
||||||
IF vBookNumber IS NULL THEN
|
|
||||||
CALL ledger_next(YEAR(vDated), vBookNumber);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
INSERT INTO XDiario
|
|
||||||
SET ASIEN = vBookNumber,
|
|
||||||
FECHA = vDated,
|
|
||||||
SUBCTA = vSubaccount,
|
|
||||||
CONTRA = vAccount,
|
|
||||||
CONCEPTO = vConcept,
|
|
||||||
EURODEBE = vDebit,
|
|
||||||
EUROHABER = vCredit,
|
|
||||||
BASEEURO = vEuro,
|
|
||||||
SERIE = vSerie,
|
|
||||||
FACTURA = vInvoice,
|
|
||||||
IVA = vVat,
|
|
||||||
RECEQUIV = vRe,
|
|
||||||
AUXILIAR = IF(vAux = FALSE, NULL, '*'),
|
|
||||||
MONEDAUSO = 2,
|
|
||||||
empresa_id = vCompanyFk;
|
|
||||||
|
|
||||||
RETURN vBookNumber;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -19,7 +19,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
price1,
|
price1,
|
||||||
|
@ -41,7 +40,6 @@ BEGIN
|
||||||
b.packing,
|
b.packing,
|
||||||
b.`grouping`,
|
b.`grouping`,
|
||||||
b.groupingMode,
|
b.groupingMode,
|
||||||
b.containerFk,
|
|
||||||
b.comissionValue,
|
b.comissionValue,
|
||||||
b.packageValue,
|
b.packageValue,
|
||||||
b.price1,
|
b.price1,
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_userDisable`()
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Desactiva los clientes inactivos en los últimos X meses.
|
||||||
|
*/
|
||||||
|
DECLARE vMonths INT;
|
||||||
|
|
||||||
|
SELECT monthsToDisableUser INTO vMonths
|
||||||
|
FROM clientConfig;
|
||||||
|
|
||||||
|
IF vMonths IS NULL THEN
|
||||||
|
CALL util.throw('Config parameter not set');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
UPDATE account.user u
|
||||||
|
JOIN client c ON c.id = u.id
|
||||||
|
LEFT JOIN account.account a ON a.id = u.id
|
||||||
|
SET u.active = FALSE
|
||||||
|
WHERE c.typeFk = 'normal'
|
||||||
|
AND a.id IS NULL
|
||||||
|
AND u.active
|
||||||
|
AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
|
AND u.id NOT IN (
|
||||||
|
SELECT DISTINCT c.id
|
||||||
|
FROM client c
|
||||||
|
LEFT JOIN ticket t ON t.clientFk = c.id
|
||||||
|
WHERE c.salesPersonFk IS NOT NULL
|
||||||
|
OR t.created > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
|
OR shipped > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
|
);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -22,6 +22,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
IF vLockName IS NOT NULL THEN
|
IF vLockName IS NOT NULL THEN
|
||||||
DO RELEASE_LOCK(vLockName);
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
CALL util.debugAdd('releaseLock', vLockName); -- Tmp
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
RESIGNAL;
|
RESIGNAL;
|
||||||
|
|
|
@ -49,6 +49,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
IF vLockName IS NOT NULL THEN
|
IF vLockName IS NOT NULL THEN
|
||||||
DO RELEASE_LOCK(vLockName);
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
CALL util.debugAdd('releaseLock', vLockName); -- Tmp
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
RESIGNAL;
|
RESIGNAL;
|
||||||
|
|
|
@ -26,7 +26,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
@ -46,7 +45,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
|
|
@ -56,7 +56,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
packagingFk,
|
packagingFk,
|
||||||
|
@ -77,7 +76,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
packagingFk,
|
packagingFk,
|
||||||
|
@ -114,7 +112,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
@ -133,7 +130,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
|
|
@ -76,7 +76,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
@ -103,7 +102,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
location,
|
location,
|
||||||
|
|
|
@ -18,11 +18,12 @@ BEGIN
|
||||||
JOIN vn.parking p ON p.id = sh.parkingFk
|
JOIN vn.parking p ON p.id = sh.parkingFk
|
||||||
JOIN vn.sector sc ON sc.id = p.sectorFk
|
JOIN vn.sector sc ON sc.id = p.sectorFk
|
||||||
JOIN vn.warehouse w ON w.id = sc.warehouseFk
|
JOIN vn.warehouse w ON w.id = sc.warehouseFk
|
||||||
WHERE sc.id = vSectorFk
|
WHERE ish.visible > 0
|
||||||
AND ish.visible > 0
|
|
||||||
AND ish.itemFk = vItemFk
|
AND ish.itemFk = vItemFk
|
||||||
GROUP BY ish.id
|
GROUP BY ish.id
|
||||||
ORDER BY sh.priority DESC,
|
ORDER BY
|
||||||
|
(sc.id = vSectorFk) DESC,
|
||||||
|
sh.priority DESC,
|
||||||
ish.created,
|
ish.created,
|
||||||
p.pickingOrder;
|
p.pickingOrder;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -17,13 +17,15 @@ BEGIN
|
||||||
SELECT
|
SELECT
|
||||||
itemFk,
|
itemFk,
|
||||||
packing,
|
packing,
|
||||||
created
|
created,
|
||||||
|
buyFk
|
||||||
FROM itemShelving
|
FROM itemShelving
|
||||||
WHERE id = vItemShelvingFk
|
WHERE id = vItemShelvingFk
|
||||||
) ish2
|
) ish2
|
||||||
ON ish2.itemFk = ish.itemFk
|
ON ish2.itemFk = ish.itemFk
|
||||||
AND ish2.packing = ish.packing
|
AND ish2.packing = ish.packing
|
||||||
AND date(ish2.created) = date(ish.created)
|
AND date(ish2.created) = date(ish.created)
|
||||||
|
AND ish2.buyFk = ish.buyFk
|
||||||
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_unicode_ci;
|
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_unicode_ci;
|
||||||
|
|
||||||
IF vNewItemShelvingFk THEN
|
IF vNewItemShelvingFk THEN
|
||||||
|
|
|
@ -2,7 +2,6 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Añade registro o lo actualiza si ya existe.
|
* Añade registro o lo actualiza si ya existe.
|
||||||
*
|
*
|
||||||
|
@ -15,11 +14,23 @@ BEGIN
|
||||||
* @param vWarehouseFk indica el sector
|
* @param vWarehouseFk indica el sector
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
DECLARE vItemFk INT;
|
DECLARE vItemFk INT;
|
||||||
|
DECLARE vBuyFk INT;
|
||||||
|
|
||||||
|
SELECT id INTO vBuyFk
|
||||||
|
FROM buy WHERE id = vBarcode;
|
||||||
|
|
||||||
SELECT barcodeToItem(vBarcode) INTO vItemFk;
|
SELECT barcodeToItem(vBarcode) INTO vItemFk;
|
||||||
|
|
||||||
|
IF vBuyFk IS NULL THEN
|
||||||
|
CALL cache.last_buy_refresh(FALSE);
|
||||||
|
|
||||||
|
SELECT buy_id INTO vBuyFk
|
||||||
|
FROM cache.last_buy
|
||||||
|
WHERE item_id = vItemFk
|
||||||
|
AND warehouse_id = vWarehouseFk;
|
||||||
|
END IF;
|
||||||
|
|
||||||
IF vPacking IS NULL
|
IF vPacking IS NULL
|
||||||
THEN
|
THEN
|
||||||
SET vPacking = itemPacking(vBarcode, vWarehouseFk);
|
SET vPacking = itemPacking(vBarcode, vWarehouseFk);
|
||||||
|
@ -29,31 +40,32 @@ BEGIN
|
||||||
IF (SELECT COUNT(*) FROM itemShelving
|
IF (SELECT COUNT(*) FROM itemShelving
|
||||||
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
|
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
|
||||||
AND itemFk = vItemFk
|
AND itemFk = vItemFk
|
||||||
AND packing = vPacking) = 1 THEN
|
AND packing = vPacking
|
||||||
|
AND buyFk = vBuyFk) THEN
|
||||||
|
|
||||||
UPDATE itemShelving
|
UPDATE itemShelving
|
||||||
SET visible = visible + vQuantity
|
SET visible = visible + vQuantity
|
||||||
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
|
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
CALL cache.last_buy_refresh(FALSE);
|
|
||||||
INSERT INTO itemShelving( itemFk,
|
INSERT INTO itemShelving(
|
||||||
|
itemFk,
|
||||||
shelvingFk,
|
shelvingFk,
|
||||||
visible,
|
visible,
|
||||||
grouping,
|
grouping,
|
||||||
packing,
|
packing,
|
||||||
packagingFk)
|
packagingFk,
|
||||||
|
buyFk)
|
||||||
SELECT vItemFk,
|
SELECT vItemFk,
|
||||||
vShelvingFk,
|
vShelvingFk,
|
||||||
vQuantity,
|
vQuantity,
|
||||||
IFNULL(vGrouping, b.grouping),
|
IFNULL(vGrouping, b.grouping),
|
||||||
IFNULL(vPacking, b.packing),
|
IFNULL(vPacking, b.packing),
|
||||||
IFNULL(vPackagingFk, b.packagingFk)
|
IFNULL(vPackagingFk, b.packagingFk),
|
||||||
FROM item i
|
id
|
||||||
LEFT JOIN cache.last_buy lb ON i.id = lb.item_id AND lb.warehouse_id = vWarehouseFk
|
FROM buy b
|
||||||
LEFT JOIN buy b ON b.id = lb.buy_id
|
WHERE id = vBuyFk;
|
||||||
WHERE i.id = vItemFk;
|
|
||||||
END IF;
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -23,7 +23,6 @@ proc: BEGIN
|
||||||
* @param tmp.comparativeFilterType(filterFk INT ,itemTypeFk INT)
|
* @param tmp.comparativeFilterType(filterFk INT ,itemTypeFk INT)
|
||||||
* @return tmp.comparative
|
* @return tmp.comparative
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE vDayRangeStart DATE;
|
DECLARE vDayRangeStart DATE;
|
||||||
DECLARE vDayRangeEnd DATE;
|
DECLARE vDayRangeEnd DATE;
|
||||||
DECLARE w1, w2, w3, w4, w5, w6, w7 INT;
|
DECLARE w1, w2, w3, w4, w5, w6, w7 INT;
|
||||||
|
@ -59,14 +58,14 @@ proc: BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT MIN(dated) INTO vDayRangeStart
|
SELECT MIN(dated) INTO vDayRangeStart
|
||||||
FROM vn.time
|
FROM `time`
|
||||||
WHERE dated <= vDate
|
WHERE dated <= vDate
|
||||||
GROUP BY period
|
GROUP BY period
|
||||||
ORDER BY dated desc
|
ORDER BY dated desc
|
||||||
LIMIT 1 OFFSET vWeekRange;
|
LIMIT 1 OFFSET vWeekRange;
|
||||||
|
|
||||||
SELECT MAX(dated) INTO vDayRangeEnd
|
SELECT MAX(dated) INTO vDayRangeEnd
|
||||||
FROM vn.time
|
FROM `time`
|
||||||
WHERE dated >= vDate
|
WHERE dated >= vDate
|
||||||
GROUP BY period
|
GROUP BY period
|
||||||
ORDER BY dated ASC
|
ORDER BY dated ASC
|
||||||
|
@ -83,12 +82,11 @@ proc: BEGIN
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN itemCategory c ON c.id = t.categoryFk
|
JOIN itemCategory c ON c.id = t.categoryFk
|
||||||
LEFT JOIN worker w ON w.id = t.workerFk
|
LEFT JOIN worker w ON w.id = t.workerFk
|
||||||
WHERE (NOT vHasTypeFilter
|
WHERE (NOT vHasTypeFilter OR t.id IN (
|
||||||
OR t.id IN (SELECT itemTypeFk FROM tmp.comparativeFilterType))
|
SELECT itemTypeFk FROM tmp.comparativeFilterType
|
||||||
AND (vBuyerFk IS NULL
|
))
|
||||||
OR t.workerFk = vBuyerFk)
|
AND (vBuyerFk IS NULL OR t.workerFk = vBuyerFk)
|
||||||
AND (vIsFloramondo IS NULL
|
AND (vIsFloramondo IS NULL OR i.isFloramondo = vIsFloramondo);
|
||||||
OR i.isFloramondo = vIsFloramondo);
|
|
||||||
|
|
||||||
IF vDate < util.VN_CURDATE() THEN
|
IF vDate < util.VN_CURDATE() THEN
|
||||||
ALTER TABLE tmp.itemInventory
|
ALTER TABLE tmp.itemInventory
|
||||||
|
@ -115,10 +113,11 @@ proc: BEGIN
|
||||||
SET i = i + 1;
|
SET i = i + 1;
|
||||||
|
|
||||||
SELECT t.period INTO vPeriod
|
SELECT t.period INTO vPeriod
|
||||||
FROM vn.`time` t
|
FROM `time` t
|
||||||
WHERE t.dated = vDayRangeStart + INTERVAL (vWeekCount * (i - 1)) DAY;
|
WHERE t.dated = vDayRangeStart + INTERVAL (vWeekCount * (i - 1)) DAY;
|
||||||
|
|
||||||
INSERT IGNORE INTO tTable(cy, ly, zy) VALUES(vPeriod, vPeriod - 100, vPeriod - 200);
|
INSERT IGNORE INTO tTable(cy, ly, zy)
|
||||||
|
VALUES(vPeriod, vPeriod - 100, vPeriod - 200);
|
||||||
UNTIL i = vWeekCount END REPEAT;
|
UNTIL i = vWeekCount END REPEAT;
|
||||||
|
|
||||||
SELECT cy, ly, zy INTO w1, y1, z1 FROM tTable LIMIT 1;
|
SELECT cy, ly, zy INTO w1, y1, z1 FROM tTable LIMIT 1;
|
||||||
|
@ -130,7 +129,6 @@ proc: BEGIN
|
||||||
SELECT cy, ly, zy INTO w7, y7, z7 FROM tTable WHERE cy > w6 LIMIT 1;
|
SELECT cy, ly, zy INTO w7, y7, z7 FROM tTable WHERE cy > w6 LIMIT 1;
|
||||||
|
|
||||||
-- Genera una tabla con los datos del año pasado.
|
-- Genera una tabla con los datos del año pasado.
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLastYear
|
CREATE OR REPLACE TEMPORARY TABLE tLastYear
|
||||||
(KEY (lItemFk))
|
(KEY (lItemFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
|
@ -151,15 +149,14 @@ proc: BEGIN
|
||||||
SUM(IF(c.timePeriod = y7, c.price, 0)) lprice7
|
SUM(IF(c.timePeriod = y7, c.price, 0)) lprice7
|
||||||
FROM tmp.itemInventory ai
|
FROM tmp.itemInventory ai
|
||||||
JOIN comparative c ON c.itemFk = ai.id
|
JOIN comparative c ON c.itemFk = ai.id
|
||||||
JOIN warehouse w on w.id = c.warehouseFk
|
JOIN warehouse w ON w.id = c.warehouseFk
|
||||||
JOIN tTable wt ON c.timePeriod = wt.ly
|
JOIN tTable wt ON c.timePeriod = wt.ly
|
||||||
WHERE IFNULL(vWarehouseFk, c.warehouseFk) = c.warehouseFk
|
WHERE (vWarehouseFk IS NULL OR vWarehouseFk = c.warehouseFk)
|
||||||
AND w.isComparative
|
AND w.isComparative
|
||||||
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
|
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
|
||||||
GROUP BY ai.id;
|
GROUP BY ai.id;
|
||||||
|
|
||||||
-- Genera una tabla con los datos de hace DOS años.
|
-- Genera una tabla con los datos de hace 2 años
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tTwoYearsAgo
|
CREATE OR REPLACE TEMPORARY TABLE tTwoYearsAgo
|
||||||
(KEY (tItemFk))
|
(KEY (tItemFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
|
@ -180,59 +177,58 @@ proc: BEGIN
|
||||||
SUM(IF(c.timePeriod = z7, c.price, 0)) vlprice7
|
SUM(IF(c.timePeriod = z7, c.price, 0)) vlprice7
|
||||||
FROM tmp.itemInventory ai
|
FROM tmp.itemInventory ai
|
||||||
JOIN comparative c ON c.itemFk = ai.id
|
JOIN comparative c ON c.itemFk = ai.id
|
||||||
JOIN warehouse w on w.id = c.warehouseFk
|
JOIN warehouse w ON w.id = c.warehouseFk
|
||||||
JOIN tTable wt ON c.timePeriod = wt.zy
|
JOIN tTable wt ON c.timePeriod = wt.zy
|
||||||
WHERE IFNULL(vWarehouseFk, c.warehouseFk) = c.warehouseFk
|
WHERE (vWarehouseFk IS NULL OR vWarehouseFk = c.warehouseFk)
|
||||||
AND w.isComparative
|
AND w.isComparative
|
||||||
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
|
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
|
||||||
GROUP BY ai.id;
|
GROUP BY ai.id;
|
||||||
|
|
||||||
-- Genera una tabla con los datos de este año.ss
|
-- Genera una tabla con los datos de este año
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tCurrentYear
|
CREATE OR REPLACE TEMPORARY TABLE tCurrentYear
|
||||||
(KEY (cItemFk))
|
(KEY (cItemFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT t.itemFk cItemFk,
|
SELECT t.itemFk cItemFk,
|
||||||
SUM(IF(week = w1, total, 0)) cweek1,
|
SUM(IF(`week` = w1, total, 0)) cweek1,
|
||||||
SUM(IF(week = w2, total, 0)) cweek2,
|
SUM(IF(`week` = w2, total, 0)) cweek2,
|
||||||
SUM(IF(week = w3, total, 0)) cweek3,
|
SUM(IF(`week` = w3, total, 0)) cweek3,
|
||||||
SUM(IF(week = w4, total, 0)) cweek4,
|
SUM(IF(`week` = w4, total, 0)) cweek4,
|
||||||
SUM(IF(week = w5, total, 0)) cweek5,
|
SUM(IF(`week` = w5, total, 0)) cweek5,
|
||||||
SUM(IF(week = w6, total, 0)) cweek6,
|
SUM(IF(`week` = w6, total, 0)) cweek6,
|
||||||
SUM(IF(week = w7, total, 0)) cweek7,
|
SUM(IF(`week` = w7, total, 0)) cweek7,
|
||||||
SUM(IF(week = w1, price, 0)) cprice1,
|
SUM(IF(`week` = w1, price, 0)) cprice1,
|
||||||
SUM(IF(week = w2, price, 0)) cprice2,
|
SUM(IF(`week` = w2, price, 0)) cprice2,
|
||||||
SUM(IF(week = w3, price, 0)) cprice3,
|
SUM(IF(`week` = w3, price, 0)) cprice3,
|
||||||
SUM(IF(week = w4, price, 0)) cprice4,
|
SUM(IF(`week` = w4, price, 0)) cprice4,
|
||||||
SUM(IF(week = w5, price, 0)) cprice5,
|
SUM(IF(`week` = w5, price, 0)) cprice5,
|
||||||
SUM(IF(week = w6, price, 0)) cprice6,
|
SUM(IF(`week` = w6, price, 0)) cprice6,
|
||||||
SUM(IF(week = w7, price, 0)) cprice7
|
SUM(IF(`week` = w7, price, 0)) cprice7
|
||||||
FROM (
|
FROM (
|
||||||
SELECT s.itemFk,
|
SELECT s.itemFk,
|
||||||
ti.period `week`,
|
ti.period `week`,
|
||||||
SUM(s.quantity) total,
|
SUM(s.quantity) total,
|
||||||
TRUNCATE(SUM(s.quantity * s.priceFixed), 0) price
|
TRUNCATE(SUM(s.quantity * s.priceFixed), 0) price
|
||||||
FROM ticket t
|
FROM ticket t FORCE INDEX (Fecha)
|
||||||
JOIN sale s ON t.id = s.ticketFk
|
JOIN sale s ON t.id = s.ticketFk
|
||||||
JOIN tmp.itemInventory it ON it.id = s.itemFk
|
JOIN tmp.itemInventory it ON it.id = s.itemFk
|
||||||
JOIN time ti ON ti.dated = DATE(t.shipped)
|
JOIN `time` ti ON ti.dated = DATE(t.shipped)
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN itemType tp ON tp.id = i.typeFk
|
JOIN itemType tp ON tp.id = i.typeFk
|
||||||
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
||||||
JOIN warehouse w ON w.id = t.warehouseFk
|
JOIN warehouse w ON w.id = t.warehouseFk
|
||||||
STRAIGHT_JOIN address ad ON ad.id = t.addressFk
|
JOIN `address` ad ON ad.id = t.addressFk
|
||||||
JOIN province p ON p.id = ad.provinceFk
|
JOIN province p ON p.id = ad.provinceFk
|
||||||
JOIN `client` c ON c.id = ad.clientFk
|
JOIN `client` c ON c.id = ad.clientFk
|
||||||
WHERE t.shipped BETWEEN vDayRangeStart AND util.dayEnd(vDayRangeEnd)
|
WHERE t.shipped BETWEEN vDayRangeStart AND util.dayEnd(vDayRangeEnd)
|
||||||
AND c.typeFk IN ('Normal','handMaking')
|
AND c.typeFk IN ('normal', 'handMaking')
|
||||||
AND w.id = COALESCE(vWarehouseFk, w.id)
|
AND (vWarehouseFk IS NULL OR vWarehouseFk = w.id)
|
||||||
AND w.isComparative
|
|
||||||
AND (vCountryFk IS NULL OR p.countryFk = vCountryFk)
|
AND (vCountryFk IS NULL OR p.countryFk = vCountryFk)
|
||||||
GROUP BY i.id, week
|
AND w.isComparative
|
||||||
|
GROUP BY i.id, `week`
|
||||||
) t
|
) t
|
||||||
GROUP BY t.itemFk;
|
GROUP BY t.itemFk;
|
||||||
|
|
||||||
-- Genera la tabla con la comparativa.
|
-- Genera la tabla con la comparativa
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.comparative
|
CREATE OR REPLACE TEMPORARY TABLE tmp.comparative
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT it.subName productor,
|
SELECT it.subName productor,
|
||||||
|
@ -240,13 +236,13 @@ proc: BEGIN
|
||||||
b.buyingValue costefijo,
|
b.buyingValue costefijo,
|
||||||
b.groupingMode caja,
|
b.groupingMode caja,
|
||||||
it.image ArticleImage,
|
it.image ArticleImage,
|
||||||
IFNULL(it.inkFk,"?") color,
|
IFNULL(it.inkFk, '?') color,
|
||||||
tp.code tipo,
|
tp.code tipo,
|
||||||
it.typeFk tipo_id,
|
it.typeFk tipo_id,
|
||||||
o.code origen,
|
o.code origen,
|
||||||
it.category categoria,
|
it.category categoria,
|
||||||
it.stems tallos,
|
it.stems tallos,
|
||||||
it.size medida,
|
it.`size` medida,
|
||||||
it.name article,
|
it.name article,
|
||||||
w.code codigoTrabajador,
|
w.code codigoTrabajador,
|
||||||
tp.categoryFk reino_id,
|
tp.categoryFk reino_id,
|
||||||
|
@ -264,17 +260,20 @@ proc: BEGIN
|
||||||
e.id provider_id,
|
e.id provider_id,
|
||||||
it.comment comments,
|
it.comment comments,
|
||||||
it.description itemDescription,
|
it.description itemDescription,
|
||||||
IF(cy.cItemFk IS NULL AND i.visible = 0 AND i.avalaible = 0
|
IF(cy.cItemFk IS NULL AND i.visible = 0
|
||||||
AND IFNULL(i.sd, 0) = 0, FALSE, TRUE) filtret,
|
AND i.avalaible = 0 AND (i.sd IS NULL OR i.sd = 0),
|
||||||
|
FALSE,
|
||||||
|
TRUE
|
||||||
|
) filtret,
|
||||||
IF(it.hasMinPrice, FORMAT(it.minPrice, 2), "") pvp,
|
IF(it.hasMinPrice, FORMAT(it.minPrice, 2), "") pvp,
|
||||||
s.company_name
|
s.company_name
|
||||||
FROM tmp.itemInventory i
|
FROM tmp.itemInventory i
|
||||||
JOIN item it ON it.id = i.id
|
JOIN item it ON it.id = i.id
|
||||||
LEFT JOIN itemType tp ON tp.id = it.typeFk
|
JOIN itemType tp ON tp.id = it.typeFk
|
||||||
LEFT JOIN worker w ON w.id = tp.workerFk
|
JOIN worker w ON w.id = tp.workerFk
|
||||||
LEFT JOIN buy b ON b.id = i.buy_id
|
LEFT JOIN buy b ON b.id = i.buy_id
|
||||||
LEFT JOIN entry e ON e.id = b.entryFk
|
LEFT JOIN `entry` e ON e.id = b.entryFk
|
||||||
LEFT JOIN origin o ON o.id = it.originFk
|
JOIN origin o ON o.id = it.originFk
|
||||||
LEFT JOIN tLastYear ly ON ly.lItemFk = it.id
|
LEFT JOIN tLastYear ly ON ly.lItemFk = it.id
|
||||||
LEFT JOIN tCurrentYear cy ON cy.cItemFk = it.id
|
LEFT JOIN tCurrentYear cy ON cy.cItemFk = it.id
|
||||||
LEFT JOIN tTwoYearsAgo zy ON zy.tItemFk = it.id
|
LEFT JOIN tTwoYearsAgo zy ON zy.tItemFk = it.id
|
||||||
|
@ -287,8 +286,8 @@ proc: BEGIN
|
||||||
OR ly.lweek1 OR ly.lweek2 OR ly.lweek3 OR ly.lweek4 OR ly.lweek5 OR ly.lweek6 OR ly.lweek7
|
OR ly.lweek1 OR ly.lweek2 OR ly.lweek3 OR ly.lweek4 OR ly.lweek5 OR ly.lweek6 OR ly.lweek7
|
||||||
OR zy.vlweek1 OR zy.vlweek2 OR zy.vlweek3 OR zy.vlweek4 OR zy.vlweek5 OR zy.vlweek6 OR zy.vlweek7;
|
OR zy.vlweek1 OR zy.vlweek2 OR zy.vlweek3 OR zy.vlweek4 OR zy.vlweek5 OR zy.vlweek6 OR zy.vlweek7;
|
||||||
|
|
||||||
-- Elimina las tablas temporales creadas...
|
DROP TEMPORARY TABLE IF EXISTS
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemInventory,
|
tmp.itemInventory,
|
||||||
tTwoYearsAgo,
|
tTwoYearsAgo,
|
||||||
tLastYear,
|
tLastYear,
|
||||||
tCurrentYear,
|
tCurrentYear,
|
||||||
|
|
|
@ -319,7 +319,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
price1,
|
price1,
|
||||||
|
@ -341,7 +340,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
price1,
|
price1,
|
||||||
|
@ -366,7 +364,6 @@ BEGIN
|
||||||
packing,
|
packing,
|
||||||
`grouping`,
|
`grouping`,
|
||||||
groupingMode,
|
groupingMode,
|
||||||
containerFk,
|
|
||||||
comissionValue,
|
comissionValue,
|
||||||
packageValue,
|
packageValue,
|
||||||
price1,
|
price1,
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_ValuateInventory`(vDated DATE, vIsDetailed BOOLEAN)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_valuateInventory`(
|
||||||
|
vDated DATE
|
||||||
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vInventoried DATE;
|
DECLARE vInventoried DATE;
|
||||||
DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
|
DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
|
||||||
|
@ -15,8 +17,7 @@ BEGIN
|
||||||
SELECT tr.landed INTO vInventoried
|
SELECT tr.landed INTO vInventoried
|
||||||
FROM travel tr
|
FROM travel tr
|
||||||
JOIN `entry` e ON e.travelFk = tr.id
|
JOIN `entry` e ON e.travelFk = tr.id
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed <= vDateDayEnd
|
||||||
WHERE landed <= vDateDayEnd
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
ORDER BY tr.landed DESC
|
ORDER BY tr.landed DESC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -27,8 +28,7 @@ BEGIN
|
||||||
SELECT landed INTO vInventoryClone
|
SELECT landed INTO vInventoryClone
|
||||||
FROM travel tr
|
FROM travel tr
|
||||||
JOIN `entry` e ON e.travelFk = tr.id
|
JOIN `entry` e ON e.travelFk = tr.id
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed >= vDated
|
||||||
WHERE landed >= vDated
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
ORDER BY landed ASC
|
ORDER BY landed ASC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -41,6 +41,7 @@ BEGIN
|
||||||
warehouseFk SMALLINT,
|
warehouseFk SMALLINT,
|
||||||
itemFk BIGINT,
|
itemFk BIGINT,
|
||||||
quantity INT,
|
quantity INT,
|
||||||
|
volume DECIMAL(10,2),
|
||||||
cost DOUBLE DEFAULT 0,
|
cost DOUBLE DEFAULT 0,
|
||||||
total DOUBLE DEFAULT 0,
|
total DOUBLE DEFAULT 0,
|
||||||
warehouseInventory VARCHAR(20),
|
warehouseInventory VARCHAR(20),
|
||||||
|
@ -60,9 +61,8 @@ BEGIN
|
||||||
JOIN `entry` e ON e.id = b.entryFk
|
JOIN `entry` e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed = vDateDayEnd
|
||||||
WHERE landed = vDateDayEnd
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
AND w.valuatedInventory
|
AND w.valuatedInventory
|
||||||
AND t.isInventory
|
AND t.isInventory
|
||||||
|
@ -78,9 +78,8 @@ BEGIN
|
||||||
JOIN `entry` e ON e.id = b.entryFk
|
JOIN `entry` e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed = vInventoried
|
||||||
WHERE landed = vInventoried
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
AND w.valuatedInventory
|
AND w.valuatedInventory
|
||||||
AND t.isInventory
|
AND t.isInventory
|
||||||
|
@ -99,7 +98,6 @@ BEGIN
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = tr.warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
|
||||||
WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
|
WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
|
||||||
AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
|
AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
|
||||||
AND NOT e.isRaid
|
AND NOT e.isRaid
|
||||||
|
@ -183,52 +181,37 @@ BEGIN
|
||||||
AND e.isConfirmed
|
AND e.isConfirmed
|
||||||
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
|
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
|
||||||
|
|
||||||
CALL vn.buyUltimate(NULL, vDateDayEnd);
|
CALL buyUltimate(NULL, vDateDayEnd);
|
||||||
|
|
||||||
|
DELETE FROM tInventory WHERE quantity IS NULL OR NOT quantity;
|
||||||
|
|
||||||
UPDATE tInventory i
|
UPDATE tInventory i
|
||||||
JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
|
JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
|
||||||
JOIN buy b ON b.id = bu.buyFk
|
JOIN buy b ON b.id = bu.buyFk
|
||||||
SET total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
|
LEFT JOIN itemCost ic ON ic.itemFk = i.itemFk
|
||||||
cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)
|
AND ic.warehouseFk = i.warehouseFk
|
||||||
WHERE i.quantity;
|
SET i.total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
|
||||||
|
i.cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0),
|
||||||
|
i.volume = i.quantity * ic.cm3delivery / 1000000;
|
||||||
|
|
||||||
DELETE FROM tInventory
|
|
||||||
WHERE quantity IS NULL OR NOT quantity;
|
|
||||||
|
|
||||||
IF vIsDetailed THEN
|
|
||||||
SELECT ti.warehouseFk,
|
SELECT ti.warehouseFk,
|
||||||
i.id itemFk,
|
i.id,
|
||||||
i.longName,
|
i.longName,
|
||||||
i.size,
|
i.size,
|
||||||
ti.quantity,
|
ti.quantity,
|
||||||
tp.name Tipo,
|
ti.volume,
|
||||||
ic.name Reino,
|
tp.name itemTypeName,
|
||||||
|
ic.name itemCategoryName,
|
||||||
ti.cost,
|
ti.cost,
|
||||||
CAST(ti.total AS DECIMAL(10, 2)) total,
|
ti.total,
|
||||||
ti.warehouseInventory almacen
|
ti.warehouseInventory
|
||||||
FROM tInventory ti
|
FROM tInventory ti
|
||||||
JOIN warehouse w ON w.id = warehouseFk
|
JOIN warehouse w ON w.id = warehouseFk
|
||||||
JOIN item i ON i.id = ti.itemFk
|
JOIN item i ON i.id = ti.itemFk
|
||||||
JOIN itemType tp ON tp.id = i.typeFk
|
JOIN itemType tp ON tp.id = i.typeFk
|
||||||
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
||||||
WHERE w.valuatedInventory
|
WHERE w.valuatedInventory
|
||||||
AND ti.total > 0
|
AND ti.total > 0;
|
||||||
ORDER BY ti.total DESC;
|
|
||||||
ELSE
|
|
||||||
SELECT i.warehouseInventory Almacen,
|
|
||||||
ic.name Reino,
|
|
||||||
CAST(i.total AS DECIMAL(10, 2)) Euros,
|
|
||||||
w.code Comprador,
|
|
||||||
it.id
|
|
||||||
FROM tInventory i
|
|
||||||
JOIN warehouse wh ON wh.id = warehouseFk
|
|
||||||
JOIN item it ON it.id = i.itemFk
|
|
||||||
JOIN itemType itp ON itp.id = it.typeFk
|
|
||||||
LEFT JOIN worker w ON w.id = itp.workerFk
|
|
||||||
JOIN itemCategory ic ON ic.id = itp.categoryFk
|
|
||||||
WHERE wh.valuatedInventory
|
|
||||||
AND i.total > 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
tmp.buyUltimate,
|
tmp.buyUltimate,
|
|
@ -1,13 +1,55 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ledger_next`(
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ledger_next`(
|
||||||
IN vFiscalYear INT,
|
IN vFiscalYear INT,
|
||||||
OUT vNewBookEntry INT
|
OUT vLastBookEntry INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
DECLARE vHasStartTransaction BOOLEAN;
|
||||||
|
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
IF vHasStartTransaction THEN
|
||||||
|
ROLLBACK TO sp;
|
||||||
|
RESIGNAL;
|
||||||
|
ELSE
|
||||||
|
ROLLBACK;
|
||||||
|
CALL util.throw ('It has not been possible to generate a new ledger');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
IF vFiscalYear IS NULL THEN
|
||||||
|
CALL util.throw('Fiscal year is required');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT @@in_transaction INTO vHasStartTransaction;
|
||||||
|
|
||||||
|
IF NOT vHasStartTransaction THEN
|
||||||
|
START TRANSACTION;
|
||||||
|
ELSE
|
||||||
|
SAVEPOINT sp;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT bookEntry + 1 INTO vLastBookEntry
|
||||||
|
FROM ledgerCompany
|
||||||
|
WHERE fiscalYear = vFiscalYear
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
IF vLastBookEntry IS NULL THEN
|
||||||
|
INSERT INTO ledgerCompany
|
||||||
|
SET fiscalYear = vFiscalYear,
|
||||||
|
bookEntry = 1;
|
||||||
|
SET vLastBookEntry = 1;
|
||||||
|
END IF;
|
||||||
|
|
||||||
UPDATE ledgerCompany
|
UPDATE ledgerCompany
|
||||||
SET bookEntry = LAST_INSERT_ID(bookEntry + 1)
|
SET bookEntry = vLastBookEntry
|
||||||
WHERE fiscalYear = vFiscalYear;
|
WHERE fiscalYear = vFiscalYear;
|
||||||
|
|
||||||
SET vNewBookEntry = LAST_INSERT_ID();
|
IF vHasStartTransaction THEN
|
||||||
|
RELEASE SAVEPOINT sp;
|
||||||
|
ELSE
|
||||||
|
COMMIT;
|
||||||
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -12,12 +12,15 @@ BEGIN
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
|
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
|
||||||
(INDEX(saleFk))
|
(INDEX(saleFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT s.id saleFk, sale_hasComponentLack(s.id) hasProblem
|
SELECT saleFk, sale_hasComponentLack(saleFk)hasProblem
|
||||||
|
FROM (
|
||||||
|
SELECT s.id saleFk
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
|
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
|
||||||
WHERE t.shipped >= util.midnight()
|
WHERE t.shipped >= util.midnight()
|
||||||
AND (vComponentFk IS NULL OR sc.componentFk = vComponentFk);
|
AND (vComponentFk IS NULL OR sc.componentFk = vComponentFk)
|
||||||
|
GROUP BY s.id) sub;
|
||||||
|
|
||||||
CALL sale_setProblem('hasComponentLack');
|
CALL sale_setProblem('hasComponentLack');
|
||||||
|
|
||||||
|
|
|
@ -20,15 +20,15 @@ BEGIN
|
||||||
|
|
||||||
CALL buyUltimate(vWarehouseFk, vShipped);
|
CALL buyUltimate(vWarehouseFk, vShipped);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
|
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
|
||||||
SELECT vSelf saleFk, MOD(vQuantity, bu.`grouping`) hasProblem
|
SELECT vSelf saleFk, MOD(vQuantity, b.`grouping`) hasProblem
|
||||||
FROM tmp.buyUltimate bu
|
FROM tmp.buyUltimate bu
|
||||||
JOIN buy b ON b.id = bu.buyFk
|
JOIN buy b ON b.id = bu.buyFk
|
||||||
WHERE bu.itemFk = vItemFk;
|
WHERE bu.itemFk = vItemFk;
|
||||||
|
|
||||||
CALL sale_setProblem('hasRounding');
|
CALL sale_setProblem('hasRounding');
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.ticket;
|
DROP TEMPORARY TABLE tmp.sale;
|
||||||
DROP TEMPORARY TABLE tmp.buyUltimate;
|
DROP TEMPORARY TABLE tmp.buyUltimate;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -151,8 +151,8 @@ BEGIN
|
||||||
supplier,
|
supplier,
|
||||||
entryFk,
|
entryFk,
|
||||||
landed,
|
landed,
|
||||||
`in`,
|
CAST(`in` AS DECIMAL(10,0)) `in`,
|
||||||
`out`,
|
CAST(`out` AS DECIMAL(10,0)) `out`,
|
||||||
warehouse,
|
warehouse,
|
||||||
buyingValue,
|
buyingValue,
|
||||||
balance
|
balance
|
||||||
|
|
|
@ -27,7 +27,10 @@ BEGIN
|
||||||
SELECT DISTINCT clientFk
|
SELECT DISTINCT clientFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT clientFk, SUM(quantity) totalQuantity
|
SELECT clientFk, SUM(quantity) totalQuantity
|
||||||
FROM tmp.packagingToInvoice
|
FROM tmp.packagingToInvoice tpi
|
||||||
|
JOIN client c ON c.id = tpi.clientFk
|
||||||
|
LEFT JOIN supplier s ON s.nif = c.fi
|
||||||
|
WHERE s.id IS NULL
|
||||||
GROUP BY itemFk, clientFk
|
GROUP BY itemFk, clientFk
|
||||||
HAVING totalQuantity > 0)sub;
|
HAVING totalQuantity > 0)sub;
|
||||||
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketRefund_beforeUpsert`(vRefundTicketFk INT, vOriginalTicketFk INT)
|
|
||||||
BEGIN
|
|
||||||
DECLARE vAlreadyExists BOOLEAN DEFAULT FALSE;
|
|
||||||
|
|
||||||
IF vRefundTicketFk = vOriginalTicketFk THEN
|
|
||||||
CALL util.throw('Original ticket and refund ticket has same id');
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vAlreadyExists
|
|
||||||
FROM ticketRefund
|
|
||||||
WHERE refundTicketFk = vOriginalTicketFk;
|
|
||||||
|
|
||||||
IF vAlreadyExists > 0 THEN
|
|
||||||
CALL util.throw('This ticket is already a refund');
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -22,7 +22,7 @@ BEGIN
|
||||||
SET t.hasProblem = TRUE
|
SET t.hasProblem = TRUE
|
||||||
WHERE c.isFreezed;
|
WHERE c.isFreezed;
|
||||||
|
|
||||||
CALL ticket_setProblem('hasTicketRequest');
|
CALL ticket_setProblem('isFreezed');
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.ticket;
|
DROP TEMPORARY TABLE tmp.ticket;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -19,7 +19,7 @@ BEGIN
|
||||||
WHERE t.id = vSelf;
|
WHERE t.id = vSelf;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
|
||||||
SELECT vSelf ticketFk, vRisk hasProblem;
|
SELECT vSelf ticketFk, vHasRisk hasProblem;
|
||||||
|
|
||||||
CALL ticket_setProblem('hasRisk');
|
CALL ticket_setProblem('hasRisk');
|
||||||
|
|
||||||
|
|
|
@ -18,17 +18,17 @@ BEGIN
|
||||||
|
|
||||||
CALL buyUltimate(vWarehouseFk, vDated);
|
CALL buyUltimate(vWarehouseFk, vDated);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
|
CREATE OR REPLACE TEMPORARY TABLE tmp.sale
|
||||||
SELECT s.id saleFk , MOD(s.quantity, b.`grouping`) hasProblem
|
SELECT s.id saleFk , MOD(s.quantity, b.`grouping`) hasProblem
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN sale s ON s.ticketFk = tl.ticketFk
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
||||||
JOIN buy b ON b.id = bu.buyFk
|
JOIN buy b ON b.id = bu.buyFk
|
||||||
WHERE t.id = vSelf;
|
WHERE t.id = vSelf;
|
||||||
|
|
||||||
CALL sale_setProblem('hasRounding');
|
CALL sale_setProblem('hasRounding');
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.ticket;
|
DROP TEMPORARY TABLE tmp.sale;
|
||||||
DROP TEMPORARY TABLE tmp.buyUltimate;
|
DROP TEMPORARY TABLE tmp.buyUltimate;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -15,7 +15,7 @@ BEGIN
|
||||||
WITH tickets AS(
|
WITH tickets AS(
|
||||||
SELECT t.id ticketFk
|
SELECT t.id ticketFk
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
JOIN vn.sale s ON s.ticketFk = t.id
|
LEFT JOIN vn.sale s ON s.ticketFk = t.id
|
||||||
WHERE t.shipped >= util.midnight()
|
WHERE t.shipped >= util.midnight()
|
||||||
AND (s.itemFk = vItemFk OR vItemFk IS NULL)
|
AND (s.itemFk = vItemFk OR vItemFk IS NULL)
|
||||||
GROUP BY t.id
|
GROUP BY t.id
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_throwAwb`(vSelf INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Throws an error if travel does not have a logical AWB
|
||||||
|
* or there are several AWBs associated with the same DUA
|
||||||
|
*
|
||||||
|
* @param vSelf The travel id
|
||||||
|
*/
|
||||||
|
IF NOT travel_hasUniqueAwb(vSelf) THEN
|
||||||
|
CALL util.throw('A different AWB is found in the entries');
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,64 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`xdiario_new`(
|
||||||
|
vBookNumber INT,
|
||||||
|
vDated DATE,
|
||||||
|
vSubaccount VARCHAR(12),
|
||||||
|
vAccount VARCHAR(12),
|
||||||
|
vConcept VARCHAR(25),
|
||||||
|
vDebit DOUBLE,
|
||||||
|
vCredit DOUBLE,
|
||||||
|
vEuro DOUBLE,
|
||||||
|
vSerie CHAR(1),
|
||||||
|
vInvoice VARCHAR(8),
|
||||||
|
vVat DOUBLE,
|
||||||
|
vRe DOUBLE,
|
||||||
|
vAux TINYINT,
|
||||||
|
vCompanyFk INT,
|
||||||
|
OUT vNewBookNumber INT
|
||||||
|
)
|
||||||
|
/**
|
||||||
|
* Este procedimiento se encarga de la inserción de registros en la tabla XDiario.
|
||||||
|
* Si el número de asiento (vBookNumber) no está definido, se genera uno nuevo utilizando
|
||||||
|
* vn.ledger_next.
|
||||||
|
*
|
||||||
|
* @param vBookNumber Número de asiento. Si es NULL, se generará uno nuevo.
|
||||||
|
* @param vDated Fecha utilizada para generar un nuevo número de libro si vBookNumber es NULL.
|
||||||
|
* @param vSubaccount Subcuenta para la transacción.
|
||||||
|
* @param vAccount Cuenta para la transacción.
|
||||||
|
* @param vConcept Concepto de la transacción.
|
||||||
|
* @param vDebit Monto del débito para la transacción.
|
||||||
|
* @param vCredit Monto del crédito para la transacción.
|
||||||
|
* @param vEuro Monto en euros para la transacción.
|
||||||
|
* @param vSerie Serie para la transacción.
|
||||||
|
* @param vInvoice Número de factura para la transacción.
|
||||||
|
* @param vVat Monto del IVA para la transacción.
|
||||||
|
* @param vRe Monto del RE para la transacción.
|
||||||
|
* @param vAux Variable auxiliar para la transacción.
|
||||||
|
* @param vCompanyFk Clave foránea de la compañía para la transacción.
|
||||||
|
* @return No retorna un valor, pero realiza una inserción en la tabla XDiario.
|
||||||
|
*/
|
||||||
|
BEGIN
|
||||||
|
IF vBookNumber IS NULL THEN
|
||||||
|
CALL ledger_next(YEAR(vDated), vBookNumber);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO XDiario
|
||||||
|
SET ASIEN = vBookNumber,
|
||||||
|
FECHA = vDated,
|
||||||
|
SUBCTA = vSubaccount,
|
||||||
|
CONTRA = vAccount,
|
||||||
|
CONCEPTO = vConcept,
|
||||||
|
EURODEBE = vDebit,
|
||||||
|
EUROHABER = vCredit,
|
||||||
|
BASEEURO = vEuro,
|
||||||
|
SERIE = vSerie,
|
||||||
|
FACTURA = vInvoice,
|
||||||
|
IVA = vVat,
|
||||||
|
RECEQUIV = vRe,
|
||||||
|
AUXILIAR = IF(vAux = FALSE, NULL, '*'),
|
||||||
|
MONEDAUSO = 2,
|
||||||
|
empresa_id = vCompanyFk;
|
||||||
|
|
||||||
|
SET vNewBookNumber = vBookNumber;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -7,8 +7,8 @@ BEGIN
|
||||||
CALL supplier_checkIsActive(NEW.supplierFk);
|
CALL supplier_checkIsActive(NEW.supplierFk);
|
||||||
SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
|
SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
|
||||||
SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
|
SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);
|
||||||
IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN
|
IF NEW.travelFk IS NOT NULL THEN
|
||||||
CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries');
|
CALL travel_throwAwb(NEW.travelFk);
|
||||||
END IF;
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -25,8 +25,8 @@ BEGIN
|
||||||
|
|
||||||
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
|
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
|
||||||
|
|
||||||
IF NEW.travelFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.travelFk) THEN
|
IF NEW.travelFk IS NOT NULL THEN
|
||||||
CALL util.throw('The travel is incorrect, there is a different AWB in the associated entries');
|
CALL travel_throwAwb(NEW.travelFk);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT COUNT(*) > 0 INTO vIsVirtual
|
SELECT COUNT(*) > 0 INTO vIsVirtual
|
||||||
|
|
|
@ -4,6 +4,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketRefund_beforeIn
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
CALL ticketRefund_beforeUpsert(NEW.refundTicketFk, NEW.originalTicketFk);
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -4,6 +4,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketRefund_beforeUp
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
CALL ticketRefund_beforeUpsert(NEW.refundTicketFk, NEW.originalTicketFk);
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -9,8 +9,8 @@ BEGIN
|
||||||
|
|
||||||
CALL travel_checkWarehouseIsFeedStock(NEW.warehouseInFk);
|
CALL travel_checkWarehouseIsFeedStock(NEW.warehouseInFk);
|
||||||
|
|
||||||
IF NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
|
IF NEW.awbFk IS NOT NULL THEN
|
||||||
CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
|
CALL travel_throwAwb(NEW.id);
|
||||||
END IF;
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -33,8 +33,8 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF (NOT(NEW.awbFk <=> OLD.awbFk)) AND NEW.awbFk IS NOT NULL AND NOT travel_hasUniqueAwb(NEW.id) THEN
|
IF (NOT(NEW.awbFk <=> OLD.awbFk)) AND NEW.awbFk IS NOT NULL THEN
|
||||||
CALL util.throw('The AWB is incorrect, there is a different AWB in the associated entries');
|
CALL travel_throwAwb(NEW.id);
|
||||||
END IF;
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -28,6 +28,5 @@ AS SELECT `c`.`id` AS `Id_Compra`,
|
||||||
`c`.`workerFk` AS `Id_Trabajador`,
|
`c`.`workerFk` AS `Id_Trabajador`,
|
||||||
`c`.`weight` AS `weight`,
|
`c`.`weight` AS `weight`,
|
||||||
`c`.`dispatched` AS `dispatched`,
|
`c`.`dispatched` AS `dispatched`,
|
||||||
`c`.`containerFk` AS `container_id`,
|
|
||||||
`c`.`itemOriginalFk` AS `itemOriginalFk`
|
`c`.`itemOriginalFk` AS `itemOriginalFk`
|
||||||
FROM `vn`.`buy` `c`
|
FROM `vn`.`buy` `c`
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
INSERT INTO salix.defaultViewConfig
|
||||||
|
(tableCode, `columns`)
|
||||||
|
VALUES('routesList', '{"ID":true,"worker":true,"agency":true,"vehicle":true,"date":true,"volume":true,"description":true,"started":true,"finished":true,"actions":true}');
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
ALTER TABLE floranet.catalogue ADD addressFk int(11) NOT NULL;
|
||||||
|
ALTER TABLE floranet.catalogue ADD CONSTRAINT catalogue_address_FK FOREIGN KEY (addressFk) REFERENCES vn.address(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@ -0,0 +1,6 @@
|
||||||
|
ALTER TABLE floranet.builder DROP FOREIGN KEY builder_FK_1;
|
||||||
|
ALTER TABLE floranet.`element` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE floranet.`element` ADD id INT NOT NULL;
|
||||||
|
ALTER TABLE floranet.`element` ADD CONSTRAINT element_pk PRIMARY KEY (id);
|
||||||
|
ALTER TABLE floranet.builder ADD CONSTRAINT builder_element_FK FOREIGN KEY (elementFk) REFERENCES floranet.`element`(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE vn.clientConfig
|
||||||
|
ADD monthsToDisableUser int(10) unsigned DEFAULT NULL NULL;
|
||||||
|
|
||||||
|
UPDATE IGNORE vn.clientConfig
|
||||||
|
SET monthsToDisableUser = 12;
|
|
@ -0,0 +1,26 @@
|
||||||
|
DROP TABLE IF EXISTS vn2008.scanTree__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payroll_embargos__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary_source__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary_scan_line_buy__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary_scan_line__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary_scan__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.scan_line__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Familias__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.language__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Clientes_dits__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary_scan_line_expedition__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.warehouse_group__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Espionajes__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.jerarquia__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.wks__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Proveedores_comunicados__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.integra2_escala__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cp__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unary__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Estados__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.agency_hour__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Reservas__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cyc_declaration__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.route__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Proveedores_escritos__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.config__;
|
|
@ -0,0 +1,41 @@
|
||||||
|
DROP TABLE IF EXISTS vn2008.form_query__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.filtros__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Objetivos__;
|
||||||
|
UPDATE IGNORE vn.province
|
||||||
|
SET zoneFk = NULL
|
||||||
|
WHERE zoneFk IN (
|
||||||
|
SELECT zoneFk
|
||||||
|
FROM vn.province
|
||||||
|
WHERE zoneFk IS NOT NULL AND zoneFk NOT IN (SELECT id FROM vn.`zone`)
|
||||||
|
);
|
||||||
|
ALTER TABLE vn.province DROP FOREIGN KEY province_zone_fk;
|
||||||
|
ALTER TABLE vn.province MODIFY COLUMN zoneFk int(11) DEFAULT NULL NULL;
|
||||||
|
ALTER TABLE vn.province ADD CONSTRAINT
|
||||||
|
province_zone_FK FOREIGN KEY (zoneFk) REFERENCES vn.`zone`(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
DROP TABLE IF EXISTS vn2008.zones__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.rec_translator__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.warehouse_joined__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.warehouse_filtro__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.viaxpress__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cl_que__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Recibos_recorded__;
|
||||||
|
RENAME TABLE vn.coolerPathDetail TO vn.coolerPathDetail__;
|
||||||
|
ALTER TABLE vn.coolerPathDetail__ DROP FOREIGN KEY coolerPathDetail_FK;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cooler_path__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payrroll_apEmpresarial__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Compres_ok__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Movimientos_avisar__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Clases__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payroll_basess__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payroll_tipobasess__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.guillen__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.guillen_carry__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Series__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Permisos__;
|
||||||
|
ALTER TABLE vn.buy DROP FOREIGN KEY buy_FK_1;
|
||||||
|
DROP TABLE IF EXISTS vn2008.container__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.travel_reserve__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.tmpNEWTARIFAS__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Clientes_potenciales__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.duaDismissed__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cl_pet__;
|
|
@ -0,0 +1,27 @@
|
||||||
|
DROP TABLE IF EXISTS vn2008.expeditions_deleted__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Tipos_f11__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.commission__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Movimientos_revisar__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.recibida_agricola__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.tipsa__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.rounding__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Informes__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Monitoring__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Forms__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Clientes_event__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.wh_selection__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.template_bionic_component__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Agencias_province__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.travel_pattern__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.sort_merge_results_ernesto__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Conteo__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Consignatarios_devices__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.link__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.agency_warehouse__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.warehouse_lc__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.emp_day_pay__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Entradas_kop__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.dock__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.unaryScanFilter__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Grupos__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.nichos__;
|
|
@ -0,0 +1,26 @@
|
||||||
|
DROP TABLE IF EXISTS vn2008.preparation_exception__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Clientes_empresa__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.call_information__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.template_bionic_price__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.invoice_observation__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.edi_testigos__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cl_dep__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.agencia_descuadre__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payroll_datos__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.tblIVA__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.cyc__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Tickets_stack__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.config_host_forms__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.template_bionic_lot__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.payroll_bonificaciones__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.widget__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.accion_dits__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.credit_card__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Brasa__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Jefes__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.call_option__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.expeditions_pictures__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.scan__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.trolley__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.transport__;
|
||||||
|
DROP TABLE IF EXISTS vn2008.Baldas__;
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
ALTER TABLE floranet.`order` ADD IF NOT EXISTS observations TEXT NULL;
|
|
@ -0,0 +1,3 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
|
||||||
|
VALUES ('RouteConfig','*','READ','ALLOW','ROLE','employee');
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE vn.buy CHANGE containerFk containerFk__ smallint(5) unsigned DEFAULT NULL NULL;
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
CREATE OR REPLACE TABLE floranet.config (
|
||||||
|
email varchar(255) DEFAULT 'floranet@verdnatura.es' NOT NULL
|
||||||
|
)
|
||||||
|
ENGINE=InnoDB
|
||||||
|
DEFAULT CHARSET=utf8mb3
|
||||||
|
COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
DROP TABLE IF EXISTS floranet.builder;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE floranet.`element` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(30) NOT NULL,
|
||||||
|
`itemFk` int(11) DEFAULT NULL,
|
||||||
|
`longNameFilter` varchar(30) DEFAULT NULL,
|
||||||
|
`typeFk` smallint(5) unsigned DEFAULT NULL,
|
||||||
|
`minSize` int(10) unsigned DEFAULT NULL,
|
||||||
|
`maxSize` int(10) unsigned DEFAULT NULL,
|
||||||
|
`inkFk` char(3) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
||||||
|
`originFk` tinyint(2) unsigned DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `element_FK` (`itemFk`),
|
||||||
|
KEY `element_FK_1` (`typeFk`),
|
||||||
|
KEY `element_FK_2` (`inkFk`),
|
||||||
|
KEY `element_FK_3` (`originFk`),
|
||||||
|
CONSTRAINT `element_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_2` FOREIGN KEY (`inkFk`) REFERENCES `vn`.`ink` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_3` FOREIGN KEY (`originFk`) REFERENCES `vn`.`origin` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Filtro para localizar posibles items que coincidan con la descripción';
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE floranet.`recipe` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`itemFk` int(11) NOT NULL,
|
||||||
|
`elementFk` int(11) NOT NULL,
|
||||||
|
`quantity` int(10) unsigned NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `recipe_FK` (`itemFk`),
|
||||||
|
KEY `recipe_FK_1` (`elementFk`),
|
||||||
|
CONSTRAINT `recipe_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `recipe_element_FK` FOREIGN KEY (`elementFk`) REFERENCES `element` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Links handmade products with their elements';
|
|
@ -4,62 +4,8 @@ services:
|
||||||
image: registry.verdnatura.es/salix-front:${VERSION:?}
|
image: registry.verdnatura.es/salix-front:${VERSION:?}
|
||||||
build:
|
build:
|
||||||
context: front
|
context: front
|
||||||
environment:
|
|
||||||
- TZ
|
|
||||||
- NODE_ENV
|
|
||||||
ports:
|
|
||||||
- 80
|
|
||||||
deploy:
|
|
||||||
replicas: 2
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: 1G
|
|
||||||
back:
|
back:
|
||||||
image: registry.verdnatura.es/salix-back:${VERSION:?}
|
image: registry.verdnatura.es/salix-back:${VERSION:?}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: back/Dockerfile
|
dockerfile: back/Dockerfile
|
||||||
environment:
|
|
||||||
- TZ
|
|
||||||
- NODE_ENV
|
|
||||||
- DEBUG
|
|
||||||
ports:
|
|
||||||
- 3000
|
|
||||||
configs:
|
|
||||||
- source: datasources
|
|
||||||
target: /etc/salix/datasources.json
|
|
||||||
- source: datasources_local
|
|
||||||
target: /etc/salix/datasources.local.json
|
|
||||||
- source: print
|
|
||||||
target: /etc/salix/print.json
|
|
||||||
- source: print_local
|
|
||||||
target: /etc/salix/print.local.json
|
|
||||||
volumes:
|
|
||||||
- /mnt/appdata/pdfs:/var/lib/salix/pdfs
|
|
||||||
- /mnt/appdata/dms:/var/lib/salix/dms
|
|
||||||
- /mnt/appdata/image:/var/lib/salix/image
|
|
||||||
- /mnt/appdata/vn-access:/var/lib/salix/vn-access
|
|
||||||
deploy:
|
|
||||||
replicas: ${BACK_REPLICAS:?}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: 8G
|
|
||||||
configs:
|
|
||||||
datasources:
|
|
||||||
external: true
|
|
||||||
name: salix_datasources
|
|
||||||
datasources_local:
|
|
||||||
external: true
|
|
||||||
name: salix-${BRANCH_NAME:?}_datasources
|
|
||||||
print:
|
|
||||||
external: true
|
|
||||||
name: salix_print
|
|
||||||
print_local:
|
|
||||||
external: true
|
|
||||||
name: salix-${BRANCH_NAME:?}_print
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ describe('Client Add address path', () => {
|
||||||
await page.waitToClick(selectors.clientAddresses.saveButton);
|
await page.waitToClick(selectors.clientAddresses.saveButton);
|
||||||
const message = await page.waitForSnackbar();
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
expect(message.text).toContain('Incoterms is required for a non UEE member');
|
expect(message.text).toContain('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should receive an error after clicking save button as customsAgent is empty`, async() => {
|
it(`should receive an error after clicking save button as customsAgent is empty`, async() => {
|
||||||
|
@ -59,7 +59,7 @@ describe('Client Add address path', () => {
|
||||||
await page.waitToClick(selectors.clientAddresses.saveButton);
|
await page.waitToClick(selectors.clientAddresses.saveButton);
|
||||||
const message = await page.waitForSnackbar();
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
expect(message.text).toContain('Customs agent is required for a non UEE member');
|
expect(message.text).toContain('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should create a new custom agent and then save the address`, async() => {
|
it(`should create a new custom agent and then save the address`, async() => {
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
import selectors from '../../helpers/selectors.js';
|
|
||||||
import getBrowser from '../../helpers/puppeteer';
|
|
||||||
|
|
||||||
describe('Worker pda path', () => {
|
|
||||||
let browser;
|
|
||||||
let page;
|
|
||||||
beforeAll(async() => {
|
|
||||||
browser = await getBrowser();
|
|
||||||
page = browser.page;
|
|
||||||
await page.loginAndModule('hr', 'worker');
|
|
||||||
await page.accessToSearchResult('employeeNick');
|
|
||||||
await page.accessToSection('worker.card.pda');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async() => {
|
|
||||||
await browser.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should check if worker has already a PDA allocated', async() => {
|
|
||||||
expect(await page.waitToGetProperty(selectors.workerPda.currentPDA, 'value')).toContain('serialNumber1');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should deallocate the PDA', async() => {
|
|
||||||
await page.waitToClick(selectors.workerPda.delete);
|
|
||||||
let message = await page.waitForSnackbar();
|
|
||||||
|
|
||||||
expect(message.text).toContain('PDA deallocated');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should allocate a new PDA', async() => {
|
|
||||||
await page.autocompleteSearch(selectors.workerPda.newPDA, 'serialNumber2');
|
|
||||||
await page.waitToClick(selectors.workerPda.submit);
|
|
||||||
let message = await page.waitForSnackbar();
|
|
||||||
|
|
||||||
expect(message.text).toContain('PDA allocated');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should check if a new PDA has been allocated', async() => {
|
|
||||||
expect(await page.waitToGetProperty(selectors.workerPda.currentPDA, 'value')).toContain('serialNumber2');
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -69,3 +69,4 @@ Send cau: Enviar cau
|
||||||
By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
|
By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
|
||||||
ExplainReason: Explique el motivo por el que no deberia aparecer este fallo
|
ExplainReason: Explique el motivo por el que no deberia aparecer este fallo
|
||||||
You already have the mailAlias: Ya tienes este alias de correo
|
You already have the mailAlias: Ya tienes este alias de correo
|
||||||
|
Error loading ACLs: Error al cargar los ACLs
|
||||||
|
|
|
@ -7,16 +7,17 @@ import UserError from 'core/lib/user-error';
|
||||||
* @property {Boolean} loggedIn Whether the user is currently logged
|
* @property {Boolean} loggedIn Whether the user is currently logged
|
||||||
*/
|
*/
|
||||||
export default class Auth {
|
export default class Auth {
|
||||||
constructor($http, $q, $state, $transitions, $window, vnToken, vnModules, aclService) {
|
constructor($http, $q, vnApp, $translate, $state, $transitions, $window, vnToken, vnModules) {
|
||||||
Object.assign(this, {
|
Object.assign(this, {
|
||||||
$http,
|
$http,
|
||||||
$q,
|
$q,
|
||||||
|
vnApp,
|
||||||
|
$translate,
|
||||||
$state,
|
$state,
|
||||||
$transitions,
|
$transitions,
|
||||||
$window,
|
$window,
|
||||||
vnToken,
|
vnToken,
|
||||||
vnModules,
|
vnModules,
|
||||||
aclService,
|
|
||||||
loggedIn: false
|
loggedIn: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -39,9 +40,26 @@ export default class Auth {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.vnToken.token) {
|
if (this.vnToken.token) {
|
||||||
return this.loadAcls()
|
const loadWithRetry = () => {
|
||||||
|
return this.validateToken()
|
||||||
.then(() => true)
|
.then(() => true)
|
||||||
.catch(redirectToLogin);
|
.catch(err => {
|
||||||
|
switch (err.status) {
|
||||||
|
case 400:
|
||||||
|
case 401:
|
||||||
|
return redirectToLogin();
|
||||||
|
default:
|
||||||
|
return new Promise(resolve => {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.vnApp.showMessage(this.$translate.instant('Loading...'));
|
||||||
|
|
||||||
|
resolve(loadWithRetry());
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return loadWithRetry();
|
||||||
} else
|
} else
|
||||||
return redirectToLogin();
|
return redirectToLogin();
|
||||||
});
|
});
|
||||||
|
@ -87,13 +105,11 @@ export default class Auth {
|
||||||
headers: {Authorization: json.data.token}
|
headers: {Authorization: json.data.token}
|
||||||
}).then(({data}) => {
|
}).then(({data}) => {
|
||||||
this.vnToken.set(json.data.token, data.multimediaToken.id, now, json.data.ttl, remember);
|
this.vnToken.set(json.data.token, data.multimediaToken.id, now, json.data.ttl, remember);
|
||||||
this.loadAcls().then(() => {
|
|
||||||
let continueHash = this.$state.params.continue;
|
let continueHash = this.$state.params.continue;
|
||||||
if (continueHash)
|
if (continueHash)
|
||||||
this.$window.location = continueHash;
|
this.$window.location = continueHash;
|
||||||
else
|
else
|
||||||
this.$state.go('home');
|
this.$state.go('home');
|
||||||
});
|
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,24 +123,25 @@ export default class Auth {
|
||||||
this.vnToken.unset();
|
this.vnToken.unset();
|
||||||
this.loggedIn = false;
|
this.loggedIn = false;
|
||||||
this.vnModules.reset();
|
this.vnModules.reset();
|
||||||
this.aclService.reset();
|
this.vnModules.aclService.reset();
|
||||||
this.$state.go('login');
|
this.$state.go('login');
|
||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadAcls() {
|
validateToken() {
|
||||||
return this.aclService.load()
|
return this.$http.get('VnUsers/validateToken')
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.loggedIn = true;
|
this.loggedIn = true;
|
||||||
this.vnModules.reset();
|
this.vnModules.reset();
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
this.vnToken.unset();
|
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Auth.$inject = ['$http', '$q', '$state', '$transitions', '$window', 'vnToken', 'vnModules', 'aclService'];
|
Auth.$inject = [
|
||||||
|
'$http', '$q', 'vnApp', '$translate', '$state',
|
||||||
|
'$transitions', '$window', 'vnToken', 'vnModules'];
|
||||||
|
|
||||||
ngModule.service('vnAuth', Auth);
|
ngModule.service('vnAuth', Auth);
|
||||||
|
|
|
@ -12,7 +12,8 @@ function config($stateProvider, $urlRouterProvider) {
|
||||||
template: '<vn-layout></vn-layout>',
|
template: '<vn-layout></vn-layout>',
|
||||||
resolve: {
|
resolve: {
|
||||||
config: ['vnConfig', vnConfig => vnConfig.initialize()],
|
config: ['vnConfig', vnConfig => vnConfig.initialize()],
|
||||||
token: ['vnToken', vnToken => vnToken.fetchConfig()]
|
token: ['vnToken', vnToken => vnToken.fetchConfig()],
|
||||||
|
acl: ['aclService', aclService => aclService.load()]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.state('outLayout', {
|
.state('outLayout', {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
module.exports = function(Self) {
|
module.exports = function(Self) {
|
||||||
require('../methods/application/status')(Self);
|
require('../methods/application/status')(Self);
|
||||||
require('../methods/application/post')(Self);
|
require('../methods/application/post')(Self);
|
||||||
|
|
|
@ -226,5 +226,7 @@
|
||||||
"This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
|
"This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
|
||||||
"They're not your subordinate": "They're not your subordinate",
|
"They're not your subordinate": "They're not your subordinate",
|
||||||
"InvoiceIn is already booked": "InvoiceIn is already booked",
|
"InvoiceIn is already booked": "InvoiceIn is already booked",
|
||||||
"This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency"
|
"This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency",
|
||||||
|
"You can only have one PDA": "You can only have one PDA",
|
||||||
|
"Incoterms and Customs agent are required for a non UEE member": "Incoterms and Customs agent are required for a non UEE member"
|
||||||
}
|
}
|
|
@ -357,6 +357,9 @@
|
||||||
"This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia",
|
"This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia",
|
||||||
"Select ticket or client": "Elija un ticket o un client",
|
"Select ticket or client": "Elija un ticket o un client",
|
||||||
"It was not able to create the invoice": "No se pudo crear la factura",
|
"It was not able to create the invoice": "No se pudo crear la factura",
|
||||||
"This PDA is already assigned to another user": "This PDA is already assigned to another user",
|
"ticketCommercial": "El ticket {{ ticket }} para el vendedor {{ salesMan }} está en preparación. (mensaje generado automáticamente)",
|
||||||
"ticketCommercial": "El ticket {{ ticket }} para el vendedor {{ salesMan }} está en preparación. (mensaje generado automáticamente)"
|
"This PDA is already assigned to another user": "Este PDA ya está asignado a otro usuario",
|
||||||
|
"You can only have one PDA": "Solo puedes tener un PDA",
|
||||||
|
"Incoterms and Customs agent are required for a non UEE member": "Se requieren Incoterms y agente de aduanas para un no miembro de la UEE",
|
||||||
|
"You can not use the same password": "No puedes usar la misma contraseña"
|
||||||
}
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = (localAsProduction = true) => {
|
||||||
|
return (!process.env.NODE_ENV && localAsProduction) || process.env.NODE_ENV == 'production';
|
||||||
|
};
|
|
@ -3,9 +3,10 @@ const app = require('vn-loopback/server/server');
|
||||||
const ldap = require('../util/ldapjs-extra');
|
const ldap = require('../util/ldapjs-extra');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const nthash = require('smbhash').nthash;
|
const nthash = require('smbhash').nthash;
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
const shouldSync = process.env.NODE_ENV !== 'test';
|
const shouldSync = isProduction();
|
||||||
|
|
||||||
Self.getLinker = async function() {
|
Self.getLinker = async function() {
|
||||||
return await Self.findOne({
|
return await Self.findOne({
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
const ldap = require('../util/ldapjs-extra');
|
const ldap = require('../util/ldapjs-extra');
|
||||||
const execFile = require('child_process').execFile;
|
const execFile = require('child_process').execFile;
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Summary of userAccountControl flags:
|
* Summary of userAccountControl flags:
|
||||||
|
@ -12,7 +13,7 @@ const UserAccountControlFlags = {
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
const shouldSync = process.env.NODE_ENV !== 'test';
|
const shouldSync = isProduction();
|
||||||
|
|
||||||
Self.getLinker = async function() {
|
Self.getLinker = async function() {
|
||||||
return await Self.findOne({
|
return await Self.findOne({
|
||||||
|
|
|
@ -92,11 +92,8 @@ module.exports = function(Self) {
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
const isUeeMember = province.country().isUeeMember;
|
const isUeeMember = province.country().isUeeMember;
|
||||||
if (!isUeeMember && !args.incotermsFk)
|
if (!isUeeMember && (!args.incotermsFk || !args.customsAgentFk))
|
||||||
throw new UserError(`Incoterms is required for a non UEE member`);
|
throw new UserError(`Incoterms and Customs agent are required for a non UEE member`);
|
||||||
|
|
||||||
if (!isUeeMember && !args.customsAgentFk)
|
|
||||||
throw new UserError(`Customs agent is required for a non UEE member`);
|
|
||||||
|
|
||||||
delete args.ctx; // Remove unwanted properties
|
delete args.ctx; // Remove unwanted properties
|
||||||
const newAddress = await models.Address.create(args, myOptions);
|
const newAddress = await models.Address.create(args, myOptions);
|
||||||
|
|
|
@ -95,9 +95,11 @@ module.exports = function(Self) {
|
||||||
myOptions
|
myOptions
|
||||||
);
|
);
|
||||||
} else if (accountingType.isAutoConciliated == true) {
|
} else if (accountingType.isAutoConciliated == true) {
|
||||||
const description = `${originalClient.id} : ${originalClient.socialName} - ${accountingType.receiptDescription}`;
|
const description =
|
||||||
const [xdiarioNew] = await Self.rawSql(
|
`${originalClient.id} : ${originalClient.socialName} - ${accountingType.receiptDescription}`;
|
||||||
`SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ledger;`,
|
const [, [xdiarioNew]] = await Self.rawSql(
|
||||||
|
`CALL xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, @xdiarioNew);
|
||||||
|
SELECT @xdiarioNew ledger;`,
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
date,
|
date,
|
||||||
|
@ -118,7 +120,7 @@ module.exports = function(Self) {
|
||||||
);
|
);
|
||||||
|
|
||||||
await Self.rawSql(
|
await Self.rawSql(
|
||||||
`SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`,
|
`CALL xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, @xdiarioNew);`,
|
||||||
[
|
[
|
||||||
xdiarioNew.ledger,
|
xdiarioNew.ledger,
|
||||||
date,
|
date,
|
||||||
|
|
|
@ -50,7 +50,7 @@ describe('Address createAddress', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(error).toBeDefined();
|
expect(error).toBeDefined();
|
||||||
expect(error.message).toEqual('Incoterms is required for a non UEE member');
|
expect(error.message).toEqual('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw a non uee member error if no customsAgent is defined', async() => {
|
it('should throw a non uee member error if no customsAgent is defined', async() => {
|
||||||
|
@ -81,7 +81,7 @@ describe('Address createAddress', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(error).toBeDefined();
|
expect(error).toBeDefined();
|
||||||
expect(error.message).toEqual('Customs agent is required for a non UEE member');
|
expect(error.message).toEqual('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create a new address and set as a client default address', async() => {
|
it('should create a new address and set as a client default address', async() => {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const got = require('got');
|
const got = require('got');
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('send', {
|
Self.remoteMethod('send', {
|
||||||
|
@ -47,7 +48,7 @@ module.exports = Self => {
|
||||||
|
|
||||||
let response;
|
let response;
|
||||||
try {
|
try {
|
||||||
if (process.env.NODE_ENV !== 'production')
|
if (!isProduction(false))
|
||||||
response = {result: [{status: 'ok'}]};
|
response = {result: [{status: 'ok'}]};
|
||||||
else {
|
else {
|
||||||
const jsonTest = {
|
const jsonTest = {
|
||||||
|
|
|
@ -76,7 +76,6 @@ module.exports = Self => {
|
||||||
packing: buyUltimate.packing,
|
packing: buyUltimate.packing,
|
||||||
grouping: buyUltimate.grouping,
|
grouping: buyUltimate.grouping,
|
||||||
groupingMode: buyUltimate.groupingMode,
|
groupingMode: buyUltimate.groupingMode,
|
||||||
containerFk: buyUltimate.containerFk,
|
|
||||||
comissionValue: buyUltimate.comissionValue,
|
comissionValue: buyUltimate.comissionValue,
|
||||||
packageValue: buyUltimate.packageValue,
|
packageValue: buyUltimate.packageValue,
|
||||||
location: buyUltimate.location,
|
location: buyUltimate.location,
|
||||||
|
|
|
@ -63,9 +63,6 @@
|
||||||
"isIgnored": {
|
"isIgnored": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"containerFk": {
|
|
||||||
"type": "number"
|
|
||||||
},
|
|
||||||
"location": {
|
"location": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('download', {
|
Self.remoteMethodCtx('download', {
|
||||||
|
@ -66,7 +67,7 @@ module.exports = Self => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'test') {
|
if (!isProduction()) {
|
||||||
try {
|
try {
|
||||||
await fs.access(file.path);
|
await fs.access(file.path);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const print = require('vn-print');
|
const print = require('vn-print');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/invoiceOut/filter')(Self);
|
require('../methods/invoiceOut/filter')(Self);
|
||||||
|
@ -59,7 +60,7 @@ module.exports = Self => {
|
||||||
hasPdf: true
|
hasPdf: true
|
||||||
}, options);
|
}, options);
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== 'test') {
|
if (isProduction()) {
|
||||||
await print.storage.write(buffer, {
|
await print.storage.write(buffer, {
|
||||||
type: 'invoice',
|
type: 'invoice',
|
||||||
path: pdfFile.path,
|
path: pdfFile.path,
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
url="Tickets"
|
url="Tickets"
|
||||||
label="Ticket"
|
label="Ticket"
|
||||||
search-function="{or: [{id: $search}, {nickname: {like: '%'+$search+'%'}}]}"
|
search-function="{refFk: null, or: [{id: $search}, {nickname: {like: '%'+$search+'%'}}]}"
|
||||||
show-field="id"
|
show-field="id"
|
||||||
value-field="id"
|
value-field="id"
|
||||||
fields="['nickname']"
|
fields="['nickname']"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
const isProduction = require('vn-loopback/server/boot/isProduction');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('upload', {
|
Self.remoteMethodCtx('upload', {
|
||||||
|
@ -111,7 +112,7 @@ module.exports = Self => {
|
||||||
const destinationFile = path.join(
|
const destinationFile = path.join(
|
||||||
accessContainer.client.root, accessContainer.name, appName, `${toVersion}.7z`);
|
accessContainer.client.root, accessContainer.name, appName, `${toVersion}.7z`);
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'test')
|
if (!isProduction())
|
||||||
await fs.unlink(srcFile);
|
await fs.unlink(srcFile);
|
||||||
else {
|
else {
|
||||||
await fs.move(srcFile, destinationFile, {
|
await fs.move(srcFile, destinationFile, {
|
||||||
|
|
|
@ -62,12 +62,12 @@ module.exports = Self => {
|
||||||
|
|
||||||
const clone = await models.Roadmap.create(roadmap, options);
|
const clone = await models.Roadmap.create(roadmap, options);
|
||||||
|
|
||||||
const expeditionTrucks = roadmap.expeditionTruck();
|
const roadmapStops = roadmap.roadmapStop();
|
||||||
expeditionTrucks.map(expeditionTruck => {
|
roadmapStops.map(roadmapStop => {
|
||||||
expeditionTruck.roadmapFk = clone.id;
|
roadmapStop.roadmapFk = clone.id;
|
||||||
return expeditionTruck;
|
return roadmapStop;
|
||||||
});
|
});
|
||||||
await models.ExpeditionTruck.create(expeditionTrucks, options);
|
await models.RoadmapStop.create(roadmapStops, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
await tx.commit();
|
await tx.commit();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue