angular.module('fasit').controller('JournalSideDrawerCtrl', [ '$scope', '$rootScope', '$filter', '$q', 'commonService', 'filService', 'globalTimerService', 'haendelseService', 'intressentService', 'journalService', 'medarbetareService', 'personVisningarService', 'sideDrawerService', 'visningService', 'maeklarObjektVillkorService', function ( $scope: fb.IJournalSideDrawerScope, $rootScope: fb.IRootScope, $filter: ng.IFilterService, $q: ng.IQService, commonService: fb.ICommonService, filService: fb.IFilService, globalTimerService: fb.IGlobalTimerService, haendelseService: fb.IHaendelseService, intressentService: fb.IIntressentService, journalService: fb.IJournalService, medarbetareService: fb.IMedarbetareService, personVisningarService: fb.IPersonVisningarService, sideDrawerService: fb.ISideDrawerService, visningService: fb.IVisningService, maeklarObjektVillkorService: fb.IMaeklarObjektVillkorService ) { 'use strict'; var niceDate = $filter('niceDate'); var translate = $filter('translate'); var maeklarObjekt: fb.MaeklarObjektDO = sideDrawerService.getParams().maeklarObjekt; let villkor: fb.MaeklarObjektVillkor = maeklarObjektVillkorService.get(maeklarObjekt.MaeklarObjektId.value); var medarbetare = medarbetareService.query(false); var ansvarigMaeklare = intressentService.query(maeklarObjekt.MaeklarObjektId.value, fb.ObjektIntressentRollId.AnsvarigPerson); var visningar = visningService.query(maeklarObjekt.MaeklarObjektId.value); var toggledKategorier = {}; var openInfoPopups = {}; var punktInfoTexter = { '-1': 'Infotext' }; var katOrder = { // Nycklad på JournalPunktKategoriTypId '13': 1, // Uppdrag '11': 2, // Visning '2': 3, // Inför avtalsskrivning '0': 4, // Avtalsskrivning '1': 5, // Efter avtalsskrivning '3': 6, // Inför tillträde '9': 7, // Tillträde '14': 8, // Uppdraget upphört utan överlåtelse '12': 99999 // Egen definierad anteckning }; var templatePunktEgenDef: fb.JournalPunkt; var datumDefault: fb.IJournalDatumAction[] = [ { Typ: -1, Namn: translate('MAEKLAROBJEKT_JOURNAL.DATE_ACTION_KLART_IDAG'), Datum: moment().format('YYYY-MM-DDT00:00:00'), }, { Typ: -2, Namn: translate('MAEKLAROBJEKT_JOURNAL.DATE_ACTION_EGET_DATUM'), }, { Typ: -3, Namn: translate('MAEKLAROBJEKT_JOURNAL.DATE_ACTION_STRYK_UPPGIFTEN'), }, { Typ: -4, Namn: translate('MAEKLAROBJEKT_JOURNAL.DATE_ACTION_RENSA_UPPGIFTEN'), }]; if (maeklarObjekt && maeklarObjekt.isObjektIProjekt()) { $scope.AerObjektIProjekt = true; } function buildDatumVal(): { $promise: ng.IPromise } { var datumValDefer = $q.defer(); var val = { $promise: datumValDefer.promise }; val[fb.JournalPunktDatumValTyp.Intagsfoersoek] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Intagsfoersoek'), Datum: maeklarObjekt.DatumForIntagsforsok.value }]; val[fb.JournalPunktDatumValTyp.Uppdragsdag] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Uppdragsdag'), Datum: maeklarObjekt.Uppdragsdag.value }]; val[fb.JournalPunktDatumValTyp.Avtal] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Avtal'), Datum: maeklarObjekt.Avtalsdag.value }]; villkor.$promise.then(() => val[fb.JournalPunktDatumValTyp.VillkorMedlem] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.VillkorMedlem'), Datum: villkor.MedlemskapDatum.value }] ); val[fb.JournalPunktDatumValTyp.IntagsfoersoekOchUppdrag] = [ { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Intagsfoersoek'), Datum: maeklarObjekt.DatumForIntagsforsok.value }, { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Uppdragsdag'), Datum: maeklarObjekt.Uppdragsdag.value } ]; val[fb.JournalPunktDatumValTyp.HandpenningErlagd] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.HandpenningErlagd'), Datum: maeklarObjekt.HandpenningErlagdDatum.value }]; val[fb.JournalPunktDatumValTyp.HandpenningRedovisad] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.HandpenningRedovisad'), Datum: maeklarObjekt.HandpenningRedovisadDatum.value }]; val[fb.JournalPunktDatumValTyp.Tilltraede] = [{ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Tilltraede'), Datum: maeklarObjekt.TilltraedelseDatum.value }]; var annonseringFB = _.find(maeklarObjekt.ObjektAnnons, function (a: fb.Models_ObjektAnnonsRO) { return a.SystemNamn.value === 'Externen'; }); val[fb.JournalPunktDatumValTyp.Annonsering] = []; if (!_.isUndefined(annonseringFB)) { val[fb.JournalPunktDatumValTyp.Annonsering].push({ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.AnnonseringFB'), Datum: annonseringFB.SenastAktiveradDatum.value }); } var annonseringHemnet = _.find(maeklarObjekt.ObjektAnnons, function (a: fb.Models_ObjektAnnonsRO) { return a.SystemNamn.value === 'Hemnet'; }); if (!_.isUndefined(annonseringHemnet)) { val[fb.JournalPunktDatumValTyp.Annonsering].push({ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.AnnonseringHemnet'), Datum: annonseringHemnet.SenastAktiveradDatum.value }); } var annonseringLeverantoer = _.find(maeklarObjekt.ObjektAnnons, function (a: fb.Models_ObjektAnnonsRO) { return a.SystemTyp.value === 2; }); if (!_.isUndefined(annonseringLeverantoer)) { val[fb.JournalPunktDatumValTyp.Annonsering].push({ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.AnnonseringLeverantoer') + ' ' + annonseringLeverantoer.SystemNamn.value, Datum: annonseringLeverantoer.SenastAktiveradDatum.value }); } var intressentKoepare = intressentService.query(maeklarObjekt.MaeklarObjektId.value, fb.FasITDomain.ObjIntressentRoll.KOEPARE); intressentKoepare.$promise.then(function () { var flatten = _.reduce(intressentKoepare, function (res, objIntressent: fb.Objektintressent) { return res.concat(objIntressent.Underkontakter); }, intressentKoepare.toArray()); var koepareWithVisning = _.filter(flatten, function (objIntressent: fb.Objektintressent) { return objIntressent.ObjektIntressentRoll.value === fb.FasITDomain.ObjIntressentRoll.KOEPARE && objIntressent.Visningar.length > 0; }); val[fb.JournalPunktDatumValTyp.KoepareVisning] = _.flatten(_.map(koepareWithVisning, function (objIntressent: fb.Objektintressent) { return _.map(objIntressent.Visningar, function (v: fb.IVisningSlot) { return { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.KoepareVisning', { personNamn: objIntressent.PersonNamn.value }), Datum: v.AktivitetStart.value, VisningId: v.VisningId.value }; }); })); val[fb.JournalPunktDatumValTyp.VisningKoepareOchAvtalsdag] = _.flatten(_.map(koepareWithVisning, function(objIntressent: fb.Objektintressent) { return _.map(objIntressent.Visningar, function(v: fb.IVisningSlot) { return { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.KoepareVisning', { personNamn: objIntressent.PersonNamn.value }), Datum: v.AktivitetStart.value, VisningId: v.VisningId.value }; }); })); val[fb.JournalPunktDatumValTyp.VisningKoepareOchAvtalsdag].push({ Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Avtal'), Datum: maeklarObjekt.Avtalsdag.value }); }); visningar.$promise.then(function () { val[fb.JournalPunktDatumValTyp.Visning] = _.map(visningar, function (visning: fb.Visning) { return { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Visning'), Datum: visning.AktivitetStart.value, VisningId: visning.AktivitetId.value }; }); }); var haendelseList = haendelseService.getMaeklarObjektList(maeklarObjekt.MaeklarObjektId.value); haendelseList.$promise.then(function () { var lyckadeBestaelldaFoersaekringar = _.map(_.sortBy(_.filter(haendelseList, function (h: fb.HaendelseLO) { return h.HaendelseKlass === fb.HaendelseKlass.FOERSAEKRINGSBESTAELLNING && h.HaendelseTyp === fb.HaendelseTyp_Foersakringsbestaellning.LYCKAD; }, function (h: fb.HaendelseLO) { return moment(h.HaendelseDatum); })), function (h: fb.HaendelseLO) { return { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.FoersaekingBestaelld'), Datum: h.HaendelseDatum }; }); val[fb.JournalPunktDatumValTyp.FoersaekingBestaelld] = lyckadeBestaelldaFoersaekringar; }); var filList = filService.maeklarObjekt.query(maeklarObjekt.MaeklarObjektId.value); filList.$promise.then(function () { var lantmaeteriUtdrag = _.map(_.sortBy(_.filter(filList, function (f: any) { return f.FilTyp.value === fb.FasITDomain.FilTyp.LMUTDRAG_FAST_TOMT || f.FilTyp.value === fb.FasITDomain.FilTyp.LMUTDRAG_GA_SAMF; }), function (f: any) { return f.UppladdatDatum.value; }), function (f: any) { return { Namn: translate('MAEKLAROBJEKT_JOURNAL.DATUMTYP.Lantmaeteriutdrag'), Datum: f.UppladdatDatum.value }; }); val[fb.JournalPunktDatumValTyp.Lantmaeteriutdrag] = lantmaeteriUtdrag; }); $q.all([intressentKoepare.$promise, haendelseList.$promise, filList.$promise]).finally(function () { datumValDefer.resolve(); }); return val; } function isAnyPopupShown() { return _.contains(_.values(openInfoPopups), true); } function getKategoriKey(keyHolder: fb.IJournalPunktKategoriKey): string { return keyHolder.JournalPunktKategoriTypId.value + '#' + keyHolder.VisningId.value; } function getVisningDatumText(dateTimeStart: string, dateTimeSlut?: string) { var hideTime = commonService.date.timePart(dateTimeStart) === ('00:00:00') && commonService.date.timePart(dateTimeSlut) === ('00:00:00') var start = moment(dateTimeStart); var text = start.isValid() ? niceDate(dateTimeStart, true, !hideTime) : ''; if (!_.isUndefined(dateTimeSlut) && !hideTime) { var slut = moment(dateTimeSlut); text += slut.isValid() ? (' - ' + slut.format('HH:mm')) : ''; } return text; } function resolveJournalPunkt(p: fb.JournalPunkt): fb.JournalPunkt { var resolvePunkt: fb.JournalPunkt; if (p.$resolved === true) { return p; } p['isResolving'] = true; if (p.JournalPunktDataId.value === null) { // Skapa punkt p.MaeklarObjektId = new fb.ChangeTrack(maeklarObjekt.MaeklarObjektId.value); resolvePunkt = journalService.addJournalPunkt(new fb.JournalPunkt(commonService.changeTrack.fromChangeTrackObject(p, false))); } else { // Hämta punkt resolvePunkt = journalService.getJournalPunkt(p.JournalPunktDataId.value); } resolvePunkt.$promise.then(function () { resolvePunkt['expanded'] = p['expanded']; // Kom ihåg expand-state resolvePunkt.VisningId = p.VisningId; resolvePunkt.VisningsTyp = p.VisningsTyp; // Fält som DO saknar resolvePunkt.JournalPunktKategoriTypId = p.JournalPunktKategoriTypId; resolvePunkt.AnteckningObligatorisk = p.AnteckningObligatorisk; resolvePunkt.Laenk = p.Laenk; resolvePunkt.DatumValTyp = p.DatumValTyp; resolvePunkt.Ordning = p.Ordning; resolvePunkt.JournalPunktTypNamn = p.JournalPunktTypNamn; resolvePunkt.AnsvarigPersonId.setValue(resolvePunkt.AnsvarigPersonId.value || null); // Fält som rensas, används för egna journalpunkter resolvePunkt.JournalPunktTypSynligtNamn.setValue(p.JournalPunktTypSynligtNamn.value); var punkter = $scope.punkterPerKategoriId[getKategoriKey(resolvePunkt)]; var index = _.indexOf(punkter, p); punkter[index] = resolvePunkt; }); return resolvePunkt; } function updateKlarmarkeradCount() { _.each(_.keys($scope.punkterPerKategoriId), function (key: string) { $scope.klarmarkeradePunkterPerKategoriId[key] = _.filter($scope.punkterPerKategoriId[key], function (p: fb.JournalPunkt) { return $scope.isKlarmarkerad(p); }).length; }); updateTotalklarmarkeradCount(); } function updateTotalklarmarkeradCount() { var punkter = _.flatten(_.values($scope.punkterPerKategoriId)); var totalt = punkter.length; var klara = _.filter(punkter, function (p: fb.JournalPunkt) { return $scope.isKlarmarkerad(p); }).length; $scope.totalProgress.TotaltAntalJournalPunkter.value = totalt; $scope.totalProgress.AntalUtfoerdaJournalPunkter.value = klara; } function isValidDateTimeString(dateTime: string): boolean { return dateTime !== 'T00:00:00' && dateTime !== '00:00:00' && dateTime !== '' && dateTime !== null; } function setKlart(p: fb.JournalPunkt, datum: string) { // Antar LO if ($scope.isMissingAnteckning(p)) { return; } p = resolveJournalPunkt(p) p.$promise.then(function () { p.JournalPunktStatus.setValue(fb.JournalPunktStatus.Utfoerd); datum = commonService.date.clearTime(datum); p.UtfoerdDatum.setValue(datum); if (p.AnsvarigPersonId.value === null) { p.AnsvarigPersonId.setValue(ansvarigMaeklare[0].PersonId.value); } updateKlarmarkeradCount(); }); } var datumVal = buildDatumVal(); // j-s-h-i-n-t tvingade mig att flytta detta hit globalTimerService.globalSave(true).finally(function () { // Se till att alla tidgare punkter är sparade innan journalen hämtas igen var journal = journalService.getJournal(maeklarObjekt.MaeklarObjektId.value); $scope.journalKategorier = []; $scope.punkterPerKategoriId = {}; $scope.klarmarkeradePunkterPerKategoriId = {}; $scope.isJournalResolved = { $resovled: false }; $scope.totalProgress = sideDrawerService.getParams().journalProgress; $scope.isMaeakarObjektSaalt = maeklarObjekt.UppdragStatus.value === fb.FasITDomain.UppdragStatus.SAALD $scope.closeSideDrawer = function (fromHeader?: boolean) { // Tvinga sparning av sparkö vid stängning av sidedrawer globalTimerService.globalSave(true); if (!fromHeader) { sideDrawerService.clearDrawer(); } } $scope.startaOm = function () { $scope.isJournalResolved.$resolved = false; globalTimerService.globalSave(true).then(function () { var newJournal = journalService.startaOmJournal(maeklarObjekt.MaeklarObjektId.value); $q.all([globalTimerService.globalSave(true).$promise, newJournal.$promise]).then(function () { $scope.totalProgress.AntalUtfoerdaJournalPunkter.value = 0; $scope.totalProgress.TotaltAntalJournalPunkter.value = newJournal.JournalList.length; sideDrawerService.clearDrawer(); sideDrawerService.setSideDrawer('Journal', { maeklarObjekt: maeklarObjekt, journalProgress: $scope.totalProgress }, '820px'); }); }); } $scope.getMissingPerson = function (personId) { var found = _.find(medarbetareService.query(true), function (medarbetare: fb.Medarbetare) { return medarbetare.PersonId.value === personId; }); return _.isUndefined(found) ? undefined : { Namn: found.Personnamn.value + " (slutat)", PersonId: found.PersonId.value }; } $scope.getPunkterForKategori = function (k: fb.JournalPunktKategori): fb.JournalPunkt[] { return $scope.punkterPerKategoriId[getKategoriKey(k)]; } $scope.toggleKateogri = function (k: fb.JournalPunktKategori) { if (!isAnyPopupShown()) { var key = getKategoriKey(k); toggledKategorier[key] = !toggledKategorier[key]; } } $scope.isKateogriExpanded = function (k: fb.JournalPunktKategori): boolean { return toggledKategorier[getKategoriKey(k)] === true; } $scope.showPunkt = function (p: fb.JournalPunkt):fb.JournalPunkt { if (!isAnyPopupShown()) { p['expanded'] = true; return resolveJournalPunkt(p); } return p; } $scope.togglePunkt = function (p: fb.JournalPunkt) { if (!isAnyPopupShown()) { p['expanded'] = !p['expanded']; var isShowing = p['expanded'] === true; if (isShowing) { resolveJournalPunkt(p); } } } $scope.isPunktExpanded = function (p: fb.JournalPunkt): boolean { return p['expanded'] === true; } $scope.isPunktResolving = function (p: fb.JournalPunkt): boolean { return p['isResolving'] === true; } $scope.isMissingAnteckning = function (p: fb.JournalPunkt): boolean { return p.AnteckningObligatorisk.value && (p.Anteckning.value === null || p.Anteckning.value.length === 0); } $scope.getUtfaerdatDatum = function (p: fb.JournalPunkt): string { if ($scope.isStruken(p)) { return 'Struken'; } return commonService.date.datePart(p.UtfoerdDatum.value || ''); } $scope.getInfoText = function (p: fb.JournalPunkt): string { return punktInfoTexter[p.JournalPunktTypId.value]; } $scope.getProgress = function (k: fb.JournalPunktKategori): number { var key = getKategoriKey(k); var klarmarkerade = $scope.klarmarkeradePunkterPerKategoriId[key]; var totaltAntal = $scope.punkterPerKategoriId[key].length; return (klarmarkerade * 100) / totaltAntal; } $scope.hasPunkter = function (k: fb.JournalPunktKategori): boolean { return $scope.punkterPerKategoriId[getKategoriKey(k)].length > 0; } $scope.toggleInfoPopup = function (p: fb.JournalPunkt) { openInfoPopups[p.JournalPunktTypId.value] = !openInfoPopups[p.JournalPunktTypId.value]; } $scope.closeInfoPopup = function (p: fb.JournalPunkt) { openInfoPopups[p.JournalPunktTypId.value] = false; } $scope.isInfoPopupShown = function (p: fb.JournalPunkt): boolean { return openInfoPopups[p.JournalPunktTypId.value] === true; } $scope.hasInfoText = function (p: fb.JournalPunkt): boolean { return angular.isDefined(punktInfoTexter[p.JournalPunktTypId.value]); } $scope.hasAnteckning = function (p: fb.JournalPunkt): boolean { return p.Anteckning.value !== null && p.Anteckning.value.length > 0; } $scope.hasAnsvarigPerson = function (p: fb.JournalPunkt): boolean { return !!p.AnsvarigPersonId.value; } $scope.isAnsvarigPersonMe = function (p: fb.JournalPunkt): boolean { return p.AnsvarigPersonId.value === $rootScope.InloggadAnvaendare.PersonId; } $scope.hasPersonAvatar = function (p: fb.JournalPunkt): boolean { return !!p.AnsvarigPersonId.value && !$scope.isAnsvarigPersonMe(p); } $scope.isStruken = function (p: fb.JournalPunkt): boolean { return p.JournalPunktStatus.value === fb.JournalPunktStatus.Struken; } $scope.isKlarmarkerad = function (p: fb.JournalPunkt): boolean { return p.JournalPunktStatus.value !== null && p.JournalPunktStatus.value !== fb.JournalPunktStatus.EjVald; } $scope.isUtfoerd = function (p: fb.JournalPunkt): boolean { return p.JournalPunktStatus.value === fb.JournalPunktStatus.Utfoerd; } $scope.setAsUtfoerdQuick = function (p: fb.JournalPunkt) { // Kan va LO eller DO setKlart(p, moment().format('YYYY-MM-DDT00:00:00')); } $scope.setAsStruken = function (p: fb.JournalPunkt) { // Antar LO p = resolveJournalPunkt(p); p.$promise.then(function () { p.JournalPunktStatus.setValue(fb.JournalPunktStatus.Struken); p.UtfoerdDatum.setValue(null); p.Anteckning.setValue(''); if (p.AnsvarigPersonId.value === null) { p.AnsvarigPersonId.setValue(ansvarigMaeklare[0].PersonId.value); } updateKlarmarkeradCount(); }); } $scope.setEgetDatum = function (p: fb.JournalPunkt) { // Antar LO if ($scope.isMissingAnteckning(p)) { return; } var def = $scope.showPunkt(p); def.$promise.then(function () { def.UtfoerdDatum.setValue(''); def.JournalPunktStatus.setValue(fb.JournalPunktStatus.EjVald); if (def.AnsvarigPersonId.value === null) { def.AnsvarigPersonId.setValue(ansvarigMaeklare[0].PersonId.value); } }) } $scope.utfoerdDatumBlurred = function (p: fb.JournalPunkt) { // Antar DO if (!$scope.isStruken(p) && !isValidDateTimeString(p.UtfoerdDatum.value)) { p.UtfoerdDatum.setValue(null); p.JournalPunktStatus.setValue(fb.JournalPunktStatus.EjVald); updateKlarmarkeradCount(); } } $scope.utfoerdDatumChanged = function (p: fb.JournalPunkt) { if (isValidDateTimeString(p.UtfoerdDatum.value) && !$scope.isMissingAnteckning(p) && !$scope.isStruken(p)) { if (p.AnsvarigPersonId.value === null) { p.AnsvarigPersonId.setValue(ansvarigMaeklare[0].PersonId.value); } p.JournalPunktStatus.setValue(fb.JournalPunktStatus.Utfoerd); updateKlarmarkeradCount(); } } $scope.clearUtfaerdatDatum = function (p: fb.JournalPunkt) { // Antar LO p = resolveJournalPunkt(p); p.$promise.then(function () { p.JournalPunktStatus.setValue(fb.JournalPunktStatus.EjVald); p.UtfoerdDatum.setValue(null); p.AnsvarigPersonId.setValue(null); updateKlarmarkeradCount(); }); } $scope.datumActionSelected = function (p: fb.JournalPunkt, da: fb.IJournalDatumAction, $event) { $($event.target).closest('.btn-group').removeClass('open'); if (da.Typ === -2) { $scope.setEgetDatum(p); } else if (da.Typ === -3) { $scope.setAsStruken(p); } else if (da.Typ === -4) { $scope.clearUtfaerdatDatum(p); } else if (_.isString(da.Datum)) { setKlart(p, da.Datum); } updateKlarmarkeradCount(); } $scope.datumActions = function (p: fb.JournalPunkt): fb.IJournalDatumAction[] { var val = _.filter(datumVal[p.DatumValTyp.value] || [], function (dv: any) { return dv.Datum !== null && dv.Datum !== ''; }); val = _.filter(val, function (dv: any) { if (!dv.VisningId || !p.VisningId.value) { return true; } return dv.VisningId === p.VisningId.value; }); var filteredDatumDefault = datumDefault; if (fb.JournalPunktStatus.EjVald === p.JournalPunktStatus.value) { filteredDatumDefault = filteredDatumDefault.filter(function (item: fb.IJournalDatumAction) { return item.Typ !== -4; }); } else if (fb.JournalPunktStatus.Struken === p.JournalPunktStatus.value) { filteredDatumDefault = filteredDatumDefault.filter(function (item: fb.IJournalDatumAction) { return item.Typ !== -3; }); } else if (fb.JournalPunktStatus.Utfoerd === p.JournalPunktStatus.value) { filteredDatumDefault = filteredDatumDefault.filter(function (item: fb.IJournalDatumAction) { return true; }); } return filteredDatumDefault.concat(val); } $scope.addPunkt = function (k: fb.JournalPunktKategori) { var p = new fb.JournalPunkt({ MaeklarObjektId: maeklarObjekt.MaeklarObjektId.value, JournalPunktKategoriTypId: k.JournalPunktKategoriTypId.value, JournalPunktTypId: templatePunktEgenDef.JournalPunktTypId.value, JournalPunktDataId: null, JournalPunktTypNamn: translate('MAEKLAROBJEKT_JOURNAL.EGEN_JOURNALANTECKNING'), JournalPunktTypSynligtNamn: '', AnteckningObligatorisk: false, UtfoerdDatum: null, AnsvarigPersonId: null, JournalPunktStatus: fb.JournalPunktStatus.EjVald, Anteckning: null, VisningId: k.VisningId.value, VisningsTyp: 2 }, true); p['expanded'] = true; p.$resolved = false; var punkter = $scope.punkterPerKategoriId[getKategoriKey(k)]; punkter.push(p); var newP = journalService.addJournalPunkt(p); updateKlarmarkeradCount(); newP.$promise.then(function () { newP['expanded'] = p['expanded']; // Fält som DO saknar newP.JournalPunktKategoriTypId = p.JournalPunktKategoriTypId; newP.AnteckningObligatorisk = p.AnteckningObligatorisk newP.Laenk = p.Laenk newP.DatumValTyp = p.DatumValTyp newP.Ordning = p.Ordning newP.JournalPunktTypNamn = p.JournalPunktTypNamn; newP.VisningsTyp = p.VisningsTyp; var insertIndex = _.indexOf(punkter, p); punkter[insertIndex] = newP; }); } $scope.removePunkt = function (p: fb.JournalPunkt) { var punkter = $scope.punkterPerKategoriId[getKategoriKey(p)]; var punktIndex = _.indexOf(punkter, p); punkter.splice(punktIndex, 1); p.dequeue(); // Tar ev. bort punkt från spara-kön då vi explicit tar bort den journalService.removeJournalPunkt(p.JournalPunktDataId.value); updateKlarmarkeradCount(); } $scope.showStandardDatum = function (p: fb.JournalPunkt): boolean { return p.DatumValTyp.value !== null; } $scope.getAvatarUrl = function (personId: number) { return !!personId ? 'url(' + fb.Environment.mediaURL + '/Person/' + personId + '.jpg?bredd=60)' : ''; } $scope.$on('$destroy', function () { $scope.closeSideDrawer(); }); $q.all([visningar.$promise, journal.$promise, $scope.totalProgress.$promise]).then(function () { // Se till att alla instanser ha ett visningsid satt _.each(journal.JournalPunktKategoriList, function (k: fb.JournalPunktKategori) { k.VisningId = new fb.ChangeTrack(null); }); var katPerTypId = _.indexBy(journal.JournalPunktKategoriList, function (k: fb.JournalPunktKategori) { return k.JournalPunktKategoriTypId.value; }); $scope.getKategori = function (kategoriId: number) { return katPerTypId[kategoriId]; } var visningPerId = _.indexBy(visningar, function (v: fb.Visning) { return v.AktivitetId.value; }); var punkterMedVisningId = _.filter(journal.JournalList, function (p: fb.JournalPunkt) { return p.VisningId.value !== null; }); var visIdForPunkt = _.groupBy(punkterMedVisningId, function (p: fb.JournalPunkt) { return p.VisningId.value; }); // Sortera visningar efter starttid var sortedVisningsId = _.sortBy(_.keys(visIdForPunkt), function (visId: string) { var visning = visningPerId[visId]; return visning.AktivitetStart.value }); // För varje visning, hitta unika kapiteltyper och skapa kopier länkat till visning _.each(sortedVisningsId, function (visId: string) { var kapTyper = _.uniq(_.map(visIdForPunkt[visId], function (p: fb.JournalPunkt) { return p.JournalPunktKategoriTypId.value; })); //console.log('För visning', visId, 'finns', kapTyper.length, 'unik(a) kapitel att duplicera'); _.each(kapTyper, function (kapTypId: number) { var visning = visningPerId[visId]; var k: fb.JournalPunktKategori = katPerTypId[kapTypId]; var shallowCopy: fb.JournalPunktKategori = _.clone(k); var namn = getVisningDatumText(visning.AktivitetStart.value, visning.AktivitetSlut.value); var insertIndex = journal.JournalPunktKategoriList.indexOf(k) + 1; shallowCopy.VisningId = new fb.ChangeTrack(parseInt(visId, 10)); // Ny referens shallowCopy.Namn = new fb.ChangeTrack(k.Namn.value + ' ' + namn); journal.JournalPunktKategoriList.splice(insertIndex, 0, shallowCopy); }); }); journal.JournalList.sort(function (a: fb.JournalPunkt, b: fb.JournalPunkt) { return a.Ordning.value - b.Ordning.value; }); $scope.punkterPerKategoriId = _.groupBy(journal.JournalList, function (p: fb.JournalPunkt) { return getKategoriKey(p); }); // Sortering av kategorier $scope.journalKategorier = _.filter(journal.JournalPunktKategoriList, function (k: fb.JournalPunktKategori) { return !_.isUndefined($scope.punkterPerKategoriId[getKategoriKey(k)]); }); $scope.journalKategorier = _.sortBy($scope.journalKategorier, function (journalKat) { return journalKat.Ordning.value; }); _.each(journal.JournalList, function (p: fb.JournalPunkt) { var key = getKategoriKey(p); $scope.klarmarkeradePunkterPerKategoriId[key] = _.filter($scope.punkterPerKategoriId[key], function (p: fb.JournalPunkt) { return $scope.isKlarmarkerad(p); }).length; p.VisningsTyp = $scope.getKategori(p.JournalPunktKategoriTypId.value).VisningsTyp; }); // Skapa en kopia som används som mall för egen def. punkter var katEgenDef = _.find(journal.JournalPunktKategoriList, function (k: fb.JournalPunktKategori) { return k.VisningsTyp.value === fb.JournalKategoriVisningstyp.MaeklarObjektEjUnikt; }); if (!_.isUndefined(katEgenDef)) { templatePunktEgenDef = new fb.JournalPunkt(commonService.changeTrack.fromChangeTrackObject(_.find(journal.JournalList, function (p: fb.JournalPunkt) { return p.JournalPunktKategoriTypId.value === katEgenDef.JournalPunktKategoriTypId.value; }), false), true); } $scope.isJournalUnsupported = $scope.journalKategorier.length === 0; // Kalkulera om rätt total updateTotalklarmarkeradCount(); }); $q.all([ansvarigMaeklare.$promise, medarbetare.$promise]).then(function () { $scope.personer = [{ Namn: $rootScope.InloggadAnvaendare.Namn + ' (' + translate('GLOBALS.JAG') + ')', PersonId: $rootScope.InloggadAnvaendare.PersonId }]; if ($rootScope.InloggadAnvaendare.PersonId !== ansvarigMaeklare[0].PersonId.value) { $scope.personer.push({ Namn: ansvarigMaeklare[0].PersonNamn.value + ' (' + translate('MAEKLAROBJEKT.ANSVARIG_MAEKLARE') + ')', PersonId: ansvarigMaeklare[0].PersonId.value }); } $scope.personer = $scope.personer.concat(_ .chain( medarbetare) .filter(function (m: fb.Medarbetare) { return m.PersonId.value !== $rootScope.InloggadAnvaendare.PersonId && m.PersonId.value !== ansvarigMaeklare[0].PersonId.value; }) .map(function (m: fb.Medarbetare) { return { Namn: m.Personnamn.value, PersonId: m.PersonId.value }; }) .sortBy(function (p: fb.IJournalPerson) { return p.Namn; }) .uniq(function (p: fb.IJournalPerson) { return p.PersonId; }) .value()); }); $q.all([ journal.$promise, medarbetare.$promise, ansvarigMaeklare.$promise, visningar.$promise, $scope.totalProgress.$promise, datumVal.$promise, ]).then(function () { $scope.isJournalResolved.$resolved = true; }); }); } ]);