{"version":3,"sources":["webpack:///./src/views/programs/kof/components/analytics/CollectionsDashboard.vue?14ed","webpack:///./src/modules/enums/CreditStatusEnum.js","webpack:///./src/components/mixins/formatHelper.js","webpack:///./src/views/programs/kof/components/analytics/CollectionsDashboard.vue","webpack:///src/views/programs/kof/components/analytics/CollectionsDashboard.vue","webpack:///./src/views/programs/kof/components/analytics/CollectionsDashboard.vue?93aa","webpack:///./src/views/programs/kof/components/analytics/CollectionsDashboard.vue?694e"],"names":["CreditStatusEnum","Object","freeze","DEFAULT_VALUE","AL_CORRIENTE","EN_PERIODO_GRACIA","RETRASADO_11_30","RETRASADO_31_60","RETRASADO_61_90","VENCIDO","methods","format_price","value","decimales","val","toFixed","replace","toString","costFormat","this","costFormatNoCents","prcgFormat","decimalsFormat","explicitMoneyFormat","mxnFormat","parseInt","moneyFormat","decimalPercentFormat","roundedFormat","c","cd","Math","round","phoneFormat","substr","phoneFormatV2","visibleLastNChars","chars","valueString","length","phoneLength","firstChars","repeat","last4Digits","slice","visibleOnlyLastNChars","capitalizeFirstLetter","arr","split","i","charAt","toUpperCase","join","isValidRfcFormat","rfc","patternPM","patternPF","match","isValidRfcFormatByPersonType","isMoral","pattern","genericRFC1","genericRFC2","isValidCurpFormat","curp","isValid","diccionario","lngSuma","lngDigito","indexOf","verifierDigit","anonymousFormatPhone","genderTranslate","getLoanTypeIcon","loanType","loanTypeIcons","id","url","filename","icon","find","lt","getAmountWithNoCommissionTax","amount","processingAdministrationCommission","mexicoTaxIva","commissionWithTaxPercentage","percentage","amountNoCommision","render","_vm","_c","_self","attrs","staticClass","_v","programIdSelected","on","$event","addFilter","model","zoneIdSelected","callback","$$v","expression","_l","programSelected","zones","zone","key","name","_e","zoneSelected","regions","regionIdSelected","region","stopPropagation","getGlobalPortfolio","ref","data","showProjects","scopedSlots","_u","fn","tr","indextr","_s","nombre","cantidad","monto","insoluto","cartera","carteraAsc","creditStatus","vencido","staticStyle","carteraDesc","total","statusSelected","slot","columns","col","idx","sortable","title","staticRenderFns","props","mixins","saldo","porVencer","amortizaciones","intereses","recargos","iva","filters","programs","catch","error","console","computed","watch","component"],"mappings":"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","file":"js/chunk-31353b0f.2004569e.js","sourcesContent":["export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollectionsDashboard.vue?vue&type=style&index=0&id=5ae90d42&prod&scoped=true&lang=css&\"","const CreditStatusEnum = Object.freeze({\n    DEFAULT_VALUE: null,\n    AL_CORRIENTE: '0_up_to_date',\n    EN_PERIODO_GRACIA: '1_10_grace_period',\n    RETRASADO_11_30: '11_30_delayed',\n    RETRASADO_31_60: '31_60_delayed',\n    RETRASADO_61_90: '61_90_delayed',\n    VENCIDO: '91_or_more'\n});\nexport default CreditStatusEnum;","export default {\n  methods: {\n    format_price(value, decimales = 0) {\n      let val = (value / 1).toFixed(decimales).replace(\",\", \".\");\n      return val.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    },\n    costFormat(value) {\n      if (!value) { return \"$0\"; }\n      if (value == \"Pendiente\") { return value; }\n      else {\n        return \"$\" + this.format_price(value, 2);\n      }\n    },\n    costFormatNoCents(value) {\n      if (!value) { return \"$0\"; }\n      if (value === \"Pendiente\") { return value; }\n      else return \"$\" + this.format_price(value);\n    },\n    prcgFormat(value, decimales = 0) {\n      if (!value) { return \"0%\"; }\n      if (value == \"Pendiente\") { return value; }\n      else { return value.toFixed(decimales) + \"%\"; }\n    },\n    decimalsFormat(value, decimales = 0) {\n      if (!value) { return 0; }\n      if (value == \"Pendiente\") { return 0; }\n      else { return value.toFixed(decimales); }\n    },\n    explicitMoneyFormat(value, decimales = 2) {\n      if (value == null) return \"\";\n      else {\n        return \"$\" + this.format_price(value, decimales);\n      }\n    },\n    mxnFormat(value, decimales = 0) {\n      if (!value) { return \"$0MXN\"; }\n      else {\n        return \"$\" + this.format_price(parseInt(value), decimales) + \" MXN\";\n      }\n    },\n    moneyFormat(value) {\n      if (!value) { return \"$0\"; }\n      else {\n        return \"$\" + this.format_price(parseInt(value), 0);\n      }\n    },\n    decimalPercentFormat(value, decimales = 2) {\n      if (!value) return \"0%\";\n      else {\n        return (value * 100).toFixed(decimales) + \"%\";\n      }\n    },\n    roundedFormat(value, decimales = 2) {\n      if (!value) { return 0; }\n      else {\n        let c = value.toFixed(decimales);\n        let cd = Math.round(c);\n        return cd.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n      }\n    },\n    phoneFormat(value) {\n      if (!value) return value\n      else {\n        return '(' + value.substr(0, 2) + ') ' + value.substr(2, 4) + '-' + value.substr(6, 4)\n      }\n    },\n    phoneFormatV2(value) {\n      if (!value) return value\n      else {\n        return '(' + value.substr(0, 3) + ') ' + value.substr(2, 3) + ' ' + value.substr(6, 4)\n      }\n    },\n    visibleLastNChars(value, chars = 4) {\n      if (!value) return value\n      else {\n        let valueString = value.toString();\n        if (chars > valueString.length || chars < 0) return value\n        else {\n          let phoneLength = valueString.length;\n          const firstChars = \"*\".repeat(phoneLength - chars);\n          const last4Digits = valueString.slice(firstChars.length);\n          return firstChars + last4Digits;\n        }\n      }\n    },\n    visibleOnlyLastNChars(value, chars = 4) {\n      if (!value) return value\n      else {\n        let valueString = value.toString();\n        if (chars > valueString.length || chars < 0) return value\n        else {\n          return valueString.slice(-4);\n        }\n      }\n    },\n    capitalizeFirstLetter(value) {\n      if (!value) return value\n      else {\n        const arr = value.split(\" \");\n        for (let i = 0; i < arr.length; i++) {\n          arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);\n\n        }\n\n        return arr.join(\" \");\n      }\n    },\n    //Función para validar un RFC\n    isValidRfcFormat(rfc) {\n      if(rfc) {\n        const patternPM = \"^(([A-ZÑ&]{3})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\\\d])|[3][01])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{3})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\\\d])|[3][0])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{3})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\\\d])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{3})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$\";\n        const patternPF = \"^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\\\d])|[3][01])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\\\d])|[3][0])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\\\d])([A-Z0-9]{3}))|\" +\n          \"(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$\";\n        return rfc.match(patternPM) || rfc.match(patternPF);\n      } else {\n        return false;\n      }\n    },\n    //Función para validar un RFC por tipo de persona\n    isValidRfcFormatByPersonType(rfc, isMoral) {\n      if(rfc) {\n        // Formato para PF\n        let pattern = /^[A-Z]{4}(\\d{2})((0[13578]|1[02])([0-2]\\d|3[01])|(0[469]|11)([0-2]\\d|30)|(02)([0-2]\\d))([A-Z0-9]{3})$/;\n        let genericRFC1 = \"XAXX010101000\";\n        let genericRFC2 = \"XEXX010101000\";\n        if(isMoral) {\n          // Formato para PM\n          pattern = /^[A-Z]{3}(\\d{2})((0[13578]|1[02])([0-2]\\d|3[01])|(0[469]|11)([0-2]\\d|30)|(02)([0-2]\\d))([A-Z0-9]{3})$/;\n        }\n\n        return rfc.match(pattern) &&  rfc != genericRFC1 && rfc != genericRFC2;\n      } else {\n        return false;\n      }\n    },\n    //Función para validar una CURP\n    isValidCurpFormat(curp) {\n      if(curp) {\n        const pattern = /^([A-Z][AEIOUX][A-Z]{2}\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])[HM](?:AS|B[CS]|C[CLMSH]|D[FG]|G[TR]|HG|JC|M[CNS]|N[ETL]|OC|PL|Q[TR]|S[PLR]|T[CSL]|VZ|YN|ZS)[B-DF-HJ-NP-TV-Z]{3}[A-Z\\d])(\\d)$/;\n        let isValid = curp.match(pattern);\n        if (!isValid)  //Coincide con el formato general?\n          return false;\n        //Fuente https://consultas.curp.gob.mx/CurpSP/\n        let diccionario = \"0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ\";\n        let lngSuma = 0.0;\n        let lngDigito = 0.0;\n        for (let i = 0; i < 17; i++) {\n          lngSuma = lngSuma + diccionario.indexOf(isValid[1].charAt(i)) * (18 - i);\n        }\n        lngDigito = 10 - lngSuma % 10;\n        let verifierDigit = (lngDigito != 10) ? lngDigito : 0;\n        return isValid[2] == verifierDigit;\n      } else {\n        return false;\n      }\n    },\n    anonymousFormatPhone(value){\n      if (value === \"\") return value\n      else {\n        return value.replace(/^(?:\\D*\\d){8}/g, \"********\");\n      }\n    },\n    genderTranslate(value) {\n      return value == 1 ? \"Hombre\" : \"Mujer\";\n    },\n    //Función para obtener el icono del tipo de proyecto o todos con el param 'all'\n    getLoanTypeIcon(loanType) {\n      const loanTypeIcons = [\n        {\n          id: 1,\n          url: \"https://cdn.redgirasol.com/nuevo_portal/icons/icon-inv-solar.png\",\n          filename: \"Crédito Solar\"\n        },\n        {\n          id: 4,\n          url: \"https://cdn.redgirasol.com/nuevo_portal/icons/icon-inv-pyme.png\",\n          filename: \"Crédito PyME\"\n        },\n        {\n          id: 5,\n          url: \"https://cdn.redgirasol.com/nuevo_portal/icons/icon-inv-pers.png\",\n          filename: \"Crédito Personal\"\n        },\n        {\n          id: 6,\n          url: \"https://cdn.redgirasol.com/nuevo_portal/icons/icon-inv-auto.png\",\n          filename: \"Crédito Automotriz\"\n        }\n      ];\n\n      if (loanType == \"all\") {\n        return loanTypeIcons;\n      } else {\n        let icon = loanTypeIcons.find(lt => lt.id === loanType);\n        let url = \"https://cdn.redgirasol.com/nuevo_portal/icons/icon-inv-solar.png\";\n        if (icon) {\n          url = icon.url;\n        }\n        return url;\n      }\n    },\n    getAmountWithNoCommissionTax(amount){\n      if (amount <= 0) {\n        return 0;\n      }\n      const processingAdministrationCommission = .02;\n      const mexicoTaxIva = .16;\n      let commissionWithTaxPercentage = processingAdministrationCommission*mexicoTaxIva;\n      let percentage = (1+processingAdministrationCommission+commissionWithTaxPercentage);\n      let amountNoCommision = amount/percentage;\n      return amountNoCommision;\n    }\n  }\n}","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"collections-dashboard\"}},[_c('div',{staticClass:\"vx-row\"},[_c('div',{staticClass:\"vx-col w-full mb-6\"},[_c('vx-card',{staticClass:\"big-title-card-bg-black h-auto\"},[_c('h1',{staticClass:\"rg-big-title extrabold rg-title\"},[_vm._v(\" Desempeño de la \"),_c('span',[_vm._v(\"cobranza\")]),_vm._v(\". \")])])],1),_c('div',{staticClass:\"vx-col w-full\"},[_c('div',{staticClass:\"vx-row\"},[_c('div',{staticClass:\"vx-col w-full\"},[_c('vx-card',{attrs:{\"title\":\"Filtros.\"}},[_c('div',{staticClass:\"flex pl-2 mb-4\"},[(_vm.programIdSelected !== null)?_c('vs-select',{staticClass:\"mr-2\",attrs:{\"label\":\"Zonas\"},on:{\"change\":function($event){return _vm.addFilter('zone_id', $event)}},model:{value:(_vm.zoneIdSelected),callback:function ($$v) {_vm.zoneIdSelected=$$v},expression:\"zoneIdSelected\"}},[_c('vs-select-item',{attrs:{\"text\":\"Todas\",\"value\":\"0\"}}),_vm._l((_vm.programSelected.zones),function(zone){return _c('vs-select-item',{key:zone.id,attrs:{\"text\":zone.name,\"value\":zone.id}})})],2):_vm._e(),_c('vs-select',{attrs:{\"disabled\":_vm.zoneIdSelected === 0 && _vm.zoneSelected.regions.length < 0,\"label\":\"Regiones\"},on:{\"change\":function($event){return _vm.addFilter('region_id', $event)}},model:{value:(_vm.regionIdSelected),callback:function ($$v) {_vm.regionIdSelected=$$v},expression:\"regionIdSelected\"}},[_c('vs-select-item',{attrs:{\"text\":\"Todas\",\"value\":\"0\"}}),_vm._l((_vm.zoneSelected.regions),function(region){return _c('vs-select-item',{key:region.id,attrs:{\"text\":region.name,\"value\":region.id}})})],2),_c('vs-button',{staticClass:\"mt-6 ml-4\",attrs:{\"type\":\"filled\",\"icon\":\"search\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.getGlobalPortfolio(0)}}})],1),_c('vs-table',{ref:\"statusTable\",staticClass:\"text-right\",attrs:{\"data\":_vm.data,\"noDataText\":\"No hay datos disponibles\"},on:{\"selected\":_vm.showProjects},scopedSlots:_vm._u([{key:\"default\",fn:function({ data }){return [_vm._l((data),function(tr,indextr){return _c('vs-tr',{key:indextr,attrs:{\"data\":tr}},[_c('vs-td',{staticClass:\"small bold\"},[_vm._v(_vm._s(tr.nombre))]),_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(tr.cantidad))]),_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(_vm.costFormatNoCents(tr.monto)))]),_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(_vm.costFormatNoCents(tr.insoluto)))]),_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(_vm.prcgFormat(tr.cartera * 100, 2)))]),_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(_vm.prcgFormat(tr.carteraAsc * 100, 2)))]),(tr.creditStatus == _vm.vencido)?_c('vs-td',{staticClass:\"small bold\",staticStyle:{\"color\":\"red\"}},[_vm._v(_vm._s(_vm.prcgFormat(tr.carteraDesc * 100, 2)))]):_c('vs-td',{staticClass:\"small\"},[_vm._v(_vm._s(_vm.prcgFormat(tr.carteraDesc * 100, 2)))])],1)}),_c('vs-tr',{attrs:{\"state\":\"dark\"}},[_c('vs-td',{staticClass:\"small bold\"},[_vm._v(\"Total\")]),_c('vs-td',{staticClass:\"small bold\"},[_vm._v(_vm._s(_vm.total.cantidad))]),_c('vs-td',{staticClass:\"small bold\"},[_vm._v(_vm._s(_vm.costFormatNoCents(_vm.total.monto)))]),_c('vs-td',{staticClass:\"small bold\"},[_vm._v(_vm._s(_vm.costFormatNoCents(_vm.total.insoluto)))]),_c('vs-td',{staticClass:\"small bold\"},[_vm._v(_vm._s(_vm.prcgFormat(_vm.total.cartera * 100, 2)))]),_c('vs-td'),_c('vs-td')],1)]}}]),model:{value:(_vm.statusSelected),callback:function ($$v) {_vm.statusSelected=$$v},expression:\"statusSelected\"}},[_c('template',{slot:\"thead\"},_vm._l((_vm.columns),function(col,idx){return _c('vs-th',{key:idx,staticClass:\"bold\",attrs:{\"sort-key\":col.sortable ? col.key : null}},[_vm._v(_vm._s(col.title))])}),1)],2)],1)],1)])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n    <div id=\"collections-dashboard\"> \n        <div class=\"vx-row\">\n            <div class=\"vx-col w-full mb-6\">\n                <vx-card class=\"big-title-card-bg-black h-auto\">\n                    <h1 class=\"rg-big-title extrabold rg-title\">\n                        Desempeño de la <span>cobranza</span>.\n                    </h1>\n                </vx-card>\n            </div>\n            <div class=\"vx-col w-full\">\n                <div class=\"vx-row\">\n                    <div class=\"vx-col w-full\">\n                        <vx-card title=\"Filtros.\">\n                            <div class=\"flex pl-2 mb-4\">\n                                <vs-select\n                                    v-if=\"programIdSelected !== null\"\n                                    label=\"Zonas\"\n                                    v-model=\"zoneIdSelected\"\n                                    @change=\"addFilter('zone_id', $event)\"\n                                    class=\"mr-2\">\n                                    <vs-select-item text=\"Todas\" value=\"0\"></vs-select-item>\n                                    <vs-select-item\n                                        v-for=\"zone in programSelected.zones\"\n                                        :text=\"zone.name\"\n                                        :key=\"zone.id\"\n                                        :value=\"zone.id\"></vs-select-item>\n                                </vs-select>\n\n                                <vs-select\n                                    :disabled=\"zoneIdSelected === 0 && zoneSelected.regions.length < 0\"\n                                    label=\"Regiones\"\n                                    v-model=\"regionIdSelected\"\n                                    @change=\"addFilter('region_id', $event)\">\n                                    <vs-select-item text=\"Todas\" value=\"0\"></vs-select-item>\n                                    <vs-select-item\n                                        v-for=\"region in zoneSelected.regions\"\n                                        :text=\"region.name\"\n                                        :key=\"region.id\"\n                                        :value=\"region.id\"></vs-select-item>\n                                </vs-select>\n                                <vs-button @click.stop=\"getGlobalPortfolio(0)\" type=\"filled\" class=\"mt-6 ml-4\" icon=\"search\"></vs-button>\n                            </div>\n                            <vs-table\n                                ref=\"statusTable\"\n                                :data=\"data\"\n                                noDataText=\"No hay datos disponibles\"\n                                v-model=\"statusSelected\"\n                                @selected=\"showProjects\"\n                                class=\"text-right\"\n                            >\n                                <template slot=\"thead\">\n                                    <vs-th class=\"bold\" v-for=\"(col, idx) in columns\" v-bind:key=\"idx\" :sort-key=\"col.sortable ? col.key : null\" >{{col.title}}</vs-th>\n                                </template>\n\n                                <template slot-scope=\"{ data }\">\n                                    <vs-tr\n                                        :key=\"indextr\"\n                                        v-for=\"(tr, indextr) in data\"\n                                        :data=\"tr\"\n                                    >\n                                    <vs-td class=\"small bold\">{{ tr.nombre }}</vs-td>\n                                    <vs-td class=\"small\">{{ tr.cantidad }}</vs-td>\n                                    <vs-td class=\"small\">{{ costFormatNoCents(tr.monto) }}</vs-td>\n                                    <vs-td class=\"small\">{{ costFormatNoCents(tr.insoluto) }}</vs-td>\n                                    <vs-td class=\"small\">{{ prcgFormat(tr.cartera * 100, 2) }}</vs-td>\n                                    <vs-td class=\"small\">{{ prcgFormat(tr.carteraAsc * 100, 2) }}</vs-td>\n                                    <vs-td v-if=\"tr.creditStatus == vencido\" class=\"small bold\" style=\"color:red \">{{ prcgFormat(tr.carteraDesc * 100, 2) }}</vs-td>\n                                    <vs-td v-else class=\"small\">{{ prcgFormat(tr.carteraDesc * 100, 2) }}</vs-td>\n                                    </vs-tr>\n\n                                    <vs-tr state=\"dark\">\n                                    <vs-td class=\"small bold\">Total</vs-td>\n                                    <vs-td class=\"small bold\">{{ total.cantidad }}</vs-td>\n                                    <vs-td class=\"small bold\">{{ costFormatNoCents(total.monto) }}</vs-td>\n                                    <vs-td class=\"small bold\">{{ costFormatNoCents(total.insoluto) }}</vs-td>\n                                    <vs-td class=\"small bold\">{{ prcgFormat(total.cartera * 100, 2) }}</vs-td>\n                                    <vs-td />\n                                    <vs-td />\n                                    </vs-tr>\n                                </template>\n                            </vs-table>\n                        </vx-card>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script lang=\"js\">\nimport formatHelper from \"@mixins/formatHelper\";\nimport CreditStatusEnum from \"@/modules/enums/CreditStatusEnum\";\n\nconst columns = [\n    { title: \"\", key: \"blank\", sortable: false }\n    , { title: \"PROYECTOS\", key: \"projects\", sortable: false }\n    , { title: \"IMPORTE FINANCIADO\", key: \"financed_amount\", sortable: false }\n    , { title: \"SALDO INSOLUTO\", key: \"outstanding_balance\", sortable: false }\n    , { title: \"CARTERA\", key: \"wallet\", sortable: false }\n    , { title: \"CARTERA DESCENDENTE\", key: \"wallet_desc\", sortable: false }\n    , { title: \"CARTERA ASCENDENTE\", key: \"wallet_asc\", sortable: false }\n]\n\nexport default  {\n    name: 'cartera-estatus',\n    props: [],\n    mixins: [formatHelper, CreditStatusEnum],\n    async mounted() {\n        await this.getGlobalPortfolio(0);\n        const {data} = await axios.get(`/api/pgm/me/programs`)\n        this.programs = data;\n    },\n    data() {\n        return {\n            vencido: CreditStatusEnum.VENCIDO,\n            columns: columns,\n            data: [],\n            total: {\n                cantidad: 0,\n                monto: 0,\n                saldo: 0,\n                porVencer: 0,\n                vencido: 0,\n                insoluto: 0,\n                amortizaciones: 0,\n                intereses: 0,\n                recargos: 0,\n                iva: 0,\n                cartera: 0,\n            }\n            , filters: {}\n            , programs: []\n            , zoneIdSelected: 0\n            , regionIdSelected: 0\n        }\n    },\n    methods: {\n        async getGlobalPortfolio(){\n            this.data = [];\n            this.showLoading(true);\n            await axios.get(`/api/kof/get/pgm-potential-applicants/collections?region=${this.regionIdSelected}&programId=${this.programIdSelected}`).then((response) => {\n                this.data = response.data;\n                this.showLoading(false);\n            }).catch(error => {\n                console.log(error);\n                    this.showLoading(false);\n                    // Vue.toasted.show('Ha ocurrido un error intente mas tarde.', { position: 'bottom-center', type:'error', closeOnSwipe: true, duration: 2000})\n            });\n        },\n        async addFilter(filterName, ev) {\n            if (ev.toString() === \"0\") {\n                delete this.filters[filterName];\n            } else {\n                this.filters[filterName] = ev.toString();\n            }\n\n            if(filterName == \"zone_id\" && ev.toString() === \"0\"){\n                this.zoneIdSelected = 0;\n                this.regionIdSelected = 0;\n            }\n        },\n    },\n    computed: {\n        programSelected() {\n            let program = this.programs.filter(p => p.id === this.programIdSelected)\n            return program[0] ?? null;\n        },\n        zoneSelected() {\n            let zone = this.programSelected.zones.filter(z => z.id === this.zoneIdSelected)\n            return zone[0] ?? {regions: []};\n        },\n        programIdSelected () {\n            return this.currentProgramData.id;\n        }\n    },\n    watch: {\n        data:function () {\n            const total = this.total;\n            total.cantidad = 0;\n            total.monto = 0;\n            total.saldo = 0;\n            total.porVencer = 0;\n            total.vencido = 0;\n            total.insoluto = 0;\n            total.amortizaciones = 0;\n            total.intereses = 0;\n            total.recargos = 0;\n            total.iva = 0;\n            total.cartera = 0;\n            this.data.forEach(function (item){\n                total.cantidad += item.cantidad;\n                total.monto += item.monto;\n                total.saldo += item.saldo;\n                total.porVencer += item.porVencer;\n                total.vencido += item.vencido;\n                total.insoluto += item.insoluto;\n                total.amortizaciones += item.amortizaciones;\n                total.intereses += item.intereses;\n                total.recargos += item.recargos;\n                total.iva += item.iva;\n                total.cartera += item.cartera;\n            });\n        }\n    }\n}\n</script>\n<style scoped>\n    #collections-dashboard td {\n        border-left: 1px solid #ebecf0 !important;\n    }\n    #collections-dashboard th {\n        border-left: 1px solid #ebecf0 !important;\n    }\n</style>","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollectionsDashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollectionsDashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CollectionsDashboard.vue?vue&type=template&id=5ae90d42&scoped=true&\"\nimport script from \"./CollectionsDashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./CollectionsDashboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CollectionsDashboard.vue?vue&type=style&index=0&id=5ae90d42&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5ae90d42\",\n  null\n  \n)\n\nexport default component.exports"],"sourceRoot":""}