using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using GenesisCnx = LLNet.Tienda.wsGenesis;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using LLNet.GUI;
using LLNet.Utils;


namespace LLNet.Tienda.MainForms.Forms.CreditEko
{
    public partial class FrmRepCrediCuotsEk : Form
    {
        #region variables
        
        private string varUSRG, varPWDG, varURLE;

        #endregion

        public FrmRepCrediCuotsEk()
        {
            InitializeComponent();
            LlenarParametros();
        }

        /// <summary>Obtiene los parámetros necesarios de cada tienda </summary>
        private void LlenarParametros()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_PGEN", qp);

            object[] datos = new object[2];
            datos = dsB.Tables[0].Rows[0].ItemArray;

            varUSRG = datos[0].ToString();
            varPWDG = datos[1].ToString();
            varURLE = datos[2].ToString();
        }


        private void SBTNBUSCAR_Click(object sender, EventArgs e)
        {
            if (this.rbtnjornada.Checked)
            {//POR JORNADA
                JornadaProveedor();
                JornadaBD();
            }
            else
            {//POR TIENDA
                TiendaProveedor();
                TiendaBD();
            }
        }

        //Registrar en BD UN ERROR DE CREDITO EKONO
        private void RegBDERRORCREDEK(string pERR_COD_ESTADO, string pERR_DESC, string pCOD_ESTADO,
            string pDESC_ESTADO, string pREFERENCIA, string pERROR, string pWS)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();

            if (pERR_COD_ESTADO == "")
            {
                qp.AddReplaceParam("pERR_COD_EST", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERR_COD_EST", pERR_COD_ESTADO);
            }
            if (pERR_DESC == "")
            {
                qp.AddReplaceParam("pERR_DESC", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERR_DESC", pERR_DESC);
            }
            if (pCOD_ESTADO == "")
            {
                qp.AddReplaceParam("pCOD_ESTADO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pCOD_ESTADO", pCOD_ESTADO);
            }
            if (pDESC_ESTADO == "")
            {
                qp.AddReplaceParam("pDESC_ESTADO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pDESC_ESTADO", pDESC_ESTADO);
            }
            if (pERROR == "")
            {
                qp.AddReplaceParam("pERROR", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERROR", pERROR);
            }
            if (pWS == "")
            {
                qp.AddReplaceParam("pWS", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pWS", pWS);
            }
            if (pREFERENCIA == "")
            {
                qp.AddReplaceParam("pREFERENCIA", "0");
            }
            else
            {
                qp.AddReplaceParam("pREFERENCIA", pREFERENCIA);
            }
            //Jornada
            qp.AddReplaceParam("pJORNADA", Program.Jornada.ToString());


            // Llama el procedimiento que almacena los datos dl pago en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_CREDITOEK_ERROR", qp, "PDV");
        }

        


        private void JornadaProveedor()
        {
            LLNet.Tienda.Reportes.CR_ConcCrediCEk objRpt = new LLNet.Tienda.Reportes.CR_ConcCrediCEk();
            LLNet.Tienda.Reportes.dsConcCrediCEk dsdatos = new LLNet.Tienda.Reportes.dsConcCrediCEk();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_ConcCrediCEk.rpt");

            try
            {
                //WEB SERVICE CON SUS MÉTODOS
                GenesisCnx.Service wsGenesis = new GenesisCnx.Service();
                wsGenesis.Url = varURLE;
                XmlNode nod = wsGenesis.ConciliacionJornada(Program.Jornada.ToString(),varUSRG,varPWDG);
                XmlNodeList list = nod.SelectNodes("/datos");
                //DataSet ds = new DataSet();
                //ds.ReadXml(list);

                double total = 0; //monto total de la suma de los montos de cada recibo

                foreach (XmlNode DATO in list)
                {
                    // MessageBox.Show(DATO.InnerXml);
                    if (DATO.HasChildNodes)
                    {                        

                        XmlNode cod_estado = DATO.SelectSingleNode("cod_estado");
                        XmlNode desc_estado = DATO.SelectSingleNode("desc_estado");
                        XmlNode err_cod_est = DATO.SelectSingleNode("err_cod_est");
                        XmlNode err_desc = DATO.SelectSingleNode("err_desc");
                        XmlNode id_trans = DATO.SelectSingleNode("id_trans");
                        XmlNode tran_jornada = DATO.SelectSingleNode("tran_jornada");
                        XmlNode tran_cedula = DATO.SelectSingleNode("tran_cedula");
                        XmlNode tran_cajero = DATO.SelectSingleNode("tran_cajero");
                        XmlNode tran_monto = DATO.SelectSingleNode("tran_monto");
                        XmlNode tran_num_caja = DATO.SelectSingleNode("tran_num_caja");
                        XmlNode id_trans_anulada = DATO.SelectSingleNode("id_trans_anulada");


                        string codestado = "", descestado = "", errcodest = "", errdesc = "", idtrans = "", idtransanulada = ""
                        , tranjornada = "", trancedula = "", trancajero = "", tranmonto = "", trannumcaja = "";

                        if (cod_estado != null)
                            codestado = cod_estado.InnerText;
                        if (desc_estado != null)
                            descestado = desc_estado.InnerText;
                        if (err_cod_est != null)
                            errcodest = err_cod_est.InnerText;
                        if (err_desc != null)
                            errdesc = err_desc.InnerText;
                        if (tran_jornada != null)
                            tranjornada = tran_jornada.InnerText;
                        if (tran_cedula != null)
                            trancedula = tran_cedula.InnerText;
                        if (tran_cajero != null)
                            trancajero = tran_cajero.InnerText;
                        if (tran_monto != null)
                            tranmonto = tran_monto.InnerText;
                        if (tran_num_caja != null)
                            trannumcaja = tran_num_caja.InnerText;
                        if (id_trans != null)
                            idtrans = id_trans.InnerText;
                        if (id_trans_anulada != null)
                            idtransanulada = id_trans_anulada.InnerText;

                        if (errcodest == "1")
                        {//CONSULTA CORRECTA
                            object[] datos = new object[8];
                            datos[0] = descestado; //W.REFERENCIA
                            datos[1] = tranjornada; //W.CEDULA 
                            datos[2] = trancedula; //.NOMBRE
                            datos[3] = trancajero; //PREFIJOSUCURSAL         
                            datos[4] = tranmonto; //W.NUMCREDITO          
                            datos[5] = trannumcaja; //W.MONTO_CANCELADO   
                            datos[6] = idtrans; //
                            if (idtransanulada == "0")
                            {
                                datos[7] = " "; //
                            }
                            else
                            {
                                datos[7] = idtransanulada; //
                            }
                            if (descestado == "COMPRA")
                            {
                                total += Convert.ToDouble(tranmonto);
                            }
                            else
                            {
                                total -= Convert.ToDouble(tranmonto);
                            }
                            dsdatos.Tables[0].Rows.Add(datos);
                        }
                        else
                        { //ERROR CONSULTA
                            //this.exito = false;
                            CApp.ShowMessage(errdesc, "Error CrediCuotas", false);
                            RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, Program.Jornada.ToString(), "", "CONSOLIDADOJORNADA");
                            //RegistroBDCONSULTA(erroCodEstado, errorDesc, codEstado, descEstado, txtId.Text, txtnombr.Text, txtsaldodisp.Text, txtsaldop.Text, txtcuottent.Text,
                            //        refer, strvkrCompr);
                        }
                    }
                    else
                    {
                        //this.exito = false;
                        CApp.ShowMessage("No se obtiene datos", "Error CrediCuotas", false);
                        RegBDERRORCREDEK("", "", "", "", Program.Jornada.ToString(), "No se obtiene datos", "CONSOLIDADOJORNADA");
                        //RegistroBDERRORCONSULTA(refer, txtId.Text, strvkrCompr, "No se obtiene datos en el XML");
                    }
                }

                string[] totales = new string[3];
                totales[0] = Program.Jornada.ToString(); //JORNADA
                totales[1] = Program.Caja.ToString(); //CAJA
                totales[2] = total.ToString(); //CAJA

                dsdatos.Tables[1].Rows.Add(totales);

                objRpt.SetDataSource((DataSet)dsdatos);

                cRVPCCE.ReportSource = objRpt;
                cRVPCCE.Refresh();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Error CrediCuotas", false);
                RegBDERRORCREDEK("", "", "", "", Program.Jornada.ToString(), ex.Message, "CONSOLIDADOJORNADA");
            }
        }

        private void JornadaBD()
        {
            LLNet.Tienda.Reportes.CR_CIJCrediCEk objRpt = new LLNet.Tienda.Reportes.CR_CIJCrediCEk();
            LLNet.Tienda.Reportes.dsCIJCrediCEk dsdatos = new LLNet.Tienda.Reportes.dsCIJCrediCEk();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_CIJCrediCEk.rpt");

            QueryParams qp = new QueryParams();
            qp.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
            DataSet ds_datos = new DataSet();
            ds_datos = GUI.CApp.bll.getDataSet("PDV", "WMS_V_ARQUEOJCREDITOEK", qp);

            if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
            {
                double total = 0; //monto total de la suma de los montos de cada recibo

                foreach (DataRow Fila in ds_datos.Tables[0].Rows)
                { //                0           1                    2          3               4           5                                   5                                                                               7                                           8
                    // SELECT W.REFERENCIA, W.ID_TRANS_PROV, W.NIT_CLIENTE, W.VALORCOMPRA,creado_el ,wms_p_factpedido(W.DOCUMENTO) FACTURA,DECODE(W.ESTADO,'C','CORRECTO','A','ANULADO',W.ESTADO) AS ESTADO , DECODE(W.ENT_EXTERNA,'B','BOMBA',W.ENT_EXTERNA) ORIGEN, w.jornada

                    object[] datos = new object[8];
                    datos[0] = Convert.ToString(Fila[6]); //estado
                    datos[1] = Convert.ToString(Fila[8]); //jornada
                    datos[2] = Convert.ToString(Fila[2]); //cedula
                    datos[3] = Convert.ToString(Fila[3]); //monto
                    datos[4] = Convert.ToString(Fila[1]); //trans Origen
                    datos[5] = Convert.ToString(Fila[0]); //referencia
                    datos[6] = Convert.ToString(Fila[7]); //origen  
                    datos[7] = Convert.ToString(Fila[4]); //fecha 
                    dsdatos.Tables[0].Rows.Add(datos);
                    if (Convert.ToString(Fila[6]) == "CORRECTO")
                    total += Convert.ToDouble(Fila[3]);
                }

                objRpt.SetDataSource((DataSet)dsdatos);

                string[] totales = new string[3];
                totales[0] = Program.Jornada.ToString(); //JORNADA
                totales[1] = Program.Caja.ToString(); //CAJA
                totales[2] = total.ToString(); //Total
                dsdatos.Tables[1].Rows.Add(totales);

            }
            cRVICCE.ReportSource = objRpt;
            cRVICCE.Refresh();
        }

        private void TiendaBD()
        {
            LLNet.Tienda.Reportes.CR_CITCrediCEK objRptT = new LLNet.Tienda.Reportes.CR_CITCrediCEK();
            LLNet.Tienda.Reportes.dsCITCrediCEk dsdatosT = new LLNet.Tienda.Reportes.dsCITCrediCEk();

            objRptT.Load("C\\ekono\\POS Retail 8.0.0\\CR_CITCrediCEk.rpt");

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "SUCFECHACREDEK");

            string sucursal = "", fecha = "";
            foreach (DataRow Fila in dsB.Tables[0].Rows)
            {
                sucursal = Convert.ToString(Fila[0]); //sucursal
                fecha = Convert.ToString(Fila[1]); //fecha 
            }
  

            DataSet ds_datosT = new DataSet();
            ds_datosT = GUI.CApp.bll.getDataSet("PDV", "WMS_V_ARQUEOTCREDITOEK");

            if (ds_datosT.Tables.Count > 0 && ds_datosT.Tables[0].Rows.Count > 0)
            {
                double total = 0; //monto total de la suma de los montos de cada recibo

                foreach (DataRow Fila in ds_datosT.Tables[0].Rows)
                { //                0           1                    2          3               4           5                                   5                                                                               7                                           8
                    // SELECT W.REFERENCIA, W.ID_TRANS_PROV, W.NIT_CLIENTE, W.VALORCOMPRA,creado_el ,wms_p_factpedido(W.DOCUMENTO) FACTURA,DECODE(W.ESTADO,'C','CORRECTO','A','ANULADO',W.ESTADO) AS ESTADO , DECODE(W.ENT_EXTERNA,'B','BOMBA',W.ENT_EXTERNA) ORIGEN, w.jornada

                    object[] datos = new object[8];
                    datos[0] = Convert.ToString(Fila[6]); //estado
                    datos[1] = Convert.ToString(Fila[8]); //jornada
                    datos[2] = Convert.ToString(Fila[2]); //cedula
                    datos[3] = Convert.ToString(Fila[3]); //monto
                    datos[4] = Convert.ToString(Fila[1]); //trans Origen
                    datos[5] = Convert.ToString(Fila[0]); //referencia
                    datos[6] = Convert.ToString(Fila[7]); //origen  
                    datos[7] = Convert.ToString(Fila[4]); //fecha 
                    dsdatosT.Tables[0].Rows.Add(datos);
                    if (Convert.ToString(Fila[6]) == "CORRECTO")
                    total += Convert.ToDouble(Fila[3]);
                }

                objRptT.SetDataSource((DataSet)dsdatosT);

                string[] totales = new string[3];
                totales[0] = sucursal; //sucursal
                totales[1] = fecha; //fecha
                totales[2] = total.ToString(); //Total

                dsdatosT.Tables[1].Rows.Add(totales);
                cRVICCE.ReportSource = objRptT;
                cRVICCE.Refresh();
            }           
        }

        private void TiendaProveedor()
        {
            LLNet.Tienda.Reportes.CR_ConcTCrediCEK objRpt = new LLNet.Tienda.Reportes.CR_ConcTCrediCEK();
            LLNet.Tienda.Reportes.dsConcTCrediCEk dsdatos = new LLNet.Tienda.Reportes.dsConcTCrediCEk();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_ConcTCrediCEk.rpt");

            try
            {
                DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "SUCFECHACREDEK");

                string sucursal = "", fecha = "";
                foreach (DataRow Fila in dsB.Tables[0].Rows)
                {
                    sucursal = Convert.ToString(Fila[0]); //sucursal
                    fecha = Convert.ToString(Fila[1]); //fecha 
                }

                //WEB SERVICE CON SUS MÉTODOS
                GenesisCnx.Service wsGenesis = new GenesisCnx.Service();
                wsGenesis.Url = varURLE;
                XmlNode nod = wsGenesis.ConciliacionTienda(fecha, sucursal,varUSRG, varPWDG);
                XmlNodeList list = nod.SelectNodes("/datos");
                //DataSet ds = new DataSet();
                //ds.ReadXml(list);

                double total = 0; //monto total de la suma de los montos de cada recibo

                foreach (XmlNode DATO in list)
                {   

                   // MessageBox.Show(DATO.InnerXml);
                    if (DATO.HasChildNodes)
                    {                      

                        XmlNode cod_estado = DATO.SelectSingleNode("cod_estado");
                        XmlNode desc_estado = DATO.SelectSingleNode("desc_estado");
                        XmlNode err_cod_est = DATO.SelectSingleNode("err_cod_est");
                        XmlNode err_desc = DATO.SelectSingleNode("err_desc");
                        XmlNode id_trans = DATO.SelectSingleNode("id_trans");
                        XmlNode tran_jornada = DATO.SelectSingleNode("tran_jornada");
                        XmlNode tran_cedula = DATO.SelectSingleNode("tran_cedula");
                        XmlNode tran_cajero = DATO.SelectSingleNode("tran_cajero");
                        XmlNode tran_monto = DATO.SelectSingleNode("tran_monto");
                        XmlNode tran_num_caja = DATO.SelectSingleNode("tran_num_caja");
                        XmlNode id_trans_anulada = DATO.SelectSingleNode("id_trans_anulada");

                        string codestado = "", descestado = "", errcodest = "", errdesc = "", idtrans = "", idtransanulada = ""
                        , tranjornada = "", trancedula = "", trancajero = "", tranmonto = "", trannumcaja = "";

                        if (cod_estado != null)
                            codestado = cod_estado.InnerText;
                        if (desc_estado != null)
                            descestado = desc_estado.InnerText;
                        if (err_cod_est != null)
                            errcodest = err_cod_est.InnerText;
                        if (err_desc != null)
                            errdesc = err_desc.InnerText;
                        if (tran_jornada != null)
                            tranjornada = tran_jornada.InnerText;
                        if (tran_cedula != null)
                            trancedula = tran_cedula.InnerText;
                        if (tran_cajero != null)
                            trancajero = tran_cajero.InnerText;
                        if (tran_monto != null)
                            tranmonto = tran_monto.InnerText;
                        if (tran_num_caja != null)
                            trannumcaja = tran_num_caja.InnerText;
                        if (id_trans != null)
                            idtrans = id_trans.InnerText;
                        if (id_trans_anulada != null)
                            idtransanulada = id_trans_anulada.InnerText;

                        if (errcodest == "1")
                        {//CONSULTA CORRECTA
                            object[] datos = new object[9];
                            datos[0] = descestado; //W.REFERENCIA
                            datos[1] = tranjornada; //W.CEDULA 
                            datos[2] = trancedula; //.NOMBRE
                            datos[3] = trancajero; //PREFIJOSUCURSAL         
                            datos[4] = tranmonto; //W.NUMCREDITO          
                            datos[5] = trannumcaja; //W.MONTO_CANCELADO  
                            datos[6] = idtrans; //
                            if (idtransanulada == "0")
                            {
                                datos[7] = " "; //
                            }
                            else
                            {
                                datos[7] = idtransanulada; //
                            }
                            datos[8] =  " "; //ORIGEN
                            if (descestado == "COMPRA")
                            {
                                total += Convert.ToDouble(tranmonto);
                            }
                            else
                            {
                                total -= Convert.ToDouble(tranmonto);
                            }
                            dsdatos.Tables[0].Rows.Add(datos);
                        }
                        else
                        { //ERROR CONSULTA
                            //this.exito = false;
                            CApp.ShowMessage(errdesc, "Error CrediCuotas", false);
                            RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, sucursal, "", "CONSOLIDADOTIENDA");
                        }
                    }
                    else
                    {
                        //this.exito = false;
                        CApp.ShowMessage("No se obtiene datos", "Error CrediCuotas", false);
                        RegBDERRORCREDEK("", "", "", "", sucursal, "No se obtiene datos", "CONSOLIDADOJORNADATIENDA");
                    }
                }

                string[] totales = new string[3];
                totales[0] = sucursal; //Sucursal
                totales[1] = fecha ; //FECHA
                totales[2] = total.ToString(); //FECHA

                dsdatos.Tables[1].Rows.Add(totales);

                objRpt.SetDataSource((DataSet)dsdatos);

                cRVPCCE.ReportSource = objRpt;
                cRVPCCE.Refresh();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Error CrediCuotas", false);
                RegBDERRORCREDEK("", "", "", "", "", ex.Message, "CONSOLIDADOTIENDA");
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void FrmRepCrediCuotsEk_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers == Keys.None)
            {
                switch (e.KeyCode)
                {
                    case Keys.F6:
                        SBTNBUSCAR_Click(null, null);
                        break;
                    case Keys.Escape:
                        btnSalir_Click(null, null);
                        break;
                }
            }
        }

       
    }
}