Compare commits

...

8 Commits

Author SHA1 Message Date
Jorge Penadés 8281dbacd1 Merge branch 'dev' into 5866-addTicketTransfer
gitea/salix/pipeline/head This commit looks good Details
2023-07-20 12:34:16 +00:00
Vicent Llopis c3a897b8c3 Merge pull request '5849-makeInvoice_solved' (!1676) from 5849-makeInvoice_solved into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #1676
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
2023-07-20 08:45:38 +00:00
Vicent Llopis 1215b8cd57 Merge branch 'dev' into 5849-makeInvoice_solved
gitea/salix/pipeline/head This commit looks good Details
2023-07-20 08:15:57 +00:00
Vicent Llopis 4755c50cd8 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 5849-makeInvoice_solved
gitea/salix/pipeline/head Build queued... Details
2023-07-20 07:22:30 +02:00
Vicent Llopis b13618529a refs #5849 delete: traducción erronea
gitea/salix/pipeline/head Build started... Details
2023-07-20 07:21:38 +02:00
Vicent Llopis d3165fcdc7 refs #5849 fix: tback
gitea/salix/pipeline/head This commit looks good Details
2023-07-18 14:25:53 +02:00
Vicent Llopis 4c7f42acb5 a
gitea/salix/pipeline/head Build queued... Details
2023-07-18 14:17:07 +02:00
Vicent Llopis 7bd378e9dd refs #
gitea/salix/pipeline/head There was a failure building this commit Details
2023-07-18 14:15:56 +02:00
7 changed files with 54 additions and 53 deletions

View File

@ -18,6 +18,9 @@
},
"expired": {
"type": "date"
},
"supplierAccountFk": {
"type": "number"
}
},
"scope": {

View File

@ -0,0 +1 @@
ALTER TABLE `vn`.`company` MODIFY COLUMN sage200Company int(2) DEFAULT 10 NOT NULL;

View File

@ -305,6 +305,7 @@
"The renew period has not been exceeded": "El periodo de renovación no ha sido superado",
"Valid priorities": "Prioridades válidas: %d",
"Negative basis of tickets": "Base negativa para los tickets: {{ticketsIds}}",
"The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias",
"You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado",
"This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado"
}

View File

@ -1,3 +1,5 @@
const UserError = require('vn-loopback/util/user-error');
module.exports = function(Self) {
Self.remoteMethodCtx('canBeInvoiced', {
description: 'Change property isEqualizated in all client addresses',
@ -9,6 +11,12 @@ module.exports = function(Self) {
required: true,
description: 'Client id',
http: {source: 'path'}
},
{
arg: 'companyFk',
description: 'The company id',
type: 'number',
required: true
}
],
returns: {
@ -22,18 +30,29 @@ module.exports = function(Self) {
}
});
Self.canBeInvoiced = async(id, options) => {
Self.canBeInvoiced = async(id, companyFk, options) => {
const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const client = await models.Client.findById(id, {
fields: ['id', 'isTaxDataChecked', 'hasToInvoice']
fields: ['id', 'isTaxDataChecked', 'hasToInvoice', 'payMethodFk'],
include:
{
relation: 'payMethod',
scope: {
fields: ['code']
}
}
}, myOptions);
const company = await models.Company.findById(companyFk, {fields: ['supplierAccountFk']}, myOptions);
if (client.payMethod().code === 'wireTransfer' && !company.supplierAccountFk)
throw new UserError('The company has not informed the supplier account for bank transfers');
if (client.isTaxDataChecked && client.hasToInvoice)
return true;

View File

@ -4,6 +4,7 @@ const LoopBackContext = require('loopback-context');
describe('client canBeInvoiced()', () => {
const userId = 19;
const clientId = 1101;
const companyId = 442;
const activeCtx = {
accessToken: {userId: userId}
};
@ -23,7 +24,7 @@ describe('client canBeInvoiced()', () => {
const client = await models.Client.findById(clientId, null, options);
await client.updateAttribute('isTaxDataChecked', false, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(false);
@ -43,7 +44,7 @@ describe('client canBeInvoiced()', () => {
const client = await models.Client.findById(clientId, null, options);
await client.updateAttribute('hasToInvoice', false, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(false);
@ -60,7 +61,7 @@ describe('client canBeInvoiced()', () => {
try {
const options = {transaction: tx};
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(true);

View File

@ -14,7 +14,7 @@ module.exports = function(Self) {
{
arg: 'companyFk',
description: 'The company id',
type: 'string',
type: 'number',
required: true
},
{
@ -67,7 +67,7 @@ module.exports = function(Self) {
const [firstTicket] = tickets;
const clientId = firstTicket.clientFk;
const clientCanBeInvoiced = await models.Client.canBeInvoiced(clientId, myOptions);
const clientCanBeInvoiced = await models.Client.canBeInvoiced(clientId, companyFk, myOptions);
if (!clientCanBeInvoiced)
throw new UserError(`This client can't be invoiced`);

View File

@ -1,31 +1,19 @@
SELECT
SELECT
io.ref,
c.socialName,
sa.iban,
pm.name AS payMethod,
t.clientFk,
t.shipped,
t.nickname,
s.ticketFk,
s.itemFk,
s.concept,
s.quantity,
s.price,
ib.ediBotanic botanical,
s.quantity,
s.price,
s.discount,
i.tag5,
i.value5,
i.tag6,
i.value6,
i.tag7,
i.value7,
tc.code AS vatType,
ib.ediBotanic botanical
s.itemFk,
s.concept,
tc.code vatType
FROM vn.invoiceOut io
JOIN vn.ticket t ON t.refFk = io.ref
JOIN vn.supplier su ON su.id = io.companyFk
JOIN vn.client c ON c.id = t.clientFk
JOIN vn.client c ON c.id = t.clientFk
JOIN vn.payMethod pm ON pm.id = c.payMethodFk
JOIN vn.company co ON co.id = io.companyFk
JOIN vn.company co ON co.id = io.companyFk
JOIN vn.supplierAccount sa ON sa.id = co.supplierAccountFk
JOIN vn.sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
@ -38,35 +26,23 @@ SELECT
AND itc.itemFk = s.itemFk
JOIN vn.taxClass tc ON tc.id = itc.taxClassFk
WHERE t.refFk = ?
UNION ALL
SELECT
UNION ALL
SELECT
io.ref,
c.socialName,
sa.iban,
pm.name AS payMethod,
t.clientFk,
t.shipped,
t.nickname,
t.id AS ticketFk,
t.id ticketFk,
NULL botanical,
ts.quantity,
ts.price,
0 discount,
'',
ts.description concept,
ts.quantity,
ts.price,
0 discount,
NULL AS tag5,
NULL AS value5,
NULL AS tag6,
NULL AS value6,
NULL AS tag7,
NULL AS value7,
tc.code AS vatType,
NULL AS botanical
ts.description concept,
tc.code vatType
FROM vn.invoiceOut io
JOIN vn.ticket t ON t.refFk = io.ref
JOIN vn.ticketService ts ON ts.ticketFk = t.id
JOIN vn.client c ON c.id = t.clientFk
JOIN vn.client c ON c.id = t.clientFk
JOIN vn.payMethod pm ON pm.id = c.payMethodFk
JOIN vn.company co ON co.id = io.companyFk
JOIN vn.company co ON co.id = io.companyFk
JOIN vn.supplierAccount sa ON sa.id = co.supplierAccountFk
JOIN vn.taxClass tc ON tc.id = ts.taxClassFk
WHERE t.refFk = ?
WHERE t.refFk = ?