import { IParcelDossierWrapper } from 'isogd-dossier-rest'; import { DocumentLinkRestService, IDocumentLink } from 'isogd-document-link-rest'; import * as _ from 'lodash'; import { DocumentIsogd, DocumentTerritory } from 'isogd-document-rest'; export class LinkedDocumentService { static $inject = ['$timeout', 'toastr', 'documentLinkRestService', '$q']; constructor(private $timeout: ng.ITimeoutService, private toastr: Toastr, private documentLinkRestService: DocumentLinkRestService, private $q: ng.IQService) { } public changeLink(link: IDocumentLink): ng.IPromise { let defer: ng.IDeferred = this.$q.defer(); this.$timeout(1500).then(response => { this.documentLinkRestService.update(link).then(response => { defer.resolve(); }).catch(error => { defer.reject(error); }); }); return defer.promise; } public deleteLink(link: IDocumentLink): ng.IPromise { let defer: ng.IDeferred = this.$q.defer(); this.$timeout(1500).then(response => { this.documentLinkRestService.delete(link.linkId).then(response => { defer.resolve(); }).catch(error => { defer.reject(error); }); }); return defer.promise; } public 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; } public findChapterByCode(chapters: any[], code: string): string { let result = this._findChapterByCode(chapters, code); return (result) ? result.name : ""; } public findLinkTypeByCode(linkdocTypes: any[], code: string): string { let result: string = null; linkdocTypes.forEach(ch => { if (ch.code === code) { result = ch.name; } }); return result; } public 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 ""; } } public 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); } private _findChapterByCode(chapters: any[], code: string): any { let result: any = null; chapters.forEach(ch => { if (ch.chapterCode === code) { result = ch; } if (ch.children && ch.children.length > 0) { let r = this._findChapterByCode(ch.children, code); if (r !== null) { result = r; } } }); return result; } }