/** * @ngdoc InstaellningarCtrl * @name fasit.component.#InstaellningarCtrl * @InstaellningarCtrl * * @description * Controllern för att visa system- och användarinställningar * */ angular.module('fasit') .controller('InstaellningarCtrl', [ '$scope', '$rootScope', '$translate', '$q', '$filter', 'instaellningarService', 'kontorsdelomraadeService', 'sideDrawerService', 'globalTimerService', 'signaturService', 'standardTextService', 'domainService', 'uiService', 'moejlighetService', 'medarbetareService', 'queueService', 'kontorService', 'commonService', 'kommunService', 'annonsleverantoerService', 'navigationService', 'dokumentpaketService', 'dokumentMallService', 'stateService', 'personService', function ( $scope: fb.IInstaellningarScope, $rootScope: fb.IRootScope, $translate: any, $q: ng.IQService, $filter: ng.IFilterService, instaellningarService: fb.IInstaellningarService, kontorsdelomraadeService: fb.IKontorsdelomraadeService, sideDrawerService: fb.ISideDrawerService, globalTimerService: fb.IGlobalTimerService, signaturService: fb.ISignaturService, standardTextService: fb.IStandardTextService, domainService: fb.IDomainService, uiService: fb.IUIService, moejlighetService: fb.IMoejlighetService, medarbetareService: fb.IMedarbetareService, queueService: fb.IQueueService, kontorService: fb.IKontorService, commonService: fb.ICommonService, kommunService: fb.IKommunService, annonsleverantoerService: fb.IAnnonsleverantoerService, navigationService: fb.INavigationService, dokumentpaketService: fb.IDokumentpaketService, dokumentMallService: fb.IDokumentMallService, stateService: fb.IStateService, personService: fb.IPersonService ) { 'use strict'; uiService.view(fb.FasITDomain.VyerNamn.Instaellningar); $scope['SignaturInstaellningarKontor'] = []; var dirtyQueue: fb.IQueue = queueService.get('dirty'); function removeCustomHurLaengeSkallAnvaendareSomSlutatVisas() { var inst = $scope.instaellningar[fb.InstaellningTyp.HurLaengeSkallAnvaendareSomSlutatVisas.id]; if (dirtyQueue.exists(inst.getGlobalUniqueId())) { dirtyQueue.remove(inst.getGlobalUniqueId()); } if (inst.InstaellningVaerdeId.value) { instaellningarService.remove(inst.InstaellningVaerdeId.value).$promise.then(function () { inst.InstaellningVaerdeId.originalValue = inst.InstaellningVaerdeId.value = null; }); } else { inst.InstaellningVaerdeId.originalValue = inst.InstaellningVaerdeId.value = null; } inst.InstaellningVaerde.originalValue = inst.InstaellningVaerde.value = inst.DefaultVaerde; } $scope.instaellningarInit = { $promise: instaellningarService.init(), $resolved: false }; $scope.fullViews = { fullViewConditionPersonliga: false, fullViewConditionKontoret: false } var expandKontoretsInstaellningar = stateService.loadState("InstaellningarCtrl", "expandKontorestInstaellningar"); if (expandKontoretsInstaellningar === true) { $scope.fullViews.fullViewConditionKontoret = true; stateService.clearState("InstaellningarCtrl", "expandKontorestInstaellningar"); } $scope['InstallningTyp'] = fb.InstaellningTyp; $scope.instaellningar = instaellningarService.instaellningar.instaellningar; $scope.instaellningarInit.$promise.then(function () { $scope.instaellningarInit.$resolved = true; }); $scope.instaellningarInit.$promise.then(function () { var inst: any = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.HurLaengeSkallAnvaendareSomSlutatVisas.id] || { InstaellningVaerdeId: {} }; $scope['useCustumAnvandareDagar'] = { value: inst.InstaellningVaerdeId.value !== null } // Initialer-inställningen är required var initialerInstaellning = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.AnvaendarInitialer.id].InstaellningVaerde; initialerInstaellning.required = true; $scope.hasDigitalBudgivning = (instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningAktiverad.id].InstaellningVaerde.value === true); }); $scope.$watch('useCustumAnvandareDagar.value', function (newVal: boolean, oldVal: boolean) { if (!_.isUndefined(oldVal) && newVal !== oldVal) { if (!newVal) { removeCustomHurLaengeSkallAnvaendareSomSlutatVisas(); } } }); $rootScope.$on("maeklarobjekt_duplicerat", () => { instaellningarService.laddaOmInstaellning(fb.InstaellningTyp.KontoretNaestaFakturaNummer); }); $scope.$watch('moejlightetVisningsbokningChecked.value', function (newVal: boolean, oldVal: boolean) { if (!_.isUndefined(oldVal) && newVal !== oldVal) { var inst = $scope.instaellningar[fb.InstaellningTyp.MoejlighetVisningsbokning.id]; //Om kryssrutan är inkryssad if (newVal) { //Om defaultvärdet är valt ska den inloggade användaren väljas if (inst.DefaultVaerde === inst.InstaellningVaerde.value) { var inloggadAnvId = $rootScope.InloggadAnvaendare.PersonId inst.InstaellningVaerde.setValue(inloggadAnvId.toString()); } } else { //Om det sparade värdet inte är defaultvärdet och kryssrutan kryssar ur, ska defaultvärdet sparas if (inst.DefaultVaerde !== inst.InstaellningVaerde.value) { inst.InstaellningVaerde.setValue(inst.DefaultVaerde); //Om det finns en pending sparning och kryssrutan kryssats ur, ska pending-sparningen tas bort } else { if (dirtyQueue.exists(inst.getGlobalUniqueId())) { dirtyQueue.remove(inst.getGlobalUniqueId()); } } } } }); /* MAILSIGNATURER */ // TODO: extrahera? var SignaturInstallningMap = [{ key: 'Namn', id: 11 }, { key: 'Titel', id: 12 }, { key: 'KontorNamn', id: 13 }, { key: 'Mobilnummer', id: 14 }, { key: 'Telefonnummer', id: 15 }, { key: 'URL', id: 16 }, { key: 'Adress', id: 17 }]; var SignaturInstallningKontorMap = [{ key: 'KontorNamn', id: 20 }, { key: 'Mobilnummer', id: 21 }, { key: 'Telefonnummer', id: 22 }, { key: 'URL', id: 23 }, { key: 'Adress', id: 24 }]; var kontorLista = kontorService.kontorIKontorsamarbete(); var medarbetareLista = medarbetareService.query(false); $scope.laeggTillAnnonsleverantoersNamn = new fb.ChangeTrack(null); $scope.annonsleverantoerList = annonsleverantoerService.query(); $q.all([$scope.annonsleverantoerList.$promise, $scope.instaellningarInit.$promise]).then(function () { $scope.ovaldaAnnonslev = $scope.filterOvaldaAnnonslev(); }); $scope.addAnnonsleverantoerListRow = function () { if ($scope.laeggTillAnnonsleverantoersNamn.value !== null) { $scope.valdaAnnonsLeverantoerer.push($scope.laeggTillAnnonsleverantoersNamn.value); $scope.ovaldaAnnonslev = $scope.filterOvaldaAnnonslev(); $scope.laeggTillAnnonsleverantoersNamn = new fb.ChangeTrack(null); } } $scope.deleteAnnonsleverantoerListRow = function (row: fb.AnnonsleverantoerLO) { var index = $scope.valdaAnnonsLeverantoerer.indexOf(row.AnnonsleverantoerId); if (index > -1) { $scope.valdaAnnonsLeverantoerer.splice(index, 1) } $scope.ovaldaAnnonslev = $scope.filterOvaldaAnnonslev(); } //Spara inställning för annonsleverantörer om den ändras. $scope.$watch('valdaAnnonsLeverantoerer.length', function (newVal, oldVal) { var annonsLeverantoerer = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.AnnonsLeverantoerer.id]; var instString = JSON.stringify($scope.valdaAnnonsLeverantoerer); annonsLeverantoerer.InstaellningVaerde.setValue(instString); }); //Uppdatera beskrivningen när man byter selected annonsleverantör. $scope.$watch('laeggTillAnnonsleverantoersNamn.value', function (newVal, oldVal) { $scope.setSelectedBeskrivning(); }); $scope.setSelectedBeskrivning = function () { var it = _.find($scope.annonsleverantoerList, function (item: fb.AnnonsleverantoerLO) { if ($scope.laeggTillAnnonsleverantoersNamn.value === item.AnnonsleverantoerId) { return true; } return false; }); if (it !== undefined) { $scope.valdAnnonsleverantoerBeskrivning = new fb.ChangeTrack(it.AnnonsleverantoerBeskrivning); } } $scope.filterValdaAnnonslev = function () { return _.filter($scope.annonsleverantoerList, function (item: fb.AnnonsleverantoerLO) { for (var i = 0; i < $scope.valdaAnnonsLeverantoerer.length; i++) { if ($scope.valdaAnnonsLeverantoerer[i] === item.AnnonsleverantoerId) { return true; } } return false; }); } $scope.filterOvaldaAnnonslev = function () { return _.filter($scope.annonsleverantoerList, function (item: fb.AnnonsleverantoerLO) { for (var i = 0; i < $scope.valdaAnnonsLeverantoerer.length; i++) { if ($scope.valdaAnnonsLeverantoerer[i] === item.AnnonsleverantoerId) { return false; } } return true; }); } $scope.instaellningarInit.$promise.then(function () { var annonsLeverantoerer = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.AnnonsLeverantoerer.id]; var instaellning; if (annonsLeverantoerer.InstaellningVaerde.originalValue) { //Man borde inte använda originalValue på det här viset egentligen, men det funkade inte med value i just det här fallet och vi hinner inte lösa det på något annat sätt just nu. instaellning = JSON.parse(annonsLeverantoerer.InstaellningVaerde.originalValue); } else { instaellning = JSON.parse('[]'); } $scope.valdaAnnonsLeverantoerer = instaellning; if (instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningAktiverad.id].InstaellningVaerde.value) { var smsIntressentListaVaerde = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningSmsIntressenter.id]; var smsInstaellningIntressent; if (smsIntressentListaVaerde.InstaellningVaerde.originalValue) { smsInstaellningIntressent = JSON.parse(smsIntressentListaVaerde.InstaellningVaerde.originalValue); } else { smsInstaellningIntressent = JSON.parse('[]'); } $scope.smsIntressentLista = smsInstaellningIntressent; var smsRollerListaVaerde = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningSmsRoller.id]; var smsRollerIntressent; if (smsRollerListaVaerde.InstaellningVaerde.originalValue) { smsRollerIntressent = JSON.parse(smsRollerListaVaerde.InstaellningVaerde.originalValue); } else { smsRollerIntressent = JSON.parse('[]'); } $scope.smsRollerLista = smsRollerIntressent; $scope.$watch('smsIntressentLista.length', function (newVal, oldVal) { var smsIntressentListaVaerde = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningSmsIntressenter.id]; var instString = JSON.stringify($scope.smsIntressentLista); smsIntressentListaVaerde.InstaellningVaerde.setValue(instString); }); $scope.$watch('smsRollerLista.length', function (newVal, oldVal) { var smsRollerListaVaerde = instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.DigitalBudgivningSmsRoller.id]; var instString = JSON.stringify($scope.smsRollerLista); smsRollerListaVaerde.InstaellningVaerde.setValue(instString); }); } var inloggadAnvId = $rootScope.InloggadAnvaendare.PersonId; $q.all([kontorLista.$promise, medarbetareLista.$promise]).then(function () { var medarbetareArrayFiltered = commonService.filterMedarbetareList(medarbetareLista, []); //Lägg in alla medarbetare i listan, och välj inloggad användare som default $scope.medarbetareArray = []; $scope.medarbetareArray = $scope.medarbetareArray.concat( _.map(medarbetareArrayFiltered, function (medarbetare: fb.Medarbetare) { if (medarbetare.PersonId.value === inloggadAnvId && instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.MoejlighetVisningsbokning.id].InstaellningVaerde.value === instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.MoejlighetVisningsbokning.id].DefaultVaerde) { return { Id: '-1', Namn: medarbetare.Personnamn.value } } else { return { Id: medarbetare.PersonId.value.toString(), Namn: medarbetare.Personnamn.value } } }) ); //Lägg in alla medarbetare iu listan, alla kontor samt välj inloggad användare som default $scope.medarbetareOchKontorArray = []; $scope.medarbetareOchKontorArray = $scope.medarbetareOchKontorArray.concat( _.map(kontorLista, function (kontor: fb.KontorLO) { return { Id: 'k_' + kontor.KontorId, Namn: kontor.Kontorsnamn, IsKontor: true } }), _.map(medarbetareArrayFiltered, function (medarbetare: fb.Medarbetare) { if (medarbetare.PersonId.value === inloggadAnvId) { return { Id: '-1', Namn: medarbetare.Personnamn.value, IsKontor: false } } else { return { Id: 'p_' + medarbetare.PersonId.value, Namn: medarbetare.Personnamn.value, IsKontor: false } } })); }); //Initiera checkbox för möjlighet - visningsbokning $scope.moejlightetVisningsbokningChecked = new fb.ChangeTrack(instaellningarService.instaellningar.instaellningar[fb.InstaellningTyp.MoejlighetVisningsbokning.id].InstaellningVaerde.value !== "-1"); }); $scope.spraakNamnOptionList = domainService.getSpraakDomain(); $rootScope.InloggadAnvaendare.promise.then(function () { const personId = $rootScope.InloggadAnvaendare.PersonId; $scope.spraakNamn = personService.haemtaSpraakKunskaper(personId); // Måste ha detta för objektet köas inte när man ändrar i lista annars $scope.$watchCollection(() => $scope.spraakNamn.SpraakIdList, function (newVal: number[], oldVal: number[]) { if (newVal !== oldVal && newVal && oldVal && newVal.length !== oldVal.length) { $scope.spraakNamn.enqueue(); } }); }); var kommunList = kommunService.queryKommunOchKontorViaFoersamling(); $scope.instaellningarInit.$promise.then(function () { var inloggatKontorId = $rootScope.InloggadAnvaendare.InloggatKontorId; kommunList.$promise.then(function () { $scope.kommunList = _.sortBy(_.uniq(kommunList, function (k) { return k.KommunId; }), function (k) { return k.Kommunnamn; }); var defaultKommun = _.findWhere(kommunList, { KontorId: inloggatKontorId }); var defKommunId: number; if (typeof defaultKommun !== 'undefined') { defKommunId = defaultKommun.KommunId; } $scope.kommunList = _.map($scope.kommunList, function (kommun: fb.KommunOchKontorViaFoersamlingLO) { if (typeof defKommunId !== 'undefined' && kommun.KommunId === defKommunId) { return { Kommunnamn: kommun.Kommunnamn, KommunId: -1, KontorId: kommun.KontorId }; } else { return { Kommunnamn: kommun.Kommunnamn, KommunId: kommun.KommunId, KontorId: kommun.KontorId }; } }); }); }); $scope['signaturInstaellningar'] = []; $scope['signaturInstaellningarStandard'] = []; $scope['signaturInstaellningarPerson'] = []; $scope.instaellningarInit.$promise.then(function () { var inloggadAnvaendareId = $rootScope.InloggadAnvaendare.PersonId; var inloggatKontorId = $rootScope.InloggadAnvaendare.InloggatKontorId; $scope.isUtland = $rootScope.InloggadAnvaendare.BostadsmarknadId === fb.FasITDomain.Bostadsmarknad.UTLAND; $scope.signaturDefault = signaturService.getPersonDefaultSignatur(inloggadAnvaendareId); $scope.signaturDefaultKontor = signaturService.getKontorDefaultSignatur(inloggatKontorId); $q.all([$scope.signaturDefault.$promise, $scope.signaturDefaultKontor.$promise]).then(function (res) { _.each(SignaturInstallningMap, function (obj) { $scope['signaturInstaellningarPerson'].push({ obj: $scope.instaellningar[obj.id], standard: ($scope.signaturDefault[obj.key] || $filter<(string) => string>('translate')('INSTAELLNINGAR.SAKNAS_UPPGIFT')), key: $filter<(string) => string>('translate')('INSTAELLNINGAR.KEYS.' + obj.key) }); }); _.each(SignaturInstallningKontorMap, function (obj) { $scope['signaturInstaellningar'].push({ obj: $scope.instaellningar[obj.id], standard: ($scope.signaturDefaultKontor[obj.key] || $filter<(string) => string>('translate')('INSTAELLNINGAR.SAKNAS_UPPGIFT')), key: $filter<(string) => string>('translate')('INSTAELLNINGAR.KEYS.' + obj.key) }); }); }); }); $scope.options = { callto: [ { key: $translate.instant('INSTAELLNINGAR.RING_LAENKAR.CALLTO'), value: true }, { key: $translate.instant('INSTAELLNINGAR.RING_LAENKAR.TEL'), value: false } ], utskriftLogga: [ { key: $translate.instant('INSTAELLNINGAR.UTSKRIFT.MED_LOGGA'), value: true }, { key: $translate.instant('INSTAELLNINGAR.UTSKRIFT.UTAN_LOGGA'), value: false } ], digitalBudgivningBudgivningstyp: [ { key: $translate.instant('INSTAELLNINGAR.DIGITAL_BUDGIVNING.BUDGIVNINGSTYP.MANUELL'), value: 0 }, { key: $translate.instant('INSTAELLNINGAR.DIGITAL_BUDGIVNING.BUDGIVNINGSTYP.AUTOMATISK'), value: 1 } ], intressegradsalternativ: [{ key: $translate.instant('INTRESSEGRAD.DELTAR_I_BUDGIVNINGEN'), value: fb.FasITDomain.Intressegrad.DELTAR_I_BUDGIVNINGEN }, { key: $translate.instant('INTRESSEGRAD.STANNAT_I_BUDGIVNINGEN'), value: fb.FasITDomain.Intressegrad.STANNAT_I_BUDGIVNINGEN }, { key: $translate.instant('INTRESSEGRAD.MYCKET_INTRESSERAD'), value: fb.FasITDomain.Intressegrad.MYCKET_INTRESSERAD }, { key: $translate.instant('INTRESSEGRAD.VARIT_PAA_VISNING'), value: fb.FasITDomain.Intressegrad.VARIT_PAA_VISNING }, { key: $translate.instant('INTRESSEGRAD.BOKAD_PAA_VISNING'), value: fb.FasITDomain.Intressegrad.BOKAD_PAA_VISNING }, { key: $translate.instant('INTRESSEGRAD.INTRESSERAD'), value: fb.FasITDomain.Intressegrad.INTRESSERAD }], objIntressentRollsAlternativ: [{ key: $translate.instant('OBJEKTINTRESSENTROLLID.SAELJARE'), value: fb.FasITDomain.ObjIntressentRoll.SAELJARE }, { key: $translate.instant('OBJEKTINTRESSENTROLLID.SAELJARENSKONTAKTPERSON'), value: fb.FasITDomain.ObjIntressentRoll.SAELJARENS_KONTAKTPERSON }, { key: $translate.instant('OBJEKTINTRESSENTROLLID.EXTRAKONTAKT'), value: fb.FasITDomain.ObjIntressentRoll.MAEKLARASSISTENT }, { key: $translate.instant('MAEKLAROBJEKT.ANSVARIG_MAEKLARE'), value: fb.FasITDomain.ObjIntressentRoll.ANSVARIG_PERSON }], avsaendareIBudSMS: [ { key: $translate.instant('MAEKLAROBJEKT.ANSVARIG_MAEKLARE'), value: fb.FasITDomain.AvsaendareIBudSMS.ANSVARIG_MAEKLARE }, { key: $translate.instant('GLOBALS.INLOGGAD_ANVAENDARE'), value: fb.FasITDomain.AvsaendareIBudSMS.INLOGGAD_ANVAENDARE }, ], visasPaaObjektMenyn: [ { key: $translate.instant('INSTAELLNINGAR.ADRESS_SAELJARE'), value: 1 }, { key: $translate.instant('INSTAELLNINGAR.ADRESS_OBJEKTNR'), value: 2 } ], }; $scope.openFakturor = function () { navigationService.goto(new fb.NavigationsObjekt({ ObjektTypId: fb.NavigationsObjektTypId.FAKTUROR })); }; // defaultmottagareMoejlighet $scope.defaultmottagareMoejlighet = moejlighetService.getDefaultUtfoerare(); $scope.defaultmottagareMoejlighetList = new fb.List([]); var medarbetareArray = medarbetareService.query(false); medarbetareArray.$promise.then(function () { var kontor = new fb.Medarbetare({ PersonId: null, Personnamn: 'Kontor' }); $scope.defaultmottagareMoejlighetList = new fb.List([kontor].concat(_.sortBy(_.uniq(medarbetareArray, function (m: fb.Medarbetare) { return m.PersonId.value; }), function (m: fb.Medarbetare) { return m.Personnamn.value; }))); }); //DokumentMallPaket //setup $scope.instaellningarInit.$promise.then(function () { $scope.objektTypIndex = []; _.forEach(fb.FasITDomain.ObjektTypIdList.Typer, function (item) { $scope.objektTypIndex.push(item.Value); }); $scope.objektTypList = domainService.objekttyper.queryForInstaellningar($scope.isUtland); var inloggadAnvId = $rootScope.InloggadAnvaendare.PersonId; $scope.dokumentpaketLista = dokumentpaketService.queryPerson(inloggadAnvId); $scope.dokumentMallArrayPerObjektTyp = []; $scope.allaDokumentMallar = []; $scope.allaDokumentMallarIndex = []; getAllaDokumentmallar(); $scope.newDokumentpaket = new fb.DokumentMallPaketDO(null); $scope.newDokumentpaket.PersonId.value = inloggadAnvId; $scope.newDokumentpaket.DokumentMallVersionIds = []; $scope.newDokumentpaket.DokumentMallPaketNamn.required = true; $scope.newDokumentVersionId = new fb.ChangeTrack(-1); $scope.$watch(() => $scope.newDokumentVersionId.value, function (newVal, oldVal) { if (newVal !== undefined && newVal !== -1 && newVal !== null) { $scope.addDokument(newVal); $scope.newDokumentVersionId.value = null; } }); //Vid val av objekttyp för nytt dokumentpaket, sätt array till möjliga dokument $scope.$watch(() => $scope.newDokumentpaket.ObjektTypId.value, function (newVal, oldVal) { if ($scope.newDokumentpaket !== undefined && $scope.newDokumentpaket.ObjektTypId.value !== null) { $scope.dokumentMallarFoerEnObjektTyp = $scope.dokumentMallArrayPerObjektTyp[$scope.objektTypIndex.indexOf($scope.newDokumentpaket.ObjektTypId.value)]; } }); $scope.edit = false; $scope.add = false; }); function getAllaDokumentmallar() { $scope.dokumentMallArrayPerObjektTyp = (fb.FasITDomain.ObjektTypIdList.Typer).map(function (item) { return dokumentMallService.getDokumentMallarFoerObjektTyp(item.Value); }); $q.all($scope.dokumentMallArrayPerObjektTyp.map(function (item) { return item.$promise; })).then(function () { _.forEach($scope.dokumentMallArrayPerObjektTyp, function (listFoerEnTyp) { _.forEach(listFoerEnTyp, function (dmall: fb.DokumentMallLO) { $scope.allaDokumentMallar.push(dmall); $scope.allaDokumentMallarIndex.push(dmall.DokumentMallVersionId); }); }); if ($scope.isUtland) { $scope.newDokumentpaket.ObjektTypId.value = $scope.objektTypList[0].val; } }); } $scope.setEdit = function (b: boolean) { $scope.edit = b; }; $scope.setAdd = function (b: boolean) { $scope.add = b; }; $scope.showEdit = function () { return $scope.edit; }; $scope.showAdd = function () { return $scope.add; }; //DOKUMENTPAKET $scope.addDokumentpaket = function () { var index = $scope.newDokumentpaket.DokumentMallVersionIds.length; if (index > 0) { // kan inte lägga till dokumentpaket utan att det innehåller dokument $scope.newDokumentpaket.Ordningsnummer.value = $scope.dokumentpaketLista.length; if (($scope.edit && $scope.newDokumentpaket.DokumentMallPaketNamn.value !== $scope.editPaket.DokumentMallPaketNamn.value) || $scope.add) { var add = dokumentpaketService.add($scope.newDokumentpaket); add.$promise.then(function (data) { $scope.dokumentpaketLista.push(add); }); } } $scope.setAdd(false); $scope.setEdit(false); $scope.emptyNewDokumentpaket(); } $scope.deleteDokumentpaket = function (dp: fb.DokumentMallPaketDO) { var remove = dokumentpaketService.remove(dp.DokumentMallPaketId.value); remove.$promise.then(function () { for (var i = 0; i < $scope.dokumentpaketLista.length; ++i) { if ($scope.dokumentpaketLista[i].DokumentMallPaketId.value === dp.DokumentMallPaketId.value) { $scope.dokumentpaketLista.splice(i, 1); } } _.forEach($scope.dokumentpaketLista, function (item) { if (item.Ordningsnummer.value > dp.Ordningsnummer.value) { item.Ordningsnummer.setValue(item.Ordningsnummer.value - 1); } }); }); }; $scope.sortDokumentpaket = function (dp, up) { var dpOrdning = dp.Ordningsnummer.value; var closest: fb.DokumentMallPaketDO = null; var closestOrdning: number = Number.MAX_VALUE; _.each($scope.dokumentpaketLista, function (item) { if (item.DokumentMallPaketId.value !== dp.DokumentMallPaketId.value) { var vaerdet; if (!up) { vaerdet = item.Ordningsnummer.value - dpOrdning; } else { vaerdet = dpOrdning - item.Ordningsnummer.value; } if (vaerdet > 0 && vaerdet < closestOrdning) { closest = item; closestOrdning = vaerdet; } } }); if (closest) { var temp = dp.Ordningsnummer.value; dp.setValue(dp.Ordningsnummer, closest.Ordningsnummer.value); closest.setValue(closest.Ordningsnummer, temp); } }; $scope.editDokumentpaket = function (paket: fb.DokumentMallPaketDO) { $scope.setAdd(false); $scope.setEdit(true); $scope.editPaket = paket; $scope.newDokumentpaket.DokumentMallPaketNamn.value = paket.DokumentMallPaketNamn.value; $scope.newDokumentpaket.DokumentMallVersionIds = paket.DokumentMallVersionIds.map(function (item) { return new fb.ChangeTrack(item.value) }); $scope.newDokumentpaket.ObjektTypId.value = paket.ObjektTypId.value; $scope.newDokumentpaket.PersonId.value = paket.PersonId.value; }; $scope.updateDokumentpaket = function () { if ($scope.newDokumentpaket.DokumentMallVersionIds.length === 0) { // Inga dokument kvar. Ta bort paketet $scope.deleteDokumentpaket($scope.editPaket); } else { $scope.editPaket.DokumentMallPaketNamn.setValue($scope.newDokumentpaket.DokumentMallPaketNamn.value); $scope.editPaket.DokumentMallVersionIds = $scope.newDokumentpaket.DokumentMallVersionIds; $scope.editPaket.ObjektTypId = $scope.newDokumentpaket.ObjektTypId; dokumentpaketService.save($scope.editPaket).$promise.then(function () { $scope.dokumentpaketLista = dokumentpaketService.queryPerson($rootScope.InloggadAnvaendare.PersonId); }); } $scope.setAdd(false); $scope.setEdit(false); $scope.emptyNewDokumentpaket(); } $scope.emptyNewDokumentpaket = function () { $scope.newDokumentpaket = new fb.DokumentMallPaketDO(null); //töm newDok och var redo för nytt paket $scope.newDokumentpaket.PersonId.value = $rootScope.InloggadAnvaendare.PersonId; $scope.newDokumentpaket.DokumentMallVersionIds = []; $scope.dokumentMallarFoerEnObjektTyp = null; $scope.newDokumentVersionId = new fb.ChangeTrack(-1); }; //DOKUMENT $scope.addDokument = function (id: number) { if (id !== -1 && !_.some($scope.newDokumentpaket.DokumentMallVersionIds, function (item: fb.ChangeTrack) { return item.value === id; })) { //dokument valt och inga dubletter var index = $scope.newDokumentpaket.DokumentMallVersionIds.length; $scope.newDokumentpaket.DokumentMallVersionIds[index] = new fb.ChangeTrack(id); } }; $scope.deleteDokument = function (paket: fb.DokumentMallPaketDO, index: number, newDokument = false) { if (paket.DokumentMallVersionIds.length) { paket.DokumentMallVersionIds.splice(index, 1); if (!newDokument) { //om det är ett nytt paket som redigeras så ska det inte postas if (!paket.DokumentMallVersionIds.length) { $scope.deleteDokumentpaket(paket); } else { dokumentpaketService.save(paket); } } } }; $scope.sortDokument = function (paket: fb.DokumentMallPaketDO, index: number, up: boolean) { if (paket.DokumentMallVersionIds) { var moves = paket.DokumentMallVersionIds[index].value; if (up && index >= 1) { paket.DokumentMallVersionIds[index].setValue(paket.DokumentMallVersionIds[index - 1].value); paket.DokumentMallVersionIds[index - 1].setValue(moves); } else if (!up && index < paket.DokumentMallVersionIds.length - 1) { paket.DokumentMallVersionIds[index].setValue(paket.DokumentMallVersionIds[index + 1].value); paket.DokumentMallVersionIds[index + 1].setValue(moves); } } }; $scope.deleteNewDokument = function (index: number) { $scope.deleteDokument($scope.newDokumentpaket, index, true); }; $scope.sortNewDokument = function (index: number, up: boolean) { $scope.sortDokument($scope.newDokumentpaket, index, up); }; $scope.getDokumentMallNamn = function (id: number) { var dokument = $scope.allaDokumentMallar[$scope.allaDokumentMallarIndex.indexOf(id)]; return (dokument) ? dokument.DokumentMallNamn : fb.FasITDomain.Dokumentpaket.EJ_NAMN; }; $scope.noName = function (id: number) { return (id === undefined) ? false : $scope.allaDokumentMallarIndex.indexOf(id) === -1; } //End Dokumentpaket }]);