var localUserID = this.userIDD;
var localUserType = this.userType;

Ext.require(['*']);
Ext.onReady(function () {

    Ext.tip.QuickTipManager.init();

    Ext.define('Busqueda', {
        extend: 'Ext.data.Model',
        fields: [
                {
                    name: 'AnualID'
                },
                {
                    name: 'Age'
                },
                {
                    name: 'Presupposition'
                },
                {
                    name: 'UserName'
                },
                {
                    name: 'FechaCreacion'
                }
            ]
    });

    Ext.define('MyApp.store.StBusqueda', {
        extend: 'Ext.data.Store',

        constructor: function (cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                storeId: 'StBusqueda',
                proxy: {
                    type: 'ajax',
                    timeout: 0,
                    url: '../General/Consultas.php',
                    actionMethods:
                    {
                        read: 'POST'
                    },
                    extraParams:
                    {
                        Filsc: 'BuscarRangosContratacion'
                        //loadCall: false
                    },
                    reader: {
                        type: 'json',
                        root: 'Data',
                        totalProperty: 'totalcount'
                    }

                }

            }, cfg)]);
        }
    });

    var StBusqueda = Ext.create('MyApp.store.StBusqueda', {
        model: 'Busqueda',
        autoLoad: false
    });

    Ext.define('Rangos', {
        extend: 'Ext.data.Model',
        fields: [
                {
                    name: 'ContractRangeID'
                },
                {
                    name: 'Description'
                },
                {
                    name: 'StartPercentage'
                },
                {
                    name: 'StartTotal'
                },
                {
                    name: 'EndPercentage'
                },
                {
                    name: 'EndTotal'
                }
            ]
    });

    Ext.define('MyApp.store.StRangosC', {
        extend: 'Ext.data.Store',

        constructor: function (cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                storeId: 'StRangosC',
                proxy: {
                    type: 'ajax',
                    timeout: 0,
                    url: '../General/Consultas.php',
                    actionMethods:
                    {
                        read: 'POST'
                    },
                    extraParams:
                    {
                        Filsc: 'RangosContratacion'
                        //loadCall: false
                    },
                    reader: {
                        type: 'json',
                        root: 'Data',
                        totalProperty: 'totalcount'
                    }

                }

            }, cfg)]);
        }
    });

    var StRangosC = Ext.create('MyApp.store.StRangosC', {
        model: 'Rangos',
        autoLoad: false
    });

    var pagerBusqueda = new Ext.PagingToolbar({
        store: StBusqueda,
        displayInfo: true,
        displayMsg: '{0} - {1} de {2} Registros',
        emptyMsg: 'No hay datos para mostrar',
        pageSize: 10
    });

    var gridBusqueda = Ext.create('Ext.grid.Panel', {
        store: StBusqueda,
        columnLines: true,
        //  bbar: pagerBusqueda,
        //height: 400,
        //width: 950,
        layout: {
            type: 'fit'
        },
        defaults: {
            width: 30
        },
        columns: [
        //new Ext.grid.RowNumberer(),
            {xtype: 'rownumberer',
            width: 35
        },
            {
                dataIndex: 'AnualID',
                text: 'ID',
                width: 80
            },
            {
                dataIndex: 'Age',
                text: 'Año',
                width: 80
            },
            {
                dataIndex: 'Presupposition',
                text: 'Presupuesto',
                width: 200
            },
            {
                dataIndex: 'UserName',
                text: 'Creado Por',
                width: 150
                //hidden: true
            },
            {

                dataIndex: 'FechaCreacion',
                text: 'Fecha Creacion',
                width: 80
            }
        ],
        stateful: false
    });

    gridBusqueda.on('itemdblclick', function (grd, record, item, index, e) {
        //Ext.getCmp('tabRangosContratacion').enable();
        Ext.getCmp('tabContenedor').setActiveTab('tabRangosContratacion');
        DobleClick(record.data.AnualID);
    }, this)

    var gridPresupuesto = Ext.create('Ext.grid.Panel', {
        store: StRangosC,
        columnLines: true,
        //  bbar: pagerBusqueda,
        //height: 400,
        //width: 950,
        layout: {
            type: 'fit'
        },
        defaults: {
            width: 30
        },
        columns: [
        //new Ext.grid.RowNumberer(),
            {xtype: 'rownumberer',
            width: 35
        },
            {
                dataIndex: 'ContractRangeID',
                text: 'ID',
                width: 60
            },
            {
                dataIndex: 'Description',
                text: 'Descripcion',
                width: 530
            },
            {
                dataIndex: 'StartPercentage',
                text: '% Desde',
                width: 100
                //hidden: true
            },
            {

                dataIndex: 'StartTotal',
                text: 'Total Desde',
                width: 100
            },
            {
                dataIndex: 'EndPercentage',
                text: '% Hasta',
                width: 100
                //hidden: true
            },
            {
                dataIndex: 'EndTotal',
                text: 'Total Hasta',
                width: 100
                //hidden: true
            }
        ],
        stateful: false
    });

    function DobleClick(idAnual) {
        Ext.getCmp('tabRangosContratacion').enable();
        Ext.getCmp('tabContenedor').setActiveTab('tabRangosContratacion');
        Ext.Ajax.request
   		({
   		    url: '../General/Consultas.php',
   		    method: 'POST',
   		    params: {

   		        Filsc: 'ConsultarRangoContratacion',
   		        Age: idAnual
   		    },
   		    success: function (result, request) {
   		        var jsonData = Ext.decode(result.responseText);
   		        if (jsonData.success == true) {
   		            Ext.getCmp('txID').setValue(jsonData.Data[0].AnualID);
   		            Ext.getCmp('txFecha').setValue(Ext.Date.parse(jsonData.Data[0].Age, 'Y'));
   		            Ext.getCmp('txPresupuesto').setValue(jsonData.Data[0].Presupposition);
   		            StRangosC.load({ params: { AnualID: idAnual} });
   		        }
   		        else {
   		            Ext.Msg.show({ title: '.::Mensaje del Sistema::.', msg: "Error al Cargar Rango de Contratacion...Por Favor Verifique" + "<br>...Gracias!!!", buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
   		        }
   		    },
   		    failure: function (result, request) {
   		        if (result.failureType == 'server') {
   		            Ext.Msg.alert('.::Mensaje del Sistema::.!', "Problemas con el servidor...Consulte con el Administrador");
   		        }
   		        else {
   		            Ext.Msg.alert('Problemas con el servidor...', "Error no Identificado...Consulte con el Administrador");
   		        }
   		    }
   		});
    }

    Ext.define('MyApp.view.ui.MyViewport', {
        extend: 'Ext.container.Viewport',

        layout: {
            type: 'fit'
        },
        initComponent: function () {
            var me = this;
            me.items = [
            {
                id: 'tabContenedor',
                xtype: 'tabpanel',
                activeTab: 0,
                items: [
                    {
                        xtype: 'panel',
                        layout: {
                            type: 'border'
                        },
                        title: 'Busqueda',
                        items: [
                            {

                                xtype: 'panel',
                                layout: {
                                    type: 'fit'
                                    //type: 'table'
                                    //columns: 2
                                },
                                title: 'Resultado de la Busqueda',
                                region: 'center',
                                items: [gridBusqueda]
                            },
                            {
                                xtype: 'panel',
                                height: 110,
                                region: 'north',
                                dockedItems: [
                                    {
                                        xtype: 'toolbar',
                                        dock: 'top',
                                        items: [
                                            {
                                                xtype: 'buttongroup',
                                                title: '',
                                                columns: 3,
                                                layout: {
                                                    columns: 3,
                                                    type: 'table'
                                                },
                                                items: [
                                                    {
                                                        xtype: 'button',
                                                        id: 'btBuscar',
                                                        text: 'Buscar',
                                                        handler: function () {
                                                            var dateIni = new Date(Ext.getCmp('txFechaB').getValue());
                                                            var anual = dateIni.getFullYear();
                                                            StBusqueda.data.removeAll();
                                                            StBusqueda.load({ params: { Age: anual} });
                                                        }
                                                    },
                                                    {
                                                        xtype: 'button',
                                                        id: 'btNuevoB',
                                                        text: 'Nuevo',
                                                        handler: function () {
                                                            Ext.getCmp('tabRangosContratacion').enable();
                                                            Ext.getCmp('tabContenedor').setActiveTab('tabRangosContratacion');
                                                            Limpiar();
                                                        }
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ],
                                defaults: {
                                    enableKeyEvents: true,
                                    listeners: {
                                        specialKey: function (field, el) {
                                            if (el.getKey() == Ext.EventObject.ENTER) {
                                                Ext.getCmp('btBuscar').handler.call(Ext.getCmp('btBuscar').scope);
                                            }
                                        }
                                    }
                                },
                                items: [
                                    {
                                        xtype: 'fieldset',
                                        height: 70,
                                        //width: 300,                                                                            
                                        margin: '1 1 1 1',
                                        padding: '0 3',
                                        layout: {
                                            //columns: 4,
                                            columns: 3,
                                            type: 'table'
                                        },
                                        title: 'Filtro de Busqueda',
                                        items: [
                                                {
                                                    xtype: 'fieldcontainer',
                                                    height: 25,
                                                    width: 200,
                                                    layout: {
                                                        columns: 4,
                                                        type: 'table'
                                                    },
                                                    items: [
                                                    {
                                                        xtype: 'datefield',
                                                        id: 'txFechaB',
                                                        margin: '0 3 0 0',
                                                        //height: 50,
                                                        width: 135,
                                                        fieldLabel: 'Año',
                                                        labelStyle: 'font-familia:tahoma;font-size:10px;font-weight:bold;color:black',
                                                        labelWidth: 40,
                                                        value: new Date(),
                                                        format: 'Y',
                                                        hidden: false
                                                    }
                                                ]
                                                }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        xtype: 'panel',
                        title: 'Rangos de Contrataciones',
                        layout: {
                            type: 'border'
                        },
                        id: 'tabRangosContratacion',
                        disabled: true,
                        items: [
                            {
                                xtype: 'panel',
                                height: 110,
                                region: 'north',
                                dockedItems: [
                                    {
                                        xtype: 'toolbar',
                                        dock: 'top',
                                        items: [
                                            {
                                                xtype: 'buttongroup',
                                                columns: 5,
                                                layout: {
                                                    columns: 5,
                                                    type: 'table'
                                                },
                                                items: [
                                                    {
                                                        xtype: 'button',
                                                        id: 'btGrabar',
                                                        text: 'Grabar',
                                                        handler: function () {
                                                            doSave();
                                                        }
                                                    },
                                                    {
                                                        xtype: 'button',
                                                        id: 'btGenerar',
                                                        text: 'Generar Presupuesto',
                                                        handler: function () {
                                                            doRange();
                                                        }
                                                    },
                                                    {
                                                        xtype: 'button',
                                                        id: 'btImprimir',
                                                        text: 'Imprimir',
                                                        handler: function () {
                                                            doImprimir();
                                                        }
                                                    },
                                                    {
                                                        xtype: 'button',
                                                        id: 'btNuevo',
                                                        text: 'Nuevo',
                                                        handler: function () {
                                                            Limpiar();
                                                        }
                                                    },
                                                    {
                                                        xtype: 'button',
                                                        id: 'btEliminar',
                                                        text: 'Eliminar',
                                                        handler: function () {
                                                            if (Ext.getCmp('txID').getValue() == '-1') {
                                                                Ext.Msg.show({ title: 'Error', msg: 'No se puede eliminar porque aun no se ha guardado', buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
                                                                return;
                                                            }
                                                            Ext.Msg.confirm('Confirmación', 'Esta seguro de Eliminar el registro?', doDelete);
                                                        }
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ],
                                items: [
                                    {
                                        xtype: 'fieldset',
                                        height: 70,
                                        //width: 300,                                                                            
                                        margin: '1 1 1 1',
                                        padding: '0 3',
                                        layout: {
                                            //columns: 4,
                                            columns: 3,
                                            type: 'table'
                                        },
                                        title: 'Datos Generales',
                                        items: [
                                            {
                                                xtype: 'fieldcontainer',
                                                height: 25,
                                                width: 200,
                                                layout: {
                                                    columns: 4,
                                                    type: 'table'
                                                },
                                                items: [
                                                    {
                                                        xtype: 'datefield',
                                                        id: 'txFecha',
                                                        margin: '0 3 0 0',
                                                        //height: 50,
                                                        width: 135,
                                                        fieldLabel: 'Año',
                                                        labelStyle: 'font-familia:tahoma;font-size:10px;font-weight:bold;color:black',
                                                        labelWidth: 40,
                                                        value: new Date(),
                                                        format: 'Y',
                                                        hidden: false
                                                    },
                                                    {
                                                        xtype: 'textfield',
                                                        id: 'txID',
                                                        margin: '0 3 0 0',
                                                        width: 50,
                                                        fieldLabel: '',
                                                        labelStyle: 'font-familia:tahoma;font-size:10px;font-weight:bold;color:black',
                                                        labelWidth: 3,
                                                        value: '-1',
                                                        hidden: true
                                                    },
                                                    {
                                                        xtype: 'numberfield',
                                                        id: 'txPresupuesto',
                                                        margin: '0 3 0 10',
                                                        width: 250,
                                                        fieldLabel: 'Presupuesto',
                                                        labelStyle: 'font-familia:tahoma;font-size:10px;font-weight:bold;color:black',
                                                        labelWidth: 70,
                                                        decimalPrecision: 10
                                                        //disabled: true
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                xtype: 'panel',
                                region: 'center',
                                layout: {
                                    type: 'fit'
                                },
                                items: [gridPresupuesto
                                ]
                            }
                        ]
                    }
                ]
            }
        ];
            me.callParent(arguments);
        }


    })

    var f = Ext.create('MyApp.view.ui.MyViewport', {
        renderTo: Ext.getBody()

    });

    function doSave() {
        if (Ext.getCmp('txPresupuesto').getValue() == null || Ext.getCmp('txPresupuesto').getValue() == '' || Ext.getCmp('txPresupuesto').getValue() == 0) {
            Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Por favor Ingrese un Presupuesto mayor a 0', buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
            return;
        }
        if (Ext.getCmp('txFecha').getValue() == null || Ext.getCmp('txFecha').getValue() == '') {
            Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Por favor Ingrese un año', buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
            return;
        }
        var dateIni = new Date(Ext.getCmp('txFecha').getValue());
        var date = dateIni.getFullYear();
        Ext.getCmp('btGrabar').disable();
        Ext.Ajax.request({
            url: '../ModuloBase/RangosContratacionClass.php',
            method: 'POST',
            params: {
                Opcion: 'GRABAR',
                Age: date,
                Presupuesto: Ext.getCmp('txPresupuesto').getValue()
            },
            success: function (result, request) {
                Ext.getCmp('btGrabar').enable();
                var jsonData = Ext.decode(result.responseText);
                DobleClick(Ext.getCmp('txID').getValue() == '-1' ? jsonData.LastCode : Ext.getCmp('txID').getValue());                
                if (jsonData.success == true) {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Año registrada Correctamente', buttons: Ext.Msg.OK, icon: Ext.MessageBox.WARNING });
                }
                else {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: jsonData.Mensaje, buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
                }
            },
            failure: function (result, request) {
                Ext.getCmp('btGrabar').enable();
                resultado = false;
                if (result.failureType == 'server') {
                    Ext.Msg.alert('.::Mensaje del Sistema::.!', "Problemas con el Servidor...Consulte con el Administrador");
                }
                else {
                    Ext.Msg.alert('Problemas con el Servidor...', "Error no Identificado...Consulte con el Administrador");
                }
            }
        });
    }

    function doRange() {
        if (Ext.getCmp('txFecha').getValue() == null || Ext.getCmp('txFecha').getValue() == '') {
            Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Por favor seleccione un año', buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
            return;
        }
        var dateIni = new Date(Ext.getCmp('txFecha').getValue());
        var date = dateIni.getFullYear();
        Ext.MessageBox.show({
            msg: 'Generando Presupuesto General...',
            progressText: 'Generando...',
            width: 300,
            wait: true,
            waitConfig: { interval: 200 },
            icon: 'ext-mb-download', //custom class in msg-box.html
            animEl: 'mb7'
        });
        Ext.Ajax.request({
            url: '../ModuloBase/RangosContratacionClass.php',
            method: 'POST',
            params: {
                Opcion: 'GENERARPRESUPUESTO',
                Age: date
                //Presupuesto: Ext.getCmp('txPresupuesto').getValue()
            },
            success: function (result, request) {
                Ext.MessageBox.hide();
                var jsonData = Ext.decode(result.responseText);
                if (jsonData.success == true) {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Rangos de Contratación Generados correctamente', buttons: Ext.Msg.OK, icon: Ext.MessageBox.WARNING });
                    StRangosC.load({ params: { AnualID: jsonData.LastCode} });
                }
                else {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: jsonData.Mensaje, buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
                }
            },
            failure: function (result, request) {
                resultado = false;
                if (result.failureType == 'server') {
                    Ext.Msg.alert('.::Mensaje del Sistema::.!', "Problemas con el Servidor...Consulte con el Administrador");
                }
                else {
                    Ext.Msg.alert('Problemas con el Servidor...', "Error no Identificado...Consulte con el Administrador");
                }
            }
        });
    }
    function doImprimir() {
        var grid = gridPresupuesto.store.data.length;
        if (grid == 0) {
            Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Aun no existe datos para imprimir', buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
            return;
        }

        var dateIni = new Date(Ext.getCmp('txFecha').getValue());
        var date = dateIni.getFullYear();
        Ext.MessageBox.show({
            msg: 'Generando Presupuesto General...',
            progressText: 'Generando...',
            width: 300,
            wait: true,
            waitConfig: { interval: 200 },
            icon: 'ext-mb-download', //custom class in msg-box.html
            animEl: 'mb7'
        });
        Ext.Ajax.request({
            url: '../General/toPDFReports.php',
            method: 'POST',
            params: {
                Opcion: 'GENERARPRESUPUESTO',
                Age: date
                //Presupuesto: Ext.getCmp('txPresupuesto').getValue()
            },
            success: function (result, request) {
                Ext.MessageBox.hide();
                var jsonData = Ext.decode(result.responseText);
                if (jsonData.success == true) {
                    var URL = jsonData.Datos;
                    window.open(URL, "_BLANK", "width=480,height=600,scrollbars=YES,resizable=YES");
                }
                else {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema::.', msg: "Error al Generar Impresion...Por Favor Verifique" + "<br>...Gracias!!!", buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
                }
            },
            failure: function (result, request) {
                resultado = false;
                if (result.failureType == 'server') {
                    Ext.Msg.alert('.::Mensaje del Sistema::.!', "Problemas con el Servidor...Consulte con el Administrador");
                }
                else {
                    Ext.Msg.alert('Problemas con el Servidor...', "Error no Identificado...Consulte con el Administrador");
                }
            }
        });
    }

    function Limpiar() {
        Ext.getCmp('txID').setValue('-1');
        Ext.getCmp('txFecha').setValue(new Date());
        Ext.getCmp('txPresupuesto').setValue('');
        StRangosC.load({ params: { AnualID: 0} });
    }

    function doDelete(result) {
        //var dateIni = new Date(Ext.getCmp('txFecha').getValue());
        //var date = dateIni.getFullYear();
        if (result != 'yes') return;
        Ext.Ajax.request({
            url: '../ModuloBase/RangosContratacionClass.php',
            method: 'POST',
            params: {
                Opcion: 'DELETE',
                ID: Ext.getCmp('txID').getValue()
                //Age: date
                //Presupuesto: Ext.getCmp('txPresupuesto').getValue()
            },
            success: function (result, request) {
                var jsonData = Ext.decode(result.responseText);
                if (jsonData.success == true) {
                    Limpiar();
                    Ext.Msg.show({ title: '.::Mensaje del Sistema', msg: 'Año Eliminado Correctamente', buttons: Ext.Msg.OK, icon: Ext.MessageBox.WARNING });
                }
                else {
                    Ext.Msg.show({ title: '.::Mensaje del Sistema::.', msg: "Error al Eliminar Registro...Por Favor Verifique" + "<br>...Gracias!!!", buttons: Ext.Msg.OK, icon: Ext.MessageBox.ERROR });
                }
            },
            failure: function (result, request) {
                resultado = false;
                if (result.failureType == 'server') {
                    Ext.Msg.alert('.::Mensaje del Sistema::.!', "Problemas con el Servidor...Consulte con el Administrador");
                }
                else {
                    Ext.Msg.alert('Problemas con el Servidor...', "Error no Identificado...Consulte con el Administrador");
                }
            }
        });
    }
})