using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;
using System.Collections;
using Microsoft.Win32;
using PoswareRMS;
using DevExpress.XtraEditors;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net;
using System.IO;
using BNCRLaro = LARO.CallWirePos;

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class FrmCierreJornada2 : LLNet.GUI.FormBases.frmBase
    {
        ////*************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}");*/

        #region Declaraciones

        private bool cell_change;
        private decimal EfectivoC;
        private decimal DevEfectivo;
        private decimal ApartadosAnu;
        private decimal MontoTarjetas;
        private DataSet dsEmisores = new DataSet();
        private DataSet dsemisor = new DataSet();
        private string TipoJornada;

        #endregion

        #region Constructor

        public FrmCierreJornada2()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }

        #endregion

        #region Metodos Privados

        private void materializar_jornada(Utils.QueryParams qp)
        {
            try
            {
                GUI.CApp.bll.ExecuteSql("ACTUALIZAR_JORNADA", qp, "PDV").ToString();
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Cierre de Jornada", true);
            }
        }

        private void diferencial_cambiario(Utils.QueryParams qp)
        {
            try
            {
                GUI.CApp.bll.ExecuteSql("DIFERENCIAL_CAMBIARIO", qp, "PDV").ToString();
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Cierre de Jornada", true);
            }
        }

        private void actualizar()
        {
            // Actualizando informacion para Diferencia Cambiario
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            // Materializando informacion
            materializar_jornada(qp);

            dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.TableName, qp), dsPDV1);
        }

        #region mEnviar_Facturas
        /// <summary>
        /// Busca las tramas que no se han enviado al proveedor
        /// </summary>
        private void mEnviar_Facturas()
        {
            string vClave = String.Empty, vCodigo = String.Empty;
            string vDocumento = String.Empty;
            QueryParams vParametros = new QueryParams();
            string vRespuesta = String.Empty;
            string vRespuesta_Xml = String.Empty;
            try
            {
                // Verifica si se envían las tramas
                if (Utils.Helpers.Nvl(CApp.GetParam("FETC"), "N").ToString() == "S")
                {
                    // Genera las tramas de documentos que no tienen
                    GUI.CApp.bll.ExecuteSql("FE_P_CREAR_TRAMAS_FALTANTES", "PDV");

                    using (DataSet vDocumentos = GUI.CApp.bll.getDataSet("PDV", "FE_V_DOCUMENTOS_TRAMAS"))
                    {
                        // Verifica que tenga datos
                        if (vDocumentos.Tables.Count > 0 && vDocumentos.Tables[0].Rows.Count > 0)
                        {
                            using (DataSet vDatos_Envio = GUI.CApp.bll.getDataSet("PDV", "OBTENER_DATOS_ENVIO"))
                            {
                                if (vDatos_Envio.Tables.Count > 0 && vDatos_Envio.Tables[0].Rows.Count > 0)
                                {
                                    foreach (DataRow vDato in vDocumentos.Tables[0].Rows)
                                    {
                                        vDocumento = vDato.ItemArray[0].ToString();

                                        vParametros = new QueryParams();
                                        vParametros.AddReplaceParam("pNDOCUMENTO", vDato.ItemArray[0].ToString());
                                        //
                                        // Se crea la trama
                                        GUI.CApp.bll.ExecuteSql("FE_P_CREAR_TRAMA", vParametros, "PDV");
                                        //
                                        // Obtiene la trama
                                        using (DataSet vDatos = GUI.CApp.bll.getDataSet("PDV", "OBTENER_SOLO_TRAMAS", vParametros))
                                        {
                                            if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                                            {
                                                try
                                                {
                                                    WSAVD.WSFEBuilderSoapClient vFact_Elect = new WSAVD.WSFEBuilderSoapClient();
                                                    // Envía la trama
                                                    vRespuesta_Xml = vFact_Elect.procesarTextoPlano(vDatos_Envio.Tables[0].Rows[0].ItemArray[0].ToString(),
                                                        vDatos_Envio.Tables[0].Rows[0].ItemArray[1].ToString(), vDatos_Envio.Tables[0].Rows[0].ItemArray[2].ToString(),
                                                        vDatos.Tables[0].Rows[0].ItemArray[1].ToString(), vDatos.Tables[0].Rows[0].ItemArray[0].ToString());
                                                    //
                                                    if (!String.IsNullOrEmpty(vRespuesta_Xml))
                                                    {
                                                        XmlDocument vXml_Doc = new XmlDocument();
                                                        vXml_Doc.LoadXml(vRespuesta_Xml);
                                                        //
                                                        using (DataSet vDatosXML = new DataSet())
                                                        {
                                                            vDatosXML.ReadXml(new XmlNodeReader(vXml_Doc));

                                                            if (vDatosXML.Tables.Count > 0 && vDatosXML.Tables[0].Rows.Count > 0)
                                                            {
                                                                // Código respuesta del proveedor
                                                                vCodigo = vDatosXML.Tables[0].Rows[0].ItemArray[0].ToString();
                                                                vRespuesta = vDatosXML.Tables[0].Rows[0].ItemArray[2].ToString();

                                                                if (vCodigo.Replace("'", "") == "S0001")
                                                                {
                                                                    vClave = vDatosXML.Tables[0].Rows[0].ItemArray[3].ToString();
                                                                }
                                                                else
                                                                {
                                                                    vClave = String.Empty;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    //
                                                    // Almacena la respuesta
                                                    vParametros.AddReplaceParam("pCCODIGO", vCodigo.Replace("'", ""));
                                                    vParametros.AddReplaceParam("pCRESPUESTA", vRespuesta.Replace("'", ""));
                                                    vParametros.AddReplaceParam("pCRESPUESTA_XML", vRespuesta_Xml.Replace("'", ""));
                                                    vParametros.AddReplaceParam("pCCLAVE", vClave);
                                                    GUI.CApp.bll.ExecuteSql("FE_P_ALM_RESPUESTA", vParametros, "PDV");
                                                }
                                                catch (Exception vError)
                                                {
                                                    vParametros = new QueryParams();
                                                    // Error envío AVD
                                                    vParametros.AddReplaceParam("pNDOCUMENTO", vDocumento.ToString());
                                                    vParametros.AddReplaceParam("pCERROR", vError.Message.Replace("'", ""));
                                                    //
                                                    GUI.CApp.bll.ExecuteSql("FE_P_REGISTRO_ERROR", vParametros, "PDV");
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception vError)
            {
                vParametros = new QueryParams();
                // Error envío AVD
                vParametros.AddReplaceParam("pNDOCUMENTO", vDocumento.ToString());
                vParametros.AddReplaceParam("pCERROR", vError.Message.Replace("'", ""));
                //
                GUI.CApp.bll.ExecuteSql("FE_P_REGISTRO_ERROR", vParametros, "PDV");
            }
        }
        #endregion

        #endregion

        #region Metodos Sobreescritos

        public override void Init(object[] pArgs)
        {
            base.Init(pArgs);

            actualizar();
            TipoJornada = Utils.Helpers.Nvl(GUI.CApp.GetParam("TJPO"), "D").ToString();

            dsPDV1.DOC_CUENTAS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.DOC_CUENTAS.TableName), dsPDV1);

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.TableName, qp), dsPDV1);

            cell_change = false;
            //Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "MONEDA");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsGeneral1.GetType(), dsGeneral1.CG_REF_CODES.TableName, qp), dsGeneral1);
            qp.Clear();
            qp.AddReplaceParam("RV_DOMAIN", "DENOMINACIONES ARQUEO");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsGeneral2.GetType(), dsGeneral2.CG_REF_CODES.TableName, qp), dsGeneral2);

            qp.Clear();
            qp.AddReplaceParam("RV_DOMAIN", "ESTADO ARQUEO");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsGeneral3.GetType(), dsGeneral3.CG_REF_CODES.TableName, qp), dsGeneral3);
        }

        #endregion

        #region Eventos

        private void frmCierreJornada_Load(object sender, EventArgs e)
        {
            bool datosSistema = GUI.CApp.GetAccess("TDA_DatosSistema");

            JornadasE();
            RefreshAmounts();

            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");

            xtraTabControl1_SelectedPageChanged(null, new DevExpress.XtraTab.TabPageChangedEventArgs(tpArqueos, tpArqueos));
        }

        private void JornadasE()
        {

        }

        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {

            if (cell_change == true)
            {
                cell_change = false;
                return;
            }

        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (TipoJornada == "D")
            {
                GUI.CApp.bll.updateDataSet(dsPDV1, dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.TableName);
                actualizar();
                //DialogResult = DialogResult.OK;
            }
            else
            {
                //Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                //qp.AddReplaceParam("MONTO", Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Tarjeta1"], 0).ToString());
                //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //qp.AddReplaceParam("TIPO_PAGO", Utils.Helpers.Nvl(dsEmisores.Tables[0].Rows[0]["RV_LOW_VALUE"], 0).ToString());
                //GUI.CApp.bll.ExecuteSql("UpdateJornadasE", qp, "PDV");
                //qp.Clear();
                //qp.AddReplaceParam("MONTO", Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TARJETA2"], 0).ToString());
                //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //qp.AddReplaceParam("TIPO_PAGO", Utils.Helpers.Nvl(dsEmisores.Tables[0].Rows[1]["RV_LOW_VALUE"], 0).ToString());
                //GUI.CApp.bll.ExecuteSql("UpdateJornadasE", qp, "PDV");
                //qp.Clear();
                //qp.AddReplaceParam("MONTO", Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TARJETA3"], 0).ToString());
                //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //qp.AddReplaceParam("TIPO_PAGO", Utils.Helpers.Nvl(dsEmisores.Tables[0].Rows[2]["RV_LOW_VALUE"], 0).ToString());
                //GUI.CApp.bll.ExecuteSql("UpdateJornadasE", qp, "PDV");
                //qp.Clear();
                //qp.AddReplaceParam("MONTO", Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["CREDIX"], 0).ToString());
                //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //qp.AddReplaceParam("TIPO_PAGO", Utils.Helpers.Nvl(dsEmisores.Tables[0].Rows[3]["RV_LOW_VALUE"], 0).ToString());
                //GUI.CApp.bll.ExecuteSql("UpdateJornadasE", qp, "PDV");
                //qp.Clear();
                //qp.AddReplaceParam("MONTO", Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["CREDICUOTAS"], 0).ToString());
                //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //qp.AddReplaceParam("TIPO_PAGO", Utils.Helpers.Nvl(dsEmisores.Tables[0].Rows[4]["RV_LOW_VALUE"], 0).ToString());
                //GUI.CApp.bll.ExecuteSql("UpdateJornadasE", qp, "PDV");





                GUI.CApp.bll.updateDataSet(dsPDV1, dsPDV1.RET_V_DETALLE_PAGOS_X_JORNADA.TableName);
                actualizar();
                //DialogResult = DialogResult.OK;
            }
        }
        //revisar
        private void frmCierreJornada_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers == Keys.Alt)
            {
                switch (e.KeyCode)
                {
                    case Keys.D:
                        sbtnModDepositos_Click(null, null);
                        break;
                    case Keys.E:
                        btnCredCuotsEk_Click(null, null);
                        break;
                    case Keys.R:
                        sbtnReporteCC_Click(null, null);
                        break;
                    case Keys.W:
                        btnFondosWU_Click(null, null);
                        break;
                    case Keys.F11:
                        btnRetiros_Click(null, null);
                        break;
                    case Keys.F:
                        btnFE_Compra_Click(null, null);
                        break;
                }
            }
            if (e.Modifiers == Keys.None)
            {
                switch (e.KeyCode)
                {
                    case Keys.F2:
                        sbtnCierreTienda_Click(null, null);
                        break;
                    case Keys.F5:
                        sbtnCierreTarj_Click(null, null);
                        break;
                    case Keys.F6:
                        btnCerrarJornada_Click(null, null);
                        break;
                    case Keys.F7:
                        btnImprimirJ_Click(null, null);
                        break;
                    case Keys.F8:
                        btnNuevoArq_Click(null, null);
                        break;
                    case Keys.F9:
                        btnGuardarArq_Click(null, null);
                        break;
                    case Keys.F10:
                        btnImprimir_Click(null, null);
                        break;
                    case Keys.F11:
                        btnCerrarArq_Click(null, null);
                        /*if (tabJornadas.SelectedTabPage.Text == tpArqueos.Text)
                        {
                            btnCerrarArq_Click(null, null);
                        }
                        else if (tabJornadas.SelectedTabPage.Text == tpCierre.Text)
                        {
                            btnRetiros_Click(null, null);
                        }*/
                        break;
                    case Keys.F12:
                        btnAceptar_Click(null, null);
                        break;
                    case Keys.Escape:
                        btnSalir_Click(null, null);
                        break;
                }
            }
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ResumenJornada", "Resumen de Jornada"))
            {
                using (frmResumenJornada rj = new frmResumenJornada())
                {
                    rj.Init(null);
                    rj.ShowDialog();
                }
            }
        }

        private void btnArqueo_Click(object sender, EventArgs e)
        {
            using (frmArqueoJornada arj = new frmArqueoJornada())
            {
                //object[] obj = new object[] { Program.Jornada, gridView1.GetFocusedRowCellValue(colTIPO_PAGO) };
                //arj.Init(obj);
                //arj.ShowDialog(this);
            }
        }

        #endregion

        private void btnCorteParcial_Click(object sender, EventArgs e)
        {

        }

        private void btnRetiros_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("Retiros", "Ingreso Retiros"))
            {
                using (frmRetiros ret = new frmRetiros())
                {
                    //object[] obj = new object[] { Program.Jornada, gridView1.GetFocusedRowCellValue(colTIPO_PAGO) };
                    //arj.Init(obj);
                    ret.ShowDialog(this);
                    JornadasE();
                    RefreshAmounts();
                }
            }

        }

        private void xtraTabControl1_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
        {
            if (e.Page.Text == tpArqueos.Text)
            {
                btnArqueo.Visible = false;
                //btnImprimir.Visible = false;
                btnRetiros.Visible = false;
                btnCorteParcial.Visible = false;
                LoadArqData();
            }
            else if (e.Page.Text == tpCierre.Text)
            {
                btnRetiros.Visible = true;
            }
        }

        private void LoadArqData()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            //dsArqueos1.WMS_ARQUEOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsArqueos1.GetType(), dsArqueos1.WMS_ARQUEOS.TableName, qp), dsArqueos1);
            if (dsArqueos1.WMS_ARQUEOS.Rows.Count > 0)
            {
                qp.AddReplaceParam("ARQUEO", gvArqueos.GetFocusedRowCellValue(colARQUEO).ToString());
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsArqueos1.GetType(), dsArqueos1.WMS_DETALLE_ARQUEOS.TableName, qp), dsArqueos1);
            }

            EstadoArqueo();
        }

        private void gvArqueos_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            EstadoArqueo();
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("ARQUEO", gvArqueos.GetFocusedRowCellValue(colARQUEO).ToString());
            dsArqueos1.WMS_DETALLE_ARQUEOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsArqueos1.GetType(), dsArqueos1.WMS_DETALLE_ARQUEOS.TableName, qp), dsArqueos1);
        }

        private void EstadoArqueo()
        {
            if (dsArqueos1.WMS_ARQUEOS.Rows.Count > 0)
            {
                if (gvArqueos.GetFocusedRowCellValue(colESTADO).ToString() == "C")
                {
                    colCANTIDAD.OptionsColumn.AllowEdit = false;
                    colCANTIDAD.OptionsColumn.ReadOnly = true;
                }
                else
                {
                    colCANTIDAD.OptionsColumn.AllowEdit = true;
                    colCANTIDAD.OptionsColumn.ReadOnly = false;
                }
            }
        }

        private void btnNuevoArq_Click(object sender, EventArgs e)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            int ArqueosA = Convert.ToInt16(GUI.CApp.bll.GetSingleValue("ArqueosA", qp, "PDV"));

            if (ArqueosA <= 0)
            {

                string Arqueo = GUI.CApp.GetSecuence("WMS_S_ARQUEO").ToString();
                qp.AddReplaceParam("ARQUEO", Arqueo);
                qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                GUI.CApp.bll.ExecuteSql("NuevoArqueo", qp, "PDV");
                LoadArqData();
            }
            else
            {
                GUI.CApp.ShowMessage("Tiene al menos un Arqueo Abierto, debe Cerrarlo para poder crear uno Nuevo", "Nuevo Arqueo", true);

            }

        }

        private void btnGuardarArq_Click(object sender, EventArgs e)
        {
            gvArqueos.PostEditor();
            gvArqueos.UpdateCurrentRow();

            GUI.CApp.bll.updateDataSet(dsArqueos1, dsArqueos1.WMS_DETALLE_ARQUEOS.TableName);
            LoadArqData();
        }

        private void btnCerrarArq_Click(object sender, EventArgs e)
        {
            if (gvArqueos.GetFocusedRowCellValue(colESTADO).ToString() == "A")
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("ARQUEO", gvArqueos.GetFocusedRowCellValue(colARQUEO).ToString());
                GUI.CApp.bll.ExecuteSql("CerrarArqueo", qp, "PDV");
                LoadArqData();
                gvArqueos.RefreshData();
            }
        }

        private void Vgc_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e)
        {
            decimal TotalU = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Retiros"], 0));
            decimal Tarjeta1 = 0;
            decimal Tarjeta2 = 0;
            decimal Tarjeta3 = 0;
            decimal Credix = 0;
            decimal CrediCuotas = 0;


            Tarjeta1 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta1"], 0));
            Tarjeta2 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta2"], 0));
            Tarjeta3 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta3"], 0));
            Credix = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Credix"], 0));
            CrediCuotas = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["CrediCuotas"], 0));
            //PagosCredito = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["PagosCredito"], 0));


            if (e.Row.Name == "rowTarjeta1")
                Tarjeta1 = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));
            if (e.Row.Name == "rowTarjeta2")
                Tarjeta2 = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));
            if (e.Row.Name == "rowTarjeta3")
                Tarjeta3 = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));
            if (e.Row.Name == "rowCredix")
                Credix = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));
            if (e.Row.Name == "rowCrediCuotas")
                CrediCuotas = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));
            /*if (e.Row.Name == "rowPagosCredito")
                PagosCredito = Convert.ToDecimal(Utils.Helpers.Nvl(e.Value, 0));*/

            //GIFT CARD
            QueryParams qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            decimal giftc = Convert.ToDecimal(CApp.bll.GetSingleValue("TotalGiftCard", qp, "PDV").ToString());

            /*CREDIX
            qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            decimal credx = Convert.ToDecimal(CApp.bll.GetSingleValue("TotalPagoCredix", qp, "PDV").ToString());
            */

            dsArqueos1.JORNADASE.Rows[0]["Total_Usuario"] = TotalU + Tarjeta1 + Tarjeta2 + Tarjeta3 + giftc + Credix + CrediCuotas;
            decimal Sobrante = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Usuario"], 0)) - Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Sistema"], 0));

            dsArqueos1.JORNADASE.Rows[0]["Sobrante"] = Sobrante;
            dsArqueos1.JORNADASE.Rows[0]["CrediCuotas"] = CrediCuotas;
            //dsArqueos1.JORNADASE.Rows[0]["PagosCredito"] = PagosCredito;

        }

        private void RefreshAmounts()
        {
            //decimal TotalU = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Retiros"], 0));
            //decimal Tarjeta1 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta1"], 0));
            //decimal Tarjeta2 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta2"], 0));
            //decimal Tarjeta3 = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["TArjeta3"], 0));
            //decimal Credix = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Credix"], 0));
            //decimal CrediCuotas = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["CrediCuotas"], 0));


            ////GIFT CARD
            //QueryParams qp = new QueryParams();
            //qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            //decimal giftc = Convert.ToDecimal(CApp.bll.GetSingleValue("TotalGiftCard", qp, "PDV").ToString());

            //dsArqueos1.JORNADASE.Rows[0]["Total_Usuario"] = TotalU + Tarjeta1 + Tarjeta2 + Tarjeta3 + giftc + Credix + CrediCuotas;
            //decimal Sobrante = Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Usuario"], 0)) - Convert.ToDecimal(Utils.Helpers.Nvl(dsArqueos1.JORNADASE.Rows[0]["Total_Sistema"], 0));

            //dsArqueos1.JORNADASE.Rows[0]["Sobrante"] = Sobrante;
        }

        private void btnImprimirJ_Click(object sender, EventArgs e)
        {
            btnAceptar_Click(null, null);
            decimal MaxArqueo;
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            //MaxArqueo = Convert.ToDecimal(Utils.Helpers.Nvl(GUI.CApp.bll.GetSingleValue("MaxArqueo", qp, "Reports"), 0));
            MaxArqueo = Convert.ToDecimal(gvArqueos.GetFocusedRowCellValue(colARQUEO));

            //Model.Reports.dsArqueos dsArqueos = new LLNet.Model.Reports.dsArqueos();
            //Hashtable ht = new Hashtable();
            //Utils.QueryParams QueryParams = new QueryParams();
            //Utils.QueryParams qpDet = new QueryParams();
            //QueryParams.AddReplaceParam("ARQUEO", MaxArqueo.ToString());
            //QueryParams.AddReplaceParam("CAJA", Program.Caja.ToString());
            //QueryParams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            //ht.Add(dsArqueos.WMS_ARQUEOS.TableName, QueryParams);
            //ht.Add(dsArqueos.WMS_DETALLE_ARQUEOS.TableName, QueryParams);
            //ht.Add(dsArqueos.JORNADASE.TableName, QueryParams);
            //ht.Add(dsArqueos.WMS_V_DATOS_TIENDA, null);
            //LLNet.Reports.BaseReports.XRInfo Info;
            //Info = Reports.BaseReports.XRBase.SetInfo("ARQU");

            //RegistryKey key = Registry.CurrentUser;
            //key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Preimpresos", true);

            //string printerGarantia = "";

            //if (key != null)
            //    printerGarantia = Helpers.ObjToStr(key.GetValue("Arqueos", ""));

            //if (printerGarantia != string.Empty)
            //    Info.PrinterName = printerGarantia;

            //LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
            //xrBase.Parametros = Info;
            //xrBase.BllInstance = GUI.CApp.bll;
            //xrBase.ExePath = GUI.CApp.ExeDir;
            //xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPreview, false, ht);

            ReportDocument vReporte = new ReportDocument();
            vReporte.Load(GUI.CApp.ExeDir + "CRArqueo.rpt");
            //
            DataSet vDatosTienda = new DataSet();
            vDatosTienda = GUI.CApp.bll.getDataSet("Reports", "dsArqueos.WMS_V_DATOS_TIENDA");
            vReporte.Database.Tables["WMS_V_DATOS_TIENDA"].SetDataSource(vDatosTienda.Tables[0]);
            //
            qp = new QueryParams();
            qp.AddReplaceParam("ARQUEO", MaxArqueo.ToString());
            DataSet vArqueo = new DataSet();
            vArqueo = GUI.CApp.bll.getDataSet("Reports", "dsArqueos.WMS_ARQUEOS", qp);
            vReporte.Database.Tables["WMS_ARQUEOS"].SetDataSource(vArqueo.Tables[0]);
            //
            DataSet vArqueoDet = new DataSet();
            vArqueoDet = GUI.CApp.bll.getDataSet("Reports", "dsArqueos.WMS_DETALLE_ARQUEOS", qp);
            vReporte.Database.Tables["WMS_DETALLE_ARQUEOS"].SetDataSource(vArqueoDet.Tables[0]);
            //
            qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("ARQUEO", MaxArqueo.ToString());
            DataSet vJornada = new DataSet();
            vJornada = GUI.CApp.bll.getDataSet("Reports", "dsArqueos.JORNADASE", qp);
            vReporte.Database.Tables["JORNADASE"].SetDataSource(vJornada.Tables[0]);
            //
            vReporte.Refresh();
            FrmReporte report = new FrmReporte(vReporte);
            report.ShowDialog();
        }


        private void btnCerrarJornada_Click(object sender, EventArgs e)
        {
            //Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            //qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            //object numtrans = GUI.CApp.bll.GetSingleValue("TieneTrans", qp, "PDV");
            //if (numtrans == null)
            //    throw new Exception("No se puede hacer la validación");
            //else if (int.Parse(numtrans.ToString()) > 0)
            //    GUI.CApp.ShowMessage("Antes de cerrar la jornada, debe hacer el cierre de tarjetas", "Cierre de Jornada", true);
            //else
            //{
            //    if (GUI.CApp.ShowMessage("¿Está seguro de cerrar la jornada actual?", "Cierre de Jornada", true, true) == DialogResult.OK)
            //    {
            //        qp = new LLNet.Utils.QueryParams();
            //        qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            //        qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            //        qp.AddReplaceParam("ESTADO", "S");
            //        GUI.CApp.bll.ExecuteSql("CerrarJornada", qp, "PDV");
            //        Program.CerrarJornada();
            //        this.Close();

            //    }
            //}

            using (FrmIngresoTotales vform = new FrmIngresoTotales())
            {
                vform.ShowDialog();

                if (vform.Cerrado)
                {
                    Program.CerrarJornada();
                    this.Close();
                }
            }
        }

        private void labelControl1_Click(object sender, EventArgs e)
        {

        }

        #region sbtnCierreTarj_Click
        private void sbtnCierreTarj_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("CierreTrans", "Cierre de transacciones"))
            {
                string supervisor = "";
                if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                    supervisor = GUI.CApp.Sup;
                FrmOpcionesTrans ot = new FrmOpcionesTrans();
                ot.ShowDialog();
                //
                if (ot.Opcion == "R")
                    ReporteTrans();
                else if (ot.Opcion == "C")
                {
                    CApp.ShowMessage(@"Una vez finalizado este proceso, no podrá anular las transacciones de este corte con el Banco Nacional (pagos con tarjeta de crédito/débito)", "", true);
                    //RealizarTransaccion(supervisor, 103, ot.Opcion);
                    RealizarTransaccionLARO(supervisor, 103, ot.Opcion);
                }
                /*else if (ot.Opcion == "Rv")
                {
                    //RealizarTransaccion(supervisor, 104, ot.Opcion);
                    RealizarTransaccionLARO(supervisor, 104, ot.Opcion);
                }
                else if (ot.Opcion == "E")
                {
                    bool exito = false;
                    try
                    {
                        //Dirección web del wcf EVERTEC
                        string url = Helpers.Nvl(CApp.GetParam("BDW"), "").ToString();

                        if (url != "")
                        {
                            EVERTECEPS _Service = new EVERTECEPS(url);

                            string result = _Service.EchoTest("EchoTest");
                            exito = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        CApp.ShowMessage(ex.Message, "Echo", true);
                    }

                    if (exito)
                        CApp.ShowMessage("¡Prueba exitosa!", "Echo", true);
                    else
                        CApp.ShowMessage("¡Prueba fallida!", "Echo", true);
                } */
            } 
        }
        #endregion

        #region RealizarTransaccion IGF
        /// <summary>
        /// Realiza el pago con tarjeta
        /// </summary>
        private void RealizarTransaccion(string Supervisor, int Opcion, string Tipo)
        {
            string Merchant = "", MerchantNumber = "", TerminalNumber = "";
            //
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("EMISOR", "2");
            //Verifica que la caja tenga en la base de datos, los datos de merchant, merchantnumber, terminalnumber
            if (GUI.CApp.bll.GetSingleValue("HayDatos", qp, "PDV").ToString() != "0")
            {
                //Obtiene el merchant, el merchant number y el terminal number
                DataSet ds_datos = GUI.CApp.bll.getDataSet("PDV", "ObtDatosB", qp);

                if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                {

                    Merchant = ds_datos.Tables[0].Rows[0].ItemArray[0].ToString();
                    MerchantNumber = ds_datos.Tables[0].Rows[0].ItemArray[1].ToString();
                    TerminalNumber = ds_datos.Tables[0].Rows[0].ItemArray[2].ToString();
                    //
                    //
                    //Realiza el proceso de cierre de las transacciones
                    BNCRGL.BNCR bn = new BNCRGL.BNCR();
                    bn.OpcionesTransacciones(Merchant, MerchantNumber, TerminalNumber, Opcion);
                    //
                    if (Tipo == "C")
                    {
                        qp = new QueryParams();
                        if (Supervisor != null && Supervisor != "")
                            qp.AddReplaceParam("USUARIO", Supervisor);
                        else
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                        qp.AddReplaceParam("CAJA", Program.Caja.ToString());
                        GUI.CApp.bll.ExecuteSql("CerrarTrans", qp, "PDV");
                    }
                }
            }
            else
                CApp.ShowMessage("Para esta caja, no existe el merchant, merchantnumber y terminalnumber", "", true);
        }

        /// <summary>
        /// Realiza el cierre de tarjetas
        /// </summary>
        private void RealizarTransaccionLARO(string Supervisor, int Opcion, string Tipo)
        {
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("EMISOR", "2");

            //Realiza el proceso de cierre de las transacciones
            
            BNCRLaro.CallWirePos Virtualbn = new BNCRLaro.CallWirePos("C:\\AuthorPos");
            string Tramaresp = Virtualbn.SettlementTransaction();

            LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
            EventLogManuales.WriteLog("", Tramaresp);

            //
            if (Tipo == "C")
            {
                qp = new QueryParams();
                if (Supervisor != null && Supervisor != "")
                    qp.AddReplaceParam("USUARIO", Supervisor);
                else
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                qp.AddReplaceParam("CAJA", Program.Caja.ToString());
                GUI.CApp.bll.ExecuteSql("CerrarTrans", qp, "PDV");
            }

        }
        #endregion

        #region ReporteTrans IGF
        /// <summary>
        /// Reporte de las transacciones del día en esa caja
        /// </summary>
        private void ReporteTrans()
        {
            DataSet ds_datos = new DataSet();
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            ds_datos = GUI.CApp.bll.getDataSet("PDV", "Transacciones", qp);
            if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
            {
                ReportDocument rep = new ReportDocument();
                rep.Load(GUI.CApp.ExeDir + "CRTarjetas.rpt");
                rep.Database.Tables[0].SetDataSource(ds_datos.Tables[0]);
                rep.Refresh();
                FrmReporte report = new FrmReporte(rep);
                report.ShowDialog();
            }
            else
                XtraMessageBox.Show("No hay transacciones para mostrar");
        }
        #endregion

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

            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

        #region sbtnCierreTienda_Click
        private void sbtnCierreTienda_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.Clear();
                    qp1.AddReplaceParam("CAJA", null);
                    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()).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 en alguna caja", "Atención", true);
                        return;
                    }
                }


                string result = Helpers.Nvl(CApp.GetParam("PMMA"), "").ToString();

                if (result != "")
                {
                    if (int.Parse(result) == 1)
                    {
                        GUI.CApp.ShowMessage("Recuerde realizar el cierre de marchamos", "Cierre de Marchamos", false);
                    }
                }

                if (GUI.CApp.ValidateAccess("CierreConsTienda", "CierreConsolidado"))
                {
                    mEnviar_Facturas();

                    string usuario = "";
                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                        usuario = GUI.CApp.Sup;
                    else
                        usuario = GUI.CApp.usuario;

                    QueryParams qp = new QueryParams();
                    qp.AddReplaceParam("SECUENCIA", "WMS_S_IDCIERRE");
                    string idcierre = Helpers.Nvl(CApp.bll.GetSingleValue("SECUENCIA", qp, "General"), "").ToString();

                    qp = new QueryParams();
                    qp.AddReplaceParam("USUARIO", usuario);
                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    qp.AddReplaceParam("IDCIERRE", idcierre);

                    GUI.CApp.bll.ExecuteSql("WMS_P_CIERRE_CONSOL", qp, "PDV");

                    object imprimir = GUI.CApp.bll.GetSingleValue("ImpReporteCC", "PDV");
                    if (imprimir.ToString() != "")
                    {
                        if (imprimir.ToString() == "1")
                        {
                            ReportDocument rep = new ReportDocument();
                            rep.Load(GUI.CApp.ExeDir + "CRCierreConsol.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]);
                            //
                            string condicion = "";
                            condicion = " IDCIERRE = '" + idcierre + "'";
                            //
                            DataSet ds_datos = new DataSet();
                            qp = new QueryParams();
                            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                            qp.AddReplaceParam("CONDIC", condicion);
                            ds_datos = GUI.CApp.bll.getDataSet("PDV", "WMS_V_HIST_CIERRE_CONSOLIDADO", 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]);

                                QueryParams vParametros = new QueryParams();
                                vParametros.AddReplaceParam("IDCIERRE", idcierre);

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

                                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", "Cierre Consolidado", false);
                            }
                            //
                            rep = new ReportDocument();
                            rep.Load(GUI.CApp.ExeDir + "CRDepositos.rpt");
                            rep.Database.Tables["WMS_EMPRESAS"].SetDataSource(ds_empresa.Tables[0]);
                            //
                            DataSet ds_dep = new DataSet();
                            ds_dep = GUI.CApp.bll.getDataSet("PDV", "WMS_V_HIST_DEPOSITOS", qp);
                            if (ds_dep.Tables.Count > 0 && ds_dep.Tables[0].Rows.Count > 0)
                            {
                                rep.Database.Tables["WMS_V_DEPOSITOS"].SetDataSource(ds_dep.Tables[0]);
                                rep.Refresh();
                                FrmReporte report = new FrmReporte(rep);
                                report.ShowDialog();

                                Program.CerrarJornada();
                                this.Close();
                            }
                            else
                            {
                                GUI.CApp.ShowMessage("No hay datos para mostrar", "Cierre Consolidado", false);
                            }
                        }
                        else
                        {
                            GUI.CApp.ShowMessage("No se puede imprimir el reporte del Cierre Consolidado, porque hay diferencias en el mismo", "Cierre Consolidado", false);
                        }
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("No se puede imprimir el reporte del Cierre Consolidado", "Cierre Consolidado", false);
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cierre Consolidado", true);
            }
        }
        #endregion

        #region sbtnReporteCC_Click
        private void sbtnReporteCC_Click(object sender, EventArgs e)
        {
            string vIdCierre = String.Empty;

            CierreConsol.FrmOpcsReporte fmo = new LLNet.Tienda.MainForms.Forms.CierreConsol.FrmOpcsReporte();
            fmo.ShowDialog();

            string condicion = "";
            if (fmo.fecha != "")
            {
                condicion = " FECHA_CIERRE = '" + fmo.fecha + "'";
            }
            else if (fmo.idcierre != "")
            {
                condicion = " IDCIERRE =" + fmo.idcierre;
            }
            else if (fmo.Jornada != "")
            {
                #region Reporte Jornada
                condicion = String.Empty;

                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", fmo.Jornada);

                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", "Cierre Consolidado", false);
                }

                mReporteCobroFaltantes(fmo.Jornada);
                #endregion
            }

            if (condicion != "")
            {
                ReportDocument rep = new ReportDocument();
                rep.Load(GUI.CApp.ExeDir + "CRCierreConsol.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());
                qp.AddReplaceParam("CONDIC", condicion);
                ds_datos = GUI.CApp.bll.getDataSet("PDV", "WMS_V_HIST_CIERRE_CONSOLIDADO", 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]);

                    QueryParams vParametros = new QueryParams();
                    if (fmo.fecha != "")
                    {
                        vParametros.AddReplaceParam("FECHA_CIERRE", fmo.fecha);

                        vIdCierre = GUI.CApp.bll.GetSingleValue("POS_F_IDCIERRE", vParametros, "PDV").ToString();

                        vParametros = new QueryParams();
                        vParametros.AddReplaceParam("IDCIERRE", vIdCierre);
                    }
                    else
                    {
                        vParametros.AddReplaceParam("IDCIERRE", fmo.idcierre);
                    }

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

                    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", "Cierre Consolidado", false);
                }
                //
                rep = new ReportDocument();
                rep.Load(GUI.CApp.ExeDir + "CRDepositos.rpt");
                rep.Database.Tables["WMS_EMPRESAS"].SetDataSource(ds_empresa.Tables[0]);
                //
                DataSet ds_dep = new DataSet();
                ds_dep = GUI.CApp.bll.getDataSet("PDV", "WMS_V_HIST_DEPOSITOS", qp);
                if (ds_dep.Tables.Count > 0 && ds_dep.Tables[0].Rows.Count > 0)
                {
                    rep.Database.Tables["WMS_V_DEPOSITOS"].SetDataSource(ds_dep.Tables[0]);
                    rep.Refresh();
                    FrmReporte report = new FrmReporte(rep);
                    report.ShowDialog();
                }
                else
                {
                    GUI.CApp.ShowMessage("No hay datos para mostrar", "Cierre Consolidado", false);
                }
            }//if (condicion != "")
        }
        #endregion

        private void btnCredCuotsEk_Click(object sender, EventArgs e)
        {
            CreditEko.FrmRepCrediCuotsEk frepCCE = new CreditEko.FrmRepCrediCuotsEk();
            frepCCE.ShowDialog();
        }

        #region sbtnModDepositos_Click
        private void sbtnModDepositos_Click(object sender, EventArgs e)
        {
            try
            {
                using (CierreConsol.FrmDepositos vform = new CierreConsol.FrmDepositos())
                {
                    vform.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cierre de jornada", true);
            }
        }
        #endregion

        private void btnFondosWU_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("FondosWU", "Ingreso Fondos WesternUnion"))
            {
                using (CierreConsol.FrmFondosWU wu = new CierreConsol.FrmFondosWU())
                {
                    //object[] obj = new object[] { Program.Jornada, gridView1.GetFocusedRowCellValue(colTIPO_PAGO) };
                    //arj.Init(obj);
                    wu.ShowDialog(this);
                    JornadasE();
                    RefreshAmounts();
                }
            }
        }

        private void btnFE_Compra_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("FacCompra", "Ingreso Facturas de Compra"))
            {
                Frm_Fe_Compras fecomp = new Frm_Fe_Compras();
                fecomp.ShowDialog(this);
            }
        }

        /*#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)
            {
                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Convert.ToString("Error ObtenerToken: " + ex));
                throw ex;
            }

            return Token;
        }

        private List<FacturaEfectivoEco> ObtenerDatosApi(string Token)
        {
            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"": 0,""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");

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

                DataSet vDataSet = CApp.bll.getDataSet("PDV", "Obt_Ordenes_efectivo_ecom", 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;
            }
        }


    }
}