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 { DocumentIsogd, DocumentRestService, DocumentTerritory } from "isogd-document-rest"; import { NsiRestService } from "oasi-nsi-rest"; class DossierCandidatesController { 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 selectAll: boolean = false; private disabledAll: boolean = true; 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("dossierCandidates"); } $onDestroy() { this.myBlockUI.reset(); } $onChanges(changes: any) { if (changes.dossiers && changes.dossiers.currentValue) { this.dossiers.forEach(r => { (r).checked = false; }); this.selectAll = false; this.disabledAll = true; } } selectAllLinks() { this.dossiers.forEach(l => { (l).checked = this.selectAll; }); this.disabledAll = !this.selectAll; } changeSelection() { let selectAll = true; let anyChecked = false; this.dossiers.forEach(l => { if ((l).checked === false) { selectAll = false; } if ((l).checked === true) { anyChecked = true; } }); this.selectAll = selectAll; this.disabledAll = !anyChecked; } 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(); }); }); } addSelectedLinks() { let promises: ng.IPromise[] = []; this.dossiers.forEach(d => { if ((d).checked === true) { promises.push(this.dossierLinkRestService.create({ dossierId: d.parcelDossier.dossierId, docId: this.document.documentID })); } }); this.myBlockUI.start(); this.$q.all(promises).then(response => { this.myBlockUI.stop(); this.onUpdate(); this.toastr.success("Выделенные связи успешно добавлены!", "Успех"); }).catch(error => { this.myBlockUI.stop(); this.toastr.error("Ошибка при добавлении выделенных связей!", "Ошибка"); }); } 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 DossierCandidatesComponent: angular.IComponentOptions = { controller: DossierCandidatesController, template: require('./dossierCandidates.html'), bindings: { document: '<', chapters: '<', dossiers: '<', onUpdate: "&" } };