{
    "type": "Ext.grid.Panel",
    "reference": {
        "name": "items",
        "type": "array"
    },
    "codeClass": null,
    "userConfig": {
        "id": "gridResumen",
        "itemId": "gridResumen",
        "designer|userClassName": "gridResumen",
        "designer|userAlias": "gridresumen",
        "title": null,
        "lockedGridConfig": [
            "{\r",
            "    border: false}"
        ],
        "lockedViewConfig": [
            "{\r",
            "    scroll: false}"
        ],
        "normalGridConfig": [
            "{\r",
            "    scroll: 'both',\r",
            "    border: false\r",
            "\r",
            "}"
        ],
        "columnLines": true
    },
    "designerId": "85be94f2-352b-4586-a28c-c3cae1276e98",
    "cn": [
        {
            "type": "Ext.grid.View",
            "reference": {
                "name": "viewConfig",
                "type": "object"
            },
            "codeClass": null,
            "designerId": "336ff7d7-120c-46a0-b5f7-2edaf926aba8"
        },
        {
            "type": "Ext.grid.column.Number",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "hidden": true,
                "dataIndex": "id_vinculo",
                "lockable": true,
                "locked": true,
                "text": "Id_vinculo"
            },
            "designerId": "aa1fbd11-4406-40ab-8b29-de52bfe26550"
        },
        {
            "type": "Ext.grid.column.Column",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "width": 65,
                "dataIndex": "indiv_dni",
                "lockable": true,
                "locked": true,
                "text": "D.N.I."
            },
            "designerId": "600d5a12-07ad-441e-804d-e625d641ac0a"
        },
        {
            "type": "Ext.grid.column.Column",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "minWidth": 180,
                "dataIndex": "nombre_persona",
                "lockable": true,
                "locked": true,
                "text": "Apellidos y nombres",
                "flex": 2
            },
            "designerId": "9e175aad-f908-4a61-981d-761763f42b23"
        },
        {
            "type": "Ext.grid.column.Column",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "minWidth": 150,
                "dataIndex": "cargo",
                "lockable": true,
                "locked": true,
                "text": "Cargo",
                "flex": 1
            },
            "designerId": "dbdd5d95-f6aa-4f22-93a9-57eef9f392fc"
        },
        {
            "type": "Ext.grid.column.Column",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "minWidth": 90,
                "dataIndex": "situacionlaboral",
                "lockable": true,
                "locked": true,
                "text": "Situac. Laboral",
                "flex": 1
            },
            "designerId": "5f38a026-89b6-46ec-aa7b-d986d1e5cb61"
        },
        {
            "type": "Ext.grid.column.Column",
            "reference": {
                "name": "columns",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "minWidth": null,
                "width": 40,
                "dataIndex": "jornada",
                "lockable": true,
                "locked": true,
                "text": "Jorn",
                "flex": null
            },
            "designerId": "07c0384e-818f-4907-9ce2-5383aebde83c"
        },
        {
            "type": "Ext.toolbar.Toolbar",
            "reference": {
                "name": "dockedItems",
                "type": "array"
            },
            "codeClass": null,
            "userConfig": {
                "dock": "top",
                "height": 35
            },
            "designerId": "84436fa4-847b-4496-ae93-f0da88dbf93f",
            "cn": [
                {
                    "type": "Ext.form.Label",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "itemId": "txtInstitucion",
                        "text": null
                    },
                    "designerId": "ff90f925-54fd-495a-af3b-699f6471e348"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "75f99568-689a-47eb-b214-2eb7b443f739"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "feae33aa-3f64-4508-b258-dedeb8256496"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "6ef4b3b5-a22c-40d4-8eb0-4e07923a614d"
                },
                {
                    "type": "Ext.form.Label",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "itemId": "txtNivel",
                        "text": null
                    },
                    "designerId": "637814fa-146e-4ded-a107-d261d1fdb0e6"
                },
                {
                    "type": "Ext.form.Label",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "hidden": true,
                        "itemId": "txtie",
                        "text": null
                    },
                    "designerId": "c3a403c1-2307-46c1-afc6-6fa51e2f883a"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "c8053486-d8c1-46fb-b00c-e9f4fdd7e23e"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "38eda7d2-4e68-45b3-b36c-ca064c3eabbf"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "d95915a5-42ec-4bbd-8f81-242042b6c7a4"
                },
                {
                    "type": "Ext.form.field.ComboBox",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "autoRender": false,
                        "id": "id_meses1",
                        "margin": "0 0 0 15",
                        "width": 152,
                        "fieldLabel": "Mes",
                        "labelAlign": "right",
                        "labelWidth": 40,
                        "name": "id_meses",
                        "value": [
                            "new Date().getMonth() + 1"
                        ],
                        "enableKeyEvents": true,
                        "selectOnFocus": true,
                        "editable": false,
                        "displayField": "nombre_meses",
                        "store": "meses",
                        "typeAhead": true,
                        "valueField": "id_meses"
                    },
                    "designerId": "305dee73-d84d-4457-b537-534e6a53819a",
                    "cn": [
                        {
                            "type": "basiceventbinding",
                            "reference": {
                                "name": "listeners",
                                "type": "array"
                            },
                            "codeClass": null,
                            "userConfig": {
                                "fn": "onId_meses1AfterRender",
                                "implHandler": [
                                    "var v = new Date().getMonth() + 1; // 1..12\r",
                                    "var s = component.getStore();\r",
                                    "if (!s) return;\r",
                                    "// Si el store no está cargado, espera a que cargue\r",
                                    "if (s.isLoading()) {\r",
                                    "    s.on('load', function(){ component.setValue(v); }, { single:true });\r",
                                    "} else if (s.getCount() === 0 && s.load) {\r",
                                    "    s.load(function(){ component.setValue(v); });\r",
                                    "} else {\r",
                                    "    component.setValue(v);\r",
                                    "}\r",
                                    ""
                                ],
                                "name": "afterrender",
                                "scope": "me"
                            },
                            "designerId": "989aa70e-7398-4c3a-821b-365e52cbe79c"
                        }
                    ]
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "19e21a68-6c4a-4871-a3a0-0940305bf502"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "a4c6ba4c-0dd6-4c32-9f00-68e64bd7ae2a"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "b7faf97c-7eed-4758-bf67-9132f67f8e3b"
                },
                {
                    "type": "Ext.form.field.Number",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "id": "anio1",
                        "width": 107,
                        "fieldLabel": "Año",
                        "labelAlign": "right",
                        "labelWidth": 40,
                        "submitValue": false,
                        "value": [
                            "new Date().getFullYear()"
                        ],
                        "maxValue": 2030,
                        "minValue": 2025
                    },
                    "designerId": "ef477da0-8684-48b2-bf76-20b52f1fc765"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "9a83fa33-7e6e-45b4-8a69-3f0be07b5d60"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "2ce161c3-0b97-4a58-9133-68e218b93b41"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "5d9363eb-f242-4f4b-b7b0-2c39fbace058"
                },
                {
                    "type": "Ext.form.field.ComboBox",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "id": "idtipotrabajador3",
                        "itemId": "idtipotrabajador3",
                        "width": 193,
                        "fieldLabel": "Tip. Trab. ",
                        "labelAlign": "right",
                        "labelWidth": 60,
                        "name": "idtipotrabajador",
                        "submitValue": false,
                        "value": [
                            "new Date().getFullYear()"
                        ],
                        "allowBlank": false,
                        "enableKeyEvents": true,
                        "selectOnFocus": true,
                        "editable": false,
                        "displayField": "nombretipotrabajador",
                        "forceSelection": true,
                        "store": "tipotrabajador",
                        "valueField": "idtipotrabajador"
                    },
                    "designerId": "8545ce6f-5564-47b0-9126-033759cc69a6"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "65bdad8d-00c1-4547-9b4c-32c1b4077712"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "8f708e13-cf85-47c9-883e-9256ec4bcbf2"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "0661ef79-d585-4f86-894a-d1cca4383f88"
                },
                {
                    "type": "Ext.button.Button",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "icon": "img/demo16.png",
                        "text": "aceptar"
                    },
                    "designerId": "5fa30bf9-94fa-4fd1-883e-bacd13f24682",
                    "cn": [
                        {
                            "type": "basicfunction",
                            "reference": {
                                "name": "items",
                                "type": "array"
                            },
                            "codeClass": null,
                            "userConfig": {
                                "fn": "handler",
                                "implHandler": [
                                    "var w     = Ext.ComponentQuery.query('asistencia')[0];\r",
                                    "var codie = '';\r",
                                    "var cmpIe = w.down('#txtie');\r",
                                    "if (cmpIe) {\r",
                                    "    var raw = cmpIe.text || (cmpIe.getEl() && cmpIe.getEl().dom && cmpIe.getEl().dom.textContent) || '';\r",
                                    "    codie = raw.replace(/^CODIE:\\s*/,'').trim();\r",
                                    "}\r",
                                    "var mes  = (Ext.getCmp('id_meses1') && Ext.getCmp('id_meses1').getValue()) || '';\r",
                                    "var anio = (Ext.getCmp('anio1')      && Ext.getCmp('anio1').getValue())      || '';\r",
                                    "var idtipotrabajador2 = (Ext.getCmp('idtipotrabajador3')      && Ext.getCmp('idtipotrabajador3').getValue())      || '';\r",
                                    "if (!mes || mes < 1 || mes > 12) {\r",
                                    "    Ext.Msg.alert('Validación', 'Seleccione un mes válido.');\r",
                                    "    return;\r",
                                    "}\r",
                                    "if (!anio || anio < 2020) {\r",
                                    "    Ext.Msg.alert('Validación', 'Ingrese un año válido.');\r",
                                    "    return;\r",
                                    "}\r",
                                    "if (!codie) {\r",
                                    "    Ext.Msg.alert('Validación', 'No se encontró el CODIE.');\r",
                                    "    return;\r",
                                    "}\r",
                                    "Ext.Ajax.request({\r",
                                    "    url: 'controladores/ResumenMensualDiario.php',\r",
                                    "    method: 'POST',\r",
                                    "    params: { codie: codie, mes: mes, anio: anio, idtipotrabajador2: idtipotrabajador2 },\r",
                                    "    success: function(response) {\r",
                                    "        var json = Ext.decode(response.responseText);\r",
                                    "        if (json.success) {\r",
                                    "            var grid = Ext.getCmp('gridResumen');\r",
                                    "            //var store = Ext.data.StoreManager.lookup('AsistenciaMensualStore');\r",
                                    "            var store = Ext.data.StoreManager.lookup('ResumenMensualStore');\r",
                                    "            grid.suspendLayouts();\r",
                                    "            // ==============================\r",
                                    "            // Crear modelo dinámico\r",
                                    "            // ==============================\r",
                                    "            var nuevosCampos = [];\r",
                                    "            Ext.Array.each(json.columnas, function(col){\r",
                                    "                nuevosCampos.push(col.dataIndex);\r",
                                    "            });\r",
                                    "\r",
                                    "            //var model = Ext.define('AsistenciaModelDinamico', {\r",
                                    "            var model = Ext.define('ResumenModelDinamico', {\r",
                                    "                extend: 'Ext.data.Model',\r",
                                    "                fields: nuevosCampos\r",
                                    "            });\r",
                                    "            store.model = model;\r",
                                    "\r",
                                    "            // ============================================\r",
                                    "            //  Añadir renderer + resaltar domingos\r",
                                    "            // ============================================\r",
                                    "            var mes = Ext.getCmp('id_meses').getValue();\r",
                                    "            var anio = Ext.getCmp('anio').getValue();\r",
                                    "            Ext.Array.each(json.columnas, function(col) {\r",
                                    "                if (/dia_/.test(col.dataIndex)) {\r",
                                    "                    // Hacer columna editable \r",
                                    "                    col.editor = {\r",
                                    "                        xtype: 'textfield',\r",
                                    "                        maxLength: 3,\r",
                                    "                        validateOnChange: true,\r",
                                    "                        maskRe: /[0-9AIJLPTHY]/i, // solo teclas permitidas\r",
                                    "                    }\r",
                                    "                    col.renderer = function(value) {\r",
                                    "                        var color;\r",
                                    "                        switch (value) {\r",
                                    "                            case 'A': color = '#2ecc71'; break; // verde dia laborado\r",
                                    "                            case 'I': color = '#e74c3c'; break; // rojo Inasstencia Injustificada\r",
                                    "                            case 'J': color = '#e74c3c'; break; // rojo Inasstencia Justificada Lic, perm, vaca,onom\r",
                                    "                            case 'L': color = '#e74c3c'; break; // rojo Licencia sin goce de Remuneraciones\r",
                                    "                            case 'P': color = '#e74c3c'; break; // rojo Permiso sin goce de remuneraciones\r",
                                    "                            case 'T': color = '#f1c40f'; break; // amarillo Tardanza\r",
                                    "                            case 'H': color = '#e74c3c'; break; // rojo Tardanza\r",
                                    "                            default : color = '#ecf0f1'; break; // gris claro\r",
                                    "                        }\r",
                                    "                        return '<div style=\"text-align:center;background-color:' + color +\r",
                                    "                        ';color:#000;padding:3px;border-radius:3px;\">' +\r",
                                    "                        (value || '') + '</div>';\r",
                                    "                    };\r",
                                    "                }\r",
                                    "            });\r",
                                    "\r",
                                    "\r",
                                    "            // ==============================\r",
                                    "            // 3️⃣  Reconfigurar grid\r",
                                    "            // ==============================\r",
                                    "            grid.reconfigure(store, json.columnas);\r",
                                    "\r",
                                    "            // ==============================\r",
                                    "            // 4️⃣  Cargar datos\r",
                                    "            // ==============================\r",
                                    "            store.loadData(json.data, false);\r",
                                    "\r",
                                    "            grid.getView().refresh(true);\r",
                                    "            grid.resumeLayouts(true);\r",
                                    "            grid.updateLayout();\r",
                                    "        } else {\r",
                                    "            Ext.Msg.alert('Error', 'No se pudo cargar la asistencia.');\r",
                                    "        }\r",
                                    "    },\r",
                                    "    failure: function() {\r",
                                    "        Ext.Msg.alert('Error', 'Error de conexión con el servidor.');\r",
                                    "    }\r",
                                    "});\r",
                                    ""
                                ]
                            },
                            "designerId": "d1b1be77-4d28-4199-bed8-11c35d7e720f"
                        }
                    ]
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "f0d29630-efdc-4234-a8bc-d7d8fabce4d3"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "2c34bb06-966e-4464-8dcf-24415d3f41c6"
                },
                {
                    "type": "Ext.toolbar.Separator",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "8e3b5be5-b27e-496c-8613-f310660cbdf6"
                },
                {
                    "type": "Ext.button.Button",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "icon": "img/excel.png",
                        "text": "Excel"
                    },
                    "designerId": "a3f8109e-4722-4f88-a926-a2f22a22a8fe",
                    "cn": [
                        {
                            "type": "basicfunction",
                            "reference": {
                                "name": "items",
                                "type": "array"
                            },
                            "codeClass": null,
                            "userConfig": {
                                "fn": "handler",
                                "implHandler": [
                                    "var w     = Ext.ComponentQuery.query('asistencia')[0];\r",
                                    "var codie = '';\r",
                                    "var cmpIe = w.down('#txtie');\r",
                                    "if (cmpIe) {\r",
                                    "    var raw = cmpIe.text || (cmpIe.getEl() && cmpIe.getEl().dom && cmpIe.getEl().dom.textContent) || '';\r",
                                    "    codie = raw.replace(/^CODIE:\\s*/,'').trim();\r",
                                    "}\r",
                                    "var mes   = Ext.getCmp('id_meses1').getValue();\r",
                                    "var anio  = Ext.getCmp('anio1').getValue();\r",
                                    "var idtipotrabajador2 = Ext.getCmp('idtipotrabajador3').getValue();\r",
                                    "\r",
                                    "var form = Ext.DomHelper.append(Ext.getBody(), {\r",
                                    "    tag: 'form',\r",
                                    "    method: 'POST',\r",
                                    "    action: 'export_excel_asistencia.php',\r",
                                    "    style: 'display:none'\r",
                                    "}, true);\r",
                                    "\r",
                                    "form.createChild({ tag:'input', type:'hidden', name:'mes', value: mes });\r",
                                    "form.createChild({ tag:'input', type:'hidden', name:'anio', value: anio });\r",
                                    "form.createChild({ tag:'input', type:'hidden', name:'codie', value: codie });\r",
                                    "form.createChild({ tag:'input', type:'hidden', name:'idtipotrabajador2', value: idtipotrabajador2 });\r",
                                    "\r",
                                    "form.dom.submit();\r",
                                    "form.remove();"
                                ]
                            },
                            "designerId": "2d4a4c55-917b-4573-af70-ef54adcac488"
                        }
                    ]
                },
                {
                    "type": "Ext.toolbar.Fill",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null
                    },
                    "designerId": "cb0d129a-66c7-4c65-9f1c-c68e1cd24d25"
                },
                {
                    "type": "Ext.button.Button",
                    "reference": {
                        "name": "items",
                        "type": "array"
                    },
                    "codeClass": null,
                    "userConfig": {
                        "layout|flex": null,
                        "icon": "img/exit.png",
                        "text": "Salir"
                    },
                    "designerId": "9aceb57d-9c6b-45f7-9671-11835d186443",
                    "cn": [
                        {
                            "type": "basicfunction",
                            "reference": {
                                "name": "items",
                                "type": "array"
                            },
                            "codeClass": null,
                            "userConfig": {
                                "fn": "handler",
                                "designer|params": [
                                    "button"
                                ],
                                "implHandler": [
                                    "var win    = button.up('window');\r",
                                    "win.close();\r",
                                    ""
                                ]
                            },
                            "designerId": "8269c536-8089-49e1-947d-066dc7d48a2d"
                        }
                    ]
                }
            ]
        }
    ]
}