#6434 - SignIn issue_improve-signInLogMethod #1848
|
@ -12,7 +12,9 @@
|
||||||
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
|
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
|
||||||
},
|
},
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
|
"loopback",
|
||||||
"salix",
|
"salix",
|
||||||
"fdescribe"
|
"fdescribe",
|
||||||
|
"xdescribe"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [2350.01] - 2023-12-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
### Changed
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
## [2348.01] - 2023-11-30
|
## [2348.01] - 2023-11-30
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -49,7 +49,7 @@ module.exports = Self => {
|
||||||
ish.packing,
|
ish.packing,
|
||||||
ish.grouping,
|
ish.grouping,
|
||||||
s.isAdded,
|
s.isAdded,
|
||||||
s.originalQuantity,
|
s.originalQuantity,
|
||||||
s.quantity saleQuantity,
|
s.quantity saleQuantity,
|
||||||
iss.quantity reservedQuantity,
|
iss.quantity reservedQuantity,
|
||||||
SUM(iss.quantity) OVER (PARTITION BY s.id ORDER BY ish.id) accumulatedQuantity,
|
SUM(iss.quantity) OVER (PARTITION BY s.id ORDER BY ish.id) accumulatedQuantity,
|
||||||
|
@ -75,7 +75,7 @@ module.exports = Self => {
|
||||||
LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
|
LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
|
||||||
LEFT JOIN origin o ON o.id = i.originFk
|
LEFT JOIN origin o ON o.id = i.originFk
|
||||||
WHERE tc.collectionFk = ?
|
WHERE tc.collectionFk = ?
|
||||||
GROUP BY ish.id, p.code, p2.code
|
GROUP BY s.id, ish.id, p.code, p2.code
|
||||||
ORDER BY pickingOrder;`, [id], myOptions);
|
ORDER BY pickingOrder;`, [id], myOptions);
|
||||||
|
|
||||||
if (print)
|
if (print)
|
||||||
|
@ -105,7 +105,7 @@ module.exports = Self => {
|
||||||
LEFT JOIN vn.buy c ON c.itemFk = s.itemFk
|
LEFT JOIN vn.buy c ON c.itemFk = s.itemFk
|
||||||
LEFT JOIN vn.entry e ON e.id = c.entryFk
|
LEFT JOIN vn.entry e ON e.id = c.entryFk
|
||||||
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
|
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
|
||||||
WHERE s.ticketFk = ?
|
WHERE s.ticketFk = ?
|
||||||
AND tr.landed >= util.VN_CURDATE() - INTERVAL 1 YEAR`,
|
AND tr.landed >= util.VN_CURDATE() - INTERVAL 1 YEAR`,
|
||||||
[ticketId], myOptions);
|
[ticketId], myOptions);
|
||||||
ticket.sales = [];
|
ticket.sales = [];
|
||||||
|
|
|
@ -1,133 +0,0 @@
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethodCtx('newCollection', {
|
|
||||||
description: 'Make a new collection of tickets',
|
|
||||||
accessType: 'WRITE',
|
|
||||||
accepts: [{
|
|
||||||
arg: 'collectionFk',
|
|
||||||
type: 'Number',
|
|
||||||
required: false,
|
|
||||||
description: 'The collection id'
|
|
||||||
}, {
|
|
||||||
arg: 'sectorFk',
|
|
||||||
type: 'Number',
|
|
||||||
required: true,
|
|
||||||
description: 'The sector of worker'
|
|
||||||
}, {
|
|
||||||
arg: 'vWagons',
|
|
||||||
type: 'Number',
|
|
||||||
required: true,
|
|
||||||
description: 'The number of wagons'
|
|
||||||
}],
|
|
||||||
returns: {
|
|
||||||
type: 'Object',
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
|
||||||
path: `/newCollection`,
|
|
||||||
verb: 'POST'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.newCollection = async(ctx, collectionFk, sectorFk, vWagons) => {
|
|
||||||
let query = '';
|
|
||||||
const userId = ctx.req.accessToken.userId;
|
|
||||||
|
|
||||||
if (!collectionFk) {
|
|
||||||
query = `CALL vn.collectionTrain_newBeta(?,?,?)`;
|
|
||||||
const [result] = await Self.rawSql(query, [sectorFk, vWagons, userId], {userId});
|
|
||||||
if (result.length == 0)
|
|
||||||
throw new Error(`No collections for today`);
|
|
||||||
|
|
||||||
collectionFk = result[0].vCollectionFk;
|
|
||||||
}
|
|
||||||
|
|
||||||
query = `CALL vn.collectionTicket_get(?)`;
|
|
||||||
const [tickets] = await Self.rawSql(query, [collectionFk], {userId});
|
|
||||||
|
|
||||||
query = `CALL vn.collectionSale_get(?)`;
|
|
||||||
const [sales] = await Self.rawSql(query, [collectionFk], {userId});
|
|
||||||
|
|
||||||
query = `CALL vn.collectionPlacement_get(?)`;
|
|
||||||
const [placements] = await Self.rawSql(query, [collectionFk], {userId});
|
|
||||||
|
|
||||||
query = `CALL vn.collectionSticker_print(?,?)`;
|
|
||||||
await Self.rawSql(query, [collectionFk, sectorFk], {userId});
|
|
||||||
|
|
||||||
return makeCollection(tickets, sales, placements, collectionFk);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a collection json
|
|
||||||
* @param {*} tickets - Request tickets
|
|
||||||
* @param {*} sales - Request sales
|
|
||||||
* @param {*} placements - Request placements
|
|
||||||
* @param {*} collectionFk - Request placements
|
|
||||||
* @return {Object} Collection JSON
|
|
||||||
*/
|
|
||||||
async function makeCollection(tickets, sales, placements, collectionFk) {
|
|
||||||
let collection = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < tickets.length; i++) {
|
|
||||||
let ticket = {};
|
|
||||||
ticket['ticketFk'] = tickets[i]['ticketFk'];
|
|
||||||
ticket['level'] = tickets[i]['level'];
|
|
||||||
ticket['agencyName'] = tickets[i]['agencyName'];
|
|
||||||
ticket['warehouseFk'] = tickets[i]['warehouseFk'];
|
|
||||||
ticket['salesPersonFk'] = tickets[i]['salesPersonFk'];
|
|
||||||
|
|
||||||
let ticketSales = [];
|
|
||||||
|
|
||||||
for (let x = 0; x < sales.length; x++) {
|
|
||||||
if (sales[x]['ticketFk'] == ticket['ticketFk']) {
|
|
||||||
let sale = {};
|
|
||||||
sale['collectionFk'] = collectionFk;
|
|
||||||
sale['ticketFk'] = sales[x]['ticketFk'];
|
|
||||||
sale['saleFk'] = sales[x]['saleFk'];
|
|
||||||
sale['itemFk'] = sales[x]['itemFk'];
|
|
||||||
sale['quantity'] = sales[x]['quantity'];
|
|
||||||
if (sales[x]['quantityPicked'] != null)
|
|
||||||
sale['quantityPicked'] = sales[x]['quantityPicked'];
|
|
||||||
else
|
|
||||||
sale['quantityPicked'] = 0;
|
|
||||||
sale['longName'] = sales[x]['longName'];
|
|
||||||
sale['size'] = sales[x]['size'];
|
|
||||||
sale['color'] = sales[x]['color'];
|
|
||||||
sale['discount'] = sales[x]['discount'];
|
|
||||||
sale['price'] = sales[x]['price'];
|
|
||||||
sale['stems'] = sales[x]['stems'];
|
|
||||||
sale['category'] = sales[x]['category'];
|
|
||||||
sale['origin'] = sales[x]['origin'];
|
|
||||||
sale['clientFk'] = sales[x]['clientFk'];
|
|
||||||
sale['productor'] = sales[x]['productor'];
|
|
||||||
sale['reserved'] = sales[x]['reserved'];
|
|
||||||
sale['isPreviousPrepared'] = sales[x]['isPreviousPrepared'];
|
|
||||||
sale['isPrepared'] = sales[x]['isPrepared'];
|
|
||||||
sale['isControlled'] = sales[x]['isControlled'];
|
|
||||||
|
|
||||||
let salePlacements = [];
|
|
||||||
|
|
||||||
for (let z = 0; z < placements.length; z++) {
|
|
||||||
if (placements[z]['saleFk'] == sale['saleFk']) {
|
|
||||||
let placement = {};
|
|
||||||
placement['saleFk'] = placements[z]['saleFk'];
|
|
||||||
placement['itemFk'] = placements[z]['itemFk'];
|
|
||||||
placement['placement'] = placements[z]['placement'];
|
|
||||||
placement['shelving'] = placements[z]['shelving'];
|
|
||||||
placement['created'] = placements[z]['created'];
|
|
||||||
placement['visible'] = placements[z]['visible'];
|
|
||||||
placement['order'] = placements[z]['order'];
|
|
||||||
placement['grouping'] = placements[z]['grouping'];
|
|
||||||
salePlacements.push(placement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sale['placements'] = salePlacements;
|
|
||||||
ticketSales.push(sale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ticket['sales'] = ticketSales;
|
|
||||||
collection.push(ticket);
|
|
||||||
}
|
|
||||||
|
|
||||||
return collection;
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,12 +0,0 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
|
||||||
|
|
||||||
describe('newCollection()', () => {
|
|
||||||
it('should return a new collection', async() => {
|
|
||||||
pending('#3400 analizar que hacer con rutas de back collection');
|
|
||||||
let ctx = {req: {accessToken: {userId: 1106}}};
|
|
||||||
let response = await models.Collection.newCollection(ctx, 1, 1, 1);
|
|
||||||
|
|
||||||
expect(response.length).toBeGreaterThan(0);
|
|
||||||
expect(response[0].ticketFk).toEqual(2);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
|
||||||
|
<soap12:Body>
|
||||||
|
<DeleteEnvio xmlns="http://82.223.6.71:82">
|
||||||
|
<IdCliente><%= viaexpressConfig.client %></IdCliente>
|
||||||
|
<Usuario><%= viaexpressConfig.user %></Usuario>
|
||||||
|
<Password><%= viaexpressConfig.password %></Password>
|
||||||
|
<etiqueta><%= externalId %></etiqueta>
|
||||||
|
</DeleteEnvio>
|
||||||
|
</soap12:Body>
|
||||||
|
</soap12:Envelope>
|
|
@ -0,0 +1,45 @@
|
||||||
|
const axios = require('axios');
|
||||||
|
const {DOMParser} = require('xmldom');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('deleteExpedition', {
|
||||||
|
description: 'Delete a shipment by providing the expedition ID, interacting with Viaexpress API',
|
||||||
|
accessType: 'WRITE',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'expeditionFk',
|
||||||
|
type: 'number',
|
||||||
|
required: true
|
||||||
|
}],
|
||||||
|
returns: {
|
||||||
|
type: ['object'],
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/deleteExpedition`,
|
||||||
|
verb: 'POST'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.deleteExpedition = async expeditionFk => {
|
||||||
|
const models = Self.app.models;
|
||||||
|
|
||||||
|
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
||||||
|
fields: ['url']
|
||||||
|
});
|
||||||
|
|
||||||
|
const renderedXml = await models.ViaexpressConfig.deleteExpeditionRenderer(expeditionFk);
|
||||||
|
const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, renderedXml, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/soap+xml; charset=utf-8'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const xmlString = response.data;
|
||||||
|
const parser = new DOMParser();
|
||||||
|
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
|
||||||
|
const resultElement = xmlDoc.getElementsByTagName('DeleteEnvioResult')[0];
|
||||||
|
const result = resultElement.textContent;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const ejs = require('ejs');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('deleteExpeditionRenderer', {
|
||||||
|
description: 'Renders the data from an XML',
|
||||||
|
accessType: 'READ',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'expeditionFk',
|
||||||
|
type: 'number',
|
||||||
|
required: true
|
||||||
|
}],
|
||||||
|
returns: {
|
||||||
|
type: ['object'],
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/deleteExpeditionRenderer`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.deleteExpeditionRenderer = async expeditionFk => {
|
||||||
|
const models = Self.app.models;
|
||||||
|
|
||||||
|
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
||||||
|
fields: ['client', 'user', 'password']
|
||||||
|
});
|
||||||
|
|
||||||
|
const expedition = await models.Expedition.findOne({
|
||||||
|
fields: ['id', 'externalId'],
|
||||||
|
where: {id: expeditionFk}
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
viaexpressConfig,
|
||||||
|
externalId: expedition.externalId
|
||||||
|
};
|
||||||
|
|
||||||
|
const template = fs.readFileSync(__dirname + '/deleteExpedition.ejs', 'utf-8');
|
||||||
|
const renderedXml = ejs.render(template, data);
|
||||||
|
return renderedXml;
|
||||||
|
};
|
||||||
|
};
|
|
@ -49,13 +49,7 @@ module.exports = Self => {
|
||||||
if (vnUser.twoFactor)
|
if (vnUser.twoFactor)
|
||||||
throw new ForbiddenError(null, 'REQUIRES_2FA');
|
throw new ForbiddenError(null, 'REQUIRES_2FA');
|
||||||
}
|
}
|
||||||
const validateLogin = await Self.validateLogin(user, password);
|
return Self.validateLogin(user, password, ctx);
|
||||||
await Self.app.models.SignInLog.create({
|
|
||||||
token: validateLogin.token,
|
|
||||||
userFk: vnUser.id,
|
|
||||||
ip: ctx.req.ip
|
|
||||||
});
|
|
||||||
return validateLogin;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Self.passExpired = async vnUser => {
|
Self.passExpired = async vnUser => {
|
||||||
|
|
|
@ -2,7 +2,7 @@ const {models} = require('vn-loopback/server/server');
|
||||||
|
|
||||||
describe('VnUser Sign-in()', () => {
|
describe('VnUser Sign-in()', () => {
|
||||||
const employeeId = 1;
|
const employeeId = 1;
|
||||||
const unauthCtx = {
|
const unAuthCtx = {
|
||||||
req: {
|
req: {
|
||||||
headers: {},
|
headers: {},
|
||||||
connection: {
|
connection: {
|
||||||
|
@ -15,20 +15,21 @@ describe('VnUser Sign-in()', () => {
|
||||||
const {VnUser, AccessToken, SignInLog} = models;
|
const {VnUser, AccessToken, SignInLog} = models;
|
||||||
describe('when credentials are correct', () => {
|
describe('when credentials are correct', () => {
|
||||||
it('should return the token if user uses email', async() => {
|
it('should return the token if user uses email', async() => {
|
||||||
let login = await VnUser.signIn(unauthCtx, 'salesAssistant@mydomain.com', 'nightmare');
|
let login = await VnUser.signIn(unAuthCtx, 'salesAssistant@mydomain.com', 'nightmare');
|
||||||
let accessToken = await AccessToken.findById(login.token);
|
let accessToken = await AccessToken.findById(login.token);
|
||||||
let ctx = {req: {accessToken: accessToken}};
|
let ctx = {req: {accessToken: accessToken}};
|
||||||
let signInLog = await SignInLog.find({where: {token: accessToken.id}});
|
let signInLog = await SignInLog.find({where: {token: accessToken.id}});
|
||||||
|
|
||||||
expect(signInLog.length).toEqual(1);
|
expect(signInLog.length).toEqual(1);
|
||||||
expect(signInLog[0].userFk).toEqual(accessToken.userId);
|
expect(signInLog[0].userFk).toEqual(accessToken.userId);
|
||||||
|
expect(signInLog[0].owner).toEqual(true);
|
||||||
expect(login.token).toBeDefined();
|
expect(login.token).toBeDefined();
|
||||||
|
|
||||||
await VnUser.logout(ctx.req.accessToken.id);
|
await VnUser.logout(ctx.req.accessToken.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the token', async() => {
|
it('should return the token', async() => {
|
||||||
let login = await VnUser.signIn(unauthCtx, 'salesAssistant', 'nightmare');
|
let login = await VnUser.signIn(unAuthCtx, 'salesAssistant', 'nightmare');
|
||||||
let accessToken = await AccessToken.findById(login.token);
|
let accessToken = await AccessToken.findById(login.token);
|
||||||
let ctx = {req: {accessToken: accessToken}};
|
let ctx = {req: {accessToken: accessToken}};
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ describe('VnUser Sign-in()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the token if the user doesnt exist but the client does', async() => {
|
it('should return the token if the user doesnt exist but the client does', async() => {
|
||||||
let login = await VnUser.signIn(unauthCtx, 'PetterParker', 'nightmare');
|
let login = await VnUser.signIn(unAuthCtx, 'PetterParker', 'nightmare');
|
||||||
let accessToken = await AccessToken.findById(login.token);
|
let accessToken = await AccessToken.findById(login.token);
|
||||||
let ctx = {req: {accessToken: accessToken}};
|
let ctx = {req: {accessToken: accessToken}};
|
||||||
|
|
||||||
|
@ -53,7 +54,7 @@ describe('VnUser Sign-in()', () => {
|
||||||
let error;
|
let error;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await VnUser.signIn(unauthCtx, 'IDontExist', 'TotallyWrongPassword');
|
await VnUser.signIn(unAuthCtx, 'IDontExist', 'TotallyWrongPassword');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error = e;
|
error = e;
|
||||||
}
|
}
|
||||||
|
@ -74,7 +75,7 @@ describe('VnUser Sign-in()', () => {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
await employee.updateAttribute('twoFactor', 'email', options);
|
await employee.updateAttribute('twoFactor', 'email', options);
|
||||||
|
|
||||||
await VnUser.signIn(unauthCtx, 'employee', 'nightmare', options);
|
await VnUser.signIn(unAuthCtx, 'employee', 'nightmare', options);
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
|
@ -99,7 +100,7 @@ describe('VnUser Sign-in()', () => {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
await employee.updateAttribute('passExpired', yesterday, options);
|
await employee.updateAttribute('passExpired', yesterday, options);
|
||||||
|
|
||||||
await VnUser.signIn(unauthCtx, 'employee', 'nightmare', options);
|
await VnUser.signIn(unAuthCtx, 'employee', 'nightmare', options);
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/collection/getCollection')(Self);
|
require('../methods/collection/getCollection')(Self);
|
||||||
require('../methods/collection/newCollection')(Self);
|
|
||||||
require('../methods/collection/getSectors')(Self);
|
require('../methods/collection/getSectors')(Self);
|
||||||
require('../methods/collection/setSaleQuantity')(Self);
|
require('../methods/collection/setSaleQuantity')(Self);
|
||||||
require('../methods/collection/previousLabel')(Self);
|
require('../methods/collection/previousLabel')(Self);
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/viaexpress-config/internationalExpedition')(Self);
|
require('../methods/viaexpress-config/internationalExpedition')(Self);
|
||||||
require('../methods/viaexpress-config/renderer')(Self);
|
require('../methods/viaexpress-config/renderer')(Self);
|
||||||
|
require('../methods/viaexpress-config/deleteExpedition')(Self);
|
||||||
|
require('../methods/viaexpress-config/deleteExpeditionRenderer')(Self);
|
||||||
};
|
};
|
||||||
|
|
|
@ -124,20 +124,43 @@ module.exports = function(Self) {
|
||||||
|
|
||||||
return email.send();
|
return email.send();
|
||||||
});
|
});
|
||||||
Self.signInValidate = (user, userToken) => {
|
|
||||||
|
/**
|
||||||
|
* Sign-in validate. *
|
||||||
|
* @param {Integer} user The user
|
||||||
|
* @param {Object} userToken Options
|
||||||
|
* @param {Object} token accessToken
|
||||||
|
* @param {Object} ctx context
|
||||||
|
*/
|
||||||
|
Self.signInValidate = async(user, userToken, token, ctx) => {
|
||||||
const [[key, value]] = Object.entries(Self.userUses(user));
|
const [[key, value]] = Object.entries(Self.userUses(user));
|
||||||
if (userToken[key].toLowerCase().trim() !== value.toLowerCase().trim()) {
|
const isOwner = Self.rawSql(`SELECT ? = ? `, [userToken[key], value]);
|
||||||
console.error('ERROR!!! - Signin with other user', userToken, user);
|
await Self.app.models.SignInLog.create({
|
||||||
|
token: token.id,
|
||||||
|
userFk: userToken.id,
|
||||||
|
ip: ctx.req.ip,
|
||||||
|
owner: isOwner
|
||||||
|
});
|
||||||
|
if (!isOwner) {
|
||||||
|
console.error('ERROR!!! - SignIn with other user', userToken, user);
|
||||||
throw new UserError('Try again');
|
throw new UserError('Try again');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Self.validateLogin = async function(user, password) {
|
/**
|
||||||
|
* Validate login params*
|
||||||
|
* @param {String} user The user
|
||||||
|
* @param {String} password
|
||||||
|
* @param {Object} ctx context
|
||||||
|
*/
|
||||||
|
Self.validateLogin = async function(user, password, ctx) {
|
||||||
const loginInfo = Object.assign({password}, Self.userUses(user));
|
const loginInfo = Object.assign({password}, Self.userUses(user));
|
||||||
const token = await Self.login(loginInfo, 'user');
|
const token = await Self.login(loginInfo, 'user');
|
||||||
|
|
||||||
const userToken = await token.user.get();
|
const userToken = await token.user.get();
|
||||||
Self.signInValidate(user, userToken);
|
|
||||||
|
if (ctx)
|
||||||
|
await Self.signInValidate(user, userToken, token, ctx);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await Self.app.models.Account.sync(userToken.name, password);
|
await Self.app.models.Account.sync(userToken.name, password);
|
||||||
|
@ -187,8 +210,8 @@ module.exports = function(Self) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Self.sharedClass._methods.find(method => method.name == 'changePassword').ctor.settings.acls =
|
Self.sharedClass._methods.find(method => method.name == 'changePassword').ctor.settings.acls =
|
||||||
Self.sharedClass._methods.find(method => method.name == 'changePassword').ctor.settings.acls
|
Self.sharedClass._methods.find(method => method.name == 'changePassword').ctor.settings.acls
|
||||||
.filter(acl => acl.property != 'changePassword');
|
.filter(acl => acl.property != 'changePassword');
|
||||||
|
|
||||||
Self.userSecurity = async(ctx, userId, options) => {
|
Self.userSecurity = async(ctx, userId, options) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
|
@ -226,10 +249,12 @@ module.exports = function(Self) {
|
||||||
|
|
||||||
const env = process.env.NODE_ENV;
|
const env = process.env.NODE_ENV;
|
||||||
const liliumUrl = await Self.app.models.Url.findOne({
|
const liliumUrl = await Self.app.models.Url.findOne({
|
||||||
where: {and: [
|
where: {
|
||||||
{appName: 'lilium'},
|
and: [
|
||||||
{environment: env}
|
{appName: 'lilium'},
|
||||||
]}
|
{environment: env}
|
||||||
|
]
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
class Mailer {
|
class Mailer {
|
||||||
|
|
|
@ -118,13 +118,13 @@ BEGIN
|
||||||
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
|
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
|
||||||
FROM tmp.ticketToInvoice ti;
|
FROM tmp.ticketToInvoice ti;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vNewInvoiceId);
|
CALL invoiceExpenseMake(vNewInvoiceId);
|
||||||
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
||||||
|
|
||||||
UPDATE invoiceOut io
|
UPDATE invoiceOut io
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT SUM(amount) AS total
|
SELECT SUM(amount) AS total
|
||||||
FROM invoiceOutExpence
|
FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vNewInvoiceId
|
WHERE invoiceOutFk = vNewInvoiceId
|
||||||
) base
|
) base
|
||||||
JOIN (
|
JOIN (
|
||||||
|
@ -166,18 +166,18 @@ BEGIN
|
||||||
SET @vTaxableBaseServices := 0.00;
|
SET @vTaxableBaseServices := 0.00;
|
||||||
SET @vTaxCodeGeneral := NULL;
|
SET @vTaxCodeGeneral := NULL;
|
||||||
|
|
||||||
INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInId, @vTaxableBaseServices, sub.expenceFk, sub.taxTypeSageFk , sub.transactionTypeSageFk
|
SELECT vNewInvoiceInId, @vTaxableBaseServices, sub.expenseFk, sub.taxTypeSageFk , sub.transactionTypeSageFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase, i.expenceFk, i.taxTypeSageFk , i.transactionTypeSageFk, @vTaxCodeGeneral := i.taxClassCodeFk
|
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase, i.expenseFk, i.taxTypeSageFk , i.transactionTypeSageFk, @vTaxCodeGeneral := i.taxClassCodeFk
|
||||||
FROM tmp.ticketServiceTax tst
|
FROM tmp.ticketServiceTax tst
|
||||||
JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tst.code
|
JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tst.code
|
||||||
WHERE i.isService
|
WHERE i.isService
|
||||||
HAVING taxableBase
|
HAVING taxableBase
|
||||||
) sub;
|
) sub;
|
||||||
|
|
||||||
INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO vn.invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInId, SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral, @vTaxableBaseServices, 0) taxableBase, i.expenceFk, i.taxTypeSageFk , i.transactionTypeSageFk
|
SELECT vNewInvoiceInId, SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral, @vTaxableBaseServices, 0) taxableBase, i.expenseFk, i.taxTypeSageFk , i.transactionTypeSageFk
|
||||||
FROM tmp.ticketTax tt
|
FROM tmp.ticketTax tt
|
||||||
JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tt.code
|
JOIN vn.invoiceOutTaxConfig i ON i.taxClassCodeFk = tt.code
|
||||||
WHERE !i.isService
|
WHERE !i.isService
|
||||||
|
|
|
@ -139,13 +139,13 @@ BEGIN
|
||||||
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
|
SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
|
||||||
FROM tmp.ticketToInvoice ti;
|
FROM tmp.ticketToInvoice ti;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vNewInvoiceId);
|
CALL invoiceExpenseMake(vNewInvoiceId);
|
||||||
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
||||||
|
|
||||||
UPDATE invoiceOut io
|
UPDATE invoiceOut io
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT SUM(amount) total
|
SELECT SUM(amount) total
|
||||||
FROM invoiceOutExpence
|
FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vNewInvoiceId
|
WHERE invoiceOutFk = vNewInvoiceId
|
||||||
) base
|
) base
|
||||||
JOIN (
|
JOIN (
|
||||||
|
@ -182,15 +182,15 @@ BEGIN
|
||||||
SET @vTaxableBaseServices := 0.00;
|
SET @vTaxableBaseServices := 0.00;
|
||||||
SET @vTaxCodeGeneral := NULL;
|
SET @vTaxCodeGeneral := NULL;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
@vTaxableBaseServices,
|
@vTaxableBaseServices,
|
||||||
sub.expenceFk,
|
sub.expenseFk,
|
||||||
sub.taxTypeSageFk,
|
sub.taxTypeSageFk,
|
||||||
sub.transactionTypeSageFk
|
sub.transactionTypeSageFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk,
|
i.taxTypeSageFk,
|
||||||
i.transactionTypeSageFk,
|
i.transactionTypeSageFk,
|
||||||
@vTaxCodeGeneral := i.taxClassCodeFk
|
@vTaxCodeGeneral := i.taxClassCodeFk
|
||||||
|
@ -200,11 +200,11 @@ BEGIN
|
||||||
HAVING taxableBase
|
HAVING taxableBase
|
||||||
) sub;
|
) sub;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
||||||
@vTaxableBaseServices, 0) taxableBase,
|
@vTaxableBaseServices, 0) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk ,
|
i.taxTypeSageFk ,
|
||||||
i.transactionTypeSageFk
|
i.transactionTypeSageFk
|
||||||
FROM tmp.ticketTax tt
|
FROM tmp.ticketTax tt
|
||||||
|
|
|
@ -135,13 +135,13 @@ BEGIN
|
||||||
INSERT INTO ticketTracking(stateFk,ticketFk,workerFk)
|
INSERT INTO ticketTracking(stateFk,ticketFk,workerFk)
|
||||||
SELECT * FROM tmp.updateInter;
|
SELECT * FROM tmp.updateInter;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vNewInvoiceId);
|
CALL invoiceExpenseMake(vNewInvoiceId);
|
||||||
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
||||||
|
|
||||||
UPDATE invoiceOut io
|
UPDATE invoiceOut io
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT SUM(amount) total
|
SELECT SUM(amount) total
|
||||||
FROM invoiceOutExpence
|
FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vNewInvoiceId
|
WHERE invoiceOutFk = vNewInvoiceId
|
||||||
) base
|
) base
|
||||||
JOIN (
|
JOIN (
|
||||||
|
@ -178,15 +178,15 @@ BEGIN
|
||||||
SET @vTaxableBaseServices := 0.00;
|
SET @vTaxableBaseServices := 0.00;
|
||||||
SET @vTaxCodeGeneral := NULL;
|
SET @vTaxCodeGeneral := NULL;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
@vTaxableBaseServices,
|
@vTaxableBaseServices,
|
||||||
sub.expenceFk,
|
sub.expenseFk,
|
||||||
sub.taxTypeSageFk,
|
sub.taxTypeSageFk,
|
||||||
sub.transactionTypeSageFk
|
sub.transactionTypeSageFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk,
|
i.taxTypeSageFk,
|
||||||
i.transactionTypeSageFk,
|
i.transactionTypeSageFk,
|
||||||
@vTaxCodeGeneral := i.taxClassCodeFk
|
@vTaxCodeGeneral := i.taxClassCodeFk
|
||||||
|
@ -196,11 +196,11 @@ BEGIN
|
||||||
HAVING taxableBase
|
HAVING taxableBase
|
||||||
) sub;
|
) sub;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
||||||
@vTaxableBaseServices, 0) taxableBase,
|
@vTaxableBaseServices, 0) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk ,
|
i.taxTypeSageFk ,
|
||||||
i.transactionTypeSageFk
|
i.transactionTypeSageFk
|
||||||
FROM tmp.ticketTax tt
|
FROM tmp.ticketTax tt
|
||||||
|
|
|
@ -14,6 +14,7 @@ CREATE TABLE `account`.`signInLog` (
|
||||||
`userFk` int(10) unsigned DEFAULT NULL,
|
`userFk` int(10) unsigned DEFAULT NULL,
|
||||||
`creationDate` timestamp NULL DEFAULT current_timestamp(),
|
`creationDate` timestamp NULL DEFAULT current_timestamp(),
|
||||||
`ip` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
`ip` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
||||||
|
`owner` tinyint(1) DEFAULT 1,
|
||||||
KEY `userFk` (`userFk`),
|
KEY `userFk` (`userFk`),
|
||||||
CONSTRAINT `signInLog_ibfk_1` FOREIGN KEY (`userFk`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
CONSTRAINT `signInLog_ibfk_1` FOREIGN KEY (`userFk`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
DELETE FROM `salix`.`ACL`
|
||||||
|
WHERE
|
||||||
|
model = 'Route'
|
||||||
|
AND property = '*'
|
||||||
|
AND accessType = 'READ';
|
||||||
|
|
||||||
|
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||||
|
VALUES
|
||||||
|
('Route', 'find', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'findById', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'findOne', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getRoutesByWorker', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'canViewAllRoute', 'READ', 'ALLOW', 'ROLE', 'deliveryBoss'),
|
||||||
|
('Route', 'cmr', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'downloadCmrsZip', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'downloadZip', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'filter', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getByWorker', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getDeliveryPoint', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getExternalCmrs', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getSuggestedTickets', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getTickets', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'guessPriority', 'WRITE', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'insertTicket', 'WRITE', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('Route', 'getDeliveryPoint', 'READ', 'ALLOW', 'ROLE', 'deliveryBoss'),
|
||||||
|
('Route', 'summary', 'READ', 'ALLOW', 'ROLE', 'employee');
|
|
@ -630,7 +630,7 @@ INSERT INTO `vn`.`invoiceOutTax` (`invoiceOutFk`, `taxableBase`, `vat`, `pgcFk`)
|
||||||
(4, 8.07, 0.81, 4770000010),
|
(4, 8.07, 0.81, 4770000010),
|
||||||
(5, 8.07, 0.81, 4770000010);
|
(5, 8.07, 0.81, 4770000010);
|
||||||
|
|
||||||
INSERT INTO `vn`.`expence`(`id`, `name`, `isWithheld`)
|
INSERT INTO `vn`.`expense`(`id`, `name`, `isWithheld`)
|
||||||
VALUES
|
VALUES
|
||||||
(2000000000, 'Inmovilizado pendiente', 0),
|
(2000000000, 'Inmovilizado pendiente', 0),
|
||||||
(2000000001, 'Compra de bienes de inmovilizado', 0),
|
(2000000001, 'Compra de bienes de inmovilizado', 0),
|
||||||
|
@ -642,7 +642,7 @@ INSERT INTO `vn`.`expence`(`id`, `name`, `isWithheld`)
|
||||||
(7050000000, 'Prestacion de servicios', 1);
|
(7050000000, 'Prestacion de servicios', 1);
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO `vn`.`invoiceOutExpence`(`id`, `invoiceOutFk`, `amount`, `expenceFk`, `created`)
|
INSERT INTO `vn`.`invoiceOutExpense`(`id`, `invoiceOutFk`, `amount`, `expenseFk`, `created`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1, 813.06, 2000000000, util.VN_CURDATE()),
|
(1, 1, 813.06, 2000000000, util.VN_CURDATE()),
|
||||||
(2, 1, 33.80, 4751000000, util.VN_CURDATE()),
|
(2, 1, 33.80, 4751000000, util.VN_CURDATE()),
|
||||||
|
@ -922,7 +922,7 @@ INSERT INTO `vn`.`itemFamily`(`code`, `description`)
|
||||||
('SER', 'Services'),
|
('SER', 'Services'),
|
||||||
('VT', 'Sales');
|
('VT', 'Sales');
|
||||||
|
|
||||||
INSERT INTO `vn`.`item`(`id`, `typeFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenceFk`,
|
INSERT INTO `vn`.`item`(`id`, `typeFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenseFk`,
|
||||||
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `stars`, `family`, `isFloramondo`, `genericFk`, `itemPackingTypeFk`, `hasMinPrice`, `packingShelve`, `weightByPiece`)
|
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `stars`, `family`, `isFloramondo`, `genericFk`, `itemPackingTypeFk`, `hasMinPrice`, `packingShelve`, `weightByPiece`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 1, 'EMB', 0, NULL, 'V', 0, 15,3),
|
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 1, 'EMB', 0, NULL, 'V', 0, 15,3),
|
||||||
|
@ -1939,7 +1939,7 @@ INSERT INTO `vn`.`ticketRequest`(`id`, `description`, `requesterFk`, `attenderFk
|
||||||
(4, 'Melee weapon combat first 15cm', 18, 35, 15, NULL, 1.30, NULL, NULL, 11, util.VN_CURDATE()),
|
(4, 'Melee weapon combat first 15cm', 18, 35, 15, NULL, 1.30, NULL, NULL, 11, util.VN_CURDATE()),
|
||||||
(5, 'Melee weapon combat first 15cm', 18, 35, 15, 4, 1.30, 0, NULL, 18, util.VN_CURDATE());
|
(5, 'Melee weapon combat first 15cm', 18, 35, 15, 4, 1.30, 0, NULL, 18, util.VN_CURDATE());
|
||||||
|
|
||||||
INSERT INTO `vn`.`ticketServiceType`(`id`, `name`, `expenceFk`)
|
INSERT INTO `vn`.`ticketServiceType`(`id`, `name`, `expenseFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Porte Agencia', 7001000000),
|
(1, 'Porte Agencia', 7001000000),
|
||||||
(2, 'Portes Retorno', 7001000000),
|
(2, 'Portes Retorno', 7001000000),
|
||||||
|
@ -2561,7 +2561,7 @@ INSERT INTO `vn`.`duaInvoiceIn`(`id`, `duaFk`, `invoiceInFk`)
|
||||||
(9, 9, 9),
|
(9, 9, 9),
|
||||||
(10, 10, 10);
|
(10, 10, 10);
|
||||||
|
|
||||||
INSERT INTO `vn`.`invoiceInTax` (`invoiceInFk`, `taxableBase`, `expenceFk`, `foreignValue`, `taxTypeSageFk`, `transactionTypeSageFk`)
|
INSERT INTO `vn`.`invoiceInTax` (`invoiceInFk`, `taxableBase`, `expenseFk`, `foreignValue`, `taxTypeSageFk`, `transactionTypeSageFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 99.99, '2000000000', NULL, NULL, NULL),
|
(1, 99.99, '2000000000', NULL, NULL, NULL),
|
||||||
(2, 999.99, '2000000000', NULL, NULL, NULL),
|
(2, 999.99, '2000000000', NULL, NULL, NULL),
|
||||||
|
|
|
@ -9692,7 +9692,7 @@ proc: BEGIN
|
||||||
`name`,
|
`name`,
|
||||||
longName,
|
longName,
|
||||||
subName,
|
subName,
|
||||||
expenceFk,
|
expenseFk,
|
||||||
typeFk,
|
typeFk,
|
||||||
intrastatFk,
|
intrastatFk,
|
||||||
originFk,
|
originFk,
|
||||||
|
@ -10080,7 +10080,7 @@ BEGIN
|
||||||
`name`,
|
`name`,
|
||||||
longName,
|
longName,
|
||||||
subName,
|
subName,
|
||||||
expenceFk,
|
expenseFk,
|
||||||
typeFk,
|
typeFk,
|
||||||
intrastatFk,
|
intrastatFk,
|
||||||
originFk,
|
originFk,
|
||||||
|
@ -17338,7 +17338,7 @@ BEGIN
|
||||||
JOIN vn.XDiario x ON x.id = mci.id
|
JOIN vn.XDiario x ON x.id = mci.id
|
||||||
JOIN vn.supplier s ON s.id = supplierFk
|
JOIN vn.supplier s ON s.id = supplierFk
|
||||||
JOIN vn.invoiceInTax iit ON iit.invoiceInFk = ii.id
|
JOIN vn.invoiceInTax iit ON iit.invoiceInFk = ii.id
|
||||||
JOIN vn.expence e ON e.id = iit.expenceFk
|
JOIN vn.expense e ON e.id = iit.expenseFk
|
||||||
JOIN TiposRetencion t ON t.CodigoRetencion = ii.withholdingSageFk
|
JOIN TiposRetencion t ON t.CodigoRetencion = ii.withholdingSageFk
|
||||||
LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
|
LEFT JOIN tmp.invoiceDua id ON id.id = mci.id
|
||||||
JOIN (SELECT SUM(x2.BASEEURO) taxableBase, SUM(x2.EURODEBE) taxBase
|
JOIN (SELECT SUM(x2.BASEEURO) taxableBase, SUM(x2.EURODEBE) taxBase
|
||||||
|
@ -17441,7 +17441,7 @@ BEGIN
|
||||||
i.serial COLLATE utf8mb3_unicode_ci serial,
|
i.serial COLLATE utf8mb3_unicode_ci serial,
|
||||||
i.supplierFk,
|
i.supplierFk,
|
||||||
i.issued,
|
i.issued,
|
||||||
IF(expenceFkDeductible, FALSE, i.isVatDeductible) isVatDeductible,
|
IF(expenseFkDeductible, FALSE, i.isVatDeductible) isVatDeductible,
|
||||||
IF(c.code = 'EUR', '',c.`code`) currencyFk
|
IF(c.code = 'EUR', '',c.`code`) currencyFk
|
||||||
FROM vn.invoiceIn i
|
FROM vn.invoiceIn i
|
||||||
JOIN vn.currency c ON c.id = i.currencyFk
|
JOIN vn.currency c ON c.id = i.currencyFk
|
||||||
|
@ -17949,7 +17949,7 @@ BEGIN
|
||||||
e.id accountFk,
|
e.id accountFk,
|
||||||
UCASE(e.name),
|
UCASE(e.name),
|
||||||
''
|
''
|
||||||
FROM vn.expence e
|
FROM vn.expense e
|
||||||
UNION
|
UNION
|
||||||
SELECT company_getCode(vCompanyFk),
|
SELECT company_getCode(vCompanyFk),
|
||||||
b.account,
|
b.account,
|
||||||
|
@ -22010,7 +22010,7 @@ DROP TABLE IF EXISTS `agencyTermConfig`;
|
||||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
/*!40101 SET character_set_client = utf8 */;
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
CREATE TABLE `agencyTermConfig` (
|
CREATE TABLE `agencyTermConfig` (
|
||||||
`expenceFk` varchar(10) DEFAULT NULL,
|
`expenseFk` varchar(10) DEFAULT NULL,
|
||||||
`vatAccountSupported` varchar(15) DEFAULT NULL,
|
`vatAccountSupported` varchar(15) DEFAULT NULL,
|
||||||
`vatPercentage` decimal(28,10) DEFAULT NULL,
|
`vatPercentage` decimal(28,10) DEFAULT NULL,
|
||||||
`transaction` varchar(50) DEFAULT NULL
|
`transaction` varchar(50) DEFAULT NULL
|
||||||
|
@ -29097,19 +29097,19 @@ SET character_set_client = utf8;
|
||||||
SET character_set_client = @saved_cs_client;
|
SET character_set_client = @saved_cs_client;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `expence`
|
-- Table structure for table `expense`
|
||||||
--
|
--
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `expence`;
|
DROP TABLE IF EXISTS `expense`;
|
||||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
/*!40101 SET character_set_client = utf8 */;
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
CREATE TABLE `expence` (
|
CREATE TABLE `expense` (
|
||||||
`id` varchar(10) NOT NULL,
|
`id` varchar(10) NOT NULL,
|
||||||
`name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
`name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
||||||
`isWithheld` tinyint(4) NOT NULL DEFAULT 0,
|
`isWithheld` tinyint(4) NOT NULL DEFAULT 0,
|
||||||
`code` varchar(25) DEFAULT NULL,
|
`code` varchar(25) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `expence_UN` (`code`)
|
UNIQUE KEY `expense_UN` (`code`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
@ -29862,7 +29862,7 @@ CREATE TABLE `invoiceIn` (
|
||||||
`bookEntried` date DEFAULT NULL COMMENT 'Fecha Asiento',
|
`bookEntried` date DEFAULT NULL COMMENT 'Fecha Asiento',
|
||||||
`isVatDeductible` tinyint(1) NOT NULL DEFAULT 1,
|
`isVatDeductible` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
`withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
|
`withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
|
||||||
`expenceFkDeductible` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
|
`expenseFkDeductible` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
|
||||||
`editorFk` int(10) unsigned DEFAULT NULL,
|
`editorFk` int(10) unsigned DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `proveedor_id` (`supplierFk`),
|
KEY `proveedor_id` (`supplierFk`),
|
||||||
|
@ -29877,12 +29877,12 @@ CREATE TABLE `invoiceIn` (
|
||||||
KEY `recibida_ibfk_6` (`cplusRectificationTypeFk`),
|
KEY `recibida_ibfk_6` (`cplusRectificationTypeFk`),
|
||||||
KEY `recibida_ibfk_7` (`siiTrascendencyInvoiceInFk`),
|
KEY `recibida_ibfk_7` (`siiTrascendencyInvoiceInFk`),
|
||||||
KEY `invoiceIn_withholdingFk_idx` (`withholdingSageFk`),
|
KEY `invoiceIn_withholdingFk_idx` (`withholdingSageFk`),
|
||||||
KEY `invoiceIn_expenceFkDeductible_idx` (`expenceFkDeductible`),
|
KEY `invoiceIn_expenseFkDeductible_idx` (`expenseFkDeductible`),
|
||||||
KEY `invoiceIn_fk_editor` (`editorFk`),
|
KEY `invoiceIn_fk_editor` (`editorFk`),
|
||||||
KEY `invoiceIn_FK` (`currencyFk`),
|
KEY `invoiceIn_FK` (`currencyFk`),
|
||||||
CONSTRAINT `invoiceInCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInCompany_Fk` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceIn_FK` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceIn_FK` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceIn_expenceFkDeductible` FOREIGN KEY (`expenceFkDeductible`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceIn_expenseFkDeductible` FOREIGN KEY (`expenseFkDeductible`) REFERENCES `expense` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceIn_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
CONSTRAINT `invoiceIn_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
||||||
CONSTRAINT `invoiceIn_ibfk_3` FOREIGN KEY (`cplusSubjectOpFk`) REFERENCES `cplusSubjectOp` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceIn_ibfk_3` FOREIGN KEY (`cplusSubjectOpFk`) REFERENCES `cplusSubjectOp` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceIn_ibfk_4` FOREIGN KEY (`cplusTaxBreakFk`) REFERENCES `cplusTaxBreak` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceIn_ibfk_4` FOREIGN KEY (`cplusTaxBreakFk`) REFERENCES `cplusTaxBreak` (`id`) ON UPDATE CASCADE,
|
||||||
|
@ -30283,7 +30283,7 @@ CREATE TABLE `invoiceInSage` (
|
||||||
`taxTypeSageFk` smallint(6) NOT NULL,
|
`taxTypeSageFk` smallint(6) NOT NULL,
|
||||||
`transactionTypeSageFk` tinyint(4) NOT NULL,
|
`transactionTypeSageFk` tinyint(4) NOT NULL,
|
||||||
`isService` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Para diferenciar producto de servicio',
|
`isService` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Para diferenciar producto de servicio',
|
||||||
`expenceFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
`expenseFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
||||||
`withholdingSageFk` smallint(6) DEFAULT NULL,
|
`withholdingSageFk` smallint(6) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `invoiceInSafe_unique` (`taxClassFk`,`invoiceInSerialFk`,`isService`,`withholdingSageFk`),
|
UNIQUE KEY `invoiceInSafe_unique` (`taxClassFk`,`invoiceInSerialFk`,`isService`,`withholdingSageFk`),
|
||||||
|
@ -30292,8 +30292,8 @@ CREATE TABLE `invoiceInSage` (
|
||||||
KEY `invoiceInSage_invoiceInSerialFk` (`invoiceInSerialFk`),
|
KEY `invoiceInSage_invoiceInSerialFk` (`invoiceInSerialFk`),
|
||||||
KEY `invoiceInSage_taxTypeSageFk` (`taxTypeSageFk`),
|
KEY `invoiceInSage_taxTypeSageFk` (`taxTypeSageFk`),
|
||||||
KEY `invoiceInSage_transactionTypeSageFk` (`transactionTypeSageFk`),
|
KEY `invoiceInSage_transactionTypeSageFk` (`transactionTypeSageFk`),
|
||||||
KEY `invoiceInSage_idx` (`expenceFk`),
|
KEY `invoiceInSage_idx` (`expenseFk`),
|
||||||
CONSTRAINT `invoiceInSage_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInSage_expenseFk` FOREIGN KEY (`expenseFk`) REFERENCES `expense` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceInSage_invoiceInSerialFk` FOREIGN KEY (`invoiceInSerialFk`) REFERENCES `invoiceInSerial` (`code`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInSage_invoiceInSerialFk` FOREIGN KEY (`invoiceInSerialFk`) REFERENCES `invoiceInSerial` (`code`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceInSage_taxClassFk` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`code`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInSage_taxClassFk` FOREIGN KEY (`taxClassFk`) REFERENCES `taxClass` (`code`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceInSage_taxTypeSageFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInSage_taxTypeSageFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
|
||||||
|
@ -30334,7 +30334,7 @@ CREATE TABLE `invoiceInTax` (
|
||||||
`invoiceInFk` mediumint(8) unsigned NOT NULL,
|
`invoiceInFk` mediumint(8) unsigned NOT NULL,
|
||||||
`taxCodeFk` int(10) DEFAULT NULL,
|
`taxCodeFk` int(10) DEFAULT NULL,
|
||||||
`taxableBase` decimal(10,2) NOT NULL,
|
`taxableBase` decimal(10,2) NOT NULL,
|
||||||
`expenceFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
`expenseFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
||||||
`foreignValue` decimal(10,2) DEFAULT NULL,
|
`foreignValue` decimal(10,2) DEFAULT NULL,
|
||||||
`taxTypeSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipo de IVA SAGE',
|
`taxTypeSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipo de IVA SAGE',
|
||||||
`transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Tipo de transacción SAGE',
|
`transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Tipo de transacción SAGE',
|
||||||
|
@ -30345,9 +30345,9 @@ CREATE TABLE `invoiceInTax` (
|
||||||
KEY `recibida_iva_ibfk_2` (`taxCodeFk`),
|
KEY `recibida_iva_ibfk_2` (`taxCodeFk`),
|
||||||
KEY `recibida_iva_taxTypeSageFk` (`taxTypeSageFk`),
|
KEY `recibida_iva_taxTypeSageFk` (`taxTypeSageFk`),
|
||||||
KEY `invoiceInTax_transactionTypeSageFk_idx` (`transactionTypeSageFk`),
|
KEY `invoiceInTax_transactionTypeSageFk_idx` (`transactionTypeSageFk`),
|
||||||
KEY `invoiceInTax_idx` (`expenceFk`),
|
KEY `invoiceInTax_idx` (`expenseFk`),
|
||||||
KEY `invoiceInTax_fk_editor` (`editorFk`),
|
KEY `invoiceInTax_fk_editor` (`editorFk`),
|
||||||
CONSTRAINT `invoiceInTax_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInTax_expenseFk` FOREIGN KEY (`expenseFk`) REFERENCES `expense` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceInTax_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
CONSTRAINT `invoiceInTax_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
||||||
CONSTRAINT `invoiceInTax_ibfk_5` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInTax_ibfk_5` FOREIGN KEY (`invoiceInFk`) REFERENCES `invoiceIn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceInTax_transactionTypeSageFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
|
CONSTRAINT `invoiceInTax_transactionTypeSageFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
|
||||||
|
@ -30615,23 +30615,23 @@ CREATE TABLE `invoiceOutConfig` (
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `invoiceOutExpence`
|
-- Table structure for table `invoiceOutExpense`
|
||||||
--
|
--
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `invoiceOutExpence`;
|
DROP TABLE IF EXISTS `invoiceOutExpense`;
|
||||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
/*!40101 SET character_set_client = utf8 */;
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
CREATE TABLE `invoiceOutExpence` (
|
CREATE TABLE `invoiceOutExpense` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`invoiceOutFk` int(10) unsigned NOT NULL,
|
`invoiceOutFk` int(10) unsigned NOT NULL,
|
||||||
`amount` decimal(10,2) NOT NULL DEFAULT 0.00,
|
`amount` decimal(10,2) NOT NULL DEFAULT 0.00,
|
||||||
`expenceFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
`expenseFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
||||||
`created` timestamp NULL DEFAULT current_timestamp(),
|
`created` timestamp NULL DEFAULT current_timestamp(),
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `invoiceOutExpence_FK_1_idx` (`invoiceOutFk`),
|
KEY `invoiceOutExpense_FK_1_idx` (`invoiceOutFk`),
|
||||||
KEY `invoiceOutExpence_expenceFk_idx` (`expenceFk`),
|
KEY `invoiceOutExpense_expenseFk_idx` (`expenseFk`),
|
||||||
CONSTRAINT `invoiceOutExpence_FK_1` FOREIGN KEY (`invoiceOutFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
CONSTRAINT `invoiceOutExpense_FK_1` FOREIGN KEY (`invoiceOutFk`) REFERENCES `invoiceOut` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
CONSTRAINT `invoiceOutExpence_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE
|
CONSTRAINT `invoiceOutExpense_expenseFk` FOREIGN KEY (`expenseFk`) REFERENCES `expense` (`id`) ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDBDEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Desglosa la base imponible de una factura en funcion del tipo de gasto/venta';
|
) ENGINE=InnoDBDEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Desglosa la base imponible de una factura en funcion del tipo de gasto/venta';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
@ -30694,7 +30694,7 @@ CREATE TABLE `invoiceOutTaxConfig` (
|
||||||
`taxTypeSageFk` smallint(6) DEFAULT NULL,
|
`taxTypeSageFk` smallint(6) DEFAULT NULL,
|
||||||
`transactionTypeSageFk` tinyint(4) DEFAULT NULL,
|
`transactionTypeSageFk` tinyint(4) DEFAULT NULL,
|
||||||
`isService` tinyint(1) DEFAULT 0,
|
`isService` tinyint(1) DEFAULT 0,
|
||||||
`expenceFk` varchar(10) DEFAULT NULL,
|
`expenseFk` varchar(10) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `invoiceOutTaxConfig_FK` (`taxClassCodeFk`),
|
KEY `invoiceOutTaxConfig_FK` (`taxClassCodeFk`),
|
||||||
KEY `invoiceOutTaxConfig_FK_1` (`taxTypeSageFk`),
|
KEY `invoiceOutTaxConfig_FK_1` (`taxTypeSageFk`),
|
||||||
|
@ -30737,7 +30737,7 @@ CREATE TABLE `item` (
|
||||||
`description` varchar(1000) DEFAULT NULL,
|
`description` varchar(1000) DEFAULT NULL,
|
||||||
`density` int(11) NOT NULL DEFAULT 167 COMMENT 'Almacena la densidad en kg/m3 para el calculo de los portes, si no se especifica se pone por defecto la del tipo en un trigger',
|
`density` int(11) NOT NULL DEFAULT 167 COMMENT 'Almacena la densidad en kg/m3 para el calculo de los portes, si no se especifica se pone por defecto la del tipo en un trigger',
|
||||||
`relevancy` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'La web ordena de forma descendiente por este campo para mostrar los artículos',
|
`relevancy` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'La web ordena de forma descendiente por este campo para mostrar los artículos',
|
||||||
`expenceFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '7001000000',
|
`expenseFk` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '7001000000',
|
||||||
`isActive` tinyint(1) NOT NULL DEFAULT 1,
|
`isActive` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
`longName` varchar(50) DEFAULT NULL,
|
`longName` varchar(50) DEFAULT NULL,
|
||||||
`subName` varchar(50) DEFAULT NULL,
|
`subName` varchar(50) DEFAULT NULL,
|
||||||
|
@ -30792,11 +30792,11 @@ CREATE TABLE `item` (
|
||||||
KEY `item_size_IDX` (`size`) USING BTREE,
|
KEY `item_size_IDX` (`size`) USING BTREE,
|
||||||
KEY `item_size_IDX2` (`longName`) USING BTREE,
|
KEY `item_size_IDX2` (`longName`) USING BTREE,
|
||||||
KEY `item_lastUsed_IDX` (`lastUsed`) USING BTREE,
|
KEY `item_lastUsed_IDX` (`lastUsed`) USING BTREE,
|
||||||
KEY `item_expenceFk_idx` (`expenceFk`),
|
KEY `item_expenseFk_idx` (`expenseFk`),
|
||||||
KEY `item_fk_editor` (`editorFk`),
|
KEY `item_fk_editor` (`editorFk`),
|
||||||
CONSTRAINT `item_FK` FOREIGN KEY (`genericFk`) REFERENCES `item` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
CONSTRAINT `item_FK` FOREIGN KEY (`genericFk`) REFERENCES `item` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||||
CONSTRAINT `item_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `itemType` (`id`),
|
CONSTRAINT `item_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `itemType` (`id`),
|
||||||
CONSTRAINT `item_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `item_expenseFk` FOREIGN KEY (`expenseFk`) REFERENCES `expense` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `item_family` FOREIGN KEY (`family`) REFERENCES `itemFamily` (`code`) ON UPDATE CASCADE,
|
CONSTRAINT `item_family` FOREIGN KEY (`family`) REFERENCES `itemFamily` (`code`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `item_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
CONSTRAINT `item_fk_editor` FOREIGN KEY (`editorFk`) REFERENCES `account`.`user` (`id`),
|
||||||
CONSTRAINT `item_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `origin` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `item_ibfk_1` FOREIGN KEY (`originFk`) REFERENCES `origin` (`id`) ON UPDATE CASCADE,
|
||||||
|
@ -40606,10 +40606,10 @@ DROP TABLE IF EXISTS `ticketServiceType`;
|
||||||
CREATE TABLE `ticketServiceType` (
|
CREATE TABLE `ticketServiceType` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL,
|
`name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL,
|
||||||
`expenceFk` varchar(10) NOT NULL DEFAULT '7050000000',
|
`expenseFk` varchar(10) NOT NULL DEFAULT '7050000000',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `ticketServiceType_expenceFk_idx` (`expenceFk`),
|
KEY `ticketServiceType_expenseFk_idx` (`expenseFk`),
|
||||||
CONSTRAINT `ticketServiceType_expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `expence` (`id`) ON UPDATE CASCADE
|
CONSTRAINT `ticketServiceType_expenseFk` FOREIGN KEY (`expenseFk`) REFERENCES `expense` (`id`) ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDBDEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Lista de los posibles servicios a elegir';
|
) ENGINE=InnoDBDEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Lista de los posibles servicios a elegir';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
@ -46533,7 +46533,7 @@ BEGIN
|
||||||
WHERE io.ref = vInvoiceRef
|
WHERE io.ref = vInvoiceRef
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT ioe.amount
|
SELECT ioe.amount
|
||||||
FROM invoiceOutExpence ioe
|
FROM invoiceOutExpense ioe
|
||||||
JOIN invoiceOut io ON io.id = ioe.invoiceOutFk
|
JOIN invoiceOut io ON io.id = ioe.invoiceOutFk
|
||||||
WHERE io.ref = vInvoiceRef
|
WHERE io.ref = vInvoiceRef
|
||||||
) t1;
|
) t1;
|
||||||
|
@ -57741,7 +57741,7 @@ DELIMITER ;
|
||||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||||
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
||||||
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
|
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
|
||||||
/*!50003 DROP PROCEDURE IF EXISTS `invoiceExpenceMake` */;
|
/*!50003 DROP PROCEDURE IF EXISTS `invoiceExpenseMake` */;
|
||||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||||
|
@ -57749,28 +57749,28 @@ DELIMITER ;
|
||||||
/*!50003 SET character_set_results = utf8mb4 */ ;
|
/*!50003 SET character_set_results = utf8mb4 */ ;
|
||||||
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
|
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
|
||||||
DELIMITER ;;
|
DELIMITER ;;
|
||||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceExpenceMake`(IN vInvoice INT)
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceExpenseMake`(IN vInvoice INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
/* Inserta las partidas de gasto correspondientes a la factura
|
/* Inserta las partidas de gasto correspondientes a la factura
|
||||||
* REQUIERE tabla tmp.ticketToInvoice
|
* REQUIERE tabla tmp.ticketToInvoice
|
||||||
* @param vInvoice Numero de factura
|
* @param vInvoice Numero de factura
|
||||||
*/
|
*/
|
||||||
DELETE FROM invoiceOutExpence
|
DELETE FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vInvoice;
|
WHERE invoiceOutFk = vInvoice;
|
||||||
|
|
||||||
INSERT INTO invoiceOutExpence(invoiceOutFk, expenceFk, amount)
|
INSERT INTO invoiceOutExpense(invoiceOutFk, expenseFk, amount)
|
||||||
SELECT vInvoice,
|
SELECT vInvoice,
|
||||||
expenceFk,
|
expenseFk,
|
||||||
SUM(ROUND(quantity * price * (100 - discount)/100,2)) amount
|
SUM(ROUND(quantity * price * (100 - discount)/100,2)) amount
|
||||||
FROM tmp.ticketToInvoice t
|
FROM tmp.ticketToInvoice t
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
GROUP BY i.expenceFk
|
GROUP BY i.expenseFk
|
||||||
HAVING amount != 0;
|
HAVING amount != 0;
|
||||||
|
|
||||||
INSERT INTO invoiceOutExpence(invoiceOutFk, expenceFk, amount)
|
INSERT INTO invoiceOutExpense(invoiceOutFk, expenseFk, amount)
|
||||||
SELECT vInvoice,
|
SELECT vInvoice,
|
||||||
tst.expenceFk,
|
tst.expenseFk,
|
||||||
SUM(ROUND(ts.quantity * ts.price ,2)) amount
|
SUM(ROUND(ts.quantity * ts.price ,2)) amount
|
||||||
FROM tmp.ticketToInvoice t
|
FROM tmp.ticketToInvoice t
|
||||||
JOIN ticketService ts ON ts.ticketFk = t.id
|
JOIN ticketService ts ON ts.ticketFk = t.id
|
||||||
|
@ -58125,7 +58125,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceInTax_getFromEntries`(IN vId
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vRate DOUBLE DEFAULT 1;
|
DECLARE vRate DOUBLE DEFAULT 1;
|
||||||
DECLARE vDated DATE;
|
DECLARE vDated DATE;
|
||||||
DECLARE vExpenceFk VARCHAR(10);
|
DECLARE vExpenseFk VARCHAR(10);
|
||||||
|
|
||||||
SELECT MAX(rr.dated) INTO vDated
|
SELECT MAX(rr.dated) INTO vDated
|
||||||
FROM referenceRate rr
|
FROM referenceRate rr
|
||||||
|
@ -58139,8 +58139,8 @@ BEGIN
|
||||||
WHERE dated = vDated;
|
WHERE dated = vDated;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT id INTO vExpenceFk
|
SELECT id INTO vExpenseFk
|
||||||
FROM vn.expence
|
FROM vn.expense
|
||||||
WHERE `name` = 'Adquisición mercancia Extracomunitaria'
|
WHERE `name` = 'Adquisición mercancia Extracomunitaria'
|
||||||
GROUP BY id
|
GROUP BY id
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -58148,10 +58148,10 @@ BEGIN
|
||||||
DELETE FROM invoiceInTax
|
DELETE FROM invoiceInTax
|
||||||
WHERE invoiceInFk = vId;
|
WHERE invoiceInFk = vId;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, foreignValue, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, foreignValue, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT ii.id,
|
SELECT ii.id,
|
||||||
SUM(b.buyingValue * b.quantity) / IFNULL(vRate,1) taxableBase,
|
SUM(b.buyingValue * b.quantity) / IFNULL(vRate,1) taxableBase,
|
||||||
vExpenceFk,
|
vExpenseFk,
|
||||||
IF(ii.currencyFk = 1,NULL,SUM(b.buyingValue * b.quantity )) divisa,
|
IF(ii.currencyFk = 1,NULL,SUM(b.buyingValue * b.quantity )) divisa,
|
||||||
taxTypeSageFk,
|
taxTypeSageFk,
|
||||||
transactionTypeSageFk
|
transactionTypeSageFk
|
||||||
|
@ -58188,7 +58188,7 @@ BEGIN
|
||||||
SELECT ii.bookEntried,
|
SELECT ii.bookEntried,
|
||||||
iit.foreignValue,
|
iit.foreignValue,
|
||||||
ii.companyFk,
|
ii.companyFk,
|
||||||
ii.expenceFkDeductible,
|
ii.expenseFkDeductible,
|
||||||
iit.taxableBase,
|
iit.taxableBase,
|
||||||
iit.transactionTypeSageFk,
|
iit.transactionTypeSageFk,
|
||||||
ii.serial,
|
ii.serial,
|
||||||
|
@ -58218,8 +58218,8 @@ BEGIN
|
||||||
cit.id invoicesCount,
|
cit.id invoicesCount,
|
||||||
e.code,
|
e.code,
|
||||||
e.isWithheld,
|
e.isWithheld,
|
||||||
e.id expenceFk,
|
e.id expenseFk,
|
||||||
e.name expenceName
|
e.name expenseName
|
||||||
FROM invoiceIn ii
|
FROM invoiceIn ii
|
||||||
JOIN supplier s ON s.id = ii.supplierFk
|
JOIN supplier s ON s.id = ii.supplierFk
|
||||||
LEFT JOIN province p ON p.id = s.provinceFk
|
LEFT JOIN province p ON p.id = s.provinceFk
|
||||||
|
@ -58231,7 +58231,7 @@ BEGIN
|
||||||
JOIN siiTypeInvoiceIn cit ON cit.id = ii.siiTypeInvoiceInFk
|
JOIN siiTypeInvoiceIn cit ON cit.id = ii.siiTypeInvoiceInFk
|
||||||
LEFT JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
|
LEFT JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
|
||||||
LEFT JOIN sage.TiposTransacciones ttr ON ttr.CodigoTransaccion = iit.transactionTypeSageFk
|
LEFT JOIN sage.TiposTransacciones ttr ON ttr.CodigoTransaccion = iit.transactionTypeSageFk
|
||||||
LEFT JOIN expence e ON e.id = iit.expenceFk
|
LEFT JOIN expense e ON e.id = iit.expenseFk
|
||||||
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
|
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
|
||||||
LEFT JOIN sage.taxType tt ON tt.id = ti.CodigoIva
|
LEFT JOIN sage.taxType tt ON tt.id = ti.CodigoIva
|
||||||
WHERE ii.id = vSelf;
|
WHERE ii.id = vSelf;
|
||||||
|
@ -58286,7 +58286,7 @@ BEGIN
|
||||||
empresa_id)
|
empresa_id)
|
||||||
SELECT vBookNumber ASIEN,
|
SELECT vBookNumber ASIEN,
|
||||||
tii.bookEntried FECHA,
|
tii.bookEntried FECHA,
|
||||||
IF(tii.isWithheld, LPAD(RIGHT(tii.supplierAccount, 5), 10, tii.expenceFk),tii.expenceFk) SUBCTA,
|
IF(tii.isWithheld, LPAD(RIGHT(tii.supplierAccount, 5), 10, tii.expenseFk),tii.expenseFk) SUBCTA,
|
||||||
tii.supplierAccount CONTRA,
|
tii.supplierAccount CONTRA,
|
||||||
IF(tii.isWithheld AND tii.taxableBase < 0, NULL, ROUND(SUM(tii.taxableBase),2)) EURODEBE,
|
IF(tii.isWithheld AND tii.taxableBase < 0, NULL, ROUND(SUM(tii.taxableBase),2)) EURODEBE,
|
||||||
IF(tii.isWithheld AND tii.taxableBase < 0, ROUND(SUM(-tii.taxableBase), 2), NULL) EUROHABER,
|
IF(tii.isWithheld AND tii.taxableBase < 0, ROUND(SUM(-tii.taxableBase), 2), NULL) EUROHABER,
|
||||||
|
@ -58301,7 +58301,7 @@ BEGIN
|
||||||
tii.companyFk empresa_id
|
tii.companyFk empresa_id
|
||||||
FROM tInvoiceIn tii
|
FROM tInvoiceIn tii
|
||||||
WHERE tii.code IS NULL OR tii.code <> 'suplido'
|
WHERE tii.code IS NULL OR tii.code <> 'suplido'
|
||||||
GROUP BY tii.expenceFk;
|
GROUP BY tii.expenseFk;
|
||||||
|
|
||||||
-- Líneas de IVA
|
-- Líneas de IVA
|
||||||
INSERT INTO XDiario(
|
INSERT INTO XDiario(
|
||||||
|
@ -58335,11 +58335,11 @@ BEGIN
|
||||||
empresa_id)
|
empresa_id)
|
||||||
SELECT vBookNumber ASIEN,
|
SELECT vBookNumber ASIEN,
|
||||||
tii.bookEntried FECHA,
|
tii.bookEntried FECHA,
|
||||||
IF(tii.expenceFkDeductible>0, tii.expenceFkDeductible, tii.CuentaIvaSoportado) SUBCTA,
|
IF(tii.expenseFkDeductible>0, tii.expenseFkDeductible, tii.CuentaIvaSoportado) SUBCTA,
|
||||||
tii.supplierAccount CONTRA,
|
tii.supplierAccount CONTRA,
|
||||||
SUM(ROUND(tii.PorcentajeIva * tii.taxableBase / 100, 2)) EURODEBE,
|
SUM(ROUND(tii.PorcentajeIva * tii.taxableBase / 100, 2)) EURODEBE,
|
||||||
SUM(tii.taxableBase) BASEEURO,
|
SUM(tii.taxableBase) BASEEURO,
|
||||||
GROUP_CONCAT(DISTINCT tii.expenceName SEPARATOR ', ') CONCEPTO,
|
GROUP_CONCAT(DISTINCT tii.expenseName SEPARATOR ', ') CONCEPTO,
|
||||||
vSelf FACTURA,
|
vSelf FACTURA,
|
||||||
tii.PorcentajeIva IVA,
|
tii.PorcentajeIva IVA,
|
||||||
IF(tii.isUeeMember AND eWithheld.id IS NULL, '', '*') AUXILIAR,
|
IF(tii.isUeeMember AND eWithheld.id IS NULL, '', '*') AUXILIAR,
|
||||||
|
@ -58365,13 +58365,13 @@ BEGIN
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT e.id
|
SELECT e.id
|
||||||
FROM tInvoiceIn tii
|
FROM tInvoiceIn tii
|
||||||
JOIN expence e ON e.id = tii.expenceFk
|
JOIN expense e ON e.id = tii.expenseFk
|
||||||
WHERE e.isWithheld
|
WHERE e.isWithheld
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) eWithheld ON TRUE
|
) eWithheld ON TRUE
|
||||||
WHERE tii.taxTypeSageFk IS NOT NULL
|
WHERE tii.taxTypeSageFk IS NOT NULL
|
||||||
AND (tii.taxCode IS NULL OR tii.taxCode NOT IN ('import10', 'import21'))
|
AND (tii.taxCode IS NULL OR tii.taxCode NOT IN ('import10', 'import21'))
|
||||||
GROUP BY tii.PorcentajeIva, tii.expenceFk;
|
GROUP BY tii.PorcentajeIva, tii.expenseFk;
|
||||||
|
|
||||||
-- Línea iva inversor sujeto pasivo
|
-- Línea iva inversor sujeto pasivo
|
||||||
INSERT INTO XDiario(
|
INSERT INTO XDiario(
|
||||||
|
@ -58408,7 +58408,7 @@ BEGIN
|
||||||
tii.supplierAccount CONTRA,
|
tii.supplierAccount CONTRA,
|
||||||
SUM(ROUND(tii.PorcentajeIva * tii.taxableBase / 100,2)) EUROHABER,
|
SUM(ROUND(tii.PorcentajeIva * tii.taxableBase / 100,2)) EUROHABER,
|
||||||
ROUND(SUM(tii.taxableBase),2) BASEEURO,
|
ROUND(SUM(tii.taxableBase),2) BASEEURO,
|
||||||
GROUP_CONCAT(DISTINCT tii.expenceName SEPARATOR ', ') CONCEPTO,
|
GROUP_CONCAT(DISTINCT tii.expenseName SEPARATOR ', ') CONCEPTO,
|
||||||
vSelf FACTURA,
|
vSelf FACTURA,
|
||||||
tii.PorcentajeIva IVA,
|
tii.PorcentajeIva IVA,
|
||||||
'*' AUXILIAR,
|
'*' AUXILIAR,
|
||||||
|
@ -58436,7 +58436,7 @@ BEGIN
|
||||||
AND NOT(tii.isVies
|
AND NOT(tii.isVies
|
||||||
AND c.nontaxableTransactionTypeFk = tii.transactionTypeSageFk
|
AND c.nontaxableTransactionTypeFk = tii.transactionTypeSageFk
|
||||||
AND tii.taxCode = 'nonTaxable')
|
AND tii.taxCode = 'nonTaxable')
|
||||||
GROUP BY tii.PorcentajeIva, tii.expenceFk;
|
GROUP BY tii.PorcentajeIva, tii.expenseFk;
|
||||||
|
|
||||||
-- Actualización del registro original
|
-- Actualización del registro original
|
||||||
UPDATE invoiceIn ii
|
UPDATE invoiceIn ii
|
||||||
|
@ -58509,14 +58509,14 @@ BEGIN
|
||||||
FROM ticket
|
FROM ticket
|
||||||
WHERE refFk = vInvoiceRef;
|
WHERE refFk = vInvoiceRef;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vInvoiceFk);
|
CALL invoiceExpenseMake(vInvoiceFk);
|
||||||
|
|
||||||
CALL invoiceTaxMake(vInvoiceFk,vTaxArea);
|
CALL invoiceTaxMake(vInvoiceFk,vTaxArea);
|
||||||
|
|
||||||
UPDATE invoiceOut io
|
UPDATE invoiceOut io
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT SUM(amount) AS total
|
SELECT SUM(amount) AS total
|
||||||
FROM invoiceOutExpence
|
FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vInvoiceFk
|
WHERE invoiceOutFk = vInvoiceFk
|
||||||
) base
|
) base
|
||||||
JOIN (
|
JOIN (
|
||||||
|
@ -58552,7 +58552,7 @@ BEGIN
|
||||||
* param vInvoice factura_id
|
* param vInvoice factura_id
|
||||||
*/
|
*/
|
||||||
DECLARE vBookNumber INT;
|
DECLARE vBookNumber INT;
|
||||||
DECLARE vExpenceConcept VARCHAR(50);
|
DECLARE vExpenseConcept VARCHAR(50);
|
||||||
DECLARE vSpainCountryFk INT;
|
DECLARE vSpainCountryFk INT;
|
||||||
DECLARE vOldBookNumber INT;
|
DECLARE vOldBookNumber INT;
|
||||||
|
|
||||||
|
@ -58644,7 +58644,7 @@ BEGIN
|
||||||
SELECT
|
SELECT
|
||||||
vBookNumber AS ASIEN,
|
vBookNumber AS ASIEN,
|
||||||
rs.FECHA,
|
rs.FECHA,
|
||||||
ioe.expenceFk AS SUBCTA,
|
ioe.expenseFk AS SUBCTA,
|
||||||
rs.clientBookingAccount AS CONTRA,
|
rs.clientBookingAccount AS CONTRA,
|
||||||
ioe.amount AS EUROHABER,
|
ioe.amount AS EUROHABER,
|
||||||
rs.Concept AS CONCEPTO,
|
rs.Concept AS CONCEPTO,
|
||||||
|
@ -58652,13 +58652,13 @@ BEGIN
|
||||||
rs.FECHA_OP,
|
rs.FECHA_OP,
|
||||||
rs.companyFk AS empresa_id
|
rs.companyFk AS empresa_id
|
||||||
FROM rs
|
FROM rs
|
||||||
JOIN invoiceOutExpence ioe
|
JOIN invoiceOutExpense ioe
|
||||||
WHERE ioe.invoiceOutFk = vInvoice;
|
WHERE ioe.invoiceOutFk = vInvoice;
|
||||||
|
|
||||||
SELECT GROUP_CONCAT(`name` SEPARATOR ',')
|
SELECT GROUP_CONCAT(`name` SEPARATOR ',')
|
||||||
INTO vExpenceConcept
|
INTO vExpenseConcept
|
||||||
FROM expence e
|
FROM expense e
|
||||||
JOIN invoiceOutExpence ioe ON ioe.expenceFk = e.id
|
JOIN invoiceOutExpense ioe ON ioe.expenseFk = e.id
|
||||||
WHERE ioe.invoiceOutFk = vInvoice;
|
WHERE ioe.invoiceOutFk = vInvoice;
|
||||||
|
|
||||||
-- Lineas de IVA
|
-- Lineas de IVA
|
||||||
|
@ -58701,7 +58701,7 @@ BEGIN
|
||||||
rs.clientBookingAccount AS CONTRA,
|
rs.clientBookingAccount AS CONTRA,
|
||||||
iot.vat AS EUROHABER,
|
iot.vat AS EUROHABER,
|
||||||
iot.taxableBase AS BASEEURO,
|
iot.taxableBase AS BASEEURO,
|
||||||
CONCAT(vExpenceConcept,' : ',rs.Concept) AS CONCEPTO,
|
CONCAT(vExpenseConcept,' : ',rs.Concept) AS CONCEPTO,
|
||||||
rs.invoiceNum AS FACTURA,
|
rs.invoiceNum AS FACTURA,
|
||||||
IF(pe2.equFk,0,pgc.rate) AS IVA,
|
IF(pe2.equFk,0,pgc.rate) AS IVA,
|
||||||
IF(pe2.equFk,0,pgce.rate) AS RECEQUIV,
|
IF(pe2.equFk,0,pgce.rate) AS RECEQUIV,
|
||||||
|
@ -58844,7 +58844,7 @@ DELIMITER ;
|
||||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||||
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
||||||
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
|
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
|
||||||
/*!50003 DROP PROCEDURE IF EXISTS `invoiceOutTaxAndExpence` */;
|
/*!50003 DROP PROCEDURE IF EXISTS `invoiceOutTaxAndExpense` */;
|
||||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||||
|
@ -58852,7 +58852,7 @@ DELIMITER ;
|
||||||
/*!50003 SET character_set_results = utf8mb4 */ ;
|
/*!50003 SET character_set_results = utf8mb4 */ ;
|
||||||
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
|
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
|
||||||
DELIMITER ;;
|
DELIMITER ;;
|
||||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceOutTaxAndExpence`()
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `invoiceOutTaxAndExpense`()
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
/* Para tickets ya facturados, vuelve a repetir el proceso de facturación.
|
/* Para tickets ya facturados, vuelve a repetir el proceso de facturación.
|
||||||
|
@ -58906,7 +58906,7 @@ BEGIN
|
||||||
FROM ticket
|
FROM ticket
|
||||||
WHERE refFk = vInvoiceRef;
|
WHERE refFk = vInvoiceRef;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vInvoice);
|
CALL invoiceExpenseMake(vInvoice);
|
||||||
CALL invoiceTaxMake(vInvoice,vCountry,vTaxArea);
|
CALL invoiceTaxMake(vInvoice,vCountry,vTaxArea);
|
||||||
|
|
||||||
FETCH rs INTO vInvoice ,vInvoiceRef;
|
FETCH rs INTO vInvoice ,vInvoiceRef;
|
||||||
|
@ -59140,13 +59140,13 @@ BEGIN
|
||||||
INSERT INTO ticketTracking(stateFk,ticketFk,workerFk)
|
INSERT INTO ticketTracking(stateFk,ticketFk,workerFk)
|
||||||
SELECT * FROM tmp.updateInter;
|
SELECT * FROM tmp.updateInter;
|
||||||
|
|
||||||
CALL invoiceExpenceMake(vNewInvoiceId);
|
CALL invoiceExpenseMake(vNewInvoiceId);
|
||||||
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
|
||||||
|
|
||||||
UPDATE invoiceOut io
|
UPDATE invoiceOut io
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT SUM(amount) total
|
SELECT SUM(amount) total
|
||||||
FROM invoiceOutExpence
|
FROM invoiceOutExpense
|
||||||
WHERE invoiceOutFk = vNewInvoiceId
|
WHERE invoiceOutFk = vNewInvoiceId
|
||||||
) base
|
) base
|
||||||
JOIN (
|
JOIN (
|
||||||
|
@ -59183,15 +59183,15 @@ BEGIN
|
||||||
SET @vTaxableBaseServices := 0.00;
|
SET @vTaxableBaseServices := 0.00;
|
||||||
SET @vTaxCodeGeneral := NULL;
|
SET @vTaxCodeGeneral := NULL;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
@vTaxableBaseServices,
|
@vTaxableBaseServices,
|
||||||
sub.expenceFk,
|
sub.expenseFk,
|
||||||
sub.taxTypeSageFk,
|
sub.taxTypeSageFk,
|
||||||
sub.transactionTypeSageFk
|
sub.transactionTypeSageFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk,
|
i.taxTypeSageFk,
|
||||||
i.transactionTypeSageFk,
|
i.transactionTypeSageFk,
|
||||||
@vTaxCodeGeneral := i.taxClassCodeFk
|
@vTaxCodeGeneral := i.taxClassCodeFk
|
||||||
|
@ -59201,11 +59201,11 @@ BEGIN
|
||||||
HAVING taxableBase
|
HAVING taxableBase
|
||||||
) sub;
|
) sub;
|
||||||
|
|
||||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
|
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, taxTypeSageFk, transactionTypeSageFk)
|
||||||
SELECT vNewInvoiceInFk,
|
SELECT vNewInvoiceInFk,
|
||||||
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
|
||||||
@vTaxableBaseServices, 0) taxableBase,
|
@vTaxableBaseServices, 0) taxableBase,
|
||||||
i.expenceFk,
|
i.expenseFk,
|
||||||
i.taxTypeSageFk ,
|
i.taxTypeSageFk ,
|
||||||
i.transactionTypeSageFk
|
i.transactionTypeSageFk
|
||||||
FROM tmp.ticketTax tt
|
FROM tmp.ticketTax tt
|
||||||
|
|
|
@ -199,5 +199,6 @@
|
||||||
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
||||||
"Try again": "Try again",
|
"Try again": "Try again",
|
||||||
"keepPrice": "keepPrice",
|
"keepPrice": "keepPrice",
|
||||||
"Cannot past travels with entries": "Cannot past travels with entries"
|
"Cannot past travels with entries": "Cannot past travels with entries",
|
||||||
|
"It was not able to remove the next expeditions:": "It was not able to remove the next expeditions: {{expeditions}}"
|
||||||
}
|
}
|
|
@ -328,5 +328,6 @@
|
||||||
"User disabled": "Usuario desactivado",
|
"User disabled": "Usuario desactivado",
|
||||||
"The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
|
"The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
|
||||||
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
|
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
|
||||||
"Cannot past travels with entries": "No se pueden pasar envíos con entradas"
|
"Cannot past travels with entries": "No se pueden pasar envíos con entradas",
|
||||||
}
|
"It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}"
|
||||||
|
}
|
|
@ -25,7 +25,12 @@
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"owner": {
|
||||||
|
"type": "boolean",
|
||||||
|
"required": true,
|
||||||
|
"default": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
|
|
@ -16,5 +16,5 @@ columns:
|
||||||
bookEntried: book entried
|
bookEntried: book entried
|
||||||
isVatDeductible: is VAT deductible
|
isVatDeductible: is VAT deductible
|
||||||
withholdingSageFk: withholding
|
withholdingSageFk: withholding
|
||||||
expenceFkDeductible: expence deductible
|
expenseFkDeductible: expense deductible
|
||||||
editorFk: editor
|
editorFk: editor
|
|
@ -16,5 +16,5 @@ columns:
|
||||||
bookEntried: fecha asiento
|
bookEntried: fecha asiento
|
||||||
isVatDeductible: impuesto deducible
|
isVatDeductible: impuesto deducible
|
||||||
withholdingSageFk: código de retención
|
withholdingSageFk: código de retención
|
||||||
expenceFkDeductible: gasto deducible
|
expenseFkDeductible: gasto deducible
|
||||||
editorFk: editor
|
editorFk: editor
|
|
@ -4,7 +4,7 @@ columns:
|
||||||
invoiceInFk: invoice in
|
invoiceInFk: invoice in
|
||||||
taxCodeFk: tax
|
taxCodeFk: tax
|
||||||
taxableBase: taxable base
|
taxableBase: taxable base
|
||||||
expenceFk: expence
|
expenseFk: expense
|
||||||
foreignValue: foreign amount
|
foreignValue: foreign amount
|
||||||
taxTypeSageFk: tax type
|
taxTypeSageFk: tax type
|
||||||
transactionTypeSageFk: transaction type
|
transactionTypeSageFk: transaction type
|
||||||
|
|
|
@ -4,7 +4,7 @@ columns:
|
||||||
invoiceInFk: factura recibida
|
invoiceInFk: factura recibida
|
||||||
taxCodeFk: código IVA
|
taxCodeFk: código IVA
|
||||||
taxableBase: base imponible
|
taxableBase: base imponible
|
||||||
expenceFk: código gasto
|
expenseFk: código gasto
|
||||||
foreignValue: importe divisa
|
foreignValue: importe divisa
|
||||||
taxTypeSageFk: código impuesto
|
taxTypeSageFk: código impuesto
|
||||||
transactionTypeSageFk: código transacción
|
transactionTypeSageFk: código transacción
|
||||||
|
|
|
@ -146,7 +146,7 @@ module.exports = Self => {
|
||||||
ii.docFk AS dmsFk,
|
ii.docFk AS dmsFk,
|
||||||
dm.file,
|
dm.file,
|
||||||
ii.supplierFk,
|
ii.supplierFk,
|
||||||
ii.expenceFkDeductible deductibleExpenseFk,
|
ii.expenseFkDeductible deductibleExpenseFk,
|
||||||
s.name AS supplierName,
|
s.name AS supplierName,
|
||||||
s.account,
|
s.account,
|
||||||
SUM(iid.amount) AS amount,
|
SUM(iid.amount) AS amount,
|
||||||
|
|
|
@ -29,15 +29,18 @@ module.exports = Self => {
|
||||||
SELECT iit.*,
|
SELECT iit.*,
|
||||||
SUM(iidd.amount) totalDueDay
|
SUM(iidd.amount) totalDueDay
|
||||||
FROM vn.invoiceIn ii
|
FROM vn.invoiceIn ii
|
||||||
LEFT JOIN (SELECT SUM(iit.taxableBase) totalTaxableBase,
|
LEFT JOIN (
|
||||||
CAST(SUM(iit.taxableBase * (1 + (ti.PorcentajeIva / 100))) AS DECIMAL(10,2)) totalVat
|
SELECT SUM(iit.taxableBase) totalTaxableBase,
|
||||||
|
CAST(
|
||||||
|
SUM(IFNULL(iit.taxableBase * (1 + (ti.PorcentajeIva / 100)), iit.taxableBase))
|
||||||
|
AS DECIMAL(10, 2)
|
||||||
|
) totalVat
|
||||||
FROM vn.invoiceInTax iit
|
FROM vn.invoiceInTax iit
|
||||||
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
|
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk
|
||||||
WHERE iit.invoiceInFk = ?) iit ON TRUE
|
WHERE iit.invoiceInFk = ?
|
||||||
|
) iit ON TRUE
|
||||||
LEFT JOIN vn.invoiceInDueDay iidd ON iidd.invoiceInFk = ii.id
|
LEFT JOIN vn.invoiceInDueDay iidd ON iidd.invoiceInFk = ii.id
|
||||||
WHERE
|
WHERE ii.id = ?`, [id, id]);
|
||||||
ii.id = ?`, [id, id]);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,10 +19,7 @@
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"expenseFk": {
|
"expenseFk": {
|
||||||
"type": "number",
|
"type": "number"
|
||||||
"mysql": {
|
|
||||||
"columnName": "expenceFk"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"created": {
|
"created": {
|
||||||
"type": "date"
|
"type": "date"
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
"deductibleExpenseFk": {
|
"deductibleExpenseFk": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"columnName": "expenceFkDeductible"
|
"columnName": "expenseFkDeductible"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"base": "VnModel",
|
"base": "VnModel",
|
||||||
"options": {
|
"options": {
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"table": "expence"
|
"table": "expense"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
@ -117,10 +117,7 @@
|
||||||
"description": "The item family"
|
"description": "The item family"
|
||||||
},
|
},
|
||||||
"expenseFk": {
|
"expenseFk": {
|
||||||
"type": "number",
|
"type": "number"
|
||||||
"mysql": {
|
|
||||||
"columnName": "expenceFk"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"minPrice": {
|
"minPrice": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
|
@ -131,9 +128,6 @@
|
||||||
"nonRecycledPlastic": {
|
"nonRecycledPlastic": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"minQuantity": {
|
|
||||||
"type": "number"
|
|
||||||
},
|
|
||||||
"packingOut": {
|
"packingOut": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
url="Expenses"
|
url="Expenses"
|
||||||
label="Expense"
|
label="Expense"
|
||||||
ng-model="$ctrl.item.expenseFk"
|
ng-model="$ctrl.item.expenseFk"
|
||||||
vn-name="expence"
|
vn-name="expense"
|
||||||
initial-data="$ctrl.item.expense">
|
initial-data="$ctrl.item.expense">
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
|
|
|
@ -54,7 +54,7 @@ module.exports = Self => {
|
||||||
dmsFk: firstDms.id,
|
dmsFk: firstDms.id,
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
const expence = await models.AgencyTermConfig.findOne(null, myOptions);
|
const expense = await models.AgencyTermConfig.findOne(null, myOptions);
|
||||||
|
|
||||||
const [taxTypeSage] = await Self.rawSql(`
|
const [taxTypeSage] = await Self.rawSql(`
|
||||||
SELECT IFNULL(s.taxTypeSageFk, CodigoIva) value
|
SELECT IFNULL(s.taxTypeSageFk, CodigoIva) value
|
||||||
|
@ -78,7 +78,7 @@ module.exports = Self => {
|
||||||
await models.InvoiceInTax.create({
|
await models.InvoiceInTax.create({
|
||||||
invoiceInFk: newInvoiceIn.id,
|
invoiceInFk: newInvoiceIn.id,
|
||||||
taxableBase: firstRow.totalPrice,
|
taxableBase: firstRow.totalPrice,
|
||||||
expenseFk: expence.expenceFk,
|
expenseFk: expense.expenseFk,
|
||||||
taxTypeSageFk: taxTypeSage.value,
|
taxTypeSageFk: taxTypeSage.value,
|
||||||
transactionTypeSageFk: transactionTypeSage.value
|
transactionTypeSageFk: transactionTypeSage.value
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
|
@ -105,7 +105,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
filter = mergeFilters(ctx.args.filter, {where});
|
filter = mergeFilters(filter, {where});
|
||||||
|
|
||||||
let stmts = [];
|
let stmts = [];
|
||||||
let stmt;
|
let stmt;
|
||||||
|
@ -129,9 +129,11 @@ module.exports = Self => {
|
||||||
r.description,
|
r.description,
|
||||||
am.name agencyName,
|
am.name agencyName,
|
||||||
u.name AS workerUserName,
|
u.name AS workerUserName,
|
||||||
v.numberPlate AS vehiclePlateNumber
|
v.numberPlate AS vehiclePlateNumber,
|
||||||
|
Date_format(r.time, '%H:%i') hour
|
||||||
FROM route r
|
FROM route r
|
||||||
LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
|
LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
|
||||||
|
LEFT JOIN agency a ON a.id = am.agencyFk
|
||||||
LEFT JOIN vehicle v ON v.id = r.vehicleFk
|
LEFT JOIN vehicle v ON v.id = r.vehicleFk
|
||||||
LEFT JOIN worker w ON w.id = r.workerFk
|
LEFT JOIN worker w ON w.id = r.workerFk
|
||||||
LEFT JOIN account.user u ON u.id = w.id`
|
LEFT JOIN account.user u ON u.id = w.id`
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('getByWorker', {
|
||||||
|
description: 'Return the routes by worker',
|
||||||
|
accessType: 'READ',
|
||||||
|
returns: {
|
||||||
|
type: ['object'],
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/getByWorker`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.getByWorker = async ctx => {
|
||||||
|
const models = Self.app.models;
|
||||||
|
const userId = ctx.req.accessToken.userId;
|
||||||
|
const myOptions = {};
|
||||||
|
|
||||||
|
if (typeof options == 'object')
|
||||||
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
|
const canViewAll = await models.ACL.checkAccessAcl(ctx, 'Route', 'canViewAllRoute', 'READ');
|
||||||
|
let filterGrant = {};
|
||||||
|
|
||||||
|
if (canViewAll) {
|
||||||
|
const userConfig = await models.UserConfig.getUserConfig(ctx, myOptions);
|
||||||
|
filterGrant = {
|
||||||
|
where: {'a.warehouseFk': userConfig.warehouseFk}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
filterGrant = {
|
||||||
|
where: {'r.workerFk': userId}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentDate = Date.vnNew();
|
||||||
|
currentDate.setHours(0, 0, 0, 0);
|
||||||
|
const nextDay = Date.vnNew();
|
||||||
|
nextDay.setDate(currentDate.getDate() + 1);
|
||||||
|
|
||||||
|
const filter = {
|
||||||
|
where: {
|
||||||
|
and: [
|
||||||
|
{
|
||||||
|
or: [
|
||||||
|
{'r.created': currentDate},
|
||||||
|
{'r.created': nextDay}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
order: [
|
||||||
|
'r.created ASC',
|
||||||
|
'r.time ASC',
|
||||||
|
'am.name ASC'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await Self.filter(ctx, mergeFilters(filter, filterGrant));
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,7 +1,7 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('getDeliveryPoint', {
|
Self.remoteMethod('getDeliveryPoint', {
|
||||||
description: 'get the deliveryPoint address',
|
description: 'get the deliveryPoint address',
|
||||||
accessType: 'WRITE',
|
accessType: 'READ',
|
||||||
accepts: {
|
accepts: {
|
||||||
arg: 'vehicleId',
|
arg: 'vehicleId',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('guessPriority', {
|
Self.remoteMethodCtx('guessPriority', {
|
||||||
description: 'Changes automatically the priority of the tickets in a route',
|
description: 'Changes automatically the priority of the tickets in a route',
|
||||||
accessType: 'READ',
|
accessType: 'WRITE',
|
||||||
accepts: [{
|
accepts: [{
|
||||||
arg: 'id',
|
arg: 'id',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
@ -15,7 +15,7 @@ module.exports = Self => {
|
||||||
},
|
},
|
||||||
http: {
|
http: {
|
||||||
path: `/:id/guessPriority`,
|
path: `/:id/guessPriority`,
|
||||||
verb: 'GET'
|
verb: 'PATCH'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ const UserError = require('vn-loopback/util/user-error');
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('insertTicket', {
|
Self.remoteMethod('insertTicket', {
|
||||||
description: 'Check if the ticket can be insert into the route and insert it',
|
description: 'Check if the ticket can be insert into the route and insert it',
|
||||||
accessType: 'READ',
|
accessType: 'WRITE',
|
||||||
accepts: [{
|
accepts: [{
|
||||||
arg: 'routeId',
|
arg: 'routeId',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
const app = require('vn-loopback/server/server');
|
||||||
|
const LoopBackContext = require('loopback-context');
|
||||||
|
|
||||||
|
describe('route getByWorker()', () => {
|
||||||
|
const userId = 56;
|
||||||
|
const activeCtx = {
|
||||||
|
accessToken: {userId: userId},
|
||||||
|
http: {
|
||||||
|
req: {
|
||||||
|
headers: {origin: 'http://localhost'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const ctx = {req: activeCtx};
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
active: activeCtx
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return routes assigned to the worker', async() => {
|
||||||
|
const result = await app.models.Route.getByWorker(ctx);
|
||||||
|
|
||||||
|
expect(result.every(route => route.workerFk === userId)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return all routes if user has canViewAllRoute permission', async() => {
|
||||||
|
// Simular que el usuario tiene permiso para ver todas las rutas
|
||||||
|
spyOn(app.models.ACL, 'checkAccessAcl').and.returnValue(Promise.resolve(true));
|
||||||
|
|
||||||
|
const result = await app.models.Route.getByWorker(ctx);
|
||||||
|
|
||||||
|
expect(result.some(route => route.workerFk != userId)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"expenceFk": {
|
"expenseFk": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"id": true
|
"id": true
|
||||||
},
|
},
|
||||||
|
|
|
@ -17,6 +17,7 @@ module.exports = Self => {
|
||||||
require('../methods/route/cmr')(Self);
|
require('../methods/route/cmr')(Self);
|
||||||
require('../methods/route/getExternalCmrs')(Self);
|
require('../methods/route/getExternalCmrs')(Self);
|
||||||
require('../methods/route/downloadCmrsZip')(Self);
|
require('../methods/route/downloadCmrsZip')(Self);
|
||||||
|
require('../methods/route/getByWorker')(Self);
|
||||||
|
|
||||||
Self.validate('kmStart', validateDistance, {
|
Self.validate('kmStart', validateDistance, {
|
||||||
message: 'Distance must be lesser than 1000'
|
message: 'Distance must be lesser than 1000'
|
||||||
|
@ -31,5 +32,5 @@ module.exports = Self => {
|
||||||
const routeMaxKm = 1000;
|
const routeMaxKm = 1000;
|
||||||
if (routeTotalKm > routeMaxKm || this.kmStart > this.kmEnd)
|
if (routeTotalKm > routeMaxKm || this.kmStart > this.kmEnd)
|
||||||
err();
|
err();
|
||||||
};
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -120,7 +120,7 @@ class Controller extends Section {
|
||||||
|
|
||||||
guessPriority() {
|
guessPriority() {
|
||||||
let query = `Routes/${this.$params.id}/guessPriority/`;
|
let query = `Routes/${this.$params.id}/guessPriority/`;
|
||||||
this.$http.get(query).then(() => {
|
this.$http.patch(query).then(() => {
|
||||||
this.vnApp.showSuccess(this.$t('Order changed'));
|
this.vnApp.showSuccess(this.$t('Order changed'));
|
||||||
this.$.model.refresh();
|
this.$.model.refresh();
|
||||||
});
|
});
|
||||||
|
|
|
@ -209,22 +209,6 @@ describe('Route', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('guessPriority()', () => {
|
|
||||||
it('should perform a GET query then call both refresh and showSuccess methods', () => {
|
|
||||||
jest.spyOn(controller.$.model, 'refresh');
|
|
||||||
jest.spyOn(controller.vnApp, 'showSuccess');
|
|
||||||
controller.$params = {id: 99};
|
|
||||||
|
|
||||||
const url = `Routes/${controller.$params.id}/guessPriority/`;
|
|
||||||
$httpBackend.expectGET(url).respond('ok');
|
|
||||||
controller.guessPriority();
|
|
||||||
$httpBackend.flush();
|
|
||||||
|
|
||||||
expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Order changed');
|
|
||||||
expect(controller.$.model.refresh).toHaveBeenCalledWith();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('onDrop()', () => {
|
describe('onDrop()', () => {
|
||||||
it('should call the insert method when dragging a ticket number', () => {
|
it('should call the insert method when dragging a ticket number', () => {
|
||||||
jest.spyOn(controller, 'insert');
|
jest.spyOn(controller, 'insert');
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('deleteExpeditions', {
|
Self.remoteMethodCtx('deleteExpeditions', {
|
||||||
description: 'Delete the selected expeditions',
|
description: 'Delete the selected expeditions',
|
||||||
accessType: 'WRITE',
|
accessType: 'WRITE',
|
||||||
accepts: [{
|
accepts: [{
|
||||||
|
@ -9,44 +10,59 @@ module.exports = Self => {
|
||||||
required: true,
|
required: true,
|
||||||
description: 'The expeditions ids to delete'
|
description: 'The expeditions ids to delete'
|
||||||
}],
|
}],
|
||||||
returns: {
|
|
||||||
type: ['object'],
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
http: {
|
||||||
path: `/deleteExpeditions`,
|
path: `/deleteExpeditions`,
|
||||||
verb: 'POST'
|
verb: 'POST'
|
||||||
|
},
|
||||||
|
returns: {
|
||||||
|
type: ['object'],
|
||||||
|
root: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.deleteExpeditions = async(expeditionIds, options) => {
|
Self.deleteExpeditions = async(ctx, expeditionIds) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const myOptions = {};
|
const $t = ctx.req.__;
|
||||||
let tx;
|
const notDeletedExpeditions = [];
|
||||||
|
const deletedExpeditions = [];
|
||||||
|
|
||||||
if (typeof options == 'object')
|
for (let expeditionId of expeditionIds) {
|
||||||
Object.assign(myOptions, options);
|
const filter = {
|
||||||
|
fields: [],
|
||||||
|
where: {
|
||||||
|
id: expeditionId
|
||||||
|
},
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
relation: 'agencyMode',
|
||||||
|
scope: {
|
||||||
|
fields: ['code'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
if (!myOptions.transaction) {
|
const expedition = await models.Expedition.findOne(filter);
|
||||||
tx = await Self.beginTransaction({});
|
const {code} = expedition.agencyMode();
|
||||||
myOptions.transaction = tx;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
if (code && code.toLowerCase().substring(0, 10) == 'viaexpress') {
|
||||||
const promises = [];
|
const isDeleted = await models.ViaexpressConfig.deleteExpedition(expeditionId);
|
||||||
for (let expeditionId of expeditionIds) {
|
|
||||||
const deletedExpedition = models.Expedition.destroyById(expeditionId, myOptions);
|
if (isDeleted === 'true') {
|
||||||
promises.push(deletedExpedition);
|
const deletedExpedition = await models.Expedition.destroyById(expeditionId);
|
||||||
|
deletedExpeditions.push(deletedExpedition);
|
||||||
|
} else notDeletedExpeditions.push(expeditionId);
|
||||||
|
} else {
|
||||||
|
const deletedExpedition = await models.Expedition.destroyById(expeditionId);
|
||||||
|
deletedExpeditions.push(deletedExpedition);
|
||||||
}
|
}
|
||||||
|
|
||||||
const deletedExpeditions = await Promise.all(promises);
|
|
||||||
|
|
||||||
if (tx) await tx.commit();
|
|
||||||
|
|
||||||
return deletedExpeditions;
|
|
||||||
} catch (e) {
|
|
||||||
if (tx) await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (notDeletedExpeditions.length) {
|
||||||
|
throw new UserError(
|
||||||
|
$t(`It was not able to remove the next expeditions:`, {expeditions: notDeletedExpeditions.join()})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return deletedExpeditions;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,17 +2,16 @@ const models = require('vn-loopback/server/server').models;
|
||||||
const LoopBackContext = require('loopback-context');
|
const LoopBackContext = require('loopback-context');
|
||||||
|
|
||||||
describe('ticket deleteExpeditions()', () => {
|
describe('ticket deleteExpeditions()', () => {
|
||||||
|
let ctx;
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
const activeCtx = {
|
ctx = {
|
||||||
accessToken: {userId: 9},
|
accessToken: {userId: 9},
|
||||||
http: {
|
req: {
|
||||||
req: {
|
headers: {origin: 'http://localhost'}
|
||||||
headers: {origin: 'http://localhost'}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
active: activeCtx
|
active: ctx
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -23,7 +22,7 @@ describe('ticket deleteExpeditions()', () => {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const expeditionIds = [12, 13];
|
const expeditionIds = [12, 13];
|
||||||
const result = await models.Expedition.deleteExpeditions(expeditionIds, options);
|
const result = await models.Expedition.deleteExpeditions(ctx, expeditionIds, options);
|
||||||
|
|
||||||
expect(result.length).toEqual(2);
|
expect(result.length).toEqual(2);
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
},
|
},
|
||||||
"counter": {
|
"counter": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
|
},
|
||||||
|
"externalId": {
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
@ -30,7 +33,7 @@
|
||||||
},
|
},
|
||||||
"agencyMode": {
|
"agencyMode": {
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "agency-mode",
|
"model": "AgencyMode",
|
||||||
"foreignKey": "agencyModeFk"
|
"foreignKey": "agencyModeFk"
|
||||||
},
|
},
|
||||||
"worker": {
|
"worker": {
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"expenseFk": {
|
"expenseFk": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"columnName": "expenceFk"
|
"columnName": "expenseFk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -75,6 +75,20 @@ export default class Controller extends Section {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compareDate(date) {
|
||||||
|
let today = Date.vnNew();
|
||||||
|
today.setHours(0, 0, 0, 0);
|
||||||
|
let timeTicket = new Date(date);
|
||||||
|
timeTicket.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
|
let comparation = today - timeTicket;
|
||||||
|
|
||||||
|
if (comparation == 0)
|
||||||
|
return 'warning';
|
||||||
|
if (comparation < 0)
|
||||||
|
return 'success';
|
||||||
|
}
|
||||||
|
|
||||||
get checked() {
|
get checked() {
|
||||||
const tickets = this.$.model.data || [];
|
const tickets = this.$.model.data || [];
|
||||||
const checkedLines = [];
|
const checkedLines = [];
|
||||||
|
@ -202,9 +216,9 @@ export default class Controller extends Section {
|
||||||
if (!ticket.landed) {
|
if (!ticket.landed) {
|
||||||
const newLanded = await this.getLanded({
|
const newLanded = await this.getLanded({
|
||||||
shipped: this.$.model.userParams.dateToAdvance,
|
shipped: this.$.model.userParams.dateToAdvance,
|
||||||
addressFk: ticket.futureAddressFk,
|
addressFk: ticket.addressFk,
|
||||||
agencyModeFk: ticket.agencyModeFk ?? ticket.futureAgencyModeFk,
|
agencyModeFk: ticket.agencyModeFk,
|
||||||
warehouseFk: ticket.futureWarehouseFk
|
warehouseFk: ticket.warehouseFk
|
||||||
});
|
});
|
||||||
if (!newLanded)
|
if (!newLanded)
|
||||||
throw new Error(this.$t(`No delivery zone available for this landing date`));
|
throw new Error(this.$t(`No delivery zone available for this landing date`));
|
||||||
|
@ -213,13 +227,13 @@ export default class Controller extends Section {
|
||||||
ticket.zoneFk = newLanded.zoneFk;
|
ticket.zoneFk = newLanded.zoneFk;
|
||||||
}
|
}
|
||||||
const params = {
|
const params = {
|
||||||
clientFk: ticket.futureClientFk,
|
clientFk: ticket.clientFk,
|
||||||
nickname: ticket.nickname,
|
nickname: ticket.nickname,
|
||||||
agencyModeFk: ticket.agencyModeFk ?? ticket.futureAgencyModeFk,
|
agencyModeFk: ticket.agencyModeFk ?? ticket.futureAgencyModeFk,
|
||||||
addressFk: ticket.futureAddressFk,
|
addressFk: ticket.addressFk,
|
||||||
zoneFk: ticket.zoneFk ?? ticket.futureZoneFk,
|
zoneFk: ticket.zoneFk ?? ticket.futureZoneFk,
|
||||||
warehouseFk: ticket.futureWarehouseFk,
|
warehouseFk: ticket.warehouseFk,
|
||||||
companyFk: ticket.futureCompanyFk,
|
companyFk: ticket.companyFk,
|
||||||
shipped: this.$.model.userParams.dateToAdvance,
|
shipped: this.$.model.userParams.dateToAdvance,
|
||||||
landed: ticket.landed,
|
landed: ticket.landed,
|
||||||
isDeleted: false,
|
isDeleted: false,
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "salix-back",
|
"name": "salix-back",
|
||||||
"version": "23.48.01",
|
"version": "23.50.01",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "salix-back",
|
"name": "salix-back",
|
||||||
"version": "23.48.01",
|
"version": "23.50.01",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.2.2",
|
"axios": "^1.2.2",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "salix-back",
|
"name": "salix-back",
|
||||||
"version": "23.48.01",
|
"version": "23.50.01",
|
||||||
"author": "Verdnatura Levante SL",
|
"author": "Verdnatura Levante SL",
|
||||||
"description": "Salix backend",
|
"description": "Salix backend",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
|
|
Loading…
Reference in New Issue