Compare commits
8 Commits
2fa1c4b6ca
...
8281dbacd1
Author | SHA1 | Date |
---|---|---|
Jorge Penadés | 8281dbacd1 | |
Vicent Llopis | c3a897b8c3 | |
Vicent Llopis | 1215b8cd57 | |
Vicent Llopis | 4755c50cd8 | |
Vicent Llopis | b13618529a | |
Vicent Llopis | d3165fcdc7 | |
Vicent Llopis | 4c7f42acb5 | |
Vicent Llopis | 7bd378e9dd |
|
@ -18,6 +18,9 @@
|
|||
},
|
||||
"expired": {
|
||||
"type": "date"
|
||||
},
|
||||
"supplierAccountFk": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"scope": {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE `vn`.`company` MODIFY COLUMN sage200Company int(2) DEFAULT 10 NOT NULL;
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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`);
|
||||
|
||||
|
|
|
@ -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 = ?
|
||||
|
|
Loading…
Reference in New Issue