Add new bank entity #736
This commit is contained in:
parent
cfc7f1ee83
commit
d681d61c83
|
@ -40,7 +40,7 @@
|
|||
<vn-td number>{{::zone.price | currency:'€':2}}</vn-td>
|
||||
<vn-td>
|
||||
<vn-icon-button
|
||||
ng-click="$ctrl.preview($event, zone)"
|
||||
ng-click="$ctrl.preview(zone)"
|
||||
vn-tooltip="Preview"
|
||||
icon="desktop_windows">
|
||||
</vn-icon-button>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<vn-td>{{::claim.claimState.description}}</vn-td>
|
||||
<vn-td>
|
||||
<vn-icon-button
|
||||
ng-click="$ctrl.preview($event, claim)"
|
||||
ng-click="$ctrl.preview(claim)"
|
||||
vn-tooltip="Preview"
|
||||
icon="desktop_windows">
|
||||
</vn-icon-button>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<vn-title>Pay method</vn-title>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete
|
||||
vn-two
|
||||
vn-one
|
||||
label="Pay method"
|
||||
vn-acl="salesAssistant"
|
||||
field="$ctrl.client.payMethodFk"
|
||||
|
@ -18,7 +18,21 @@
|
|||
select-fields="ibanRequired"
|
||||
initial-data="$ctrl.client.payMethod">
|
||||
</vn-autocomplete>
|
||||
<vn-autocomplete vn-two
|
||||
<vn-textfield
|
||||
vn-one
|
||||
label="Due day"
|
||||
field="$ctrl.client.dueDay"
|
||||
vn-acl="salesAssistant">
|
||||
</vn-textfield>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-textfield
|
||||
vn-one
|
||||
label="IBAN"
|
||||
field="$ctrl.client.iban"
|
||||
vn-acl="salesAssistant">
|
||||
</vn-textfield>
|
||||
<vn-autocomplete vn-one
|
||||
label="Swift / BIC"
|
||||
url="/client/api/BankEntities"
|
||||
field="$ctrl.client.bankEntityFk"
|
||||
|
@ -37,20 +51,12 @@
|
|||
</vn-horizontal>
|
||||
</tpl-item>
|
||||
</vn-autocomplete>
|
||||
<vn-textfield
|
||||
vn-one
|
||||
label="Due day"
|
||||
field="$ctrl.client.dueDay"
|
||||
<vn-icon-button vn-auto margin-medium-v
|
||||
icon="add_circle"
|
||||
vn-tooltip="New bank entity"
|
||||
vn-dialog="bankEntityDialog"
|
||||
vn-acl="salesAssistant">
|
||||
</vn-textfield>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-textfield
|
||||
vn-one
|
||||
label="IBAN"
|
||||
field="$ctrl.client.iban"
|
||||
vn-acl="salesAssistant">
|
||||
</vn-textfield>
|
||||
</vn-icon-button>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal pad-small-v>
|
||||
<vn-one>
|
||||
|
@ -80,3 +86,38 @@
|
|||
<vn-submit label="Save" vn-acl="salesAssistant"></vn-submit>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
||||
<!-- Create bank entity dialog -->
|
||||
<vn-dialog class="edit"
|
||||
vn-id="bankEntityDialog"
|
||||
on-open="$ctrl.onBankEntityOpen()"
|
||||
on-response="$ctrl.onBankEntityResponse(response)">
|
||||
<tpl-body>
|
||||
<h5 pad-small-v translate>New bank entity</h5>
|
||||
<vn-horizontal>
|
||||
<vn-textfield vn-one
|
||||
label="Name"
|
||||
model="$ctrl.newBankEntity.name">
|
||||
</vn-textfield>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete vn-one
|
||||
label="Country"
|
||||
field="$ctrl.newBankEntity.countryFk"
|
||||
url="/client/api/Countries"
|
||||
value-field="id"
|
||||
show-field="country">
|
||||
</vn-autocomplete>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-textfield vn-one
|
||||
label="Swift / BIC"
|
||||
model="$ctrl.newBankEntity.bic">
|
||||
</vn-textfield>
|
||||
</vn-horizontal>
|
||||
</tpl-body>
|
||||
<tpl-buttons>
|
||||
<input type="button" response="CANCEL" translate-attr="{value: 'Cancel'}"/>
|
||||
<button response="ACCEPT" translate>Create</button>
|
||||
</tpl-buttons>
|
||||
</vn-dialog>
|
|
@ -5,7 +5,21 @@ export default class Controller {
|
|||
this.$scope = $scope;
|
||||
this.$http = $http;
|
||||
this.vnApp = vnApp;
|
||||
this.translate = $translate;
|
||||
this.$translate = $translate;
|
||||
}
|
||||
|
||||
get client() {
|
||||
return this._client;
|
||||
}
|
||||
|
||||
set client(value) {
|
||||
this._client = value;
|
||||
|
||||
if (!value) return;
|
||||
|
||||
this.newBankEntity = {
|
||||
countryFk: Number.parseInt(value.countryFk)
|
||||
};
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
|
@ -22,7 +36,7 @@ export default class Controller {
|
|||
|
||||
notifyChanges() {
|
||||
this.$http.get(`/mailer/notification/payment-update/${this.client.id}`).then(
|
||||
() => this.vnApp.showMessage(this.translate.instant('Notification sent!'))
|
||||
() => this.vnApp.showMessage(this.$translate.instant('Notification sent!'))
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -35,6 +49,32 @@ export default class Controller {
|
|||
|
||||
return payMethod || iban || dueDay;
|
||||
}
|
||||
|
||||
onBankEntityOpen() {
|
||||
this.newBankEntity.name = '';
|
||||
this.newBankEntity.bic = '';
|
||||
this.$scope.$apply();
|
||||
}
|
||||
|
||||
onBankEntityResponse(response) {
|
||||
if (response == 'ACCEPT')
|
||||
try {
|
||||
if (!this.newBankEntity.name)
|
||||
throw new Error(`Name can't be empty`);
|
||||
if (!this.newBankEntity.bic)
|
||||
throw new Error(`Swift / BIC can't be empty`);
|
||||
|
||||
this.$http.post(`/client/api/BankEntities`, this.newBankEntity).then(response => {
|
||||
if (response.data)
|
||||
this.client.bankEntityFk = response.data.id;
|
||||
});
|
||||
} catch (e) {
|
||||
this.vnApp.showError(this.$translate.instant(e.message));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Controller.$inject = ['$scope', '$http', 'vnApp', '$translate'];
|
||||
|
||||
|
|
|
@ -7,17 +7,20 @@ describe('Client', () => {
|
|||
let $httpBackend;
|
||||
let $scope;
|
||||
let controller;
|
||||
let vnApp;
|
||||
|
||||
beforeEach(() => {
|
||||
angular.mock.module('client');
|
||||
});
|
||||
|
||||
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_) => {
|
||||
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_, _vnApp_) => {
|
||||
$componentController = _$componentController_;
|
||||
$httpBackend = _$httpBackend_;
|
||||
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
|
||||
$scope = $rootScope.$new();
|
||||
$scope.watcher = watcher;
|
||||
vnApp = _vnApp_;
|
||||
spyOn(vnApp, 'showError');
|
||||
controller = $componentController('vnClientBillingData', {$scope: $scope});
|
||||
controller.client = {id: 101, name: 'Client name', payMethodFk: 4};
|
||||
$scope.watcher.orgData = {id: 101, name: 'Client name', payMethodFk: 4};
|
||||
|
@ -55,5 +58,53 @@ describe('Client', () => {
|
|||
expect(controller.hasPaymethodChanges()).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('onBankEntityOpen()', () => {
|
||||
it('should set reset the new bank entity properties', () => {
|
||||
controller.newBankEntity.name = 'My new bank entity';
|
||||
controller.newBankEntity.bic = 'ES123';
|
||||
controller.onBankEntityOpen();
|
||||
|
||||
expect(controller.newBankEntity.name).toBe('');
|
||||
expect(controller.newBankEntity.bic).toBe('');
|
||||
});
|
||||
});
|
||||
|
||||
describe('onBankEntityResponse()', () => {
|
||||
it(`should throw an error if name property is empty`, () => {
|
||||
controller.newBankEntity = {
|
||||
name: '',
|
||||
bic: 'ES123',
|
||||
countryFk: 1
|
||||
};
|
||||
controller.onBankEntityResponse('ACCEPT');
|
||||
|
||||
expect(vnApp.showError).toHaveBeenCalledWith(`Name can't be empty`);
|
||||
});
|
||||
|
||||
it(`should throw an error if bic property is empty`, () => {
|
||||
controller.newBankEntity = {
|
||||
name: 'My new bank entity',
|
||||
bic: '',
|
||||
countryFk: 1
|
||||
};
|
||||
controller.onBankEntityResponse('ACCEPT');
|
||||
|
||||
expect(vnApp.showError).toHaveBeenCalledWith(`Swift / BIC can't be empty`);
|
||||
});
|
||||
|
||||
it('should request to create a new bank entity', () => {
|
||||
let newBankEntity = {
|
||||
name: 'My new bank entity',
|
||||
bic: 'ES123',
|
||||
countryFk: 1
|
||||
};
|
||||
controller.newBankEntity = newBankEntity;
|
||||
$httpBackend.when('POST', '/client/api/BankEntities').respond('done');
|
||||
$httpBackend.expectPOST('/client/api/BankEntities', newBankEntity);
|
||||
controller.onBankEntityResponse('ACCEPT');
|
||||
$httpBackend.flush();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -13,3 +13,6 @@ Received LCR: Recibido LCR
|
|||
Received core VNL: Recibido core VNL
|
||||
Received B2B VNL: Recibido B2B VNL
|
||||
Save: Guardar
|
||||
New bank entity: Nueva entidad bancaria
|
||||
Name can't be empty: El nombre no puede quedar vacío
|
||||
Swift / BIC can't be empty: El Swift / BIC no puede quedar vacío
|
|
@ -29,7 +29,7 @@
|
|||
vn-acl-action="remove"
|
||||
vn-tooltip="Finish that recovery period"
|
||||
ng-if="!recovery.finished"
|
||||
on-click="$ctrl.setFinished(recovery)">
|
||||
ng-click="$ctrl.setFinished(recovery)">
|
||||
</vn-icon-button>
|
||||
</vn-td>
|
||||
<vn-td>{{::recovery.started | date:'dd/MM/yyyy' }}</vn-td>
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import ngModule from '../module';
|
||||
|
||||
export default class Controller {
|
||||
constructor($scope, $http, vnApp) {
|
||||
constructor($scope, $http, vnApp, $translate) {
|
||||
this.$ = $scope;
|
||||
this.$http = $http;
|
||||
this.vnApp = vnApp;
|
||||
this.$translate = $translate;
|
||||
this.canChangePassword = false;
|
||||
this.canEnableCheckBox = true;
|
||||
}
|
||||
|
@ -52,14 +53,14 @@ export default class Controller {
|
|||
|
||||
this.$http.patch(`/client/api/Accounts/${this.client.id}`, account);
|
||||
} catch (e) {
|
||||
this.vnApp.showError(e.message);
|
||||
this.vnApp.showError(this.$translate.instant(e.message));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Controller.$inject = ['$scope', '$http', 'vnApp'];
|
||||
Controller.$inject = ['$scope', '$http', 'vnApp', '$translate'];
|
||||
|
||||
ngModule.component('vnClientWebAccess', {
|
||||
template: require('./index.html'),
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
vn-acl="administrative"
|
||||
vn-tooltip="Confirm transaction"
|
||||
ng-show="::!transaction.isConfirmed"
|
||||
on-click="$ctrl.confirm(transaction)">
|
||||
ng-click="$ctrl.confirm(transaction)">
|
||||
</vn-icon-button>
|
||||
</vn-td>
|
||||
<vn-td>{{::transaction.id}}</vn-td>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<button ng-click="$ctrl.onClick()">
|
||||
<button type="button" ng-disabled="{{$ctrl.disabled}}">
|
||||
<vn-icon icon="{{::$ctrl.icon}}">
|
||||
</button>
|
|
@ -5,7 +5,13 @@ export default class IconButton {
|
|||
constructor($element) {
|
||||
if ($element[0].getAttribute('tabindex') == null)
|
||||
$element[0].tabIndex = 0;
|
||||
|
||||
$element.on("keyup", event => this.onKeyDown(event, $element));
|
||||
let button = $element[0].querySelector('button');
|
||||
$element[0].addEventListener('click', event => {
|
||||
if (this.disabled || button.disabled)
|
||||
event.stopImmediatePropagation();
|
||||
});
|
||||
}
|
||||
|
||||
onKeyDown(event, $element) {
|
||||
|
@ -23,8 +29,6 @@ ngModule.component('vnIconButton', {
|
|||
template: require('./icon-button.html'),
|
||||
bindings: {
|
||||
icon: '@',
|
||||
onClick: '&?',
|
||||
enabled: '<?'
|
||||
disabled: '<?'
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -1,8 +1 @@
|
|||
<div id="shapes"></div>
|
||||
|
||||
|
||||
<!-- <div ng-click="$ctrl.onSnackbarClick($event)">
|
||||
<button ng-click="$ctrl.onButtonClick()"></button>
|
||||
<div class="text"></div>
|
||||
</div>
|
||||
-->
|
|
@ -56,16 +56,14 @@
|
|||
show-field="name"
|
||||
value-field="name">
|
||||
</vn-autocomplete>
|
||||
<vn-none>
|
||||
<vn-icon-button
|
||||
medium-grey
|
||||
margin-medium-v
|
||||
vn-tooltip="Remove tag"
|
||||
icon="remove_circle_outline"
|
||||
ng-click="filter.tags.splice($index, 1)"
|
||||
tabindex="-1">
|
||||
</vn-icon-button>
|
||||
</vn-none>
|
||||
<vn-icon-button vn-none
|
||||
medium-grey
|
||||
margin-medium-v
|
||||
vn-tooltip="Remove tag"
|
||||
icon="remove_circle_outline"
|
||||
ng-click="filter.tags.splice($index, 1)"
|
||||
tabindex="-1">
|
||||
</vn-icon-button>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-icon-button
|
||||
|
|
|
@ -48,9 +48,7 @@ export default class Controller {
|
|||
this.$scope.popover.relocate();
|
||||
}
|
||||
|
||||
preview(event, order) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
preview(order) {
|
||||
this.$scope.orderSummaryDialog.show();
|
||||
this.order = order;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue