Change dueDay to 5 only with paymethod with iban #341

This commit is contained in:
Joan Sanchez 2018-07-10 14:13:47 +02:00
parent 841a72a269
commit 2d020268fe
5 changed files with 62 additions and 66 deletions

View File

@ -16,53 +16,48 @@ describe('Client', () => {
$httpBackend = _$httpBackend_;
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$scope = $rootScope.$new();
let submit = jasmine.createSpy('submit').and.returnValue(Promise.resolve());
$scope.watcher = {submit};
$scope.watcher = {
submit: () => {
return {
then: callback => {
callback();
}
};
}
};
$httpBackend.get = jasmine.createSpy('get').and.returnValue(Promise.resolve());
controller = $componentController('vnClientBillingData', {$scope: $scope}, {$http: $httpBackend});
controller.client = {id: 101, name: 'Client name', payMethodFk: 4};
}));
describe('copyData()', () => {
it(`should define billData using client's data`, () => {
controller.client = {
dueDay: 0,
iban: null,
payMethodFk: 1
};
controller.billData = {};
controller.copyData(controller.client);
expect(controller.billData).toEqual(controller.client);
describe('client()', () => {
it(`should call setter client`, () => {
expect(controller.orgData).toEqual(controller.client);
});
});
describe('submit()', () => {
it(`should call submit() on the watcher then receive a callback`, done => {
spyOn(controller, 'checkPaymentChanges');
controller.submit()
.then(() => {
expect(controller.$.watcher.submit).toHaveBeenCalledWith();
expect(controller.checkPaymentChanges).toHaveBeenCalledWith();
done();
describe('hasPaymethodChanged()', () => {
it(`should call hasPaymethodChanged() and return true if there are changes on payMethod data`, () => {
controller.client.payMethodFk = 5;
expect(controller.hasPaymethodChanged()).toBeTruthy();
});
it(`should call hasPaymethodChanged() and return false if there are no changes on payMethod data`, () => {
controller.client.payMethodFk = 4;
expect(controller.hasPaymethodChanged()).toBeFalsy();
});
});
describe('checkPaymentChanges()', () => {
it(`should not call sendMail.show() if there are no changes on billing data`, () => {
controller.billData = {marvelHero: 'Silver Surfer'};
controller.client = {marvelHero: 'Silver Surfer'};
controller.checkPaymentChanges();
describe('onSubmit()', () => {
it(`should call notifyChanges() if there are changes on payMethod data`, () => {
spyOn(controller, 'notifyChanges');
controller.client.payMethodFk = 5;
controller.onSubmit();
expect(controller.$http.get).not.toHaveBeenCalled();
});
it(`should call sendMail.show() if there are changes on billing data object`, () => {
controller.billData = {id: '123', marvelHero: 'Silver Surfer'};
controller.client = {id: '123', marvelHero: 'Spider-Man'};
controller.checkPaymentChanges();
expect(controller.$http.get).toHaveBeenCalled();
expect(controller.hasPaymethodChanged()).toBeTruthy();
expect(controller.notifyChanges).toHaveBeenCalledWith();
});
});
});

View File

@ -5,7 +5,7 @@
form="form"
save="patch">
</vn-watcher>
<form name="form" ng-submit="$ctrl.submit()">
<form name="form" ng-submit="$ctrl.onSubmit()">
<vn-card pad-large>
<vn-title>Pay method</vn-title>
<vn-horizontal>

View File

@ -2,47 +2,42 @@ import ngModule from '../module';
export default class Controller {
constructor($scope, $http, vnApp, $translate) {
this.$ = $scope;
this.$scope = $scope;
this.$http = $http;
this.vnApp = vnApp;
this.translate = $translate;
this.billData = {};
this.copyData();
}
$onChanges() {
this.copyData();
set client(value) {
this._client = value;
if (value)
this.orgData = Object.assign({}, value);
}
copyData() {
if (this.client) {
this.billData.payMethodFk = this.client.payMethodFk;
this.billData.iban = this.client.iban;
this.billData.dueDay = this.client.dueDay;
}
get client() {
return this._client;
}
submit() {
return this.$.watcher.submit().then(
() => this.checkPaymentChanges());
onSubmit() {
this.$scope.watcher.submit().then(() => {
if (this.hasPaymethodChanged())
this.notifyChanges();
});
}
checkPaymentChanges() {
let equals = true;
Object.keys(this.billData).forEach(
val => {
if (this.billData[val] !== this.client[val]) {
this.billData[val] = this.client[val];
equals = false;
}
}
);
if (!equals) {
notifyChanges() {
this.$http.get(`/mailer/notification/payment-update/${this.client.id}`).then(
() => this.vnApp.showMessage(this.translate.instant('Notification sent!'))
);
}
hasPaymethodChanged() {
let payMethod = this.orgData.payMethodFk != this.client.payMethodFk;
let iban = this.orgData.iban != this.client.iban;
let dueDay = this.orgData.dueDay != this.client.dueDay;
return payMethod || iban || dueDay;
}
}
Controller.$inject = ['$scope', '$http', 'vnApp', '$translate'];

View File

@ -14,6 +14,7 @@ describe('Ticket', () => {
beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_) => {
$componentController = _$componentController_;
$httpBackend = _$httpBackend_;
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
$scope = $rootScope.$new();
controller = $componentController('vnTicketCreateCard', {$scope: $scope});
controller.item = {id: 3};

View File

@ -89,7 +89,9 @@ module.exports = Self => {
Self.observe('before save', async function(ctx) {
let changes = ctx.data || ctx.instance;
let orgData = ctx.currentInstance;
let finalState = getFinalState(ctx);
let payMethodWithIban = 4;
if (changes.salesPerson === null) {
changes.credit = 0;
@ -97,7 +99,10 @@ module.exports = Self => {
changes.payMethodFk = 5; // Credit card
}
if (changes.payMethodFk !== undefined && changes.dueDay === undefined)
let payMethodFk = changes.payMethodFk || (orgData && orgData.payMethodFk);
let dueDay = changes.dueDay || (orgData && orgData.dueDay);
if (payMethodFk == payMethodWithIban && dueDay == 0)
changes.dueDay = 5;
if (isMultiple(ctx)) return;