{"version":3,"sources":["scripts/app-ce10911691.js"],"names":["angular","module","TicketsRespuestaComponentController","moment","portalSmartFactory","$linq","$filter","activate","generaPeriodosDDL","getDatosSet","getGraficoOpciones","activaDDLPeriodos","vm","query","periodos","generaArrayKPI","cantidadPeriodos","numeroKPI","array","i","push","nombrePeriodo","inicioPeriodo","finPeriodo","todosPeriodos","utc","startOf","endOf","subtract","datosSet","label","type","fill","lineTension","hoverBackgroundColor","hoverBorderColor","hoverColor","borderColor","pointBorderColor","pointBackgroundColor","pointRadius","pointHoverRadius","borderWidth","yAxisID","backgroundColor","opciones","title","display","text","fontSize","fontFamily","fontStyle","padding","tooltips","titleFontSize","titleSpacing","bodyFontFamily","bodyFontSize","bodySpacing","xPadding","yPadding","callbacks","tooltipItems","data","unidad","datasetIndex","datasets","yLabel","legend","position","labels","scales","yAxes","id","graficoOpciones","getTicketsPerformance","valorKPI","ticketsPerformance","then","response","muestraStandby","listadoAbiertos","ticketsAbiertos","etiquetas","Enumerable","From","ticketPerformance","Select","x","analista","ToArray","kpi","length","performance","ticketsCerrados","barData","performanceDias","map","item","dias","resumenConsulta","totalTickets","ticketsCantidadTotalPeriodo","totalTicketsAbiertos","totalTicketsCerrados","totalCantidadAnalistas","cantidadAnalistasTicket","this","$inject","component","templateUrl","controller","TicketsRespuestaGridController","$uibModal","openDetalleTicketModal","ticketFila","open","animation","DetalleTicketModalController","controllerAs","size","windowTopClass","resolve","$uibModalInstance","ticket","closeModal","close","bindings","tableData","DetalleTicketModalComponentController","ticketData","MockComponentController","FixedNavigatorComponentController","DetalleDocumentoModalComponentController","getDetalleDocumento","detalleDocumento","documentoid","documento","promedioDias","CicloVidaMainComponentController","$log","activaDDLS","getAnalistasDocumentos","getYears","cargarListados","year","tipoPeriodo","mes","listadoMeses","FirstOrDefault","calcularPorcentaje","subtotal","total","calculo","resultado","calcularVariacion","actual","anterior","calc","generaListadoMeses","numeromes","nombremes","generaListaPeriodos","periodoInicial","operadorMoment","listadoPeriodos","obj","inicio","month","final","esPeriodoActual","generaVariacionesPeriodos","dataCicloVida","periodoActual","actualPromedioDiasCont","resumenContabilizados","actualPromedioDiasNoCont","resumenNoContabilizados","periodosNoActuales","Where","noContabilizados","contabilizados","variacionesPeriodosAnteriores","analistasDocumentos","getCicloVida","incluirTops","isUndefined","queryAPI","listaPeriodos","cicloVida","respuestaCiclo","setResumenTodosPeriodos","yearsDocumentos","cicloVidaYear","momento","fecha","totalDocsPeriodos","Sum","sumaContabilizados","sumaNoContabilizados","promedioDiasContablizadosPeriodos","Average","promedioDiasNoContablizadosPeriodos","resumenTodosCiclos","totalDocsPeriodo","porcentajeContabilizados","porcentajeNoContabilizados","tiposPeriodoConsulta","CicloVidaGridComponentController","openDetalleModal","documentoID","promedio","DetalleModalController","gridOptions","flatEntityAccess","enableSorting","columnDefs","field","cellTemplate","name","campoPromedio","template","BarraEstadoComponentController","SERVICE_BASE","$interval","getBarraEstadoInfo","log","infoBarraEstado","barraEstadoInfo","baseUrl","AnalistasPerformanceComponentController","formateaFecha","format","generaPeriodos","contabilizadosDias","noContabilizadosDias","cantidadDocumentos","cantidadDocumentosTotal","grafico","set","navbarMetso","NavbarController","authService","localStorageService","$location","$state","$scope","$rootScope","emitLogOut","$emit","authentication","isAuthenticated","authData","get","logOut","go","directive","restrict","scope","creationDate","bindToController","MetsoJumbotronComponentController","checkIsAuth","emitedLogOut","$on","event","jumbotronPortal","encabezado","texto","conDocumentos","JumbotronPortalController","footerMetso","FooterController","portalIntroFactory","portalDataFactory","toastr","FaqModalController","openFaqModal","nombreEstado","introOptions","formularioContacto","sendFormularioContacto","formSuccess","success","footercontacto","$setUntouched","responsableID","responsableSeleccionado","razonMensaje","descripcion","postFormularioContacto","responsables","getAsuntoDropdown","getResponsablesFormularioContacto","on","val","getIntroJSOptions","documentosPortal","tipo","conBullet","DocumentosPortalController","documentos","getDocumentos","error","warn","WelcomeController","$window","introWelcomeOptions","cargaIntroOptions","docs","userData","razonSocial","rutProveedor","email","nombreEncargado","cargoEncargado","hoy","mostrarFormModificacion","getUserData","getUserTokenInfo","sendUserData","postUserTokenInfo","notificaEstado","current","UserDataController","TestController","SignupController","$timeout","savedSuccessfully","mensajesRegistro","mensajeUsuario","esProveedor","mensaje","registration","userName","password","confirmPassword","signUp","saveRegistration","startTimer","errors","key","modelState","checkUser","timer","cancel","path","pwCheck","require","link","elem","attrs","ctrl","firstPassword","add","$apply","v","element","$setValidity","ShowcaseController","ResetpasswordController","$stateParams","resetPassword","successReset","timeOut","failReset","resetPasswordViewModel","userId","token","RecuperarpasswordController","infoUsuario","baseUrlAPI","datosUsuario","nombreUsuario","emailUsuario","href","absolute","forgotPassword","checkRegisteredUser","sendTicket","SendTicketController","showToastr","classAnimation","infoTicket","postTicket","RutProveedor","NombreProveedor","nombreProveedor","NumeroFactura","numeroFactura","FacturaEstado","facturaEstado","postMailContacto","ticketForm","reportesConfigFactory","getDateRangePickerDefaults","apply","autoAplica","config","locale","applyLabel","cancelLabel","customRangeLabel","autoApply","ranges","Mes Actual","Últimos 30 Días","Mes Anterior","Año Actual","Últimos 12 Meses","Año Anterior","getChartJSOptions","chartTitle","options","custom","tooltip","dataFactory","factory","$http","$q","API_URL_SMART","urlBase","deferred","defer","promise","reject","post","facturaid","API_URL_BASE","getFechas","numero","desde","hasta","getFacturasProveedor","proveedorid","estado","getFacturasProveedorPagadas","fechaPago","getFacturaDetalle","customerId","facturaID","getFacturaPorNumero","formulario","getFechasPagos","getPreguntasFaq","sender","testCheckUsuario","successCallback","debug","errorCallback","getCustomersByProveedor","getCustomerInfo","insertCustomer","cust","updateCustomer","put","ID","deleteCustomer","getOrders","showStepNumbers","showBullets","exitOnOverlayClick","exitOnEsc","nextLabel","prevLabel","skipLabel","doneLabel","welcomeSteps","intro","tooltipClass","mainFiltrosSteps","mainResultadosSteps","detalleSteps","ingresarSteps","pasos","steps","portalAuthverifierFactory","_verifier","info","_redirect","verifier","redirect","ReportesController","MainController","NgTableParams","introFiltrosOptions","introResultadosOptions","tableParams","page","count","filterDelay","nombreColumnaFecha","columnaSuccess","esDocumentosPagados","totalDocumentosEmitidos","totalDocumentosPagados","datePicker","date","startDate","endDate","proveedorInfo","usuario","getUserInfo","proveedor","consultaDocumento","documentosProveedor","settings","dataset","calculaTotalesDocumentos","getDocumentosPagados","proveedorId","fechaPagoSeleccionada","getDocumentosPorNumero","fechasPagos","totalE","totalP","docE","montoTotal","docP","montoPagado","adminProveedor","adminProveedorCallback","description","LoginController","patronRut","formatRut","newUserName","loginData","split","join","message","test","login","err","error_description","IngresarController","razonLogin","razon","correspondeLogOut","faqPortal","FaqController","url","faqs","getFaq","DetalleController","docID","introDetalleOptions","folio","generaFechaProbablePago","fechaRecepcion","fechaR","fechaP","dayP","clone","day","runBlock","fillAuthData","run","routerConfig","$stateProvider","$urlRouterProvider","state","$title","views","","login@home","params","login@ingresar","otherwise","constant","$compileProvider","$logProvider","DEBUG_INFO","toastrConfig","$httpProvider","$analyticsProvider","debugInfoEnabled","debugEnabled","virtualPageviews","interceptors","allowHtml","positionClass","preventDuplicates","progressBar","serviceBase","authServiceFactory","_authentication","isAuth","_saveRegistration","_logOut","_login","headers","Content-Type","access_token","status","remove","_fillAuthData","authInterceptorService","$injector","authInterceptorServiceFactory","_request","Authorization","_responseError","rejection","request","responseError","$templateCache"],"mappings":"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","file":"scripts/app-ce10911691.js","sourcesContent":["(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores', [\r\n 'ngAnimate',\r\n 'ngCookies',\r\n 'ngTouch',\r\n 'ngSanitize',\r\n 'ngMessages',\r\n 'ngAria', \r\n 'ui.router', //nested views \r\n 'toastr', //toastr messages\r\n 'vAccordion', //accordion for FAQ\r\n 'LocalStorageModule', //LS for Angular with fallback\r\n 'angular-loading-bar', //every $http requests shows bar \r\n 'ngTable', //angular tables\r\n 'smoothScroll', //Scroller -> https://github.com/d-oliveros/ngSmoothScroll\r\n 'ui.bootstrap',\r\n 'angular-intro',\r\n 'ui.router.title',\r\n 'angulartics',\r\n 'angulartics.google.analytics',\r\n 'chart.js',\r\n 'ngJustGage',\r\n 'ui.select', \r\n 'daterangepicker', //https://github.com/fragaria/angular-daterangepicker\r\n 'angucomplete-alt', //autocomplete para vista admin\r\n 'angular-linq', //LINQ expressions para JS\r\n 'ui.grid',\r\n 'ui.grid.resizeColumns'\r\n ]);\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('ticketsRespuestaComponent', {\r\n templateUrl: 'app/reportes/tickets/ticketsrespuesta/tickets-respuesta.html',\r\n controller: TicketsRespuestaComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function TicketsRespuestaComponentController(moment, portalSmartFactory, $linq, $filter) {\r\n var vm = this;\r\n\r\n vm.barData = {};\r\n vm.datosSet = [];\r\n vm.getTicketsPerformance = getTicketsPerformance;\r\n vm.graficoOpciones = {};\r\n vm.listadoAbiertos = [];\r\n vm.muestraStandby = true;\r\n vm.periodos = {};\r\n vm.query = {};\r\n vm.resumenConsulta = {};\r\n \r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate();\r\n\r\n function activate() {\r\n generaPeriodosDDL();\r\n getDatosSet();\r\n getGraficoOpciones();\r\n activaDDLPeriodos(); //Debe ir al final ya que inicia DDL con periodos\r\n }\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \r\n\r\n function activaDDLPeriodos() {\r\n vm.query = vm.periodos[0];\r\n }\r\n\r\n //Genera array con KPIs\r\n function generaArrayKPI(cantidadPeriodos, numeroKPI) {\r\n\r\n var array = [];\r\n\r\n for (var i = 0; i < cantidadPeriodos; i++) {\r\n array.push(numeroKPI);\r\n }\r\n\r\n return array;\r\n }\r\n\r\n //Genera periodos para DDL\r\n function generaPeriodosDDL() {\r\n var periodos = [\r\n { nombrePeriodo: 'TODOS LOS PERÍODOS', inicioPeriodo: null, finPeriodo: null, todosPeriodos: true },\r\n { nombrePeriodo: 'AÑO ACTUAL', inicioPeriodo: moment().utc().startOf('year'), finPeriodo: moment().utc().endOf('year'), todosPeriodos: false },\r\n { nombrePeriodo: 'ÚLTIMOS 12 MESES', inicioPeriodo: moment().utc().subtract(12, 'month'), finPeriodo: moment().utc(), todosPeriodos: false },\r\n { nombrePeriodo: 'AÑO ANTERIOR', inicioPeriodo: moment().utc().subtract(1, 'year').startOf('year'), finPeriodo: moment().utc().subtract(1, 'year').endOf('year'), todosPeriodos: false },\r\n { nombrePeriodo: 'MES ACTUAL', inicioPeriodo: moment().startOf('month'), finPeriodo: moment().utc().endOf('month'), todosPeriodos: false }\r\n ]\r\n\r\n vm.periodos = periodos;\r\n }\r\n\r\n\r\n //Configuraciones independientes para las SERIES del grafico\r\n function getDatosSet() {\r\n var datosSet = [\r\n {\r\n label: \"KPI\",\r\n type: 'line',\r\n fill: false,\r\n lineTension: 0,\r\n hoverBackgroundColor: \"#721104\",\r\n hoverBorderColor: \"#721104\",\r\n hoverColor: '#721104',\r\n borderColor: '#721104', //burdeo\r\n pointBorderColor: '#721104',\r\n pointBackgroundColor: '#721104',\r\n pointRadius: 3,\r\n pointHoverRadius: 5,\r\n borderWidth: 2,\r\n yAxisID: 'A'\r\n },\r\n {\r\n label: \"Respuesta\",\r\n type: 'line',\r\n fill: false,\r\n lineTension: 0,\r\n hoverBackgroundColor: \"#3b7cc6\",\r\n hoverBorderColor: \"#3b7cc6\",\r\n borderColor: '#004aa0', //azul\r\n pointBorderColor: '#0c2e56', //azul oscuro\r\n pointBackgroundColor: '#3b7cc6', //azul claro\r\n pointRadius: 6,\r\n pointHoverRadius: 5,\r\n borderWidth: 2,\r\n yAxisID: 'A'\r\n },\r\n {\r\n label: 'Abiertos',\r\n type: 'bar',\r\n backgroundColor: 'rgba(252,144,0, .8)',\r\n borderColor: 'rgba(252,144,0, 1)',\r\n borderWidth: 0,\r\n yAxisID: 'B'\r\n },\r\n {\r\n label: 'Cerrados',\r\n type: 'bar',\r\n backgroundColor: 'rgba(0,94,87, .8)',\r\n borderColor: 'rgba(0,94,87,1)',\r\n borderWidth: 0,\r\n yAxisID: 'B'\r\n }\r\n ];\r\n\r\n vm.datosSet = datosSet;\r\n }\r\n\r\n //Configuraciones para el grafico\r\n function getGraficoOpciones() {\r\n\r\n var opciones = {\r\n title: {\r\n display: true,\r\n text: 'Tickets por Analista vs Performance (Días)',\r\n fontSize: 35,\r\n fontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontStyle: 'lighter',\r\n padding: 20\r\n },\r\n tooltips: {\r\n titleFontSize: 19,\r\n titleSpacing: 4,\r\n bodyFontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n bodyFontSize: 16,\r\n bodySpacing: 10,\r\n xPadding: 10,\r\n yPadding: 10,\r\n callbacks: {\r\n label: function (tooltipItems, data) {\r\n var unidad = '';\r\n\r\n if (tooltipItems.datasetIndex === 0 || tooltipItems.datasetIndex === 1) {\r\n unidad = 'días';\r\n }\r\n else {\r\n unidad = 'tickets'\r\n }\r\n\r\n return data.datasets[tooltipItems.datasetIndex].label + ': ' + tooltipItems.yLabel + ' ' + unidad;\r\n }\r\n }\r\n },\r\n legend: {\r\n display: true,\r\n position: 'top',\r\n labels: {\r\n fontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontSize: 19\r\n }\r\n },\r\n scales: {\r\n yAxes: [\r\n {\r\n id: 'A',\r\n type: 'linear',\r\n position: 'left'\r\n },\r\n {\r\n id: 'B',\r\n type: 'linear',\r\n position: 'right'\r\n }\r\n ]\r\n }\r\n };\r\n\r\n\r\n\r\n vm.graficoOpciones = opciones;\r\n }\r\n\r\n //Retorna objeto de configuracion para chart.js de performance de tickets\r\n function getTicketsPerformance() {\r\n \r\n var valorKPI = 3; \r\n\r\n portalSmartFactory.ticketsPerformance(vm.query).then(function (response) { \r\n\r\n vm.muestraStandby = false; //bandera para eliminar fila de espera\r\n\r\n vm.listadoAbiertos = response.ticketsAbiertos;\r\n\r\n var etiquetas = $linq.Enumerable().From(response.ticketPerformance)\r\n .Select(function (x) {\r\n return x.analista;\r\n }).ToArray(); \r\n \r\n var kpi = generaArrayKPI(etiquetas.length, valorKPI);\r\n\r\n var performance = $linq.Enumerable().From(response.ticketPerformance)\r\n .Select(function (x) {\r\n return x.performance;\r\n }).ToArray();\r\n\r\n var ticketsCerrados = $linq.Enumerable().From(response.ticketPerformance)\r\n .Select(function (x) {\r\n return x.ticketsCerrados;\r\n }).ToArray();\r\n\r\n var ticketsAbiertos = $linq.Enumerable().From(response.ticketPerformance)\r\n .Select(function (x) {\r\n return x.ticketsAbiertos;\r\n }).ToArray();\r\n\r\n vm.barData.data = [];\r\n\r\n vm.barData.etiquetas = etiquetas;\r\n\r\n //Convierte a DIAS y trunca en 2 PERFORMANCE\r\n var performanceDias = performance.map(function (item) {\r\n var dias = item / 24;\r\n return $filter('number')(dias, 2);\r\n });\r\n\r\n //Debe corresponder al orden DatosSet()\r\n vm.barData.data.push(kpi);\r\n vm.barData.data.push(performanceDias);\r\n vm.barData.data.push(ticketsAbiertos);\r\n vm.barData.data.push(ticketsCerrados); \r\n\r\n vm.resumenConsulta = {\r\n totalTickets: response.ticketsCantidadTotalPeriodo,\r\n totalTicketsAbiertos: response.totalTicketsAbiertos,\r\n totalTicketsCerrados: response.totalTicketsCerrados,\r\n totalCantidadAnalistas: response.cantidadAnalistasTicket\r\n }; \r\n\r\n });\r\n }\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('ticketsRespuestaGridComponent', {\r\n bindings: {\r\n tableData: '<'\r\n }, \r\n templateUrl: 'app/reportes/tickets/ticketsrespuesta/tickets-respuesta-grid.html',\r\n controller: TicketsRespuestaGridController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function TicketsRespuestaGridController($uibModal) {\r\n var vm = this; \r\n\r\n vm.openDetalleTicketModal = openDetalleTicketModal; //abre modal con detalle de documento \r\n\r\n \r\n //activate(); \r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n //function activate() { \r\n //}\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function openDetalleTicketModal(ticketFila) {\r\n $uibModal.open({\r\n animation: true,\r\n templateUrl: 'app/reportes/tickets/ticketsrespuesta/detalle-ticket.modal.html',\r\n controller: DetalleTicketModalController,\r\n controllerAs: 'vm',\r\n size: 'lg',\r\n windowTopClass: 'modal-fix',\r\n resolve: {\r\n ticketFila: function () {\r\n return ticketFila;\r\n } \r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n /** @ngInject */\r\n function DetalleTicketModalController($uibModalInstance, ticketFila) {\r\n var vm = this;\r\n\r\n vm.ticket = ticketFila;\r\n \r\n\r\n vm.closeModal = function () {\r\n $uibModalInstance.close();\r\n }\r\n }\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('detalleTicketModalComponent', {\r\n bindings: {\r\n ticketData: '<' \r\n },\r\n templateUrl: 'app/reportes/tickets/detalleticketmodal/detalle-ticket-main.html',\r\n controller: DetalleTicketModalComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function DetalleTicketModalComponentController() {\r\n \r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n //activate();\r\n\r\n //function activate() {\r\n // getDetalleDocumento();\r\n //}\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n \r\n //function getDetalleDocumento() {\r\n // portalSmartFactory.detalleDocumento(vm.documentoid).then(function (response) {\r\n // vm.documento = response;\r\n // });\r\n //}\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('mockComponent', {\r\n templateUrl: 'app/reportes/mock/mock.html',\r\n controller: MockComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function MockComponentController() {\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate();\r\n\r\n function activate() {\r\n }\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('fixedNavigatorComponent', {\r\n templateUrl: 'app/reportes/fixednavigator/fixednavigator.html',\r\n controller: FixedNavigatorComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function FixedNavigatorComponentController() {\r\n\r\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('detalleDocumentoModalComponent', {\r\n bindings: {\r\n documentoid: '<',\r\n promedioDias: '<'\r\n },\r\n templateUrl: 'app/reportes/detalledocumentomodal/detalle-documento-main.html',\r\n controller: DetalleDocumentoModalComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function DetalleDocumentoModalComponentController(portalSmartFactory) {\r\n var vm = this;\r\n\r\n vm.documento = {};\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate();\r\n\r\n function activate() {\r\n getDetalleDocumento();\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n \r\n function getDetalleDocumento() {\r\n portalSmartFactory.detalleDocumento(vm.documentoid).then(function (response) {\r\n vm.documento = response;\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('cicloVidaMainComponent', {\r\n templateUrl: 'app/reportes/ciclovida/ciclo-vida-main.html',\r\n controller: CicloVidaMainComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function CicloVidaMainComponentController($log, moment, portalSmartFactory, $linq, $filter) {\r\n var vm = this;\r\n\r\n vm.analistasDocumentos = [];\r\n vm.calcularPorcentaje = calcularPorcentaje;\r\n vm.getCicloVida = getCicloVida;\r\n vm.listadoMeses = generaListadoMeses();\r\n vm.momento = momento;\r\n vm.muestraStandby = true;\r\n vm.query = {};\r\n vm.respuestaCiclo = {};\r\n vm.resumenTodosCiclos = {};\r\n vm.tiposPeriodoConsulta = ['Anual', 'Mensual'];\r\n vm.variacionesPeriodosAnteriores = {};\r\n vm.yearsDocumentos = [];\r\n \r\n\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate();\r\n\r\n function activate() {\r\n activaDDLS();\r\n getAnalistasDocumentos();\r\n getYears();\r\n }\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \r\n function activaDDLS() {\r\n vm.query.analista = '';\r\n vm.query.cargarListados = true;\r\n vm.query.year = moment().year();\r\n vm.query.tipoPeriodo = 'Mensual';\r\n vm.query.mes = $linq.Enumerable().From(vm.listadoMeses).FirstOrDefault(-1, \"$.numeromes==moment().month()\");\r\n vm.query.cantidadPeriodos = 3;\r\n }\r\n\r\n //Calcula Promedio Simple (Regla de Tres)\r\n function calcularPorcentaje(subtotal, total) {\r\n\r\n if (total == 0) {\r\n return '-';\r\n }\r\n\r\n var calculo = (100 * subtotal) / total;\r\n \r\n var resultado = $filter('number')(calculo, 2)\r\n\r\n return resultado + '%';\r\n }\r\n\r\n //Calcula variacion entre periodos\r\n function calcularVariacion(actual, anterior) {\r\n\r\n if (anterior == -1) {\r\n return 'ERROR';\r\n }\r\n\r\n if (anterior == 0) {\r\n return 0;\r\n }\r\n\r\n var calc = ((actual * 100) / anterior) - 100;\r\n\r\n return calc;\r\n }\r\n\r\n //Genera listado meses para DDL\r\n function generaListadoMeses() {\r\n\r\n var resultado = [\r\n { numeromes: 0, nombremes: 'Enero' },\r\n { numeromes: 1, nombremes: 'Febrero' },\r\n { numeromes: 2, nombremes: 'Marzo' },\r\n { numeromes: 3, nombremes: 'Abril' },\r\n { numeromes: 4, nombremes: 'Mayo' },\r\n { numeromes: 5, nombremes: 'Junio' },\r\n { numeromes: 6, nombremes: 'Julio' },\r\n { numeromes: 7, nombremes: 'Agosto' },\r\n { numeromes: 8, nombremes: 'Septiembre' },\r\n { numeromes: 9, nombremes: 'Octubre' },\r\n { numeromes: 10, nombremes: 'Noviembre' },\r\n { numeromes: 11, nombremes: 'Diciembre' }\r\n ];\r\n\r\n return resultado;\r\n }\r\n\r\n // cantidad: numero de periodos, periodo: month, day, etc.\r\n function generaListaPeriodos(tipoPeriodo, periodoInicial, cantidadPeriodos) {\r\n\r\n var operadorMoment = ''; //month || year\r\n\r\n switch (tipoPeriodo) {\r\n case 'Anual':\r\n operadorMoment = 'year';\r\n break;\r\n case 'Mensual':\r\n default:\r\n operadorMoment = 'month';\r\n break;\r\n }\r\n\r\n var listadoPeriodos = [];\r\n\r\n for (var i = 0; i < cantidadPeriodos; i++) {\r\n\r\n var obj = {};\r\n\r\n if (i == 0) { \r\n obj = { inicio: moment().utc().year(periodoInicial.year).month(periodoInicial.mes).startOf(operadorMoment), final: moment().utc().year(periodoInicial.year).month(periodoInicial.mes).endOf(operadorMoment), esPeriodoActual: true }\r\n listadoPeriodos.push(obj);\r\n }\r\n else { \r\n obj = { inicio: moment().utc().year(periodoInicial.year).month(periodoInicial.mes).subtract(i, operadorMoment).startOf(operadorMoment), final: moment().utc().year(periodoInicial.year).month(periodoInicial.mes).subtract(i, operadorMoment).endOf(operadorMoment), esPeriodoActual: false }\r\n listadoPeriodos.push(obj);\r\n }\r\n }\r\n\r\n return listadoPeriodos;\r\n }\r\n\r\n //Genera variaciones porcentuales respecto a PERIODO ACTUAL con todos los periodos ANTERIORES\r\n function generaVariacionesPeriodos(dataCicloVida) {\r\n\r\n var periodoActual = $linq.Enumerable().From(dataCicloVida)\r\n .FirstOrDefault(-1, \"$.esPeriodoActual==true\");\r\n\r\n var actualPromedioDiasCont = periodoActual.resumenContabilizados.promedioDias;\r\n var actualPromedioDiasNoCont = periodoActual.resumenNoContabilizados.promedioDias;\r\n\r\n var periodosNoActuales = $linq.Enumerable().From(dataCicloVida)\r\n .Where(\"$.esPeriodoActual==false\").ToArray();\r\n\r\n\r\n\r\n var noContabilizados = $linq.Enumerable().From(periodosNoActuales)\r\n .Select(function (x) {\r\n return calcularVariacion(actualPromedioDiasNoCont, x.resumenNoContabilizados.promedioDias);\r\n }).ToArray();\r\n\r\n var contabilizados = $linq.Enumerable().From(periodosNoActuales)\r\n .Select(function (x) {\r\n return calcularVariacion(actualPromedioDiasCont, x.resumenContabilizados.promedioDias);\r\n }).ToArray();\r\n\r\n vm.variacionesPeriodosAnteriores.contabilizados = contabilizados;\r\n vm.variacionesPeriodosAnteriores.noContabilizados = noContabilizados;\r\n }\r\n\r\n\r\n //Obtiene los analistas para select box\r\n function getAnalistasDocumentos() {\r\n portalSmartFactory.analistasDocumentos().then(function (response) {\r\n vm.analistasDocumentos = response;\r\n })\r\n }\r\n\r\n\r\n\r\n //Obtiene informacion para reporte ciclo de vida\r\n function getCicloVida() {\r\n\r\n var incluirTops = vm.query.cargarListados;\r\n\r\n if (incluirTops == 'undefined' || incluirTops.length == 0 || angular.isUndefined(incluirTops)) {\r\n incluirTops = false;\r\n\r\n }\r\n\r\n var periodoInicial = {\r\n year: vm.query.year,\r\n mes: vm.query.mes.numeromes\r\n }\r\n\r\n var queryAPI = {\r\n listaPeriodos: generaListaPeriodos(vm.query.tipoPeriodo, periodoInicial, vm.query.cantidadPeriodos),\r\n analista: vm.query.analista,\r\n incluirTops: vm.query.cargarListados\r\n };\r\n\r\n portalSmartFactory.cicloVida(queryAPI).then(function (response) {\r\n vm.muestraStandby = false;\r\n vm.respuestaCiclo = response;\r\n setResumenTodosPeriodos(response);\r\n generaVariacionesPeriodos(response);\r\n });\r\n }\r\n\r\n\r\n //Obtiene anhos en los documentos (distinct)\r\n function getYears() {\r\n portalSmartFactory.yearsDocumentos().then(function (response) {\r\n vm.yearsDocumentos = response;\r\n vm.cicloVidaYear = response[0];\r\n });\r\n }\r\n\r\n //Retorna instancia de momentjs\r\n function momento(fecha) {\r\n return moment(fecha);\r\n }\r\n\r\n //Calcula resumenes para TODOS los periodos\r\n function setResumenTodosPeriodos(data) {\r\n\r\n var totalDocsPeriodos = $linq.Enumerable().From(data)\r\n .Sum(\"$.cantidadDocumentosTotal\");\r\n\r\n var sumaContabilizados = $linq.Enumerable().From(data)\r\n .Sum(\"$.resumenContabilizados.cantidadDocumentos\");\r\n\r\n var sumaNoContabilizados = $linq.Enumerable().From(data)\r\n .Sum(\"$.resumenNoContabilizados.cantidadDocumentos\");\r\n\r\n var promedioDiasContablizadosPeriodos = $linq.Enumerable().From(data)\r\n .Average(\"$.resumenContabilizados.promedioDias\"); //resumenContabilizados.promedioDias\r\n\r\n var promedioDiasNoContablizadosPeriodos = $linq.Enumerable().From(data)\r\n .Average(\"$.resumenNoContabilizados.promedioDias\"); //resumenContabilizados.promedioDias\r\n\r\n vm.resumenTodosCiclos.totalDocsPeriodo = totalDocsPeriodos;\r\n\r\n vm.resumenTodosCiclos.sumaContabilizados = sumaContabilizados;\r\n vm.resumenTodosCiclos.promedioDiasContablizadosPeriodos = promedioDiasContablizadosPeriodos;\r\n vm.resumenTodosCiclos.porcentajeContabilizados = calcularPorcentaje(sumaContabilizados, totalDocsPeriodos);\r\n\r\n vm.resumenTodosCiclos.sumaNoContabilizados = sumaNoContabilizados;\r\n vm.resumenTodosCiclos.promedioDiasNoContablizadosPeriodos = promedioDiasNoContablizadosPeriodos;\r\n vm.resumenTodosCiclos.porcentajeNoContabilizados = calcularPorcentaje(sumaNoContabilizados, totalDocsPeriodos);\r\n }\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('cicloVidaGridComponent', {\r\n bindings: {\r\n tableData: '=',\r\n campoPromedio: '@' \r\n },\r\n template: '
',\r\n controller: CicloVidaGridComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function CicloVidaGridComponentController($uibModal) {\r\n var vm = this; \r\n\r\n vm.openDetalleModal = openDetalleModal; //abre modal con detalle de documento \r\n\r\n\r\n vm.gridOptions = { \r\n flatEntityAccess: true, \r\n enableSorting: false,\r\n columnDefs: [\r\n { field: 'analista', cellTemplate: '
{{COL_FIELD}}
' },\r\n { field: 'proveedor', cellTemplate: '
{{COL_FIELD}}
' },\r\n { name: 'promedioDias', field: vm.campoPromedio, cellTemplate: '
{{COL_FIELD}}
' },\r\n {\r\n //campoPromedio: diferenciaDiasContabilizacion, diferenciaDiasRecepcion & diferenciaDiasPago\r\n name: 'folio',\r\n cellTemplate: '{{row.entity.folio}}'\r\n }\r\n ],\r\n data: vm.tableData\r\n };\r\n \r\n //activate(); \r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n //function activate() {\r\n // gridParams();\r\n //}\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\r\n //function gridParams() {\r\n // vm.gridOptions.data = vm.tableData;\r\n //}\r\n\r\n function openDetalleModal(documentoID, promedio) {\r\n $uibModal.open({\r\n animation: true,\r\n templateUrl: 'app/reportes/ciclovida/detalle-documento.modal.html',\r\n controller: DetalleModalController,\r\n controllerAs: 'vm',\r\n size: 'lg',\r\n windowTopClass: 'modal-fix',\r\n resolve: {\r\n documentoID: function () {\r\n return documentoID;\r\n },\r\n promedio: function () {\r\n return promedio;\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n /** @ngInject */\r\n function DetalleModalController($uibModalInstance, documentoID, promedio) {\r\n var vm = this;\r\n\r\n vm.documentoID = documentoID;\r\n vm.promedio = promedio;\r\n\r\n vm.closeModal = function () {\r\n $uibModalInstance.close();\r\n }\r\n }\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('barraEstadoReportesComponent', {\r\n templateUrl: 'app/reportes/barraestado/barra-estado-main.html',\r\n controller: BarraEstadoComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function BarraEstadoComponentController(portalSmartFactory, SERVICE_BASE, $interval, $log) {\r\n var vm = this;\r\n\r\n vm.barraEstadoInfo = {};\r\n vm.baseUrl = SERVICE_BASE;\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate(); \r\n\r\n $interval(activate, 150000);\r\n\r\n function activate() {\r\n getBarraEstadoInfo();\r\n $log.log('BARRAESTADO: Actualizado/Activate');\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n //Informacion Barra de Estado General\r\n function getBarraEstadoInfo() {\r\n portalSmartFactory.infoBarraEstado().then(function (response) {\r\n vm.barraEstadoInfo = response;\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('analistasPerformanceComponent', {\r\n templateUrl: 'app/reportes/analistasperformance/analistas-performance.html',\r\n controller: AnalistasPerformanceComponentController\r\n });\r\n\r\n\r\n /** @ngInject */\r\n function AnalistasPerformanceComponentController(portalSmartFactory, moment, $linq, $filter) {\r\n var vm = this;\r\n\r\n\r\n vm.analistasDocumentos = [];\r\n vm.getCicloVida = getCicloVida;\r\n vm.grafico = {};\r\n vm.muestraStandby = true;\r\n vm.query = {};\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n activate();\r\n\r\n function activate() {\r\n getAnalistasDocumentos();\r\n getDatosSet();\r\n getGraficoOpciones();\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n function formateaFecha(fecha) {\r\n var resultado = moment(fecha).utc().format('MMMM YYYY');\r\n return resultado;\r\n }\r\n\r\n //Genera array con KPIs\r\n function generaArrayKPI(cantidadPeriodos, numeroKPI) {\r\n\r\n var array = [];\r\n\r\n for (var i = 0; i < cantidadPeriodos; i++) {\r\n array.push(numeroKPI);\r\n }\r\n\r\n return array;\r\n }\r\n\r\n //Obtiene listadoPeriodos para una cantidad de periodos definida, por lo general 12 meses (12,'month')\r\n function generaPeriodos(cantidadPeriodos, tipoPeriodo) {\r\n\r\n var listadoPeriodos = [];\r\n\r\n var obj = {};\r\n\r\n for (var i = 0; i < cantidadPeriodos; i++) {\r\n if (i == 0) {\r\n obj = { inicio: moment().utc().startOf(tipoPeriodo), final: moment().utc().endOf(tipoPeriodo), esPeriodoActual: true }\r\n listadoPeriodos.push(obj);\r\n }\r\n else {\r\n obj = { inicio: moment().utc().subtract(i, tipoPeriodo).startOf(tipoPeriodo), final: moment().utc().subtract(i, tipoPeriodo).endOf(tipoPeriodo), esPeriodoActual: false }\r\n listadoPeriodos.push(obj);\r\n }\r\n }\r\n\r\n return listadoPeriodos;\r\n }\r\n\r\n //Obtiene los analistas para select box\r\n function getAnalistasDocumentos() {\r\n portalSmartFactory.analistasDocumentos().then(function (response) {\r\n vm.analistasDocumentos = response;\r\n })\r\n }\r\n\r\n //Obtiene informacion para reporte ciclo de vida\r\n function getCicloVida() {\r\n\r\n var cantidadPeriodos = 12;\r\n var valorKPI = 8;\r\n\r\n var queryAPI = {\r\n listaPeriodos: generaPeriodos(cantidadPeriodos, 'month'),\r\n analista: vm.query.analista,\r\n incluirTops: false //no obtiene listados de documentos, acelera el proceso de carga y de $watch\r\n };\r\n\r\n portalSmartFactory.cicloVida(queryAPI).then(function (response) {\r\n\r\n vm.muestraStandby = false;\r\n\r\n var kpi = generaArrayKPI(cantidadPeriodos, valorKPI);\r\n\r\n var etiquetas = $linq.Enumerable().From(response) //etiquetas corresponden a los periodos, en este caso MESES\r\n .Select(function (x) {\r\n return formateaFecha(x.inicioPeriodo);\r\n }).ToArray();\r\n\r\n var contabilizadosDias = $linq.Enumerable().From(response)\r\n .Select(function (x) {\r\n return $filter('number')(x.resumenContabilizados.promedioDias, 2);\r\n }).ToArray();\r\n\r\n var noContabilizadosDias = $linq.Enumerable().From(response)\r\n .Select(function (x) {\r\n return $filter('number')(x.resumenNoContabilizados.promedioDias, 2);\r\n }).ToArray();\r\n\r\n var cantidadDocumentos = $linq.Enumerable().From(response)\r\n .Select(function (x) {\r\n return x.cantidadDocumentosTotal;\r\n }).ToArray();\r\n\r\n\r\n vm.grafico.etiquetas = etiquetas;\r\n\r\n\r\n vm.grafico.data = [];\r\n\r\n vm.grafico.data.push(kpi);\r\n vm.grafico.data.push(cantidadDocumentos);\r\n vm.grafico.data.push(noContabilizadosDias);\r\n vm.grafico.data.push(contabilizadosDias);\r\n\r\n });\r\n }\r\n\r\n\r\n\r\n //Configuraciones independientes para las SERIES del grafico\r\n function getDatosSet() {\r\n\r\n var datosSet = [\r\n {\r\n label: \"KPI\",\r\n type: 'line',\r\n fill: false,\r\n lineTension: 0,\r\n borderColor: '#721104', //burdeo\r\n pointBorderColor: '#721104',\r\n pointBackgroundColor: '#721104',\r\n pointRadius: 3,\r\n pointHoverRadius: 5,\r\n borderWidth: 2,\r\n yAxisID: 'A'\r\n },\r\n {\r\n label: \"Cantidad Documentos\",\r\n type: 'line',\r\n fill: false,\r\n lineTension: 0,\r\n borderColor: '#004aa0', //azul\r\n pointBorderColor: '#0c2e56', //azul oscuro\r\n pointBackgroundColor: '#3b7cc6', //azul claro\r\n pointRadius: 6,\r\n pointHoverRadius: 5,\r\n borderWidth: 2,\r\n yAxisID: 'B'\r\n },\r\n {\r\n label: 'No Contabilizados',\r\n type: 'bar',\r\n backgroundColor: 'rgba(252,144,0, .8)',\r\n borderColor: 'rgba(252,144,0, 1)',\r\n borderWidth: 0,\r\n yAxisID: 'A'\r\n },\r\n {\r\n label: 'Contabilizados',\r\n type: 'bar',\r\n backgroundColor: 'rgba(0,94,87, .8)',\r\n borderColor: 'rgba(0,94,87,1)',\r\n borderWidth: 0,\r\n yAxisID: 'A'\r\n }\r\n\r\n ];\r\n\r\n vm.grafico.set = datosSet;\r\n }\r\n\r\n //Configuraciones para el grafico\r\n function getGraficoOpciones() {\r\n var opciones = {\r\n title: {\r\n display: true,\r\n text: 'Performance Promedio Días Analistas - 12 Meses',\r\n fontSize: 35,\r\n fontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontStyle: 'lighter',\r\n padding: 20\r\n },\r\n tooltips: {\r\n titleFontSize: 19,\r\n titleSpacing: 4,\r\n bodyFontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n bodyFontSize: 16,\r\n bodySpacing: 10,\r\n xPadding: 10,\r\n yPadding: 10,\r\n callbacks: {\r\n label: function (tooltipItems, data) {\r\n var unidad = '';\r\n\r\n if (tooltipItems.datasetIndex === 0 || tooltipItems.datasetIndex === 2 || tooltipItems.datasetIndex === 3) {\r\n unidad = 'días';\r\n }\r\n \r\n return data.datasets[tooltipItems.datasetIndex].label + ': ' + tooltipItems.yLabel + ' ' + unidad;\r\n }\r\n }\r\n },\r\n legend: {\r\n display: true,\r\n position: 'top',\r\n labels: {\r\n fontFamily: \"'Dosis','Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontSize: 19\r\n }\r\n },\r\n scales: {\r\n yAxes: [\r\n {\r\n id: 'A',\r\n type: 'linear',\r\n position: 'left'\r\n },\r\n {\r\n id: 'B',\r\n type: 'linear',\r\n position: 'right'\r\n }\r\n ]\r\n }\r\n };\r\n\r\n vm.grafico.opciones = opciones;\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n})();\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .directive('navbarMetso', navbarMetso);\r\n\r\n /** @ngInject */\r\n function navbarMetso() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/components/navbar/navbar.html',\r\n scope: {\r\n creationDate: '='\r\n },\r\n controller: NavbarController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n return directive;\r\n\r\n /** @ngInject */\r\n function NavbarController(moment, authService, localStorageService, $location, $state, $scope, $rootScope) {\r\n var vm = this;\r\n\r\n vm.authentication = authService.authentication;\r\n\r\n\r\n vm.isAuthenticated = function () {\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n vm.logOut = function () {\r\n authService.logOut();\r\n emitLogOut();\r\n $state.go('home');\r\n }\r\n\r\n function emitLogOut(){\r\n $rootScope.$emit('eventEmitedLogOut', false);\r\n }\r\n\r\n }\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .component('metsoJumbotronComponent', component());\r\n\r\n /* @ngInject */\r\n function component() {\r\n var component = {\r\n templateUrl: 'app/components/jumbotron-v2/metsojumbo.html',\r\n controller: MetsoJumbotronComponentController\r\n };\r\n\r\n return component;\r\n }\r\n\r\n\r\n /** @ngInject */\r\n function MetsoJumbotronComponentController($scope, $rootScope, $log, localStorageService) {\r\n\r\n var vm = this;\r\n\r\n vm.isAuthenticated = false;\r\n\r\n //$rootScope.$on('eventEmitedLogOut', function(event, data) {\r\n // $log.log(event.name + ' => received by Jumbotron with data => ' + data);\r\n // vm.isAuthenticated = false;\r\n //});\r\n\r\n var emitedLogOut = $rootScope.$on('eventEmitedLogOut', function (event, data) {\r\n $log.log(event.name + ' => received by Jumbotron with data => ' + data);\r\n vm.isAuthenticated = false;\r\n });\r\n\r\n $rootScope.$on('$destroy', emitedLogOut);\r\n\r\n //--------------------------------------------------------------------------- //\r\n activate();\r\n //--------------------------------------------------------------------------- //\r\n\r\n function activate(){\r\n vm.isAuthenticated = checkIsAuth(); \r\n }\r\n\r\n //--------------------------------------------------------------------------- //\r\n\r\n function checkIsAuth(){\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n // -------------------------------------------------------------------------- //\r\n\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n\r\n\t'use strict';\r\n\r\n\tangular\r\n .module('portalProveedores')\r\n .directive('jumbotronPortal', jumbotronPortal);\r\n\r\n\t/** @ngInject */\r\n\t/** @ngInject */\r\n\tfunction jumbotronPortal() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/jumbotron/jumbotron.html',\r\n\t\t\tscope: {\r\n\t\t\t\tencabezado: '=',\r\n\t\t\t\ttexto: '=',\r\n\t\t\t\tconDocumentos: '='\r\n\t\t\t},\r\n\t\t\tcontroller: JumbotronPortalController,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\tbindToController: true\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\t}\r\n\r\n\t/** @ngInject */\r\n\tfunction JumbotronPortalController() {\t\t\r\n\t}\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .directive('footerMetso', footerMetso);\r\n\r\n /** @ngInject */\r\n function footerMetso() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/components/footer/footer.html',\r\n scope: {\r\n creationDate: '='\r\n },\r\n controller: FooterController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n return directive;\r\n }\r\n\r\n /** @ngInject */\r\n function FooterController(moment, $rootScope, $uibModal, portalIntroFactory, portalDataFactory, toastr, $scope, $log) {\r\n\r\n var vm = this;\r\n\r\n\r\n vm.openFaqModal = function () {\r\n $uibModal.open({\r\n animation: true,\r\n templateUrl: 'app/faq/faq-modal.html',\r\n controller: FaqModalController,\r\n controllerAs: 'vm',\r\n size: 'lg'\r\n });\r\n }\r\n\r\n vm.nombreEstado = '';\r\n vm.introOptions = [];\r\n\r\n\r\n\r\n vm.formularioContacto = {}; \r\n\r\n vm.sendFormularioContacto = function () {\r\n\r\n function formSuccess(response) {\r\n var data = response.data;\r\n toastr.success('Pronto nos comunicaremos con ud.', 'MENSAJE ENVIADO');\r\n $log.log('FOOTER: Mensaje enviado');\r\n $log.log(data);\r\n\r\n vm.formularioContacto = {};\r\n $scope.footercontacto.$setUntouched();\r\n }\r\n\r\n vm.formularioContacto.responsableID = vm.responsableSeleccionado.responsableID;\r\n vm.formularioContacto.razonMensaje = vm.responsableSeleccionado.descripcion;\r\n\r\n portalDataFactory.postFormularioContacto(vm.formularioContacto).then(formSuccess);\r\n\r\n }\r\n\r\n vm.responsables = [];\r\n\r\n vm.getAsuntoDropdown = function () {\r\n\r\n portalDataFactory.getResponsablesFormularioContacto()\r\n .then(function (response) {\r\n vm.responsables = response;\r\n });\r\n }\r\n\r\n\r\n //Recibe informaci�n del nombre del estado para parametrizar \r\n vm.on = $rootScope.$on('intro', function (event, val) {\r\n vm.nombreEstado = val;\r\n vm.introOptions = portalIntroFactory.getIntroJSOptions(vm.nombreEstado);\r\n });\r\n\r\n /** @ngInject */\r\n function FaqModalController($uibModalInstance) {\r\n var vm = this;\r\n\r\n vm.closeModal = function () {\r\n $uibModalInstance.close();\r\n }\r\n }\r\n\r\n vm.getAsuntoDropdown();\r\n\r\n }\r\n\r\n})();\r\n\n(function () {\r\n\r\n\t'use strict';\r\n\r\n\tangular\r\n .module('portalProveedores')\r\n .directive('documentosPortal', documentosPortal);\r\n\r\n\t/** @ngInject */\t\r\n\tfunction documentosPortal() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/documentos/documentos.html',\r\n\t\t\tscope: {\r\n\t\t\t\ttipo: '=',\r\n\t\t\t\tconBullet: '='\r\n\t\t\t},\r\n\t\t\tcontroller: DocumentosPortalController,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\tbindToController: true\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\t}\r\n\r\n\t/** @ngInject */\r\n\tfunction DocumentosPortalController(portalDataFactory, $log) {\r\n\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.documentos = [];\r\n\r\n\t\tvm.getDocumentos = (function () {\r\n\t\t\tportalDataFactory.getDocumentos()\r\n .then(function (response) {\r\n vm.documentos = response;\r\n }, function (error) {\r\n $log.warn('DOCS Directiva. No se cargaron documentos. ERROR.');\r\n $log.warn(error);\r\n });\r\n\t\t})();\r\n\r\n\t}\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('WelcomeController', WelcomeController);\r\n\r\n /** @ngInject */\r\n function WelcomeController(portalDataFactory, $log, localStorageService, $window, $rootScope, portalIntroFactory, $state, moment) {\r\n var vm = this;\r\n\r\n //Datos para intro TUTORIALES\r\n vm.introWelcomeOptions = {};\r\n\r\n vm.cargaIntroOptions = (function () {\r\n vm.introWelcomeOptions = portalIntroFactory.getIntroJSOptions('home');\r\n })();\r\n \r\n vm.docs = [];\r\n\r\n vm.userData = {\r\n razonSocial: '',\r\n rutProveedor: '',\r\n email: '',\r\n nombreEncargado: '',\r\n cargoEncargado: ''\r\n };\r\n\r\n vm.hoy = moment(); \r\n\r\n vm.mostrarFormModificacion = false;\r\n\r\n vm.getDocumentos = function () {\r\n portalDataFactory.getDocumentos()\r\n .then(function (response) {\r\n vm.docs = response;\r\n }, function (error) {\r\n $log.warn('WELCOME. No se cargaron documentos. ERROR.');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n vm.isAuthenticated = function () {\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n vm.getUserData = function () {\r\n\r\n if (vm.isAuthenticated()) {\r\n portalDataFactory.getUserTokenInfo()\r\n .then(function (response) {\r\n vm.userData = response;\r\n }, function (error) {\r\n $log.warn('No se pudo obtener info de usuario.');\r\n $log.warn(error);\r\n });\r\n }\r\n }\r\n\r\n vm.sendUserData = function () {\r\n portalDataFactory.postUserTokenInfo(vm.userData)\r\n .then(function (response) {\r\n vm.userData = response.data;\r\n vm.getUserData();\r\n vm.mostrarFormModificacion = false;\r\n }, function (error) {\r\n $log.warn('No se pudo postear nueva info de usuario');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n // notifica estado a FOOTER para parametrizar Tutorial\r\n vm.notificaEstado = (function () {\r\n $rootScope.$emit('intro', $state.current.name);\r\n })();\r\n\r\n\r\n //RUN...\r\n vm.getDocumentos();\r\n vm.getUserData();\r\n //vm.notificaEstado();\r\n\r\n }\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('UserDataController', UserDataController);\r\n\r\n /** @ngInject */\r\n function UserDataController($log, localStorageService, portalDataFactory) {\r\n var vm = this;\r\n\r\n vm.userData = {\r\n razonSocial: '',\r\n rutProveedor: '',\r\n email: '',\r\n nombreEncargado: '',\r\n cargoEncargado: ''\r\n };\r\n\r\n vm.getUserData = function () {\r\n portalDataFactory.getUserTokenInfo()\r\n .then(function (response) {\r\n vm.userData = response;\r\n }, function (error) {\r\n $log.warn('No se pudo obtener info de usuario.');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n vm.sendUserData = function () {\r\n portalDataFactory.postUserTokenInfo(vm.userData)\r\n .then(function (response) {\r\n vm.userData = response.data;\r\n vm.getUserData();\r\n }, function (error) {\r\n $log.warn('No se pudo postear nueva info de usuario');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n vm.getUserData();\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('TestController', TestController);\r\n\r\n /** @ngInject */\r\n function TestController() {\r\n //var vm = this;\r\n\r\n //vm.infoUsuario = {};\r\n //vm.token = {};\r\n //vm.parametro = $stateParams.razon;\r\n\r\n //vm.getUserInfo = function () {\r\n // portalDataFactory.testCheckUsuario()\r\n // .then(function (response) {\r\n // vm.infoUsuario = response;\r\n // }, function (error) {\r\n // $log.warn('TEST. No se cargo info usuario por token. ERROR.');\r\n // $log.warn(error);\r\n // });\r\n //}\r\n\r\n //vm.getVista = function () {\r\n // var param = vm.variableTest;\r\n // $state.go('ingresar', { razon: param })\r\n //}\r\n\r\n //vm.getTokenLocal = function () {\r\n // var authData = localStorageService.get('authorizationData');\r\n // if (authData) {\r\n // vm.token = authData;\r\n // }\r\n // else {\r\n // vm.token = { nohay: 'sin datos'};\r\n // }\r\n //}\r\n\r\n //vm.introOptions = portalIntroFactory.getIntroJSOptions('test');\r\n //vm.introCompleted = function () {\r\n // $state.go('home');\r\n //}\r\n\r\n //// notifica estado a FOOTER para parametrizar Tutorial\r\n //vm.notificaEstado = (function () {\r\n // $rootScope.$emit('intro', $state.current.name);\r\n //})();\r\n\r\n //vm.getTokenLocal();\r\n \r\n }\r\n\r\n\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('SignupController', SignupController);\r\n\r\n /** @ngInject */\r\n function SignupController($location, $timeout, authService, portalDataFactory, $log, $state, $rootScope) {\r\n var vm = this;\r\n\r\n vm.savedSuccessfully = false;\r\n vm.mensajesRegistro = [];\r\n\r\n vm.mensajeUsuario = {\r\n esProveedor: false,\r\n mensaje: \"\" \r\n };\r\n\r\n vm.registration = {\r\n userName: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n email: \"\",\r\n razonSocial: \"\",\r\n nombreEncargado: \"\",\r\n cargoEncargado: \"\"\r\n };\r\n\r\n vm.signUp = function () {\r\n authService.saveRegistration(vm.registration).then(function (response) {\r\n $log.log('Usuario registrado exitosamente');\r\n $log.log(response);\r\n vm.savedSuccessfully = true;\r\n var mensaje = \"Usuario registrado correctamente. Redirigiendo en 2 segundos.\";\r\n vm.mensajesRegistro.push(mensaje);\r\n startTimer();\r\n\r\n },\r\n function (response) {\r\n var errors = [];\r\n for (var key in response.data.modelState) {\r\n for (var i = 0; i < response.data.modelState[key].length; i++) {\r\n errors.push(response.data.modelState[key][i]);\r\n }\r\n }\r\n $log.log(response);\r\n vm.mensajesRegistro = errors;\r\n //vm.message = \"ERROR. \" + errors.join(' ');\r\n });\r\n };\r\n\r\n\r\n vm.checkUser = function () {\r\n portalDataFactory.checkUser(vm.registration.userName)\r\n .then(function (response) {\r\n vm.mensajeUsuario.esProveedor = response;\r\n if (response === false) {\r\n vm.mensajeUsuario.mensaje = 'Usted no tiene registros como proveedor';\r\n } \r\n }, function (error) {\r\n $log.log('Usuario no pudo ser verificado como proveedor (CheckUser)');\r\n $log.log(error);\r\n vm.mensajeUsuario.mensaje = 'Usted no tiene registros como proveedor'; \r\n });\r\n }\r\n\r\n var startTimer = function () {\r\n var timer = $timeout(function () {\r\n $timeout.cancel(timer);\r\n $location.path('/ingresar');\r\n }, 2000);\r\n }\r\n\r\n vm.getDocumentos = function () {\r\n portalDataFactory.getDocumentos()\r\n .then(function (response) {\r\n vm.docs = response;\r\n }, function (error) {\r\n $log.warn('WELCOME. No se cargaron documentos. ERROR.');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n // notifica estado a FOOTER para parametrizar Tutorial\r\n vm.notificaEstado = (function () {\r\n $rootScope.$emit('intro', $state.current.name);\r\n })();\r\n\r\n vm.getDocumentos();\r\n authService.logOut();\r\n\r\n\r\n\r\n }\r\n\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .directive('pwCheck', pwCheck);\r\n\r\n\r\n /** @ngInject */\r\n function pwCheck() {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, ctrl) {\r\n var firstPassword = '#' + attrs.pwCheck;\r\n elem.add(firstPassword).on('keyup', function () {\r\n scope.$apply(function () { \r\n var v = elem.val() === angular.element(firstPassword).val();\r\n ctrl.$setValidity('pwmatch', v);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('ShowcaseController', ShowcaseController);\r\n\r\n /** @ngInject */\r\n function ShowcaseController() {\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('ResetpasswordController', ResetpasswordController);\r\n\r\n /** @ngInject */\r\n function ResetpasswordController($location, $timeout, authService, portalDataFactory, $log, $state, toastr, $stateParams) {\r\n\r\n var vm = this;\r\n\r\n\r\n vm.confirmPassword = \"\";\r\n vm.mensajesRegistro = [];\r\n vm.resetPassword = resetPassword;\r\n vm.resetPasswordViewModel = {\r\n userId: $stateParams.userId,\r\n password: \"\",\r\n token: $stateParams.token\r\n };\r\n vm.savedSuccessfully = false;\r\n \r\n\r\n /* ------------------------------------------------------------------------------------------------------------------------------------------------------- */\r\n\r\n\r\n function resetPassword () {\r\n\r\n portalDataFactory.resetPassword(vm.resetPasswordViewModel).then(successReset, failReset);\r\n\r\n function successReset (response) {\r\n toastr.success('Su contraseña ha sido reestablecida con éxito. Inicie sesión con su nueva contraseña', 'MUY BIEN', { timeOut: 5000 })\r\n vm.savedSuccessfully = true;\r\n var mensaje = \"Usuario reestablecido correctamente. Redirigiendo en 2 segundos.\";\r\n vm.mensajesRegistro = [];\r\n vm.mensajesRegistro.push(mensaje);\r\n //startTimer(); \r\n $log.log('Exito reestableciendo password. ' + response);\r\n $state.go('ingresar');\r\n }\r\n\r\n function failReset (response) {\r\n var errors = [];\r\n for (var key in response.data.modelState) {\r\n for (var i = 0; i < response.data.modelState[key].length; i++) {\r\n errors.push(response.data.modelState[key][i]);\r\n }\r\n }\r\n $log.log(response);\r\n vm.mensajesRegistro = errors;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('RecuperarpasswordController', RecuperarpasswordController);\r\n\r\n /** @ngInject */\r\n function RecuperarpasswordController($location, $timeout, authService, portalDataFactory, $log, $state, toastr, $rootScope) {\r\n var vm = this;\r\n\r\n vm.savedSuccessfully = false;\r\n vm.mensajesRegistro = [];\r\n\r\n vm.mensajeUsuario = {\r\n esProveedor: false,\r\n mensaje: \"\"\r\n };\r\n\r\n vm.registration = {\r\n userName: \"\" \r\n };\r\n\r\n vm.infoUsuario = {\r\n rutProveedor: \"\",\r\n baseUrlAPI: \"\"\r\n };\r\n\r\n vm.datosUsuario = {\r\n nombreUsuario: \"\",\r\n emailUsuario: \"\",\r\n razonSocial: \"\",\r\n baseUrlAPI: $state.href('resetPassword', { userId: '{0}', token: '{1}' }, { absolute: true })\r\n };\r\n \r\n\r\n vm.forgotPassword = function () { \r\n portalDataFactory.forgotPassword(vm.datosUsuario).then(function (response) {\r\n $log.log('Correo enviado exitosamente');\r\n\r\n if (response) {\r\n toastr.success('Por favor revise su correo electrónico y siga los pasos descritos para continuar', 'CORREO ENVIADO');\r\n startTimer();\r\n }\r\n })\r\n };\r\n\r\n\r\n vm.checkUser = function () {\r\n portalDataFactory.checkRegisteredUser(vm.registration.userName)\r\n .then(function (response) { \r\n if (response == null) {\r\n vm.mensajeUsuario.esProveedor = false;\r\n vm.mensajeUsuario.mensaje = 'Usted no está registrado como proveedor';\r\n }\r\n else {\r\n vm.mensajeUsuario.esProveedor = true;\r\n vm.mensajeUsuario.mensaje = 'Usted está registrado como proveedor';\r\n vm.datosUsuario.nombreUsuario = response.nombreUsuario;\r\n vm.datosUsuario.emailUsuario = response.emailUsuario;\r\n vm.datosUsuario.razonSocial = response.razonSocial;\r\n }\r\n\r\n }, function (error) {\r\n $log.log('Usuario no pudo ser verificado como proveedor registrado (CheckRegisteredUser)');\r\n $log.log(error);\r\n vm.mensajeUsuario.mensaje = 'No fue posible vreificar si es proveedor, intene de nuevo';\r\n });\r\n }\r\n\r\n var startTimer = function () {\r\n var timer = $timeout(function () {\r\n $timeout.cancel(timer); \r\n $state.go('home');\r\n }, 2000);\r\n }\r\n\r\n vm.getDocumentos = function () {\r\n portalDataFactory.getDocumentos()\r\n .then(function (response) {\r\n vm.docs = response;\r\n }, function (error) {\r\n $log.warn('RECUPERAR PASSWORD. No se cargaron documentos. ERROR.');\r\n $log.warn(error);\r\n });\r\n }\r\n\r\n vm.getDocumentos();\r\n authService.logOut();\r\n\r\n // notifica estado a FOOTER para parametrizar Tutorial\r\n vm.notificaEstado = (function () {\r\n $rootScope.$emit('intro', $state.current.name);\r\n })();\r\n }\r\n\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n //TODO: OJO con las inyecciones de esta función. Salieron todas de sendTicket()\r\n\r\n angular\r\n .module('portalProveedores')\r\n .directive('sendTicket', sendTicket);\r\n\r\n /** @ngInject */\r\n function sendTicket() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/sendticket/sendticket.html',\r\n scope: {\r\n rutProveedor: '=',\r\n nombreProveedor: '=',\r\n numeroFactura: '=',\r\n facturaEstado: '='\r\n },\r\n controller: SendTicketController,\r\n controllerAs: 'send',\r\n bindToController: true\r\n };\r\n\r\n return directive;\r\n\r\n /** @ngInject */\r\n function SendTicketController(portalDataFactory, toastr, $log, $scope) {\r\n var vm = this; \r\n \r\n //Mail contacto \r\n vm.infoTicket = {};\r\n \r\n vm.postTicket = function () { \r\n //Desde $scope directiva (isolated)\r\n vm.infoTicket.RutProveedor = vm.rutProveedor;\r\n vm.infoTicket.NombreProveedor = vm.nombreProveedor;\r\n vm.infoTicket.NumeroFactura = vm.numeroFactura;\r\n vm.infoTicket.FacturaEstado = vm.facturaEstado; \r\n\r\n //Log en consola el objeto para debuggear\r\n $log.log('SendTicket: Enviando objeto ->' + vm.infoTicket);\r\n\r\n portalDataFactory.postMailContacto(vm.infoTicket)\r\n .then(function (response) {\r\n toastr.success('Su mensaje ha sido enviado exitosamente');\r\n $log.log('Envio de ticket a POST de API exitoso');\r\n $log.log(response.data);\r\n vm.infoTicket = {}; \r\n $scope.ticketForm.$setUntouched();\r\n\r\n }, function (error) {\r\n $log.log('Envio de ticket a POST de API exitoso');\r\n $log.log(error);\r\n });\r\n }\r\n\r\n vm.showToastr = showToastr;\r\n\r\n function showToastr() {\r\n toastr.success('Su mensaje ha sido enviado exitosamente');\r\n vm.classAnimation = '';\r\n }\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('portalProveedores')\r\n .factory('reportesConfigFactory', reportesConfigFactory);\r\n\r\n /** @ngInject */\r\n function reportesConfigFactory(moment) {\r\n\r\n var vm = this;\r\n \r\n vm.dataFactory = {\r\n getDateRangePickerDefaults: getDateRangePickerDefaults,\r\n getChartJSOptions: getChartJSOptions\r\n }\r\n\r\n return vm.dataFactory;\r\n\r\n ///////////////////////////////////////////////////\r\n function getDateRangePickerDefaults(apply) { \r\n\r\n var autoAplica = apply;\r\n\r\n var config = {\r\n locale: {\r\n format: 'DD/MM/YYYY',\r\n applyLabel: 'Aplicar',\r\n cancelLabel: 'Cancelar',\r\n customRangeLabel: 'Especificar Rango'\r\n },\r\n autoApply: autoAplica,\r\n ranges: {\r\n 'Mes Actual': [moment().startOf('month'), moment().endOf('month')],\r\n 'Últimos 30 Días': [moment().subtract(29, 'days'), moment()],\r\n 'Mes Anterior': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\r\n 'Año Actual': [moment().startOf('year'), moment().endOf('year')],\r\n 'Últimos 12 Meses': [moment().subtract(12, 'month'), moment()],\r\n 'Año Anterior': [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')]\r\n }\r\n }\r\n\r\n return config;\r\n } \r\n\r\n ////////////////////////////////////////////////\r\n function getChartJSOptions(chartTitle) {\r\n\r\n var options = {\r\n title: {\r\n display: false,\r\n text: chartTitle,\r\n fontSize: 35,\r\n fontFamily: \"'Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontStyle: 'lighter',\r\n padding: 20\r\n },\r\n tooltips: {\r\n custom: function (tooltip) {\r\n if (!tooltip) {\r\n return;\r\n }\r\n }\r\n },\r\n legend: {\r\n display: true,\r\n position: 'top',\r\n labels: {\r\n fontFamily: \"'Open Sans', 'Helvetica', 'Arial', sans-serif\",\r\n fontSize: 14\r\n }\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n }\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular.module('portalProveedores')\r\n .factory('portalSmartFactory', portalSmartFactory);\r\n\r\n /** @ngInject */\r\n function portalSmartFactory($http, $q, $log, API_URL_SMART, SERVICE_BASE) {\r\n\r\n var urlBase = SERVICE_BASE + API_URL_SMART;\r\n var dataFactory = {};\r\n\r\n\r\n //GET: \"api/v1/smart/analistasdocumentos\"\r\n dataFactory.analistasDocumentos = function () {\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'analistasdocumentos').then(function (response) {\r\n deferred.resolve(response.data);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n //POST: \"ciclovida/{query}\"\r\n // ej. objeto: DateTime[] listaPeriodos, string analista\r\n dataFactory.cicloVida = function (query) {\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.post(urlBase + 'ciclovida', query).then(success, error);\r\n\r\n function success(response) { \r\n deferred.resolve(response.data);\r\n $log.log('REPORTE CICLO VIDA: Datos obtenidos con exito.');\r\n }\r\n \r\n function error(error) {\r\n deferred.reject(error);\r\n $log.warn('REPORTE CICLO VIDA: Datos no pudieron ser obtenidos con exito.');\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n //GET: \"api/v1/smart/detalledocumento/{facturaID:int}\"\r\n dataFactory.detalleDocumento = function (facturaid) {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'detalledocumento/' + facturaid).then(function (response) {\r\n deferred.resolve(response.data);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n //GET: \"api/v1/smart/getyears\" Obtiene anhos de los documentos (distinct)\r\n dataFactory.yearsDocumentos = function () {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'getyears').then(function (response) {\r\n deferred.resolve(response.data);\r\n });\r\n\r\n return deferred.promise;\r\n\r\n }\r\n\r\n\r\n //GET: \"api/v1/smart/barraestado\"\r\n dataFactory.infoBarraEstado = function () {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'barraestado').then(function (response) {\r\n deferred.resolve(response.data);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n //GET: \"api/v1/smart/ticketsperformance/{inicio:datetime?}/{fin:datetime?}/{todosPeriodos:bool?}\"\r\n // ej.: /api/v1/smart/ticketsperformance/2016-01-01/2016-01-02/false\r\n dataFactory.ticketsPerformance = function (query) {\r\n\r\n var deferred = $q.defer(); \r\n\r\n $http.post(urlBase + 'ticketsperformance', query).then(function (response) {\r\n //$http.get(urlBase + 'ticketsperformance/' + inicio + '/' + fin + '/' + todosPeriodos + '/').then(function (response) {\r\n deferred.resolve(response.data);\r\n $log.log('Performance');\r\n $log.log(response.data)\r\n });\r\n\r\n return deferred.promise;\r\n\r\n }\r\n \r\n return dataFactory;\r\n }\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular.module('portalProveedores')\r\n .factory('portalDataFactory', portalDataFactory);\r\n\r\n /** @ngInject */\r\n function portalDataFactory($http, $q, $log, API_URL_BASE, SERVICE_BASE) {\r\n\r\n var urlBase = SERVICE_BASE + API_URL_BASE;\r\n var dataFactory = {};\r\n\r\n\r\n // GET: api/v1/facturas/{numero:int}/desde/{desde:datetime}/hasta/{hasta:datetime}\r\n dataFactory.getFechas = function (numero, desde, hasta) {\r\n return $http.get(urlBase + numero + '/desde/' + desde + '/hasta/' + hasta);\r\n };\r\n\r\n\r\n // Obtiene FACTURAS para un PROVEEDOR en particular \r\n // GET: api/v1/facturas/{proveedorid}/emision/desde/{desde:datetime}/hasta/{hasta:datetime}/{estado}\r\n dataFactory.getFacturasProveedor = function (proveedorid, desde, hasta, estado) {\r\n return $http.get(urlBase + proveedorid + '/emision' + '/desde/' + desde + '/hasta/' + hasta + '/' + estado);\r\n };\r\n\r\n // GET: api/v1/facturas/{proveedorid}/pagadas/{fechaPago:datetime}\r\n dataFactory.getFacturasProveedorPagadas = function (proveedorid, fechaPago) {\r\n return $http.get(urlBase + proveedorid + '/pagadas/' + fechaPago);\r\n };\r\n\r\n //api/v1/facturas/{customerId}/folio/{folio}\r\n dataFactory.getFacturaDetalle = function (customerId, facturaID) {\r\n return $http.get(urlBase + customerId + '/detalle/' + facturaID);\r\n }\r\n\r\n //api/v1/facturas/proveedorid}/{numeroFactura:int}\r\n dataFactory.getFacturaPorNumero = function (customerId, numeroFactura) {\r\n return $http.get(urlBase + customerId + '/' + numeroFactura);\r\n }\r\n\r\n // POST: api/v1/facturas/mailcontacto\r\n dataFactory.postMailContacto = function (ticket) {\r\n return $http.post(urlBase + 'mailcontacto/', ticket);\r\n }\r\n\r\n // GET: api/v1/facturas/formulariocontacto/responsables\r\n dataFactory.getResponsablesFormularioContacto = function () {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'formulariocontacto/responsables')\r\n .then(function (response) {\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FORMULARIO CONTACTO. Fallo enviando mensaje');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n\r\n }\r\n\r\n // POST: api/v1/facturas/formulariocontacto/enviar\r\n dataFactory.postFormularioContacto = function (formulario) {\r\n return $http.post(urlBase + 'formulariocontacto/enviar', formulario);\r\n }\r\n\r\n\r\n // Obtiene sólo las fechas de los pagos del proveedor\r\n // GET: api/v1/{proveedorid}/fechaspagos\r\n dataFactory.getFechasPagos = function (proveedorid) {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + proveedorid + '/fechaspagos')\r\n .then(function (response) {\r\n $log.log('EXITO en FECHAS PAGOS Svc (deferred)');\r\n $log.log(response);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('Fallo en FECHAS PAGOS Svc (deferred)');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n\r\n // Obtiene FAQ desde API\r\n // GET: api/v1/faq\r\n dataFactory.getPreguntasFaq = function () {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'faq')\r\n .then(function (response) {\r\n $log.log('EXITO obteniendo FAQs (deferred)');\r\n $log.log(response);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FALLO obteniendo FAQs (deferred)');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // Chequea si usuario que intenta registrar tiene registros ACTUALES\r\n // GET: api/v1/facturas/account/checkuser/{rutProveedor}\r\n dataFactory.checkUser = function (rutProveedor) {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'account/checkuser/' + rutProveedor)\r\n .then(function (response) {\r\n $log.log('EXITO obteniendo CheckUser : ' + response.data);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FALLO obteniendo CheckUser');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // Chequea si usuario que intenta registrar tiene registros ACTUALES\r\n // POST: api/v1/facturas/account/forgotpassword\"\r\n dataFactory.forgotPassword = function (datosUsuario) {\r\n var deferred = $q.defer();\r\n\r\n var sender = {\r\n rutProveedor: datosUsuario.nombreUsuario,\r\n baseUrlAPI: datosUsuario.baseUrlAPI\r\n };\r\n\r\n $http.post(urlBase + 'account/forgotpassword', sender)\r\n .then(function (response) {\r\n $log.log('EXITO obteniendo CheckRegisteredUser');\r\n $log.log(response.data);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FALLO obteniendo CheckRegisteredUser');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n dataFactory.resetPassword = function (datosUsuario) {\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.post(urlBase + 'account/resetpassword', datosUsuario)\r\n .then(function (response) {\r\n $log.log('CAMBIO de password exitoso.');\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('CAMBIO de password fallo');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n // Envía información de usuario a la API para enviar correo de reestablecer contraseña\r\n // POST: api/v1/facturas/account/checkuser/{rutProveedor}\r\n dataFactory.checkRegisteredUser = function (rutProveedor) {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'account/checkregistereduser/' + rutProveedor)\r\n .then(function (response) {\r\n $log.log('EXITO obteniendo CheckRegisteredUser : ' + response.data);\r\n $log.log(response.data);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FALLO obteniendo CheckRegisteredUser');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // Obtiene documentos de la plataforma para Proveedores como manuales e instructivos\r\n // GET: api/v1/facturas/documentos\r\n dataFactory.getDocumentos = function () {\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'documentos')\r\n .then(function (response) {\r\n $log.log('EXITO obteniendo documentos : ' + response.data);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('FALLO obteniendo documentos');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // OBTIENE información del usuario en función del token.\r\n // GET: api/v1/facturas/account/modify\r\n dataFactory.getUserTokenInfo = function () {\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'account/modify').\r\n then(function (response) {\r\n $log.log('getUserInfoToke(). EXITO obteniendo info usuario : ' + response.data);\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n $log.warn('getUserInfoToke(). FALLO obteniendo info usuario');\r\n deferred.reject(error);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // POSTEA información del usuario en función del token.\r\n // POST: api/v1/facturas/account/modify -> recibe UsuarioDatosDTO\r\n dataFactory.postUserTokenInfo = function (userData) {\r\n return $http.post(urlBase + 'account/modify', userData);\r\n };\r\n\r\n\r\n // Test para ver si la API retorna la información del usuario basado en su token (bearer)\r\n // GET: api/v1/facturas/test/usernames\r\n dataFactory.testCheckUsuario = function () {\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.get(urlBase + 'test/usernames')\r\n .then(successCallback, errorCallback);\r\n\r\n function successCallback(response) {\r\n $log.debug('Exito retornando informacion usuario. UserSvC');\r\n $log.debug(response);\r\n deferred.resolve(response.data);\r\n }\r\n\r\n function errorCallback(error) {\r\n $log.debug('Exito retornando informacion usuario. UserSvC');\r\n $log.debug(error);\r\n deferred.reject(error);\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n\r\n\r\n dataFactory.getCustomersByProveedor = function (id) {\r\n return $http.get(urlBase + '/proveedor/' + id + '/facturas');\r\n };\r\n\r\n // api/v1/facturas/{customerid}/proveedorinfo\r\n dataFactory.getCustomerInfo = function (id) {\r\n return $http.get(urlBase + id + '/proveedorinfo');\r\n };\r\n\r\n dataFactory.insertCustomer = function (cust) {\r\n return $http.post(urlBase, cust);\r\n };\r\n\r\n dataFactory.updateCustomer = function (cust) {\r\n return $http.put(urlBase + '/' + cust.ID, cust)\r\n };\r\n\r\n dataFactory.deleteCustomer = function (id) {\r\n return $http.delete(urlBase + '/' + id);\r\n };\r\n\r\n dataFactory.getOrders = function (id) {\r\n return $http.get(urlBase + '/' + id + '/orders');\r\n };\r\n\r\n return dataFactory;\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular.module('portalProveedores')\r\n .factory('portalIntroFactory', portalIntroFactory);\r\n\r\n /** @ngInject */\r\n function portalIntroFactory() {\r\n\r\n var vm = this;\r\n var dataFactory = {};\r\n\r\n //Defaults Intro.js\r\n vm.showStepNumbers = true,\r\n vm.showBullets = true,\r\n vm.exitOnOverlayClick = true,\r\n vm.exitOnEsc = true,\r\n vm.nextLabel = 'SIGUIENTE ',\r\n vm.prevLabel = ' Anterior',\r\n vm.skipLabel = 'Salir ',\r\n vm.doneLabel = 'Gracias! '\r\n \r\n\r\n \r\n //TODO: Terminar los pasos para el tutorial\r\n //Pasos para estado WELCOME...\r\n vm.welcomeSteps = [\r\n {\r\n intro: '

Bienvenido

En este pequeño tutorial revisaremos las características y funcionaliades de la página de inicio del Portal Proveedores Metso. Podrá acceder a este tutorial todas las veces que desee, le explicaremos cómo a continuación

',\r\n tooltipClass: 'intro-tooltip-big'\r\n },\r\n {\r\n element: '#intro-tutorial-link',\r\n intro: \"

Ver Tutorial

Siempre podrá ver los tutoriales para todas nuestras secciones haciendo click en este link

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#intro-jumbotron-seccion',\r\n intro: \"

Encabezado & Documentos

Este encabezado se encuentra en todas nuestras secciones, contendrá información relevante respecto a la sección actual y los documentos de consulta

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n intro: \"

Información & Recursos

Metso proporciona a nuestros proveedores un conjunto de recursos para consulta con el fin de resolver dudas y ayudar a comprender el funcionamiento de nuestros procesos internos con nuestros Proveedores

\",\r\n tooltipClass: 'intro-tooltip-big'\r\n },\r\n {\r\n element: \"#intro-faq-welcome\",\r\n intro: \"

Preguntas Frecuentes

Resuelven preguntas comúnmente realizadas por nuestros Proveedores respecto a los horarios de funcionamiento, consultas, etc.

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: \"#intro-faq-welcome\",\r\n intro: \"

Siempre disponibles

Las Preguntas Frecuentes pueden ser consultadas en todo momento sin perder el trabajo que esté realizando haciendo click en el link en el pie de página

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: \"#intro-docs-welcome\",\r\n intro: \"

Documentos

Los documentos disponibles aquí son los mismos que están disponibles en el encabezado de cada sección

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n }, \r\n {\r\n element: '#intro-login-welcome',\r\n intro: \"

Iniciar Sesión

Para poder operar en nuestro Portal de Proveedores primero debe iniciar sesión con su RUT DE PROVEEDOR y la contraseña que definió al momento de registrarse en nuestro sistema

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#intro-login-welcome',\r\n intro: \"

Datos de Registro

Una vez iniciada su sesión;, en este mismo recuadro podrá ver su información de registro y editarla

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n intro: '

Registro de Usuario

Si es primera vez que ingresa a nuestro sistema primero debe registrarse, puede acceder al módulo de registro mediante el menú superior. No existen Proveedores registrados por parte de Metso, todos los proveedores deben registrarse.

',\r\n tooltipClass: 'intro-tooltip-big' \r\n },\r\n {\r\n intro: '

Tutoriales

Cada vez que vea un link con el ícono corresponderá a un tutorial que al hacer click, desplegará un tutorial en específico. Los tutoriales no afectan el trabajo que esté realizando

',\r\n tooltipClass: 'intro-tooltip-big' \r\n },\r\n {\r\n intro: '

¡Muchas Gracias!

Recuerde que cada sección de nuestro Portal cuenta con un tutorial similar a este en caso de dudas, puede activarlo en cualquier momento con el link respectivo en el pie de página

',\r\n tooltipClass: 'intro-tooltip-big'\r\n }\r\n ];\r\n\r\n vm.mainFiltrosSteps = [\r\n {\r\n element: '#caja-filtro-periodo',\r\n intro: \"

Buscar Documentos

A continuación revisaremos los filtros disponibles para consultar sus documentos

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#caja-filtro-periodo',\r\n intro: \"

Buscar por Período

Este formulario le permite revisar todos sus documentos por un rango de fechas en específico y/o por ESTADO de los mismos

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#resumen-periodo',\r\n intro: '

Definir el Período

Al hacer click en este campo puede seleccionar un período específico para su consulta, el período por defecto seleccionado es el MES ACTUAL

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#resumen-periodo',\r\n intro: '

Períodos Disponibles

Puede seleccionar consultar sus documentos por:

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#filtro-estado-documento',\r\n intro: '

Seleccionar Estado

Junto con el período además puede consultar por documentos con algún estado en particular. Por defecto, se consultarán todos los documentos con CUALQUIER estado

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#btn-buscar-periodo',\r\n intro: '

Buscar Documentos

Una vez seleccionados sus filtros de búsqueda puede hacer click en el botón de búsqueda. Los resultados se mostrarán en una tabla que se desplegará más abajo

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#caja-filtro-nrofactura',\r\n intro: '

Buscar por Nro. Factura

En caso de que necesite buscar una factura en particular por su número de documento puede hacerlo a través de este formulario. Posteriormente debe presionar el botón de búsqueda BUSCAR FACTURA. El número de documento es el correlativo correspondiente a sus facturas

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#caja-filtro-fechapago',\r\n intro: '

Buscar por Fechas de Pago

Este formulario toma todas las fechas de pago que tienen sus documentos, por lo tanto retornará documentos que estén con estado PAGADO. La finalidad de esta opción es poder verificar a qué documentos corresponde algún pago realizado por Metso a usted

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n { \r\n intro: '

Filtros Independientes

Todos los formularios de búsqueda son totalmente independientes entre sí. Los criterios de búsqueda que se encuentren en uno no afectan a los demás

',\r\n tooltipClass: 'intro-tooltip-big'\r\n }\r\n ];\r\n \r\n vm.mainResultadosSteps = [\r\n {\r\n element: '#tabla-resultados',\r\n intro: \"

Tabla Resultados

Esta tabla muestra los resultados generados por su consulta. Cada columna representa un atributo de los documentos obtenidos desde nuestro Portal Proveedores. Todas las columnas cuentan con la opción de ordenar de manera ascendente/descendente y algunas permiten filtrar los resultados

\",\r\n position: 'top',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n { \r\n element: '.ng-table-filters',\r\n intro: \"

Filtrar Resultados

Algunas columnas permiten filtrar los resultados, en el caso de los valores correspondientes a dinero no es necesario agregar puntuaciones o símbolos especiales. Los filtros no discriminan entre mayúsculas y/o minúsculas

\",\r\n position: 'top',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-nrodoc-0',\r\n intro: \"

Número de Documento

Corresponde al número correlativo de sus facturas

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-fechadoc-0',\r\n intro: \"

Fecha Emisión Documento

Es la fecha que tiene el documento como fecha de emisión. Para permitir un correcto filtrado y ordenamiento de los valores, es necesario usar el formato aaaa-mm-dd (año-mes-día) para las fechas

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-fecharecepciondoc-0',\r\n intro: \"

Fecha Recepción Documento

Corresponde a la fecha en que el documento fue recibido por nuestro departamento de Contabilidad

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-montodoc-0',\r\n intro: \"

Monto del Documento

Monto total especificado en el documento

\",\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-pagadodoc-0',\r\n intro: \"

Monto Pagado

En caso de que el estado del documento sea PAGADO mostrará la cantidad pagada. En ciertos casos, algunos documentos son pagados en parcialidades

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-estadodoc-0',\r\n intro: \"

Estado del Documento

Existen 5 estados para los documentos: Recibido, Contabilizado, Devuelto, Rechazado y Pagado. La fila y el identificador del docuento cambiará de color en función de su estado

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-ticketsdoc-0',\r\n intro: \"

Tickets Generados

Muestra la cantidad de tickets de consulta generados para el documento por usted. En la vista de DETALLE se pueden generar estos tickets de soporte, por supuesto en la vista de DETALLE existe un tutorial idéntico a este explicando su funcionamiento

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-detalledoc-0',\r\n intro: \"

Abrir Detalle del Documento

Este botón abre la vista de DETALLE para el documento. En esa vista podrá ver información detallada del documento y generar tickets de soporte

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#res-totales',\r\n intro: \"

Totales

En esta fila se muestran los totales correspondientes a las columnas de MONTO DOCUMENTO y CANTIDAD PAGADA. Suma todos los valores de cada una de esas columnas

\",\r\n position: 'top',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '.ng-table-counts ',\r\n intro: \"

Cantidad de Registros por Tabla

Por defecto, el Portal de Proveedores desplegará los primeros 25 registros, acá puede definir una cantidad mayor o menor. Todos los registros fueron cargados en función de los criterios de búsqueda que seleccionó, la idea de esto es facilitar la visualización

\",\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n intro: '

Hemos finalizado

Esas son las características de la tabla de resultados de sus documentos consultados en el Portal de Proveedores Metso. Recuerde que en la vista de DETALLE de cada documento podrá consultar un tutorial similar a este explicando su funcionamiento. Muchas gracias.

',\r\n tooltipClass: 'intro-tooltip-big'\r\n }\r\n ];\r\n\r\n vm.detalleSteps = [\r\n {\r\n element: '#detalle-resumen-doc',\r\n intro: '

Encabezado Documento

Muestra el número de documento, el monto asociado y el estado del documento

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-fechas-doc',\r\n intro: '

Fechas del Documento

Se detallan las fechas asociadas al documento. En caso de los documentos CONTABILIZADOS se muestra la fecha probable de pago; para los documentos PAGADOS se muestra la fecha de pago

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-barra-doc',\r\n intro: '

Barra de Estado

La barra detalla el estado en que se encuentra el documento y su correspondiente descripción. Los documentos RECHAZADOS contienen un glosa de rechazo detallando el por qué fue rechazado el documento

',\r\n position: 'top',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-info-doc',\r\n intro: '

Información Detallada

Muestra el nombre del proveedor, RUT, número de documento y el tipo de documento especificando si es electrónico o físico

',\r\n position: 'right',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-infoestado-doc',\r\n intro: '

Detalles sobre el Estado

Describe el ESTADO del documento y varía según el mismo. Cuando el documento fue RECHAZADO mostrará la razón del rechazo y la fecha correspondiente, en caso de que el documento se encuentre pagado mostrará la informació del pago y la fecha de pago

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-ticket-doc',\r\n intro: '

Genere Tickets de Soporte

En caso de que tenga consultas específicas para un documento en este formulario puede elaborar un ticket de soporte el cual será gestionado por nuestro personal y la respuesta será enviada al correo que defina aquí

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n },\r\n {\r\n element: '#detalle-ticket-doc',\r\n intro: '

Respuestas a Tickets

La respuesta a su ticket será enviada al correo electrónico que especifique, además, pordrá ser visualizado en esta misma sección en un listado desplegado en la parte superior de este formulario

',\r\n position: 'left',\r\n tooltipClass: 'intro-tooltip-normal'\r\n }\r\n ];\r\n\r\n vm.ingresarSteps = [\r\n\r\n ];\r\n\r\n \r\n\r\n dataFactory.getIntroJSOptions = function (estado) {\r\n\r\n var pasos = [];\r\n\r\n switch (estado) {\r\n case 'home':\r\n pasos = vm.welcomeSteps;\r\n break;\r\n case 'mainFiltros':\r\n pasos = vm.mainFiltrosSteps;\r\n break;\r\n case 'mainResultados':\r\n pasos = vm.mainResultadosSteps;\r\n break;\r\n case 'detalle':\r\n pasos = vm.detalleSteps;\r\n break;\r\n default:\r\n pasos = [];\r\n break;\r\n }\r\n\r\n var options = {\r\n steps: pasos,\r\n showStepNumbers: vm.showStepNumbers,\r\n showBullets: vm.showBullets,\r\n exitOnOverlayClick: vm.exitOnOverlayClick,\r\n exitOnEsc: vm.exitOnEsc,\r\n nextLabel: vm.nextLabel,\r\n prevLabel: vm.prevLabel,\r\n skipLabel: vm.skipLabel,\r\n doneLabel: vm.doneLabel\r\n }\r\n\r\n return options;\r\n };\r\n\r\n return dataFactory;\r\n\r\n\r\n }\r\n\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .factory('portalAuthverifierFactory', portalAuthverifierFactory);\r\n\r\n /** @ngInject */\r\n function portalAuthverifierFactory(localStorageService, $location, $log) {\r\n\r\n var portalAuthverifierFactory = {};\r\n\r\n var _verifier = function () {\r\n var authData = localStorageService.get('authorizationData');\r\n\r\n if (authData != null) {\r\n $log.info('Existe un usuario y token. Usuario : ' + authData.userName);\r\n return true;\r\n }\r\n else {\r\n $log.warn('NO EXISTE un nombre de usuario');\r\n _redirect();\r\n return false;\r\n }\r\n }\r\n\r\n var _redirect = function () {\r\n $log.log('Usuario sin loguear, redirigiendo a LOGIN.');\r\n $location.path('/');\r\n }\r\n\r\n portalAuthverifierFactory.verifier = _verifier;\r\n portalAuthverifierFactory.redirect = _redirect;\r\n\r\n return portalAuthverifierFactory;\r\n }\r\n\r\n \r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('ReportesController', ReportesController);\r\n\r\n /** @ngInject */\r\n function ReportesController() {\r\n\r\n \r\n \r\n \r\n\r\n ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n //activate(); //run Forrest, RUN! \r\n\r\n\r\n // FUNCIONES Y ASIGNACIONES\r\n ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n //function activate() { \r\n //}\r\n \r\n //////////////////////////////////////////////////////// \r\n\r\n \r\n\r\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('MainController', MainController);\r\n\r\n /** @ngInject */\r\n function MainController($timeout, $log, toastr, authService, localStorageService, portalDataFactory, moment, NgTableParams, portalAuthverifierFactory, $state, $rootScope, portalIntroFactory, API_URL_BASE, SERVICE_BASE) {\r\n\r\n var vm = this; //scope\r\n\r\n portalAuthverifierFactory.verifier();\r\n\r\n vm.urlBase = SERVICE_BASE + API_URL_BASE + 'autocomplete/proveedores/';\r\n\r\n //Datos para intro TUTORIALES\r\n vm.introFiltrosOptions = []\r\n vm.introResultadosOptions = [];\r\n\r\n vm.cargaIntroOptions = (function () {\r\n vm.introFiltrosOptions = portalIntroFactory.getIntroJSOptions('mainFiltros');\r\n vm.introResultadosOptions = portalIntroFactory.getIntroJSOptions('mainResultados');\r\n })();\r\n\r\n //Tabla\r\n vm.tableParams = new NgTableParams({\r\n page: 1, // show first page\r\n count: 25 // count per page\r\n }, {\r\n filterDelay: 0,\r\n data: null\r\n });\r\n\r\n vm.nombreColumnaFecha = 'Fecha Factura';\r\n vm.columnaSuccess = false;\r\n vm.esDocumentosPagados = false;\r\n\r\n\r\n vm.totalDocumentosEmitidos = 0;\r\n vm.totalDocumentosPagados = 0;\r\n\r\n //Fechas\r\n vm.hoy = moment();\r\n\r\n vm.datePicker = {};\r\n\r\n vm.datePicker.date = {\r\n startDate: moment().startOf('month'),\r\n endDate: moment().endOf('month')\r\n }\r\n\r\n //Usuario\r\n vm.proveedorInfo;\r\n vm.authentication = authService.authentication;\r\n vm.authData = localStorageService.get('authorizationData'); //TOKEN DE ACCESO\r\n vm.usuario = vm.authData.userName;\r\n\r\n vm.getUserInfo = function (proveedor) {\r\n portalDataFactory.getCustomerInfo(proveedor)\r\n .then(function (response) {\r\n vm.proveedorInfo = response.data;\r\n }, function (error) {\r\n $log.log('Fall� la API obteniendo Info Usuario (MIGRAR A IDENTITYUSER)');\r\n $log.log(error);\r\n });\r\n };\r\n\r\n //Objeto consulta\r\n vm.consultaDocumento = {};\r\n vm.consultaDocumento.estado = 'todos'; //Inicia DDL en estado TODOS para consulta\r\n\r\n vm.documentosProveedor;\r\n\r\n vm.getDocumentos = function () { //Obtiene documentos EMITIDOS en el rango de fechas\r\n var proveedorid = vm.usuario;\r\n var desde = vm.datePicker.date.startDate.format('YYYY-MM-DD');\r\n var hasta = vm.datePicker.date.endDate.format('YYYY-MM-DD');\r\n var estado = vm.consultaDocumento.estado;\r\n\r\n portalDataFactory.getFacturasProveedor(proveedorid, desde, hasta, estado)\r\n .then(function (response) {\r\n\r\n vm.nombreColumnaFecha = 'Fecha Doc.'; //da nombre a columna\r\n vm.columnaSuccess = false; //agrega clase a para se�alar fecha de pago\r\n vm.esDocumentosPagados = false;\r\n\r\n vm.documentosProveedor = response.data;\r\n vm.tableParams.settings({\r\n dataset: vm.documentosProveedor\r\n });\r\n\r\n vm.calculaTotalesDocumentos(response.data);\r\n\r\n $log.log(response.data)\r\n }, function (error) {\r\n $log.log('GET LISTADO DOCUMENTOS (API: GetFacturasProveedor(proveedorid, desde, hasta, estado) fallo en la consulta.');\r\n $log.log(error);\r\n });\r\n }\r\n\r\n vm.getDocumentosPagados = function () {\r\n\r\n vm.nombreColumnaFecha = 'Fecha Pago'; //da nombre a columna\r\n vm.columnaSuccess = true; //agrega clase a para se�alar fecha de pago\r\n vm.esDocumentosPagados = true;\r\n\r\n var proveedorId = vm.usuario;\r\n var fechaPago = vm.fechaPagoSeleccionada;\r\n\r\n function successCallback(response) {\r\n vm.documentosProveedor = response.data;\r\n vm.tableParams.settings({\r\n dataset: vm.documentosProveedor\r\n });\r\n vm.calculaTotalesDocumentos(response.data);\r\n }\r\n function errorCallback(error) {\r\n $log.log('Falla en carga de Documentos Pagados =( : ' + error);\r\n }\r\n\r\n portalDataFactory.getFacturasProveedorPagadas(proveedorId, fechaPago).then(successCallback, errorCallback);\r\n }\r\n\r\n // TODO: Terminar m�todo de carga de Facturas por folio. Ver como crear 2-way-binding desde UI y no desde controlador para sobrecargar el Numero de Factura\r\n vm.getDocumentosPorNumero = function (numeroFactura) {\r\n\r\n var proveedorId = vm.usuario;\r\n\r\n function successCallback(response) {\r\n vm.documentosProveedor = response.data;\r\n vm.tableParams.settings({\r\n dataset: vm.documentosProveedor\r\n });\r\n }\r\n\r\n function errorCallback(error) {\r\n $log.warn('Falla en carga de Documento por Numero Factura =( :');\r\n $log.warn(error);\r\n }\r\n\r\n portalDataFactory.getFacturaPorNumero(proveedorId, numeroFactura).then(successCallback, errorCallback);\r\n }\r\n\r\n // FECHAS PAGOS\r\n vm.fechasPagos = [];\r\n vm.fechaPagoSeleccionada;\r\n\r\n vm.getFechasPagos = function () {\r\n portalDataFactory.getFechasPagos(vm.usuario)\r\n .then(function (response) {\r\n $log.log('Fechas Pagos : ');\r\n $log.log(response);\r\n vm.fechasPagos = response;\r\n }, function (response) {\r\n $log.log('No fue posible obtener fechas de pagos para el provedor');\r\n $log.log(response);\r\n });\r\n }\r\n\r\n\r\n\r\n vm.calculaTotalesDocumentos = function (documentos) {\r\n var totalE = 0;\r\n var totalP = 0;\r\n\r\n for (var i = 0; i < documentos.length; i++) {\r\n\r\n var docE = documentos[i].montoTotal;\r\n var docP = documentos[i].montoPagado;\r\n\r\n if (docE == null) {\r\n docE = 0;\r\n }\r\n\r\n if (docP == null) {\r\n docP = 0;\r\n }\r\n\r\n totalE += docE;\r\n totalP += docP;\r\n }\r\n\r\n vm.totalDocumentosEmitidos = totalE;\r\n vm.totalDocumentosPagados = totalP;\r\n }\r\n\r\n\r\n vm.showToastr = showToastr;\r\n\r\n function showToastr() {\r\n toastr.info('Fork generator-gulp-angular');\r\n vm.classAnimation = '';\r\n }\r\n\r\n\r\n // notifica estado a FOOTER para parametrizar Tutorial\r\n vm.notificaEstado = (function () {\r\n $rootScope.$emit('intro', $state.current.name);\r\n })();\r\n\r\n // autocomplete seleccion proveedor para admin\r\n vm.adminProveedor = {};\r\n\r\n vm.adminProveedorCallback = function (item) {\r\n if (item != 'undefined' && item != null) {\r\n vm.usuario = item.description;\r\n vm.adminProveedor = item;\r\n toastr.info(vm.usuario, 'Consultando como:');\r\n vm.getFechasPagos();\r\n\r\n portalDataFactory.checkRegisteredUser(item.description).then(function (response) {\r\n\r\n //nombreUsuario = user.UserName,\r\n //emailUsuario = user.Email,\r\n //razonSocial = user.RazonSocial,\r\n //nombreEncargado = user.NombreEncargado\r\n\r\n if (response == null) {\r\n vm.adminProveedor.emailUsuario = 'SIN REGISTRAR';\r\n vm.adminProveedor.nombreEncargado = 'SIN REGISTRAR';\r\n } else {\r\n vm.adminProveedor.emailUsuario = response.emailUsuario;\r\n vm.adminProveedor.nombreEncargado = response.nombreEncargado;\r\n }\r\n });\r\n\r\n $log.debug('AdminProveedor (CheckRegisteredUser):');\r\n $log.debug(vm.adminProveedor);\r\n \r\n\r\n }\r\n }\r\n\r\n //RUN FORREST RUN!\r\n vm.getUserInfo(vm.authentication.userName);\r\n vm.getFechasPagos();\r\n\r\n }\r\n})();\r\n\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('LoginController', LoginController);\r\n \r\n /** @ngInject */\r\n function LoginController($location, authService, $log) {\r\n\r\n var vm = this;\r\n\r\n //Patrón RUT\r\n vm.patronRut = /\\b\\d{1,8}\\-[K|k|0-9]/;\r\n vm.formatRut = function () { \r\n var newUserName = vm.loginData.userName.split('.').join('');\r\n vm.loginData.userName = newUserName;\r\n0 }\r\n\r\n vm.loginData = {\r\n userName: \"\",\r\n password: \"\"\r\n };\r\n\r\n\r\n\r\n vm.message = \"\";\r\n\r\n vm.test = \"Controller OK\";\r\n\r\n vm.login = function () {\r\n authService.login(vm.loginData).then(function (response) {\r\n $location.path('/main');\r\n $log.log('Exito logueando... (LoginCtrl)');\r\n $log.log(response);\r\n },\r\n function (err) {\r\n $log.warn('Pasword/Usuario incorrectos. Mensaje : ' + err.error_description);\r\n $log.warn('Objeto Error LOGIN : ');\r\n $log.warn(err);\r\n vm.message = 'El usuario o contraseña son incorrectos';\r\n });\r\n };\r\n }\r\n\r\n})();\n(function () {\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('IngresarController', IngresarController);\r\n\r\n /** @ngInject */\r\n function IngresarController(portalDataFactory, $log, $stateParams, authService, $rootScope, $state) {\r\n\r\n var vm = this;\r\n\r\n vm.razonLogin = $stateParams.razon;\r\n\r\n vm.getDocumentos = function () {\r\n portalDataFactory.getDocumentos()\r\n .then(function (response) {\r\n vm.docs = response;\r\n }, function (error) {\r\n $log.warn('WELCOME. No se cargaron documentos. ERROR.');\r\n $log.warn(error);\r\n }); \r\n } \r\n \r\n\r\n vm.correspondeLogOut = function () {\r\n if(vm.razonLogin == 401 || vm.razonLogin == '401')\r\n authService.logOut();\r\n }\r\n\r\n // notifica estado a FOOTER para parametrizar Tutorial\r\n vm.notificaEstado = (function () {\r\n $rootScope.$emit('intro', $state.current.name);\r\n })();\r\n\r\n vm.correspondeLogOut();\r\n vm.getDocumentos();\r\n authService.logOut();\r\n\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .directive('faqPortal', faqPortal);\r\n\r\n /** @ngInject */\r\n function faqPortal() {\r\n var directive = {\r\n restrict: 'E',\r\n templateUrl: 'app/faq/faq.html',\r\n scope: {\r\n creationDate: '='\r\n },\r\n controller: FaqController,\r\n controllerAs: 'vm',\r\n bindToController: true\r\n };\r\n\r\n return directive; \r\n }\r\n\r\n /** @ngInject */\r\n function FaqController($location, portalDataFactory, $log) {\r\n var vm = this;\r\n vm.url = $location.path();\r\n\r\n vm.faqs = []; //array con preguntas\r\n\r\n vm.getFaq = function () {\r\n portalDataFactory.getPreguntasFaq()\r\n .then(function (response) {\r\n vm.faqs = response;\r\n }, function (error) {\r\n $log.warn('FAQ. No se cargaron datos. ERROR.');\r\n $log.warn(error);\r\n });\r\n };\r\n\r\n vm.getFaq(); //RUUUUUUUN!\r\n }\r\n\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .controller('DetalleController', DetalleController);\r\n\r\n /** @ngInject */\r\n function DetalleController($log, $stateParams, moment, portalDataFactory, localStorageService, portalIntroFactory) {\r\n var vm = this;\r\n\r\n vm.docID = $stateParams.docID; //ID Factura... se va a servicio\r\n\r\n vm.authData = localStorageService.get('authorizationData'); //TOKEN DE ACCESO\r\n vm.usuario = vm.authData.userName;\r\n\r\n //Datos para intro TUTORIALES\r\n vm.introDetalleOptions = {};\r\n\r\n vm.cargaIntroOptions = (function() {\r\n vm.introDetalleOptions = portalIntroFactory.getIntroJSOptions('detalle');\r\n })();\r\n\r\n //Desde API...\r\n vm.documento = {};\r\n\r\n vm.getFacturaDetalle = function(customerId, folio) {\r\n portalDataFactory.getFacturaDetalle(customerId, folio)\r\n .then(function(response) {\r\n vm.documento = response.data;\r\n $log.debug('DETALLE :');\r\n $log.debug(response.data);\r\n }, function(error) {\r\n $log.warn('Fall� llamado a DETALLE de documento a la API. Revisar XHR.')\r\n $log.log(error);\r\n });\r\n };\r\n\r\n\r\n //Fecha probable pago...\r\n vm.fechaPago = function(fecha, dias) {\r\n var fechaPago = moment(fecha).add(dias, 'd');\r\n return fechaPago;\r\n };\r\n\r\n //GENERA FECHA PROBABLE DE PAGO\r\n vm.generaFechaProbablePago = function(fechaRecepcion, dias) {\r\n var fechaR;\r\n var fechaP;\r\n var dayP = 0;\r\n\r\n if (fechaRecepcion == null) {\r\n fechaRecepcion = vm.documento.fechaRecepcion;\r\n fechaR = moment(fechaRecepcion);\r\n fechaP = fechaR.clone().add(60, 'd'); //Fecha Recepci�n nullo se se asigna la fecha de recepcion mas 60 dias\r\n } else {\r\n fechaR = moment(fechaRecepcion); //Fecha Recepci�n\r\n fechaP = fechaR.clone().add(dias, 'd');\r\n }\r\n dayP = fechaP.day()\r\n //El caso que la fecha no sea dia lunes esta se actualiza hasta que sea el lunes siguiente.\r\n do {\r\n if (dayP != 1) {\r\n fechaP.add(1, 'd');\r\n dayP = fechaP.day();\r\n }\r\n } while (dayP != 1);\r\n\r\n return fechaP;\r\n }\r\n\r\n //RUN\r\n vm.getFacturaDetalle(vm.usuario, vm.docID);\r\n }\r\n\r\n\r\n\r\n\r\n})();\n(function() {\r\n 'use strict';\r\n\r\n // Portal Proveedores\r\n // prosmart.xyz\r\n \r\n angular\r\n .module('portalProveedores')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock($log, authService) {\r\n authService.fillAuthData(); \r\n $log.debug('Corriendo... Desarrollado por prosmart.xyz - Todos los derechos reservados - Chile');\r\n }\r\n})();\r\n\r\n\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .config(routerConfig);\r\n\r\n routerConfig.$inject = ['$stateProvider', '$urlRouterProvider'];\r\n\r\n /** @ngInject */\r\n function routerConfig($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('main', {\r\n url: '/main',\r\n templateUrl: 'app/main/main.html',\r\n controller: 'MainController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function () { return 'Documentos' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('main.detalle', {\r\n url: '/detalledoc/{docID:int}',\r\n templateUrl: 'app/detalle/detalle.html',\r\n controller: 'DetalleController',\r\n controllerAs: 'vm'\r\n });\r\n\r\n $stateProvider\r\n .state('home', {\r\n url: '/',\r\n views: {\r\n '': {\r\n templateUrl: 'app/welcome/welcome.html',\r\n controller: 'WelcomeController',\r\n controllerAs: 'vm'\r\n },\r\n 'login@home': {\r\n templateUrl: 'app/login/login.html',\r\n controller: 'LoginController',\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function() { return 'Bienvenido' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('signup', {\r\n url: '/signup',\r\n templateUrl: 'app/signup/signup.html',\r\n controller: 'SignupController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function () { return 'Registro' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('ingresar', {\r\n url: '/ingresar',\r\n params : {\r\n razon: null\r\n },\r\n views: {\r\n '': {\r\n templateUrl: 'app/ingresar/ingresar.html',\r\n controller: 'IngresarController',\r\n controllerAs: 'vm'\r\n },\r\n 'login@ingresar': {\r\n templateUrl: 'app/login/login.html',\r\n controller: 'LoginController',\r\n controllerAs: 'vm'\r\n }\r\n },\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function () { return 'Iniciar Sesion' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('recuperar', {\r\n url: '/recuperar',\r\n templateUrl: 'app/recuperarpassword/recuperarpassword.html',\r\n controller: 'RecuperarpasswordController',\r\n controllerAs: 'vm',\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function () { return 'Recuperar Password' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('resetPassword', {\r\n url: '/resetPassword?userId&token', // Matches /resetPassword?userid=Prosmart&token=T0k3n\r\n templateUrl: 'app/recuperarpassword/resetpassword.html',\r\n controller: 'ResetpasswordController',\r\n controllerAs: 'vm',\r\n params: {\r\n docID: 0\r\n },\r\n resolve: {\r\n //Usa ui.router.title\r\n $title: function () { return 'Nuevo Password' }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('detalle', {\r\n url: '/detalle/{docID:int}',\r\n templateUrl: 'app/detalle/detalle.html',\r\n controller: 'DetalleController',\r\n controllerAs: 'vm',\r\n params: {\r\n docID : 0\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('test', {\r\n url: '/test',\r\n templateUrl: 'app/test/test.html',\r\n controller: 'TestController',\r\n controllerAs: 'vm'\r\n });\r\n\r\n $stateProvider\r\n .state('performance', {\r\n url: '/performance',\r\n templateUrl: 'app/reportes/reportes.html',\r\n controller: 'ReportesController',\r\n controllerAs: 'vm'\r\n });\r\n\r\n $stateProvider\r\n .state('faq', {\r\n url: '/faq',\r\n templateUrl: 'app/faq/faq.html',\r\n controller: 'FaqController',\r\n controllerAs: 'vm'\r\n });\r\n\r\n $stateProvider\r\n .state('userdata', {\r\n url: '/userdata',\r\n templateUrl: 'app/userdata/userdata.html',\r\n controller: 'UserDataController',\r\n controllerAs: 'vm'\r\n });\r\n\r\n\r\n $urlRouterProvider.otherwise('/');\r\n }\r\n\r\n})();\r\n\n/* global moment:false */\r\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .constant('moment', moment)\r\n .constant('API_URL_BASE', 'api/v1/facturas/') // URL version portal API\r\n .constant('API_URL_SMART', 'api/v1/smart/')\r\n //.constant('DEBUG_INFO', true)\r\n .constant('DEBUG_INFO', true)\r\n // .constant('SERVICE_BASE', 'http://localhost:61866/'); //Token autorizaci�n DESARROLLO\r\n .constant('SERVICE_BASE', 'http://gestionproveedores.metsoadm.cl/'); //Token autorizaci�n PRODUCCION\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('portalProveedores')\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($compileProvider, $logProvider, DEBUG_INFO, toastrConfig, $httpProvider, $analyticsProvider) {\r\n //Boosts performance\r\n $compileProvider.debugInfoEnabled(DEBUG_INFO);\r\n\r\n // Enable log\r\n $logProvider.debugEnabled(true);\r\n\r\n //Activa tracking para GA\r\n $analyticsProvider.virtualPageviews(true);\r\n\r\n $httpProvider.interceptors.push('authInterceptorService');\r\n\r\n // Set options third-party lib\r\n toastrConfig.allowHtml = true;\r\n toastrConfig.timeOut = 3000;\r\n toastrConfig.positionClass = 'toast-top-right';\r\n toastrConfig.preventDuplicates = true;\r\n toastrConfig.progressBar = true;\r\n }\r\n\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular.module('portalProveedores').factory('authService', authService);\r\n\r\n\r\n /** @ngInject */\r\n function authService($http, $q, localStorageService, SERVICE_BASE, $log) {\r\n\r\n var serviceBase = SERVICE_BASE; //recibe token de autentificación\r\n\r\n var authServiceFactory = {};\r\n\r\n var _authentication = {\r\n isAuth: false,\r\n userName: \"\"\r\n };\r\n\r\n var _saveRegistration = function (registration) {\r\n\r\n _logOut();\r\n\r\n return $http.post(serviceBase + 'api/v1/facturas/account/register', registration).then(function (response) {\r\n return response;\r\n });\r\n\r\n };\r\n\r\n var _login = function (loginData) {\r\n\r\n var data = \"grant_type=password&username=\" + loginData.userName + \"&password=\" + loginData.password;\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (response) {\r\n\r\n localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName });\r\n\r\n _authentication.isAuth = true;\r\n _authentication.userName = loginData.userName;\r\n\r\n deferred.resolve(response);\r\n\r\n }).error(function (err, status) {\r\n _logOut();\r\n $log.warn('Error iniciando sesion usuario. (Svc)');\r\n $log.log(err);\r\n $log.log(status);\r\n deferred.reject(err);\r\n });\r\n\r\n\r\n return deferred.promise;\r\n\r\n\r\n };\r\n\r\n var _logOut = function () {\r\n\r\n localStorageService.remove('authorizationData');\r\n\r\n _authentication.isAuth = false;\r\n _authentication.userName = \"\";\r\n\r\n };\r\n\r\n var _fillAuthData = function () {\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n _authentication.isAuth = true;\r\n _authentication.userName = authData.userName;\r\n }\r\n\r\n }\r\n\r\n //Returns...\r\n authServiceFactory.saveRegistration = _saveRegistration;\r\n authServiceFactory.login = _login;\r\n authServiceFactory.logOut = _logOut;\r\n authServiceFactory.fillAuthData = _fillAuthData;\r\n authServiceFactory.authentication = _authentication;\r\n\r\n return authServiceFactory;\r\n }\r\n\r\n})();\r\n\n(function () {\r\n\r\n angular\r\n .module('portalProveedores')\r\n .factory('authInterceptorService', authInterceptorService);\r\n\r\n /** @ngInject */\r\n function authInterceptorService($location, $q, localStorageService, $log, $injector) {\r\n var authInterceptorServiceFactory = {};\r\n\r\n var _request = function (config) {\r\n\r\n config.headers = config.headers || {};\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n config.headers.Authorization = 'Bearer ' + authData.token;\r\n }\r\n\r\n return config;\r\n }\r\n\r\n var _responseError = function (rejection) {\r\n \r\n // 401 : Para transacciones NO AUTENTICADAS (SIN inicio de sesión, ANONYMOUS), el token viene malformado o VENCIDO.\r\n // 403 : Para transacciones PROHIBIDAS (FORBIDDEN), no tiene el rol correcto\r\n // El tiempo definido en la API Portal Proveedores es de 8 HORAS (Error 401).\r\n\r\n $log.info('AuthInterceptorService. Rejection Code : ' + rejection.status);\r\n $log.info(rejection);\r\n\r\n if (rejection.status === 401) {\r\n //$location.path('/ingresar');\r\n var status = rejection.status; \r\n $injector.get('$state').go('ingresar', { razon: status });\r\n }\r\n return $q.reject(rejection);\r\n }\r\n\r\n authInterceptorServiceFactory.request = _request;\r\n authInterceptorServiceFactory.responseError = _responseError;\r\n\r\n return authInterceptorServiceFactory;\r\n }\r\n})();\nangular.module(\"portalProveedores\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/ingresar/ingresar.html\",\"

Iniciar Sesión en el Portal de Proveedores

Para poder operar en el Portal de Proveedores Metso Outotec es necesario iniciar sesión con su cuenta de usuario, para eso es necesario haberse registrado como usuario en nuestro Portal. En caso de que no cuente con una cuenta de usuario por favor regístrese aquí.

Su sesión ha expirado

Una vez que inicia sesión, por razones de seguridad, el Portal de Proveedores permite operar durante 8 horas. Una vez cumplido ese plazo es necesario que inicie sesión nuevamente

Iniciar Sesión


\");\n$templateCache.put(\"app/detalle/detalle.html\",\"

Detalle Documento


NUMERO FACTURA {{vm.documento.numeroFactura}}

{{vm.documento.montoTotal | currency:$:0}}

- Sin Monto -

{{vm.documento.estado | uppercase}}

FECHAS DOCUMENTO

EMISIÓN {{vm.documento.fechaEmision | date:\\'dd/MM/yyyy\\'}}

RECEPCIÓN {{vm.documento.fechaRecepcion | date:\\'dd/MM/yyyy\\'}}

FECHA PROBABLE PAGO {{vm.generaFechaProbablePago(vm.documento.fechaProbablePago, 0).format(\\'DD/MM/YYYY\\')}}

FECHA PAGO {{vm.documento.fechaPago | date: \\'dd/MM/yyyy\\'}}

NUMERO FACTURA {{vm.documento.numeroFactura}}

{{vm.documento.montoTotal | currency:$:0}}

- Sin Monto -

{{vm.documento.estado | uppercase}}

FECHAS DOCUMENTO

EMISIÓN {{vm.documento.fechaEmision | date:\\'dd/MM/yyyy\\'}}

RECEPCIÓN {{vm.documento.fechaDocumento | date:\\'dd/MM/yyyy\\'}}

FECHA PROBABLE PAGO {{vm.generaFechaProbablePago(vm.documento.fechaDocumento, 90).format(\\'DD/MM/YYYY\\')}}


Recibido

El documento fue recibido exitosamente

Contabilizado

0\\\">con DISCREPANCIAS

El documento ha sido procesado por parte de nuestro departamento de Contabilidad

Rechazado

El documento fue rechazado, por favor verificar la razón del rechazo

Pagado

Se ha realizado el pago del documento. Los datos del pago se encuentran en los detalles

20% Complete (success)
40% Complete (success)
80% Complete (success)
40% Complete (success)
0% Complete (success)

Información Documento


Nombre Proveedor

{{vm.documento.nombreProveedor}}

RUT Proveedor

{{vm.documento.rut}}

Número Documento

{{vm.documento.numeroDocumento}}

Tipo Documento

{{vm.documento.tipoDocumento}}

Observaciones

{{vm.documento.glosaGeneral}}

Información Estado


0\\\">

DISCREPANCIA

EXISTEN DISCREPANCIAS CON EL DOCUMENTO

DETALLE DISCREPANCIA

{{vm.documento.estadoDiscrepancia}}

Estado Documento

{{vm.documento.estado}}

Descripción Estado

El documento fue recibido exitosamente, a la brevedad comenzará su proceso de contabilización.

El documento fue entró al estado de contabilización donde es procesado por nuestro departamento de Contabilidad para su posterior pago.

El documento fue devuelto al proveedor por alguna razón. En caso de consultas por favor utilizar el formulario de contacto inferior.

El documento fue rechazado. Los detalles del rechazo se encuentran a continuación. Por favor comunicarse a través de nuestro formulario de contacto.

El documento fue pagado al proveedor. Los detalles del pago se encuentran a continuación.

Fecha Devolución

{{vm.documento.fechaDevolucion | date:\\'dd/MM/yyyy\\'}}

Fecha Rechazo

{{vm.documento.fechaRechazo | date:\\'dd/MM/yyyy\\'}}

Glosa Rechazo

{{vm.documento.glosaRechazo}}

Fecha Pago

{{vm.documento.fechaPago | date:\\'dd/MM/yyyy\\'}}

Banco

{{vm.documento.banco}}

Sucursal Banco

{{vm.documento.sucursal}}

Cuenta Corriente

{{vm.documento.cuentaCorriente}}

Nro. Comprobante

{{vm.documento.numeroComprobante}}

Monto Pago

{{vm.documento.montoPago | currency:$:0}}

0\\\" class=\\\"row\\\" style=\\\"margin-top:100px;\\\">

Tickets Asociados


TICKET ID {{ticket.ticketID}}

  • Autor: {{ticket.emailAutor}} el {{ticket.fechaIngreso | date:\\'dd/MM/yyyy\\'}}
    {{ticket.mensaje}}
  • 0\\\" class=\\\"list-group-item\\\">
    Respuesta enviada el {{ticket.respuestaFecha | date:\\'dd/MM/yyyy\\'}}
    {{ticket.respuesta}}

Contáctenos

Mediante nuestro formulario de contacto podrá realizar consultas respecto a este documento. Uno de nuestros analistas recibirá la información del documento y su mensaje, el cual será respondido a la dirección de correo que usted especifique.

Formulario Ticket Soporte


\");\n$templateCache.put(\"app/faq/faq-modal.html\",\"

Preguntas Frecuentes

\");\n$templateCache.put(\"app/faq/faq.html\",\"

\");\n$templateCache.put(\"app/login/login.html\",\"

Debe ingresar un nombre de usuario (RUT)

Debe ingresar una contraseña

¿OLVIDÓ SU CONTRASEÑA? REGÍSTRESE AQUÍ

{{vm.message}}

\");\n$templateCache.put(\"app/sendticket/sendticket.html\",\"

Debe ingresar un correo electrónico

Debe ingresar un correo electrónico válido

Mínimo de 20 caracteres en el mensaje

Debe ingresar un mensaje de al menos 20 caracteres

Debe ingresar un mensaje de al menos 20 caracteres

Debe ingresar un mensaje de máximo 250 caracteres

Importante: Debe ingresar los campos arriba descritos para poder enviar el mensaje

\");\n$templateCache.put(\"app/showcase/showcase.html\",\"

Typography

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Example body text

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

This line of text is meant to be treated as fine print.

The following snippet of text is rendered as bold text.

The following snippet of text is rendered as italicized text.

An abbreviation of the word attribute is attr.

Emphasis classes

Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod.

Donec ullamcorper nulla non metus auctor fringilla.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

Maecenas sed diam eget risus varius blandit sit amet non magna.

Blockquotes

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous in Source Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous in Source Title

Tables

#Column headingColumn headingColumn heading
1Column contentColumn contentColumn content
2Column contentColumn contentColumn content
3Column contentColumn contentColumn content
4Column contentColumn contentColumn content
5Column contentColumn contentColumn content
6Column contentColumn contentColumn content
7Column contentColumn contentColumn content

Forms

Legend
A longer block of help text that breaks onto a new line and may extend beyond one line.

$

Navs

Tabs

Raw denim you probably haven\\'t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

Food truck fixie locavore, accusamus mcsweeney\\'s marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.

Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney\\'s organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork.

Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater.

Breadcrumbs

  • Home

Indicators

Alerts

Warning!

Best check yo self, you\\'re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

Oh snap! Change a few things up and try submitting again.
Well done! You successfully read this important alert message.
Heads up! This alert needs your attention, but it\\'s not super important.

Labels

Default Primary Success Warning Danger Info

Progress bars

Basic

Contextual alternatives

Striped

Animated

Stacked

Containers

Jumbotron

This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

Learn more

List groups

Panels

Basic panel
Panel heading
Panel content
Panel content
Panel footer

Panel primary

Panel content

Panel success

Panel content

Panel warning

Panel content

Panel danger

Panel content

Panel info

Panel content

Wells

Look, I\\'m in a well!
Look, I\\'m in a small well!
Look, I\\'m in a large well!

Dialogs

Modals

Modal title

One fine body…

Popovers

Tooltips

Source Code

\");\n$templateCache.put(\"app/signup/signup.html\",\"

Registro en el Portal de Proveedores

Para poder operar en nuestro Portal ustede debe contar con un nombre de usuario (RUT Proveedor) y una contraseña. Al momento de iniciar el proceso de registro el sistema verificará que usted cuente con documentos disponibles para visualización. Una vez que se haya registrado exitosamente será redireccionado para que pueda iniciar sesión

Formulario Registro


0\\\">

{{vm.mensajeUsuario.mensaje}}

Debe ingresar un nombre de usuario

ATENCIÓN
Su contraseña debe contar con al menos:

  • 6 caracteres
  • Contener mayúsculas y minúsculas
  • Incluir un dígito (0-9)
  • Un caracter especial (%,#,-, etc.)

Ejemplo:Proveedor_123

Debe ingresar una contraseña

Debe confirmar contraseña

Passwords no coinciden

Debe ingresar razón social

Debe ingresar nombre de encargado

Debe ingresar email de encargado

Email ingresado no es válido

Debe ingresar cargo de encargado

0\\\" ng-class=\\\"(vm.savedSuccessfully) ? \\'alert alert-success\\' : \\'alert alert-danger\\'\\\" style=\\\"margin-top: 20px;\\\">

{{error}}

\");\n$templateCache.put(\"app/main/main.html\",\"

RAZÓN SOCIAL

{{vm.proveedorInfo.razonSocial}}

RUT PROVEEDOR

{{vm.authentication.userName}}

Administrador | Búsqueda por Proveedor

Usted está asignado con el rol de administrador del sistema por lo que puede consultar como cualquiera de los Proveedores con registros activos (documentos). Una vez seleccionado el proveedor puede utilizar el sistema de consultas con normalidad.

Debe ingresar como mínimo 3 caracteres, si la búsqueda no arroja resultados es porque no existen registros activos para el proveedor consultado
CONSULTANDO DOCUMENTOS COMO

{{vm.adminProveedor.title}}

{{vm.adminProveedor.description}}

{{vm.adminProveedor.emailUsuario}} | {{vm.adminProveedor.nombreEncargado}}

Búsqueda de Documentos


Búsqueda por Período

Desde {{vm.datePicker.date.startDate.format(\\'DD/MM/YYYY\\')}} hasta {{vm.datePicker.date.endDate.format(\\'DD/MM/YYYY\\')}} Click para seleccionar período específico

Nro. Factura

Fecha Pago

Resultados Búsqueda

Sin datos para mostrar

{{doc.rutProveedor}}{{doc.numeroFactura}}{{doc.fechaEmision | date:\\'yyyy-MM-dd\\'}}{{doc.fechaRecepcion | date:\\'yyyy-MM-dd\\'}}{{doc.montoTotal | currency:\\'$\\':0}}{{doc.montoPagado | currency:\\'$\\':0}}CONTABILIZADO PAGADO DEVUELTO RECHAZADO RECIBIDO{{doc.ticketsAsociados}} DETALLE
TOTALES{{vm.totalDocumentosEmitidos | currency:\\'$\\':0}}{{vm.totalDocumentosPagados | currency:\\'$\\':0}}
BACK TO TOP
\");\n$templateCache.put(\"app/test/test.html\",\"\");\n$templateCache.put(\"app/reportes/reportes.html\",\"

Ciclo de Vida Documentos

Performance Analistas

Tickets vs. Tiempo Respuesta

\");\n$templateCache.put(\"app/recuperarpassword/recuperarpassword.html\",\"

Recuperar su contraseña

Mediante este formulario podrá iniciar el proceso para reestablecer su contraseña. Primero debe ingresar su RUT de Proveedor para verificar que está actualmente registrado en el sistema, posteriormente se enviará un correo electrónico a la dirección asociada a su cuenta al momemnto de registrarse por primera vez al sistema. A su correo llegará un mensaje con las instrucciones pertinentes.

Ingrese RUT Proveedor


0\\\">

Debe ingresar un nombre de usuario

Usted está registrado como proveedor en nuestro portal, el correo con la información para reestablecer su contraseña será enviado a la siguiente dirección

{{vm.datosUsuario.emailUsuario}}

\");\n$templateCache.put(\"app/recuperarpassword/resetpassword.html\",\"

Ingreso de nueva constraseña

Usted ingresó a esta página mediante el correo electrónico que envió el Portal Proveedores Metso con el fin de reestablecer su contraseña. Ahora solo debe ingresar su nueva contraseña recordando que debe ser de al menos 6 caracteres, tener como mí un caracter especial (#, $, _,%, etc.) y contar con letras mayúsculas y minúsculas. Esto con el fin de velar por la seguridad e integridad de sus datos

Nueva Contraseña


ATENCIÓN
Su contraseña debe contar con al menos:

  • 6 caracteres
  • Contener mayúsculas y minúsculas
  • Incluir un dígito (0-9)
  • Un caracter especial (%,#,-, etc.)

Ejemplo:Proveedor_123

Debe ingresar una contraseña

Debe confirmar contraseña

Passwords no coinciden

0\\\" ng-class=\\\"(vm.savedSuccessfully) ? \\'alert alert-success\\' : \\'alert alert-danger\\'\\\" style=\\\"margin-top: 20px;\\\">

{{error}}

\");\n$templateCache.put(\"app/userdata/userdata.html\",\"

Este campo es obligatorio

Debe ser un correo electrónico válido

Este campo es obligatorio

Este campo es obligatorio

\");\n$templateCache.put(\"app/welcome/welcome.html\",\"

Metso Outotec ha contar del 01 de Junio, cambia de facturador electrónico; la nueva casilla de intercambio de documentos electrónicos, donde deberán ser enviados los documentos emitidos a Metso Outotec será dte.cl@einvoicing.signature-clud.com, favor modificar dicha información en sus plataformas electrónicas, para no sufrir inconvenientes en sus pagos futuros

Estimado Proveedor, recuerde que desde el 01/05/2021, todos los documentos deben ser emitidos a la razón social Metso Outotec Chile Spa, para mas información ingrese aqui

Bienvenido al Portal de Proveedores

Esta es una herramienta que Metso Outotec pone a disposición de nuestros proveedores con el objetivo de llevar un seguimiento del estado y situación de los documentos contables que hayan sido recepcionados por nuestro Departamento de Contabilidad

Para poder operar en el Portal de Proveedores Metso Outotec es necesario iniciar sesión con su cuenta de usuario. En caso de que no cuente con una por favor regístrese aquí

Iniciar Sesión


INFORMACION USUARIO

{{vm.userData.razonSocial}}

{{vm.userData.rutProveedor}}


EMAIL ENCARGADO

{{vm.userData.email}}

NOMBRE ENCARGADO

{{vm.userData.nombreEncargado}}

CARGO ENCARGADO

{{vm.userData.cargoEncargado}}

Este campo es obligatorio

Debe ser un correo electrónico válido

Este campo es obligatorio

Este campo es obligatorio

Información & Recursos


Preguntas Frecuentes

En caso de tener consultas en particular nos puede contactar vía correo electrónico o a nuestros teléfonos de contacto

Documentos y Manuales

En caso de tener consultas en particular nos puede contactar vía correo electrónico o a nuestros teléfonos de contacto

Horarios de Atención

Hoy {{vm.hoy.format(\\'dddd\\')}} {{vm.hoy.format(\\'D [de] MMMM [del] YYYY\\')}}, desde 9 a 18 horas

+56 32 227 0800

Hoy {{vm.hoy.format(\\'dddd\\')}} {{vm.hoy.format(\\'D [de] MMMM [del] YYYY\\')}}, desde 9 a 15 horas

+56 32 227 0800


INFORMACIÓN CONTACTO

http://www.mogroup.com

+56 32 227 0800

HORARIOS SEMANALES

Miércoles: Desde 9 a 18 horas

Viernes: Desde 9 a 15.30 horas

Debido a la emergencia nacional por el Covid 19 sólo se estarán atendiendo consultas a través del portal de proveedores de Metso Outotec

\");\n$templateCache.put(\"app/components/jumbotron/jumbotron.html\",\"

\");\n$templateCache.put(\"app/components/documentos/documentos.html\",\"
\");\n$templateCache.put(\"app/reportes/analistasperformance/analistas-performance.html\",\"

Esperando consulta para generar reporte. Performance Analistas

0\\\">
\");\n$templateCache.put(\"app/reportes/barraestado/barra-estado-main.html\",\"
DOCUMENTOS

{{$ctrl.barraEstadoInfo.documentosTotal}}

TOTAL SISTEMA
USUARIOS

{{$ctrl.barraEstadoInfo.usuariosRegistrados}}

REGISTRADOS
TICKETS

{{$ctrl.barraEstadoInfo.ticketsTotal}}

ABIERTOS {{$ctrl.barraEstadoInfo.ticketsAbiertos}} / CERRADOS {{$ctrl.barraEstadoInfo.ticketsCerrados}}
ÚLTIMA CARGA

{{$ctrl.barraEstadoInfo.ultimaCargaDatos | date:\\'dd/MM/yyyy HH:mm\\'}}

DESCARGAR DATOS
\");\n$templateCache.put(\"app/components/footer/footer.html\",\"
Metso Outotec Chile
Camino Internacional 5725
Con Con, Chile 2510 000
Metso Outotec
contacto.proveedores@metsoadm.cl
FORMULARIO CONTACTO

En caso de que su solicitud corresponda a alguna consulta o problema en nuestra plataforma de proveedores, por favor utilice este formulario

SÍGANOS

Siga a Metso Outocec en las redes sociales

PREGUNTAS FRECUENTES

Consulte las Preguntas Frecuentes en una ventana emergente sin perder su trabajo actual

0\\\">
EMPEZAR TUTORIAL

Para poder ver un paso a paso de los componentes de esta página

\");\n$templateCache.put(\"app/reportes/fixednavigator/fixednavigator.html\",\"
C P T
\");\n$templateCache.put(\"app/components/navbar/navbar.html\",\"\");\n$templateCache.put(\"app/components/jumbotron-v2/metsojumbo.html\",\"
\");\n$templateCache.put(\"app/reportes/mock/mock.html\",\"

CANTIDAD TOTAL DOCS

23696

CONTABILIZADOS

SUMA

456

PROMEDIO

456

PORCENTAJE

100%

NO CONTABILIZADOS

SUMA

456

PROMEDIO

456

PORCENTAJE

100%

\");\n$templateCache.put(\"app/reportes/detalledocumentomodal/detalle-documento-main.html\",\"

PROVEEDOR

{{$ctrl.documento.nombreProveedor}}

ANALISTA

{{$ctrl.documento.analista}}

RUT PROVEEDOR

{{$ctrl.documento.rut}}

FOLIO

{{$ctrl.documento.folio}}

= 8 }\\\">

PROMEDIO DÍAS

{{$ctrl.promedioDias}}

NÚMERO DOCUMENTO

{{$ctrl.documento.numeroFactura}}

FECHA EMISIÓN

{{$ctrl.documento.fechaEmision | date:\\'dd/MM/yyyy\\'}}

FECHA RECEPCION

{{$ctrl.documento.fechaRecepcion | date:\\'dd/MM/yyyy\\'}}

ESTADO

{{$ctrl.documento.estado}}

FECHA CONTABILIZACIÓN

{{$ctrl.documento.fechaContabilizacion | date:\\'dd/MM/yyyy\\'}}

MONTO TOTAL

{{$ctrl.documento.montoTotal | currency:\\'$\\':0}}

FECHA PAGO

{{$ctrl.documento.fechaPago | date:\\'dd/MM/yyyy\\'}}

NÚMERO OC

{{$ctrl.documento.numeroOc}}

\");\n$templateCache.put(\"app/reportes/ciclovida/ciclo-vida-main.html\",\"

Esperando consulta para generar reporte. Ciclo Vida Documentos

0\\\" style=\\\"background-color: #fff; margin-bottom: 20px; padding: 25px; min-height: 85px;\\\">
{{$ctrl.resumenTodosCiclos.totalDocsPeriodo}} TOTAL DOCS
{{$ctrl.resumenTodosCiclos.sumaContabilizados}} CONTABILIZADOS
{{$ctrl.resumenTodosCiclos.porcentajeContabilizados}} % CONTABILIZADOS
{{$ctrl.resumenTodosCiclos.sumaNoContabilizados}} NO CONTABILIZADOS
{{$ctrl.resumenTodosCiclos.porcentajeNoContabilizados}} PORCENTAJE
#{{$index + 1}}
{{$ctrl.momento(periodo.inicioPeriodo).utc().format(\\'D MMMM YYYY\\')}} {{$ctrl.momento(periodo.finPeriodo).utc().format(\\'D MMMM YYYY\\')}}
{{periodo.cantidadDocumentosTotal}} TOTAL DOCS
0\\\" style=\\\"margin-top: 2px;\\\">
{{periodo.totalMontoPagados | currency : \\'$\\' : 0}} MONTO TOTAL PAGOS

CONTABILIZADOS

{{periodo.resumenContabilizados.cantidadDocumentos}} CANTIDAD
{{periodo.resumenContabilizados.promedioDias | number:2}} PROMEDIO DÍAS
{{$ctrl.calcularPorcentaje(periodo.resumenContabilizados.cantidadDocumentos, periodo.cantidadDocumentosTotal)}} PORCENTAJE
VARIACIÓN PROMEDIO DÍAS CONTABILIZADOS PERÍODOS ANTERIORES
#{{$index + 2}} 0 }\\\">{{res | number:1}}%

NO CONTABILIZADOS

{{periodo.resumenNoContabilizados.cantidadDocumentos}} SIN CONTABILIZAR
{{periodo.resumenNoContabilizados.promedioDias | number:2}} SIN CONT. PROMEDIO DIAS
{{$ctrl.calcularPorcentaje(periodo.resumenNoContabilizados.cantidadDocumentos, periodo.cantidadDocumentosTotal)}} PORCENTAJE
VARIACIÓN PROMEDIO DÍAS NO CONTABILIZADOS PERÍODOS ANTERIORES
#{{$index + 2}} 0 }\\\">{{res | number:1}}%
RECIBIDOS EN PERIODO CONTABILIZADOS SOBRE KPI
RECIBIDOS EN PERIODO NO CONTABILIZADOS
DOCUMENTOS PAGADOS RECIBIDOS PERIODO
\");\n$templateCache.put(\"app/reportes/ciclovida/detalle-documento.modal.html\",\"

Detalle Documento

\");\n$templateCache.put(\"app/reportes/tickets/detalleticketmodal/detalle-ticket-main.html\",\"

PROVEEDOR

{{$ctrl.ticketData.nombreProvedor}}

ANALISTA

{{$ctrl.ticketData.encargado}}

FECHA INGRESO

{{$ctrl.ticketData.fechaIngreso | date:\\\"dd/MM/yyyy HH:mm\\\"}}

AUTOR TICKET

{{$ctrl.ticketData.emailAutor}}

ESTADO TICKET

{{$ctrl.ticketData.ticketEstado}}

RUT PROVEEDOR

{{$ctrl.ticketData.rutProveedor}}

NUMERO FACTURA

{{$ctrl.ticketData.numeroFactura}}

ESTADO FACTURA

{{$ctrl.ticketData.facturaEstado}}

DESDE FORMULARIO

No

Sin Info

0\\\">

Asunto

{{$ctrl.ticketData.asunto}}

Mensaje

{{$ctrl.ticketData.mensaje}}

\");\n$templateCache.put(\"app/reportes/tickets/ticketsrespuesta/detalle-ticket.modal.html\",\"

Detalle Ticket

\");\n$templateCache.put(\"app/reportes/tickets/ticketsrespuesta/tickets-respuesta-grid.html\",\"
Nombre ProveedorRut ProveedorResponsableFecha IngresoDetalles
{{$ticket.nombreProvedor}}{{$ticket.rutProveedor}}{{$ticket.encargado}}{{$ticket.fechaIngreso | date:\\\"dd/MM/yyyy HH:mm\\\"}}VER DETALLES
\");\n$templateCache.put(\"app/reportes/tickets/ticketsrespuesta/tickets-respuesta.html\",\"

Esperando consulta para generar reporte. Tickets vs. Respuesta

0\\\" style=\\\"background-color: #fff; margin-bottom: 20px; padding: 25px; min-height: 85px;\\\">
{{$ctrl.resumenConsulta.totalTickets}} TICKETS PERÍODO
{{$ctrl.resumenConsulta.totalCantidadAnalistas}} ANALISTAS
{{$ctrl.resumenConsulta.totalTicketsCerrados}} CERRADOS
{{$ctrl.resumenConsulta.totalTicketsAbiertos}} ABIERTOS
0\\\">
0\\\">
TICKETS ABIERTOS
\");}]);"],"sourceRoot":"/source/"}