import { DocumentLinkRestService } from "isogd-document-link-rest"; import { IParcelDossierWrapper, DossierRestService, DossierLinkRestService } from "isogd-dossier-rest"; import * as _ from "lodash"; import { LinkedDocumentService } from "../../services/LinkedDocumentService"; import * as widgets from "oasi-widgets"; import { DocumentIsogd, DocumentRestService, DocumentIsogdWrapper, DocumentTerritory } from "isogd-document-rest"; import { NsiRestService } from "oasi-nsi-rest"; class SearchDossiersController { static $inject = ['linkedDocumentService', 'toastr', '$timeout', 'documentLinkRestService', 'blockUI', 'nsiRestService', '$q', 'dossierRestService', 'dossierLinkRestService', 'documentRestService']; private document: DocumentIsogd; private dossiers: IParcelDossierWrapper[]; private chapters: any[]; private onUpdate: () => void; private myBlockUI: any; private cadastral: string = ""; private result: IParcelDossierWrapper[] = []; constructor(private linkedDocumentService: LinkedDocumentService, private toastr: Toastr, private $timeout: ng.ITimeoutService, private documentLinkRestService: DocumentLinkRestService, private blockUI: any, private nsiRestService: NsiRestService, private $q: ng.IQService, private dossierRestService: DossierRestService, private dossierLinkRestService: DossierLinkRestService, private documentRestService: DocumentRestService) { } $onInit() { this.myBlockUI = this.blockUI.instances.get("searchDossiers"); } $onDestroy() { this.myBlockUI.reset(); } $onChanges(changes: any) { if (changes.dossiers && changes.dossiers.currentValue) { if (this.cadastral !== "") { this.myBlockUI.start(); this.$timeout(1500).then(response => { this.dossierRestService.findDossierByCadastralNumber(this.cadastral).then(response => { this.result = []; if (response) { this.result.push(response); } this.result.forEach(r => { (r).exist = false; this.dossiers.forEach(d => { if (r.parcelDossier.dossierId === d.parcelDossier.dossierId) { (r).exist = true; } }); }); this.result.forEach(d => { (d).documents = []; (d).loading = widgets.LoadingStatus.LOADING; this.dossierLinkRestService.getFromDossier(d.parcelDossier.dossierId).then(response => { let promises: ng.IPromise[] = []; response.forEach(r => { promises.push(this.documentRestService.getDocument(r.docId)); }); this.$q.all(promises).then(response => { (d).documents = _.map(response, d => { return d.document; }); (d).documents = _.orderBy((d).documents, function (e) { return e.documentRequisites.documentDate }, ['asc']); (d).loading = widgets.LoadingStatus.SUCCESS; }).catch(error => { (d).loading = widgets.LoadingStatus.ERROR; }); }).catch(error => { }); }); this.myBlockUI.stop(); }).catch(error => { this.myBlockUI.stop(); }); }); } else { this.result = []; } } } find() { this.myBlockUI.start(); this.$timeout(1500).then(response => { this.dossierRestService.findDossierByCadastralNumber(this.cadastral).then(response => { this.result = []; if (response) { this.result.push(response); } this.result.forEach(r => { (r).exist = false; this.dossiers.forEach(d => { if (r.parcelDossier.dossierId === d.parcelDossier.dossierId) { (r).exist = true; } }); }); this.result.forEach(d => { (d).documents = []; (d).loading = widgets.LoadingStatus.LOADING; this.dossierLinkRestService.getFromDossier(d.parcelDossier.dossierId).then(response => { let promises: ng.IPromise[] = []; response.forEach(r => { promises.push(this.documentRestService.getDocument(r.docId)); }); this.$q.all(promises).then(response => { (d).documents = _.map(response, d => { return d.document; }); (d).documents = _.orderBy((d).documents, function (e) { return e.documentRequisites.documentDate }, ['asc']); (d).loading = widgets.LoadingStatus.SUCCESS; }).catch(error => { (d).loading = widgets.LoadingStatus.ERROR; }); }).catch(error => { }); }); this.myBlockUI.stop(); }).catch(error => { this.myBlockUI.stop(); }); }); } addLink(dossier: IParcelDossierWrapper) { this.myBlockUI.start(); this.$timeout(1500).then(response => { this.dossierLinkRestService.create({ dossierId: dossier.parcelDossier.dossierId, docId: this.document.documentID }).then(response => { this.toastr.success("Связь успешно установлена!"); this.myBlockUI.stop(); this.onUpdate(); }).catch(error => { this.toastr.error("Ошибка при установлении связи!"); this.myBlockUI.stop(); }); }); } dossierToString(dossier: IParcelDossierWrapper): string { let result: string = ""; if (dossier.parcelDossier.cadastralNumber) { result += dossier.parcelDossier.cadastralNumber; result += " "; } result += this.getAddress(dossier); return result.trim(); } getAddress(dossier: IParcelDossierWrapper): string { let result: string = ''; if (dossier && dossier.parcelDossier && dossier.parcelDossier.address) { result += dossier.parcelDossier.address; result += " "; } let areaName = ''; if (dossier && dossier.parcelDossier && dossier.parcelDossier.area && dossier.parcelDossier.area.areaName) { areaName = dossier.parcelDossier.area.areaName; } let districtName = ''; if (dossier && dossier.parcelDossier && dossier.parcelDossier.district && dossier.parcelDossier.district.districtName) { districtName = dossier.parcelDossier.district.districtName; } let secondPart = ''; if (areaName) { secondPart += areaName; } if (districtName) { secondPart += (areaName) ? ', ' : ''; secondPart += districtName; } if (secondPart) { secondPart = ' (' + secondPart + ')'; } result += secondPart; return result; } getAddressString(document: DocumentIsogd): string { if (document.territory) { let territoryValues = this.getTerritoryValues(document.territory); if (document.object && document.object.objectAddress) { let result = document.object.objectAddress; if (territoryValues && territoryValues.length > 0) { result += ' (' + territoryValues.join(', ') + ')'; } return result; } else if (territoryValues && territoryValues.length > 0) { return territoryValues.join(', '); } } else { return ""; } } getTerritoryValues(territory: DocumentTerritory): string[] { let areas: string[] = territory ? _.map(territory.area, (area) => { return area.areaName; }) : []; let districts: string[] = territory ? _.map(territory.district, (district) => { return district.districtName; }) : []; return areas.concat(districts); } } export const SearchDossiersComponent: angular.IComponentOptions = { controller: SearchDossiersController, template: require('./searchDossiers.html'), bindings: { document: '<', chapters: '<', dossiers: '<', onUpdate: "&" } };