feat: refs #8167 update canBeInvoiced method to include active status check and improve test cases #3323

Merged
jgallego merged 4 commits from 8167-incoiceOutCheckIsActive into dev 2024-12-30 13:37:31 +00:00
2 changed files with 30 additions and 46 deletions
Showing only changes of commit 9ae27e104e - Show all commits

View File

@ -2,7 +2,7 @@ const UserError = require('vn-loopback/util/user-error');
module.exports = function(Self) {
Self.remoteMethod('canBeInvoiced', {
description: 'Change property isEqualizated in all client addresses',
description: 'Check if a client can be invoiced',
accessType: 'READ',
accepts: [
{
@ -38,7 +38,7 @@ module.exports = function(Self) {
Object.assign(myOptions, options);
const client = await models.Client.findById(id, {
fields: ['id', 'isTaxDataChecked', 'hasToInvoice', 'payMethodFk'],
fields: ['id', 'isTaxDataChecked', 'hasToInvoice', 'payMethodFk', 'isActive'],
include:
{
relation: 'payMethod',
@ -53,9 +53,6 @@ module.exports = function(Self) {
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;
return false;
return client.isTaxDataChecked && client.hasToInvoice && client.isActive;
};
};

View File

@ -8,6 +8,8 @@ describe('client canBeInvoiced()', () => {
const activeCtx = {
accessToken: {userId: userId}
};
let tx;
let options;
beforeAll(async() => {
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
@ -15,60 +17,45 @@ describe('client canBeInvoiced()', () => {
});
});
beforeEach(async() => {
tx = await models.Client.beginTransaction({});
options = {transaction: tx};
});
afterEach(async() => {
await tx.rollback();
});
it('should return falsy for a client without the data checked', async() => {
const tx = await models.Client.beginTransaction({});
try {
const options = {transaction: tx};
const client = await models.Client.findById(clientId, null, options);
await client.updateAttribute('isTaxDataChecked', false, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(false);
});
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
it('should return falsy for a client not active', async() => {
const client = await models.Client.findById(clientId, null, options);
await client.updateAttribute('isActive', false, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(false);
});
it('should return falsy for a client with invoicing disabled', async() => {
const tx = await models.Client.beginTransaction({});
try {
const options = {transaction: tx};
const client = await models.Client.findById(clientId, null, options);
await client.updateAttribute('hasToInvoice', false, options);
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(false);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should return truthy for an invoiceable client', async() => {
const tx = await models.Client.beginTransaction({});
try {
const options = {transaction: tx};
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
expect(canBeInvoiced).toEqual(true);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});