module fb { export class MaeklarObjektDO extends fb.MaeklarObjektDOGen { $MaeklarObjektsBeskrivning_DELETED: number[]; isBRL: boolean; isUtland: boolean; isAegarlgh: boolean; isSmaahus: boolean; // Småhus är även kallad fastighet isGaard: boolean; // Gård, är även kallad gård, jordbruk, skogsbruk isOevrig: boolean; isArrende: boolean; postInit() { this.isBRL = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOBostadsraett; //this.isUtland = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOBelaegnaISpanien; this.isUtland = this.LandId && this.LandId.value !== fb.FasITDomain.Land.SVERIGE; this.isAegarlgh = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOAegarlgh this.isSmaahus = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOSmaahus; this.isGaard = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOGaard; this.isOevrig = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOOevrig; this.isArrende = this.ObjektTypId && this.ObjektTypId.value === fb.FasITDomain.ObjektTypId.MOByggnadArrenderadMark; if (!this.$MaeklarObjektsBeskrivning_DELETED) { this.$MaeklarObjektsBeskrivning_DELETED = []; if (this.ignoredKeys && this.ignoredKeys.indexOf('$MaeklarObjektsBeskrivning_DELETED') === -1) { this.ignoredKeys.push('$MaeklarObjektsBeskrivning_DELETED'); } } } validation() { this.KommunId.required = this.LandId.value === fb.FasITDomain.Land.SVERIGE; if (!!this.IntagareId && !!this.LandId) { this.IntagareId.required = this.LandId.value !== fb.FasITDomain.Land.SVERIGE; } super.validation(); } uppdragStatusDomain = fb.FasITDomain.UppdragStatus; getForeignKeyObject(): fb.IForeignKeyObject { return { entity: fb.ForeignKeyEntity.MAEKLAROBJEKT, key: this.MaeklarObjektId.value } } //Kontrollerar om budgivning pågår genom att kolla på uppdragstatusspecifikationen. Rätt vore att kolla om objektet har en budgivning men då måste vi göra ett extra anrop isBudgivningPaagar(): boolean { return this.UppdragStatusSpecifikation.value >= fb.FasITDomain.UppdragStatusSpecifikation.UPPDRAG_BUDGIVNING_PAAGAAR && this.UppdragStatusSpecifikation.value <= fb.FasITDomain.UppdragStatusSpecifikation.UPPDRAG_BUDGIVNING_PAAGAAR_VILANDE_ANNONSERING; } isFoersaeljning(): boolean { return this.UppdragTyp && this.UppdragTyp.value === fb.FasITDomain.UppdragTyp.FOERSAELJNING; } isVaerdering(): boolean { return this.UppdragTyp && this.UppdragTyp.value === fb.FasITDomain.UppdragTyp.VAERDERING; } isSkrivning(): boolean { return this.UppdragTyp && this.UppdragTyp.value === fb.FasITDomain.UppdragTyp.SKRIVNING; } isProjekt(): boolean { return this.UppdragTyp && this.UppdragTyp.value === fb.FasITDomain.UppdragTyp.PROJEKT; } isBrlProjekt(): boolean { return this.ProjektInfo.ObjektTypIdFoerObjektIProjekt && this.ProjektInfo.ObjektTypIdFoerObjektIProjekt.value === fb.FasITDomain.ObjektTypId.MOBostadsraett; } isObjektIProjekt(): boolean { return this.ObjektIProjekt && this.ObjektIProjekt.ProjektId && !!this.ObjektIProjekt.ProjektId.value; } isArkiverat(): boolean { return this.StatusLagring && this.StatusLagring.value === fb.FasITDomain.StatusLagring.ARKIVERAD; } // Används för att kolla om objektet kan vara försäljningsrapporterat // Koden är lite smutsig, men det är för att den följer formen på databasfunktionen (fb_AerSald) isSaald(): boolean { var self = this; if (this.$resolved) { if (!!this.AerFoersaeljningsrapporterat.value) { return true; } var jaemfoerelsedag = moment().format('YYYY-MM-DDTHH:00:00'); if (self.AerNyproduktion.value === false && (self.Avtalsdag.value === null || self.Avtalsdag.value >= jaemfoerelsedag)) { return false; } if (self.AerNyproduktion.value === true && (self.Avtalsdag.value === null || self.Avtalsdag.value >= jaemfoerelsedag) && (self.Foerhandsavtalsdag.value === null || self.Foerhandsavtalsdag.value >= jaemfoerelsedag)) { return false; } if (self.StatusLagring.value === fb.FasITDomain.StatusLagring.BORTTAGEN) { return false; } if (self.UppdragTyp.value === fb.FasITDomain.UppdragTyp.FOERSAELJNING && self.UppdragStatus.value >= fb.FasITDomain.UppdragStatus.SAALD && self.SlutPris.value !== null && (self.ProvisFast.value || self.ProvisProc.value)) { return true; } if (self.UppdragTyp.value === fb.FasITDomain.UppdragTyp.FOERSAELJNING) { return false; } if (self.ProvisFast.value) { return true; } return false; }; return true; } postMerge(data) { var self = this; if (data != null && angular.isDefined(data.GruppRadVersioner)) { self.GruppRadVersioner = new Array(); _.each(data.GruppRadVersioner, function (item: any) { var obj = new fb.Models_MaeklarObjektGruppVersionRO(item, self) self.GruppRadVersioner.push(obj); }); } // Merge av arrayer med annonsering var commonService = angular.element(document).injector().get('commonService') as fb.ICommonService; if (commonService) { if (self.ObjektAnnons && data.ObjektAnnons) { // Annonser bör inte tas bort (istället blir den historisk) på serversidan så vi borde inte behöva // ta hänsyn till det fallet for (let i = 0; i < data.ObjektAnnons.length; i++) { const objektAnnons = data.ObjektAnnons[i]; let matchandeAnnons = null; for (let j = 0; j < self.ObjektAnnons.length; j++) { if (objektAnnons.SystemNamn === self.ObjektAnnons[j].SystemNamn.value) { matchandeAnnons = self.ObjektAnnons[j]; break; } } if (matchandeAnnons) { // För annonser som ändrats på serversidan. Detta kan se exempelvis av annan användare eller // om annonsering i ett objekt startades via projektet det tillhör (om objekt i projekt). commonService.merge(matchandeAnnons, objektAnnons); } else { // Hantering för annonser som lagts till på serversidan. Kan ske av samma anledningar som vid ändring self.ObjektAnnons.push(new Models_ObjektAnnonsRO(objektAnnons, self, 'ObjektAnnons')); } } } } if (commonService) { if (self.MaeklarObjektsBeskrivning && data.MaeklarObjektsBeskrivning) { var target = null, len : number = null; len = self.MaeklarObjektsBeskrivning.length; for (var i = len-1; i >= 0; i--) { target = _.find(data.MaeklarObjektsBeskrivning, function (beskrivning: any) { if (beskrivning.MaeklarObjektBeskrivningId === self.MaeklarObjektsBeskrivning[i].MaeklarObjektBeskrivningId.value) { return true; } return false; }); if (target == null && self.MaeklarObjektsBeskrivning[i].MaeklarObjektBeskrivningId.value !== null) { //Objektsbeskrivningen är borttagen på serversidan! (Av annan användare) self.MaeklarObjektsBeskrivning.splice(self.MaeklarObjektsBeskrivning.indexOf(self.MaeklarObjektsBeskrivning[i]),1); } } for (var i = 0; i < self.MaeklarObjektsBeskrivning.length; i++) { var beskrivning = self.MaeklarObjektsBeskrivning[i]; for (var j = 0; j < data.MaeklarObjektsBeskrivning.length; j++) { //För updates if (beskrivning.MaeklarObjektBeskrivningId.value === data.MaeklarObjektsBeskrivning[j].MaeklarObjektBeskrivningId) { commonService.merge(beskrivning, data.MaeklarObjektsBeskrivning[j]); break; } if (beskrivning.MaeklarObjektBeskrivningId.value === null && beskrivning.MaeklarObjektsBeskrivningObjektTypId.value == data.MaeklarObjektsBeskrivning[j].MaeklarObjektsBeskrivningObjektTypId && beskrivning.Ordningsnummer.checkpointValue === data.MaeklarObjektsBeskrivning[j].Ordningsnummer) { //För inserts så använder vi ordningsnummer som merge-sätt. Rätt dåligt, men det bästa vi kan göra utan att ändra allt för mycket //Vi använder checkpointvalue för att klienten kan ha sorterat om beskrivningarna medan sparningen har gjorts commonService.merge(beskrivning, data.MaeklarObjektsBeskrivning[j]); break; } } } for (var i = 0; i < data.MaeklarObjektsBeskrivning.length; i++) { target = _.find(self.MaeklarObjektsBeskrivning, function (beskrivning: fb.Models_MaeklarObjektsBeskrivningRO) { if (beskrivning.MaeklarObjektBeskrivningId.value === data.MaeklarObjektsBeskrivning[i].MaeklarObjektBeskrivningId) { return true; } return false; }); if (target == null && self.$MaeklarObjektsBeskrivning_DELETED.indexOf(data.MaeklarObjektsBeskrivning[i].MaeklarObjektBeskrivningId) === -1) { //Objektsbeskrivningen är tillagd på serversidan! (Av annan användare) och vi har INTE manuellt tagit bort den self.MaeklarObjektsBeskrivning.push(new fb.Models_MaeklarObjektsBeskrivningRO(data.MaeklarObjektsBeskrivning[i], self)); } } } } } } }