Merge pull request '2873-create-supplier-beneficiary' (#593) from 2873-create-supplier-beneficiary into dev
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #593
Reviewed-by: Carlos Jimenez Ruiz <carlosjr@verdnatura.es>
This commit is contained in:
Carlos Jimenez Ruiz 2021-04-21 13:29:19 +00:00
commit 2630fa8c43
9 changed files with 107 additions and 30 deletions

View File

@ -8,7 +8,9 @@ Salix is also the scientific name of a beautifull tree! :)
Required applications.
* Node.js = 14.15.1 LTS
* Node.js = 14.x LTS
* Docker
* Git
* Docker
You will need to install globally the following items.

View File

@ -0,0 +1,2 @@
ALTER TABLE vn.`supplierAccount` ADD `beneficiary` VARCHAR(50) NULL DEFAULT NULL AFTER `bankFk`;
UPDATE vn.supplierAccount SET beneficiary = `description`;

View File

@ -0,0 +1,64 @@
const app = require('vn-loopback/server/server');
const LoopBackContext = require('loopback-context');
describe('loopback model Supplier-account', () => {
describe('create', () => {
const supplierId = 1;
const bankEntityId = 2100;
it('should throw an error when attempting to set an invalid iban account', async() => {
let error;
const expectedError = 'The IBAN does not have the correct format';
const iban = 'incorrect format';
try {
await app.models.SupplierAccount.create(
{
supplierFk: supplierId,
bankEntityFk: bankEntityId,
iban: iban
});
} catch (e) {
error = e;
expect(error.message).toContain(expectedError);
}
expect(error).toBeDefined();
});
it('should create a valid supplier account', async() => {
const tx = await app.models.Claim.beginTransaction({});
try {
const options = {transaction: tx};
const iban = 'ES91 2100 0418 4502 0005 1332';
const activeCtx = {
accessToken: {userId: 5},
http: {
req: {
headers: {origin: 'http://localhost'}
}
}
};
activeCtx.http.req.__ = value => {
return value;
};
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
active: activeCtx
});
const createdSupplierAccount = await app.models.SupplierAccount.create({
supplierFk: supplierId,
bankEntityFk: bankEntityId,
iban: iban
},
options);
expect(createdSupplierAccount.iban).toBe(iban);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});
});

View File

@ -1,6 +1,6 @@
const app = require('vn-loopback/server/server');
describe('loopback model address', () => {
describe('loopback model Supplier', () => {
let supplierOne;
let supplierTwo;

View File

@ -0,0 +1,22 @@
const validateIban = require('vn-loopback/util/validateIban');
module.exports = Self => {
Self.validateAsync('iban', ibanValidation, {
message: 'The IBAN does not have the correct format'
});
async function ibanValidation(err, done) {
let filter = {
fields: ['code'],
where: {id: this.countryFk}
};
let country = await Self.app.models.Country.findOne(filter);
let code = country ? country.code.toLowerCase() : null;
if (code != 'es')
return done();
if (!validateIban(this.iban))
err();
done();
}
};

View File

@ -7,7 +7,7 @@
},
"options": {
"mysql": {
"table": "supplierAccount"
"table": "supplierAccount"
}
},
"properties": {
@ -16,39 +16,18 @@
"id": true,
"description": "Identifier"
},
"supplierFk": {
"type": "Number"
},
"iban": {
"type": "String"
},
"office": {
"beneficiary": {
"type": "String"
},
"DC": {
"type": "String"
},
"number": {
"type": "String"
},
"description": {
"type": "String"
},
"bicSufix": {
"type": "String"
},
"bankEntityFk": {
"type": "Number"
},
"bankFk": {
"type": "Number"
}
},
"relations": {
"supplier": {
"type": "belongsTo",
"model": "Supplier",
"foreignKey": "supplierFk"
"foreignKey": "supplierFk"
},
"bankEntity": {
"type": "belongsTo",

View File

@ -1,7 +1,7 @@
<vn-crud-model
vn-id="model"
url="SupplierAccounts"
fields="['id', 'supplierFk', 'iban', 'bankEntityFk']"
fields="['id', 'supplierFk', 'iban', 'bankEntityFk', 'beneficiary']"
link="{supplierFk: $ctrl.$params.id}"
include="$ctrl.include"
data="$ctrl.supplierAccounts"
@ -12,7 +12,7 @@
data="$ctrl.supplierAccounts"
form="form">
</vn-watcher>
<form name="form" ng-submit="$ctrl.onSubmit()" class="vn-w-md">
<form name="form" ng-submit="$ctrl.onSubmit()" class="vn-w-lg">
<vn-card class="vn-pa-lg">
<vn-horizontal ng-repeat="supplierAccount in $ctrl.supplierAccounts">
<vn-textfield vn-three
@ -21,7 +21,7 @@
ng-model="supplierAccount.iban"
rule>
</vn-textfield>
<vn-autocomplete vn-two
<vn-autocomplete vn-three
label="Bank entity"
ng-model="supplierAccount.bankEntityFk"
url="BankEntities"
@ -35,6 +35,11 @@
ng-click="$ctrl.showBankEntity($event, $index)">
</vn-icon-button>
</append>
<vn-textfield vn-three
label="Beneficiary"
ng-model="supplierAccount.beneficiary"
info="Beneficiary information">
</vn-textfield>
<vn-none>
<vn-icon-button
vn-tooltip="Remove account"

View File

@ -0,0 +1 @@
Beneficiary information: Name of the bank account holder if different from the provider

View File

@ -1,3 +1,5 @@
Bank entity: Entidad bancaria
swift: Swift BIC
Add account: Añadir cuenta
Beneficiary: Beneficiario
Beneficiary information: Nombre del titular de la cuenta bancaria en caso de ser diferente del proveedor