/** * @ngdoc UppdragStatusCtrl * @name fasit.component.#UppdragStatusCtrl * @UppdragStatusCtrl * * @description * Controllern hantera objektetsstatusar * */ angular.module('fasit') .controller('UppdragStatusCtrl', ['$scope', '$filter', 'sideDrawerService', 'stateService', 'globalTimerService', 'intressentService', 'instaellningarService', function ( $scope: fb.IUppdragStatusScope, $filter: ng.IFilterService, sideDrawerService: fb.ISideDrawerService, stateService: fb.IStateService, globalTimerService: fb.IGlobalTimerService, intressentService: fb.IIntressentService, instaellningarService: fb.IInstaellningarService ) { 'use strict'; var maeklarObjekt = ($scope.$parent).maeklarObjekt; var state: fb.IUppdragStatusState = {}; // Måste vänta tills mäklarobjekt har laddats var parter: fb.List; let isKundportalAktiv: boolean; const kundportalAktivInstaellning = instaellningarService.getInstaellningFoerKontor(fb.FasITDomain.InstaellningId.KUNDPORTALEN_AKTIV); kundportalAktivInstaellning.$promise.then(() => { if (kundportalAktivInstaellning.InstaellningVaerde && kundportalAktivInstaellning.InstaellningVaerde.value !== null) { isKundportalAktiv = kundportalAktivInstaellning.InstaellningVaerde.value; } else { isKundportalAktiv = false; } }); $scope.avslutaAnnonseringPopover = false; $scope.getUppdragStatusText = function () { var emptyRet = { icon: '', uppdragStatusText: '', uppdragStatusSpecifikationText: '' } if (maeklarObjekt.$resolved && maeklarObjekt.UppdragStatus) { // Är uppdragstatusspecifikation null för att man håller på att spara, visa upp utgående från uppdragstatus if (maeklarObjekt.UppdragStatusSpecifikation.value === null) { return { icon: $scope.uppdragStatus[maeklarObjekt.UppdragStatus.value].icon, uppdragStatusText: $scope.uppdragStatus[maeklarObjekt.UppdragStatus.value].text, uppdragStatusSpecifikationText: '' } } var uppdragStatusRes = $filter('uppdragStatus')(maeklarObjekt.UppdragStatusSpecifikation.value); var isEfterbearbetning = _.contains([fb.FasITDomain.UppdragStatusSpecifikation.EFTERBEARBETNING, fb.FasITDomain.UppdragStatusSpecifikation.EFTERBEARBETNING_REFERENSOBJEKT] , maeklarObjekt.UppdragStatusSpecifikation.value); return { icon: uppdragStatusRes.url, uppdragStatusText: isEfterbearbetning ? 'MAEKLAROBJEKT_UPPDRAGSSTATUS.EFTERBEARBETNING' : $scope.uppdragStatus[maeklarObjekt.UppdragStatus.value].text, uppdragStatusSpecifikationText: uppdragStatusRes.text }; } else { return emptyRet; } }; $scope.uppdragStatus = {}; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.FOERBEARBETNING] = { icon: '../app/Styles/images/uppdragstatusicons/foerbearbetning.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.FOERBEARBETNING', key: fb.FasITDomain.UppdragStatus.FOERBEARBETNING }; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG] = { icon: '../app/Styles/images/uppdragstatusicons/uppdrag.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.UPPDRAG', key: fb.FasITDomain.UppdragStatus.UPPDRAG }; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD] = { icon: '../app/Styles/images/uppdragstatusicons/reserverad.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.RESERVERAD', key: fb.FasITDomain.UppdragStatus.RESERVERAD }; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD] = { icon: '../app/Styles/images/uppdragstatusicons/saald.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.SAALD', key: fb.FasITDomain.UppdragStatus.SAALD }; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.INGET_UPPDRAG] = { icon: '../app/Styles/images/uppdragstatusicons/inget_uppdrag.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.INGET_UPPDRAG', key: fb.FasITDomain.UppdragStatus.INGET_UPPDRAG }; $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.AATERTAGEN] = { icon: '../app/Styles/images/uppdragstatusicons/uppdrag_upphoert.svg', text: 'MAEKLAROBJEKT_UPPDRAGSSTATUS.UPPDRAGET_UPPHOERT', key: fb.FasITDomain.UppdragStatus.AATERTAGEN }; var getUnfilledRequirements = function (newStatus) { var unfilledRequirements = {}; switch (newStatus) { case fb.FasITDomain.UppdragStatus.FOERBEARBETNING: break; case fb.FasITDomain.UppdragStatus.UPPDRAG: if (!maeklarObjekt.Uppdragsdag.value || maeklarObjekt.Uppdragsdag.value === '' || maeklarObjekt.Uppdragsdag.value === '00:00:00') { unfilledRequirements['Uppdragsdag'] = maeklarObjekt.Uppdragsdag; unfilledRequirements['SaeljarenHarAccepteratStegetFoerePaketet'] = maeklarObjekt.SaeljarenHarAccepteratStegetFoerePaketet; } var gotSaeljare = _.find(parter, function (part: fb.ObjIntressentPartDO) { return part.ObjIntressentRoll.value === fb.ObjektIntressentRollId.Saeljare }) if (!gotSaeljare) { unfilledRequirements['Saeljare'] = true; } unfilledRequirements['Kundkaennedom'] = $filter('translate')('STATUS_BYTE.KUNDKAENNEDOM.SAELJARE'); break; case fb.FasITDomain.UppdragStatus.RESERVERAD: break; case fb.FasITDomain.UppdragStatus.SAALD: //provis pris avtalsdag var saknarAvtalsdag = !maeklarObjekt.Avtalsdag.value || maeklarObjekt.Avtalsdag.value === '' || maeklarObjekt.Avtalsdag.value === '00:00:00'; var saknarFoerhandsavtalsdag = !maeklarObjekt.Foerhandsavtalsdag.value || maeklarObjekt.Foerhandsavtalsdag.value === '' || maeklarObjekt.Foerhandsavtalsdag.value === '00:00:00'; if (!maeklarObjekt.SlutPris.value) { unfilledRequirements['SlutPris'] = maeklarObjekt.SlutPris; } if (saknarAvtalsdag && (!maeklarObjekt.AerNyproduktion.value || saknarFoerhandsavtalsdag)) { unfilledRequirements['Avtalsdag'] = maeklarObjekt.Avtalsdag; if (!!maeklarObjekt.AerNyproduktion.value) { unfilledRequirements['Foerhandsavtalsdag'] = maeklarObjekt.Foerhandsavtalsdag; } } if ((!maeklarObjekt.ProvisFast.value && maeklarObjekt.ProvisFast.value !== 0) && !maeklarObjekt.ProvisProc.value && maeklarObjekt.ProvisProc.value !== 0) { unfilledRequirements['ProvisFast'] = maeklarObjekt.ProvisFast; unfilledRequirements['ProvisProc'] = maeklarObjekt.ProvisProc; } var gotKoepare = _.find(parter, function (part: fb.ObjIntressentPartDO) { return part.ObjIntressentRoll.value === fb.ObjektIntressentRollId.Koepare }) if (!gotKoepare) { unfilledRequirements['Koepare'] = true; } unfilledRequirements['Kundkaennedom'] = $filter('translate')('STATUS_BYTE.KUNDKAENNEDOM.KOEPARE'); break; case fb.FasITDomain.UppdragStatus.INGET_UPPDRAG: break; case fb.FasITDomain.UppdragStatus.AATERTAGEN: break; } return unfilledRequirements; } $scope.setStatus = function (status) { parter = intressentService.queryParter(maeklarObjekt.MaeklarObjektId.value); parter.$promise.then(function () { var unfilledRequirements = getUnfilledRequirements(status); if (status === fb.FasITDomain.UppdragStatus.SAALD) { _.extend(getUnfilledRequirements(fb.FasITDomain.UppdragStatus.UPPDRAG), unfilledRequirements); } if (Object.keys(unfilledRequirements).length > 0) { sideDrawerService.setSideDrawer('StatusByte', { 'missingFields': unfilledRequirements, 'maeklarObjekt': maeklarObjekt, 'status': status, 'saknasFoerText': 'statusbyte' }, '50%', requirementCallback); } else { requirementCallback({}, status); } }); }; var requirementCallback = function (remainingRequirements: {}, status) { sideDrawerService.clearDrawer(); if (_.keys(remainingRequirements).length === 0) { changeStatus(status); if (state.setUppdragStatusOnload) { state.setUppdragStatusOnload = undefined; // Endast vid första navigeringen } } } var openBearbetningsPalett = function (status, onCloseCb?) { sideDrawerService.setSideDrawer('BearbetningsPalett', { aktivitetId: state.setUppdragStatusOnload ? state.aktivitetId : undefined, // Kan va satt från möjlighetslista, ska då klarmarkeras. maeklarObjekt: maeklarObjekt, setUppdragStatus: status }, '640px', onCloseCb); }; var openKundportalenSideDrawer = function (onCloseCB?) { sideDrawerService.setSideDrawer(fb.FasITDomain.SideDrawerName.KUNDPORTAL, { //maeklarObjektId: maeklarObjekt.MaeklarObjektId.value, maeklarObjekt: maeklarObjekt, fraanStatusByte: true }, '640px', onCloseCB); }; $scope.reserveradDialogCallback = function (stoppa: boolean) { if (stoppa) { stoppaAnnonsering(); } maeklarObjekt.UppdragStatusSpecifikation.value = null; maeklarObjekt.UppdragStatusSpecifikation.originalValue = null; maeklarObjekt.setValue(maeklarObjekt.UppdragStatus, fb.FasITDomain.UppdragStatus.RESERVERAD); globalTimerService.globalSave(true); }; var changeStatus = function (status) { var uppdragStatus = maeklarObjekt.UppdragStatus; if (status !== fb.FasITDomain.UppdragStatus.UPPDRAG) { maeklarObjekt.setValue(maeklarObjekt.PaaGaang, false); if (uppdragStatus.value === fb.FasITDomain.UppdragStatus.UPPDRAG) { maeklarObjekt.setValue(maeklarObjekt.SaeljarenHarAccepteratStegetFoerePaketet, false); } } switch (status) { case fb.FasITDomain.UppdragStatus.FOERBEARBETNING://Förbearbetning maeklarObjekt.setValue(uppdragStatus, fb.FasITDomain.UppdragStatus.FOERBEARBETNING); stoppaAnnonsering(); break; case fb.FasITDomain.UppdragStatus.UPPDRAG://Uppdrag if (maeklarObjekt.UppdragStatus.value === fb.FasITDomain.UppdragStatus.UPPDRAG) { return } else { if (maeklarObjekt.isUtland) { maeklarObjekt.setValue(uppdragStatus, fb.FasITDomain.UppdragStatus.UPPDRAG); } else { if ( isKundportalAktiv && !(!maeklarObjekt || !maeklarObjekt.$resolved || maeklarObjekt.isUtland || maeklarObjekt.isProjekt() || maeklarObjekt.isObjektIProjekt() || maeklarObjekt.isOevrig // Är övrig objekt )) { openKundportalenSideDrawer(() => { sideDrawerService.clearDrawer(); openBearbetningsPalett(status); }); } else { openBearbetningsPalett(status); } return; } } break; case fb.FasITDomain.UppdragStatus.RESERVERAD://Reserverad if (_.any(maeklarObjekt.ObjektAnnons, function (item: fb.Models_ObjektAnnonsRO) { return item.AerHistorisk.value === false && item.AerVilande.value === false })) { $scope.avslutaAnnonseringPopover = true } else { maeklarObjekt.setValue(uppdragStatus, fb.FasITDomain.UppdragStatus.RESERVERAD); } break; case fb.FasITDomain.UppdragStatus.SAALD: //Såld if (maeklarObjekt.UppdragStatus.value === fb.FasITDomain.UppdragStatus.SAALD) { return; } // Ta över ansvaret att sätta status till bearbetningspaletten openBearbetningsPalett(status, function (parter: fb.List) { if (maeklarObjekt.UppdragStatus.value === fb.FasITDomain.UppdragStatus.SAALD) { stoppaAnnonsering(); globalTimerService.globalSave(true); } }); return; case fb.FasITDomain.UppdragStatus.INGET_UPPDRAG: //Inget uppdrag maeklarObjekt.setValue(uppdragStatus, fb.FasITDomain.UppdragStatus.INGET_UPPDRAG); stoppaAnnonsering(); break; case fb.FasITDomain.UppdragStatus.AATERTAGEN: //Uppdragupphört maeklarObjekt.setValue(uppdragStatus, fb.FasITDomain.UppdragStatus.AATERTAGEN); stoppaAnnonsering(); break; } maeklarObjekt.UppdragStatusSpecifikation.value = null; maeklarObjekt.UppdragStatusSpecifikation.originalValue = null; globalTimerService.globalSave(true); } var stoppaAnnonsering = function () { _.each(maeklarObjekt.ObjektAnnons, function (annons: fb.Models_ObjektAnnonsRO) { if (annons.AerVilande.value) { maeklarObjekt.setValue(annons.AerVilande, false); } if (!annons.AerHistorisk.value) { maeklarObjekt.setValue(annons.AerHistorisk, true); maeklarObjekt.setValue(annons.StoppadDatum, moment().format('YYYY-MM-DDTHH:mm:ss')); } }); maeklarObjekt.SkallVisasPaaInternet.setValue(false); }; $scope.getUppdragsStatusTillaatenOevergaang = function () { if (!maeklarObjekt.$resolved) { return [] } var oevergaangMatris = {} oevergaangMatris[fb.FasITDomain.UppdragStatus.FOERBEARBETNING] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.INGET_UPPDRAG], ]; oevergaangMatris[fb.FasITDomain.UppdragStatus.UPPDRAG] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.FOERBEARBETNING], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.AATERTAGEN], ]; oevergaangMatris[fb.FasITDomain.UppdragStatus.RESERVERAD] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.FOERBEARBETNING], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.AATERTAGEN], ]; oevergaangMatris[fb.FasITDomain.UppdragStatus.SAALD] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.FOERBEARBETNING], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.AATERTAGEN], ]; oevergaangMatris[fb.FasITDomain.UppdragStatus.INGET_UPPDRAG] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.FOERBEARBETNING], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD], ]; oevergaangMatris[fb.FasITDomain.UppdragStatus.AATERTAGEN] = [ $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.UPPDRAG], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.RESERVERAD], $scope.uppdragStatus[fb.FasITDomain.UppdragStatus.SAALD], ]; return oevergaangMatris[maeklarObjekt.UppdragStatus.value]; } $scope.isStatus = function (status) { return maeklarObjekt.$resolved && maeklarObjekt.UppdragStatus.value === status } $scope.isTillraaedeDagInFuture = function () { if (maeklarObjekt.TilltraedelseDatum.value) { var tilltraedeDatumTid = maeklarObjekt.TilltraedelseDatum.value.split('T')[0] + 'T' + maeklarObjekt.TilltraedelseTid.value return tilltraedeDatumTid > moment().format('YYYY-MM-DDTHH:mm:ss'); } else { return false; } }; maeklarObjekt.$promise.then(function () { state = stateService.loadState('UppdragStatusCtrl', maeklarObjekt.MaeklarObjektId.value); // State används vid navigering och är endast giltigt vid första navigeringen stateService.clearState('UppdragStatusCtrl', maeklarObjekt.MaeklarObjektId.value); if (state.setUppdragStatusOnload) { $scope.setStatus(state.setUppdragStatusOnload); } }); }]);