Compare commits
99 Commits
4383ebd7f1
...
db06620d7c
Author | SHA1 | Date |
---|---|---|
Javier Segarra | db06620d7c | |
Javier Segarra | 60fbb1d56e | |
Jorge Penadés | 0b1bbbaaa6 | |
Jorge Penadés | 611b45bae0 | |
Alex Moreno | ee7dd66ce9 | |
Alex Moreno | 35e74a7635 | |
Alex Moreno | ab69dcd4fe | |
Javier Segarra | b241efc961 | |
Alex Moreno | 016e4ae37c | |
Carlos Satorres | e7d3ef0763 | |
Jorge Penadés | 6121eeaa3a | |
Carlos Satorres | 9cdb7c3cca | |
Javi Gallego | 69e555e7b4 | |
Javier Segarra | 7611acb8f2 | |
Javier Segarra | 80f8037f58 | |
Javier Segarra | 58855a7cdd | |
Javier Segarra | 6b354a20ad | |
Javier Segarra | 138d11b7b0 | |
Javier Segarra | 1576ab992d | |
Javier Segarra | 46774b2e73 | |
Javier Segarra | 9176cdb4cb | |
Javier Segarra | ed6c0924d7 | |
Javier Segarra | 48b82b02ca | |
Javi Gallego | d246b5f9a8 | |
Guillermo Bonet | b3cc020ea7 | |
Javier Segarra | c40dc134f8 | |
Guillermo Bonet | 5e9a62eac2 | |
Alex Moreno | 2e22984e77 | |
Javier Segarra | 63533459b0 | |
Jorge Penadés | f2673c3818 | |
Guillermo Bonet | 1a5cc67312 | |
Javi Gallego | 2fa56cce4b | |
Alex Moreno | 37555cbb63 | |
Juan Ferrer | c7291e3367 | |
Juan Ferrer | 74772472d5 | |
Carlos Satorres | 23235e2b44 | |
Guillermo Bonet | 8ee8d90eec | |
Guillermo Bonet | 3bdb002034 | |
Guillermo Bonet | aefff68c29 | |
Alex Moreno | 3fb1ed9dfe | |
Jorge Penadés | d075cb97ad | |
Carlos Satorres | f9d5cad412 | |
Guillermo Bonet | 2be1639e9f | |
Jorge Penadés | 53c8e87b5b | |
Jorge Penadés | 74dd64126a | |
Jorge Penadés | 8ac3887d80 | |
Jorge Penadés | c56588a472 | |
Jorge Penadés | b3584d9db5 | |
Carlos Satorres | 461cb3d2ba | |
Carlos Satorres | 5d18c211a0 | |
Carlos Satorres | 8a568f180a | |
Carlos Satorres | ebe467f721 | |
Javi Gallego | 4a62588464 | |
Jorge Penadés | 1f9030c36d | |
Jorge Penadés | eeef279483 | |
Jorge Penadés | 5f09907c98 | |
Jorge Penadés | 025e4f3f87 | |
Jorge Penadés | f4a1d09ef8 | |
Sergio De la torre | 756e55f5c2 | |
Alex Moreno | 4735307f5d | |
Jorge Penadés | 6b2c1e09de | |
Javi Gallego | 5b145a57e6 | |
Jorge Penadés | 048e3089cd | |
Jorge Penadés | db15285858 | |
Jorge Penadés | 2e67ef4f5d | |
Jorge Penadés | 900dffbbba | |
Javi Gallego | f44424dbcf | |
Javi Gallego | 5b289ec083 | |
Alex Moreno | 1277bec801 | |
Jorge Penadés | 6580896dcd | |
Alex Moreno | 217aa1ac77 | |
Jorge Penadés | da7b670d74 | |
Alex Moreno | f4fabb9fff | |
Carlos Andrés | 800d12e0f2 | |
Carlos Satorres | 2b455488a3 | |
Carlos Satorres | 6b07ee4eb1 | |
Javi Gallego | e856de0cfd | |
Jorge Penadés | 26a8cc6a2c | |
Javi Gallego | e146c0ea46 | |
Jorge Penadés | a27bb53089 | |
Sergio De la torre | 707173d618 | |
Jorge Penadés | 3f8d1ff617 | |
Juan Ferrer | bf7c67dbde | |
Juan Ferrer | 0a2fd9cf5d | |
Guillermo Bonet | 2847b993d3 | |
Guillermo Bonet | a4cbc33ee1 | |
Guillermo Bonet | b7da144967 | |
Guillermo Bonet | eb98de71b1 | |
Guillermo Bonet | 9f92bc4b4c | |
Guillermo Bonet | 9668468f94 | |
Alex Moreno | 30895f444f | |
Alex Moreno | 2dbd711104 | |
Guillermo Bonet | f6d46396b5 | |
Guillermo Bonet | cab3548c9b | |
Guillermo Bonet | 0dbb77fc64 | |
Guillermo Bonet | 9f6d034f9c | |
Guillermo Bonet | d1df8009a6 | |
Vicent Llopis | f3e43686a3 | |
Sergio De la torre | 639d5963a3 |
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -5,15 +5,22 @@ 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).
|
||||||
|
|
||||||
## [2348.01] - 2023-11-30
|
## [2350.01] - 2023-12-14
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- (Ticket -> Adelantar) Permite mover lineas sin generar negativos
|
|
||||||
- (Ticket -> Adelantar) Permite modificar la fecha de los tickets
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
### Fixed
|
### Fixed
|
||||||
- (Ticket -> RocketChat) Arreglada detección de cambios
|
|
||||||
|
|
||||||
|
## [2348.01] - 2023-11-30
|
||||||
|
|
||||||
|
### Características Añadidas 🆕
|
||||||
|
- **Tickets → Adelantar:** Permite mover lineas sin generar negativos
|
||||||
|
- **Tickets → Adelantar:** Permite modificar la fecha de los tickets
|
||||||
|
- **Trabajadores → Notificaciones:** Nueva sección (lilium)
|
||||||
|
|
||||||
|
### Correcciones 🛠️
|
||||||
|
- **Tickets → RocketChat:** Arreglada detección de cambios
|
||||||
|
|
||||||
|
|
||||||
## [2346.01] - 2023-11-16
|
## [2346.01] - 2023-11-16
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,42 @@ module.exports = function(Self) {
|
||||||
|
|
||||||
return email.send();
|
return email.send();
|
||||||
});
|
});
|
||||||
Self.signInValidate = (user, userToken) => {
|
|
||||||
|
/**
|
||||||
|
* Sign-in validate
|
||||||
|
* @param {String} 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({
|
||||||
|
userName: user,
|
||||||
|
token: token.id,
|
||||||
|
userFk: userToken.id,
|
||||||
|
ip: ctx.req.ip,
|
||||||
|
owner: isOwner
|
||||||
|
});
|
||||||
|
if (!isOwner)
|
||||||
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);
|
||||||
|
@ -226,10 +248,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: {
|
||||||
|
and: [
|
||||||
{appName: 'lilium'},
|
{appName: 'lilium'},
|
||||||
{environment: env}
|
{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
|
||||||
|
|
|
@ -1,33 +1,60 @@
|
||||||
DROP PROCEDURE IF EXISTS `vn`.`zoneIncluded_checkCollisions`;
|
DROP PROCEDURE IF EXISTS vn.zoneIncluded_checkCollisions;
|
||||||
DELIMITER $$
|
|
||||||
|
|
||||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zoneIncluded_checkCollisions`(IN zi_zone INT, IN zi_geo INT)
|
DELIMITER $$
|
||||||
|
$$
|
||||||
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zoneIncluded_checkCollisions`()
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE done INT DEFAULT 0;
|
DECLARE zic_id, zic_zone, zic_geoFk, zic_action, zic_zoneFk, zic_userFk INT;
|
||||||
DECLARE zic_id, zic_zone, zic_geo, zic_action, zic_userFk INT;
|
DECLARE zic2_geoFk, zic2_zoneFk INT;
|
||||||
DECLARE z_name VARCHAR(255);
|
DECLARE z_name VARCHAR(255);
|
||||||
DECLARE g_name VARCHAR(255);
|
DECLARE g_name VARCHAR(255);
|
||||||
|
DECLARE vDone boolean;
|
||||||
|
|
||||||
DECLARE my_cur CURSOR FOR
|
|
||||||
SELECT zic.id, z.name , zg.name , zic.geoFk ,zic.`action` , zic.userFK FROM vn.zoneIncludedCheck zic, vn.`zone` z, vn.zoneGeo zg WHERE zic.zoneFK =z.id AND zic.geoFK = zg.id ;
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
|
||||||
|
|
||||||
OPEN my_cur;
|
DECLARE cur CURSOR FOR
|
||||||
my_cur_loop:
|
SELECT zic.id, z.name , zg.name ,zic.zoneFK, zic.geoFk ,zic.`action` , zic.userFK
|
||||||
LOOP FETCH my_cur INTO zic_id, z_name,g_name, zic_geo, zic_action, zic_userFk ;
|
FROM vn.zoneIncludedCheck zic, vn.`zone` z, vn.zoneGeo zg
|
||||||
IF done = 1 THEN
|
WHERE zic.zoneFK =z.id AND zic.geoFK = zg.id and zic.action ='insert';
|
||||||
select concat('NO REDCORDS' ) AS '** DEBUG:';
|
|
||||||
LEAVE my_cur_loop;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
SET vDone := FALSE;
|
||||||
|
OPEN cur;
|
||||||
|
LOOP1: LOOP
|
||||||
|
SET vDone := FALSE;
|
||||||
|
FETCH cur INTO zic_id, z_name, g_name, zic_zoneFk, zic_geoFk, zic_action, zic_userFk ;
|
||||||
|
IF vDone THEN
|
||||||
|
select concat('NO RECORDS LOOP 1' ) AS '** DEBUG:';
|
||||||
|
CLOSE cur;
|
||||||
|
LEAVE LOOP1;
|
||||||
END IF;
|
END IF;
|
||||||
SELECT concat('** ', zic_id, '** ',z_name, '** ',g_name,'**',zic_geo,'** ', zic_action,'** ', zic_userFk ) AS '** DEBUG:';
|
-- SELECT concat('** ', zic_id, '** ',z_name, '** ',g_name,'**',zic_zoneFk,'**',zic_geoFk,'** ', zic_action,'** ', zic_userFk ) AS '** DEBUG:';
|
||||||
DELETE FROM vn.zoneIncludedCheck WHERE id =zic_id;
|
DELETE FROM vn.zoneIncludedCheck WHERE id =zic_id;
|
||||||
|
|
||||||
|
BLOCK2: BEGIN
|
||||||
|
DECLARE vDone2 boolean;
|
||||||
|
DECLARE cur2 CURSOR FOR
|
||||||
|
SELECT zi.zoneFk,zi.geoFk
|
||||||
|
FROM vn.zoneIncluded zi, vn.zone z
|
||||||
|
where z.id = zi.zoneFk and zi.zoneFk=zic_zoneFk and zi.geoFk=zic_geoFk and zi.isIncluded = 1;
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone2 = TRUE;
|
||||||
|
SET vDone2 := FALSE;
|
||||||
|
OPEN cur2;
|
||||||
|
LOOP2: LOOP
|
||||||
|
FETCH cur2 INTO zic2_zoneFk, zic2_geoFk ;
|
||||||
|
IF vDone2 THEN
|
||||||
|
select concat('NO RECORDS LOOP 2' ) AS '** DEBUG:';
|
||||||
|
CLOSE cur2;
|
||||||
|
LEAVE LOOP2;
|
||||||
|
END IF;
|
||||||
|
SELECT concat('COLLISION DETECTED', zic2_zoneFk, zic2_geoFk ) AS '** DEBUG:';
|
||||||
|
|
||||||
SELECT util.notification_send('zone-included',
|
SELECT util.notification_send('zone-included',
|
||||||
JSON_OBJECT('zoneSelected', z_name, 'geoSelected', g_name),
|
JSON_OBJECT('zoneSelected', z_name, 'geoSelected', g_name),
|
||||||
account.myUser_getId()
|
account.myUser_getId()
|
||||||
);
|
);
|
||||||
END LOOP my_cur_loop;
|
END LOOP LOOP2;
|
||||||
CLOSE my_cur;
|
END BLOCK2;
|
||||||
|
END LOOP LOOP1;
|
||||||
|
END
|
||||||
END$$
|
$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
-- Auto-generated SQL script #202311241021
|
|
||||||
INSERT INTO util.notification (name,description)
|
INSERT INTO util.notification (name,description)
|
||||||
VALUES ('zone-included','An email to notify zoneCollisions');
|
VALUES ('zone-included','An email to notify zoneCollisions');
|
||||||
|
|
||||||
-- Auto-generated SQL script #202311241051
|
|
||||||
INSERT INTO util.notificationSubscription (notificationFk,userFk)
|
INSERT INTO util.notificationSubscription (notificationFk,userFk)
|
||||||
SELECT id, account.myUser_getId() FROM util.notification WHERE name= "zone-included"
|
SELECT id, account.myUser_getId() FROM util.notification WHERE name= "zone-included";
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO util.notificationAcl (notificationFk,roleFk)
|
INSERT INTO util.notificationAcl (notificationFk,roleFk)
|
||||||
SELECT id, account.role FROM util.notification WHERE name= "zone-included"
|
SELECT id, (SELECT id from `account`.`role` where name = "system") FROM util.notification WHERE name= "zone-included";
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `signInLog`
|
-- Table structure for table `signInLog`
|
||||||
-- Description: log to debug cross-login error
|
-- Description: log to debug cross-login error
|
||||||
|
@ -13,7 +12,9 @@ CREATE TABLE `account`.`signInLog` (
|
||||||
`token` varchar(255) NOT NULL ,
|
`token` varchar(255) NOT NULL ,
|
||||||
`userFk` int(10) unsigned DEFAULT NULL,
|
`userFk` int(10) unsigned DEFAULT NULL,
|
||||||
`creationDate` timestamp NULL DEFAULT current_timestamp(),
|
`creationDate` timestamp NULL DEFAULT current_timestamp(),
|
||||||
|
`userName` varchar(30) NOT NULL,
|
||||||
`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');
|
|
@ -1,6 +1,14 @@
|
||||||
|
CREATE ROLE 'salix';
|
||||||
|
GRANT 'salix' TO 'root'@'%';
|
||||||
|
SET DEFAULT ROLE 'salix' FOR 'root'@'%';
|
||||||
|
|
||||||
CREATE SCHEMA IF NOT EXISTS `vn2008`;
|
CREATE SCHEMA IF NOT EXISTS `vn2008`;
|
||||||
CREATE SCHEMA IF NOT EXISTS `tmp`;
|
CREATE SCHEMA IF NOT EXISTS `tmp`;
|
||||||
|
|
||||||
|
CREATE ROLE 'salix';
|
||||||
|
GRANT 'salix' TO 'root'@'%';
|
||||||
|
SET DEFAULT ROLE 'salix' FOR 'root'@'%';
|
||||||
|
|
||||||
UPDATE `util`.`config`
|
UPDATE `util`.`config`
|
||||||
SET `environment`= 'development';
|
SET `environment`= 'development';
|
||||||
|
|
||||||
|
@ -362,7 +370,7 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`)
|
||||||
|
|
||||||
INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`, `businessTypeFk`,`typeFk`)
|
INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`, `businessTypeFk`,`typeFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','loses'),
|
(1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
||||||
(1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
(1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
||||||
(1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
(1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
||||||
(1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
(1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1, 'florist','normal'),
|
||||||
|
@ -372,8 +380,8 @@ INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city
|
||||||
(1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1, 'florist','normal'),
|
(1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1, 'florist','normal'),
|
||||||
(1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, 0, NULL, 0, 0, 9, 0, 1, 'florist','normal'),
|
(1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, 0, NULL, 0, 0, 9, 0, 1, 'florist','normal'),
|
||||||
(1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, 0, NULL, 0, 0, NULL, 0, 1, 'florist','normal'),
|
(1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, 0, NULL, 0, 0, NULL, 0, 1, 'florist','normal'),
|
||||||
(1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','normal'),
|
(1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses'),
|
||||||
(1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','normal');
|
(1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, 0, 1, 0, NULL, 1, 0, NULL, 0, 1, 'others','loses');
|
||||||
|
|
||||||
INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`)
|
INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`)
|
||||||
SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), CONCAT(name, 'Social'), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'GOTHAM', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, util.VN_CURDATE(), 1
|
SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), CONCAT(name, 'Social'), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'GOTHAM', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, util.VN_CURDATE(), 1
|
||||||
|
@ -630,7 +638,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 +650,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 +930,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 +1947,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 +2569,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}}"
|
||||||
}
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
const NotFoundError = require('vn-loopback/util/not-found-error');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('test', {
|
Self.remoteMethod('test', {
|
||||||
|
@ -9,7 +10,8 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.test = async function() {
|
Self.test = async function() {
|
||||||
let connector = await Self.getSynchronizer();
|
const connector = await Self.getLinker();
|
||||||
|
if (!connector) throw new NotFoundError('Linker not configured');
|
||||||
await connector.test();
|
await connector.test();
|
||||||
};
|
};
|
||||||
};
|
};
|
|
@ -26,12 +26,19 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.sync = async function(userName, password, force, options) {
|
Self.sync = async function(userName, password, force, options) {
|
||||||
|
const models = Self.app.models;
|
||||||
const myOptions = {};
|
const myOptions = {};
|
||||||
|
let tx;
|
||||||
|
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const models = Self.app.models;
|
if (!myOptions.transaction) {
|
||||||
|
tx = await Self.beginTransaction({});
|
||||||
|
myOptions.transaction = tx;
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
const user = await models.VnUser.findOne({
|
const user = await models.VnUser.findOne({
|
||||||
fields: ['id', 'password'],
|
fields: ['id', 'password'],
|
||||||
where: {name: userName}
|
where: {name: userName}
|
||||||
|
@ -42,8 +49,23 @@ module.exports = Self => {
|
||||||
|
|
||||||
const isSync = !await models.UserSync.exists(userName, myOptions);
|
const isSync = !await models.UserSync.exists(userName, myOptions);
|
||||||
|
|
||||||
if (!force && isSync && user) return;
|
if (!force && isSync && user) {
|
||||||
|
if (tx) await tx.rollback();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await Self.rawSql(`
|
||||||
|
SELECT id
|
||||||
|
FROM account.user
|
||||||
|
WHERE id = ?
|
||||||
|
FOR UPDATE`, [user.id], myOptions);
|
||||||
|
|
||||||
await models.AccountConfig.syncUser(userName, password);
|
await models.AccountConfig.syncUser(userName, password);
|
||||||
await models.UserSync.destroyById(userName, myOptions);
|
await models.UserSync.destroyById(userName, myOptions);
|
||||||
|
if (tx) await tx.commit();
|
||||||
|
} catch (err) {
|
||||||
|
if (tx) await tx.rollback();
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,14 +3,14 @@ const app = require('vn-loopback/server/server');
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
module.exports = function(Self, options) {
|
module.exports = function(Self, options) {
|
||||||
require('../methods/account-synchronizer/test')(Self);
|
require('../methods/account-linker/test')(Self);
|
||||||
|
|
||||||
Self.once('attached', function() {
|
Self.once('attached', function() {
|
||||||
app.models.AccountConfig.addSynchronizer(Self);
|
app.models.AccountConfig.addLinker(Self);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mixin for user synchronizers.
|
* Mixin for account linkers.
|
||||||
*
|
*
|
||||||
* @property {Array<Model>} $
|
* @property {Array<Model>} $
|
||||||
* @property {Object} accountConfig
|
* @property {Object} accountConfig
|
||||||
|
@ -18,12 +18,12 @@ module.exports = function(Self, options) {
|
||||||
*/
|
*/
|
||||||
let Mixin = {
|
let Mixin = {
|
||||||
/**
|
/**
|
||||||
* Initalizes the synchronizer.
|
* Initalizes the linker.
|
||||||
*/
|
*/
|
||||||
async init() {},
|
async init() {},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deinitalizes the synchronizer.
|
* Deinitalizes the linker.
|
||||||
*/
|
*/
|
||||||
async deinit() {},
|
async deinit() {},
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ module.exports = function(Self, options) {
|
||||||
async syncRoles() {},
|
async syncRoles() {},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests synchronizer configuration.
|
* Tests linker configuration.
|
||||||
*/
|
*/
|
||||||
async test() {
|
async test() {
|
||||||
try {
|
try {
|
|
@ -3,94 +3,85 @@ const models = require('vn-loopback/server/server').models;
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Object.assign(Self, {
|
Object.assign(Self, {
|
||||||
synchronizers: [],
|
linkers: [],
|
||||||
|
|
||||||
addSynchronizer(synchronizer) {
|
addLinker(linker) {
|
||||||
this.synchronizers.push(synchronizer);
|
this.linkers.push(linker);
|
||||||
},
|
},
|
||||||
|
|
||||||
async getInstance() {
|
async initEngine() {
|
||||||
let instance = await Self.findOne({
|
const accountConfig = await Self.findOne({
|
||||||
fields: ['homedir', 'shell', 'idBase']
|
fields: ['homedir', 'shell', 'idBase']
|
||||||
});
|
});
|
||||||
await instance.synchronizerInit();
|
const mailConfig = await models.MailConfig.findOne({
|
||||||
return instance;
|
fields: ['domain']
|
||||||
|
});
|
||||||
|
|
||||||
|
const linkers = [];
|
||||||
|
|
||||||
|
for (const Linker of Self.linkers) {
|
||||||
|
const linker = await Linker.getLinker();
|
||||||
|
if (!linker) continue;
|
||||||
|
Object.assign(linker, {accountConfig});
|
||||||
|
await linker.init();
|
||||||
|
linkers.push(linker);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.assign(accountConfig, {
|
||||||
|
linkers,
|
||||||
|
domain: mailConfig.domain
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
accountConfig,
|
||||||
|
linkers
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
async deinitEngine(engine) {
|
||||||
|
for (const linker of engine.linkers)
|
||||||
|
await linker.deinit();
|
||||||
|
},
|
||||||
|
|
||||||
|
async syncUser(userName, password) {
|
||||||
|
const engine = await Self.initEngine();
|
||||||
|
try {
|
||||||
|
await Self.syncUserBase(engine, userName, password, true);
|
||||||
|
} finally {
|
||||||
|
await Self.deinitEngine(engine);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async syncUsers() {
|
async syncUsers() {
|
||||||
let instance = await Self.getInstance();
|
const engine = await Self.initEngine();
|
||||||
|
|
||||||
|
let usersToSync = new Set();
|
||||||
|
for (const linker of engine.linkers)
|
||||||
|
await linker.getUsers(usersToSync);
|
||||||
|
|
||||||
let usersToSync = await instance.synchronizerGetUsers();
|
|
||||||
usersToSync = Array.from(usersToSync.values())
|
usersToSync = Array.from(usersToSync.values())
|
||||||
.sort((a, b) => a.localeCompare(b));
|
.sort((a, b) => a.localeCompare(b));
|
||||||
|
|
||||||
for (let userName of usersToSync) {
|
for (let userName of usersToSync) {
|
||||||
try {
|
try {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.log(`Synchronizing user '${userName}'`);
|
console.log(`Synchronizing user '${userName}'`);
|
||||||
await instance.synchronizerSyncUser(userName);
|
|
||||||
|
await Self.syncUserBase(engine, userName);
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.log(` -> User '${userName}' sinchronized`);
|
console.log(` -> User '${userName}' sinchronized`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.error(` -> User '${userName}' synchronization error:`, err.message);
|
console.error(` -> User '${userName}' synchronization error:`, err.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.synchronizerDeinit();
|
await Self.deinitEngine(engine);
|
||||||
await Self.syncRoles();
|
await Self.syncRoles();
|
||||||
},
|
},
|
||||||
|
|
||||||
async syncUser(userName, password) {
|
async syncUserBase(engine, userName, password, syncGroups) {
|
||||||
let instance = await Self.getInstance();
|
|
||||||
try {
|
|
||||||
await instance.synchronizerSyncUser(userName, password, true);
|
|
||||||
} finally {
|
|
||||||
await instance.synchronizerDeinit();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async syncRoles() {
|
|
||||||
let instance = await Self.getInstance();
|
|
||||||
try {
|
|
||||||
await instance.synchronizerSyncRoles();
|
|
||||||
} finally {
|
|
||||||
await instance.synchronizerDeinit();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async getSynchronizer() {
|
|
||||||
return await Self.findOne();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.assign(Self.prototype, {
|
|
||||||
async synchronizerInit() {
|
|
||||||
let mailConfig = await models.MailConfig.findOne({
|
|
||||||
fields: ['domain']
|
|
||||||
});
|
|
||||||
|
|
||||||
let synchronizers = [];
|
|
||||||
|
|
||||||
for (let Synchronizer of Self.synchronizers) {
|
|
||||||
let synchronizer = await Synchronizer.getSynchronizer();
|
|
||||||
if (!synchronizer) continue;
|
|
||||||
Object.assign(synchronizer, {
|
|
||||||
accountConfig: this
|
|
||||||
});
|
|
||||||
await synchronizer.init();
|
|
||||||
synchronizers.push(synchronizer);
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(this, {
|
|
||||||
synchronizers,
|
|
||||||
domain: mailConfig.domain
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
async synchronizerDeinit() {
|
|
||||||
for (let synchronizer of this.synchronizers)
|
|
||||||
await synchronizer.deinit();
|
|
||||||
},
|
|
||||||
|
|
||||||
async synchronizerSyncUser(userName, password, syncGroups) {
|
|
||||||
if (!userName) return;
|
if (!userName) return;
|
||||||
userName = userName.toLowerCase();
|
userName = userName.toLowerCase();
|
||||||
|
|
||||||
|
@ -98,7 +89,7 @@ module.exports = Self => {
|
||||||
if (['administrator', 'root'].indexOf(userName) >= 0)
|
if (['administrator', 'root'].indexOf(userName) >= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let user = await models.VnUser.findOne({
|
const user = await models.VnUser.findOne({
|
||||||
where: {name: userName},
|
where: {name: userName},
|
||||||
fields: [
|
fields: [
|
||||||
'id',
|
'id',
|
||||||
|
@ -130,27 +121,28 @@ module.exports = Self => {
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
let info = {
|
const info = {
|
||||||
user,
|
user,
|
||||||
hasAccount: false
|
hasAccount: false
|
||||||
};
|
};
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
let exists = await models.Account.exists(user.id);
|
const exists = await models.Account.exists(user.id);
|
||||||
|
const {accountConfig} = engine;
|
||||||
Object.assign(info, {
|
Object.assign(info, {
|
||||||
hasAccount: user.active && exists,
|
hasAccount: user.active && exists,
|
||||||
corporateMail: `${userName}@${this.domain}`,
|
corporateMail: `${userName}@${accountConfig.domain}`,
|
||||||
uidNumber: this.idBase + user.id
|
uidNumber: accountConfig.idBase + user.id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let errs = [];
|
const errs = [];
|
||||||
|
|
||||||
for (let synchronizer of this.synchronizers) {
|
for (const linker of engine.linkers) {
|
||||||
try {
|
try {
|
||||||
await synchronizer.syncUser(userName, info, password);
|
await linker.syncUser(userName, info, password);
|
||||||
if (syncGroups)
|
if (syncGroups)
|
||||||
await synchronizer.syncUserGroups(userName, info);
|
await linker.syncUserGroups(userName, info);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
errs.push(err);
|
errs.push(err);
|
||||||
}
|
}
|
||||||
|
@ -159,18 +151,16 @@ module.exports = Self => {
|
||||||
if (errs.length) throw errs[0];
|
if (errs.length) throw errs[0];
|
||||||
},
|
},
|
||||||
|
|
||||||
async synchronizerGetUsers() {
|
async syncRoles() {
|
||||||
let usersToSync = new Set();
|
const engine = await Self.initEngine();
|
||||||
|
try {
|
||||||
|
await Self.rawSql(`CALL account.role_sync`);
|
||||||
|
|
||||||
for (let synchronizer of this.synchronizers)
|
for (const linker of engine.linkers)
|
||||||
await synchronizer.getUsers(usersToSync);
|
await linker.syncRoles();
|
||||||
|
} finally {
|
||||||
return usersToSync;
|
await Self.deinitEngine(engine);
|
||||||
},
|
}
|
||||||
|
|
||||||
async synchronizerSyncRoles() {
|
|
||||||
for (let synchronizer of this.synchronizers)
|
|
||||||
await synchronizer.syncRoles();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@ const nthash = require('smbhash').nthash;
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
const shouldSync = process.env.NODE_ENV !== 'test';
|
const shouldSync = process.env.NODE_ENV !== 'test';
|
||||||
|
|
||||||
Self.getSynchronizer = async function() {
|
Self.getLinker = async function() {
|
||||||
return await Self.findOne({
|
return await Self.findOne({
|
||||||
fields: [
|
fields: [
|
||||||
'server',
|
'server',
|
||||||
|
@ -24,6 +24,7 @@ module.exports = Self => {
|
||||||
this.client = ldap.createClient({
|
this.client = ldap.createClient({
|
||||||
url: this.server
|
url: this.server
|
||||||
});
|
});
|
||||||
|
this.client.on('error', () => {});
|
||||||
await this.client.bind(this.rdn, this.password);
|
await this.client.bind(this.rdn, this.password);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mixins": {
|
"mixins": {
|
||||||
"AccountSynchronizer": {}
|
"AccountLinker": {}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.getSynchronizer = async function() {
|
Self.getLinker = async function() {
|
||||||
let NODE_ENV = process.env.NODE_ENV;
|
let NODE_ENV = process.env.NODE_ENV;
|
||||||
if (!NODE_ENV || NODE_ENV == 'development')
|
if (!NODE_ENV || NODE_ENV == 'development')
|
||||||
return null;
|
return null;
|
||||||
|
@ -45,6 +45,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isUpdatable) {
|
if (!isUpdatable) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.warn(`RoleConfig.syncUser(): User '${userName}' cannot be updated, not managed by me`);
|
console.warn(`RoleConfig.syncUser(): User '${userName}' cannot be updated, not managed by me`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -82,6 +83,7 @@ module.exports = Self => {
|
||||||
[mysqlUser, this.userHost]);
|
[mysqlUser, this.userHost]);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.code == 'ER_REVOKE_GRANTS')
|
if (err.code == 'ER_REVOKE_GRANTS')
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.warn(`${err.code}: ${err.sqlMessage}: ${err.sql}`);
|
console.warn(`${err.code}: ${err.sqlMessage}: ${err.sql}`);
|
||||||
else
|
else
|
||||||
throw err;
|
throw err;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mixins": {
|
"mixins": {
|
||||||
"AccountSynchronizer": {}
|
"AccountLinker": {}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
|
|
|
@ -9,7 +9,7 @@ module.exports = Self => {
|
||||||
Self.observe(hook, async() => {
|
Self.observe(hook, async() => {
|
||||||
try {
|
try {
|
||||||
await Self.rawSql(`
|
await Self.rawSql(`
|
||||||
CREATE EVENT account.role_sync
|
CREATE DEFINER = CURRENT_ROLE EVENT account.role_sync
|
||||||
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND
|
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND
|
||||||
DO CALL role_sync;
|
DO CALL role_sync;
|
||||||
`);
|
`);
|
||||||
|
|
|
@ -13,7 +13,7 @@ const UserAccountControlFlags = {
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
const shouldSync = process.env.NODE_ENV !== 'test';
|
const shouldSync = process.env.NODE_ENV !== 'test';
|
||||||
|
|
||||||
Self.getSynchronizer = async function() {
|
Self.getLinker = async function() {
|
||||||
return await Self.findOne({
|
return await Self.findOne({
|
||||||
fields: [
|
fields: [
|
||||||
'host',
|
'host',
|
||||||
|
@ -39,6 +39,7 @@ module.exports = Self => {
|
||||||
url: `ldaps://${this.adController}:636`,
|
url: `ldaps://${this.adController}:636`,
|
||||||
tlsOptions: {rejectUnauthorized: this.verifyCert}
|
tlsOptions: {rejectUnauthorized: this.verifyCert}
|
||||||
});
|
});
|
||||||
|
adClient.on('error', () => {});
|
||||||
await adClient.bind(bindDn, this.adPassword);
|
await adClient.bind(bindDn, this.adPassword);
|
||||||
Object.assign(this, {
|
Object.assign(this, {
|
||||||
adClient,
|
adClient,
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mixins": {
|
"mixins": {
|
||||||
"AccountSynchronizer": {}
|
"AccountLinker": {}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
|
|
|
@ -26,6 +26,14 @@
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"owner": {
|
||||||
|
"type": "boolean",
|
||||||
|
"required": true,
|
||||||
|
"default": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.getSynchronizer = async function() {
|
Self.getLinker = async function() {
|
||||||
return await Self.findOne({fields: ['id']});
|
return await Self.findOne({fields: ['id']});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mixins": {
|
"mixins": {
|
||||||
"AccountSynchronizer": {}
|
"AccountLinker": {}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
|
@ -16,4 +16,3 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,6 @@
|
||||||
Deactivate user
|
Deactivate user
|
||||||
</vn-item>
|
</vn-item>
|
||||||
<vn-item
|
<vn-item
|
||||||
ng-if="$ctrl.user.active"
|
|
||||||
ng-click="syncUser.show()"
|
ng-click="syncUser.show()"
|
||||||
name="synchronizeUser"
|
name="synchronizeUser"
|
||||||
vn-acl="it"
|
vn-acl="it"
|
||||||
|
@ -166,7 +165,7 @@
|
||||||
vn-id="syncUser"
|
vn-id="syncUser"
|
||||||
on-accept="$ctrl.onSync()"
|
on-accept="$ctrl.onSync()"
|
||||||
on-close="$ctrl.onSyncClose()">
|
on-close="$ctrl.onSyncClose()">
|
||||||
<tpl-title ng-translate>
|
<tpl-title translate>
|
||||||
Do you want to synchronize user?
|
Do you want to synchronize user?
|
||||||
</tpl-title>
|
</tpl-title>
|
||||||
<tpl-body>
|
<tpl-body>
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -112,7 +112,7 @@ module.exports = Self => {
|
||||||
{
|
{
|
||||||
relation: 'taxTypeSage',
|
relation: 'taxTypeSage',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['vat']
|
fields: ['vat', 'rate']
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -151,7 +151,7 @@ describe('SalesMonitor salesFilter()', () => {
|
||||||
const result = await models.SalesMonitor.salesFilter(ctx, filter, options);
|
const result = await models.SalesMonitor.salesFilter(ctx, filter, options);
|
||||||
const firstRow = result[0];
|
const firstRow = result[0];
|
||||||
|
|
||||||
expect(result.length).toEqual(15);
|
expect(result.length).toEqual(12);
|
||||||
expect(firstRow.alertLevel).not.toEqual(0);
|
expect(firstRow.alertLevel).not.toEqual(0);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
|
|
|
@ -139,6 +139,8 @@ module.exports = Self => {
|
||||||
filter = mergeFilters(filter, {where});
|
filter = mergeFilters(filter, {where});
|
||||||
const stmts = [];
|
const stmts = [];
|
||||||
let stmt;
|
let stmt;
|
||||||
|
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
|
||||||
|
stmts.push(`SET SESSION optimizer_search_depth = 0`);
|
||||||
|
|
||||||
stmt = new ParameterizedSQL(`
|
stmt = new ParameterizedSQL(`
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
||||||
|
@ -195,6 +197,7 @@ module.exports = Self => {
|
||||||
stmt.merge(`GROUP BY id`);
|
stmt.merge(`GROUP BY id`);
|
||||||
stmt.merge(conn.makePagination(filter));
|
stmt.merge(conn.makePagination(filter));
|
||||||
stmts.push(stmt);
|
stmts.push(stmt);
|
||||||
|
stmts.push(`SET SESSION optimizer_search_depth = @_optimizer_search_depth`);
|
||||||
|
|
||||||
stmt = new ParameterizedSQL(`SELECT * FROM tmp.filter`);
|
stmt = new ParameterizedSQL(`SELECT * FROM tmp.filter`);
|
||||||
stmt.merge(conn.makeOrderBy(filter.order));
|
stmt.merge(conn.makeOrderBy(filter.order));
|
||||||
|
|
|
@ -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')
|
|
||||||
Object.assign(myOptions, options);
|
|
||||||
|
|
||||||
if (!myOptions.transaction) {
|
|
||||||
tx = await Self.beginTransaction({});
|
|
||||||
myOptions.transaction = tx;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const promises = [];
|
|
||||||
for (let expeditionId of expeditionIds) {
|
for (let expeditionId of expeditionIds) {
|
||||||
const deletedExpedition = models.Expedition.destroyById(expeditionId, myOptions);
|
const filter = {
|
||||||
promises.push(deletedExpedition);
|
fields: [],
|
||||||
|
where: {
|
||||||
|
id: expeditionId
|
||||||
|
},
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
relation: 'agencyMode',
|
||||||
|
scope: {
|
||||||
|
fields: ['code'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const expedition = await models.Expedition.findOne(filter);
|
||||||
|
const {code} = expedition.agencyMode();
|
||||||
|
|
||||||
|
if (code && code.toLowerCase().substring(0, 10) == 'viaexpress') {
|
||||||
|
const isDeleted = await models.ViaexpressConfig.deleteExpedition(expeditionId);
|
||||||
|
|
||||||
|
if (isDeleted === 'true') {
|
||||||
|
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 (notDeletedExpeditions.length) {
|
||||||
|
throw new UserError(
|
||||||
if (tx) await tx.commit();
|
$t(`It was not able to remove the next expeditions:`, {expeditions: notDeletedExpeditions.join()})
|
||||||
|
);
|
||||||
|
}
|
||||||
return deletedExpeditions;
|
return deletedExpeditions;
|
||||||
} catch (e) {
|
|
||||||
if (tx) await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ describe('ticket filter()', () => {
|
||||||
const filter = {};
|
const filter = {};
|
||||||
const result = await models.Ticket.filter(ctx, filter, options);
|
const result = await models.Ticket.filter(ctx, filter, options);
|
||||||
|
|
||||||
expect(result.length).toEqual(9);
|
expect(result.length).toEqual(6);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ describe('ticket getSalesPersonMana()', () => {
|
||||||
|
|
||||||
const mana = await models.Ticket.getSalesPersonMana(1, options);
|
const mana = await models.Ticket.getSalesPersonMana(1, options);
|
||||||
|
|
||||||
expect(mana).toEqual(73);
|
expect(mana).toEqual(124);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue