{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main/webapp/app/config.js","webpack:///./src/main/webapp/app/ccire-decorator.js","webpack:///./src/main/webapp/app/playground.js","webpack:///./src/main/webapp/app/home/home.module.js","webpack:///./src/main/webapp/app/home/home-api.service.js","webpack:///./src/main/webapp/app/home/home.component.js","webpack:///./src/main/webapp/app/modelli/modelli.module.js","webpack:///./src/main/webapp/app/modelli/modelli.service.js","webpack:///./src/main/webapp/app/modelli/modelli-api.service.js","webpack:///./src/main/webapp/app/modelli/filters/ccire.filters.js","webpack:///./src/main/webapp/app/modelli/attestazioni.component.js","webpack:///./src/main/webapp/app/modelli/annullamento.component.js","webpack:///./src/main/webapp/app/modelli/comunicazione.component.js","webpack:///./src/main/webapp/app/modelli/comunicazione-121.component.js","webpack:///./src/main/webapp/app/modelli/comunicazione-122.component.js","webpack:///./src/main/webapp/app/modelli/components/cedente.component.js","webpack:///./src/main/webapp/app/modelli/components/tipologia-opzione.component.js","webpack:///./src/main/webapp/app/modelli/components/dati-intervento.component.js","webpack:///./src/main/webapp/app/modelli/components/dati-credito.component.js","webpack:///./src/main/webapp/app/modelli/components/dati-catastali.component.js","webpack:///./src/main/webapp/app/modelli/components/dati-cessionari.component.js","webpack:///./src/main/webapp/app/modelli/components/rappresentante.component.js","webpack:///./src/main/webapp/app/modelli/components/protocollo.component.js","webpack:///./src/main/webapp/app/esiti/esiti.js","webpack:///./src/main/webapp/app/modelli/components/stato-popover.component.js","webpack:///./src/main/webapp/app/modelli/components/contratti-locazione.component.js","webpack:///./src/main/webapp/app/modelli/components/ccire-ristampa.component.js","webpack:///./src/main/webapp/app/modelli/directives/dichiarazione-cessione.directive.js","webpack:///./src/main/webapp/app/modelli/directives/modello-riepilogo.directive.js","webpack:///./src/main/webapp/app/modelli/directives/selezione-cedente.directive.js","webpack:///./src/main/webapp/app/shared/feebutter.module.js","webpack:///./src/main/webapp/app/shared/api-anagrafica.service.js","webpack:///./src/main/webapp/app/app.js","webpack:///./src/main/webapp/app/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","define","angular","configModule","CONTEXT_ROOT_WEB","CONTEXT_REST_SERVICE","CONSTANTS","__ENV__","constant","config","feeAngularjs","$provide","$injector","CLIENT_ERR","decorator","$delegate","$location","$log","$rootScope","$window","TokenService","MessagesService","PageLayoutService","CORE_CONSTANTS","self","caricaMenuLeft","iconTree","undefined","debug","_fallbackMenu","menuLeft","emptyData","nodata","updateMenuIcons","setMenuLeftEnabled","e","error","addMessageError","CLIENT_ERROR_MSG","menuActive","page","active","current","path","caricaMenuTop","menu","menuTop","setMenuTopEnabled","_setMenu","menuType","sectionTitle","label","visible","items","icon","msg","init","parseMessages","response","messages","codiceErrore","log","setMessages","hasSecurityErrors","$broadcast","hasAnyMessage","focusId","redirectApplicativo","request","requestError","rejection","status","url","responseError","redirectToLogin","logout","location","PATH_ERR_403","$q","$http","ajaxRequest","method","URL","params","callback","deferred","defer","pincode","v","Date","getTime","headers","then","resolve","reject","promise","factory","exception","cause","warn","clientErr","_process","process","_process$env","env","$routeProvider","$httpProvider","$logProvider","when","template","component","controllerAs","controller","ModelliService","AjaxService","UtenteService","vm","this","$onInit","tipoOpzione","compilazione","datiIntervento","tipoIntervento","datiCatastali","handleInputChange","field","info","concat","validate","form","type","testUser","num","setUser","bindings","profilo","open","testA","goToProtocollo","testC","canConfirm","handleModalOpenTest","Promise","handleInvioTest","Resolver","ApiAnagrafica","HomeApi","getProfilo","getHome","service","promisesGetter","DO_HOME","home","FileService","homeCtrl","canShow","invioClicked","input","manualeUtente","openResponseInNewWindow","modelli","listaModelli","ModelliApi","StorageService","ErrorService","_toValidate","fieldName","fieldsToCheck","index","element","reg","RegExp","match","_setValidity","erroKey","errorLabel","valid","addErrorLabel","$$controls","control","$setValidity","protocollo","codiceFiscale","title","tipologia","setResource","goToAnnullamento","articolo","protocolloEscaped","split","join","invia","tipo","callbackSuccess","callbackError","resetMessages","modello","cedente","datiCessionario","resetCessionarioTipologie","tipologiaCessionario","resetImpegnoTrasmissione","impegnoTrasmissione","protocolloQ20","validateCessionario","errorCessionariMaggiore","totaleCreditoCeduto","parseInt","creditoCeduto","creditoMaggiore","importoCreditoCedibile","cessionario","numCessionario","tipologiaValida","cfValido","_path","copy","replace","buildPath","originalPath","args","isEmpty","obj","prop","getTipologieIntervento","cf","anno","opzione","GET_RISORSE_FORM","getAnni","getArticoli","getModelloOpen","CHECK_FUNZIONALITA","initDati","cfCedente","DO_INIT_DATI","getDatiProtocollo","DO_GET_DATI","validazione","DO_VALIDAZIONE","stampa","success","DO_STAMPA_BOZZA","responseType","getHeader","clearEmpties","k","_typeof","keys","DO_INVIA_MODELLO","getAttestazioniPagine","rows_pages","DO_RICARICA_ATTESTAZIONI_PAG","getCalcoloImporti","tipoAz","DO_CALCOLO_IMPORTI","getImportiMensili","filter","$filter","COMUNICAZIONE","ANNULLAMENTO","STAMPA","LABELS","getLabel","messageId","arguments","azione","getHref","currentPage","itemsPerPage","$on","event","parametriRicerca","loadAttestazioni","changePage","hasAnyError","listaInvii","listaInviiSize","row_number","formModello","$setPristine","risultatiRicerca","_objectSpread","modelloComInviata","protocolloDicRin","caricaList","_vm$modello3","_vm$modello4","_vm$modello4$compilaz","_vm$modello4$compilaz2","_vm$modello5","_vm$modello5$compilaz","_vm$modello5$compilaz2","_vm$modello6","_vm$modello6$compilaz","_vm$modello6$compilaz2","_vm$modello8","_vm$modello8$compilaz","_vm$modello8$compilaz2","_vm$modello9","_vm$modello9$compilaz","_vm$modello9$compilaz2","_vm$modello","_vm$modello$cedente","_vm$modello2","_vm$modello2$cedente","_vm$modello7","_vm$modello7$compilaz","_vm$modello7$compilaz2","list","tipoInterventoDescr","annoSpesa","importoTotaleSpesa","importoCreditoMaturato","pinRequired","titleProtocollo","titlecodicefiscale","tipologieIntervento","descrizione","createAnnullamento","annullamento","annoRiferimento","protocolloComunicazione","gestioneValidazione","modelOriginal","modelReceive","hasWarning","forEach","severity","cessReceived","cessionarioSend","handleModalOpen","$valid","handleInvio","$invalid","setTimeout","message","close","noResults","verificaProtocollo","item","invio","cfBen","informativa","handleCustomMessages","customErrors","customWarnings","funzionalitaWarnings","extractDatiCedente","modelloDicRin","actionDisabled","compila","$timeout","Modello121Service","$onChanges","changesObj","isFirstChange","currentValue","previousValue","fieldValue","validateImportoCreditoCedibile","errorSpesaSostenutaIncongrunente","tipoInterventoAssente","tipiIntervento","percentuale","el","importodacedere","importoTotaleCalcolataPercentuale","Math","round","errPerc","Modello122Service","showContrattiLocazione","_vm$data","_vm$data$compilazione","_vm$data$compilazione2","_vm$data2","_vm$data2$compilazion","_vm$data2$compilazion2","handlerTipoIntervento","handlerTipologiaCessionario","dataCatastaliCompilabili","substring","importiMese","importiMensili","hideTipologiaCessionario","ContrattoService","validateImportoCredito","validateDatiCatastali","_data$compilazione","_data$compilazione$da","_data$compilazione2","_data$compilazione2$d","_data$compilazione5","_data$compilazione5$d","_data$compilazione6","_data$compilazione6$d","_data$compilazione7","_data$compilazione7$d","errorCreditoMaggiore","_data$compilazione3","_data$compilazione3$d","_data$compilazione4","importoCreditoCeduto","mesi","totMesi","indexOf","String","toUpperCase","_data$compilazione8","_data$compilazione9","_data$compilazione9$d","contratto","numContratto","idContratto","existing","isValid","datiContratto","contrattoValid","datiPf","datiPnf","showAnagrafici","onInputChange","opzioneName","onLocalChange","inputKey","inputValue","telefono","postaElettronica","onOpzione","caricaOpzioni","map","comunicazione","getProvince","listaProvince","caricaComuni","provincia","listaComuni","getComuni","showTipologie","editTipologie","labelCredito","labelCessione","intestRiga","maxRows","emptyCessionario","newCessionario","getTitle","getLabelCredito","intestazione","codicefiscale","aggiungi","$setDirty","elimina","indice","today","tipologieCessionario","changed","rappresentante","initCompilabilita","enabled","cfRappRequired","cfRappresentanteEditabile","isQ20","userWork","tipoUtente","utenteCheOperaPerAltro","cfWork","isPNF","userWorkType","verificaCfSoc","isCedentePnf","caricaRappresentante","setCompilabilita","intermediario","incaricato","_vm$rappresentante","codiceFiscaleFirmatario","cfAuth","userAuth","isIncaricato","codiciCarica","getCodiciCarica","listaCodiciCarica","addSystemMessages","checkPF","campoName","ctrl","getRappresentante","datiRappresentante","cognome","nome","dataNascita","comune","presente","checkPNF","directive","restrict","scope","$scope","stampaModello","contentType","fileName","exec","blob","Blob","fileSaver","saveAs","Esiti","isEsitoFinale","codiceEsito","includes","isEsitoParziale","isEsitoRifiutata","esitoCodice","esitoMessage","$element","text","color","$postLink","emElement","find","attr","popover","trigger","placement","SERIE","ID_CONTRATTO_PATTERN","codificaDispari","CHARS","NUM","sostituzioni","even","char","reduce","a","b","number","odd","getSostituzione","pari","isNaN","checkDigit","sum","mod","check1","check2","total","getListaContratti","GET_LOCAZIONI","fakeData","fill","random","min","max","floor","numero","serie","opt","date","getDate","getMonth","getFullYear","values","mocks","lab","size","randomIndex","sottonumero","codiceUfficio","importo","key2","contratti","maxOccurs","ContrattoApi","caricaListaContratti","console","$onChange","contrattiPredisposti","contrattiPredispostiComplete","newContratto","handleAdd","handleRemove","onRemove","selezioneDatiContratto","labelDatiSwitch","idContrattoPattern","listaSerie","x","listaTipi","datiContrattoPresenti","onSelezioneIdContratto","_vm$contratto","disabled","listaContratti","listaContrattiComplete","listaDisabilitati","onSelected","tableColumnsTitles","tableColumnsKeys","columnFormatter","_item$datiContratto","dataContratto","_item$datiContratto2","_item$datiContratto3","actions","description","btnClasses","iconClasses","function","addExisting","checkDisabled","$onDestroy","modal","remove","add","warning","JSON","stringify","addEmpty","manageTipoIntervento","modalVisible","tipoCredito","toAdd","rowNumber","dataRichiedente","aggiornaLista","num_richieste","hasRicevuta","riga","prot","tipostampa","secondaRicevuta","esito","richiediAnnullamento","confermaDisabled","stampaModelloRiepilogo","scroll","msgArray","searchFields","preselectCf","aiutoCf","selezionato","listaCf","impostaCf","caricaArticoli","fieldEnabled","isRequired","req","required","fieldClass","f","col","validaProtocollo","_prot","$viewValue","test","proto","caricaAnni","listaAnni","anniRiferimento","listaArticoli","articoli","codice","resetSelezione","getDatiModello","selectClicked","PATH_LOGOUT","ENV","getLogoutUrl","GET_RAPP","VERIFICA_CF","VERIFICA_CF_SOC","GET_NATURA_GIURIDICA","GET_PROFILO","GET_CODICI_CARICA","GET_PROVINCE","GET_COMUNI","href","loadUser","user","force","verificaCf","pf","getNaturaGiuridica","app","run","setTitle","setLogo","setTopLink","addSpinnerEsclusion","KEEP_ALIVE","userManagment","debugEnabled","DEBUG","resolveRedirectTo","getResource","check","$route","header","protocolloUnescaped","hasMessageBySeverity","otherwise","redirectTo","interceptors","errorMessage","toString","stacktrace","fromError","sourceCache","stackframes","stringifiedStack","sf","toJson","errorUrl","stackTrace","sessionStorage","setItem","loggingError","KeepAliveService","start","nextRoute","currentRoute","bootstrap","document","strictDi"],"mappings":"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","file":"app.bundle.2196d7817a8dee4df2db.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([621,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * File di configurazione dell'applicazione per la definizione delle costanti globali\n */\ndefine([\n\t'angular'\n],\n\tfunction (angular) {\n\n\t\tvar configModule = angular.module('configModule', []);\n\n\t\tvar CONTEXT_ROOT_WEB = '/ccire-services-web/';\n\n\t\t/*\n\t\t * URL per richiamare i servizi REST\n\t\t */\n\t\tvar CONTEXT_REST_SERVICE = '/ccire-services-web/rs/';\n\n\n\t\t/* \n\t\t * Variabile per evitare la cache delle risorse da parte del browser\n\t\t */\n\t\tvar urlParamsValue = __COMMIT_HASH__;\n\t\tvar urlArgs = \"?v=\" + urlParamsValue;\n\n\t\tvar CONSTANTS = {\n\t\t\t'CLIENT_ERR': \"Si \\u00e8 verificato un errore\",\n\t\t\t'URL_ARGS': urlArgs,\n\t\t\t//tipologie\n\t\t\t'COMUNICAZIONE': 'C',\n\t\t\t'ANNULLAMENTO': 'A',\n\t\t\t'STAMPA': 'S',\n\t\t\t//percorsi\n\t\t\t'CONTEXT_ROOT_WEB': CONTEXT_ROOT_WEB,\n\t\t\t'CONTEXT_REST_SERVICE': CONTEXT_REST_SERVICE,\n\t\t\t//pagine\n\t\t\t'HOME_PAGE': CONTEXT_ROOT_WEB,\n\t\t\t'PATH_ERR_401': CONTEXT_ROOT_WEB + '#!/nologin',\n\t\t\t'PATH_ERR_403': CONTEXT_ROOT_WEB + '#!/noauth',\n\t\t\t'PATH_ERR_404': CONTEXT_ROOT_WEB + '#!/404',\n\t\t\t'ERROR_PAGE': CONTEXT_ROOT_WEB + '#!/error',\n\t\t\t'LOGIN_PAGE': CONTEXT_ROOT_WEB + 'login.html',\n\t\t\t'TELEM_PAGE': CONTEXT_ROOT_WEB + 'serviziautenticati',\n\t\t\t'DO_HOME': CONTEXT_REST_SERVICE + 'home/',\n\t\t\t'GET_RISORSE_FORM': CONTEXT_REST_SERVICE + 'get/risorseForm',\n\t\t\t'KEEP_ALIVE': CONTEXT_REST_SERVICE + 'keepAlive',\n\t\t\t'DO_CEDENTE': CONTEXT_REST_SERVICE + 'cedente/',\n\t\t\t'CHECK_FUNZIONALITA': CONTEXT_REST_SERVICE + 'funzionalita/{tipo}',\n\t\t\t'DO_INIT_DATI': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/ricerca',\n\t\t\t'DO_GET_DATI': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/recupero',\n\t\t\t'DO_SALVA_MODELLO': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/salva/',\n\t\t\t'DO_INVIA_MODELLO': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/invia/',\n\t\t\t'DO_RINUNCIA': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/rinuncia',\n\t\t\t'DO_VALIDAZIONE': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/validazione/',\n\t\t\t'DO_STAMPA_BOZZA': CONTEXT_REST_SERVICE + 'modello/{articolo}/{tipo}/pdf',\n\t\t\t'DO_RICERCA_ATTESTAZIONI': CONTEXT_REST_SERVICE + 'Stampa/attestazioni/',\n\t\t\t'DO_RICARICA_ATTESTAZIONI_PAG': CONTEXT_REST_SERVICE + 'ricerca/attestazioni/',\n\t\t\t'GET_LOCAZIONI': CONTEXT_REST_SERVICE + 'ricerca/locazioni',\n\t\t\t'DO_CALCOLO_IMPORTI': CONTEXT_REST_SERVICE + 'calcolo/{tipo}/{tipoAz}/calcoloImporti',\n\t\t\t'DEBUG': true,\n\t\t\t'MESSAGES_ID': 'messages-container',\n\t\t\t//variabile per definire l'ambiente definita in webpack.config.js\n\t\t\t'ENV': __ENV__.proxy || 'prod'\n\t\t};\n\n\t\tconfigModule.constant('CONSTANTS', CONSTANTS);\n\n\n\t\tvar LABELS = {\n\t\t\t'C': 'Comunicazione',\n\t\t\t'S': 'Attestazioni',\n\t\t\t'A': 'Annullamento',\n\t\t\t'C.azione': 'Compila una comunicazione',\n\t\t\t'S.azione': 'Visualizza e stampa attestazioni',\n\t\t\t'A.azione': 'Annullamento della comunicazione',\n\t\t};\n\n\t\tconfigModule.constant('LABELS', LABELS);\n\n\t\treturn configModule;\n\t});","define([\n\t'angular'\n],\n\tfunction (angular, config) {\n\n\n\t\t//get del modulo da decorare\n\t\tvar feeAngularjs = angular.module('ccireDecorator', ['feeAjsCore', 'feeAjsServizi']);\n\n\t\t/*\n\t\t * Implementazioni locali tramite decorator\n\t\t */\n\t\tfeeAngularjs.config(['$provide', '$injector', function ($provide, $injector) {\n\n\t\t\tvar clientErr = $injector.get('CONSTANTS').CLIENT_ERR;\n\n\t\t\t$provide.decorator('MenuService', ['$delegate', '$location', '$log', '$rootScope', '$window', 'TokenService', 'MessagesService', 'PageLayoutService', 'CORE_CONSTANTS',\n\t\t\t\tfunction MenuServiceDecorator($delegate, $location, $log, $rootScope, $window, TokenService, MessagesService, PageLayoutService, CORE_CONSTANTS) {\n\n\t\t\t\t\tvar self = $delegate;\n\n\t\t\t\t\tself.caricaMenuLeft = function (result, iconTree) {\n\n\t\t\t\t\t\tif (result === undefined) {\n\t\t\t\t\t\t\t$log.debug(\"Caricamento menu standard\");\n\t\t\t\t\t\t\tresult = _fallbackMenu;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$rootScope.menuLeft = result;\n\n\t\t\t\t\t\t\t// senza definizioni non andiamo avanti\n\t\t\t\t\t\t\tif ($rootScope.menuLeft === undefined || $rootScope.menuLeft === null) {\n\t\t\t\t\t\t\t\tself.emptyData(self.nodata);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (iconTree !== undefined) {\n\t\t\t\t\t\t\t\tself.updateMenuIcons(iconTree);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tPageLayoutService.setMenuLeftEnabled(true);\n\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t$rootScope.menuLeft = undefined;\n\t\t\t\t\t\t\t$log.error(\"Non è stato possibile disegnare il menu contestuale\");\n\t\t\t\t\t\t\t$log.error(e);\n\t\t\t\t\t\t\t$log.debug(result);\n\t\t\t\t\t\t\tMessagesService.addMessageError(CORE_CONSTANTS.CLIENT_ERROR_MSG);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tself.menuActive = function (page) {\n\t\t\t\t\t\tvar active = false;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar current = $location.path();\n\t\t\t\t\t\t\tif (current === undefined) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcurrent = '#!' + current;\n\n\t\t\t\t\t\t\tactive = (current === page);\n\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn active ? \"active\" : \"\";\n\t\t\t\t\t};\n\n\n\t\t\t\t\tself.caricaMenuTop = function (menu) {\n\n\t\t\t\t\t\tmenu = {\n\t\t\t\t\t\t\tmenuType: 'standard',\n\t\t\t\t\t\t\tsectionTitle: {\n\t\t\t\t\t\t\t\tlabel: \"Home\",\n\t\t\t\t\t\t\t\tpath: \"#!/home\",\n\t\t\t\t\t\t\t\tvisible: \"true\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ticon: \"fa fa-home\",\n\t\t\t\t\t\t\t\t\tlabel: \"Home\",\n\t\t\t\t\t\t\t\t\tpath: \"#!/home\",\n\t\t\t\t\t\t\t\t\tvisible: \"true\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: \"Comunicazione\",\n\t\t\t\t\t\t\t\t\ticon: \"fas fa-pencil-alt\",\n\t\t\t\t\t\t\t\t\tpath: \"#!/comunicazione\",\n\t\t\t\t\t\t\t\t\tvisible: \"true\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: \"Attestazioni\",\n\t\t\t\t\t\t\t\t\ticon: \"fas fa-file-pdf\",\n\t\t\t\t\t\t\t\t\tpath: \"#!/attestazioni\",\n\t\t\t\t\t\t\t\t\tvisible: \"true\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: \"Annullamento\",\n\t\t\t\t\t\t\t\t\ticon: \"fas fa-undo\",\n\t\t\t\t\t\t\t\t\tpath: \"#!/annullamento\",\n\t\t\t\t\t\t\t\t\tvisible: \"true\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t//fuzione di servizio\n\t\t\t\t\t\tvar _setMenu = function (menu) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t$rootScope.menuTop = menu;\n\n\t\t\t\t\t\t\t\t// senza definizioni non andiamo avanti\n\t\t\t\t\t\t\t\tif ($rootScope.menuTop === undefined || $rootScope.menuTop === null) {\n\t\t\t\t\t\t\t\t\tself.emptyData(self.nodata);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tPageLayoutService.setMenuTopEnabled(true);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t$rootScope.menuTop = undefined;\n\t\t\t\t\t\t\t\t$log.error(e);\n\t\t\t\t\t\t\t\t$log.debug(result);\n\t\t\t\t\t\t\t\tMessagesService.addMessageError(CORE_CONSTANTS.CLIENT_ERROR_MSG);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//promise or set\n\t\t\t\t\t\t/*if (menu === undefined) {\n\t\t\t\t\t\t\tApiMenu.getMenuTop(true).then(function (result) {\n\t\t\t\t\t\t\t\t_setMenu(result);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t_setMenu(menu);\n\t\t\t\t\t\t//}\n\n\n\t\t\t\t\t};\n\n\t\t\t\t\tself.emptyData = function (msg) {\n\t\t\t\t\t\t$log.debug(msg);\n\t\t\t\t\t\tMessagesService.addMessageError(msg);\n\t\t\t\t\t};\n\n\t\t\t\t\t//caricamento iniziale con menu di base\n\t\t\t\t\tself.init();\n\n\t\t\t\t\treturn $delegate;\n\t\t\t\t}\n\t\t\t]);\n\n\t\t\t$provide.decorator('InterceptorService', ['$delegate', '$rootScope', '$location', '$window', '$log', 'MessagesService', 'TokenService', 'CONSTANTS',\n\t\t\t\tfunction InterceptorServiceDecorator($delegate, $rootScope, $location, $window, $log, MessagesService, TokenService, CONSTANTS) {\n\n\t\t\t\t\tvar self = $delegate;\n\n\t\t\t\t\tvar parseMessages = function (response) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar data = null;\n\t\t\t\t\t\t\tif (response !== undefined && response !== null) {\n\t\t\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (data !== undefined && data !== null) {\n\t\t\t\t\t\t\t\t//se la response contiene messaggi li notifichiamo ai controller (il reset rimane comunque applicativo).\n\t\t\t\t\t\t\t\tif (data.messages !== undefined && data.messages !== null\n\t\t\t\t\t\t\t\t\t//escludioamo errori modali (come verifica pincode)\n\t\t\t\t\t\t\t\t\t&& !(data.codiceErrore >= 200 && data.codiceErrore <= 299)) {\n\t\t\t\t\t\t\t\t\t$log.log(\"Aggiunta messages da interceptor\");\n\t\t\t\t\t\t\t\t\t$log.log(data.messages);\n\t\t\t\t\t\t\t\t\tMessagesService.setMessages(data.messages);\n\n\t\t\t\t\t\t\t\t\tif (MessagesService.hasSecurityErrors()) {\n\t\t\t\t\t\t\t\t\t\t$rootScope.$broadcast('securityError');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t//focus su area messaggi\n\t\t\t\t\t\t\t\t\tif (MessagesService.hasAnyMessage()) {\n\t\t\t\t\t\t\t\t\t\tMessagesService.focusId(\"messages-container\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t$log.log(e);\n\t\t\t\t\t\t\tMessagesService.addMessageError(\"Si e' verificato un errore nella lettura dei dati dal server\");\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvar redirectApplicativo = function (response) {\n\t\t\t\t\t\tvar data = null;\n\t\t\t\t\t\tif (response !== undefined && response !== null) {\n\t\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (data && data.codiceErrore !== undefined) {\n\t\t\t\t\t\t\tswitch (data.codiceErrore) {\n\t\t\t\t\t\t\t\tcase \"01\":\n\t\t\t\t\t\t\t\t\t$location.path(\"/home\");\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tself.request = function (config) {\n\t\t\t\t\t\t//nessuna personalizzazione\n\t\t\t\t\t\treturn config;\n\t\t\t\t\t};\n\t\t\t\t\tself.requestError = function (rejection) {\n\t\t\t\t\t\t//nessuna personalizzazione\n\t\t\t\t\t\treturn rejection;\n\t\t\t\t\t};\n\t\t\t\t\tself.response = function (response) {\n\n\t\t\t\t\t\t//nel keepalive no spinner\n\t\t\t\t\t\tif (response.status == 202)\n\t\t\t\t\t\t\treturn response;\n\t\t\t\t\t\t//spinner\n\t\t\t\t\t\tvar id = response.config.url;\n\n\t\t\t\t\t\tvar data = null;\n\t\t\t\t\t\tif (response != undefined && response != null) {\n\t\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseMessages(response);\n\n\t\t\t\t\t\t//errori applicativi codificati\n\t\t\t\t\t\tredirectApplicativo(response);\n\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t\tself.responseError = function (response) {\n\n\t\t\t\t\t\tvar status = response.status;\n\n\t\t\t\t\t\t//aggiunta messages\n\t\t\t\t\t\tparseMessages(response);\n\n\t\t\t\t\t\t//errori applicativi codificati\n\t\t\t\t\t\tredirectApplicativo(response);\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\tvar id = response.config.url;\n\t\t\t\t\t\t\n\t\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// In caso di codice -1 (il server non risponde), 0 (non parte la chiamata Ajax dal browser) o 404,\n\t\t\t\t\t\t// si rimanda sulla pagina di errore\n\t\t\t\t\t\t//\n\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\tcase 404:\n\t\t\t\t\t\t\t$window.location.href = CONSTANTS[\"404_PAGE\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// In caso di codice 401 o 403, si rimanda sulla pagina di login\n\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tcase 401:\n\t\t\t\t\t\t\t$window.location.href = CONSTANTS[\"401_PAGE\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 400:\n\t\t\t\t\t\tcase 403:\n\t\t\t\t\t\t\t$window.location.href = CONSTANTS[\"403_PAGE\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}*/\n\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\n\t\t\t\t\tself.redirectToLogin = function () {\n\t\t\t\t\t\tTokenService.logout();\n\t\t\t\t\t\t$window.location = CONSTANTS.PATH_ERR_403;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn $delegate;\n\t\t\t\t}\n\t\t\t]);\n\n\t\t\t$provide.decorator('AjaxService', ['$delegate', '$rootScope', '$q', '$http',\n\t\t\t\tfunction AjaxServiceDecorator($delegate, $rootScope, $q, $http) {\n\n\t\t\t\t\tvar self = $delegate;\n\n\t\t\t\t\tself.ajaxRequest = function (method, URL, data, params, callback, key) {\n\t\t\t\t\t\tvar deferred = $q.defer();\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Se non ci sono parametri da passare come query string, viene inizializzato l'oggetto vuoto\n\t\t\t\t\t\t */\n\t\t\t\t\t\tparams = params ? params : {};\n\n\t\t\t\t\t\t//se tra i parametri è presente il pincode lo passo nell'header e non nella url\n\t\t\t\t\t\tvar pincode = \"\";\n\t\t\t\t\t\tif (params.pincode) {\n\t\t\t\t\t\t\tpincode = params.pincode;\n\t\t\t\t\t\t\tdelete params.pincode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Viene aggiunto ai parametri il timestamp per evitare la cache\n\t\t\t\t\t\t */\n\t\t\t\t\t\tparams.v = new Date().getTime();\n\n\t\t\t\t\t\t$http({\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\turl: URL,\n\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\tparams: params,\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t * Headers di sicurezza\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t\t\t\t\t\t\"X-XSS-Protection\": \"1; mode=block\",\n\t\t\t\t\t\t\t\t\"X-Frame-Options\": \"deny\",\n\t\t\t\t\t\t\t\t\"Strict-Transport-Security\": \"max-age=16070400; includeSubDomains\",\n\t\t\t\t\t\t\t\t\"pincode\": pincode\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}).then(function (response) {\n\t\t\t\t\t\t\tdeferred.resolve(response.data);\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback(key, response.data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (error) {\n\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn deferred.promise;\n\t\t\t\t\t};\n\n\t\t\t\t\treturn $delegate;\n\t\t\t\t}\n\t\t\t]);\n\t\t}]);\n\n\t\t//log eccezioni\n\t\tfeeAngularjs.factory('$exceptionHandler', ['$injector', function ($injector) {\n\t\t\t//\t\t\t['$log', 'MessagesService', /*'logErrorsToBackend',*/ function($log, MessagesService /*,logErrorsToBackend*/) {\n\n\t\t\tvar $log, MessagesService;\n\n\t\t\treturn function myExceptionHandler(exception, cause) {\n\t\t\t\t$log = $log || $injector.get('$log');\n\t\t\t\tMessagesService = MessagesService || $injector.get('MessagesService');\n\n\t\t\t\t//logErrorsToBackend(exception, cause);\n\t\t\t\t$log.warn(exception, cause);\n\n\t\t\t\tvar clientErr = $injector.get('CONSTANTS').CLIENT_ERR;\n\t\t\t\tMessagesService.addMessageError(clientErr);\n\t\t\t};\n\t\t}]);\n\n\t\treturn feeAngularjs;\n\t});\t","\nimport angular from 'angular';\n\n// eslint-disable-next-line no-undef\nconst isDevServer = process?.env?.NODE_ENV === 'development';\nif (isDevServer) {\n\n\tvar module = angular.module('modelliModule');\n\n\tmodule.config(['$routeProvider', '$httpProvider', '$logProvider', 'CONSTANTS',\n\t\tfunction ($routeProvider, $httpProvider, $logProvider, CONSTANTS) {\n\n\t\t\t$routeProvider.\n\t\t\t\twhen('/playground', {\n\t\t\t\t\ttemplate: ''\n\t\t\t\t});\n\t\t}]);\n\n\n\tvar html = `\n\t
\n\t\t\n\n\t\t\n\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t`;\n\n\tmodule.component('playground', {\n\t\tcontrollerAs: 'vm',\n\t\ttemplate: html,\n\t\tcontroller: ['$log', 'ModelliService', 'AjaxService', 'UtenteService',\n\t\t\tfunction ($log, ModelliService, AjaxService, UtenteService) {\n\t\t\tvar vm = this;\n\n\t\t\tvm.$onInit = function () {\n\t\t\t\tvm.data = { tipoOpzione: 'B', compilazione: { datiIntervento: { tipoIntervento: '1' }, datiCatastali: [] } };\n\t\t\t}\n\n\t\t\tvm.handleInputChange = function (field, value) {\n\t\t\t\t$log.info(`Changed ${field}=${value}`);\n\n\t\t\t\t//validazione campo/campi\n\t\t\t\tModelliService.validate(vm.form, 'C', '122', vm.data, field)\n\t\t\t}\n\n\t\t\tvm.exception = function (type) {\n\t\t\t\tAjaxService.ajaxRequest(\"GET\", `/ccire-services-web/rs/test/exception/${type}`).then(function (response) {\n\t\t\t\t\t$log.info(response);\n\t\t\t\t}, function (response) {\n\t\t\t\t\t$log.info(response);\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\t\tvm.testUser = function (num) {\n\n\t\t\t\t\tswitch (num) {\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tUtenteService.setUser({\n\t\t\t\t\t\t\t\t\"userName\": \"TLEMRA83A01H501T\",\n\t\t\t\t\t\t\t\t\"userDenom\": \"TLE\",\n\t\t\t\t\t\t\t\t\"backLink\": \"https://entwlpls00-01.agenziaentrate.gov.it/PortaleWeb/home\",\n\t\t\t\t\t\t\t\t\"backLinkTitle\": \"Home Portale\",\n\t\t\t\t\t\t\t\t\"userData\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"strong\": true,\n\t\t\t\t\t\t\t\t\t\t\"description\": \"TMNLSN73E29H501Y\",\n\t\t\t\t\t\t\t\t\t\t\"label\": \"Utenza di lavoro:\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \"TMN\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"userLinks\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"href\": \"https://svil.agenziaentrate.gov.it:9444/Main/\",\n\t\t\t\t\t\t\t\t\t\t\"icon\": \"fas fa-users\",\n\t\t\t\t\t\t\t\t\t\t\"title\": \"Cambia Utenza\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"expiration\": 1647561240000,\n\t\t\t\t\t\t\t\t\"lastLogin\": 1647554566478\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\tUtenteService.setUser({\n\t\t\t\t\t\t\t\t\"userName\": \"TLEMRA83A01H501T\",\n\t\t\t\t\t\t\t\t\"userDenom\": \"\",\n\t\t\t\t\t\t\t\t\"backLink\": \"https://entwlpls00-01.agenziaentrate.gov.it/PortaleWeb/home\",\n\t\t\t\t\t\t\t\t\"backLinkTitle\": \"Home Portale\",\n\t\t\t\t\t\t\t\t\"userData\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"strong\": true,\n\t\t\t\t\t\t\t\t\t\t\"description\": \"TMNLSN73E29H501Y\",\n\t\t\t\t\t\t\t\t\t\t\"label\": \"Utenza di lavoro:\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \"TMN\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"userLinks\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"href\": \"https://svil.agenziaentrate.gov.it:9444/Main/\",\n\t\t\t\t\t\t\t\t\t\t\"icon\": \"fas fa-users\",\n\t\t\t\t\t\t\t\t\t\t\"title\": \"Cambia Utenza\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"expiration\": 1647561240000,\n\t\t\t\t\t\t\t\t\"lastLogin\": 1647554566478\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tUtenteService.setUser({\n\t\t\t\t\t\t\t\t\"userName\": \"\",\n\t\t\t\t\t\t\t\t\"userDenom\": \"TLE\",\n\t\t\t\t\t\t\t\t\"backLink\": \"https://entwlpls00-01.agenziaentrate.gov.it/PortaleWeb/home\",\n\t\t\t\t\t\t\t\t\"backLinkTitle\": \"Home Portale\",\n\t\t\t\t\t\t\t\t\"userData\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"strong\": true,\n\t\t\t\t\t\t\t\t\t\t\"description\": \"TMNLSN73E29H501Y\",\n\t\t\t\t\t\t\t\t\t\t\"label\": \"Utenza di lavoro:\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \"TMN\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"userLinks\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"href\": \"https://svil.agenziaentrate.gov.it:9444/Main/\",\n\t\t\t\t\t\t\t\t\t\t\"icon\": \"fas fa-users\",\n\t\t\t\t\t\t\t\t\t\t\"title\": \"Cambia Utenza\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"expiration\": 1647561240000,\n\t\t\t\t\t\t\t\t\"lastLogin\": 1647554566478\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t}]\n\t});\n\n\n\tmodule.component('prototest', {\n\t\tcontrollerAs: 'vm',\n\t\ttemplate: `\n
\n\n \n \n \n\n
\n `,\n\t\tbindings: {\n\t\t\tprofilo: '=',\n\t\t\topen: '='\n\t\t},\n\t\tcontroller: ['ModelliService', function (ModelliService) {\n\t\t\tvar vm = this;\n\t\t\tvm.$onInit = function () {\n\t\t\t}\n\t\t\tvm.testA = function () {\n\t\t\t\tModelliService.goToProtocollo(\"0123456789\", \"PROVACF\", \"Titolo\", \"A\");\n\t\t\t}\n\t\t\tvm.testC = function () {\n\t\t\t\tModelliService.goToProtocollo(\"0123456789\", \"PROVACF\", \"Titolo\", \"C\");\n\t\t\t}\n\n\n\t\t\tvm.canConfirm = function () {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvm.handleModalOpenTest = function () {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tresolve(\"ok\");\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tvm.handleInvioTest = function (pincode) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\n\t\t\t\t\tModelliService.goToProtocollo(\"0123456789\", \"MZZLCU84L03H501A\", \"Prova\", \"C\");\n\n\t\t\t\t\tresolve(\"ok\");\n\t\t\t\t});\n\t\t\t};\n\t\t}]\n\t});\n}","\nimport angular from 'angular';\nvar module = angular.module('homeModule', ['feeAjsCore', 'feeAjsServizi', 'feeButter']);\n\n/**\n * Routing Home\n */\nmodule.config(['$routeProvider', function ($routeProvider) {\n\n $routeProvider.\n when('/home', {\n template: '',\n resolve: {\n data: ['Resolver', 'ApiAnagrafica', 'HomeApi', 'UtenteService', '$log', function (Resolver, ApiAnagrafica, HomeApi, UtenteService, $log) {\n return ApiAnagrafica.getProfilo().then(function (response) {\n return Resolver([HomeApi.getHome(), response]);\n }, function (error) {\n $log.error(error);\n });\n }]\n }\n })\n}]);\n\n","\nimport angular from 'angular';\nvar module = angular.module('homeModule');\n\n/**\n * Accesso ai dati per la home\n */\nmodule.service('HomeApi', ['AjaxService', 'CONSTANTS', function HomeApi(AjaxService, CONSTANTS) {\n\tthis.getHome = function () {\n\t\treturn AjaxService.promisesGetter(CONSTANTS.DO_HOME, null, null, \"home\", true);\n\t};\n}]);\n\n","import angular from 'angular';\nvar module = angular.module('homeModule');\n\nmodule.component('home', {\n\tcontrollerAs: 'homeCtrl',\n\ttemplate: /*html*/`\n\t
\n\t\t

\n\t\t\tHome\n\t\t

\n\n\t\t\n\n\t\t
    \n\t\t\t
  1. \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t

    {{ item.tipo | label }}

    \n\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t

    Attraverso questa funzione è possibile comunicare l'opzione per la cessione, nei termini previsti dalle relative disposizioni.

    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t

    Questa funzione consente di annullare le comunicazioni già inviate.

    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t

    Questa funzione consente di visualizzare e stampare le comunicazioni inviate e le relative ricevute.

    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
      0\">\n\t\t\t\t\t\t\t\t
    • {{item}}
    • \t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t
    \t\t\n\t\t\t
  2. \n\t\t
\n\t
\n\t`,\n\tbindings: {\n\t\thome: '=',\n\t\tprofilo: '='\n\t},\n\tcontroller: ['$rootScope', 'CONSTANTS', 'MessagesService', 'HomeApi', 'UtenteService', 'FileService',\n\t\tfunction ($rootScope, CONSTANTS, MessagesService, HomeApi, UtenteService, FileService) {\n\t\t\tvar homeCtrl = this;\n\n\t\t\thomeCtrl.$onInit = function () {\n\t\t\t\thomeCtrl.canShow = false;\n\t\t\t\thomeCtrl.MessagesService = MessagesService;\n\t\t\t\thomeCtrl.invioClicked = false;\n\t\t\t\thomeCtrl.input;\n\t\t\t\thomeCtrl.FileService = FileService;\n\t\t\t\ttry {\n\n\t\t\t\t\thomeCtrl.manualeUtente = function () {\n\t\t\t\t\t\tvar urlParams = {};\n\t\t\t\t\t\tFileService.openResponseInNewWindow('/ccire-services-web/rs/Stampa/manualeUtente/', urlParams);\n\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\t\t* Verifico i dati ottenuti dalla resolve in app.js\n\t\t\t\t\t*/\n\t\t\t\t\tif (homeCtrl.home.messages && homeCtrl.home.messages.length > 0) {\n\t\t\t\t\t\t//homeCtrl.MessagesService.addErrorMessages(homeCtrl.home.messages);\n\t\t\t\t\t\thomeCtrl.MessagesService.setMessages(homeCtrl.home.messages);\n\t\t\t\t\t\thomeCtrl.canShow = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\thomeCtrl.modelli = homeCtrl.home ? homeCtrl.home.listaModelli : null;\n\t\t\t\t\thomeCtrl.input = {};\n\t\t\t\t\thomeCtrl.input.profilo = homeCtrl.home ? homeCtrl.home.profilo : null;\n\t\t\t\t\thomeCtrl.canShow = true;\n\t\t\t\t\t$rootScope.$broadcast('tiTroviIn', null);\n\n\t\t\t\t} catch (e) {\n\t\t\t\t\tvar clientErr = CONSTANTS.CLIENT_ERR;\n\t\t\t\t\thomeCtrl.MessagesService.addMessageError(clientErr);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n});","import angular from 'angular';\n\n//Crea modulo\nangular.module('modelliModule', []);\n\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.service('ModelliService', ['$log', '$location', '$injector', 'ModelliApi', 'StorageService', 'MessagesService', 'ErrorService', ModelliService]);\n\n/*\n * Service che definisce i metodi e funzioni comuni tra i vari modelli\n */\nfunction ModelliService($log, $location, $injector, ModelliApi, StorageService, MessagesService, ErrorService) {\n\n var service = this;\n\n\n var _toValidate = function (fieldName, fieldsToCheck) {\n //verifica nome campo tra quelli interessati\n if (fieldName) {\n for (let index = 0; index < fieldsToCheck.length; index++) {\n const element = fieldsToCheck[index];\n var reg = new RegExp(element + \"-(riga-)?\\\\d{1,3}\", 'g');\n if (element === fieldName || fieldName.match(reg)) {\n return true;\n }\n }\n }\n //se vuoto validiamo\n return fieldName === undefined || fieldName === null || fieldName === '';\n }\n\n var _setValidity = function (form, fieldName, erroKey, errorLabel, valid) {\n ErrorService.addErrorLabel(erroKey, errorLabel);\n var field = form[fieldName];\n\n //cerchiamo sugli ngForm\n if (!field && form.$$controls) {\n for (let index = 0; index < form.$$controls.length; index++) {\n const control = form.$$controls[index];\n if (control.$$controls) {\n field = control[fieldName];\n if (field) {\n break;\n }\n }\n }\n }\n if (field) {\n field.$setValidity(erroKey, valid);\n }\n }\n\n //esposti per ModelloXYZService\n this._toValidate = _toValidate;\n this._setValidity = _setValidity;\n\n this.goToProtocollo = function (protocollo, codiceFiscale, title, tipologia) {\n StorageService.setResource(\"protocollo\", protocollo);\n StorageService.setResource(\"codiceFiscale\", codiceFiscale);\n StorageService.setResource(\"title\", title);\n StorageService.setResource(\"message\", tipologia === 'A' ? \"La richiesta di annullamento è stata accolta con i seguenti riferimenti:\" : \"Il modello è stato accolto con i seguenti riferimenti:\");\n StorageService.setResource(\"stampa\", tipologia === 'C');\n\n $location.path(\"/protocollo\");\n }\n\n this.goToAnnullamento = function (protocollo, codiceFiscale, articolo) {\n //non viaggia su url\n StorageService.setResource(\"cfCedente\", codiceFiscale);\n var protocolloEscaped = protocollo.split(\"/\").join(\"-\");\n $location.path(`/annullamento/${articolo}/${protocolloEscaped}`);\n }\n\n this.invia = function (pincode, tipo, articolo, data, title, callbackSuccess, callbackError) {\n\n MessagesService.resetMessages();\n\n //propaghiamo 121, 122, etc\n data.articolo = articolo;\n\n return ModelliApi.invia(tipo, articolo, data, pincode).then(\n function (response) {\n\n if (response.protocollo) {\n\n if (callbackSuccess) {\n callbackSuccess(response);\n }\n\n $log.info(\"Invio eseguito: \");\n $log.info(response);\n\n service.goToProtocollo(response.protocollo, data.modello.cedente.codiceFiscale, title, tipo);\n\n\n } else {\n if (callbackError) {\n callbackError(response);\n }\n //TODO per me questo va rimosso, perchè aggionare dei dati post-invio?\n if (response.modello && data.modello.compilazione)\n data.modello.compilazione.datiCessionario = response.modello.compilazione.datiCessionario;\n }\n }, function (response) {\n $log.error(response);\n //if (sezioneTemp)//ripristino l'eventuale sezione mafia\n // data.modello.richiesta.sezioneAntimafia = sezioneTemp;\n MessagesService.setMessages(response.data.messages);\n //MessagesService.addErrorMessages([\"Si è verificato un errore\"]);\n if (callbackError) {\n callbackError(response);\n }\n });\n }\n\n /**\n * Dispatcher di validazione\n */\n this.validate = function (form, tipologia, articolo, data, fieldName) {\n var service = $injector.get(`Modello${articolo}Service`);\n service.validate(form, tipologia, articolo, data, fieldName);\n }\n\n /**\n * Reset la tipolgia cessionario\n */\n this.resetCessionarioTipologie = function (datiCessionario) {\n if (datiCessionario) {\n for (let index = 0; index < datiCessionario.length; index++) {\n const cessionario = datiCessionario[index];\n cessionario.tipologiaCessionario = 0;\n }\n }\n }\n\n /**\n * protocolloQ20 a undefined se \"\"\n * */\n this.resetImpegnoTrasmissione = function (impegnoTrasmissione) {\n if (impegnoTrasmissione?.protocolloQ20 == \"\") {\n impegnoTrasmissione.protocolloQ20 = undefined;\n }\n }\n\n this.validateCessionario = function (form, tipologia, articolo, data, fieldName, errorCessionariMaggiore) {\n\n if (!errorCessionariMaggiore) {\n errorCessionariMaggiore = \"Totale credito ceduto/sconto maggiore della detrazione \";\n }\n\n //opzione B, tipologie 0\n if (data.tipoOpzione === 'B') {\n this.resetCessionarioTipologie(data.compilazione && data.compilazione.datiCessionario);\n }\n\n if (_toValidate(fieldName, ['intestazione','tipologiaCessionario', 'codiceFiscale', 'creditoCeduto'])) {\n if (data.compilazione.datiCessionario) {\n\n\n //totale\n var totaleCreditoCeduto = 0;\n for (var i = 0; i < data.compilazione.datiCessionario.length; i++) {\n totaleCreditoCeduto += parseInt(data.compilazione.datiCessionario[i].creditoCeduto);\n }\n //Set del totale\n data.compilazione.totaleCreditoCeduto = totaleCreditoCeduto;\n\n const creditoMaggiore = totaleCreditoCeduto > parseInt(data.compilazione && data.compilazione.datiIntervento && data.compilazione.datiIntervento.importoCreditoCedibile);\n\n for (let index = 0; index < data.compilazione.datiCessionario.length; index++) {\n const cessionario = data.compilazione.datiCessionario[index];\n var numCessionario = index + 1;\n const tipologiaValida = data.tipoOpzione !== 'A'\n || (data.tipoOpzione === 'A' && cessionario.tipologiaCessionario !== undefined && parseInt(cessionario.tipologiaCessionario) !== 0);\n _setValidity(form,\n 'tipologiaCessionario-riga-' + numCessionario,\n \"tipologiaCessionarioRequired\",\n \"Devi selezionare una tipologia cessionario\",\n tipologiaValida\n );\n\n const cfValido = !cessionario.codiceFiscale\n || !data.cedente.codiceFiscale\n || (data.cedente.codiceFiscale !== cessionario.codiceFiscale);\n _setValidity(form,\n 'codiceFiscale-riga-' + numCessionario,\n \"cessionarioUgualeCedente\",\n \"Il Codice fiscale cessionario deve essere diverso dal cedente\",\n cfValido\n );\n\n _setValidity(form,\n 'creditoCeduto-riga-' + numCessionario,\n \"creditoMaggiore\",\n errorCessionariMaggiore,\n !creditoMaggiore\n );\n\n }\n }\n }\n }\n\n}\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.service('ModelliApi', ['$log', '$http', 'AjaxService', 'CONSTANTS', ModelliApi]);\n\n/*funzione per eliminare gli oggetti vuoti*/\nfunction clearEmpties(o) {\n for (var k in o) {\n if (!o[k] || typeof o[k] !== \"object\") {\n continue;\n }\n // The property is an object\n clearEmpties(o[k]); // <-- Make a recursive call on the nested\n\n if (Object.keys(o[k]).length === 0) {\n delete o[k]; // The object had no properties, so delete that\n }\n }\n}\n\n/*\n * Service che definisce i metodi che effettuano chiamate AJAX\n */\nfunction ModelliApi($log, $http, AjaxService, CONSTANTS) {\n\n var _path = function (url, params) {\n var path = angular.copy(url);\n for (var key in params) {\n var value = params[key];\n path = path.replace(\"{\" + key + \"}\", value);\n }\n return path;\n };\n\n /*\n * Metodi pubblici esposti dal Service\n */\n /*AT: esposto perche' chiamato da modello inviato*/\n this.buildPath = function (originalPath, args) {\n return _path(originalPath, args);\n };\n\n\n /*\n * verifica se l'oggetto è vuoto\n */\n this.isEmpty = function (obj) {\n if (obj === undefined || obj === null) {\n return true;\n }\n if (obj.length === 0) {\n return true;\n }\n if (obj.length === 1 && obj[0] === undefined) {\n return true;\n }\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop))\n return false;\n }\n return true;\n };\n\n this.getTipologieIntervento = function (cf, anno, articolo, opzione) {\n return AjaxService.ajaxRequest(\"POST\", `${CONSTANTS.GET_RISORSE_FORM}/${anno}/${articolo}/${opzione}`, { codiceFiscale: cf });\n };\n\n this.getAnni = function (cf, articolo) {\n return AjaxService.ajaxRequest(\"POST\", `${CONSTANTS.GET_RISORSE_FORM}/anni/${articolo}`, { codiceFiscale: cf });\n };\n\n this.getArticoli = function (cf) {\n return AjaxService.ajaxRequest(\"POST\", `${CONSTANTS.GET_RISORSE_FORM}/articoli/`, { codiceFiscale: cf });\n };\n\n this.getHome = function () {\n return AjaxService.promisesGetter(CONSTANTS.DO_HOME, null, null, \"home\", true);\n };\n\n this.getModelloOpen = function (tipo) {\n var path = _path(CONSTANTS.CHECK_FUNZIONALITA, { 'tipo': tipo });\n return AjaxService.promisesGetter(path, null, null, \"tipoModello\" + tipo, true);\n };\n\n this.initDati = function (cfCedente, articolo, anno, tipo) {\n var path = _path(CONSTANTS.DO_INIT_DATI, { 'tipo': tipo, 'articolo': articolo });\n return AjaxService.ajaxRequest(\"POST\", path, { cfCedente: cfCedente, articolo: articolo, anno: anno });\n };\n\n this.getDatiProtocollo = function (cfCedente, protocollo, tipo, articolo) {\n var path = _path(CONSTANTS.DO_GET_DATI, { 'tipo': tipo, 'articolo': articolo });\n return AjaxService.ajaxRequest(\"POST\", path, { cfCedente: cfCedente, protocollo: protocollo, articolo: articolo });\n };\n\n this.validazione = function (tipo, articolo, data, callback) {\n $log.debug(data);\n\n var path = _path(CONSTANTS.DO_VALIDAZIONE, { 'tipo': tipo, 'articolo': articolo });\n return AjaxService.ajaxRequest(\"POST\", path, data, undefined, callback, data);\n };\n\n this.stampa = function (tipo, articolo, data, success, error) {\n $log.debug(data);\n\n var path = _path(CONSTANTS.DO_STAMPA_BOZZA, { 'tipo': tipo, 'articolo': articolo });\n var method = 'POST';\n $http({\n url: path,\n method: method,\n responseType: 'arraybuffer',\n headers: AjaxService.getHeader(method),\n data: data\n }).then(success, error);\n\n };\n\n this.invia = function (tipo, articolo, data, pincode) {\n $log.debug(data);\n clearEmpties(data)\n\n //fix dati contabili con zero\n // ripulisciDatiSuperflui(data);\n var path = _path(CONSTANTS.DO_INVIA_MODELLO, { 'tipo': tipo, 'articolo': articolo });\n\n var params;\n if (pincode) {\n params = { 'pincode': pincode };\n }\n return AjaxService.ajaxRequest(\"POST\", path, data, params);\n };\n\n //this.getAttestazioni = function (tipo, data) {\n // $log.debug(data);\n // return AjaxService.ajaxRequest(\"POST\", CONSTANTS.DO_RICERCA_ATTESTAZIONI, data);\n //};\n\n this.getAttestazioniPagine = function (tipo, data) {\n $log.debug(data);\n var rows_pages = tipo.split('/');\n return AjaxService.ajaxRequest(\"POST\", CONSTANTS.DO_RICARICA_ATTESTAZIONI_PAG + rows_pages[0] + \"/\" + rows_pages[1], data);\n };\n\n this.getCalcoloImporti = function (tipo, tipoAz, data) {\n $log.debug(data);\n var path = _path(CONSTANTS.DO_CALCOLO_IMPORTI, { 'tipo': tipo, 'tipoAz': tipoAz });\n return AjaxService.ajaxRequest(\"POST\", path, data);\n };\n\n this.getImportiMensili = function (anno) {\n return AjaxService.ajaxRequest(\"POST\", `${CONSTANTS.GET_RISORSE_FORM}/importiMensili/${anno}`);\n };\n\n}\n","import angular from 'angular';\nvar module = angular.module('modelliModule');\n\nmodule.filter('decimal', ['$filter', function ($filter) {\n\treturn function (input) {\n\t\treturn $filter('currency')(input, \"\");\n\t};\n}]);\n\nmodule.filter('migliaia', ['$filter', function ($filter) {\n\treturn function (input) {\n\t\treturn $filter('currency')(input, \"\", false, \"1.2-0\");\n\t};\n}]);\n\n/* \n * Esempio di filtro, non utilizzato nell'applicazione\n */\nmodule.filter('num', [NumFilter]);\nfunction NumFilter() {\n\treturn function (input) {\n\t\treturn parseInt(input);\n\t};\n};\n\n//verifiche call-back\nmodule.filter('cedente', [function () {\n\treturn function (input) {\n\t\treturn input != undefined && input.cedente !== undefined && input.cedente.codiceFiscale !== undefined;\n\t};\n}]);\n\nmodule.filter('comunicazione', ['CONSTANTS', function (CONSTANTS) {\n\treturn function (input) {\n\t\treturn input === CONSTANTS.COMUNICAZIONE;\n\t};\n}]);\nmodule.filter('annullamento', ['CONSTANTS', function (CONSTANTS) {\n\treturn function (input) {\n\t\treturn input === CONSTANTS.ANNULLAMENTO;\n\t};\n}]);\nmodule.filter('attestazioni', ['CONSTANTS', function (CONSTANTS) {\n\treturn function (input) {\n\t\treturn input === CONSTANTS.STAMPA;\n\t};\n}]);\n\nmodule.filter('label', ['LABELS', Label]);\nfunction Label(LABELS) {\n\n\tvar getLabel = function (args) {\n\t\tvar messageId = \"\";\n\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\tvar part = args[i];\n\t\t\tmessageId += part;\n\t\t\tif (i != args.length - 1) {\n\t\t\t\tmessageId += \".\";\n\t\t\t}\n\t\t}\n\t\treturn LABELS[messageId];\n\t};\n\n\treturn function (input) {\n\t\treturn getLabel(arguments);\n\t};\n};\n\nmodule.filter('hrefModello', ['CONSTANTS', hrefModello]);\nfunction hrefModello(CONSTANTS) {\n\n\tvar getHref = function (tipo) {\n\t\tswitch (tipo) {\n\t\t\tcase CONSTANTS.COMUNICAZIONE:\n\t\t\t\treturn \"#!/comunicazione\";\n\t\t\t\tbreak;\n\t\t\tcase CONSTANTS.ANNULLAMENTO:\n\t\t\t\treturn \"#!/annullamento\";\n\t\t\t\tbreak;\n\t\t\tcase CONSTANTS.STAMPA:\n\t\t\t\treturn \"#!/attestazioni\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"\";\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn function (input, azione) {\n\t\treturn getHref(input);\n\t};\n};\n\nmodule.filter('decodeOpzione', function () {\n\treturn function (input) {\n\t\tif (input === undefined) return \"Cessione del credito\";\n\t\tif (input === 'A') return \"Cessione del credito\";\n\t\tif (input === 'B') return \"Contributo sotto forma di sconto\";\n\t\treturn \"Cessione del credito\";\n\t};\n});\n\n\nmodule.filter('decodTipoModello', function () {\n\treturn function (input) {\n\t\tif (input === undefined) return \"---\";\n\t\tif (input === 'C') return \"Comunicazione\";\n\t\tif (input === 'A') return \"Annullamento\";\n\t\treturn \"---\";\n\t};\n});\nmodule.filter('decodeArticolo', function () {\n\treturn function (input) {\n\t\tinput = input || '';\n\t\tif (input === '121') return \"di opzione relativa a interventi efficienza energetica e riduzione rischio sismico\";\n\t\tif (input === '122') return \"per cessione crediti art. 122 DL 34/2020\";\n\t\treturn input;\n\t};\n});\nmodule.filter('decodeArtTabella', function () {\n\treturn function (input) {\n\t\tinput = input || '';\n\t\tif (input === '121') return input + \" - opzione effic. energetica e riduz. rischio sismico\";\n\t\tif (input === '122') return input + \" - cessione crediti art. 122 DL 34/2020\";\n\t\treturn input;\n\t};\n});\n\nmodule.filter('decodeTipo', function () {\n\treturn function (input) {\n\t\tif (input === undefined) return \"\";\n\t\tif (input === 'A') return \"Abitativo\";\n\t\tif (input === 'T') return \"Terreno\";\n\t\tif (input === 'C') return \"Commerciale\";\n\t\treturn \"\";\n\t};\n});","\nimport angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.component('attestazioni', {\n controllerAs: 'vm',\n template: /*html*/`\n
\n

\n Visualizza e stampa attestazioni\n

\n
\t\n \n \n\n \n\n \n \n
\n `,\n bindings: {\n profilo: '=',\n open: '=',\n protocollo: '=',\n cfCedente: '=',\n articolo: '='\n },\n controller: ['$rootScope', '$location', '$log', 'StorageService', 'ModelliApi', 'MessagesService', function ($rootScope, $location, $log, StorageService, ModelliApi, MessagesService) {\n var vm = this;\n vm.canShow = true;\n vm.currentPage = 1;\n vm.itemsPerPage = 10;\n\n vm.$onInit = function () {\n\n //TODO sostituire con route specifico\n $rootScope.$on('securityError', function (event, response) {\n vm.canShow = false;\n });\n\n vm.parametriRicerca = { cfCedente: vm.cfCedente, protocollo: vm.protocollo, articolo: vm.articolo };\n vm.loadAttestazioni(vm.parametriRicerca, vm.currentPage);\n }\n\n vm.changePage = function (page, itemsPerPage) {\n vm.loadAttestazioni(vm.parametriRicerca, page, itemsPerPage);\n }\n\n vm.loadAttestazioni = function (parametriRicerca, page, itemsPerPage) {\n\n //verifica args minimi per la ricerca\n if (!parametriRicerca.cfCedente) {\n return;\n }\n\n vm.currentPage = page || 1;\n vm.itemsPerPage = itemsPerPage || 10;\n\n // il tipo è stato modificato per la ristampa poichè paginato, pertanto\n // è stato cablato con numero_righe/current page.\n var tipo = vm.itemsPerPage + '/' + vm.currentPage; // 10/1, 10/2, etc\n ModelliApi.getAttestazioniPagine(tipo, parametriRicerca).then(\n function (response) {\n if (MessagesService.hasAnyError()) {\n $log.info(\"Sono presenti degli errori:\", response.messages);\n return;\n }\n\n vm.listaInvii = response.listaInvii;\n vm.listaInviiSize = response.row_number;\n\n //cache per non so quali motivi...\n StorageService.setResource('listaInvii', response.listaInvii);\n\n //impostiamo il form come pristine\n if (vm.formModello) {\n vm.formModello.$setPristine();\n }\n\n }, function (response) {\n $log.error(response);\n MessagesService.setMessages(response.data.messages);\n });\n }\n\n vm.risultatiRicerca = function (parametriRicerca) {\n\n if (!parametriRicerca.cfCedente) {\n $log.error(\"Nessun cedente selezionato\");\n return;\n }\n\n //non viaggiano su url\n StorageService.setResource(\"cfCedente\", parametriRicerca.cfCedente);\n StorageService.setResource(\"protocollo\", parametriRicerca.protocollo);\n StorageService.setResource(\"articolo\", parametriRicerca.articolo);\n\n vm.parametriRicerca = { ...parametriRicerca }\n\n vm.loadAttestazioni(vm.parametriRicerca);\n }\n\n }]\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.component('annullamento', {\n controllerAs: 'vm',\n template: /*html*/`\n
\n

\n {{vm.title}}\n

\n\n\n
\n
\n
\n

Dati non presenti

\n

Il protocollo richiesto non esiste o non è disponibile per l'utente

\n
\n
\n
\n\n \n \n\n
\n\n
\n
\n\n
\n
\n \n
\n
\n

Dati della comunicazione per l'annullamento

\n
\n
\n
\n {{ item.label }}\n
\n
\n {{ item.value }}\n
\n
Ripartizione del credito:
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
Cessionari
{{vm.titlecodicefiscale}}Credito ceduto
{{cessionario.codiceFiscale}}{{cessionario.creditoCeduto | currency}}
\n
\n
\n
Totale ceduto:
\n
\n {{vm.modello.compilazione.totaleCreditoCeduto | currency}}\n
\n
\n
\n
\n
\n\n
\n Non sono presenti risultati per il cedente\n selezionato\n
\n \n
\n
\n
\n
    \n
  • {{msgRinuciaInviata}}
  • \n
\n
\n
\n
\n\n \n\n \n \n\n \n \n \n\n \n\n
\n
\n \n
\n
\n \n
\n
\n `,\n bindings: {\n profilo: '=',\n cfCedente: '=',\n protocollo: '=',\n modello: '=',\n articolo: '=',\n open: '='\n },\n controller: ['$log', '$filter', 'CONSTANTS', 'MessagesService', 'ModelliApi', 'ModelliService', 'ApiAnagrafica',\n function ($log, $filter, CONSTANTS, MessagesService, ModelliApi, ModelliService, ApiAnagrafica) {\n var vm = this;\n\n vm.ApiAnagrafica = ApiAnagrafica;\n\n\n //riabilito btn invio e conferma\n vm.modelloComInviata = undefined;\n vm.protocolloDicRin = undefined;\n //configurazione modello\n vm.tipologia = CONSTANTS['ANNULLAMENTO'];\n\n var caricaList = function () {\n if (vm.modello) {\n var list = [];\n list.push({ label: 'Numero Protocollo:', value: vm.protocollo });\n if (`${vm.articolo}` === \"122\") {\n list.push({ label: 'Cedente:', value: vm.modello?.cedente?.codiceFiscale });\n } else {\n list.push({ label: 'Richiedente:', value: vm.modello?.cedente?.codiceFiscale });\n }\n list.push({ label: 'Tipo di documento:', value: 'Comunicazione' });\n list.push({ label: 'Tipologia di opzione:', value: $filter('decodeOpzione')(vm.modello?.tipoOpzione) });\n\n if (`${vm.articolo}` !== \"122\")\n list.push({ label: 'Tipologia intervento:', value: vm.modello?.compilazione?.datiIntervento?.tipoInterventoDescr });\n else\n list.push({ label: 'Tipologia credito:', value: vm.modello?.compilazione?.datiIntervento?.tipoInterventoDescr });\n\n list.push({ label: 'Anno di riferimento:', value: vm.modello?.compilazione?.datiIntervento?.annoSpesa });\n if (vm.articolo === '121') {\n list.push({ label: 'Totale spesa:', value: $filter('currency')(vm.modello?.compilazione?.datiIntervento?.importoTotaleSpesa) });\n }\n if (vm.articolo === '122')\n list.push({ label: 'Credito maturato:', value: $filter('currency')(vm.modello?.compilazione?.datiIntervento?.importoCreditoMaturato) });\n else\n list.push({ label: 'Credito cedibile:', value: $filter('currency')(vm.modello?.compilazione?.datiIntervento?.importoCreditoCedibile) });\n }\n return list;\n }\n\n vm.$onInit = function () {\n\n if (vm.modello) {\n if (vm.modello.messages && vm.modello.messages.length > 0) {\n //MessagesService.addErrorMessages(vm.model.messages);\n MessagesService.setMessages(vm.modello.messages);\n vm.canShow = false;\n return;\n }\n }\n\n //vm.pinRequired = vm.modello.profilo.pinRequired;\n //Non viaggia su modello ma su profilo\n vm.pinRequired = vm.profilo.pinRequired;\n var anno = vm.modello && vm.modello.compilazione && vm.modello.compilazione.datiIntervento && vm.modello.compilazione.datiIntervento.annoSpesa;\n var title = `Annullamento della comunicazione ${$filter('decodeArticolo')(vm.articolo)}`;\n var titleProtocollo = `Annullamento comunicazione ${$filter('decodeArticolo')(vm.articolo)}`;\n vm.titlecodicefiscale = \"Codice fiscale\";\n if (anno) {\n title += \" - anno \" + anno;\n titleProtocollo += \" - anno \" + anno;\n }\n if (`${vm.articolo}` === \"122\") {\n vm.titlecodicefiscale = \"Codice fiscale cessionari\";\n }\n\n vm.title = title;\n vm.titleProtocollo = titleProtocollo;\n\n //impostiamo il form come pristine\n if (vm.formModello) {\n vm.formModello.$setPristine();\n }\n\n //caricamento tipi intervento\n if (vm.modello && vm.modello.compilazione) {\n ModelliApi.getTipologieIntervento(vm.modello.cedente.codiceFiscale, vm.modello.compilazione.datiIntervento.annoSpesa, vm.articolo, vm.modello.tipoOpzione).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile prelevare i tipi di intervento\";\n }\n\n //label id e descrizione intervento \n var tipoIntervento = vm.modello.compilazione.datiIntervento.tipoIntervento;\n var items = response.tipologieIntervento.filter(t => t.value === tipoIntervento);\n if (items && items.length > 0) {\n vm.modello.compilazione.datiIntervento.tipoInterventoDescr = items[0].value + \" - \" + items[0].descrizione;\n }\n\n vm.list = caricaList(vm.modello);\n\n }, function (error) {\n $log.error(error);\n });\n }\n\n vm.list = caricaList(vm.modello);\n }\n\n vm.createAnnullamento = function () {\n var annullamento = {};\n annullamento.annoRiferimento = vm.modello.compilazione.datiIntervento.annoSpesa;\n annullamento.protocolloComunicazione = vm.protocollo;\n return annullamento;\n }\n\n\n var gestioneValidazione = function (modelOriginal, modelReceive) {\n if (modelReceive.messages && modelReceive.messages.length > 0) {\n var hasWarning = false;\n\n angular.forEach(modelReceive.messages, function (value, key) {\n try {\n if (value.severity === \"WARNING\") {\n hasWarning = true;\n }\n } catch (e) {\n $log.error(e);\n }\n });\n\n if (hasWarning) {\n var change = false;\n if (modelReceive && modelReceive.modello && modelReceive.modello.compilazione && modelReceive.modello.compilazione.datiCessionario) {\n angular.forEach(modelReceive.modello.compilazione.datiCessionario, function (cessReceived, key) {\n try {\n var cessionarioSend = modelOriginal.modello.compilazione.datiCessionario[key];\n if (cessionarioSend.codiceFiscale && cessionarioSend.codiceFiscale != cessReceived.codiceFiscale) {\n cessionarioSend.codiceFiscale = cessReceived.codiceFiscale;\n }\n } catch (e) {\n $log.error(e);\n }\n });\n }\n }\n }\n }\n\n\n vm.handleModalOpen = function () {\n return new Promise((resolve, reject) => {\n //client validate\n var modello = angular.copy(vm.modello);\n\n //creazione nodo specifico per annullamento\n modello.annullamento = vm.createAnnullamento();\n //cancello nodo della compilazione\n modello.compilazione = {};\n\n //client\n ModelliService.validate(vm.formModello, vm.tipologia, vm.articolo, vm.modello);\n\n\n //verifiche server solo se client ok\n if (vm.formModello.$valid) {\n //server validate\n var data = { modello: modello, articolo: vm.articolo };\n //il resolve lo dara l'api in risposta\n return ModelliApi.validazione(vm.tipologia, vm.articolo, data, gestioneValidazione).then(function (response) {\n if (response.messages == undefined) {\n resolve(response);\n } else {\n reject(\"Sono presenti degli errori sui dati\");\n }\n }, function (response) {\n $log.error(response);\n });\n } else {\n reject(\"Sono presenti degli errori sul form\");\n }\n });\n }\n\n vm.handleInvio = function (pincode) {\n\n return new Promise((resolve, reject) => {\n ModelliService.validate(vm.formModello, vm.tipologia, vm.articolo, vm.modello);\n\n if (vm.invioClicked) {\n reject(\"I dati sono già stati inviati\");\n return;\n }\n\n if (vm.formModello.$invalid) {\n reject(\"Sono presenti degli errori sul form\");\n return;\n }\n\n MessagesService.resetMessages(); // Reset dei messaggi\n\n vm.invioClicked = true;\n\n\n var modello = angular.copy(vm.modello);\n modello.annullamento = vm.createAnnullamento();\n //cancello nodo della compilazione\n //modello.compilazione = {};\n\n var data = { modello: modello };\n vm.invioClicked = true;\n\n setTimeout(function () {\n vm.invioClicked = false;\n }, 10000);\n\n return ModelliService.invia(pincode, vm.tipologia, vm.articolo, data, vm.titleProtocollo, function (response) {\n vm.invioClicked = false;\n if (response.messages === undefined || response.messages.length === 0) {\n resolve(response);\n } else {\n //eventuale pincode errato\n reject({ message: response.messages[0].message, close: false });\n }\n }, function (response) {\n vm.invioClicked = false;\n //eventuale pincode errato\n reject({ message: response.messages[0].message, close: false });\n });\n\n });\n }\n\n }]\n});\n\nmodule.component('annullamentoSelezione', {\n controllerAs: 'vm',\n template: /*html*/`\n

\n Annullamento della comunicazione\n

\n
\n
\n \n
\n
\n
\n

Nessun risultato

\n

Non sono presenti risultati per i parametri di ricerca forniti

\n
\n
\n
\n
\n
\n `,\n bindings: {\n profilo: '=',\n open: '='\n },\n controller: ['$location', '$log', 'ModelliService', 'ModelliApi', 'MessagesService', function ($location, $log, ModelliService, ModelliApi, MessagesService) {\n var vm = this;\n\n vm.noResults = false;\n\n vm.$onInit = function () {\n }\n\n vm.verificaProtocollo = function (parametriRicerca) {\n\n if (!parametriRicerca.cfCedente) {\n $log.error(\"Nessun cedente selezionato\");\n return;\n }\n\n //verifica args minimi per la ricerca\n if (!parametriRicerca.cfCedente || !parametriRicerca.protocollo) {\n return;\n }\n\n vm.noResults = false;\n\n //verifica esistenza protocollo\n ModelliApi.getAttestazioniPagine('10/1', parametriRicerca).then(\n function (response) {\n if (MessagesService.hasAnyError()) {\n $log.info(\"Sono presenti degli errori:\", response.messages);\n return;\n }\n //coppia cedente-protocollo trovata\n if (response.listaInvii && response.listaInvii.length > 0) {\n var item = response.listaInvii.filter(invio => invio.protocollo === parametriRicerca.protocollo)[0];\n ModelliService.goToAnnullamento(item.protocollo, item.cfBen, item.articolo);\n } else {\n vm.noResults = true;\n }\n }, function (response) {\n $log.error(response);\n MessagesService.setMessages(response.data.messages);\n });\n }\n }]\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.component('comunicazione', {\n controllerAs: 'vm',\n template: /*html*/`\n
\n

\n \n {{vm.title}}\n

\n \n
\n\n \n \n \n \n\n \n \n \n
0\">\n
    \n
  • {{item}}
  • \t\n
\n
\t\n
0\">\n
    \n
  • {{item}}
  • \t\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n `,\n bindings: {\n profilo: '=',\n open: '=',\n modello: '='\n },\n controller: ['$log', '$rootScope', 'MessagesService', 'CONSTANTS', 'ModelliApi', 'StorageService', 'ModelliService', '$filter',\n function ($log, $rootScope, MessagesService, CONSTANTS, ModelliApi, StorageService, ModelliService, $filter) {\n\n var vm = this;\n vm.canShow = true;\n vm.invioClicked = false;\n vm.tipologia = undefined;\n vm.formModello = undefined;\n\n vm.informativa = {\n '121': \"https://www.agenziaentrate.gov.it/portale/documents/20143/1694312/Opzione_mod.pdf/cf25951e-61ec-69cb-e24b-ba0380b023a0\",\n '122': \"https://www.agenziaentrate.gov.it/portale/documents/20143/3239207/Cessione+cred_mod_V1.pdf/2137defe-274a-a561-7d37-408127f6e0da\"\n };\n\n vm.isEmpty = function (value) {\n if (value === undefined || value === null || value.length === 0) return true;\n return false;\n };\n\n vm.handleCustomMessages = function (vm, response) {\n vm.customErrors = [];\n vm.customWarnings = response.funzionalitaWarnings;\n }\n\n vm.$onInit = function () {\n //inject dipendenze e caricamento variabili \n\n //riabilito btn invio e conferma\n vm.modelloComInviata = undefined;\n vm.protocolloDicRin = undefined;\n vm.customWarnings = undefined;\n vm.customErrors = undefined;\n\n //configurazione modello\n vm.tipologia = CONSTANTS['COMUNICAZIONE'];\n\n //profilo è la response del server con $q.all quindi è un array di roba\n vm.modello.profilo = vm.profilo && (vm.profilo.length ? vm.profilo[0] : vm.profilo);\n vm.pinRequired = vm.modello.profilo.pinRequired;\n\n\n if (vm.modello.messages && vm.modello.messages.length > 0) {\n MessagesService.setMessages(vm.modello.messages);\n\n //ci fermiamo solo se ci sono errori in accesso\n if (MessagesService.hasAnyError()) {\n vm.canShow = false;\n return;\n }\n }\n\n vm.extractDatiCedente(vm.modello);\n\n //Titolo della pagina\n var anno = vm.modello && vm.modello.compilazione && vm.modello.compilazione.datiIntervento && vm.modello.compilazione.datiIntervento.annoSpesa;\n var title = `Compila una comunicazione ${$filter('decodeArticolo')(vm.articolo)}`;\n var titleProtocollo = `Comunicazione ${$filter('decodeArticolo')(vm.articolo)}`;\n if (anno) {\n title += \" - anno \" + anno;\n titleProtocollo += \" - anno \" + anno;\n }\n vm.title = title;\n vm.titleProtocollo = titleProtocollo;\n\n $rootScope.$on('securityError', function (event, response) {\n vm.canShow = false;\n });\n\n //eventi cedente\n $rootScope.$on('cedenteSelezionato', function (event, response) {\n\n vm.handleCustomMessages(vm, response);\n\n vm.extractDatiCedente(response);\n });\n\n $rootScope.$on('cedenteReset', function (event) {\n vm.modello = {};\n vm.articolo = undefined;\n vm.modelloDicRin = {};\n vm.protocolloDicRin = undefined;\n });\n }\n\n vm.extractDatiCedente = function (response) {\n var modello = response.modello;\n var articolo = response.articolo;\n\n //salviamo il modello nello storage, perchè??\n StorageService.setResource('articolo', articolo);\n StorageService.setResource('modello', modello);\n vm.modello = modello;\n vm.articolo = articolo;\n\n //impostiamo il form come pristine\n if (vm.formModello) {\n vm.formModello.$setPristine();\n }\n }\n\n vm.actionDisabled = function (args) {\n //abilitato solo se form buono\n //\t\trimossa questa prima condizione if(this.formModello.$pristine || ...\n if (vm.formModello.$invalid || vm.invioClicked) {\n //form['formChild.form']\n return true;\n }\n return false;\n };\n\n /**\n * Se ok si può confemrare il modale\n */\n vm.canConfirm = function () {\n return vm.formModello.$valid;\n }\n\n var gestioneValidazione = function (modelOriginal, modelReceive) {\n if (modelReceive.messages && modelReceive.messages.length > 0) {\n var hasWarning = false;\n\n angular.forEach(modelReceive.messages, function (value, key) {\n try {\n if (value.severity === \"WARNING\") {\n hasWarning = true;\n }\n } catch (e) {\n $log.error(e);\n }\n });\n\n if (hasWarning) {\n var change = false;\n if (modelReceive && modelReceive.modello && modelReceive.modello.compilazione && modelReceive.modello.compilazione.datiCessionario) {\n angular.forEach(modelReceive.modello.compilazione.datiCessionario, function (cessReceived, key) {\n try {\n var cessionarioSend = modelOriginal.modello.compilazione.datiCessionario[key];\n if (cessionarioSend.codiceFiscale && cessionarioSend.codiceFiscale != cessReceived.codiceFiscale) {\n cessionarioSend.codiceFiscale = cessReceived.codiceFiscale;\n }\n } catch (e) {\n $log.error(e);\n }\n });\n }\n }\n }\n }\n\n vm.handleModalOpen = function () {\n MessagesService.resetMessages(); // Reset dei messaggi\n return new Promise((resolve, reject) => {\n //client validate\n ModelliService.validate(vm.formModello, vm.tipologia, vm.articolo, vm.modello);\n\n //verifiche server solo se client ok\n if (vm.formModello.$valid) {\n //server validate\n var data = { modello: vm.modello, articolo: vm.articolo };\n //il resolve lo dara l'api in risposta\n return ModelliApi.validazione(vm.tipologia, vm.articolo, data, gestioneValidazione).then(function (response) {\n if (response.messages == undefined) {\n resolve(response);\n } else {\n reject(\"Sono presenti degli errori sui dati\");\n }\n }, function (response) {\n $log.error(response);\n });\n } else {\n reject(\"Sono presenti degli errori sul form\");\n }\n });\n };\n\n vm.handleInvio = function (pincode) {\n return new Promise((resolve, reject) => {\n\n ModelliService.validate(vm.formModello, vm.tipologia, vm.articolo, vm.modello);\n\n if (vm.invioClicked) {\n reject(\"I dati sono già stati inviati\");\n return;\n }\n\n if (vm.formModello.$invalid) {\n reject(\"Sono presenti degli errori sul form\");\n return;\n }\n\n MessagesService.resetMessages(); // Reset dei messaggi\n\n vm.invioClicked = true;\n\n var data = { modello: vm.modello };\n\n\n setTimeout(function () {\n vm.invioClicked = false;\n }, 10000);\n\n return ModelliService.invia(pincode, vm.tipologia, vm.articolo, data, vm.titleProtocollo, function (response) {\n vm.invioClicked = false;\n if (response.messages === undefined || response.messages.length === 0) {\n resolve(response);\n } else {\n //eventuale pincode errato\n reject({ message: response.messages[0].message, close: false });\n }\n }, function (response) {\n vm.invioClicked = false;\n //eventuale pincode errato\n reject({ message: response.messages[0].message, close: false });\n });\n\n });\n };\n\n }]\n});\n\nmodule.component('comunicazioneSelezione', {\n controllerAs: 'vm',\n template: `\n

\n Compila una comunicazione\n

\n
\n
\n \n
\n
\n `,\n bindings: {\n profilo: '=',\n open: '='\n },\n controller: ['$location', '$log', 'StorageService', function ($location, $log, StorageService) {\n var vm = this;\n vm.$onInit = function () {\n //reset del cf per impedire accesso alla history\n StorageService.setResource(\"cfCedente\", undefined);\n }\n\n vm.compila = function (parametriRicerca) {\n\n if (!parametriRicerca.cfCedente) {\n $log.error(\"Nessun cedente selezionato\");\n return;\n }\n //non viaggia su url\n StorageService.setResource(\"cfCedente\", parametriRicerca.cfCedente);\n $location.path(`/comunicazione/${parametriRicerca.articolo}/${parametriRicerca.anno}`);\n }\n }]\n});","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\n/**\n * Form dedicato alla comunicazione 121\n */\nmodule.component('comunicazione121', {\n controllerAs: 'vm',\n template: /*html*/ `\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n \n\n \n `,\n bindings: {\n form: '=',\n data: '=',\n profilo: '='\n },\n controller: ['$log', '$timeout', 'Modello121Service', 'ApiAnagrafica', function ($log, $timeout, Modello121Service, ApiAnagrafica) {\n\n var vm = this;\n\n vm.ApiAnagrafica = ApiAnagrafica;\n\n vm.$onInit = function () {\n $log.info(\"Caricato modello 121\");\n vm.data.tipoOpzione = 'A';\n }\n\n vm.$onChanges = function (changesObj) {\n var opzione = changesObj.opzione;\n var data = changesObj.data;\n\n var changed = (opzione !== undefined && !opzione.isFirstChange() && opzione.currentValue !== opzione.previousValue)\n || (data !== undefined && data.currentValue !== data.previousValue);\n\n //validiamo di nuovo\n if (changed) {\n Modello121Service.validate(vm.form, 'C', vm.data.articolo, vm.data);\n }\n }\n\n /**\n * Verifica la validità del modello (opzionalemente per campo)\n */\n vm.handleInputChange = function (fieldName, fieldValue) {\n\n //aggiornamento dello stato\n switch (fieldName) {\n case 'tipoOpzione':\n vm.data.tipoOpzione = fieldValue;\n break;\n default:\n break;\n }\n if (fieldName) {\n $log.info(`Modificato ${fieldName}`, fieldValue);\n }\n\n\n //diamo tempo all'ng-model di effettuare il binding dei dati altrimenti la validazione sul model non avrà tutti i dati che ci aspettiamo\n $timeout(function () {\n //validazione campo/campi\n Modello121Service.validate(vm.form, 'C', vm.data.articolo, vm.data, fieldName)\n });\n }\n\n }]\n});\n\n\n/*\n* Service dedicato al modello 121\n*/\nmodule.service('Modello121Service', ['$log', 'ModelliService', 'ModelliApi', function ($log, ModelliService, ModelliApi) {\n\n var service = this;\n const _toValidate = ModelliService._toValidate;\n const _setValidity = ModelliService._setValidity;\n //copia tutte le funzioni di ModelliService\n for (const key in ModelliService) {\n const element = ModelliService[key];\n service[key] = element;\n }\n\n /**\n * validazione dedicata 121\n */\n service.validate = function (form, tipologia, articolo, data, fieldName) {\n service.validateCessionario(form, tipologia, articolo, data, fieldName);\n //non validiamo in annullamento\n if (tipologia !== 'A') {\n service.validateImportoCreditoCedibile(form, tipologia, articolo, data, fieldName);\n }\n //protocolloQ20 a undefined\n service.resetImpegnoTrasmissione(data.impegnoTrasmissione);\n }\n\n /**\n * Verifica che l'importo cedibile non superi la percentuale definita per il tipo intervento\n */\n service.validateImportoCreditoCedibile = function (form, tipologia, articolo, data, fieldName) {\n\n //Validiamo se uno dei campi che ha scatenato l'evento è pertinente oppure se il campo è vuoto (tutto il form da validare);\n if (_toValidate(fieldName, ['tipoIntervento', 'importoCreditoCedibile', 'importoTotaleSpesa', 'totaleCreditoCeduto'])) {\n\n var errorSpesaSostenutaIncongrunente = \"Importi non congruenti con la percentuale di detrazione della tipologia intervento\";\n var errorCreditoMaggiore = \"Totale credito ceduto/sconto maggiore della detrazione\";\n var tipoInterventoAssente = \"Devi selezionare la tipologia di intervento per poter verificare il credito cedibile e la spesa sostenuta\";\n\n //reset\n _setValidity(form, 'importoCreditoCedibile', \"creditoImportoNonCongruente\", errorSpesaSostenutaIncongrunente, true)\n _setValidity(form, 'importoTotaleSpesa', \"spesaImportoNonCongruente\", errorSpesaSostenutaIncongrunente, true)\n _setValidity(form, 'importoCreditoCedibile', \"creditoMaggiore\", errorCreditoMaggiore, true)\n\n var datiIntervento = data.compilazione && data.compilazione.datiIntervento;\n\n var tipoIntervento = datiIntervento && datiIntervento.tipoIntervento;\n //importi compilabili solo se indicato tipo intervento\n _setValidity(form,\n 'importoCreditoCedibile',\n \"tipoInterventoAssente\",\n tipoInterventoAssente,\n datiIntervento.importoCreditoCedibile === undefined || (tipoIntervento !== undefined && datiIntervento.importoCreditoCedibile > 0))\n _setValidity(form,\n 'importoTotaleSpesa',\n \"tipoInterventoAssente\",\n tipoInterventoAssente,\n datiIntervento.importoTotaleSpesa === undefined || (tipoIntervento !== undefined && datiIntervento.importoTotaleSpesa > 0))\n\n if (datiIntervento.tipoIntervento && datiIntervento.annoSpesa) {\n\n ModelliApi.getTipologieIntervento(data.cedente.codiceFiscale, datiIntervento.annoSpesa, articolo, data.tipoOpzione).then(function (response) {\n if (response == undefined) {\n throw \"Impossibile prelevare i tipi di intervento\";\n }\n\n //ricerca tipo intervento per estrarre la percentuale\n var tipiIntervento = response.tipologieIntervento;\n if (datiIntervento.tipoIntervento && datiIntervento.importoCreditoCedibile) {\n\n var selezione = tipiIntervento.filter(function (el) {\n return el.value === datiIntervento.tipoIntervento;\n });\n\n\n var percentuale = selezione[0].percentuale;\n var importodacedere = datiIntervento.importoCreditoCedibile;\n var importoTotaleCalcolataPercentuale = (datiIntervento.importoTotaleSpesa * percentuale) / 100;\n var intvalueimportoTotaleCalcolataPercentuale = Math.round(importoTotaleCalcolataPercentuale);\n if (importodacedere != intvalueimportoTotaleCalcolataPercentuale) {\n var errPerc = `${errorSpesaSostenutaIncongrunente} (${percentuale}%)`;\n _setValidity(form, 'importoCreditoCedibile', \"creditoImportoNonCongruente\", errPerc, false)\n _setValidity(form, 'importoTotaleSpesa', \"spesaImportoNonCongruente\", errPerc, false)\n } else if (data.compilazione.totaleCreditoCeduto && datiIntervento.importoCreditoCedibile < data.compilazione.totaleCreditoCeduto) {\n _setValidity(form, 'importoCreditoCedibile', \"creditoMaggiore\", errorCreditoMaggiore, false)\n }\n }\n }, function (error) {\n $log.error(error);\n });\n }\n }\n }\n}]);\n\n\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\n/**\n * Form dedicato alla comunicazione 122\n */\nmodule.component('comunicazione122', {\n controllerAs: 'vm',\n template: /*html*/`\n \n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n \n `,\n bindings: {\n form: '=',\n data: '=',\n profilo: '='\n },\n controller: ['$log', '$timeout', 'ModelliService', 'Modello122Service', 'ApiAnagrafica', 'ModelliApi', function ($log, $timeout, ModelliService, Modello122Service, ApiAnagrafica,ModelliApi) {\n\n var vm = this;\n vm.showContrattiLocazione = true;\n\n vm.ApiAnagrafica = ApiAnagrafica;\n\n vm.$onInit = function () {\n $log.info(\"Caricato modello 122\");\n vm.data.tipoOpzione = 'A'; //Fissa a A per 122\n vm.tipoIntervento = \"\";\n //verifica iniziale\n vm.handlerTipoIntervento(vm.data?.compilazione?.datiIntervento?.tipoIntervento, vm.data?.compilazione?.datiIntervento?.annoSpesa);\n vm.handlerTipologiaCessionario();\n }\n\n vm.handlerTipoIntervento = function (tipoIntervento, annoSpesa) {\n vm.tipoIntervento = tipoIntervento;\n //Estremi di registrazione dei contratti di locazione (solo per le opzioni 1 e 2A):\n vm.showContrattiLocazione = Modello122Service.dataCatastaliCompilabili(tipoIntervento);\n\n //creazione array contratti o reset dei catastali se tipo 3\n // if ((vm.showContrattiLocazione && !vm.data.compilazione.datiCatastali) || !vm.showContrattiLocazione) {\n vm.data.compilazione.datiCatastali = [];\n // }\n\n //Tipo 2 indicare importi mensili\n if (tipoIntervento && tipoIntervento.length > 1 && tipoIntervento.substring(0, 1) === '2') {\n\n //promise lato server\n try{\n ModelliApi.getImportiMensili(annoSpesa).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile prelevare gli importi mensili\";\n }\n\n //label id e descrizione intervento \n vm.data.compilazione.datiIntervento.importiMese = response.importiMensili;\n\n }, function (error) {\n $log.error(error);\n });\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n MessagesService.addMessageError(clientErr);\n throw e;\n }\n // //se non esiste creo\n // if (!vm.data.compilazione.datiIntervento.importiMese) {\n // vm.data.compilazione.datiIntervento.importiMese = [];\n // for (let index = 3; index <= 12; index++) {\n // vm.data.compilazione.datiIntervento.importiMese.push({ mese: index });\n // }\n // }\n } else {\n vm.data.compilazione.datiIntervento.importiMese = undefined;\n }\n }\n\n vm.handlerTipologiaCessionario = function () {\n //non selezionato o selezionato diverso da 3\n vm.data.hideTipologiaCessionario = true;\n }\n\n /**\n * Verifica la validità del modello (opzionalemente per campo)\n */\n vm.handleInputChange = function (fieldName, fieldValue) {\n $log.debug(`Changed ${fieldName}=${fieldValue}`);\n if (fieldName === 'tipoIntervento') {\n vm.handlerTipoIntervento(fieldValue, vm.data.compilazione.datiIntervento.annoSpesa);\n }\n\n //diamo tempo all'ng-model di effettuare il binding dei dati altrimenti la validazione sul model non avrà tutti i dati che ci aspettiamo\n $timeout(function () {\n //validazione campo/campi\n Modello122Service.validate(vm.form, 'C', vm.data.articolo, vm.data, fieldName)\n });\n }\n\n }]\n});\n\n\n/*\n* Service che definisce i metodi e funzioni comuni tra i vari modelli\n*/\nmodule.service('Modello122Service', ['ModelliService', 'ContrattoService', function (ModelliService, ContrattoService) {\n\n var service = this;\n const _toValidate = ModelliService._toValidate;\n const _setValidity = ModelliService._setValidity;\n //copia tutte le funzioni di ModelliService\n for (const key in ModelliService) {\n const element = ModelliService[key];\n service[key] = element;\n }\n\n /**\n * validazione dedicata 122\n */\n service.validate = function (form, tipologia, articolo, data, fieldName) {\n\n service.validateCessionario(form, tipologia, articolo, data, fieldName, \"Il totale del credito ceduto risulta diverso dall'ammontare impostato\");\n service.validateImportoCredito(form, tipologia, articolo, data, fieldName);\n\n //sempre 0\n service.resetCessionarioTipologie(data.compilazione && data.compilazione.datiCessionario);\n\n //protocolloQ20 a undefined\n service.resetImpegnoTrasmissione(data.impegnoTrasmissione);\n\n service.validateDatiCatastali(form, tipologia, articolo, data, fieldName);\n }\n\n\n /**\n * Verifica che l'importo cedibile non superi la percentuale definita per il tipo intervento\n */\n service.validateImportoCredito = function (form, tipologia, articolo, data, fieldName) {\n\n //Validiamo se uno dei campi che ha scatenato l'evento è pertinente oppure se il campo è vuoto (tutto il form da validare);\n if (_toValidate(fieldName, ['tipoIntervento', 'importoCreditoCeduto', 'totaleCreditoCeduto', 'importoCreditoMaturato', 'importiMese', 'creditoCeduto'])) {\n\n var errorCreditoMaggiore = \"Il totale del credito ceduto risulta diverso dall'ammontare impostato\";\n\n //reset\n _setValidity(form, 'importoCreditoCeduto', \"creditoMaggiore\", errorCreditoMaggiore, true);\n\n var tipoIntervento = data?.compilazione?.datiIntervento?.tipoIntervento;\n if (data.compilazione\n && tipoIntervento\n && data?.compilazione?.datiIntervento?.annoSpesa) {\n\n if (parseInt(data?.compilazione?.datiIntervento?.importoCreditoCeduto) !== parseInt(data?.compilazione?.totaleCreditoCeduto)) {\n _setValidity(form, 'importoCreditoCeduto', \"creditoMaggiore\", errorCreditoMaggiore, false);\n }\n }\n\n //Calcolo mesi solo per tipo 2x\n var mesi = data?.compilazione?.datiIntervento?.importiMese;\n var totMesi = 0;\n //let marzoLuglio = [];\n if (mesi) {\n for (let index = 0; index < mesi.length; index++) {\n const m = mesi[index];\n let importo = parseInt(m?.importoCreditoCeduto) || 0;\n totMesi += importo;\n /* if ([3, 7].indexOf(m.mese) > - 1 && importo > 0) {\n marzoLuglio.push(importo);\n }*/\n }\n }\n\n if (tipoIntervento && tipoIntervento.length > 1 && tipoIntervento.substring(0, 1) === '2') {\n data.compilazione.datiIntervento.importoCreditoMaturato = totMesi;\n }\n\n // _setValidity(form,\n // 'importiMese-3',\n // \"creditoMarzoLuglioIncoerente\",\n // 'Se è stato compilato il mese di marzo non può essere compilato il mese di luglio',\n // marzoLuglio.length < 2)\n\n //reset\n const errorCreditoMaturatoInf = \"Il credito maturato risulta inferiore al credito ceduto\";\n _setValidity(form, 'importoCreditoMaturato', \"creditoMaturatoInferiore\", errorCreditoMaturatoInf, true);\n\n if (parseInt(data?.compilazione?.datiIntervento?.importoCreditoMaturato) < parseInt(data?.compilazione?.datiIntervento?.importoCreditoCeduto)) {\n _setValidity(form, 'importoCreditoMaturato', \"creditoMaturatoInferiore\", errorCreditoMaturatoInf, false);\n }\n\n }\n }\n\n /**\n * Verifica se la sezione dati catastali (estremi contratto locazione) è compilabile\n */\n service.dataCatastaliCompilabili = function (tipoIntervento) {\n if (!tipoIntervento) {\n return false;\n }\n return ['1', '2A', '2B', '2C', '2D', '2E'].indexOf(String(tipoIntervento).toUpperCase()) !== -1;\n }\n\n /**\n * Valida la sezione dati catastali (estremi contratto locazione)\n */\n service.validateDatiCatastali = function (form, tipologia, articolo, data, fieldName) {\n\n //se diverso da 1 o 2A non validiamo\n // var tipoIntervento = data?.compilazione?.datiIntervento?.tipoIntervento;\n var datiCatastali = data?.compilazione?.datiCatastali;\n\n // var compilabili = service.dataCatastaliCompilabili(tipoIntervento);\n\n // if (compilabili && (datiCatastali !== undefined && datiCatastali.length > 0)) {\n if (datiCatastali !== undefined && datiCatastali.length > 0) {\n //reset errore form \n _setValidity(form,\n 'tipoIntervento',\n \"tipoInterventoContrattiEmpty\",\n \"\",\n true);\n }\n\n if (_toValidate(fieldName, ['tipoIntervento'])) {\n\n //sezione assente\n _setValidity(form,\n 'tipoIntervento',\n \"tipoInterventoContrattiEmpty\",\n \"Estremi di registrazione dei contratti di locazione/affitto deve essere compilata con almeno 1 rigo\",\n (datiCatastali !== undefined && datiCatastali.length > 0 || (data?.compilazione?.datiIntervento?.tipoIntervento ==='2F'))\n );\n\n }\n\n // if (compilabili) {\n\n if (_toValidate(fieldName, ['idContratto', 'data', 'serie', 'numero', 'sottonumero', 'codiceUfficio'])) {\n\n if (datiCatastali) {\n\n for (let index = 0; index < datiCatastali.length; index++) {\n const contratto = datiCatastali[index];\n var numContratto = index + 1;\n\n //idContratto 1 caratteri alfanumerici (9 + check-digit da 2)\n var idContratto = contratto.idContratto;\n _setValidity(form,\n 'idContratto-riga-' + numContratto,\n \"idContrattoInvalid\",\n \"Il codice identificativo inserito non è valido\",\n //proveniente da servizio, oppure assente o valido\n contratto.existing || !idContratto || ContrattoService.isValid(idContratto)\n );\n\n var datiContratto = contratto.datiContratto || {};\n var contrattoValid = !idContratto && Object(datiContratto.length > 0) ||\n idContratto && Object.keys(datiContratto).length === 0;\n\n _setValidity(form,\n 'idContratto-riga-' + numContratto,\n \"idContrattoAlternativoDati\",\n \"Non puoi compilare il codice identificativo contratto se sono presenti i campi Data, Serie, Numero, Sottonumero o Codice Ufficio\",\n contrattoValid\n );\n\n }\n }\n\n }\n // } else {\n // //reset \n // if (datiCatastali) {\n // data.compilazione.datiCatastali = undefined;\n // }\n // }\n }\n}]);\n\n\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\n/*\n* Mostra e valida i dati di un cedente\n*/\nvar html = /*html*/`\n
\n
\n Dati del titolare del credito\n
\n
\n \n \n
\n\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n Persone fisiche\n
\n
\n \n \n
\n
\n\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n Soggetti diversi dalle persone fisiche\n
\n
\n \n \n
\n
\n
\n
\n
\n`;\n\nmodule.component('cedente', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n cedente: '=',\n datiPf: '=',\n datiPnf: '=',\n showAnagrafici: '@',\n onInputChange: '='\n },\n controller: [function () {\n var vm = this;\n\n vm.$onInit = function () {\n\n //valore iniziale\n vm.tipoOpzione = vm.opzione;\n\n vm.opzioneName = vm.opzioneName || 'tipoOpzione';\n }\n\n vm.onLocalChange = function (inputKey, inputValue) {\n if (inputKey == 'telefono') {\n if (vm.cedente.telefono == \"\")\n vm.cedente.telefono = undefined;\n } else {\n if (vm.cedente.postaElettronica == \"\")\n vm.cedente.postaElettronica = undefined;\n }\n\n if (vm.onInputChange) {\n vm.onInputChange(inputKey, inputValue);\n }\n }\n }]\n});","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nvar html = `\n
\n
\n Tipologia opzione\n
\n
\n \n \n \n \n
\n
\n
\n
\n`;\n\n// E' possibile scegliere la tipologia opzione A (cessione del credito), B (sconto) ccire vesione 2\n\nmodule.component('tipologiaOpzione', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n data: '=',\n opzione: '@',\n opzioneName: '@',\n onOpzione: '=' //evento per aggiornare l'opzione a livello superiore\n },\n controller: ['$log', function ($log) {\n var vm = this;\n\n vm.$onInit = function () {\n\n //valore iniziale\n vm.tipoOpzione = vm.opzione;\n\n vm.opzioneName = vm.opzioneName || 'tipoOpzione';\n\n if (!vm.onOpzione) {\n $log.error(\"Fornire un evento onOpzione per aggiornare il valore sul model\");\n }\n }\n }]\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nvar html = `\n
\n
\n\n Dati dell'intervento\n \n
\n
\n\n \n \n
\n \n \n\n
\n \n
\n\n
\n \n
\n
\n
\n
\n`;\n\nmodule.component('datiIntervento', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n opzione: '@',\n datiIntervento: '=',\n cfCedente: '=',\n articolo: '=',\n onInputChange: '='\n },\n controller: ['$log', '$filter', 'CONSTANTS', 'MessagesService', 'StorageService', 'ModelliApi',\n function ($log, $filter, CONSTANTS, MessagesService, StorageService, ModelliApi) {\n\n try {\n\n var vm = this;\n\n vm.$onInit = function () {\n vm.caricaOpzioni(vm.opzione);\n }\n\n vm.$onChanges = function (changesObj) {\n var opzione = changesObj.opzione;\n var data = changesObj.data;\n\n var changed = (opzione !== undefined && !opzione.isFirstChange() && opzione.currentValue !== opzione.previousValue)\n || (data !== undefined && data.currentValue !== data.previousValue);\n\n if (changed) {\n vm.caricaOpzioni(vm.opzione);\n }\n }\n\n // l'opzione selezionata determina il caricamento delle tipologie intervento\n // A-> da 1 a 11 e 15,16. B -> tutte le voci ccire versione 2\n vm.caricaOpzioni = function (opzione) {\n vm.tipiIntervento = undefined;\n\n $log.info(\"Ricaricamento tipologie da opzione \" + opzione);\n if (!vm.articolo\n || !vm.cfCedente\n || !vm.datiIntervento\n || !vm.datiIntervento.annoSpesa) {\n $log.info(\"Dati non sufficenti per ricaricare la lista tipologie da opzione \" + opzione);\n return;\n }\n ModelliApi.getTipologieIntervento(vm.cfCedente, vm.datiIntervento.annoSpesa, vm.articolo, opzione).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile prelevare i tipi di intervento\";\n }\n\n //label id e descrizione intervento \n vm.tipiIntervento = response.tipologieIntervento.map(item => {\n item.label = item.value + \" - \" + item.descrizione;\n return item;\n });\n\n // gestione per il reset della tendina tipi intervento e anni spesa al cambio della radio button tipologia opzione\n if (vm.datiIntervento) {\n vm.datiIntervento.tipoIntervento = undefined;\n }\n\n if (vm.form['tipoIntervento'] != undefined)\n vm.form['tipoIntervento'].$setPristine();\n\n }, function (error) {\n $log.error(error);\n });\n }\n\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n MessagesService.addMessageError(clientErr);\n throw e;\n }\n\n }],\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nvar html = `\n
\n
\n\n Dati relativi al credito\n \n
\n
\n\n \n \n
\n\n
0\">
\n\n
\n \n \n
\n
1,\n 'col-xl-4' : !vm.datiIntervento.importiMese || vm.datiIntervento.importiMese.length===0}\">\n 0\"\n model=\"vm.datiIntervento.importoCreditoMaturato\"\n on-input-change=\"vm.onInputChange\"\n >\n \n
\n
0 ,\n 'col-xl-4' : !vm.datiIntervento.importiMese || vm.datiIntervento.importiMese.length===0}\" >\n \n \n
\n
\n
\n
\n`;\n\nmodule.filter('mese', function () {\n var mesi = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'];\n return function (input) {\n var index = parseInt(input);\n return mesi[index - 1];\n };\n});\n\n\nmodule.component('datiCredito', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n datiIntervento: '=',\n cfCedente: '=',\n articolo: '=',\n onInputChange: '=',\n opzione: '@'\n },\n controller: ['$log', 'CONSTANTS', 'MessagesService', 'ModelliApi',\n function ($log, CONSTANTS, MessagesService, ModelliApi) {\n\n try {\n\n var vm = this;\n\n vm.$onInit = function () {\n vm.caricaOpzioni(vm.opzione);\n }\n\n vm.$onChanges = function (changesObj) {\n var opzione = changesObj.opzione;\n var data = changesObj.data;\n\n var changed = (opzione !== undefined && !opzione.isFirstChange() && opzione.currentValue !== opzione.previousValue)\n || (data !== undefined && data.currentValue !== data.previousValue);\n\n if (changed) {\n vm.caricaOpzioni(vm.opzione);\n }\n }\n\n // l'opzione selezionata determina il caricamento delle tipologie intervento\n // A-> da 1 a 11 e 15,16. B -> tutte le voci ccire versione 2\n vm.caricaOpzioni = function (opzione) {\n\n vm.tipiIntervento = undefined;\n\n $log.info(\"Ricaricamento tipologie da opzione \" + opzione);\n if (!vm.articolo\n || !vm.cfCedente\n || !vm.datiIntervento\n || !vm.datiIntervento.annoSpesa) {\n $log.info(\"Dati non sufficenti per ricaricare la lista tipologie da opzione \" + opzione);\n return;\n }\n\n ModelliApi.getTipologieIntervento(vm.cfCedente, vm.datiIntervento.annoSpesa, vm.articolo, opzione).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile prelevare i tipi di intervento\";\n }\n\n //label id e descrizione intervento \n vm.tipiIntervento = response.tipologieIntervento.map(item => {\n item.label = item.value + \" - \" + item.descrizione;\n return item;\n });\n\n // gestione per il reset della tendina tipi intervento e anni spesa al cambio della radio button tipologia opzione\n if (vm.datiIntervento) {\n vm.datiIntervento.tipoIntervento = undefined;\n }\n\n if (vm.form['tipoIntervento'] != undefined)\n vm.form['tipoIntervento'].$setPristine();\n\n }, function (error) {\n $log.error(error);\n });\n }\n\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n MessagesService.addMessageError(clientErr);\n throw e;\n }\n\n }],\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nvar html = /*html*/`\n
\n
\n\n Dati catastali identificativi dell'immobile oggetto dell'intervento\n\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n
\n
\n
\n \n
\n \n \n \"\"\n \n
\n \n
\n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n`;\n\nmodule.component('datiCatastali', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n datiCatastali: '=',\n comunicazione: '=',\n onInputChange: '='\n },\n controller: ['$log', 'MessagesService', 'ApiAnagrafica',\n function ($log, MessagesService, ApiAnagrafica) {\n\n var vm = this;\n\n vm.$onInit = function () {\n\n vm.MessagesService = MessagesService;\n\n ApiAnagrafica.getProvince().then(function (response) {\n\n if (response == undefined) {\n throw new \"Impossibile prelevare le province\";\n }\n\n vm.listaProvince = response;\n }, function (error) {\n $log.error(error);\n });\n }\n\n vm.caricaComuni = function (provincia) {\n vm.listaComuni = undefined;\n\n ApiAnagrafica.getComuni(provincia).then(function (response) {\n\n if (response == undefined) {\n throw \"Impossibile prelevare i comuni\";\n }\n\n vm.listaComuni = response;\n }, function (error) {\n $log.error(error);\n });\n }\n\n }],\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nvar html = /*html*/`\n
\n
\n
\n

IL SOTTOSCRITTO COMUNICA

\n

\n {{vm.getTitle()}}:\n

\n
\n
\n
\n \n
\n
\n
\n \n
\n\n
\n \n \n
\n
\n
\n
\n`;\n\n\nmodule.component('datiCessionari', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n data: '=',\n cfCedente: '@', //non modificabile\n datiCessionario: '=',\n totaleCreditoCeduto: '=',\n importoCreditoCedibile: '@', //non modificabile\n onInputChange: \"=\",\n showTipologie: '@',\n editTipologie: '@',\n title: '@',\n labelCredito: '@',\n labelCessione: '@',\n intestRiga: '@',\n showAnagrafici: '@',\n maxRows: '@'\n\n },\n controller: ['CONSTANTS', '$filter', 'MessagesService', function (CONSTANTS, $filter, MessagesService) {\n var vm = this;\n\n vm.MessagesService = MessagesService;\n\n vm.$onInit = function () {\n var emptyCessionario = vm.newCessionario();\n vm.datiCessionario = [emptyCessionario];\n }\n\n vm.getTitle = function () {\n return vm.title;\n };\n\n vm.getLabelCredito = function () {\n return vm.labelCredito;\n };\n\n vm.newCessionario = function () {\n return { intestazione: \"\", codicefiscale: \"\", creditoCeduto: 0, tipologiaCessionario: 0 };\n }\n\n /**\n * Aggiunge un nuovo cessionario\n */\n vm.aggiungi = function () {\n //il form è stato toccato\n vm.form.$setDirty();\n if (vm.datiCessionario.length <= (vm.maxRows - 1)) {\n vm.datiCessionario.push(vm.newCessionario());\n }\n };\n\n /**\n * Rimuove un cessionario\n */\n vm.elimina = function (indice) {\n //il form è stato toccato\n vm.form.$setDirty();\n\n vm.datiCessionario.splice(indice, 1);\n vm.onInputChange();\n if (vm.datiCessionario.length == 0) {\n vm.aggiungi();\n }\n\n };\n\n }]\n});\n\n\n\nmodule.component('cessionario', {\n controllerAs: 'vm',\n template: /*html*/`\n
\n
\n \n
\n
\n

{{vm.numCessionario}}° riga - {{::vm.intestRiga}}:

\n
\n
\n \n
\n
\n \n
\n\n
\n \n \n
\n \n
\n \n \n
\n \n
\n \n \n
\n
\n
\n
\n `\n ,\n bindings: {\n form: '=',\n cfCedente: '@', //non modificabile\n cessionario: '=',\n numCessionario: '@',\n showTipologie: '@',\n editTipologie: '@',\n labelCredito: '@',\n labelCessione: '@',\n intestRiga: '@',\n elimina: '=',\n onInputChange: '=',\n showAnagrafici: '@'\n\n },\n controller: ['CONSTANTS', '$filter', 'MessagesService', function (CONSTANTS, $filter, MessagesService) {\n var vm = this;\n vm.today = new Date();\n\n vm.MessagesService = MessagesService;\n\n vm.tipologieCessionario = [\n {\n value: 0,\n label: 'Seleziona'\n },\n {\n value: 1,\n label: '1 - Fornitore '\n },\n {\n value: 2,\n label: '2 - Altro soggetto'\n }\n ];\n\n vm.$onInit = function () {\n vm.editTipologie = vm.editTipologie === 'true';\n vm.showTipologie = vm.showTipologie === 'true';\n //default true\n vm.showAnagrafici = vm.showAnagrafici === 'true';\n }\n\n vm.$onChanges = function (changesObj) {\n var changed = changesObj.editTipologie;\n if (changed) {\n vm.editTipologie = vm.editTipologie === 'true';\n }\n changed = changesObj.showTipologie;\n if (changed) {\n vm.showTipologie = vm.showTipologie === 'true';\n }\n\n changed = changesObj.showAnagrafici;\n if (changed) {\n vm.showAnagrafici = vm.showAnagrafici === 'true';\n }\n }\n\n }]\n});\n\n\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\n\nvar html = /*html*/`\n
\n
\n Rappresentante firmatario della comunicazione\n
\n
\n
\n \n \n \n \n
\n \n\n
\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n`;\n\nmodule.component('rappresentante', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n profilo: '=',\n cfCedente: '=',\n rappresentante: '=',\n articolo: '=',\n showAnagrafici: '@'\n },\n controller: ['$log', 'MessagesService', 'StorageService', 'ApiAnagrafica', 'ErrorService',\n function ($log, MessagesService, StorageService, ApiAnagrafica, ErrorService) {\n\n var vm = this;\n /**\n * Verifica se il rappresentante è compilabile e determina cosa è compilabile della sezione rappresentante in base a parametri come Q20, incaricato, PF/PNF, etc\n */\n var initCompilabilita = function () {\n\n //reset flag\n vm.enabled = false;\n vm.cfRappRequired = false;\n vm.cfRappresentanteEditabile = false;\n\n if (vm.cfCedente) {\n //utente che opera per altri (escluso Q20)\n var isQ20 = vm.profilo.userWork.tipoUtente === 'Q20';\n var utenteCheOperaPerAltro = !isQ20 && vm.cfWork != vm.cfCedente;\n\n //ripristinati codici carica da userWork\n vm.isPNF = vm.profilo.userWorkType === 'PNF';\n\n //abilitata se sono un Q20\n vm.enabled = isQ20\n //Se il cedente è un PNF: servirà un rappresentante\n || vm.isPNF\n //se sto lavorando per un altro soggetto\n || utenteCheOperaPerAltro;\n $log.info(\"Sezione Rappresentante \" + (vm.enabled ? 'abilitata' : 'disabilitata'));\n\n //codici carica in base a cedente\n if (vm.enabled) {\n ApiAnagrafica.verificaCfSoc(vm.cfCedente).then(\n function (response) {\n var isCedentePnf = response === true;\n if (isCedentePnf) {\n //se cedente è pnf\n vm.isPNF = true;\n }\n //codici carica per cedente e work\n caricaRappresentante(isCedentePnf);\n setCompilabilita(vm.isPNF, isQ20, utenteCheOperaPerAltro);\n\n }, function (response) {\n $log.error(response);\n MessagesService.setMessages(response.data.messages);\n });\n }\n\n }\n }\n\n /**\n * Imposta la compilabilità in funziona dei parametri isPNF e isQ20\n * @param {*} isPNF \n * @param {*} isQ20 \n */\n var setCompilabilita = function (isPNF, isQ20, utenteCheOperaPerAltro) {\n\n //rappresentante obbligatorio se utente che lavora per altri (escluso Q20)\n //se esistono dati di una società PNF o se il cf work è un PNF (cedente è PNF)\n vm.cfRappRequired = (utenteCheOperaPerAltro || isPNF);\n\n //intermediaro o Q20\n if (isQ20 || vm.profilo.intermediario) {\n vm.cfRappresentanteEditabile = true;\n vm.cfRappRequired = false;\n if (isPNF) {\n vm.cfRappRequired = true;\n }\n\n } else if (vm.profilo.incaricato || isPNF) {\n //incaricato TLME per società X che comunica per qualcun'altro diverso da società società\n vm.cfRappresentanteEditabile = true;\n vm.cfRappRequired = true;\n } else {\n //CF normale e seleziono beneficiario diverso o tutti gli altri casi\n vm.cfRappresentanteEditabile = false;\n vm.cfRappRequired = true;\n if (!vm.rappresentante?.codiceFiscaleFirmatario) {\n vm.rappresentante.codiceFiscaleFirmatario = vm.cfWork;\n }\n }\n\n }\n\n vm.$onInit = function () {\n\n vm.cfWork = vm.profilo.userWork.codiceFiscale;\n vm.cfAuth = vm.profilo.userAuth.codiceFiscale;\n vm.isIncaricato = vm.cfAuth && vm.cfWork && vm.cfWork !== vm.cfAuth;\n\n //default true\n vm.showAnagrafici = vm.showAnagrafici === 'true' || vm.showAnagrafici === undefined;\n\n initCompilabilita();\n }\n\n vm.$onChanges = function (changesObj) {\n\n var profilo = changesObj.profilo;\n\n var changed = (profilo !== undefined && !profilo.isFirstChange() && profilo.currentValue !== profilo.previousValue);\n\n if (changed) {\n initCompilabilita();\n }\n\n changed = changesObj.showAnagrafici;\n if (changed) {\n vm.showAnagrafici = vm.showAnagrafici === 'true' || vm.showAnagrafici === undefined;\n }\n }\n\n vm.codiciCarica = function (tipoUtente, cfWork, cfCedente, articolo) {\n try {\n if (!cfWork)\n cfWork = null;\n if (!cfCedente)\n cfCedente = null;\n var data = {\n tipoUtente: tipoUtente,\n cfWork: cfWork,\n cfCedente: cfCedente,\n articolo: articolo\n }\n ApiAnagrafica.getCodiciCarica(data).then(\n function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile prelevare i codici carica\";\n }\n\n vm.listaCodiciCarica = response.codiciCarica;\n if (tipoUtente == 'PF')\n StorageService.setResource(\"codici_carica_PF\", vm.listaCodiciCarica);\n else\n StorageService.setResource(\"codici_carica_PNF\", vm.listaCodiciCarica);\n\n }, function (error) {\n $log.error(error);\n });\n } catch (e) {\n MessagesService.addSystemMessages([\"Si \\u00e8 verificato un errore\"]);\n throw e;\n }\n }\n\n //caso di cf firmaario\n vm.checkPF = function (campoName, inputKey) {\n\n var ctrl = vm.form[inputKey];\n var codiceFiscale = vm.rappresentante[campoName];\n ctrl.$setValidity('cfFirmatarioPnf', true);\n\n ErrorService.addErrorLabel('FirmatarioUgualeRichiedente', \"Il Codice fiscale deve essere diverso dal cedente\");\n ErrorService.addErrorLabel('FirmatarioUgualeRichiedenteSostituito', \"Hai inserito un codice fiscale non aggiornato, verr\\u00E0 utilizzato il codice fiscale pi\\u00F2 recente. Il Codice fiscale deve essere diverso dal cedente\");\n\n ctrl.$setValidity('FirmatarioUgualeRichiedenteSostituito', true);\n\n if (vm.cfCedente === codiceFiscale)\n ctrl.$setValidity('FirmatarioUgualeRichiedente', false);\n else {\n ctrl.$setValidity('FirmatarioUgualeRichiedente', true);\n //verifica solo se non è intemediario PF e valido \n if (vm.cfRappresentanteEditabile && ctrl.$valid && codiceFiscale !== undefined && codiceFiscale !== '') {\n\n var data = '{ \"codiceFiscale\": \"' + codiceFiscale + '\"}'\n\n ApiAnagrafica.getRappresentante(data).then(\n function (response) {\n\n if (response.datiRappresentante) {\n vm.rappresentante.cognome = \"\";\n vm.rappresentante.nome = \"\";\n vm.rappresentante.codiceFiscaleFirmatario = response.datiRappresentante.codiceFiscaleFirmatario;\n if (vm.cfCedente === vm.rappresentante.codiceFiscaleFirmatario)\n ctrl.$setValidity('FirmatarioUgualeRichiedenteSostituito', false);\n else {\n ctrl.$setValidity('FirmatarioUgualeRichiedenteSostituito', true);\n vm.rappresentante.dataNascita = response.datiRappresentante.dataNascita;\n vm.rappresentante.comune = response.datiRappresentante.comune;\n vm.rappresentante.provincia = response.datiRappresentante.provincia;\n }\n }\n\n var valid = response.valid || false;\n //ctrl.$setValidity('cfFirmatarioPnf', valid);\n var presente = response.presente;\n\n if (!valid && !presente) {\n ctrl.$setValidity('cfNonTrovato', false);\n ctrl.$setValidity('cfFirmatarioPnf', true);\n }\n else if (!valid && presente) {\n ctrl.$setValidity('cfFirmatarioPnf', false);\n ctrl.$setValidity('cfNonTrovato', true);\n }\n else {\n ctrl.$setValidity('cfFirmatarioPnf', true);\n ctrl.$setValidity('cfNonTrovato', true);\n }\n }, function (response) {\n $log.debug(response);\n var msgArray = [{ severity: 'ERROR', message: 'Errore nella chiamata al servizio anagrafico2' }];\n MessagesService.setMessages(msgArray);\n });\n } else {\n vm.rappresentante.dataNascita = undefined;\n vm.rappresentante.comune = undefined;\n vm.rappresentante.provincia = undefined;\n vm.rappresentante.cognome = undefined;\n vm.rappresentante.nome = undefined;\n vm.rappresentante.nome = undefined;\n vm.rappresentante.codiceFiscaleFirmatario = undefined;\n ctrl.$setValidity('cfNonTrovato', true);\n }\n }\n };\n\n //caso cf societa\n vm.checkPNF = function (campoName, inputKey) {\n var ctrl = vm.form[inputKey];\n var codiceFiscale = vm.rappresentante[campoName];\n ctrl.$setValidity('cfSocietaNonValido', true);\n\n //verifica solo se non è intemediario PF e valido \n if (vm.cfRappresentanteEditabile && ctrl.$valid && codiceFiscale !== undefined && codiceFiscale !== '') {\n\n ApiAnagrafica.verificaCfSoc(codiceFiscale).then(\n function (response) {\n $log.debug(response);\n $log.info(\"Nuovo cedente: \");\n\n var valid = response;\n ctrl.$setValidity('cfSocietaNonValido', valid);\n\n }, function (response) {\n $log.error(response);\n MessagesService.setMessages(response.data.messages);\n //MessagesService.addErrorMessages([\"Si è verificato un errore\"]);\n });\n }\n };\n\n var caricaRappresentante = function (isPNF) {\n vm.codiciCarica(isPNF ? \"PNF\" : \"PF\",\n vm.cfWork,\n vm.cfCedente,\n vm.articolo);\n }\n\n }]\n});\n","import angular from 'angular';\nimport fileSaver from 'file-saver';\n\nvar module = angular.module('modelliModule');\n\nmodule.directive('protocollo', function protocollo() {\n\n return {\n replace: true,\n restrict: 'E',\n template: `\n
\n
\n
\n
\n \n
\n
\n

\n {{title}}\n

\n

{{message}}

\n

Codice ente: AGE

\n

Codice AOO: AGEV-ST1

\n

Codice registro: REGISTRO UFFICIALE

\n

Numero protocollo {{protocollo}}

\n

Modalità: I

\n

Conservare il numero di protocollo ricevuto per successive consultazioni

\n

Vai alle attestazioni

\n

\n

\n \n

\n \n
\n
\n
\n
\n `,\n scope: {\n tipologia: '=',\n protocollo: '=',\n codiceFiscale: '=',\n title: '@',\n message: '@',\n stampa: '@'\n },\n controller: ['$scope', '$log', '$http', 'MessagesService', 'AjaxService', 'CONSTANTS', function ($scope, $log, $http, MessagesService, AjaxService, CONSTANTS) {\n\n try {\n $scope.MessagesService = MessagesService;\n\n $scope.stampaModello = function (tipo) {\n var data = '{ \"cfCedente\": \"' + $scope.codiceFiscale + '\",\"protocollo\": \"' + $scope.protocollo + '\",\"tipoStampa\": \"' + tipo + '\"}'\n var method = 'POST';\n $http({\n url: '/ccire-services-web/rs/Stampa/stampaModello/',\n method: method,\n responseType: 'arraybuffer',\n headers: AjaxService.getHeader(method),\n data: data\n }).then(function (result) {\n\n try {\n var headers = result.headers()\n var contentType = headers['content-type'];\n\n var fileNamePattern = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n var fileName = fileNamePattern.exec(headers['content-disposition'])[1];\n\n var blob = new Blob([result.data], { type: contentType });\n\n fileSaver.saveAs(blob, fileName);\n\n } catch (e) {\n //nessuna risposta dal server\n var msgArray = [{ severity: 'ERROR', message: 'Errore nella stampa della domanda' }];\n $scope.MessagesService.setMessages(msgArray);\n }\n\n }, function (response) {\n $log.error(response);\n });\n };\n\n } catch (e) {\n $log.error(e);\n var clientErr = CONSTANTS.CLIENT_ERR;\n MessagesService.addMessageError(clientErr);\n throw e;\n }\n\n }]\n };\n});\n","\nconst Esiti = {\n isEsitoFinale: function (codiceEsito) {\n return codiceEsito && ['1', '2', '31', '32', '33'].includes(codiceEsito);\n },\n isEsitoParziale: function (codiceEsito) {\n return codiceEsito && ['3'].includes(codiceEsito);\n },\n isEsitoRifiutata: function (codiceEsito) {\n return codiceEsito && ['32'].includes(codiceEsito);\n }\n}\n\nexport default Esiti;","import angular from 'angular';\nimport Esiti from '../../esiti/esiti';\n\nvar module = angular.module('modelliModule');\n\n\n// E' possibile scegliere la tipologia opzione A (cessione del credito), B (sconto) ccire vesione 2\n\nmodule.component('statoPopover', {\n controllerAs: 'vm',\n template: /*html*/`\n \n\n \n\n \n `,\n bindings: {\n articolo: '@',\n protocollo: '@',\n tipo: '@',\n esitoCodice: '@',\n esitoMessage: '@'\n },\n\n controller: ['$element', function ($element) {\n var vm = this;\n\n vm.$onInit = function () {\n vm.text = vm.esitoMessage || 'Nessun messaggio disponibile';\n\n var icon = \"fa-sync\";\n var color = \"text-warning\";\n\n if (vm.tipo === 'A') {\n color = \"text-success\";\n icon = \"fa-check-circle\";\n vm.icon = icon + \" \" + color;\n return;\n }\n\n if (vm.esitoCodice) {\n if (Esiti.isEsitoFinale(vm.esitoCodice)) {\n if (vm.protocollo || Esiti.isEsitoRifiutata(vm.esitoCodice)) {\n color = \"text-danger\";\n icon = \"fa-ban\";\n } else {\n color = \"text-success\";\n icon = \"fa-check-circle\";\n }\n } else if (Esiti.isEsitoParziale(vm.esitoCodice)) {\n color = \"text-warning\";\n icon = \"fa-exclamation-triangle\";\n }\n }\n\n vm.icon = icon + \" \" + color;\n };\n\n vm.$postLink = function () {\n // Seleziona solo l'elemento del componente corrente\n var emElement = $element.find('em');\n emElement.attr('data-toggle', 'popover');\n emElement.attr('data-content', vm.text);\n emElement.popover({\n trigger: 'hover',\n placement: 'top'\n });\n };\n }]\n\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\n\nmodule.service('ContrattoService', Contratto);\n\nfunction Contratto() {\n\n var service = this;\n\n /**\n * La serie può assumere i seguenti valori riportati nella seguente tabella, ove viene fornita la corrispondenza con le serie effettiva di registrazione e la modalità di registrazione dell’atto stesso.\n */\n service.SERIE = {\n 'L': '3',\n 'A': '3A',\n 'B': '3B',\n 'C': '3C',\n 'V': '3V',\n 'T': '3T',\n 'P': '3P',\n 'N': '1T',\n 'D': '1',\n 'E': '1A',\n 'F': '1B',\n 'G': '1C',\n 'H': '1D',\n 'M': '1V',\n 'Q': '2',\n 'R': '2A',\n 'S': '2B',\n 'Z': '2C',\n 'Y': '2V'\n };\n\n /**\n * Regex per la validazione\n */\n service.ID_CONTRATTO_PATTERN = \"(\\\\w{3})(\\\\d{2})([\" + Object.keys(service.SERIE).join(\"\") + \"])(\\\\d{6})(\\\\d{3})(\\\\D{2})\";\n\n //codificia su caratteri/numeri in posizione pari\n var codificaDispari = [\n '1',\n '0',\n '5',\n '7',\n '9',\n '13',\n '15',\n '17',\n '19',\n '21',\n '2',\n '4',\n '18',\n '20',\n '11',\n '3',\n '6',\n '8',\n '12',\n '14',\n '16',\n '10',\n '22',\n '25',\n '24',\n '23'\n ];\n\n\n\n /**\n * Caratteri ammessi per le sostituzioni\n */\n service.CHARS = \"abcdefghijklmnopqrstuvwxyz\".toUpperCase();\n service.NUM = \"0123456789\";\n\n //sostituzioni su caratteri e numeri in posizione pari o dispari\n service.sostituzioni = {\n even: {\n char: service.CHARS.toUpperCase().split('').reduce((a, b, index) => (a[b] = index, a), {}),\n number: null //I caratteri numerici di ordine pari presenti nei primi 15 caratteri dell’id-telematico mantengono il proprio valore.\n },\n odd: {\n char: service.CHARS.toUpperCase().split('').reduce((a, b, index) => (a[b] = codificaDispari[index], a), {}),\n number: service.NUM.split('').reduce((a, b, index) => (a[b] = codificaDispari[index], a), {})\n }\n }\n\n /**\n * Effettua la sostituzione numerica per il carattere in posizione pari/dispari\n */\n this.getSostituzione = function (char, pari) {\n char = char.toUpperCase();\n var data = service.sostituzioni[pari ? 'even' : 'odd'][isNaN(char) ? 'char' : 'number'];\n if (data && data[char]) {\n return parseInt(data[char]);\n }\n //I caratteri numerici di ordine pari presenti nei primi 15 caratteri dell’id-telematico mantengono il proprio valore.\n return parseInt(char) || 0;\n }\n\n /**\n * Calcola il check digit per l'identificativo contratto\n */\n this.checkDigit = function (idContratto) {\n if (!idContratto || idContratto.length != 17) {\n return \"\";\n }\n var sum = 0;\n for (let index = 0; index < idContratto.length - 2; index++) {\n const char = idContratto[index];\n const val = service.getSostituzione(char, (index + 1) % 2 === 0);\n sum = sum + val;\n }\n /*\n I valori numerici individuati dopo la trasformazione vengono addizionati e la somma si divide per il numero 26. Il resto viene utilizzato per individuare i due caratteri alfabetici del check-digit. In particolare:\n •\tIl primo carattere del check-digit viene individuato a partire dal resto secondo la tabella seguente.\n •\tIl secondo carattere del check-digit viene ottenuto sommando le cifre che compongono il resto e trasformandolo sempre secondo la seguente tabella\n */\n var mod = sum % 26;\n var check1 = service.CHARS[mod];\n var check2 = service.CHARS[String(mod).split('').reduce(function (total, num) { return total + parseInt(num) }, 0)];\n return `${check1}${check2}`;\n }\n\n this.isValid = function (idContratto) {\n if (idContratto && idContratto.length === 17) {\n //regex\n if (idContratto.match(service.ID_CONTRATTO_PATTERN)) {\n //verifica check\n var check = this.checkDigit(idContratto);\n return check === idContratto.substring(15);\n }\n }\n return false;\n }\n\n}\n\n\n\nmodule.service('ContrattoApi', ['AjaxService', 'CONSTANTS', 'ContrattoService', function Contratto(AjaxService, CONSTANTS, ContrattoService) {\n\n /**\n * ottiene la lista dei contratti per il CF\n */\n this.getListaContratti = function (cf) {\n return AjaxService.ajaxRequest(\"POST\", CONSTANTS.GET_LOCAZIONI, { cfCedente: cf });\n };\n\n this.fakeData = function (cf) {\n\n var fill = function (key) {\n\n const random = function (min, max) {\n return Math.floor(Math.random() * (max - min) + min);\n }\n const numero = function () {\n return ('0' + random(1, 999999)).slice(-6); //000001\n }\n const sottonumero = function () {\n return ('0' + random(1, 999)).slice(-3); //001\n }\n\n if (key === 'idContratto') {\n const anno = random(10, 20);\n const serie = Object.keys(ContrattoService.SERIE)[random(1, Object.keys(ContrattoService.SERIE).length)];\n var idContratto = `TJP${anno}${serie}${numero()}000`;\n const check = ContrattoService.checkDigit(idContratto + 'XX');\n return idContratto + check;\n }\n if (key === 'importo') {\n return random(1, 999999);\n }\n if (key === 'tipo') {\n let opt = ['A', 'C', 'T'];\n return opt[random(1, opt.length)];\n }\n if (key === 'codiceUfficio') {\n return fill('COD');\n }\n if (key === 'numero') {\n return numero();\n }\n if (key === 'sottonumero') {\n return sottonumero();\n }\n if (key === 'data') {\n var date = new Date(random(new Date(2017, 0, 1).getTime(), new Date().getTime()));\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;\n }\n if (key === 'serie') {\n let opt = Object.values(ContrattoService.SERIE);\n return opt[random(1, opt.length)];\n }\n\n var mocks = \"abcdefghijklmnopqrstuvwxyz\".toUpperCase();\n var lab = \"\";\n var size = key.length;\n while (lab.length < size) {\n var randomIndex = Math.random() * (mocks.length - 1) + 1;\n lab += mocks[Math.floor(randomIndex) - 1];\n }\n return lab;\n }\n\n var list = [];\n for (let index = 0; index < 50; index++) {\n var contratto = { datiContratto: { data: \"\", serie: \"\", numero: 0, sottonumero: 0, codiceUfficio: \"\" }, idContratto: \"\", tipo: \"\", importo: 0 };\n contratto.codiceFiscale = cf;\n for (const key in contratto) {\n\n if (typeof contratto[key] === 'object') {\n var obj = contratto[key];\n for (const key2 in obj) {\n obj[key2] = fill(key2);\n }\n } else {\n contratto[key] = fill(key);\n }\n }\n list.push(contratto);\n }\n return list;\n }\n\n}]);\n\n\n\nvar html = `\n
\n
\n
\n

Estremi di registrazione dei contratti

\n
\n
\n\n
\n

Per poter procedere devi aggiungere almeno un contratto

\n

Per questa tipologia di credito non risulta necessario aggiungere contratti

\n
\n\n
\n \n
\n
\n
\n = vm.maxOccurs || vm.tipoIntervento ==='2F'\"\n data-lista-contratti=\"vm.contrattiPredisposti\" \n data-lista-contratti-complete=\"vm.contrattiPredispostiComplete\" \n data-lista-disabilitati=\"vm.contratti\"\n data-on-selected=\"vm.handleAdd\"\n data-tipo-intervento=\"{{vm.tipoIntervento}}\">\n
\n
\n
\n
\n`;\n\nmodule.component('listaContrattiLocazione', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n contratti: '=',\n cfCedente: '@', //non modificabile e usato \n onInputChange: '=',\n maxOccurs: '@',\n tipoIntervento: '@'\n\n },\n controller: ['$log', 'ContrattoService', 'ContrattoApi', function ($log, ContrattoService, ContrattoApi) {\n var vm = this;\n\n vm.$onInit = function () {\n vm.maxOccurs = parseInt(vm.maxOccurs) || 10;\n vm.caricaListaContratti(vm.cfCedente);\n console.log(\" listaContrattiLocazione init tipoIntervento:\" + vm.tipoIntervento);\n }\n\n vm.$onChange = function (changesObj) {\n var data = changesObj.cfCedente;\n var changed = (data !== undefined && data.currentValue !== data.previousValue);\n if (changed) {\n vm.caricaListaContratti(data.currentValue);\n }\n }\n\n vm.caricaListaContratti = function (cf) {\n\n vm.contrattiPredisposti = [];\n vm.contrattiPredispostiComplete = [];\n if (cf) {\n //vm.contrattiPredisposti = ContrattoApi.fakeData(cf);\n ContrattoApi.getListaContratti(cf).then(function (response) {\n vm.contrattiPredisposti = response;\n vm.contrattiPredispostiComplete = angular.copy(vm.contrattiPredisposti);\n },\n function (error) {\n $log.error(error);\n });\n\n }\n }\n\n vm.newContratto = function () {\n return { datiContratto: { data: \"\", serie: \"\", numero: 0, sottonumero: 0, codiceUfficio: \"\" }, idContratto: \"\", tipo: \"\", importo: 0 };\n }\n\n /**\n * Aggiunge un contratto\n */\n vm.handleAdd = function (contratto) {\n //esistente o nuovo da compilare\n contratto = contratto || vm.newContratto();\n //il form è stato toccato\n vm.form.$setDirty();\n if (vm.contratti.length < vm.maxOccurs) {\n vm.contratti.push(contratto);\n //ricarica la lista del registro\n vm.contrattiPredisposti = angular.copy(vm.contrattiPredisposti);\n\n vm.onInputChange();\n $log.info(\"Aggiunto nuovo contratto\");\n }\n };\n\n /**\n * Rimuove un contratto\n */\n vm.handleRemove = function (indice) {\n //il form è stato toccato\n vm.form.$setDirty();\n vm.contratti.splice(indice, 1);\n //ricarica la lista del registro\n vm.contrattiPredisposti = angular.copy(vm.contrattiPredisposti);\n vm.onInputChange();\n $log.info(`Rimosso contratto ${indice}`);\n };\n\n }]\n});\n\nmodule.component('contrattoLocazione', {\n controllerAs: 'vm',\n template: `\n
\n
\n
{{vm.numContratto}}° riga
\n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n
\n\n `,\n bindings: {\n form: '=',\n numContratto: '@',\n contratto: '=',\n onInputChange: '=',\n onRemove: '='\n },\n controller: ['$log', 'ContrattoService', function ($log, ContrattoService) {\n var vm = this;\n vm.today = new Date();\n\n vm.selezioneDatiContratto = false;\n vm.labelDatiSwitch = \"Compila i dati del contratto\";\n vm.idContrattoPattern = ContrattoService.ID_CONTRATTO_PATTERN;\n\n vm.$onInit = function () {\n vm.listaSerie = Object.values(ContrattoService.SERIE).map(x => { return { label: x.toUpperCase(), value: x.toUpperCase() } });\n vm.listaTipi = [{ label: 'Abitativo', value: 'A' }, { label: 'Commerciale', value: 'C' }, { label: 'Terreno', value: 'T' }];\n\n //preferiamo id contratto per facilitare la compilazione di meno campi\n vm.selezioneDatiContratto = vm.contratto.idContratto === undefined || vm.contratto.idContratto === '' ? vm.datiContrattoPresenti() : false;\n\n if (!vm.contratto.existing) {\n //eventuale reset di dati contratto se presente idContratto (inutile portarseli tutti dietro)\n vm.onSelezioneIdContratto();\n }\n\n }\n\n vm.$onChange = function () {\n vm.selezioneDatiContratto = vm.datiContrattoPresenti();\n }\n\n vm.onSelezioneIdContratto = function () {\n if (vm.contratto?.existing) {\n return;\n }\n if (vm.selezioneDatiContratto) {\n vm.contratto.idContratto = undefined;\n } else {\n vm.contratto.datiContratto = undefined;\n }\n }\n\n vm.onLocalChange = function (fieldName, fieldValue) {\n //vm.selezioneDatiContratto = vm.datiContrattoPresenti();\n //vm.onSelezioneIdContratto();\n\n if (fieldName.indexOf('idContratto') === 0) {\n $log.info(\"Valid: \" + ContrattoService.isValid(fieldValue));\n }\n\n //propagazione evento\n if (vm.onInputChange) {\n vm.onInputChange(fieldName, fieldValue);\n }\n }\n\n vm.datiContrattoPresenti = function () {\n if (vm.contratto.datiContratto) {\n for (const key in vm.contratto.datiContratto) {\n var value = vm.contratto.datiContratto[key];\n if (value && value !== '') {\n return true;\n }\n }\n }\n return false;\n }\n }]\n});\n\nmodule.component('aggiungiContrattoLocazione', {\n controllerAs: 'vm',\n template: `\n \n
\n
\n
\n
\n

Aggiungi un contratto

\n \n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n `,\n bindings: {\n disabled: '=',\n listaContratti: '=',\n listaContrattiComplete: '=',\n listaDisabilitati: '=',\n onSelected: '=',\n tipoIntervento: '@'\n },\n controller: ['$log', '$filter', function ($log, $filter) {\n var vm = this;\n\n vm.$onInit = function () {\n\n //definizioni colonne tabella\n vm.tableColumnsTitles = ['Data', 'Serie', 'Numero e Sottonumero', 'Codice ufficio', 'Codice identificativo contratto', 'Tipo', 'Importo canone annuo'];\n vm.tableColumnsKeys = ['datiContratto.dataContratto', 'datiContratto.serie', 'datiContratto.numero', 'datiContratto.codiceUfficio', 'idContratto', 'tipo', 'importo'];\n\n vm.columnFormatter = {\n \"datiContratto.dataContratto\": function (value, item) {\n return $filter('date')(item.datiContratto?.dataContratto, 'dd/MM/yyyy');\n },\n \"datiContratto.numero\": function (value, item) {\n return (item.datiContratto?.numero && item.datiContratto.sottonumero) ? item.datiContratto.numero + \"/\" + item.datiContratto.sottonumero : item.datiContratto?.numero ? item.datiContratto.numero : value;\n }\n ,\n \"tipo\": function (value, item) {\n return $filter('decodeTipo')(item.tipo);\n }\n ,\n \"importo\": function (value, item) {\n return $filter('currency')(item.importo, \"€\", 0);\n }\n\n\n };\n\n //numero massimo di righe che possono essere aggiunte\n vm.maxOccurs = parseInt(vm.maxOccurs) || 10;\n\n //azioni della tabella\n vm.actions = [{\n title: \"Aggiungi\",\n description: 'Aggiungi',\n btnClasses: 'btn-primary btn-xs',\n iconClasses: 'fa fa-plus',\n function: vm.addExisting,\n checkDisabled: vm.checkDisabled\n }];\n }\n\n vm.$onDestroy = function () {\n if (vm.element) {\n //distruzione del modale (e eventi correlati)\n vm.element.modal('dispose');\n //fix per eventuale backdrop che rimane appeso\n var element = angular.element('.modal-backdrop');\n if (element) {\n element.remove();\n }\n }\n }\n\n /**\n * Aggiunge un contratto ed eventualmente lo marca come caricato da AT e chiude il modale\n */\n const add = function (item) {\n //Se disabilitato non aggiungiamo. \n //Teoricamente se inserisco un id esistente (come empty/new) e provo provo poi ad aggiungerlo non dovrebbe permettermelo\n if (vm.checkDisabled(item)) {\n $log.warning(`Impossibile aggiungere l'elemento perchè disabilitato: ${JSON.stringify(item)}`);\n return;\n }\n if (vm.onSelected) {\n vm.onSelected(item);\n vm.element.modal('hide');\n }\n };\n\n /**\n * nuovo contratto vuoto\n */\n vm.addEmpty = function () {\n add({});\n };\n\n vm.manageTipoIntervento = function () {\n var modalVisible = false;\n if (vm.tipoIntervento && (vm.tipoIntervento === '1' || vm.tipoIntervento === '2A')) {\n if (vm.listaContrattiComplete && vm.listaContrattiComplete.length > 0) {\n if (vm.tipoIntervento === '1') {\n vm.listaContratti = vm.listaContrattiComplete.filter(item => { if (item.tipoCredito === vm.tipoIntervento) return item })\n if (vm.listaContratti.length > 0)\n modalVisible = true;\n } else {\n vm.listaContratti = angular.copy(vm.listaContrattiComplete);\n modalVisible = true;\n }\n\n }\n }\n\n if (modalVisible) {\n vm.element.modal('show');\n } else {\n vm.element.modal('hide');\n add({});\n }\n };\n\n /**\n * Aggiunge un contratto ed eventualmente lo marca come caricato da AT e chiude il modale\n */\n vm.addExisting = function (item) {\n //copia per non intaccare lo stato della lista originale\n var toAdd = angular.copy(item);\n toAdd.existing = true;\n //uppercase dove necessario\n toAdd.idContratto = toAdd.idContratto && toAdd.idContratto.toUpperCase();\n //rimozione data,serie,etc\n if (toAdd.idContratto) {\n toAdd.datiContratto = undefined;\n }\n add(toAdd);\n }\n\n /**\n * Se già aggiunto non permettiamo l'aggiunta\n */\n vm.checkDisabled = function (item) {\n if (!vm.listaDisabilitati || vm.listaDisabilitati.length === 0 || !item.idContratto) {\n return false;\n }\n var exists = vm.listaDisabilitati.filter && vm.listaDisabilitati.filter(x => String(x.idContratto).toUpperCase() === String(item.idContratto).toUpperCase()).length > 0;\n return exists;\n }\n\n }]\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\nimport fileSaver from 'file-saver';\nimport Esiti from '../../esiti/esiti';\n\nvar html = /*html*/`\n
\n
0\">\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Elenco invii per codice fiscale {{vm.listaInvii[0].cfBen}} ed eventuali collegati ({{vm.rowNumber}} elementi)
Numero ProtocolloTipo OperazioneTipoTipo OpzioneStatoData invioAnnoAzioni
\n Protocollo numero {{::riga.protocollo}}\n {{::riga.articolo | decodeArtTabella}}{{::riga.tipo_doc | decodTipoModello}}{{::riga.tipo_opzione | decodeOpzione}}\n \n {{::riga.data_protocollo}}{{::riga.anno}}\n\n \n \n \n \n Attestazione in pdf\n \n \n Ricevuta in pdf\n \n \n Modello in pdf\n \n
\n \n Richiedi annullamento \n \n
\n
\n
\n
\n
\n
\n
\n
\n

Nessun risultato

\n

Non sono presenti risultati per i parametri di ricerca forniti

\n
\n
\n
\n
\n`;\n\nmodule.component('ccireRistampa', {\n controllerAs: 'vm',\n template: html,\n bindings: {\n form: '=',\n listaInvii: '=',\n rowNumber: '=',\n dataRichiedente: '='\n },\n\n controller: ['$rootScope', '$log', '$http', 'MessagesService', 'StorageService', 'ModelliApi', 'AjaxService', 'CONSTANTS', 'ModelliService',\n function ($rootScope, $log, $http, MessagesService, StorageService, ModelliApi, AjaxService, CONSTANTS, ModelliService) {\n\n var vm = this;\n\n vm.$onInit = function () {\n vm.MessagesService = MessagesService;\n vm.data = {};\n aggiornaLista(vm.listaInvii, vm.rowNumber);\n }\n\n vm.$onChanges = function () {\n aggiornaLista(vm.listaInvii, vm.rowNumber);\n }\n\n\n var aggiornaLista = function (listaInvii, rowNumber) {\n vm.listaInvii = listaInvii;\n if (listaInvii != undefined) {\n vm.num_richieste = rowNumber;\n vm.itemsPerPage = 10;\n StorageService.setResource('listaInvii', vm.listaInvii);\n } else {\n StorageService.setResource('listaInvii', vm.listaInvii);\n }\n };\n\n vm.hasRicevuta = function (riga) {\n if (riga.articolo === '122') {\n return Esiti.isEsitoFinale(riga.esitoCodice) || Esiti.isEsitoParziale(riga.esitoCodice);\n }\n return false;\n }\n\n vm.stampaModello = function (prot, cfCedente, tipostampa, secondaRicevuta) {\n MessagesService.resetMessages();\n var data = '{ \"cfCedente\": \"' + cfCedente + '\",\"protocollo\": \"' + prot + '\",\"tipoStampa\": \"' + tipostampa + '\"}'\n\n var method = 'POST';\n $http({\n url: secondaRicevuta ? '/ccire-services-web/rs/Stampa/stampaSecondaRicevuta/' : '/ccire-services-web/rs/Stampa/stampaModello/',\n method: method,\n responseType: 'arraybuffer',\n headers: AjaxService.getHeader(method),\n data: data\n }).then(function (result) {\n\n try {\n var headers = result.headers()\n\n var esito = headers['esito'];\n if (esito && esito === \"KO\") {\n var msg = headers['message'];\n vm.MessagesService.setMessages([{ severity: 'ERROR', message: msg }]);\n return;\n }\n\n var contentType = headers['content-type'];\n\n var fileNamePattern = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n var fileName = fileNamePattern.exec(headers['content-disposition'])[1];\n\n var blob = new Blob([result.data], { type: contentType });\n\n fileSaver.saveAs(blob, fileName);\n\n } catch (e) {\n //nessuna risposta dal server\n var msgArray = [{ severity: 'ERROR', message: 'Errore nella stampa' }];\n vm.MessagesService.setMessages(msgArray);\n }\n\n }, function (response) {\n $log.error(response);\n });\n };\n\n\n vm.richiediAnnullamento = function (item) {\n ModelliService.goToAnnullamento(item.protocollo, item.cfBen, item.articolo);\n }\n\n }]\n});\n","import angular from 'angular';\n\nvar module = angular.module('modelliModule');\n\nmodule.directive('dichiarazioneCessione', dichiarazioneCessione);\n\nvar html = `\n
\n
\n Cessione a istituti di credito e intermediari finanziari\n
\n

\n
Dichiara
\n

\n
\n
\n \n \n
\n
\n
\n`;\n\nfunction dichiarazioneCessione() {\n\n return {\n replace: true,\n restrict: 'E',\n template: html,\n scope: {\n form: '=',\n data: '=',\n comunicazione: '='\n },\n controller: ['$scope', '$filter', 'MessagesService', 'CONSTANTS', function ($scope, $filter, MessagesService, CONSTANTS) {\n try {\n $scope.MessagesService = MessagesService;\n $scope.enabled = function () {\n return $filter('cedente')($scope.data);\n };\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n $scope.MessagesService.addMessageError(clientErr);\n throw e;\n }\n }]\n };\n}","import angular from 'angular';\nimport fileSaver from 'file-saver';\n\nvar module = angular.module('modelliModule');\n\n\nmodule.directive('modelloRiepilogo', ['$sce', 'CONSTANTS', modelloRiepilogo]);\n\nvar html = `\n
\n
\n Verifica dati comunicazione\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n`;\n\nfunction modelloRiepilogo() {\n return {\n replace: true,\n restrict: 'E',\n template: html,\n scope: {\n form: '=',\n data: '=',\n tipo: '@',\n articolo: '@'\n },\n controller: ['$scope', 'CONSTANTS', '$log', '$filter', '$http', '$window', 'MessagesService', 'ModelliApi',\n function ($scope, CONSTANTS, $log, $filter, $http, $window, MessagesService, ModelliApi) {\n\n try {\n $scope.MessagesService = MessagesService;\n //abilita/disabilita la direttiva al cambio del modello (post broadcast) \n $scope.enabled = function () {\n return $filter('cedente')($scope.data);\n };\n\n $scope.confermaDisabled = function () {\n return $scope.form.$invalid;\n }\n\n $scope.stampaModelloRiepilogo = function () {\n MessagesService.resetMessages(); // Reset dei messaggi\n\n ModelliApi.stampa($scope.tipo, $scope.articolo, { articolo: $scope.articolo, modello: $scope.data }, function (result) {\n\n try {\n var headers = result.headers()\n var contentType = headers['content-type'];\n\n var fileNamePattern = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n var fileName = fileNamePattern.exec(headers['content-disposition'])[1];\n\n var blob = new Blob([result.data], { type: contentType });\n\n fileSaver.saveAs(blob, fileName);\n\n } catch (e) {\n //nessuna risposta dal server\n var msgArray = [{ severity: 'ERROR', message: 'Errore nella stampa della domanda' }];\n $scope.MessagesService.setMessages(msgArray);\n $window.scroll(0, 0);\n }\n\n },\n function error(data) {\n $log.error(data);\n \n var headers = data.headers()\n //errore dalle locazioni\n if(headers) var msg = headers['msg'];\n\n var msgArray = [{ severity: 'ERROR', message: 'Errore nella stampa della domanda' }];\n if(msg) {\n msgArray = [{ severity: 'ERROR', message: msg }];\n }\n //var msgArray = [{ severity: 'ERROR', message: 'Errore nella stampa della domanda' }];\n $scope.MessagesService.setMessages(msgArray);\n $window.scroll(0, 0);\n\n });\n }\n\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n $scope.MessagesService.addMessageError(clientErr);\n throw e;\n }\n }]\n };\n}","\nimport angular from 'angular';\nvar module = angular.module('modelliModule');\n\nmodule.directive('selezioneCedente', selezioneCedente);\n\nfunction selezioneCedente() {\n\n return {\n replace: true,\n restrict: 'E',\n template: `\n
\n
\n Indicare il titolare del credito o della detrazione, il tipo di operazione e l'anno di riferimento\n Indicare il titolare del credito o della detrazione, il tipo di operazione ed eventualmente il protocollo\n
\n
\n
\n \n
\n \n
\n \n
\n {{cf}}\n
\n
\n
\n \n \n
\n
\n \n
\n
\n \n \n \n \n
\n AGE.AGEV-ST01.REGISTRO UFFICIALE.\n \n -I\n
\n \n \n
\n
\n\n
\n
\n \n\n \n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n\n
\n \n \n
\n \n
\n
\n \n
\n \n
\n
\n `,\n scope: {\n form: '=',\n callback: '@',\n tipo: '@',\n onSelected: '=',\n profilo: '=',\n searchFields: '=',\n preselectCf: '@'\n },\n controller: ['$scope', '$rootScope', '$log', 'MessagesService', 'ModelliApi', 'StorageService', 'CONSTANTS',\n function ($scope, $rootScope, $log, MessagesService, ModelliApi, StorageService, CONSTANTS) {\n\n\n $scope.init = function () {\n\n $scope.MessagesService = MessagesService;\n $scope.aiutoCf = {};\n $scope.selezionato = false;\n $scope.parametriRicerca = {};\n\n $scope.cfWork = $scope.profilo && $scope.profilo.userWork.codiceFiscale;\n $scope.cfAuth = $scope.profilo && $scope.profilo.userAuth.codiceFiscale;\n\n //aiuto cf\n $scope.aiutoCf.listaCf = [$scope.cfWork];\n if ($scope.cfWork != $scope.cfAuth) {\n $scope.aiutoCf.listaCf.push($scope.cfAuth);\n }\n\n if ($scope.preselectCf && $scope.preselectCf === 'true') {\n $scope.impostaCf($scope.cfWork);\n }\n }\n\n $scope.impostaCf = function (cf) {\n if (cf) {\n $scope.parametriRicerca.cfCedente = angular.copy(cf);\n $scope.caricaArticoli();\n }\n };\n\n //abilitazione campi ricerca\n $scope.fieldEnabled = function (field) {\n if (!$scope.searchFields) {\n return true;\n }\n if (!field) {\n return false;\n }\n return $scope.searchFields[field] !== undefined;\n }\n\n //abilitazione campi ricerca\n $scope.isRequired = function (field) {\n if (!$scope.searchFields || !field) {\n return true;\n }\n var req = $scope.searchFields[field].required;\n return req === undefined || req;\n }\n\n $scope.fieldClass = function (field) {\n if ($scope.searchFields) {\n var f = $scope.searchFields[field].col;\n var s = (!isNaN(f) && f) || 6;\n return `col-md-${s} col-lg-${s}`;\n }\n return `col-md-6 col-lg-6`;\n }\n\n $scope.validaProtocollo = function () {\n var regEx = /^\\d{7}[.]\\d{2}[/]\\d{2}[/]\\d{4}$/g;\n var _prot = $scope.form['protocollo'].$viewValue;\n //reset errore\n $scope.form['protocollo'].$setValidity('invalid', true);\n if (!_prot)\n _prot = $scope.parametriRicerca.protocollo;\n if ($scope.parametriRicerca && $scope.parametriRicerca.protocollo && $scope.parametriRicerca.protocollo != \"\") {\n if (!regEx.test(_prot)) {\n $scope.form['protocollo'].$setValidity('invalid', false);\n //$scope.form['protocollo'].$invalid = true;\n } \n }\n }\n\n $scope.verificaProtocollo = function () {\n var regEx = /^\\d{7}[.]\\d{2}[/]\\d{2}[/]\\d{4}$/g;\n var proto = $scope.parametriRicerca.protocollo;\n if (!proto || proto == undefined || proto === \"\") {\n return true;\n }\n if (!regEx.test(proto)) {\n return false;\n } else {\n return true;\n }\n\n }\n\n $scope.caricaAnni = function () {\n\n if (!$scope.parametriRicerca.articolo || !$scope.parametriRicerca.cfCedente) {\n return;\n }\n\n ModelliApi.getAnni($scope.parametriRicerca.cfCedente, $scope.parametriRicerca.articolo).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile caricare gli anni compilabili\";\n }\n //reset input\n $scope.parametriRicerca.anno = undefined;\n\n $scope.listaAnni = angular.copy(response.anniRiferimento);\n\n if ($scope.listaAnni.length === 1) {\n $scope.parametriRicerca.anno = $scope.listaAnni[0];\n }\n }, function (error) {\n $log.error(error);\n });\n }\n\n\n $scope.caricaArticoli = function () {\n if (!$scope.parametriRicerca.cfCedente) {\n return;\n }\n ModelliApi.getArticoli($scope.parametriRicerca.cfCedente).then(function (response) {\n //verifica dati utente\n if (response == undefined) {\n throw \"Impossibile caricare gli articoli compilabili\";\n }\n //reset input\n $scope.parametriRicerca.articolo = undefined;\n\n $scope.listaArticoli = angular.copy(response.articoli);\n\n if ($scope.listaArticoli && $scope.listaArticoli.length === 1) {\n $scope.parametriRicerca.articolo = $scope.listaArticoli[0].codice;\n $scope.caricaAnni();\n }\n\n }, function (error) {\n $log.error(error);\n $scope.MessagesService.setMessages(response.data.messages);\n });\n }\n\n\n $scope.resetSelezione = function () {\n $scope.selezionato = false;\n //AT:al reset selezione pulisco messaggi\n $scope.MessagesService.resetMessages();\n\n //notifichiamo che il cedente è stato cambiato\n $rootScope.$broadcast('cedenteReset');\n };\n\n\n $scope.getDatiModello = function () {\n\n //zozzeria altrui da cui mi dissocio\n if (!$scope.verificaProtocollo($scope.parametriRicerca.protocollo)) {\n return;\n }\n\n $scope.selectClicked = true;\n $scope.MessagesService.resetMessages();\n $log.info(\"Callback: \" + $scope.callback);\n\n try {\n\n if ($scope.form.$valid) {\n var tipo = $scope.tipo;\n //LM valutare il perchè si utilizza lo storage\n StorageService.setResource(\"cfCedente\", $scope.parametriRicerca.cfCedente);\n StorageService.setResource(\"protocollo\", $scope.parametriRicerca.protocollo);\n StorageService.setResource(\"articolo\", $scope.parametriRicerca.articolo);\n StorageService.setResource(\"anno\", $scope.parametriRicerca.anno);\n\n //evento delegato al chiamante\n if ($scope.onSelected) {\n $scope.onSelected($scope.parametriRicerca);\n } else {\n //evento legacy con broadcast\n\n // il tipo è stato modificato per la ristampa poichè paginato, pertanto\n // è stato cablato con numero_righe/current page. Questo è il primo caricamento\n // delle attestazioni, per le pagine successive viene usato il metodo\n // refreshRichieste nella direttiva ristampa\n if (tipo == 'S') {\n tipo = '10/1';\n }\n ModelliApi[$scope.callback](tipo, $scope.parametriRicerca).then(\n function (response) {\n if (MessagesService.hasAnyError()) {\n $log.info(\"Sono presenti degli errori:\", response.messages);\n return;\n }\n $log.info(\"Nuovo cedente: \");\n $log.info(response);\n\n $rootScope.$broadcast('cedenteSelezionato', response);\n $scope.selezionato = true;\n\n }, function (response) {\n $log.error(response);\n $scope.MessagesService.setMessages(response.data.messages);\n //MessagesService.addErrorMessages([\"Si è verificato un errore\"]);\n });\n }\n } else {\n $log.debug(\"Form invalida\");\n }\n\n } catch (e) {\n var clientErr = CONSTANTS.CLIENT_ERR;\n MessagesService.addMessageError(clientErr);\n throw e;\n }\n };\n\n\n $scope.init();\n\n }]\n };\n}\n","import angular from 'angular';\nangular.module('feeButter', []);\n","import angular from 'angular';\n\nvar module = angular.module('feeButter');\nmodule.service('ApiAnagrafica', ['$log', 'AjaxService', 'CONSTANTS', ApiAnagrafica]);\n\n/*\n * Service che definisce i metodi che effettuano chiamate AJAX\n */\nfunction ApiAnagrafica($log, AjaxService, CONSTANTS) {\n\n const service = this;\n\n function getLogoutUrl() {\n switch (CONSTANTS.ENV) {\n case 'prod':\n return 'https://iampe.agenziaentrate.gov.it/sam/UI/Logout?realm=/agenziaentrate';\n case 'val':\n return 'https://iamve.agenziaentrate.gov.it/sam/UI/Logout?realm=/agenziaentrate';\n case 'test':\n default:\n return 'https://iamt.agenziaentrate.gov.it/sam/UI/Logout?realm=/agenziaentrate';\n }\n }\n\n const PATH_LOGOUT = getLogoutUrl();\n\n //su root\n //var PATH_LOGOUT = CONSTANTS.CONTEXT_ROOT_WEB + 'logout';\n\n //su rs\n var GET_RAPP = CONSTANTS.CONTEXT_REST_SERVICE + 'anag/rapp';\n var VERIFICA_CF = CONSTANTS.CONTEXT_REST_SERVICE + 'anag/verify/cf';\n var VERIFICA_CF_SOC = CONSTANTS.CONTEXT_REST_SERVICE + 'anag/verify/{codiceFiscale}';\n var GET_NATURA_GIURIDICA = CONSTANTS.CONTEXT_REST_SERVICE + 'profilo/naturagiuridica';\n var GET_PROFILO = CONSTANTS.CONTEXT_REST_SERVICE + 'profilo';\n var GET_CODICI_CARICA = CONSTANTS.CONTEXT_REST_SERVICE + 'get/codiciCarica';\n var GET_PROVINCE = CONSTANTS.CONTEXT_REST_SERVICE + 'comuni/province';\n var GET_COMUNI = CONSTANTS.CONTEXT_REST_SERVICE + 'comuni/comuni/{provincia}';\n\n var _path = function (url, params) {\n var path = angular.copy(url);\n for (var key in params) {\n var value = params[key];\n path = path.replace(\"{\" + key + \"}\", value);\n }\n return path;\n };\n\n /*\n * Metodi pubblici esposti dal Service\n */\n /*AT: esposto perche' chiamato da modello inviato*/\n service.buildPath = function (originalPath, args) {\n return _path(originalPath, args);\n };\n\n /*\n * verifica se l'oggetto è vuoto\n */\n service.isEmpty = function (obj) {\n if (obj === undefined || obj === null) {\n return true;\n }\n if (obj.length === 0) {\n return true;\n }\n if (obj.length === 1 && obj[0] === undefined) {\n return true;\n }\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop))\n return false;\n }\n return true;\n };\n\n // service.logout = function () {\n // return AjaxService.promisesGetter(PATH_LOGOUT, null, null, 'logout', true);\n // };\n\n service.logout = function () {\n window.location.href = PATH_LOGOUT;\n }\n\n /**\n * Carica l'utente lo adatta al formato per il componente e lo propaga all'observer\n */\n service.loadUser = function () {\n return service.getProfilo(true).then(function (result) {\n if (!result) {\n return result;\n }\n const user = result.user;\n return user;\n }, function (response) {\n $log.error(response);\n });\n }\n\n service.getProfilo = function (force) {\n return AjaxService.promisesGetter(GET_PROFILO, null, null, \"profilo\", force);\n };\n\n service.getProvince = function () {\n return AjaxService.promisesGetter(GET_PROVINCE, null, null, \"comuni\", true);\n };\n\n service.getComuni = function (provincia) {\n var path = _path(GET_COMUNI, { 'provincia': provincia });\n return AjaxService.promisesGetter(path, null, null, \"comuni\", true);\n };\n\n service.getCodiciCarica = function (data) {\n return AjaxService.ajaxRequest(\"POST\", GET_CODICI_CARICA, data);\n };\n\n service.verificaCf = function (codiceFiscale, pf) {\n var type = pf === undefined || pf === true ? 'pf' : 'pnf'; //default true\n return AjaxService.ajaxRequest(\"POST\", `${VERIFICA_CF}/${type}`, codiceFiscale);\n };\n\n service.getRappresentante = function (codiceFiscale, pf) {\n var type = pf === undefined || pf === true ? 'pf' : 'pnf'; //default true\n var data = { 'codiceFiscale': codiceFiscale };\n return AjaxService.ajaxRequest(\"POST\", `${GET_RAPP}/${type}`, data);\n };\n\n //deprecata\n service.verificaCfSoc = function (codiceFiscale) {\n var path = _path(VERIFICA_CF_SOC, { 'codiceFiscale': codiceFiscale });\n return AjaxService.promisesGetter(path, null, null, 'cfSoc_' + codiceFiscale, false);\n };\n\n service.getNaturaGiuridica = function () {\n return AjaxService.promisesGetter(GET_NATURA_GIURIDICA, null, null, \"naturaGiuridica\", true);\n };\n\n}\n","\nimport angular from 'angular';\nimport stacktrace from 'stacktrace-js';\n\nimport 'angular-ui-mask';\nimport 'angular-i18n/angular-locale_it-it';\nimport 'angular-route';\nimport 'angular-sanitize';\nimport 'file-saver';\nimport '@fee/ajs-core'\nimport '@fee/ajs-servizi'\nimport 'app/config';\nimport 'app/ccire-decorator';\n\n\n//componenti\nimport 'app/home/home.main';\nimport 'app/modelli/modelli.main';\nimport 'app/playground';\n\n//shared\nimport 'app/shared/feebutter.main';\n\n\n\n/*\n * Best practice\n */\n'use strict';\n\n/*\n * Creazione del nuovo modulo dell'applicazione.\n * Il nome deve essere lo stesso nome utilizzato nel main.js\n * Il secondo parametro definisce le dipendenze dei moduli definiti nei file JS.\n */\n\n\nvar app = angular.module('ccire-services-web', [\n\t'ngRoute',\n\t'ngSanitize',\n\t'feeAjsCore',\n\t'feeAjsServizi',\n\t//shared\n\t'feeButter',\n\t'ccireDecorator',\n\t'configModule',\n\t'homeModule',\n\t'modelliModule'\n\n]);\n\napp.run(['PageLayoutService', 'CONSTANTS', 'ApiAnagrafica', function (PageLayoutService, CONSTANTS, ApiAnagrafica) {\n\tPageLayoutService.setTitle(\"Comunicazione opzione crediti e detrazioni\");\n\tPageLayoutService.setLogo(\"AE_logo_152\");\n\t//\t\tPageLayoutService.setBackLink(\"/Main\", \"La mia scrivania\");\n\t//PageLayoutService.setInfoLink(\"/PrecomLogin/LoginRedirectionManager?redirectResource=INFO_PRECOMPILATA_URL&action=REDIRECT\", \"Info e Assistenza\");\n\tPageLayoutService.setTopLink(\"http://www.agenziaentrate.gov.it\", \"Agenzia delle Entrate\");\n\tPageLayoutService.setMenuLeftEnabled(false);\n\tPageLayoutService.setMenuTopEnabled(true);\n\t//tolta spinner su keepAlive\n\tPageLayoutService.addSpinnerEsclusion(CONSTANTS.KEEP_ALIVE);\n\n\tPageLayoutService.userManagment(\n\t\tApiAnagrafica.loadUser, \t//carica l'utente lo adatta al formato per il componente e lo propaga all'observer\n\t\tApiAnagrafica.logout) \t//esegue tutte le logout dei vari progetti\n\n}]);\n\n\napp.config(['$routeProvider', '$httpProvider', '$logProvider', 'CONSTANTS',\n\tfunction ($routeProvider, $httpProvider, $logProvider, CONSTANTS) {\n\n\t\t/*\n\t\t * Abilita/disabilita i log di debug\n\t\t */\n\t\t$logProvider.debugEnabled(CONSTANTS.DEBUG);\n\n\t\t$routeProvider.\n\t\t\twhen('/comunicazione/:articolo/:anno', {\n\t\t\t\ttemplate: '',\n\t\t\t\t//accesso solo se CF già selezionato\n\t\t\t\tresolveRedirectTo: ['StorageService', function (StorageService) {\n\t\t\t\t\tvar cf = StorageService.getResource(\"cfCedente\");\n\t\t\t\t\tif (!cf) {\n\t\t\t\t\t\treturn '/comunicazione';\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tcheck: ['ModelliApi', function (ModelliApi) {\n\t\t\t\t\t\treturn ModelliApi.getModelloOpen(CONSTANTS.COMUNICAZIONE);\n\t\t\t\t\t}],\n\t\t\t\t\tmodello: ['ModelliApi', 'StorageService', '$route', function (ModelliApi, StorageService, $route) {\n\t\t\t\t\t\tvar cfCedente = StorageService.getResource(\"cfCedente\");\n\t\t\t\t\t\tvar articolo = $route.current.params.articolo;\n\t\t\t\t\t\tvar anno = $route.current.params.anno;\n\t\t\t\t\t\treturn ModelliApi.initDati(cfCedente, articolo, anno, 'C');\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\twhen('/comunicazione', {\n\t\t\t\ttemplate: '',\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tcheck: ['ModelliApi', function (ModelliApi) {\n\t\t\t\t\t\treturn ModelliApi.getModelloOpen(CONSTANTS.COMUNICAZIONE);\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\twhen('/protocollo', {\n\t\t\t\ttemplate: '',\n\t\t\t\t//accesso solo se CF già selezionato\n\t\t\t\tresolveRedirectTo: ['StorageService', function (StorageService) {\n\t\t\t\t\tvar protocollo = StorageService.getResource(\"protocollo\");\n\t\t\t\t\tvar codiceFiscale = StorageService.getResource(\"codiceFiscale\");\n\t\t\t\t\tif (!protocollo || !codiceFiscale) {\n\t\t\t\t\t\treturn '/home';\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tdata: ['StorageService', function (StorageService) {\n\t\t\t\t\t\tvar protocollo = StorageService.getResource(\"protocollo\");\n\t\t\t\t\t\tvar codiceFiscale = StorageService.getResource(\"codiceFiscale\");\n\t\t\t\t\t\tvar tipologia = StorageService.getResource(\"tipologia\");\n\t\t\t\t\t\tvar title = StorageService.getResource(\"title\");\n\t\t\t\t\t\tvar header = StorageService.getResource(\"header\");\n\t\t\t\t\t\tvar message = StorageService.getResource(\"message\");\n\t\t\t\t\t\tvar stampa = StorageService.getResource(\"stampa\");\n\t\t\t\t\t\treturn { protocollo: protocollo, codiceFiscale: codiceFiscale, tipologia: tipologia, title: title, header: header, message: message, stampa: stampa };\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\twhen('/annullamento/:articolo/:protocollo', {\n\t\t\t\ttemplate: '',\n\t\t\t\t//accesso solo se CF già selezionato\n\t\t\t\tresolveRedirectTo: ['StorageService', function (StorageService) {\n\n\t\t\t\t\tvar cf = StorageService.getResource(\"cfCedente\");\n\t\t\t\t\tif (!cf) {\n\t\t\t\t\t\treturn '/annullamento';\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tdata: ['StorageService', '$route', function (StorageService, $route) {\n\t\t\t\t\t\tvar data = {};\n\t\t\t\t\t\tvar protocolloUnescaped = $route.current.params.protocollo.split(\"-\").join(\"/\");\n\t\t\t\t\t\tdata.protocollo = protocolloUnescaped;\n\t\t\t\t\t\tdata.articolo = $route.current.params.articolo;\n\t\t\t\t\t\tdata.cfCedente = StorageService.getResource(\"cfCedente\");\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}],\n\t\t\t\t\tannullamento: ['ModelliApi', 'StorageService', '$route', 'MessagesService', function (ModelliApi, StorageService, $route, MessagesService) {\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn ModelliApi.getModelloOpen(CONSTANTS.ANNULLAMENTO).then(\n\t\t\t\t\t\t\tfunction (response) {\n\t\t\t\t\t\t\t\t//se ci sono errori non procediamo\n\t\t\t\t\t\t\t\tif (MessagesService.hasMessageBySeverity(response.messages, ['ERROR', 'SECURITY'])) {\n\t\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar cfCedente = StorageService.getResource(\"cfCedente\");\n\t\t\t\t\t\t\t\tvar articolo = $route.current.params.articolo;\n\t\t\t\t\t\t\t\tvar protocolloUnescaped = $route.current.params.protocollo.split(\"-\").join(\"/\");\n\t\t\t\t\t\t\t\treturn ModelliApi.getDatiProtocollo(cfCedente, protocolloUnescaped, 'A', articolo).then (\n\t\t\t\t\t\t\t\t\tfunction (response) {\n\t\t\t\t\t\t\t\t\t\t//se ci sono errori non procediamo\n\t\t\t\t\t\t\t\t\t\tif (MessagesService.hasMessageBySeverity(response.messages, ['ERROR', 'SECURITY'])) {\n\t\t\t\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t//aggiungiamo la info che la funzionalià risulta aperta\n\t\t\t\t\t\t\t\t\t\tresponse.check = true;\n\t\t\t\t\t\t\t\t\t\treturn response;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, function (error) {\n\t\t\t\t\t\t\t\t//funzionalità chiusa, reject della promise, scatta interceptor con messaggio\n\t\t\t\t\t\t\t\t$q.reject(error);\n\t\t\t\t\t\t\t});\t\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\twhen('/annullamento', {\n\t\t\t\ttemplate: '',\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tcheck: ['ModelliApi', function (ModelliApi) {\n\t\t\t\t\t\treturn ModelliApi.getModelloOpen(CONSTANTS.ANNULLAMENTO);\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\twhen('/attestazioni', {\n\t\t\t\ttemplate: '',\n\t\t\t\tresolve: {\n\t\t\t\t\tprofilo: ['ApiAnagrafica', function (ApiAnagrafica) {\n\t\t\t\t\t\treturn ApiAnagrafica.getProfilo();\n\t\t\t\t\t}],\n\t\t\t\t\tcheck: ['ModelliApi', function (ModelliApi) {\n\t\t\t\t\t\treturn ModelliApi.getModelloOpen(CONSTANTS.STAMPA);\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).\n\t\t\t/* delegato a modulo principale\n\t\t\twhen('/noauth', {\n\t\t\t\ttemplate: `\n\t\t\t\t\n\t\t\t\t\t\t\t Torna ai \n\t\t\t\t\n\t\t\t\t`,\n\t\t\t\tresolve: {\n\t\t\t\t\tlink: ['CONSTANTS', function (CONSTANTS) {\n\t\t\t\t\t\treturn CONSTANTS.TELEM_PAGE;\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}).*/\n\t\t\totherwise({\n\t\t\t\tredirectTo: '/home'\n\t\t\t});\n\n\t\t/*\n\t\t * Iniezione di un Service per la gestione custom delle chiamate HTTP.\n\t\t */\n\t\t$httpProvider.interceptors.push('StatusCodeInterceptorService');\n\t}]);\n\n/*\n * Override della gestione delle eccezioni di AngularJS.\n * In questo modo si possono effettuare elaborazioni aggiuntive al flusso standard.\n */\napp.config(['$provide', function ($provide) {\n\t$provide.decorator('$exceptionHandler', ['$delegate', '$log', '$window', function ($delegate, $log, $window) {\n\t\treturn function (exception, cause) {\n\t\t\t/*\n\t\t\t * Stampo l'eccezione prima di procedere con il flusso standard\n\t\t\t */\n\t\t\ttry {\n\t\t\t\t$log.debug(\"Gestione dell'eccezione\");\n\t\t\t\tvar errorMessage = exception.toString();\n\n\t\t\t\tstacktrace.fromError(exception, { sourceCache: {} }).then(function (stackframes) {\n\n\t\t\t\t\tvar stringifiedStack = stackframes.map(function (sf) {\n\t\t\t\t\t\treturn sf.toString();\n\t\t\t\t\t}).join('\\n');\n\n\t\t\t\t\t$log.error(stringifiedStack);\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Genero l'elemento con gli estremi dell'eccezione da salvare nel SessionStorage\n\t\t\t\t\t */\n\t\t\t\t\tvar data = angular.toJson({\n\t\t\t\t\t\terrorUrl: $window.location.href,\n\t\t\t\t\t\terrorMessage: errorMessage,\n\t\t\t\t\t\tstackTrace: stringifiedStack\n\t\t\t\t\t});\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Scrivo l'eccezione nel SessionStorage del browser\n\t\t\t\t\t */\n\t\t\t\t\t$window.sessionStorage.setItem(\"error_stacktrace\", data);\n\t\t\t\t});\n\t\t\t} catch (loggingError) {\n\t\t\t\t$log.error(\"Errore nella gestione dell'eccezione o Internet Explorer\");\n\t\t\t\t$log.error(loggingError);\n\t\t\t\t/*\n\t\t\t\t * In caso di errore o Internet Explorer, scrivo comunque l'eccezione ridotta nel SessionStorage del browser\n\t\t\t\t */\n\t\t\t\t$window.sessionStorage.setItem(\"error_stacktrace\", exception);\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Chiamata all'oggetto standard $exceptionHandler di AngularJS\n\t\t\t */\n\t\t\t$delegate(exception, cause);\n\t\t};\n\t}]);\n}]);\n\n/*\n * Metodo per eseguire funzioni dopo che l'applicazione e' stata lanciata\n */\napp.run(['$rootScope', 'MessagesService', 'KeepAliveService', 'CONSTANTS', function ($rootScope, MessagesService, KeepAliveService, CONSTANTS) {\n\n\tKeepAliveService.start(CONSTANTS.KEEP_ALIVE, 60000);\n\n\t/*\n\t * Intercetto l'evento che notifica il cambio di rotta.\n\t * L'evento viene emesso da Angular\n\t */\n\t$rootScope.$on(\"$routeChangeStart\", function (event, nextRoute, currentRoute) {\n\t\t/*\n\t\t * Richiamo il servizio per cancellare eventuali messaggi a ogni cambio di rotta\n\t\t */\n\t\tMessagesService.resetMessages();\n\t});\n}]);\n\n","import angular from 'angular';\nimport '@sogei/uikit';\nimport 'fast-levenshtein';\nimport './app';\n\nimport '@sogei/uikit';\nimport '@sogei/uikit/public/resources/css/uikit.css';\nimport '@sogei/uikit/public/resources/css/uikit/agenzia-entrate.css';\nimport './app.css';\n\nimport \"core-js/stable\";\nimport \"regenerator-runtime/runtime\";\n\n//window.jQuery = $;\n//jQuery = $;\n\nangular.bootstrap(document, ['ccire-services-web'], { strictDi: true });\n\n\n\n\n"],"sourceRoot":""}