158 lines
4.4 KiB
TypeScript
158 lines
4.4 KiB
TypeScript
// vim: set tw=80 ts=2 sw=2 sts=2 :
|
|
|
|
import { Location } from '@angular/common';
|
|
import { Component, ViewChild } from '@angular/core';
|
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
|
|
import { Logger } from '@nsalaun/ng-logger';
|
|
import { ToastrService } from 'ngx-toastr';
|
|
|
|
import { Operation } from './operation';
|
|
import { OperationService } from './operation.service';
|
|
import { OperationFormComponent } from './operationForm.component';
|
|
|
|
@Component({
|
|
selector: 'operation-new',
|
|
template: `
|
|
<div>
|
|
<div class="row">
|
|
<form novalidate (keyup.enter)="submit()" #form="ngForm">
|
|
<div class="form-group">
|
|
<label for="operation-date">Date</label>
|
|
|
|
<input class="form-control"
|
|
[class.has-danger]="operationDate.errors"
|
|
id="operation-date" name="operationDate"
|
|
[(ngModel)]="operation.operation_date" #operationDate="ngModel"
|
|
[textMask]="{mask: dateMask}"
|
|
placeholder="Operation date" required>
|
|
|
|
<div class="help-block text-danger" *ngIf="operationDate.errors">
|
|
<small class="form-text" *ngIf="operationDate.errors.required">
|
|
The operation date is required.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="label">Label</label>
|
|
|
|
<input class="form-control"
|
|
[class.has-danger]="label.errors"
|
|
id="label" name="label"
|
|
[(ngModel)]="operation.label" #label="ngModel"
|
|
placeholder="Label" required>
|
|
|
|
<div class="help-block text-danger" *ngIf="label.errors">
|
|
<small class="form-text" *ngIf="label.errors.required">
|
|
The operation label is required.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="value">Montant</label>
|
|
|
|
<input class="form-control"
|
|
[class.has-errors]="value.errors"
|
|
id="value" name="value"
|
|
[(ngModel)]="operation.value" #value="ngModel"
|
|
type="number" placeholder="Value" required>
|
|
|
|
<div class="help-block text-danger" *ngIf="value.errors">
|
|
<small class="form-text" *ngIf="value.errors.required">
|
|
The operation value is required.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="category">Catégorie</label>
|
|
|
|
<input class="form-control"
|
|
[class.has-errors]="category.errors"
|
|
id="category" name="category"
|
|
[(ngModel)]="operation.category" #category="ngModel"
|
|
placeholder="Category" required>
|
|
|
|
<div class="help-block text-danger" *ngIf="category.errors">
|
|
<small class="form-text" *ngIf="category.errors.required">
|
|
The operation category is required.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<button class="btn btn-primary" [disabled]="!form.valid" (click)="submit()">
|
|
Save
|
|
</button>
|
|
|
|
<button class="btn btn-default" (click)="cancel()">
|
|
Cancel
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
`
|
|
})
|
|
export class OperationEditComponent {
|
|
public operation = new Operation();
|
|
|
|
//dateMask = [/\d{4}/, '-', /0[1-9]|1[0-2]/, '-', /[0-2]\d|3[0-1]/];
|
|
dateMask = ['2', '0', /\d/, /\d/, '-', /[0-1]/, /\d/, '-', /[0-3]/, /\d/];
|
|
|
|
constructor(
|
|
private location: Location,
|
|
private router: Router,
|
|
private activatedRoute: ActivatedRoute,
|
|
private logger: Logger,
|
|
private toastrService: ToastrService,
|
|
private operationService: OperationService
|
|
) {}
|
|
|
|
ngOnInit() {
|
|
let operationId = this.activatedRoute.snapshot.paramMap.get('operationId');
|
|
|
|
if (operationId) {
|
|
// Load Operation
|
|
this.operationService.get(
|
|
+operationId
|
|
).subscribe((operation: Operation) => {
|
|
this.operation = operation;
|
|
|
|
this.logger.info(operation);
|
|
});
|
|
} else {
|
|
let accountId = this.activatedRoute.snapshot.paramMap.get('accountId');
|
|
|
|
this.operation.account_id = +accountId;
|
|
}
|
|
}
|
|
|
|
submit(): void {
|
|
this.save(this.operation);
|
|
}
|
|
|
|
/*
|
|
* Save an operation and return a promise.
|
|
*/
|
|
save(operation) {
|
|
operation.confirmed = true;
|
|
|
|
return this.operationService.create(operation).subscribe(
|
|
(operation) => {
|
|
this.toastrService.success('Operation #' + operation.id + ' saved.');
|
|
|
|
this.location.back();
|
|
}, (result) => {
|
|
this.toastrService.error(
|
|
'Error while saving operation: ' + result.message
|
|
);
|
|
}
|
|
);
|
|
}
|
|
|
|
cancel(): void {
|
|
this.location.back();
|
|
}
|
|
}
|