Credit classification fixes #189

This commit is contained in:
joan 2018-03-28 15:07:48 +02:00
parent 1dc9345bec
commit ffde937022
13 changed files with 157 additions and 42 deletions

View File

@ -1,20 +1,28 @@
<mg-ajax path="/client/api/clients/{{post.params.id}}/creditClassifications" options="vnPost"></mg-ajax> <form name="form" ng-submit="$ctrl.submit()">
<vn-watcher
vn-id="watcher"
data="$ctrl.creditClassification"
form="form"
save="post">
</vn-watcher>
<form name="form" ng-submit="watcher.submitGo('clientCard.creditClassification.list')">
<vn-card pad-large> <vn-card pad-large>
<vn-title>New contract</vn-title> <vn-title>New contract</vn-title>
<vn-horizontal> <vn-horizontal>
<vn-textfield
vn-one
margin-medium-right
label="Credit"
model="$ctrl.creditClassification.credit",
rule="CreditInsurance.credit"
step="1"
vn-focus>
</vn-textfield>
<vn-textfield
vn-one
argin-medium-right
label="Grade"
model="$ctrl.creditClassification.grade"
rule="CreditInsurance.grade">
</vn-textfield>
<vn-date-picker <vn-date-picker
vn-one vn-one
label="Since" label="Since"
model="$ctrl.creditClassification.started" model="$ctrl.creditClassification.started"
ini-options="{dateFormat: 'd-m-Y'}" ini-options="{dateFormat: 'd-m-Y'}">
vn-focus>
</vn-date-picker> </vn-date-picker>
</vn-horizontal> </vn-horizontal>
</vn-card> </vn-card>

View File

@ -1,15 +1,33 @@
import ngModule from '../module'; import ngModule from '../module';
class Controller { class Controller {
constructor($filter, $state) { constructor($http, $filter, $state, $scope, $translate, vnApp) {
this.$http = $http;
this.$state = $state;
this.$scope = $scope;
this.$translate = $translate;
this.vnApp = vnApp;
this.creditClassification = { this.creditClassification = {
started: $filter('date')(new Date(), 'yyyy-MM-dd HH:mm') started: $filter('date')(new Date(), 'yyyy-MM-dd HH:mm')
}; };
this.$state = $state; }
submit() {
if (this.$scope.form.$invalid)
return this.vnApp.showMessage(this.$translate.instant('Some fields are invalid'));
let query = `/client/api/creditClassifications/createWithInsurance`;
let data = this.creditClassification;
data.clientFk = this.client.id;
this.$http.post(query, data).then((res, err) => {
if (res.data)
this.$state.go('clientCard.creditClassification.list');
});
} }
} }
Controller.$inject = ['$filter', '$state']; Controller.$inject = ['$http', '$filter', '$state', '$scope', '$translate', 'vnApp'];
ngModule.component('vnClientCreditClassificationCreate', { ngModule.component('vnClientCreditClassificationCreate', {
template: require('./credit-classification-create.html'), template: require('./credit-classification-create.html'),

View File

@ -16,16 +16,24 @@
<div><vn-label translate>To</vn-label> {{classification.finished | date:'dd/MM/yyyy'}}</div> <div><vn-label translate>To</vn-label> {{classification.finished | date:'dd/MM/yyyy'}}</div>
</vn-one> </vn-one>
<vn-vertical vn-one pad-medium-h> <vn-vertical vn-one pad-medium-h>
<vn-one ng-repeat="insurance in classification.creditInsurances track by insurance.id"> <vn-horizontal ng-repeat="insurance in classification.creditInsurances track by insurance.id">
<vn-label translate>Credit</vn-label> <span>{{insurance.credit}}</span> <vn-one>
<vn-label translate>Credit</vn-label>
<span>{{::insurance.credit}}</span>
</vn-one>
<vn-one>
<vn-label translate>Grade</vn-label> <vn-label translate>Grade</vn-label>
<span ng-if="!insurance.grade">-</span> <span ng-if="!insurance.grade">-</span>
<span ng-if="insurance.grade">{{insurance.grade}}</span> <span ng-if="insurance.grade">{{::insurance.grade}}</span>
<vn-label translate>Date</vn-label> <span>{{insurance.created | date:'dd/MM/yyyy' }}</span>
</vn-one> </vn-one>
<vn-one>
<vn-label translate>Date</vn-label>
<span>{{::insurance.created | date:'dd/MM/yyyy' }}</span>
</vn-one>
</vn-horizontal>
</vn-vertical> </vn-vertical>
<a vn-auto ui-sref="clientCard.creditInsurance.list({classificationId: {{classification.id}}})"> <a vn-auto ui-sref="clientCard.creditInsurance.list({classificationId: {{classification.id}}})">
<vn-icon-button icon="edit" vn-tooltip="Edit contract" tooltip-position="left"></vn-icon-button> <vn-icon-button icon="desktop_windows" vn-tooltip="List classifications" tooltip-position="left"></vn-icon-button>
</a> </a>
</vn-horizontal> </vn-horizontal>
</vn-one> </vn-one>
@ -41,3 +49,9 @@
label="Add"> label="Add">
</vn-float-button> </vn-float-button>
</vn-vertical> </vn-vertical>
<vn-confirm
vn-id="close-contract"
on-response="$ctrl.returnDialog(response)"
question="Close contract"
message="Are you sure you want to close this contract?">
</vn-confirm>

View File

@ -14,6 +14,7 @@ class Controller {
_getClassifications(clientId) { _getClassifications(clientId) {
let filter = { let filter = {
order: 'finished ASC, started DESC',
include: [ include: [
{ {
relation: 'creditInsurances', relation: 'creditInsurances',
@ -50,8 +51,16 @@ class Controller {
} }
closeContract(classification) { closeContract(classification) {
this.classificationId = classification.id;
this.$scope.closeContract.show();
}
returnDialog(response) {
if (response === 'CANCEL')
return;
let params = {finished: Date.now()}; let params = {finished: Date.now()};
this.$http.patch(`/client/api/CreditClassifications/${classification.id}`, params).then(() => { this.$http.patch(`/client/api/CreditClassifications/${this.classificationId}`, params).then(() => {
this._getClassifications(this.client.id); this._getClassifications(this.client.id);
}); });
} }

View File

@ -2,3 +2,5 @@ Contract credit insurance: Contratos de seguro de crédito
New contract: Nuevo contrato New contract: Nuevo contrato
Close contract: Cerrar contrato Close contract: Cerrar contrato
Edit contract: Modificar contrato Edit contract: Modificar contrato
List classifications: Ver clasificaciones
Are you sure you want to close this contract?: ¿Seguro que quieres cerrar este contrato?

View File

@ -8,7 +8,7 @@
<form name="form" <form name="form"
ng-submit="watcher.submitGo('clientCard.creditInsurance.list', {classificationId: post.params.classificationId})"> ng-submit="watcher.submitGo('clientCard.creditInsurance.list', {classificationId: post.params.classificationId})">
<vn-card pad-large> <vn-card pad-large>
<vn-title>New credit</vn-title> <vn-title>New classification</vn-title>
<vn-horizontal> <vn-horizontal>
<vn-textfield <vn-textfield
vn-one vn-one

View File

@ -1 +1 @@
New credit: Añadir crédito New classification: Nueva clasificación

View File

@ -1,28 +1,29 @@
<mg-ajax path="/client/api/CreditClassifications/{{index.params.classificationId}}/creditInsurances" options="vnIndex"></mg-ajax> <mg-ajax path="/client/api/CreditInsurances/filter" options="vnIndexNonAuto"></mg-ajax>
<vn-vertical> <vn-vertical>
<vn-card pad-large> <vn-card pad-large>
<vn-vertical> <vn-vertical>
<vn-title>Requested credits</vn-title> <vn-title>Requested credits</vn-title>
<vn-grid-header> <vn-grid-header on-order="$ctrl.onOrder(field, order)">
<vn-column-header vn-one pad-medium-h text="Amount"></vn-column-header> <vn-column-header vn-one pad-medium-h field="credit" text="Credit"></vn-column-header>
<vn-column-header vn-one pad-medium-h text="Grade"></vn-column-header> <vn-column-header vn-one pad-medium-h field="grade" text="Grade"></vn-column-header>
<vn-column-header vn-two pad-medium-h text="Date"></vn-column-header> <vn-column-header vn-two pad-medium-h field="created" text="Created" default-order="DESC"></vn-column-header>
</vn-grid-header> </vn-grid-header>
<vn-one class="list list-content"> <vn-one class="list list-content">
<vn-horizontal <vn-horizontal
vn-one class="list list-element text-center" vn-one class="list list-element text-center"
pad-small-bottom pad-small-bottom
ng-repeat="insurance in index.model track by insurance.id"> ng-repeat="insurance in index.model.instances track by insurance.id">
<vn-one pad-medium-h>{{insurance.credit}}</vn-one> <vn-one pad-medium-h>{{::insurance.credit}}</vn-one>
<vn-one pad-medium-h>{{insurance.grade}}</vn-one> <vn-one pad-medium-h>{{::insurance.grade}}</vn-one>
<vn-two pad-medium-h>{{insurance.created | date: 'dd/MM/yyyy'}}</vn-two> <vn-two pad-medium-h>{{::insurance.created | date: 'dd/MM/yyyy'}}</vn-two>
</vn-horizontal> </vn-horizontal>
</vn-one> </vn-one>
<vn-one class="text-center pad-small-v" ng-if="index.model.count === 0" translate>No results</vn-one>
<vn-horizontal vn-one class="list list-footer"></vn-horizontal> <vn-horizontal vn-one class="list list-footer"></vn-horizontal>
</vn-vertical> </vn-vertical>
</vn-card> </vn-card>
</vn-vertical> </vn-vertical>
<a ui-sref="clientCard.creditInsurance.create({classificationId: {{index.params.classificationId}}})" <a ui-sref="clientCard.creditInsurance.create({classificationId: {{index.params.classificationId}}})"
fixed-bottom-right vn-tooltip="New credit" tooltip-position="left"> fixed-bottom-right vn-tooltip="New classification" tooltip-position="left" ng-if="!$ctrl.isClosed">
<vn-float-button icon="add"></vn-float-button> <vn-float-button icon="add"></vn-float-button>
</a> </a>

View File

@ -1,12 +1,31 @@
import ngModule from '../module'; import ngModule from '../module';
import FilterList from 'core/src/lib/filter-list';
class Controller { class Controller extends FilterList {
constructor($state) { constructor($scope, $timeout, $state, $http) {
this.classificationId = $state.params.classificationId; super($scope, $timeout, $state);
this.modelName = 'creditClassificationFk';
this.modelId = $state.params.classificationId;
this.isClosed = true;
this.$http = $http;
}
$onInit() {
let filter = {
fields: ['finished'],
where: {id: this.modelId}
};
filter = encodeURIComponent(JSON.stringify(filter));
let query = `/client/api/CreditClassifications?filter=${filter}`;
this.$http.get(query).then(res => {
if (res.data)
this.isClosed = res.data[0].finished != null;
});
} }
} }
Controller.$inject = ['$state']; Controller.$inject = ['$scope', '$timeout', '$state', '$http'];
ngModule.component('vnClientCreditInsuranceList', { ngModule.component('vnClientCreditInsuranceList', {
template: require('./credit-insurance-list.html'), template: require('./credit-insurance-list.html'),

View File

@ -1 +1,2 @@
Requested credits: Créditos solicitados Requested credits: Créditos solicitados
Created: Creado

View File

@ -0,0 +1,40 @@
module.exports = function(Self) {
Self.remoteMethod('createWithInsurance', {
description: 'Creates both classification and one insurance',
accepts: {
arg: 'data',
type: 'object',
http: {source: 'body'}
},
returns: {
root: true,
type: 'boolean'
},
http: {
verb: 'post',
path: '/createWithInsurance'
}
});
Self.createWithInsurance = async data => {
let transaction = await Self.beginTransaction({});
try {
let classificationSchema = {client: data.clientFk, started: data.started};
let newClassification = await Self.create(classificationSchema, {transaction});
let insuranceSchema = {
creditClassification: newClassification.id,
credit: data.credit,
grade: data.grade
};
Self.app.models.CreditInsurance.create(insuranceSchema, {transaction});
await transaction.commit();
return newClassification;
} catch (e) {
transaction.rollback();
throw e;
}
};
};

View File

@ -4,7 +4,7 @@ module.exports = Self => {
function filterParams(params) { function filterParams(params) {
return { return {
where: { where: {
creditClassification: params.creditClassification creditClassification: params.creditClassificationFk
}, },
skip: (params.page - 1) * params.size, skip: (params.page - 1) * params.size,
limit: params.size, limit: params.size,

View File

@ -0,0 +1,3 @@
module.exports = Self => {
require('../methods/creditClassification/createWithInsurance')(Self);
};