using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using Newtonsoft.Json.Linq;
using System.Net;
using Newtonsoft.Json;
using System.IO;

namespace LLNet.Tienda.MainForms.Forms
{
    // Ingreso de los totales de efectivo, tarjetas, y otros medios de pago, por parte del cajero
    //muestra el total del sistema de cada uno de los rubros

    public partial class FrmIngresoTotales : LLNet.GUI.FormBases.frmBase
    {
        /// <summary>
        /// Indica si se hizo el cierre de la jornada
        /// </summary>
        private bool vCerrado = false;
        ToolTip toolTip1 = new ToolTip();

        ////*************PRUEBAS*************//
        //string URL_PAGO_EFECTIVO_TOKEN = "https://tiendasekono.com/ws_ecommerce_test/api/v1/authenticateapi/authenticate"; 
        //string URL_PAGO_EFECTIVO = "https://tiendasekono.com/ws_ecommerce_test/getcashorder"; 
        //string Username = "WS_Ecommerce_API_TEST";
        //string Password = "EcommerceEkonoWS_2019V1_TEST";
        //JObject Json = JObject.Parse(@"{""Username"":""WS_Ecommerce_API_TEST"",""Password"":""EcommerceEkonoWS_2019V1_TEST"",""IdPais"": 0}");

        /*************PRODUCCION*************
        string URL_PAGO_EFECTIVO_TOKEN = "https://tiendasekono.com/ws_ecommerce/api/v1/authenticateapi/authenticate";
        string URL_PAGO_EFECTIVO = "https://tiendasekono.com/ws_ecommerce/getcashorder";
        string Username = "WS_Ecommerce_API_PROD";
        string Password = "_WSECOM_EKONO_2019V1_PROD";
        JObject Json = JObject.Parse(@"{""Username"":""WS_Ecommerce_API_PROD"",""Password"":""_WSECOM_EKONO_2019V1_PROD"",""IdPais"": 0}");*/

        public FrmIngresoTotales()
        {
            InitializeComponent();
        }

        #region Propiedades

        public bool Cerrado
        {
            get
            {
                return this.vCerrado;
            }
        }

        #endregion

        #region mAlmTotalUsuario
        /// <summary>
        /// Almacena el total ingresado por el cajero en el total de usuario del rubro
        /// </summary>
        private void mAlmTotalUsuario()
        {
            DataSet vRubros = (DataSet)gcRubros.DataSource;
            Utils.QueryParams qp = new QueryParams();

            bool almacenado = false;

            foreach (DataRow vRubro in vRubros.Tables[0].Rows)
            {
                if (vRubro.ItemArray[4].ToString() != "")
                {
                    qp = new QueryParams();
                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    qp.AddReplaceParam("RUBRO", vRubro.ItemArray[0].ToString());
                    qp.AddReplaceParam("MONTO", vRubro.ItemArray[2].ToString());
                    //
                    //Almacena el monto del rubro
                    GUI.CApp.bll.ExecuteSql("AlmRubro", qp, "PDV");
                    //
                    almacenado = true;
                }
            }

            if (almacenado)
            {
                GUI.CApp.ShowMessage("Datos almacenados", "Registro Por Cajero", false);
            }
        }
        #endregion

        #region mCargarDepositos
        /// <summary>
        /// Carga los depósitos de la jornada
        /// </summary>
        private void mCargarDepositos()
        {
            this.gcDepositos.DataSource = null;
            this.gcDepositos.DataMember = null;

            Utils.QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            using (DataSet ds_dep = GUI.CApp.bll.getDataSet("PDV", "ObtDepositosxJorn", vParametros))
            {
                this.gcDepositos.DataSource = ds_dep;
                this.gcDepositos.DataMember = ds_dep.Tables[0].ToString();
            }
        }
        #endregion

        #region mCargarRubros
        /// <summary>
        /// Carga los rubros en el grid
        /// </summary>
        private void mCargarRubros()
        {
            gcRubros.DataSource = null;

            Utils.QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            vParametros.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            GUI.CApp.bll.ExecuteSql("REGISTRO_CAJERO", vParametros, "PDV");

            vParametros = new QueryParams();
            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            using (DataSet vds_datos = GUI.CApp.bll.getDataSet("PDV", "WMS_V_TOTALES_CAJERO", vParametros))
            {
                if (vds_datos.Tables.Count > 0 && vds_datos.Tables[0].Rows.Count > 0)
                {
                    this.gcRubros.DataSource = vds_datos;
                    this.gcRubros.DataMember = vds_datos.Tables[0].ToString();
                    //
                    mDiferenciaXRubro();
                }
            }
        }
        #endregion

        #region mCrearRubros
        /// <summary>
        /// Crea los rubros de la jornada como el total de voucher de los bancos, efectivo
        /// </summary>
        private void mCrearRubros()
        {
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            GUI.CApp.bll.ExecuteSql("REGISTRO_CAJERO", qp, "PDV");
            //
            qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            GUI.CApp.bll.ExecuteSql("MovManuales", qp, "PDV");
        }
        #endregion

        #region mDiferenciaJornada
        /// <summary>
        /// Obtiene la diferencia de la jornada
        /// </summary>
        private void mDiferenciaJornada()
        {
            string vDiferencia = String.Empty;
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            vDiferencia = GUI.CApp.bll.GetSingleValue("POS_F_DIFERENCIACC", vParametros, "PDV").ToString();

            // Se verifica que tenga datos
            if (vDiferencia != String.Empty && vDiferencia != "*")
            {
                //Se obtiene el sobrante y el faltante
                string[] vDiferencias = vDiferencia.Split('*');

                lblMontoSobr.Text = vDiferencias[0];
                lblMontoFalt.Text = vDiferencias[1];
            }
            else
            {
                this.lblMontoFalt.Text = "0";
            }
        }
        #endregion

        #region mDiferenciaXRubro
        /// <summary>
        /// Obtiene las diferencias de cada rubro, entre el sistema y el monto ingresado por el usuario
        /// </summary>
        private void mDiferenciaXRubro()
        {
            decimal vTotal = 0;

            gvRubros.CellValueChanged -=
                    new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gvRubros_CellValueChanged);

            // Recorre las filas del grid
            for (int vCont = 0; vCont < gvRubros.RowCount; vCont++)
            {
                // Obtiene la diferencia entre el total de sistema y el de usuario, del rubro
                vTotal = Convert.ToDecimal(Helpers.Nvl(gvRubros.GetRowCellValue(vCont, colTOTAL_SISTEMA), "0")) -
                    Convert.ToDecimal(Helpers.Nvl(gvRubros.GetRowCellValue(vCont, colTOTAL_USUARIO), "0"));
                vTotal *= -1;

                gvRubros.SetRowCellValue(vCont, colDIFERENCIA, vTotal);
            }

            gvRubros.CellValueChanged +=
                    new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gvRubros_CellValueChanged);
        }
        #endregion

        #region mRegistraDiferencia
        /// <summary>
        /// Registra la diferencia en un rubro
        /// </summary>
        private void mRegistraDiferencia()
        {
            int vHabilitar = 0;
            decimal vAjuste = 0;
            decimal vDiferencia = 0;

            // Diferencia entre total sistema y total usuario
            vDiferencia = Convert.ToDecimal(gvRubros.GetRowCellValue(
                gvRubros.FocusedRowHandle, colDIFERENCIA));

            // Verifica si hay una diferencia que registrar
            if (vDiferencia != 0)
            {
                Utils.QueryParams vParametros = new QueryParams();
                vParametros.AddReplaceParam("RUBRO", Convert.ToString(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colID)));

                vHabilitar = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("POS_F_HABIL_REGISTRO_DIF_RUBRO", vParametros, "PDV"));

                if (vHabilitar > 0)
                {
                    if (GUI.CApp.ValidateAccess("RegistroDifCC", "Registrar Diferencia"))
                    {
                        using (FrmRegDiferencia vform = new FrmRegDiferencia())
                        {
                            // Diferencia entre total sistema y total usuario
                            vform.Diferencia = vDiferencia;

                            // Código del rubro
                            vform.IdRubro = Convert.ToString(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colID));

                            vform.Rubro = Convert.ToString(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colRUBRO));

                            vform.TotalSistema = Convert.ToDecimal(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colTOTAL_SISTEMA));

                            vform.TotalUsuario = Convert.ToDecimal(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colTOTAL_USUARIO));

                            // Usuario
                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                            {
                                vform.Usuario = GUI.CApp.Sup;
                            }
                            else
                            {
                                vform.Usuario = GUI.CApp.usuario;
                            }

                            vform.ShowDialog();
                            mCargarRubros();
                            gcRubros.Refresh();
                        }
                    }
                }
                else
                {
                    CApp.ShowMessage("No está habilitado el registro de diferencias para este rubro", "Ingreso de Totales", true);
                }
            }
            else
            {
                //CApp.ShowMessage("No hay diferencias por registrar en el rubro", "Ingreso de Totales", true);

                // Monto ajuste
                vAjuste = Convert.ToDecimal(gvRubros.GetRowCellValue(
                gvRubros.FocusedRowHandle, colAJUSTE));

                if (vAjuste != 0)
                {
                    if (CApp.ShowMessage("El rubro ya fue ajustado, ¿desea borrar este ajuste?",
                        "Ingreso de Totales", true, true) == System.Windows.Forms.DialogResult.OK)
                    {
                        QueryParams vParametros = new QueryParams();
                        vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                        vParametros.AddReplaceParam("RUBRO", Convert.ToString(gvRubros.GetRowCellValue(
                                gvRubros.FocusedRowHandle, colID)));

                        GUI.CApp.bll.ExecuteSql("WMS_P_ELIM_DIFERENCIA", vParametros, "PDV");
                        mCargarRubros();
                        gcRubros.Refresh();
                    }
                }
            }
        }
        #endregion

        #region mReporteCC
        /// <summary>
        /// Muestra el reporte del cierre consolidado por jornada
        /// </summary>
        private void mReporteCC()
        {
            ReportDocument rep = new ReportDocument();
            rep.Load(GUI.CApp.ExeDir + "CRCierreJornada.rpt");
            //
            DataSet ds_empresa = new DataSet();
            ds_empresa = GUI.CApp.bll.getDataSet("PDV", "WMS_EMPRESAS");
            rep.Database.Tables["WMS_EMPRESAS"].SetDataSource(ds_empresa.Tables[0]);
            //
            DataSet ds_datos = new DataSet();
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            ds_datos = GUI.CApp.bll.getDataSet("PDV", "WMS_V_REP_CIERRES_CONSOLIDADOS", qp);
            if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
            {
                rep.Database.Tables["WMS_V_CIERRE_CONSOLIDADO"].SetDataSource(ds_datos.Tables[0]);

                //Obtiene el sobrante o faltante de la jornada
                DataSet vAjuste = new DataSet();
                vAjuste = GUI.CApp.bll.getDataSet("PDV", "DIFERENCIAS_OBSERVACIONES_JORNADA", qp);

                rep.Database.Tables["AJUSTE"].SetDataSource(vAjuste.Tables[0]);

                rep.Refresh();
                FrmReporte report = new FrmReporte(rep);
                report.ShowDialog();
            }
            else
            {
                GUI.CApp.ShowMessage("No hay datos para mostrar", "Ingreso de Totales", false);
            }
        }
        #endregion

        #region mReporteCobroFaltantes
        /// <summary>
        /// Muestra el reporte con el cobro del faltante, a menos que no tenga ningún faltante
        /// </summary>
        private void mReporteCobroFaltantes()
        {
            ReportDocument vReporte = new ReportDocument();
            vReporte.Load(GUI.CApp.ExeDir + "CRReciboFaltantes.rpt");
            //
            Utils.QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            using (DataSet vDatos = GUI.CApp.bll.getDataSet("PDV", "POS_V_COBRO_DIFERENCIASCC", vParametros))
            {
                if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                {
                    vReporte.Database.Tables["POS_V_COBRO_DIFERENCIASCC"].SetDataSource(vDatos.Tables[0]);

                    vReporte.Refresh();
                    FrmReporte vForm = new FrmReporte(vReporte);
                    vForm.ShowDialog();
                }
            }
        }
        #endregion

        private void mCargarFondoWU()
        {
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
            // Obtiene el monto deL fondo
            lblfondowu.Text = "Fondo Disp : " + Convert.ToString(GUI.CApp.bll.GetSingleValue("WU_FONDODISP", vParametros, "PDV"));
        }

        #region FrmIngresoTotales_Load
        private void FrmIngresoTotales_Load(object sender, EventArgs e)
        {
            try
            {
                DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm("Calculando totales...", "Cierre");
                mCrearRubros();
                mCargarDepositos();
                mCargarRubros();
                mDiferenciaJornada();
                mCargarFondoWU();
                wdf.Close();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region btnCancelar_Click
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
        #endregion

        #region gvRubros_CellValueChanged
        private void gvRubros_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            try
            {
                decimal vTotal = 0;
                vTotal = Convert.ToDecimal(Helpers.Nvl(gvRubros.GetRowCellValue(e.RowHandle, colTOTAL_USUARIO), "0")) -
                    Convert.ToDecimal(Helpers.Nvl(gvRubros.GetRowCellValue(e.RowHandle, colTOTAL_SISTEMA), "0"));

                gvRubros.CellValueChanged -=
                    new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gvRubros_CellValueChanged);

                gvRubros.SetRowCellValue(e.RowHandle, colDIFERENCIA, vTotal);
                gvRubros.CellValueChanged +=
                    new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gvRubros_CellValueChanged);
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region linkDIFERENCIA_Click
        private void linkDIFERENCIA_Click(object sender, EventArgs e)
        {
            try
            {
                //int vTipoPago = Convert.ToInt32(gvRubros.GetRowCellValue(
                //    gvRubros.FocusedRowHandle, colTIPO_PAGO));

                //// Verifica si el rubro tiene un tipo de pago
                //if (vTipoPago > 0)
                //{
                //    // Si tiene un tipo de pago, se puede modificar
                //    using (FrmBusquedaPagos vform = new FrmBusquedaPagos())
                //    {
                //        vform.Cambiar = true;
                //        vform.Emisor = Convert.ToInt32(gvRubros.GetRowCellValue(
                //            gvRubros.FocusedRowHandle, colEMISOR));
                //        vform.NumGrid = Convert.ToInt32(gvRubros.GetRowCellValue(
                //            gvRubros.FocusedRowHandle, colNUM_GRID));
                //        vform.NumRubro = Convert.ToString(gvRubros.GetRowCellValue(
                //            gvRubros.FocusedRowHandle, colID));
                //        vform.Pago = Convert.ToString(gvRubros.GetRowCellValue(
                //            gvRubros.FocusedRowHandle, colRUBRO));
                //        vform.TipoPago = vTipoPago;

                //        vform.ShowDialog();
                //        mCargarRubros();
                //        gcRubros.Refresh();
                //    }
                //}
                //else
                //{
                //    CApp.ShowMessage("El rubro " + gvRubros.GetRowCellValue(gvRubros.FocusedRowHandle, colRUBRO).ToString()
                //        + " no puede ser modificado a nivel de facturas/recibos", "Ingreso de Totales", true);
                //}

                int vTipoPago = Convert.ToInt32(gvRubros.GetRowCellValue(
                    gvRubros.FocusedRowHandle, colTIPO_PAGO));

                // Si tiene un tipo de pago, se puede modificar
                using (FrmBusquedaPagos vform = new FrmBusquedaPagos())
                {
                    // Verifica si el rubro tiene un tipo de pago
                    if (vTipoPago > 0)
                    {
                        vform.Cambiar = true;
                    }
                    else
                    {
                        vform.Cambiar = false;

                        CApp.ShowMessage("El rubro " + gvRubros.GetRowCellValue(gvRubros.FocusedRowHandle, colRUBRO).ToString()
                            + " no puede ser modificado a nivel de facturas/recibos, solo se pueden visualizar los datos", "Ingreso de Totales", true);
                    }

                    vform.Emisor = Convert.ToInt32(gvRubros.GetRowCellValue(
                        gvRubros.FocusedRowHandle, colEMISOR));
                    vform.NumGrid = Convert.ToInt32(gvRubros.GetRowCellValue(
                        gvRubros.FocusedRowHandle, colNUM_GRID));
                    vform.NumRubro = Convert.ToString(gvRubros.GetRowCellValue(
                        gvRubros.FocusedRowHandle, colID));
                    vform.Pago = Convert.ToString(gvRubros.GetRowCellValue(
                        gvRubros.FocusedRowHandle, colRUBRO));
                    vform.TipoPago = vTipoPago;

                    vform.ShowDialog();
                    mCargarRubros();
                    mDiferenciaJornada();
                    gcRubros.Refresh();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region rtxtTotalUsuario_Click
        private void rtxtTotalUsuario_Click(object sender, EventArgs e)
        {
            try
            {
                bool vEditable = Convert.ToBoolean(gvRubros.GetRowCellValue(
                    gvRubros.FocusedRowHandle, colEDITABLE));
                               // Verifica si el valor puede ser modificado por el usuario
                gvRubros.FocusedColumn.ColumnEdit.ReadOnly = false;
                if (!vEditable)
                {
                    gvRubros.FocusedColumn.ColumnEdit.ReadOnly = true;
                    //Sino puede ser editado el valor, cambia a la columna de sistema, la cual no es editable
                    gvRubros.FocusedColumn = colTOTAL_SISTEMA;
                    gvRubros.RefreshData();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region FrmIngresoTotales_KeyDown
        private void FrmIngresoTotales_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                switch (e.KeyCode)
                {
                    case Keys.F10:
                        sbtnCerrarJornada.PerformClick();
                        break;
                    case Keys.F11:
                        sbtnModDepositos.PerformClick();
                        break;
                    case Keys.F12:
                        sbtnGuardarTotales.PerformClick();
                        break;
                    case Keys.Escape:
                        btnCancelar.PerformClick();
                        break;
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region sbtnGuardarTotales_Click
        private void sbtnGuardarTotales_Click(object sender, EventArgs e)
        {
            try
            {
                mAlmTotalUsuario();
                mDiferenciaJornada();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region sbtnModDepositos_Click
        private void sbtnModDepositos_Click(object sender, EventArgs e)
        {
            try
            {
                // Valida que haya depósitos
                if (gvDepositos.DataRowCount > 0)
                {
                    if (GUI.CApp.ValidateAccess("ModificacionDepositoCC", "Modificar Depósitos"))
                    {
                        using (CierreConsol.FrmModDepositos vform = new CierreConsol.FrmModDepositos())
                        {
                            // Usuario
                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                            {
                                vform.Usuario = GUI.CApp.Sup;
                            }
                            else
                            {
                                vform.Usuario = GUI.CApp.usuario;
                            }

                            vform.ShowDialog();
                            mCargarDepositos();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region linkREGISDIF_Click
        private void linkREGISDIF_Click(object sender, EventArgs e)
        {
            try
            {
                mRegistraDiferencia();
                mDiferenciaJornada();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region sbtnCerrarJornada_Click
        private void sbtnCerrarJornada_Click(object sender, EventArgs e)
        {
            try
            {
                bool flag = LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("FPEE").Equals("1");
                if (flag)
                {
                    Utils.QueryParams qp1 = new QueryParams();
                    qp1.AddReplaceParam("CAJA", Utils.Helpers.ObjToStr(Program.Caja).ToString());
                    DataSet DS_num_recibos = GUI.CApp.bll.getDataSet("PDV", "C_Cantidad_Recibos_E_Eco", qp1);

                    var C_REcibos = DS_num_recibos.Tables[0].Rows[0][0];
                    var CJson = ObtenerOrdenesFacturar();
                    
                    //var CJson = ObtenerDatosApi(ObtenerToken(), Utils.Helpers.ObjToStr(Program.Caja).ToString()).Count;
                    //flag = C_REcibos.ToString().Equals(CJson.ToString()) ? true : false;
                    
                    flag = C_REcibos.ToString().Equals(CJson.Count().ToString()) ? true : false;
                    if (!flag)
                    {
                        GUI.CApp.ShowMessage("No puede cerrar Tienda, existen compras de efectivo Ecommerce no procesadas", "Atención", true);
                        return;
                    }
                }

                if (GUI.CApp.ValidateAccess("CierRegxCajero", "Registro Por Cajero"))
                {
                    string supervisor = "";
                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                        supervisor = GUI.CApp.Sup;

                    Utils.QueryParams qp = new QueryParams();
                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    if (supervisor != null && supervisor != "")
                        qp.AddReplaceParam("USUARIO", supervisor);
                    else
                        qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                    //
                    GUI.CApp.bll.ExecuteSql("CerrarRegC", qp, "PDV");

                    mReporteCobroFaltantes();
                    mReporteCC();

                    qp.AddReplaceParam("ESTADO", "S");
                    GUI.CApp.bll.ExecuteSql("CerrarJornada", qp, "PDV");

                    this.gcRubros.Enabled = false;

                    vCerrado = true;
                    this.Dispose();
                }

            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        #region lnkRUBRO_Click
        private void lnkRUBRO_Click(object sender, EventArgs e)
        {
            try
            {
                decimal vDiferencia = 0;
                string vRubro = String.Empty;

                // Diferencia entre total sistema y total usuario
                vDiferencia = Convert.ToDecimal(gvRubros.GetRowCellValue(
                    gvRubros.FocusedRowHandle, colAJUSTE));
                // Rubro
                vRubro = Convert.ToString(gvRubros.GetRowCellValue(
                    gvRubros.FocusedRowHandle, colRUBRO));

                if (vRubro.Length >= 13)
                {
                    vRubro = vRubro.Substring(0, 13);
                }

                lblDiferencia.Text = vDiferencia.ToString() + " " + vRubro;
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Ingreso de Totales", true);
            }
        }
        #endregion

        /*#region API
        private string ObtenerToken()
        {
            string Token = "";
            try
            {
                var dataToSend = UTF8Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Json));

                HttpWebRequest request;
                request = WebRequest.Create(URL_PAGO_EFECTIVO_TOKEN) as HttpWebRequest;
                request.Timeout = 10 * 1000;
                request.Method = "POST";
                request.ContentLength = dataToSend.Length;
                request.ContentType = "application/json; charset=utf-8";

                //string credencilas = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(@"{""Username"":""WS_Ecommerce_API_TEST"",""Password"":""EcommerceEkonoWS_2019V1_TEST"",""IdPais"": 0}"));
                //request.Headers.Add("Authorization","Basic "+credencilas);


                request.Headers.Add("Username", Username); 
                request.Headers.Add("Password", Password); 

                request.Headers.Add("IdPais", "0");

                Stream postStream = request.GetRequestStream();
                postStream.Write(dataToSend, 0, dataToSend.Length);

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                StreamReader reader = new StreamReader(response.GetResponseStream());
                Token = reader.ReadToEnd();

                //CON ESTAS 2 LINEAS LOGRAMOS ESCRIBIR EN EL LOG
                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Convert.ToString("Token Efectivo Ecommerce " + Token));


            }
            catch (Exception ex)
            {
                //CON ESTAS 2 LINEAS LOGRAMOS ESCRIBIR EN EL LOG
                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Convert.ToString("Token Efectivo Ecommerce " + ex));
                throw ex;
            }

            return Token;
        }

        private List<FacturaEfectivoEco> ObtenerDatosApi(string Token, string caja)
        {
            List<FacturaEfectivoEco> Lista = new List<FacturaEfectivoEco>();
            try
            {
                var Cod_Sucursal = LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BREE");
                //var Cod_Sucursal = "470000000";

                var Fecha_Inicio_DB = Convert.ToDateTime(GUI.CApp.bll.GetSingleValue("C_Fecha_Inicio_E_Eco", "PDV"));
                var Fecha_Fin_DB = Convert.ToDateTime(GUI.CApp.bll.GetSingleValue("C_Fecha_Fin_E_Eco", "PDV"));

                var Fecha_Inicial = Fecha_Inicio_DB.Date.ToString("yyyy-MM-dd");
                var Fecha_Final = Fecha_Fin_DB.Date.ToString("yyyy-MM-dd");

                JObject Json = JObject.Parse(@"{""COD_SUCURSAL"": """ + Cod_Sucursal + @""",""NUM_CAJA"":" + caja + @",""FECHA_INICIO"": """ + Fecha_Inicial + @""",""FECHA_FIN"": """ + Fecha_Final + @"""}");

                var dataToSend = UTF8Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Json));

                HttpWebRequest request;
                request = WebRequest.Create(URL_PAGO_EFECTIVO) as HttpWebRequest; 
                request.Timeout = 10 * 1000;
                request.Method = "POST";
                request.ContentLength = dataToSend.Length;
                request.ContentType = "application/json; charset=utf-8";

                Token = Token.Replace('"', ' ');
                
                request.Headers.Add("COD_SUCURSAL", Cod_Sucursal.Trim().ToString());
                //request.Headers.Add("FECHA_INICIO", "2019-01-19");
                //request.Headers.Add("FECHA_FIN", "2019-12-19");

                request.Headers.Add("FECHA_INICIO", Fecha_Inicial);
                request.Headers.Add("FECHA_FIN", Fecha_Final);

                request.Headers.Add("NUM_CAJA", Utils.Helpers.ObjToStr(Program.Caja).ToString());
                request.Headers.Add("Authorization", Token);

                Stream postStream = request.GetRequestStream();
                postStream.Write(dataToSend, 0, dataToSend.Length);

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                StreamReader reader = new StreamReader(response.GetResponseStream());
                var ListaJson = reader.ReadToEnd();

                Lista = JsonConvert.DeserializeObject<List<FacturaEfectivoEco>>(ListaJson);

                //CON ESTAS 2 LINEAS LOGRAMOS ESCRIBIR EN EL LOG
                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Convert.ToString("JSON Efectivo Ecommerce " + ListaJson.ToString()));
            }
            catch (Exception ex)
            {
                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Convert.ToString("Error ObtenerDatosApi: " + ex));
                throw ex;
            }
            return Lista;
        }
        #endregion*/


        private List<FacturaEfectivoEco> ObtenerOrdenesFacturar()
        {
            try
            {
                var cod_Sucursal = LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BREE");
                var caja = Utils.Helpers.ObjToStr(Program.Caja).ToString();

                QueryParams parameters = new QueryParams();
                parameters.Clear();
                parameters.AddReplaceParam("COD_SUCURSAL", cod_Sucursal.TrimEnd().ToString());
                parameters.AddReplaceParam("CAJA", caja.TrimEnd().ToString());

                DataSet vDataSet = CApp.bll.getDataSet("PDV", "Obt_Ordenes_efectivo_ecom_x_caja", parameters);
                if (vDataSet.Tables.Count > 0)
                {
                    var vJson = JsonConvert.SerializeObject(vDataSet.Tables[0]);
                    return JsonConvert.DeserializeObject<List<FacturaEfectivoEco>>(vJson);
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}