angular.module('fasit').controller('TipsaSideDrawerCtrl', [ '$scope', '$rootScope', '$q', '$filter', 'sideDrawerService', 'personService', 'kontorService', 'maeklarObjektService', 'utgaaendeTipsService', 'signaturService', 'navigationService', 'domainService', 'stateService', function ( $scope: fb.ITipsaSideDrawerScope, $rootScope: fb.IRootScope, $q: ng.IQService, $filter: ng.IFilterService, sideDrawerService: fb.ISideDrawerService, personService: fb.IPersonService, kontorService: fb.IKontorService, maeklarObjektService: fb.IMaeklarObjektService, utgaaendeTipsService: fb.IUtgaaendeTipsService, signaturService: fb.ISignaturService, navigationService: fb.INavigationService, domainService: fb.IDomainService, stateService: fb.IStateService) { 'use strict'; var translate = $filter('translate'); var niceDate = $filter('niceDate'); var personSignatur = signaturService.getPersonSignatur($rootScope.InloggadAnvaendare.PersonId); var params = sideDrawerService.getParams(); var typAvKontakt = params.typAvKontakt || null; var foervaldMottagare = params.foervaldMottagare || null; var maeklarObjekt: fb.MaeklarObjektDO = params.maeklarObjekt || null; // Endast om köpare/säljare/intressent // Params har med säljare/köpare/kontakten som ska tipsas om var allaTipsKontakter = _.map(params.tipsKontakter || [], function (r: any) { return (typAvKontakt === 'koepare' || typAvKontakt === 'saeljare') ? toTipsKontaktFromIntressentPart( r) : typAvKontakt === 'intressent' ? toTipsKontaktFromIntressentRow( r) : r instanceof fb.FysiskPersonLO ? toTipsKontaktFromKontaktLista( r) : toTipsKontaktFromPerson( r); }); $scope.tipsGroups = [allaTipsKontakter]; if (typAvKontakt === 'intressent') { // Gruppera efter intressentgrupper, sortera efter primärkontakt -> först valda inom grupp var distinctGroups = _.values(_.groupBy(params.tipsKontakter, function (r: fb.IIntressentRow) { return r.parentRow ? r.parentRow.Intressent.ObjektIntressentId.value : r.Intressent.ObjektIntressentId.value; })); _.each(distinctGroups, function (g: fb.IIntressentRow[], i: number) { g.sort(function (l: fb.IIntressentRow, r: fb.IIntressentRow) { if (l === r) { return 0; } if (!l.parentRow && r.parentRow) { return -1; } if (l.parentRow && !r.parentRow) { return 1; } return _.indexOf(params.tipsKontakter, l) - _.indexOf(params.tipsKontakter, r); }); }); $scope.tipsGroups = _.map(distinctGroups, function (rs: fb.IIntressentRow[]) { return _.map(rs, toTipsKontaktFromIntressentRow); }); } var stateId = _.map(allaTipsKontakter, function (t: fb.ITipsKontakt) { return t.PersonId; }).join('_'); stateService.addState('TipsaSideDrawerCtrl', stateId, function () { return { valdMottagarTyp: $scope.valdMottagarTyp.value, valtBankkontor: $scope.valtBankkontor.value, valdaBankMottagare: $scope.valdaBankMottagare, valdSamarbetspart: $scope.valdSamarbetspart.value, valdaSamarbetsMottagare: $scope.valdaSamarbetsMottagare, valtFbKontor: $scope.valtFbKontor.value, valtfbKontorPostnummer: $scope.valtfbKontorPostnummer.value, valdFbMottagare: $scope.valdFbMottagare.value, skickasMedHoegPrio: $scope.skickasMedHoegPrio.value, villHaAaterkoppling: $scope.villHaAaterkoppling.value, kommentar: $scope.kommentar.value }; }); var stateObj = stateService.loadState('TipsaSideDrawerCtrl', stateId); var unregisterEvent = $rootScope.$on('$routeChangeSuccess', function () { stateService.offLoadState('TipsaSideDrawerCtrl', stateId); unregisterEvent(); }); var kontorForPostNr: any; // Index med postnr som pekar ut möjliga kontor $scope.$on('$destroy', function () { stateService.clearState('TipsaSideDrawerCtrl', stateId); }); $scope.mottagarTyp = typAvKontakt === 'koepare' || typAvKontakt === 'saeljare' ? [ { name: translate('GLOBALS.BANKEN'), id: 2 }, { name: translate('GLOBALS.ANNAN'), id: 1 } ] : [ { name: translate('GLOBALS.ANNAN'), id: 1 }, { name: translate('GLOBALS.BANKEN'), id: 2 }, { name: translate('GLOBALS.FASTIGHETSBYRAAN'), id: 3 } ]; $scope.valdMottagarTyp = new fb.ChangeTrack(foervaldMottagare !== null ? foervaldMottagare === 'bank' ? 2 : foervaldMottagare === 'fb' ? 3 : null : null); $scope.bankkontor = personService.getLaangivarePerPersonKategori(fb.PersonKategoriId.Tipsmottagare); // Börja hämta alla bankkontor $scope.valtBankkontor = new fb.ChangeTrack(null); $scope.bankMottagare = []; $scope.valdaBankMottagare = []; $scope.bankMottagareChangedResource = { $promise: null, $resolved: true }; $scope.samarbetsparter = personService.getSamarbetsparter(fb.PersonKategoriId.Tipsmottagare); // Börja hämta alla samarbetspartner $scope.valdSamarbetspart = new fb.ChangeTrack(null); $scope.samarbetsMottagare = []; $scope.valdaSamarbetsMottagare = []; $scope.samarbetsMottagareChangedResource = { $promise: null, $resolved: true }; $scope.fbKontor = kontorService.queryTilldeladMedPostnr(); // Börja hämta alla kontor $scope.valtfbKontorPostnummer = new fb.ChangeTrack(params.postnummer || null); $scope.valtFbKontor = new fb.ChangeTrack(null); $scope.fbKontorMottagare = []; $scope.valdFbMottagare = new fb.ChangeTrack(null); $scope.fbMottagareChangedResource = > { $promise: {}, $resolved: true }; $scope.closeUserMotivation = { preventCancel: params.preventClickOutsideClose || false, showPopup: false, banknyttaIgnoreradPga: new fb.ChangeTrack(maeklarObjekt ? maeklarObjekt.BanknyttaIgnoreradPga.value : null), banknyttaIgnoreradMotiv: new fb.ChangeTrack(maeklarObjekt ? maeklarObjekt.BanknyttaIgnoreradMotiv.value : null), ejTipsOptions: domainService.getBanknyttaIgnoreradPgaDomain, close: function () { maeklarObjekt.BanknyttaIgnoreradPga.setValue($scope.closeUserMotivation.banknyttaIgnoreradPga.value); maeklarObjekt.BanknyttaIgnoreradMotiv.setValue($scope.closeUserMotivation.banknyttaIgnoreradMotiv.value); maeklarObjekt.BankNyttaSvar.setValue(fb.FasITDomain.BankNyttaSvarMaeklarObjekt.IGNORERAD); $scope.closeDrawer(); } }; // Sätt eventuell state $scope.skickasMedHoegPrio = new fb.ChangeTrack(stateObj.skickasMedHoegPrio || false); $scope.villHaAaterkoppling = new fb.ChangeTrack(stateObj.villHaAaterkoppling || false); $scope.kommentar = new fb.ChangeTrack(stateObj.kommentar || null); $scope.valdMottagarTyp.value = stateObj.valdMottagarTyp || $scope.valdMottagarTyp.value; $scope.bankkontor.$promise.then(function () { $scope.valtBankkontor.value = stateObj.valtBankkontor || $scope.valtBankkontor.value; $scope.valdaBankMottagare = stateObj.valdaBankMottagare || []; }); $scope.samarbetsparter.$promise.then(function () { $scope.valdSamarbetspart.value = stateObj.valdSamarbetspart || $scope.valdSamarbetspart.value; $scope.valdaSamarbetsMottagare = stateObj.valdaSamarbetsMottagare || []; }); $scope.fbKontor.$promise.then(function () { $scope.valtfbKontorPostnummer.value = stateObj.valtfbKontorPostnummer || $scope.valtfbKontorPostnummer.value; $scope.valtFbKontor.value = stateObj.valtFbKontor || $scope.valtFbKontor.value; $scope.valdFbMottagare.value = stateObj.valdFbMottagare || $scope.valdFbMottagare.value }); // Sortera initialt alla kontor och skapa ev. filteringslista $scope.samarbetsparter.$promise.then(function () { var sorted = _.sortBy($scope.samarbetsparter, function (s: fb.Samarbetspart) { return s.Namn; }); $scope.samarbetsparter.length = 0; _.each(sorted, function (s: fb.Samarbetspart) { $scope.samarbetsparter.push(s); }); }); $scope.bankkontor.$promise.then(function () { var sorted = _.sortBy($scope.bankkontor, function (b: fb.LaangivareLO) { return b.Namn; }); $scope.bankkontor.length = 0; _.each(sorted, function (k: fb.LaangivareLO) { $scope.bankkontor.push(k); }); }); $scope.fbKontor.$promise.then(function () { // Gruppera in kontor efter postnr kontorForPostNr = _.groupBy($scope.fbKontor, 'Postnr'); var sorted = _.sortBy(_.uniq($scope.fbKontor, function (k) { return k.KontorId; }), 'Kontorsnamn'); $scope.fbKontor.length = 0; _.each(sorted, function (k: fb.Models_KontorPostnrTilldelningLOGen) { $scope.fbKontor.push(k); }); $scope.fbKontorFiltered = _.map($scope.fbKontor, function (k: fb.Models_KontorPostnrTilldelningLOGen) { return k; }); }); $scope.openKontaktSideDrawer = function (personId: number) { navigationService.findOpenObjekt(fb.FasITDomain.NavigationController.KONTAKT, personId, true); } $scope.openNyKontaktSideDrawer = function (jurPersonTyp) { stateService.offLoadState('TipsaSideDrawerCtrl', stateId); sideDrawerService.setSideDrawer('AddContact', { callbackFn: addJurPerson, cancelFn: function () { sideDrawerService.clearDrawer(); }, incomingScope: $scope, contactType: new fb.ChangeTrack(jurPersonTyp) }); }; var addJurPerson = function (person: fb.JuridiskPersonDO) { person.PersonKategorier.push(new fb.ChangeTrack(fb.PersonKategoriId.Tipsmottagare)); var prom = personService.saveJuridiskPerson(person); if (prom) { prom.$promise.then(function () { sideDrawerService.clearDrawer(); }); } else { sideDrawerService.clearDrawer(); } }; $scope.isMissingMandatoryFields = function () { var tipsTyp = getTipstyp(); if (tipsTyp === null || $scope.kommentar.value === null || $scope.kommentar.value === '') { return true; } if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER) { return $scope.valdSamarbetspart.value === null || $scope.valdaSamarbetsMottagare.length === 0; } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT) { return $scope.valtBankkontor.value === null || $scope.valdaBankMottagare.length === 0; } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { return $scope.valtFbKontor.value === null || $scope.valdFbMottagare.value === null; } return false; } $scope.onClose = function () { // Rensa state vid explicit stängning av jordgubben stateService.clearState('TipsaSideDrawerCtrl', stateId); } $scope.sendTips = function () { var promiseSave = _.map($scope.tipsGroups, function (tipsKontakter: fb.ITipsKontakt[]) { var tidigareTips = utgaaendeTipsService.getSenasteTipsDatum(getTipsmottagareKontorId() || getTipsmottagareJuridiskPersonId(), _.map(tipsKontakter, function (k: fb.ITipsMottagare) { return k.PersonId; })); var personIntressenter = typAvKontakt === 'intressent' || typAvKontakt === 'koepare' || typAvKontakt === 'saeljare' ? _.map(tipsKontakter, function (t: fb.ITipsKontakt) { return ( personService.get(t.PersonId, false)); }) : []; return $q.all([tidigareTips, $q.all(_.map(personIntressenter, function (p) { return p.$promise; })), personSignatur.$promise]).then(function (responses) { var senastTipsDatum = responses[0].Datum; var tipsTyp = getTipstyp(); var avser = tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE ? _.map(tipsKontakter, function (k: fb.ITipsMottagare) { return k.PersonId; }) : [tipsKontakter[0].PersonId]; // För säljare/köpare loggas alla kontakter, annars om flera antas första vara primär. var tips = new fb.UtgaaendeTips({ Tipstyp: tipsTyp, Tipsrubrik: getTipsrubrik(), Tips: getTips(tipsKontakter, senastTipsDatum, personIntressenter), TipsmottagareKontorId: getTipsmottagareKontorId(), // Om möjlighet TipsmottagareJuridiskPersonId: getTipsmottagareJuridiskPersonId(), // Kontor för samarbetspartner, bankkontor TipsmottagareKontaktperson: getTipsmottagareKontaktperson(), // Specifika personer inom kontoret Avser: avser, SkaSkickasMedHoegPrioritet: getSkaSkickasMedHoegPrioritet(), MaeklarObjektId: maeklarObjekt ? maeklarObjekt.MaeklarObjektId.value : null }, true); var ret = utgaaendeTipsService.add(tips).$promise; ret.then(function () { if (maeklarObjekt) { //Ska vara fulsättning eftersom att backend kommer göra det här åt oss i nästa get maeklarObjekt.BankNyttaSvar.value = fb.FasITDomain.BankNyttaSvarMaeklarObjekt.HAR_KONTAKT_MED_VAAR_BANK; maeklarObjekt.BanknyttaIgnoreradPga.value = null; } if (params.tipsKontakter.length === 1 && params.tipsKontakter[0].BankNyttaSvar !== undefined && (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT)){ params.tipsKontakter[0].BankNyttaSvar.value = fb.FasITDomain.BankNyttaSvar.JA; params.tipsKontakter[0].BankNyttaSvar.originalValue = fb.FasITDomain.BankNyttaSvar.JA; params.tipsKontakter[0].BankNyttaSvarDatum.value = moment().format('YYYY-MM-DDTHH:mm:ss'); params.tipsKontakter[0].BankNyttaSvarDatum.originalValue = moment().format('YYYY-MM-DDTHH:mm:ss'); } }); return ret; }); }); if (_.isFunction(params.refreshCallback)) { params.refreshCallback($q.all(promiseSave)); } $scope.closeDrawer(true); } $scope.visaAllaKontorClick = function () { $scope.valtfbKontorPostnummer.value = null; setTimeout(function () { $('#valtFbKontorField input').focus(); }, 0); } $scope.closeUserMotivationPopup = function (e: any) { if ($scope['closeUserMotivation'].showPopup) { var element = $(e.target).parent().find('.fb-popover') element.addClass('shake'); setTimeout(function () { element.removeClass('shake'); }, 400); } $scope['closeUserMotivation'].showPopup = true; } function valtBankkontorOrSamarbetspartnerChanged(personId: number, mottagare: fb.ITipsMottagare[], valdaMottagare: fb.ITipsMottagare[], res: { $promise: ng.IPromise; $resolved: boolean }) { valdaMottagare.length = 0; mottagare.length = 0; if (personId === undefined) { //Om personId är null så försök inte läsa upp data och populera droppisar. return; } var mottagareResource = personService.getAdministrativaKontaktpersoner(personId); var kontoret = personService.getJuridiskPersonLO(personId); var redanValdaId = _.map(valdaMottagare, function (m: fb.ITipsMottagare) { return m.PersonId; }); var tipsKontaktIndex = _.indexBy(allaTipsKontakter, function (t: fb.ITipsKontakt) { return t.PersonId; }); res.$resolved = false; res.$promise = $q.all([kontoret.$promise, mottagareResource.$promise]) .then(function () { _.each((kontoret.MejlAdress !== null ? [{ PersonId: personId, PersonNamn: translate('TIPSA.KONTORET') + ' (' + kontoret.MejlAdress + ')', MejlAdress: kontoret.MejlAdress }] : []) .concat(_.map(_.sortBy(_.filter(mottagareResource, function (ak: fb.AdministrativKontaktperson) { return ak.MejlAdress.value !== null; }), function (ak: fb.AdministrativKontaktperson) { return ak.Foernamn.value; }), function (ak: fb.AdministrativKontaktperson) { return { PersonId: ak.PersonId.value, PersonNamn: ak.Foernamn.value + ' ' + ak.Efternamn.value + ' (' + ak.MejlAdress.value + ')', MejlAdress: ak.MejlAdress.value }; })), function (t: fb.ITipsMottagare) { if (_.isUndefined(tipsKontaktIndex[t.PersonId])) { // Filterar bort personer som tipsas om mottagare.push(t); } }); var personIdIndex = _.indexBy(mottagare, function (m: fb.ITipsMottagare) { return m.PersonId; }); _.each(redanValdaId, function (personId: number) { if (!_.isUndefined(personIdIndex[personId])) { valdaMottagare.push(personIdIndex[personId]); } }); res.$resolved = true; }); } function valtFbKontorChanged() { var lastSelectedId = $scope.valdFbMottagare.value; $scope.valdFbMottagare.value = null; $scope.fbKontorMottagare.length = 0; if ($scope.valtFbKontor.value === null) { return; } // FASIT-2928 $scope.valdFbMottagare.value = $scope.valtFbKontor.value; // Borde tas bort men FASIT-2928 ville att detta ska vara kvar ifall dom skulle ändra sig. Ta bort asap som möjligt //$scope.fbMottagareChangedResource = personService.getAktivaMedarbetareFoerKontor($scope.valtFbKontor.value); //var kontor = _.find($scope.fbKontorFiltered, function (k: fb.Models_KontorPostnrTilldelningLOGen) { // return k.KontorId === $scope.valtFbKontor.value; //}); //$scope.fbMottagareChangedResource.$promise.then(function () { // $scope.fbKontorMottagare.push({ // PersonNamn: translate('TIPSA.LAAT_KONTORET_BESTAEMMA'), // PersonId: $scope.valtFbKontor.value, // MejlAdress: null // }); // var medarbetare = _ // .chain( $scope.fbMottagareChangedResource) // .sortBy(function (m: fb.Samarbetspart) { // return m.Namn; // }) // .map(function (m: fb.Samarbetspart) { // return { // PersonId: m.PersonId, // PersonNamn: m.Namn, // MejlAdress: m.Mejladress // }; // }) // .each(function (tm: fb.ITipsMottagare) { // //Man får inte skicka tips till sig själv // if (tm.PersonId !== $rootScope.InloggadAnvaendare.PersonId) { // $scope.fbKontorMottagare.push(tm); // } // }); // if (lastSelectedId !== null) { // var stillExist = _.find($scope.fbKontorMottagare, function (m: fb.ITipsMottagare) { return m.PersonId === lastSelectedId; }); // if (!_.isUndefined(stillExist)) { // $scope.valdFbMottagare.value = lastSelectedId; // } // } //}); } function valtfbKontorPostnummerChanged() { $scope.fbKontor.$promise.then(function () { //ta bort eventuella mellanslag i postnummer var availableKontor = !$scope.valtfbKontorPostnummer.value ? $scope.fbKontor : (kontorForPostNr[$scope.valtfbKontorPostnummer.value.toString().replace(/\s/g, '')] || []); $scope.fbKontorFiltered.length = 0; _.each(availableKontor, function (k: fb.Models_KontorPostnrTilldelningLOGen) { $scope.fbKontorFiltered.push(k); }); if ($scope.fbKontorFiltered.length === 1) { $scope.valtFbKontor.value = $scope.fbKontorFiltered[0].KontorId; } else { if ($scope.valtFbKontor.value !== null) { var stillExist = _.find($scope.fbKontorFiltered, function (k: fb.Models_KontorPostnrTilldelningLOGen) { return k.KontorId === $scope.valtFbKontor.value; }); if (_.isUndefined(stillExist)) { $scope.valtFbKontor.value = null; } } } }); } function getTipstyp() { if ($scope.valdMottagarTyp.value === 1) { return fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER; } else if ($scope.valdMottagarTyp.value === 2) { if (typAvKontakt === 'generell' || typAvKontakt === 'intressent') { return fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT; } else if (typAvKontakt === 'koepare') { return fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE; } else if (typAvKontakt === 'saeljare') { return fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE; } } else if ($scope.valdMottagarTyp.value === 3) { return fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN; } return null; } function getTipsrubrik() { var tipsTyp = getTipstyp(); if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE) { return translate('TIPSA.KOEPARE_FRAAN_FASTIGHETSBYRAAN') + ' ' + $rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn; } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE) { return translate('TIPSA.SAELJARE_FRAAN_FASTIGHETSBYRAAN') + ' ' + $rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn; } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT) { return typAvKontakt === 'intressent' ? (translate('TIPSA.SPEKULANT_FRAAN_FASTIGHETSBYRAAN') + ' ' + $rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn) : (translate('TIPSA.KUND_FRAAN_FASTIGHETSBYRAAN') + ' ' + $rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn); } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { return translate('TIPSA.MOEJLIGHET'); } return null; } function getTipsFooter(useHtmlFormatting: boolean) { var typ = getTipstyp(); if (typ === fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { return ''; // Ingen footer mellan fb-kontor } return useHtmlFormatting ? $filter('emailSignature')(personSignatur).$$unwrapTrustedValue() : translate('TIPSA.TIPSTEXT_FOOTER') + '\n\n' + $rootScope.InloggadAnvaendare.Namn + '\n' + $rootScope.InloggadAnvaendare.Mailadress; } function getKontaktText(k: fb.ITipsKontakt) { var adress = k.AdressText ? k.AdressText : ''; if (k.Postnummer && k.Postnummer.length > 0 && k.Postort && k.Postort.length > 0) { adress += (adress.length > 0 ? ', ' : '') + k.Postnummer + ' ' + k.Postort; } var text = translate('GLOBALS.NAMN') + ': ' + k.PersonNamn + '\n'; text += translate('GLOBALS.ADRESS') + ': ' + adress + '\n'; text += translate('TIPSA.TEL_ARBETE') + ': ' + (k.TelefonnummerArbete ? k.TelefonnummerArbete : '') + '\n'; text += translate('TIPSA.TEL_BOSTAD') + ': ' + (k.TelefonnummerHem ? k.TelefonnummerHem : '') + '\n'; text += translate('GLOBALS.MOBIL') + ': ' + (k.TelefonnummerMobil ? k.TelefonnummerMobil : '') + '\n'; text += translate('GLOBALS.EPOST') + ': ' + (k.MejlAdress ? k.MejlAdress : ''); return text; } function getTipsTextSamarbetspartner() { return typAvKontakt === 'intressent' ? translate('TIPSA.TIPSTEXT_SAMARBETSPARTNER_INTRESSENT') : translate('TIPSA.TIPSTEXT_SAMARBETSPARTNER'); } function getTipsTextBankKoepare() { return translate('TIPSA.TIPSTEXT_BANK_KOEPARE'); } function getTipsTextBankSaeljare() { return translate('TIPSA.TIPSTEXT_BANK_SAELJARE'); } function getTipsTextBankGenerell() { return typAvKontakt === 'intressent' ? translate('TIPSA.TIPSTEXT_BANK_GENERELL_INTRESSENT') : translate('TIPSA.TIPSTEXT_BANK_GENERELL') } function getTipsTextInomKedjanGenerell() { return translate('TIPSA.TIPSTEXT_INOM_KEDJAN_GENERELL') + (!!$rootScope.InloggadAnvaendare.Namn ? $rootScope.InloggadAnvaendare.Namn + ', ' : '') + (!!$rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn ? $rootScope.InloggadAnvaendare.InloggatKontor.KontorNamn + ', ' : '') + (!!$rootScope.InloggadAnvaendare.Mailadress ? $rootScope.InloggadAnvaendare.Mailadress + '. ' : '') + translate('TIPSA.MEDDELANDE') + ': '; } function getTipsTextObjekt() { var text = '\n\n' + (typAvKontakt === 'saeljare' ? translate('TIPSA.TIPSTEXT_BANK_SAELJARE_OBJEKT') : translate('TIPSA.TIPSTEXT_BANK_KOEPARE_OBJEKT')) + ':\n\n'; text += (maeklarObjekt.isUtland ? maeklarObjekt.Adress.GatuAdressUtland.value : maeklarObjekt.Adress.AdressText.value) + '\n'; if (typAvKontakt === 'koepare' || maeklarObjekt.isSaald()) { text += translate('MAEKLAROBJEKT_BASFAKTA.SLUTPRIS') + ': ' + (maeklarObjekt.SlutPris.value !== null ? maeklarObjekt.SlutPris.value.toString() : '') + '\n'; } var boendeformDomain = domainService.maeklarObjekt.domain('Boendeform'); var boendeForm = _.find(boendeformDomain, function (b: any) { return b.Boendeform === maeklarObjekt.Boendeform.value; }); text += translate('MaeklarObjektDO.Boendeform') + ': ' + (boendeForm ? boendeForm.BoendeformNamn : '') + '\n'; text += translate('GLOBALS.BOAREA') + ': ' + (maeklarObjekt.BoYta.value != null ? maeklarObjekt.BoYta.value.toString() : '') + '\n'; text += translate('MAEKLAROBJEKT.RUM') + ': ' + (maeklarObjekt.AntalRum.value !== null ? maeklarObjekt.AntalRum.value.toString() : ''); return text; } function getTips(tipsKontakter: fb.ITipsKontakt[], senastTipsDatum: string, personIntressenter: { person: fb.Models_IPersonDO }[]) { var tipsTyp = getTipstyp(); var text = ''; if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER) { text = getTipsTextSamarbetspartner(); } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE) { text = getTipsTextBankKoepare(); } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE) { text = getTipsTextBankSaeljare(); } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT) { text = getTipsTextBankGenerell(); } else if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { text = getTipsTextInomKedjanGenerell(); } if ($scope.kommentar.value !== null && $scope.kommentar.value.length > 0) { text += $scope.kommentar.value + '\n\n'; } // Kolla när senaste tips skickades och påminn. if (senastTipsDatum !== null) { text += translate('TIPSA.TIPSTEXT_TIDIGARE_KONTAKT') + ' (' + niceDate(senastTipsDatum, true, false) + ').\n\n'; } //Skicka inte kontakterna i meddelandet när det gäller tips inom kedjan - FASIT-3174 if (tipsTyp !== fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { text += _.map(tipsKontakter, function (k: fb.ITipsKontakt) { // Se om vi har fått med extra personinformation om vi saknar adress if (k.AdressText === null) { var person: { person: any } = _.find(personIntressenter, function (p: any) { return p.person.PersonId.value === k.PersonId; }); if (!_.isUndefined(person)) { k.AdressText = person.person.Adress.AdressText.value; k.Postnummer = person.person.Adress.Postnummer.value; k.Postort = person.person.Adress.Postort.value; k.TelefonnummerArbete = person.person.TelefonnummerArbete ? person.person.TelefonnummerArbete.Telefonnummer.value : null; k.TelefonnummerHem = person.person.TelefonnummerHem ? person.person.TelefonnummerHem.Telefonnummer.value : null; k.TelefonnummerMobil = person.person.TelefonnummerMobil ? person.person.TelefonnummerMobil.Telefonnummer.value : null; } } return getKontaktText(k); }).join('\n\n'); } if (tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE || tipsTyp === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE) { text += getTipsTextObjekt(); } if ($scope.villHaAaterkoppling.value) { text += '\n\n' + translate('TIPSA.PS_AATERKOPPLING') + '.'; } var useHtmlFormatting = tipsTyp !== fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN; if (useHtmlFormatting) { // html-formatera text text = '

' + text.replace(/(?:\r\n|\r|\n)/g, '
') + '

'; } var footer = getTipsFooter(useHtmlFormatting); if (footer.length > 0) { text += (useHtmlFormatting ? '' : '\n\n') + footer; } return text; } function getTipsmottagareKontorId(): number { return $scope.valdMottagarTyp.value === 3 ? $scope.valtFbKontor.value : null; } function getTipsmottagareJuridiskPersonId(): number { return $scope.valdMottagarTyp.value === 1 ? $scope.valdSamarbetspart.value : $scope.valdMottagarTyp.value === 2 ? $scope.valtBankkontor.value : null; } function getTipsmottagareKontaktperson(): number[] { var typ = getTipstyp(); if (typ === fb.UtgaaendeTipsTyp.TIPS_INOM_KEDJAN) { return $scope.valdFbMottagare.value !== $scope.valtFbKontor.value ? [$scope.valdFbMottagare.value] : null; } else if (typ === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER || typ === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_KOEPARE || typ === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_SAELJARE || typ === fb.UtgaaendeTipsTyp.TIPS_TILL_BANK_OEVRGT) { var kontorId = typ === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER ? $scope.valdSamarbetspart : $scope.valtBankkontor var mottagare = typ === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER ? $scope.valdaSamarbetsMottagare : $scope.valdaBankMottagare; var ids = _.filter(_.map(mottagare, function (m: fb.ITipsMottagare) { return m.PersonId; }), function (personId: number) { return personId !== kontorId.value; }); return ids.length > 0 ? ids : null; } else if (typ === fb.UtgaaendeTipsTyp.TIPS_TILL_SAMARBETSPARTNER) { return _.map($scope.valdaSamarbetsMottagare, function (m: fb.ITipsMottagare) { return m.PersonId; }); } return null; } function getSkaSkickasMedHoegPrioritet() { return $scope.valdMottagarTyp.value === 3 ? false : $scope.skickasMedHoegPrio.value; } function toTipsKontaktFromPerson(p: fb.FysiskPerson2DO /* kan även va jur */): fb.ITipsKontakt { return { PersonId: p.PersonId.value, PersonNamn: p.Personnamn.value, MejlAdress: p.MejlAdress.Mejladress.value || null, AdressText: p.Adress.AdressText.value, Postnummer: p.Adress.Postnummer.value, Postort: p.Adress.Postort.value, TelefonnummerArbete: p.TelefonnummerArbete ? p.TelefonnummerArbete.Telefonnummer.value : null, TelefonnummerHem: p.TelefonnummerHem ? p.TelefonnummerHem.Telefonnummer.value : null, TelefonnummerMobil: p.TelefonnummerMobil ? p.TelefonnummerMobil.Telefonnummer.value : null }; } function toTipsKontaktFromKontaktLista(p: fb.FysiskPersonLO): fb.ITipsKontakt { return { PersonId: p.PersonId, PersonNamn: p.Personnamn, MejlAdress: p.MejlAdress || null, AdressText: p.AdressText, Postnummer: p.Postnummer, Postort: p.Postort, TelefonnummerArbete: p.TelArbete, TelefonnummerHem: p.TelHem, TelefonnummerMobil: p.Mobilnummer }; } function toTipsKontaktFromIntressentPart(p: fb.ObjIntressentPartDO): fb.ITipsKontakt { return { PersonId: p.PersonId.value, PersonNamn: p.Personnamn.value, MejlAdress: p.MejlAdress.value, AdressText: null, // Gör explicit Person GET senare Postnummer: null, // Gör explicit Person GET senare Postort: null, // Gör explicit Person GET senare TelefonnummerArbete: null, // Gör explicit Person GET senare TelefonnummerHem: null, // Gör explicit Person GET senare TelefonnummerMobil: p.TelefonnummerMobil.value }; } function toTipsKontaktFromIntressent(i: fb.Objektintressent | fb.Projektintressent): fb.ITipsKontakt { return { PersonId: i.PersonId.value, PersonNamn: i.PersonNamn.value, MejlAdress: i.Mejladress['value'] === null ? null : i.Mejladress.Mejladress.value, AdressText: null, // Gör explicit Person GET senare Postnummer: null, // Gör explicit Person GET senare Postort: null, // Gör explicit Person GET senare TelefonnummerArbete: !!i.TelefonnummerArbete && i.TelefonnummerArbete.Telefonnummer ? i.TelefonnummerArbete.Telefonnummer.value : null, TelefonnummerHem: !!i.TelefonnummerHem && i.TelefonnummerHem.Telefonnummer? i.TelefonnummerHem.Telefonnummer.value : null, TelefonnummerMobil: !!i.TelefonnummerMobil && i.TelefonnummerMobil.Telefonnummer ? i.TelefonnummerMobil.Telefonnummer.value : null }; } function toTipsKontaktFromIntressentRow(r: fb.IIntressentRow): fb.ITipsKontakt { return toTipsKontaktFromIntressent(r.Intressent); } valtfbKontorPostnummerChanged(); $scope.$watch('valtBankkontor.value', function (newVal: number, oldVal: number) { if (newVal !== oldVal) { valtBankkontorOrSamarbetspartnerChanged($scope.valtBankkontor.value, $scope.bankMottagare, $scope.valdaBankMottagare, $scope.bankMottagareChangedResource); } }); $scope.$watch('valdSamarbetspart.value', function (newVal: number, oldVal: number) { if (newVal !== oldVal) { valtBankkontorOrSamarbetspartnerChanged($scope.valdSamarbetspart.value, $scope.samarbetsMottagare, $scope.valdaSamarbetsMottagare, $scope.samarbetsMottagareChangedResource); } }); $scope.$watch('valtFbKontor.value', function (newVal: number, oldVal: number) { if (newVal !== oldVal) { valtFbKontorChanged(); } }); $scope.$watch('valtfbKontorPostnummer.value', function (newVal: string, oldVal: string) { if (newVal !== oldVal) { valtfbKontorPostnummerChanged(); } }); }]);