#region using
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.Win32;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using DevExpress.XtraEditors;
using LLNet.Utils;
using LLNet.GUI;
using LLNet.Tienda.MainForms.Forms.OtrosServ.ClubViajes;
using LLNet.Tienda.MainForms.Forms.MisPuntos;
using LLNet.Tienda.MainForms.Forms;
#endregion

namespace LLNet.Tienda.MainForms
{
    /// <summary>
    /// MDI Form que es utilizada para encapsular la pantalla de toma de pedidos
    /// </summary>
    public partial class frmMainPOS : GUI.FormBases.frmBase
    {

        #region Declare

        private DevExpress.Utils.WaitDialogForm wdf;
        public Forms.frmOrderDetail pos;
        public Dialogs.Refunds.dlgRefundType refType;
        private Forms.frmPayments pmt;
        private bool isOK;
        private Forms.DlgExentoImpuesto dlg;
        private string efectivoEmpresaCaption;
        public string opcion;
        private string ListaPrecio;

        public bool refundEnabled;
        public bool exentEnabled;
        private bool notaxesEnabled;
        public string user_pos;

        string GiftCard = "";

        //DLQG
        private bool clicredie = false;
        public string Id_March;

        //29/06/2016 IMGF
        private bool vAsociacion = false;
        private Forms.FrmOpcGrupoPago.eTipoPago vTipoPago = Forms.FrmOpcGrupoPago.eTipoPago.Ninguno;

        private string vIVA;
        #endregion

        #region Constructor

        public frmMainPOS()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }

        #endregion

        #region Init

        public override void Init(object[] pArgs)
        {
            isOK = false;
            base.Init(pArgs);
            Program.FrmMainPos = this;

            // Obteniendo el usuario y la caja actuales para que la propiedad
            // Jornada de el dataset pueda devolver la jornada correctamente.

            btnNoTaxes.Enabled = Program.FOEI == "D";
            btnCoupons.Enabled = Program.FOVC == "D";

            btnNoTaxes.Visible = btnNoTaxes.Enabled;
            btnCoupons.Visible = btnCoupons.Enabled;


            if (GUI.CApp.GetAccess(GUI.CApp.ModulePrefix + "Payments") && Program.Caja != null)
            {
            isOpenPOS:

                // Si no hay una jornada para el usuario y caja, crea la jornada
                if (Program.Jornada == null)
                {
                    // Dialogo para solicitar el monto de apertura de la caja
                    frmOpenPOS op = new frmOpenPOS();
                    op.Init(null);
                    op.ShowDialog();

                    // Si se cancelo la apertura de la caja regresa al menu principal
                    if (op == null || op.DialogResult == DialogResult.Cancel)
                    {
                        Program.CloseWindow(this);
                        return;
                    }

                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                    qp.AddReplaceParam("MONTO", Convert.ToDecimal(op.txtMonto.EditValue).ToString());
                    qp.AddReplaceParam("CAJA", Program.Caja.ToString());

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

                    goto isOpenPOS;
                }
                //else
                //{
                //    if (Program.JornadaSysdate > 0)
                //        GUI.CApp.ShowMessage("La Jorndada "+ Program.Jornada+ " No es del Dia de Hoy, Se recomienda Cerra la Jornada","Jornadas",false);

                //}

                listaPrecio = "";
            }

            // obteniendo la tasa de cambio del dia
            string tcid = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("TCID"));
            if (tcid == "X")
            {
                string uftc = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("UFTC"));
                if (uftc != DateTime.Today.ToShortDateString())
                {
                    if (GUI.CApp.ValidateAccess("ChangeRage", "Tasas de Cambio"))
                    {
                        GUI.CApp.SetParam("UFTC", DateTime.Today.ToShortDateString());
                        Dialogs.ChangeRate.dlgChangeRage dcr = (Dialogs.ChangeRate.dlgChangeRage)GUI.CApp.CreateForm(typeof(Dialogs.ChangeRate.dlgChangeRage), true);
                    }
                }
            }

            wdf = new DevExpress.Utils.WaitDialogForm("Iniciando Tienda...", "ekono POS");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.VENDEDORES.TableName), DsPedido);
            GetOrder(pArgs);

            isOK = true;
        }

        #endregion

        #region Properties

        public decimal Order
        {
            get { return DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO; }
            set { DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO = value; }
        }

        public bool ExentoImpuesto
        {
            get { return (btnNoTaxes.ButtonStyle == DevExpress.XtraEditors.Controls.BorderStyles.Simple); }
        }

        public bool RecargoTarjeta
        {
            get { return (btnCreditCardPct.ButtonStyle == DevExpress.XtraEditors.Controls.BorderStyles.Simple); }
        }

        #endregion

        /// <summary>
        /// Cambia el color de fondo del botón de credie
        /// </summary>
        public void ReseteoCredie()
        {
            clicredie = false;
            btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        #region mBloquear_Funcionalidad
        /// <summary>
        /// Verifica si se debe bloquear la funcionalidad del POS por llegar al máximo de caja sin retiros
        /// </summary>
        public void mBloquear_Funcionalidad()
        {
            //********************************* IGF
            QueryParams vParametro = new LLNet.Utils.QueryParams();
            vParametro.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            string vBloquear_POS = GUI.CApp.bll.GetSingleValue("EKO_F_BLOQUEAR_POS", vParametro, "PDV").ToString();
            if (vBloquear_POS == "S")
            {

                dockPanel1.Enabled = false;
                dockPanel3.Enabled = false;
                dockPanel4.Enabled = false;
                pos.ctlAddSkus1.Enabled = false;
                //
                CApp.ShowMessage("Se ha llegado al límite de oportunidades para realizar el retiro de efectivo, por lo que se bloquearon las funcionalidades",
                    "Cobros y Facturación", true);
            }
            else
            {
                dockPanel1.Enabled = true;
                dockPanel3.Enabled = true;
                dockPanel4.Enabled = true;
                pos.ctlAddSkus1.Enabled = true;
            }
        }
        #endregion

        #region mRevisar_Monto_Maximo
        /// <summary>
        /// Verifica si se llegó al monto máximo de efectivo en caja
        /// </summary>
        private void mRevisar_Monto_Maximo()
        {
            decimal vMonto_Maximo = Convert.ToDecimal(Helpers.Nvl(CApp.GetParam("MMEC"), 0));
            QueryParams vParametro = new LLNet.Utils.QueryParams();
            vParametro.AddReplaceParam("JORNADA", Program.Jornada.ToString());

            if (vMonto_Maximo > 0)
            {
                vParametro.AddReplaceParam("CAJA", Program.Caja.ToString());
                decimal vMonto_Caja = Convert.ToDecimal(Helpers.Nvl(CApp.bll.GetSingleValue("MontoenCaja", vParametro, "PDV"), 0));
                decimal vMonto_Retiros = Convert.ToDecimal(Helpers.Nvl(CApp.bll.GetSingleValue("MontoRetiros", vParametro, "PDV"), 0));
                if ((vMonto_Caja - vMonto_Retiros) > vMonto_Maximo)
                {
                    CApp.ShowMessage("Se ha llegado al Monto máximo establecido para Retiros de caja. Comuniquese con su Supervisor", "Cobros y Facturación", true);

                    string vHabilitar_Contador = Helpers.Nvl(CApp.GetParam("HCPR"), "N").ToString();

                    if (vHabilitar_Contador == "S")// Verifica si se habilita el contador para bloquear los movimientos hasta que el cajero haga el retiro de efectivo
                    {
                        vParametro = new QueryParams();
                        vParametro.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                        GUI.CApp.bll.ExecuteSql("EKO_P_CONTADOR_BLOQUEO", vParametro, "PDV");
                    }
                }
            }
        }
        #endregion

        #region Methods

        public void GetOrder(object[] pArgs)
        {
            if (pArgs != null)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", pArgs[0].ToString());

                DsVale.Clear();
                DsVale.AcceptChanges();

                DsPedido.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.WMS_DOCUMENTOS.TableName, qp, "FillByOrder"), DsPedido);

                RefreshData();

                if (xtraTabbedMdiManager1 != null)
                {
                    if (xtraTabbedMdiManager1.Pages.Count > 0)
                        xtraTabbedMdiManager1.SelectedPage = xtraTabbedMdiManager1.Pages[0];
                }
            }
        }

        public void newOrder()
        {
            Program.opcion = "P";
            Init(null);
            if (isOK)
            {
                Show();
                wdf.Close();
                DsPedido.Clear();
                DsPedido.AcceptChanges();
                DsVale.Clear();
                DsVale.AcceptChanges();
                Program.FrmMainPos.pos.ctlAddSkus1.Clear();

                if (Program.FrmMainPos.btnRefunds.ButtonStyle != DevExpress.XtraEditors.Controls.BorderStyles.Default)
                {
                    Program.FrmMainPos.btnRefunds.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                    Program.FrmMainPos.pos.ctlAddSkus1.SetPositive();
                    refundEnabled = false;
                }

                // Si es obligatorio pedir datos del cliente al crear un pedido
                if (GUI.CApp.GetParam("PCCP").ToString() == "X")
                    Program.FrmMainPos.btnDatosCliente_Click(null, null);

                Program.FrmMainPos.pos.ctlAddSkus1.DocumentoPTS = 0;
            }
        }

        internal void RefreshData()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", Order.ToString());

            DsPedido.TDA_DETALLE_PEDIDO.Clear();
            DsPedido.WMS_DOCUMENTOS.Clear();
            DsPedido.WMS_SKUS_X_DOCUMENTO.Clear();
            DsPedido.TDA_DATOS_DOCUMENTO.Clear();
            DsPedido.WMS_SOCIOS.Clear();

            //Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.TDA_DETALLE_PEDIDO.TableName, qp), DsPedido);
            GUI.CApp.bll.ExecuteSql("UpdateTotal", qp, "PDV");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.WMS_DOCUMENTOS.TableName, qp), DsPedido);
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.WMS_SKUS_X_DOCUMENTO.TableName, qp), DsPedido);
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.TDA_DATOS_DOCUMENTO.TableName, qp), DsPedido);
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.TDA_DETALLE_PEDIDO.TableName, qp), DsPedido);

            qp.Clear();
            qp.AddReplaceParam("SOCIO", DsPedido.WMS_DOCUMENTOS[0].SOCIO.ToString());
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsPedido.GetType(), DsPedido.WMS_SOCIOS.TableName, qp, "FillBySocio"), DsPedido);

            // IGF
            // Actualiza el total del pedido en el control de adición de artículos
            if (DsPedido != null && DsPedido.TDA_DATOS_DOCUMENTO.Rows.Count > 0)
            {
                pos.ctlAddSkus1.Total = DsPedido.TDA_DATOS_DOCUMENTO.Rows[0].ItemArray[7].ToString();
            }
            else
            {
                pos.ctlAddSkus1.Total = String.Empty;
            }

            if (Program.FrmMainPos.pos != null)
            {
                Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop = (DsPedido.TDA_DETALLE_PEDIDO.Count > 0);
                Program.FrmMainPos.pos.ctlDetail1.TabStop = Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop;
                Program.FrmMainPos.pos.ctlDetail1.Enabled = Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop;
            }

            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
            pos.ctlAddSkus1.txtSku.SelectAll();
        }

        #endregion

        #region Events

        #region Form Events

        public string listaPrecio
        {
            get
            {
                return ListaPrecio;
            }
            set { ListaPrecio = value; }
        }

        private void frmMainPOS_Load(object sender, EventArgs e)
        {
            Program.opcion = "P";
            efectivoEmpresaCaption = GUI.CApp.GetParam("TPEE").ToString();
            btnConsEfecEmp.Text = string.Format(btnConsEfecEmp.Text, efectivoEmpresaCaption);
            btnEfectivoEmpresa.Text = string.Format(btnEfectivoEmpresa.Text, efectivoEmpresaCaption);
            string fecha = Program.fecha.ToShortDateString();
            user_pos = "";
            user_pos = GUI.CApp.usuario.ToString();


            dockPanel2.Text = string.Format("ekono POS - {0} - Cajero: {1}, Caja: {2}, Jornada: {3}", fecha, user_pos, Program.Caja, Program.Jornada);
            if (isOK)
            {
                //wbHeader.Url = new Uri(GUI.CApp.ExeDir + "header.htm");

                GUI.CApp.MainForm = Program.FrmMainPos;

                // Inicializando la ventana para toma de pedidos
                wdf.Caption = "Iniciando Pestaña de Pedido...";
                pos = new LLNet.Tienda.MainForms.Forms.frmOrderDetail();
                pos.MdiParent = this;
                pos.Show();
                pos.Init();

                // colocando activa la forma de ingreso de pedidos
                xtraTabbedMdiManager1.SelectedPage = xtraTabbedMdiManager1.Pages[0];

                wdf.Close();

                // Si es obligatorio pedir datos del cliente al crear un pedido
                if (GUI.CApp.GetParam("PCCP").ToString() == "X")
                    btnDatosCliente_Click(null, null);

                Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop = (DsPedido.TDA_DETALLE_PEDIDO.Count > 0);
                Program.FrmMainPos.pos.ctlDetail1.TabStop = Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop;
                Program.FrmMainPos.pos.ctlDetail1.Enabled = Program.FrmMainPos.pos.ctlDetail1.gdDetail.TabStop;

            }
            else
            {
                this.Close();
                this.Dispose();
            }

            //El parámetro indica si se habilita o no, el botón de devolución FONABE
            string bFONABE = GUI.CApp.GetParam("BEBF").ToString();
            if (bFONABE.Equals("N"))
                this.sbtnDevolFONABE.Visible = false;

            //********************************* IGF
            mBloquear_Funcionalidad();
            //********************************* IGF
        }

        private void frmMainPOS_KeyDown(object sender, KeyEventArgs e)
        {
            //********************************* IGF
            mBloquear_Funcionalidad();

            if (!pos.ctlAddSkus1.Enabled)
            {
                if (e.Modifiers == Keys.None)
                {
                    if (e.KeyCode == Keys.Escape)
                    {
                        btnCancelar_Click(null, null);
                    }
                }
            }
            else
            {
                if (e.Modifiers == Keys.Alt)
                {

                    if (e.KeyValue == 18)
                        return;

                    switch (e.KeyCode)
                    {
                        case Keys.F2:
                            pos.ctlAddSkus1.ShowCalcQty();
                            break;
                        case Keys.F3:
                            btnDatosLinea_Click(null, null);
                            break;
                        case Keys.F4://IGF
                            sbtnConstanciaR_Click(null, null);
                            break;
                        case Keys.F5:
                            btnDescuentoLinea_Click(null, null);
                            break;
                        case Keys.F6:
                            btnEliminarOfertas_Click(null, null);
                            e.Handled = true;
                            break;
                        case Keys.F7:
                            btnConsFact_Click(null, null);
                            break;
                        case Keys.F8:
                            btnEfectivoEmpresa_Click(null, null);
                            break;
                        case Keys.F9:
                            sbtnActCliente_Click(null, null);
                            break;
                        case Keys.F10:
                            btnDivideOrder_Click(null, null);
                            break;
                        case Keys.F11:
                            btnPedidosGrabados_Click(null, null);
                            break;
                        case Keys.F12:
                            btnConsEfecEmp_Click(null, null);
                            break;
                        case Keys.E:
                            btnNoTaxes_Click(null, null);
                            break;
                        case Keys.F:
                            btnClientFrec_Click(null, null);
                            break;
                        case Keys.D:
                            if (pos.ActiveControl == null)
                            {
                                pos.ActiveControl = pos.ctlAddSkus1;
                                pos.ctlAddSkus1.txtSku.Focus();
                            }
                            else
                            {
                                if (pos.ActiveControl.Name == "ctlAddSkus1" && DsPedido.TDA_DETALLE_PEDIDO.Rows.Count > 0)
                                {
                                    pos.ActiveControl = pos.ctlDetail1;
                                    pos.ctlDetail1.gdDetail.Focus();
                                }
                                else
                                {
                                    pos.ActiveControl = pos.ctlAddSkus1;
                                    pos.ctlAddSkus1.txtSku.Focus();
                                }
                            }
                            pos.Update();
                            pos.Refresh();
                            break;
                        case Keys.S:
                            btnSeries_Click(null, null);
                            break;
                        case Keys.K:
                            btn_ligar_desligar_documentos_Click(null, null);
                            break;
                        case Keys.P:
                            btnConsultaP_Click(null, null);
                            break;
                        case Keys.C:
                            btnCotizacion_Click(null, null);
                            break;
                        case Keys.L:
                            btlListaPrecios_Click(null, null);
                            break;
                        case Keys.X:
                            btnExonerar_Click(null, null);
                            break;
                        case Keys.R:
                            btnPagoServ_Click(null, null);
                            break;
                        /*case Keys.A:
                            btnParqueo_Click(null, null);
                            break;*/                       
                        case Keys.V://FONABE
                            if (this.sbtnDevolFONABE.Visible)
                                sbtnDevolFONABE_Click(null, null);
                            break;
                        case Keys.O://FONABE
                            if (this.sbtnDonacion.Visible)
                                sbtnDonaciones_Click(null, null);
                            break;
                        #region WRLG. DESARROLLO DE GARANTIAS

                        case Keys.G:
                            btnAppGarantia_Click(null, null);
                            break;
                        case Keys.B:
                            btnConsGarantia_Click(null, null);
                            break;

                        #endregion

                        case Keys.M:
                            btnCuotsMultiC_Click(null, null);
                            break;
                        case Keys.Q:
                            btnCuotsCredEko_Click(null, null);
                            break;
                        case Keys.I:
                            btnCuotsInstC_Click(null, null);
                            break;
                        case Keys.J:
                            sBtnEknExpress_Click(null, null);
                            break;
                        case Keys.W:
                            btnCliCredie_Click(null, null);
                            break;
                        //29/06/2016 IMGF
                        case Keys.A:
                            btnAsociaciones_Click(null, null);
                            break;
                        case Keys.T:
                            btnMarchamos_Click(null, null);
                            break;
                        case Keys.N:
                            btnCuponApp_Click(null, null);
                            break;
                        case Keys.H:
                            btn_selecLista_CBB_Click(null, null);
                            break;
                        case Keys.Z:
                            btn_pago_efectivo_ecommerce_Click(null, null);
                            break;
                    }

                }

                if (e.Modifiers == Keys.None)
                {
                    // Verifica el shortcut que presiono el usuario
                    switch (e.KeyCode)
                    {
                        case Keys.Escape:
                            btnCancelar_Click(null, null);
                            break;

                        case Keys.F2:
                            pos.ctlAddSkus1.ShowFindSku();
                            break;

                        case Keys.F3:
                            btnDatosCliente_Click(null, null);
                            break;

                        case Keys.F4:
                            btnEliminar_Click(null, null);
                            break;

                        case Keys.F5:
                            btnDescuentoPedido_Click(null, null);
                            break;

                        case Keys.F6:
                            btnOfertas_Click(null, null);
                            break;

                        case Keys.F7:
                            btnRefunds_Click(null, null);
                            break;

                        case Keys.F8:
                            btnCoupons_Click(null, null);
                            break;

                        case Keys.F9:
                            btnGiftCard_Click(null, null);
                            break;

                        case Keys.F10:
                            btnCreditCardPct_Click(null, null);
                            break;

                        case Keys.F11:
                            btnGrabarPedido_Click(null, null);
                            break;

                        case Keys.F12:
                            btnPayments_Click(null, null);
                            break;
                    }
                }
            }
            //********************************* IGF
        }

        private void frmMainPOS_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.Cancel = true;

            if (e.CloseReason == CloseReason.TaskManagerClosing)
                e.Cancel = true;
        }

        #endregion

        #region Navigation Bar Events

        private Forms.FrmDatosProducto dat;

        public void btnDatosCliente_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("Customer", "Datos del Documento"))
            {
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                if (dat == null)
                    dat = new LLNet.Tienda.MainForms.Forms.FrmDatosProducto();

                dat.Init(null);

                dat.MdiParent = null;
                dat.Parent = null;
                dat.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;

                try
                {
                    agregaListaPrecioAlEncabezado(DsPedido.WMS_SOCIOS[0].CLAS1.ToString());
                }
                catch
                { //ENTRA AL CATCH PORQUE EL CLIENTE NO TIENE UNA LISTA DE PRODUCTOS ASOCIADA
                    //DEJO EL ENCABEZADO COMO ESTABA
                    string fecha = Program.fecha.ToShortDateString();
                    user_pos = "";
                    user_pos = GUI.CApp.usuario.ToString();

                    dockPanel2.Text = string.Format("ekono POS - {0} - Cajero: {1}, Caja: {2}, Jornada: {3}, {4}", fecha, user_pos, Program.Caja, Program.Jornada, listaPrecio);
                }

            }

            pos.ctlAddSkus1.txtSku.Focus();

        }

        public void agregaListaPrecioAlEncabezado(string p_codigolistaPrecio)
        {
            if (listaPrecio == "")
            {  //Verifica si se ha asignado una lista de precios al DOCUMENTO
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("CLASIFICACION", p_codigolistaPrecio);
                string lista = GUI.CApp.bll.GetSingleValue("DescripcionClasificacion", qp, "PDV").ToString();
                string fecha = Program.fecha.ToShortDateString();
                user_pos = "";
                user_pos = GUI.CApp.usuario.ToString();

                dockPanel2.Text = string.Format("ekono POS - {0} - Cajero: {1}, Caja: {2}, Jornada: {3}, {4}", fecha, user_pos, Program.Caja, Program.Jornada, lista);
            }
        }

        private void btnDescuentoLinea_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("LineDiscount", "Descuento Línea"))
            {
                Dialogs.Discounts.dlgLineDiscount offers = (Dialogs.Discounts.dlgLineDiscount)GUI.CApp.CreateForm(typeof(Dialogs.Discounts.dlgLineDiscount), "Descuento por Linea", true, null, true);
            }
            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void btnDescuentoPedido_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("DocumentDiscount", "Descuento Pedido"))
            {
                Dialogs.Discounts.dlgDocumentDiscount offers = (Dialogs.Discounts.dlgDocumentDiscount)GUI.CApp.CreateForm(typeof(Dialogs.Discounts.dlgDocumentDiscount), "Descuento por Pedido", true, null, true);
            }
            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            // Verifica si hay lineas de detalle
            if (DsPedido.TDA_DETALLE_PEDIDO.Rows.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("DeleteLine", "Eliminar Línea"))
                {
                    // Obtiene la linea seleccionada
                    decimal pLinea = Convert.ToDecimal(pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("LINEA"));

                    // Llama al proceso para eliminar (anular) la linea
                    string pVale = Utils.Helpers.ObjToStr(pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("VALE"));
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    if (Program.FrmMainPos.DsVale.DOC_VALES.Rows.Count > 0 && pVale != "")
                    {
                        DataRow[] drVale = Program.FrmMainPos.DsVale.DOC_VALES.Select("VALE = " + pVale);
                        foreach (DataRow dr in drVale)
                        {
                            dr.Delete();
                        }
                        Program.FrmMainPos.DsVale.DOC_VALES.AcceptChanges();

                        qp.AddReplaceParam("VALE", pVale);
                        GUI.CApp.bll.ExecuteSql("AnulaVale", qp, "PDV");
                    }
                    DeleteOrderLine(pLinea);
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Eliminar", true);

            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        public bool DeleteOrderLine(decimal pLinea)
        {
            try
            {
                // Llama a DeleteLine que no elimina sino que anula la linea marcada
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("USUARIO_ANULO", GUI.CApp.usuario);
                qp.AddReplaceParam("TIPO_ANULACION", "null");
                qp.AddReplaceParam("DOCUMENTO", Order.ToString());
                qp.AddReplaceParam("LINEA", pLinea.ToString());

                //GUI.CApp.bll.ExecuteSql("DeleteLine", qp, "PDV");
                GUI.CApp.bll.ExecuteSql("wms_p_delete_lines", qp, "PDV");

                GUI.CApp.bll.updateDataSet(DsPedido);

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", Order.ToString());

                RefreshData();

                return true;
            }
            catch
            {
                return false;
            }
        }

        private void btnOfertas_Click(object sender, EventArgs e)
        {
            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("OfferOptions", "Ofertas"))
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());

                    if (Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("TotalRecargo", qp, "PDV")) > 0)
                    {
                        if (GUI.CApp.ShowMessage("Los recargos efectuados previamente pueden perderse al aplicar ofertas, ¿desea continuar?", "Ofertas", true, true) == DialogResult.Cancel)
                            return;
                    }

                    GUI.CApp.bll.ExecuteSql("ApplyOfferToDocument", qp, "PDV");
                    RefreshData();
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Ofertas", true);

            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void btnRefunds_Click(object sender, EventArgs e)
        {

            if (GUI.CApp.ValidateAccess("RefundInvoice", "Devoluciones"))
            {

                if (refundEnabled)
                {
                    refundEnabled = false;
                    Program.opcion = "P";
                    btnRefunds.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                    pos.ctlAddSkus1.SetPositive();
                }
                else
                {
                    refundEnabled = true;
                    Program.opcion = "D";
                    btnRefunds.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                    btnRefunds.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);
                    pos.ctlAddSkus1.SetNegative();
                    //LimpiarDatosCredie();

                    if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("DFCE")) == "SI")
                    {
                        FrmDevolEcom frmEcom = new FrmDevolEcom();
                        frmEcom.ShowDialog();
                    }
                }

            }
            else
            {
                refundEnabled = false;
                btnRefunds.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                pos.ctlAddSkus1.SetPositive();
            }
            pos.ctlAddSkus1.txtSku.Focus();

        }

        private void btnCoupons_Click(object sender, EventArgs e)
        {
            if (btnCoupons.Enabled)
            {
                if (GUI.CApp.ValidateAccess("Coupon", "Canje de Vale / Certificado de Regalo"))
                {
                    Dialogs.Refunds.dlgCoupon dlg = (Dialogs.Refunds.dlgCoupon)GUI.CApp.CreateForm(typeof(Dialogs.Refunds.dlgCoupon), true);
                }
            }
        }

        private void btnGiftCard_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("GiftCard", "Emitir Certificado de Regalo"))
            {
                //Dialogs.Refunds.dlgGiftCard gcd = (Dialogs.Refunds.dlgGiftCard)GUI.CApp.CreateForm(typeof(Dialogs.Refunds.dlgGiftCard), true);
                //IGF
                Forms.GiftCard.FrmOpciones fop = new LLNet.Tienda.MainForms.Forms.GiftCard.FrmOpciones();
                fop.ShowDialog();
                this.GiftCard = fop.GiftCard;
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Rows.Count > 0)
            {
                DialogResult result = GUI.CApp.ShowMessage("¿Desea salir y anular el pedido?", "Facturación", true, true);
                if (result == DialogResult.OK)
                {
                    //Eliminar cupones------DLQG-IMG
                    Utils.QueryParams parametros = new LLNet.Utils.QueryParams();
                    parametros.AddReplaceParam("pDocumento", Order.ToString());
                    GUI.CApp.bll.ExecuteSql("ElimCupon", parametros, "PDV");

                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Order.ToString());
                    qp.AddReplaceParam("SITUACION", "11");
                    GUI.CApp.bll.ExecuteSql("ActualizarSituacion", qp, "PDV");
                    GUI.CApp.bll.ExecuteSql("AnularValesxPedido", qp, "PDV");

                    #region WRLG. DESARROLLO DE GARANTIAS

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

                    #endregion

                    pos.ctlAddSkus1.Total = String.Empty;

                    DsPedido.TDA_DETALLE_PEDIDO.Clear();
                    DsPedido.WMS_DOCUMENTOS.Clear();
                    DsPedido.WMS_SKUS_X_DOCUMENTO.Clear();
                    DsPedido.TDA_DATOS_DOCUMENTO.Clear();
                    DsPedido.WMS_SOCIOS.Clear();

                    //Vuelve al estado original el boton de Exonerar
                    Program.FrmMainPos.exentEnabled = false;
                    Program.exonerado = "N";
                    Program.FrmMainPos.btnExonerar.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                }
                else
                    return;
            }

            listaPrecio = "";
            user_pos = "";

            Program.CloseWindow(this);
            //this.Hide();
            //Program.FrmMainPos.Show();

            //this.Dispose();

        }

        private void gridView1_Click(object sender, EventArgs e)
        {
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void btnPayments_Click(object sender, EventArgs e)
        {
            Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
            qp3.AddReplaceParam("P_DOCUMENTO", Order.ToString());

            string valida = (GUI.CApp.bll.GetSingleValue("VALIDATECNOLOGIA", qp3, "PDV").ToString());
            if (valida == "1")
            {
                CApp.ShowMessage("El vendedor no puede ser el mismo que el cajero", "Cobrar / Liquidar", true);
                return;
            }
            else
            {
                // Valida que si lleva un paquete de viajes no lleve otro tipo de producto
                string validaMembrPlus = (GUI.CApp.bll.GetSingleValue("VALIDAPLUSPEDIDO", qp3, "PDV").ToString());
                if (validaMembrPlus != "0")
                {
                    CApp.ShowMessage("El pedido no debe contener pagos de Membresía y otras categorías", "Cobrar / Liquidar", true);
                    return;
                }
                else
                {
                    // Valida que si lleva un paquete de viajes no lleve otro tipo de producto
                    string validaPaqViajs = (GUI.CApp.bll.GetSingleValue("VALIDAVIAJESPEDIDO", qp3, "PDV").ToString());
                    if (validaPaqViajs != "0")
                    {
                        CApp.ShowMessage("El pedido no debe contener artículos de Club de Viajes y otras categorías", "Cobrar / Liquidar", true);
                        return;
                    }
                    else
                    {
                        ///FRMMAINPOS
                        ///STEVEN ARCE 27/09/2018 VALIDACION AEROPOST                    
                        ///Valida si existe al menos un producto AEROPOST en el pedido
                        Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                        qp4.AddReplaceParam("P_DOCUMENTO", Order.ToString());
                        qp4.AddReplaceParam("P_TIPO", "0");
                        string vValidaAeropost = (GUI.CApp.bll.GetSingleValue("VALIDAAEROPOSTPEDIDO", qp4, "PDV").ToString());

                        if (vValidaAeropost.Equals("1"))
                        {
                            CApp.ShowMessage("Existe al menos un producto EBOX en el pedido", "Cobrar / Liquidar", true);
                            return;
                        }

                        ///Valida si todos los productos son AEROPOST, valide el código del cliente a ver si es 
                        ///un cliente fidelizado
                        if (vValidaAeropost.Equals("0"))
                        {
                            ///Valido que el cliente sea fidelizado
                            Utils.QueryParams qp5 = new LLNet.Utils.QueryParams();
                            qp5.AddReplaceParam("P_DOCUMENTO", Order.ToString());
                            string vValidaClFidelizado = (GUI.CApp.bll.GetSingleValue("VALIDACLIENTEFIDELIZADO", qp5, "PDV").ToString());

                            if (vValidaClFidelizado.Equals("0"))
                            {
                                CApp.ShowMessage("Cliente debe ser fidelizado para facturar EBOX", "Cobrar / Liquidar", true);
                                return;
                            }

                        }
                        ////FIN DE VALIDACION AEROPOST




                        //cantidad de productos de viaje en el documento
                        string validacPaqViajs = (GUI.CApp.bll.GetSingleValue("CANTVIAJESPEDIDO", qp3, "PDV").ToString());
                        if (validacPaqViajs != "0")
                        {//SI TIENE productos de Paquetes de Viajes
                            bool datos_cli = false;
                            FrmCVClientes fcv = new FrmCVClientes(Order.ToString());
                            fcv.ShowDialog();
                            datos_cli = fcv.continuar;
                            if (datos_cli == false)
                            {// si no almaceno los datos del cliente
                                return;
                            }
                        }

                        ///STEVEN ARCE MODIFICADO 27/09/2018
                        //Elimina los descuentos del producto Donacion, del producto GiftCard, y del producto Aeropost
                        Utils.QueryParams qpEDON = new LLNet.Utils.QueryParams();
                        qpEDON.AddReplaceParam("pDOCUMENTO", Order.ToString());
                        GUI.CApp.bll.ExecuteSql("ELIDESCDON", qpEDON, "PDV");

                        Utils.QueryParams qpEx = new LLNet.Utils.QueryParams();
                        string existenciaInsuf = "";
                        //
                        if (DsPedido.WMS_DOCUMENTOS.Count > 0)
                        {
                            qpEx.AddReplaceParam("DOCUMENTO", Order.ToString());
                            GUI.CApp.bll.ExecuteSql("ReubicAut", qpEx, "PDV");

                            qpEx = new QueryParams();

                            switch (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("VEPF")))
                            {
                                case "V":
                                    qpEx.AddReplaceParam("DOCUMENTO", Order.ToString());
                                    existenciaInsuf = (GUI.CApp.bll.GetSingleValue("ValidarExistenciaFacturar", qpEx, "PDV").ToString());

                                    if (existenciaInsuf != "")
                                    {
                                        GUI.CApp.ShowMessage("No hay existencia suficiente para el producto " + existenciaInsuf, "Validación de Existencia", true);
                                        return;
                                    }

                                    existenciaInsuf = (GUI.CApp.bll.GetSingleValue("ValidarExistInsumos", qpEx, "PDV").ToString());
                                    if (existenciaInsuf != "")
                                        GUI.CApp.ShowMessage("No hay existencia suficiente para el producto " + existenciaInsuf, "Validación de Existencia", true);
                                    else
                                        facturar();
                                    break;
                                case "A":
                                    qpEx.AddReplaceParam("DOCUMENTO", Order.ToString());
                                    existenciaInsuf = (GUI.CApp.bll.GetSingleValue("ValidarExistenciaFacturar", qpEx, "PDV").ToString());
                                    if (existenciaInsuf != "")
                                        GUI.CApp.ShowMessage("No hay existencia suficiente para el producto " + existenciaInsuf, "Validación de Existencia", true);

                                    existenciaInsuf = (GUI.CApp.bll.GetSingleValue("ValidarExistInsumos", qpEx, "PDV").ToString());
                                    if (existenciaInsuf != "")
                                        GUI.CApp.ShowMessage("No hay existencia suficiente para el producto " + existenciaInsuf, "Validación de Existencia", true);

                                    facturar();
                                    break;
                                default:
                                    facturar();
                                    break;
                            }
                            //IGF
                            int deshabilitar = Convert.ToInt32(Helpers.Nvl(CApp.GetParam("DBOP"), 0).ToString());
                            if (deshabilitar == 1)
                            {
                                try
                                {
                                    if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0)
                                    {
                                        if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].TARJETA1.ToString() != "")
                                            this.btnObservaciones.Enabled = false;
                                    }
                                    else
                                        this.btnObservaciones.Enabled = true;
                                }
                                catch (StrongTypingException) { this.btnObservaciones.Enabled = true; }
                            }
                        }
                        else
                            CApp.ShowMessage("No se han ingresado productos", "Cobrar / Liquidar", true);
                    }
                }
            }
        }

        private void facturar()
        {
            //Eliminar cupones------DLQG-IMG
            Utils.QueryParams parametros = new LLNet.Utils.QueryParams();
            parametros.AddReplaceParam("pDocumento", Order.ToString());
            GUI.CApp.bll.ExecuteSql("ElimCupon", parametros, "PDV");
            ///---- DELANTE CODIGO ORIGINAL

            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("Payments", "Cobrar / Liquidar", true))
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Order.ToString());
                    if (Program.MAFD == "2")
                    {
                        if (DsPedido.WMS_DOCUMENTOS[0].TOTAL <= 0)
                        {
                            if (DsPedido.TDA_DETALLE_PEDIDO.Select("cantidad > 0").Length > 0 && DsPedido.TDA_DETALLE_PEDIDO.Select("cantidad < 0").Length > 0)
                            {
                                GUI.CApp.ShowMessage("No es posible crear devoluciones y facturar en una sola operación, efectúe la devolución y la facturación por separado", "Cobrar / Liquidar", true);
                                return;
                            }
                        }
                    }

                    if (Convert.ToInt32(GUI.CApp.bll.GetSingleValue("OfertasVencidas", qp, "PDV")) > 0)
                    {
                        GUI.CApp.ShowMessage("El pedido tiene ofertas vencidas, no es posible facturar", "Cobros y Facturación", true);
                        return;
                    }

                    #region Tiempo Cobro IGF
                    //Almacenar inicio cobro
                    if (DsPedido.WMS_DOCUMENTOS.Count > 0 && DsPedido.WMS_DOCUMENTOS.Rows.Count > 0 && DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString() != "")
                    {
                        Utils.QueryParams param = new LLNet.Utils.QueryParams();
                        param.AddReplaceParam("Documento", Order.ToString());
                        param.AddReplaceParam("Tipo", "F");
                        GUI.CApp.bll.ExecuteSql("AlmTiempoI", param, "PDV");
                    }
                    #endregion

                    if (DsPedido.WMS_DOCUMENTOS[0].TOTAL < 0)
                    {
                        if (refType == null)
                            //DLQG original -> refType = new LLNet.Tienda.Dialogs.Refunds.dlgRefundType();
                            refType = new LLNet.Tienda.Dialogs.Refunds.dlgRefundType();
                        refType.ShowDialog(this);

                        // IGF
                        // Actualiza el total del pedido en el control de adición de artículos
                        if (DsPedido != null && DsPedido.TDA_DATOS_DOCUMENTO.Rows.Count > 0)
                        {
                            pos.ctlAddSkus1.Total = DsPedido.TDA_DATOS_DOCUMENTO.Rows[0].ItemArray[7].ToString();
                        }
                        else
                        {
                            pos.ctlAddSkus1.Total = String.Empty;
                        }
                    }
                    else
                    {
                        // 27/06/2016 IMGF INICIO-------------
                        string result = Helpers.Nvl(CApp.GetParam("MPC"), "").ToString();
                        string pagacredie = string.Empty;

                        if (Program.FrmMainPos != null && Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0 &&
                            Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO != 0)
                        {
                            QueryParams qp2 = new QueryParams();
                            //Documento pagado con credie
                            qp2.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                            pagacredie = GUI.CApp.bll.GetSingleValue("C_PagaCrediE", qp2, "PDV").ToString();
                        }

                        if (result != "")
                        {
                            // Verifica si se muestra la pantalla de cupones Credie
                            if (int.Parse(result) == 1 && Program.opcion != "D" && pagacredie != String.Empty)
                            {
                                using (Forms.CreditEko.FrmValCupon vform = new Forms.CreditEko.FrmValCupon())
                                {
                                    vform.ShowDialog();
                                }
                            }
                        }

                        result = Helpers.Nvl(CApp.GetParam("PAMP"), "").ToString();
                        // 27/06/2016 IMGF FIN-------------
                        if (result != "")
                        {
                            if (int.Parse(result) == 1 && Program.opcion != "D")
                            {
                                Forms.FrmMensaje frmm = new LLNet.Tienda.MainForms.Forms.FrmMensaje();
                                frmm.ShowDialog();
                            }
                        }

                        //DLQG valida la cantidad de PTS si la fatura de la devolucion es pagada toda en PTS  
                        Utils.QueryParams paramd = new LLNet.Utils.QueryParams();
                        paramd.AddReplaceParam("PEDIDO", Order.ToString());
                        if (Program.opcion == "D" && Convert.ToInt32(GUI.CApp.bll.GetSingleValue("WMS_F_DEVTODOPTS", paramd, "PDV")) == 1)
                        {//pago todo con puntos
                            if (refType == null)
                                //DLQG original -> refType = new LLNet.Tienda.Dialogs.Refunds.dlgRefundType();
                                refType = new LLNet.Tienda.Dialogs.Refunds.dlgRefundType();
                            refType.ShowDialog(this);
                        }
                        else
                        {
                            if (Program.MAFD == "2" && DsPedido.WMS_DOCUMENTOS[0].TOTAL == 0)

                                GUI.CApp.ShowMessage("La factura o devolución debe ser por un monto mayor a cero", "Cobrar / Liquidar", true);
                            else
                            {
                                try
                                {
                                    if (pmt == null)
                                        pmt = new LLNet.Tienda.MainForms.Forms.frmPayments();
                                    pmt.GiftCard = this.GiftCard;
                                    pmt.Id_March = Id_March; //para identificar si se paga un marchamo el id del marchamo

                                    //29/06/2016 IMGF
                                    pmt.TipoPagoAsociacion = this.vTipoPago;
                                    pmt.Init(null);
                                    pmt.ShowDialog(this);
                                }
                                catch (ObjectDisposedException)
                                {
                                    pmt = null;
                                }
                                catch (InvalidOperationException)
                                {
                                    pmt = null;
                                }

                                // IGF
                                // Actualiza el total del pedido en el control de adición de artículos
                                if (DsPedido != null && DsPedido.TDA_DATOS_DOCUMENTO.Rows.Count > 0)
                                {
                                    pos.ctlAddSkus1.Total = DsPedido.TDA_DATOS_DOCUMENTO.Rows[0].ItemArray[7].ToString();
                                }
                                else
                                {
                                    pos.ctlAddSkus1.Total = String.Empty;
                                }

                                //********************************* IGF
                                mBloquear_Funcionalidad();
                                //********************************* IGF
                            }
                        }
                    }
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Facturación", true);
        }

        private void btnGrabarPedido_Click(object sender, EventArgs e)
        {
            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("SaveOrder", "Guardar Pedido"))
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Order.ToString());
                    GUI.CApp.bll.ExecuteSql("GuardarPedido", qp, "PDV");
                    newOrder();
                    //
                    //Elimina el socio en memoria
                    if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0)
                    {
                        Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO = 0;
                    }
                    clicredie = false;
                    btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                    //
                    mReseteoAsociacion();
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Grabar Pedido", true);

            pos.ctlAddSkus1.Total = String.Empty;
            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        public void btnPedidosGrabados_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("SavedOrders", "Pedidos Grabados"))
            {
                Program.opcion = "P";
                Cursor cursor = Cursor.Current;
                Cursor.Current = Cursors.WaitCursor;

                try
                {
                    Forms.frmSavedOrders fso = (Forms.frmSavedOrders)GUI.CApp.CreateForm(typeof(Forms.frmSavedOrders), "", true, null, true);
                    if (fso != null)
                        fso.Init(null);

                    try
                    {
                        //Valida si es un pedido, cuyo socio sea una asociación con descuentos
                        //
                        if (DsPedido != null && DsPedido.WMS_DOCUMENTOS.Count > 0 &&
                            DsPedido.WMS_DOCUMENTOS[0].TIPO_PAGO != null)
                        {
                            vAsociacion = true;
                            this.vTipoPago = (DsPedido.WMS_DOCUMENTOS[0].TIPO_PAGO == "CO" ?
                                Forms.FrmOpcGrupoPago.eTipoPago.Contado :
                                (DsPedido.WMS_DOCUMENTOS[0].TIPO_PAGO == "CR" ? Forms.FrmOpcGrupoPago.eTipoPago.Credito : Forms.FrmOpcGrupoPago.eTipoPago.Ninguno));
                            //
                            btnAsociaciones.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                            btnAsociaciones.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);
                        }

                        if (DsPedido != null && DsPedido.WMS_DOCUMENTOS.Count > 0)
                        {
                            QueryParams qp2 = new QueryParams();
                            //Documento pagado con credie
                            qp2.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                            string pagacredie = GUI.CApp.bll.GetSingleValue("C_PagaCrediE", qp2, "PDV").ToString();

                            if (pagacredie != "")
                            {
                                clicredie = true;
                                //Program.opcion = "D";
                                btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                                btnCliCredie.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);
                            }
                        }
                    }
                    catch (StrongTypingException) { }
                }
                finally
                {
                    Cursor.Current = cursor;
                }
            }
        }

        private void btnCreditCardPct_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("CreditCardCharges", "Financiamiento y Recargos"))
            {

                if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
                {
                    Forms.frmFinanciamiento fin = (Forms.frmFinanciamiento)GUI.CApp.CreateForm(typeof(Forms.frmFinanciamiento), true);
                }
                else
                {
                    GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Financiamiento", true);
                }
            }
        }

        private void btnNoTaxes_Click(object sender, EventArgs e)
        {
            if (btnNoTaxes.Enabled)
            {
                if (GUI.CApp.ValidateAccess("NoTaxes", "Exento Impuesto"))
                {
                    if (notaxesEnabled)
                    {
                        notaxesEnabled = false;
                        btnNoTaxes.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                    }
                    else
                    {
                        notaxesEnabled = true;
                        btnNoTaxes.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                        btnNoTaxes.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);

                        if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
                        {
                            if (dlg == null)
                                dlg = new Forms.DlgExentoImpuesto();

                            dlg.ShowDialog(this);
                            if (dlg.DialogResult == DialogResult.OK)
                            {
                                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                                qp.AddReplaceParam("DOCUMENTO", Order.ToString());
                                GUI.CApp.bll.ExecuteSql("QuitarImpuesto", qp, "PDV");
                                qp.AddReplaceParam("CONSTANCIA", dlg.TxtConstancia.Text);
                                GUI.CApp.bll.ExecuteSql("ConstanciaExencion", qp, "PDV");
                                RefreshData();
                            }
                            else
                            {
                                notaxesEnabled = false;
                                btnNoTaxes.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                            }
                        }
                    }
                }
            }
        }

        public void btnDatosLinea_Click(object sender, EventArgs e)
        {
            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                string selSku = pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("SKU").ToString();
                if (selSku == Utils.Helpers.ObjToStr(GUI.CApp.GetParam("SPIV")) || selSku == Utils.Helpers.ObjToStr(GUI.CApp.GetParam("SPIC")))
                {
                    GUI.CApp.ShowMessage("No se puede consultar datos de la línea de un certificado de regalo", "Datos de la Línea", true);
                    return;
                }

                decimal cant = Convert.ToDecimal(pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("CANTIDAD"));

                if (cant < 0)
                {
                    GUI.CApp.ShowMessage("No se puede consultar datos de la línea de una devolución", "Datos de la Línea", true);
                    return;
                }

                if (GUI.CApp.ValidateAccess("LineProperties", "Datos de la Línea"))
                {
                    Forms.FrmLineProperties flp = new LLNet.Tienda.MainForms.Forms.FrmLineProperties();
                    flp.Init(null);
                    flp.ShowDialog(this);
                    RefreshData();
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Datos de la Línea", true);
        }

        private void btnConsultaP_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("PricesConsole", "Consulta de Productos"))
            {

                int AgregarSku = 1;
                if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
                {
                    string Sku = pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("SKU_ALTERNO").ToString();
                    MainForms.frmPricesConsole fp = new LLNet.Tienda.MainForms.frmPricesConsole();
                    fp.Init(new object[] { AgregarSku, Sku });
                    fp.ShowDialog(this);
                    pos.ctlAddSkus1.Focus();
                }
                else
                {
                    MainForms.frmPricesConsole fp = new LLNet.Tienda.MainForms.frmPricesConsole();
                    fp.Init(new object[] { AgregarSku });
                    fp.ShowDialog(this);
                    pos.ctlAddSkus1.Focus();
                }
            }
        }

        #endregion

        private void dockPanel3_Click(object sender, EventArgs e)
        {

        }

        #endregion

        private void btnEfectivoEmpresa_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("RecEfectivoEmpresa", "Recepcion Efectivo Empresa"))
                {

                    Dialogs.Discounts.dlgEfectivoEmpresa efe = new LLNet.Tienda.Dialogs.Discounts.dlgEfectivoEmpresa();
                    efe.lbCaption.Text = string.Format("Recepción {0}", efectivoEmpresaCaption);
                    efe.Init(null);
                    efe.ShowDialog();
                }
            }
            else
                GUI.CApp.ShowMessage(GUI.CApp.TraducirPalabra("No se ha ingresado ningún producto al pedido"), efectivoEmpresaCaption, false);
        }

        private void btnConsEfecEmp_Click(object sender, EventArgs e)
        {
            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("ConsultaEfectivoEmpresa", "Consulta Efectivo Empresa"))
                {

                    Dialogs.Discounts.dlgConsultaEfectivoEmpresa cee = new LLNet.Tienda.Dialogs.Discounts.dlgConsultaEfectivoEmpresa();
                    cee.lblCaption.Text = String.Format("Consulta de {0}", efectivoEmpresaCaption);
                    cee.Init(null);
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());
                    cee.lblEfectivo.Text = string.Format("Cantidad de {0}: {1}", efectivoEmpresaCaption, Utils.Helpers.Nvl(GUI.CApp.bll.GetSingleValue("EfectivoEmpresa", qp, "PDV"), "0.00").ToString());
                    cee.ShowDialog();
                }
            }
            else
                GUI.CApp.ShowMessage(GUI.CApp.TraducirPalabra("No se ha ingresado ningún producto al pedido"), String.Format(GUI.CApp.TraducirPalabra("Consulta de {0}"), efectivoEmpresaCaption), false);
        }

        private void btnSeries_Click(object sender, EventArgs e)
        {
            if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("Series", "Series"))
                {
                    if (pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("SITUACION_SKU").ToString() == "1")
                    {
                        if (pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("MANEJA_SERIES") != DBNull.Value && pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("MANEJA_SERIES").ToString() == "S")
                        {
                            MainForms.Forms.frmSeries ser = new LLNet.Tienda.MainForms.Forms.frmSeries();
                            object[] args = new object[] { 
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("DESCRIPCION"), 
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("CANTIDAD"), 
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("LINEA"),
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("SITUACION_SKU"),
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("DOCUMENTO_PADRE3"),
                            pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("LINEA_PADRE3")
                            
                        };
                            ser.Init(args);
                            ser.ShowDialog();
                        }
                        else
                            GUI.CApp.ShowMessage("El producto seleccionado no maneja series", "Series", true);
                    }
                    else
                        GUI.CApp.ShowMessage("Para ingresar números de serie el tipo de despacho debe ser automático", "Series", true);
                }
            }
            else
                GUI.CApp.ShowMessage("No se ha ingresado ningún producto al pedido", "Series", true);
        }

        private void btnCotizacion_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                if (GUI.CApp.ValidateAccess("Cotizaciones", "Cotizaciones"))
                {
                    Utils.QueryParams QueryParams = new LLNet.Utils.QueryParams();
                    QueryParams.AddReplaceParam("DOCUMENTO", Order.ToString());
                    GUI.CApp.bll.ExecuteSql("TipoDocCotizacion", QueryParams, "PDV");
                    RefreshData();

                    Hashtable ht = new Hashtable();
                    ht.Add("TDA_V_REP_DOCUMENTOS", QueryParams);
                    ht.Add("TDA_V_REP_DET_DOCUMENTOS", QueryParams);

                    Utils.QueryParams qpComp = new LLNet.Utils.QueryParams();
                    qpComp.AddReplaceParam("DOCUMENTO", Order.ToString());
                    qpComp.AddReplaceParam("SOCIO", DsPedido.WMS_DOCUMENTOS[0].SOCIO.ToString());
                    qpComp.AddReplaceParam("USUARIO", DsPedido.WMS_DOCUMENTOS[0].USUARIO1);
                    ht.Add("DESCRIPCION_COMPLEMENTARIOS", qpComp);

                    LLNet.Reports.BaseReports.XRInfo Info;
                    Info = Reports.BaseReports.XRBase.SetInfo("COTI");

                    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);
                }
            }
            else
                GUI.CApp.ShowMessage("No se ha ingresado ningún producto al pedido", "Cotizaciones", true);
        }

        private void btnConsFact_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ConsultaFacturas", "Consulta de Facturas"))
            {
                Forms.frmConsultaFacturas consfact = (Forms.frmConsultaFacturas)GUI.CApp.CreateForm(typeof(Forms.frmConsultaFacturas), true);
            }
        }

        private void btnEliminarOfertas_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("EliminarOfertas", "Eliminar Ofertas"))
            {
                if (DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());
                    GUI.CApp.bll.ExecuteSql("DeleteOfferToDocument", qp, "PDV");
                    RefreshData();
                }
                else
                    GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Ofertas", true);
            }

            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void frmMainPOS_Activated(object sender, EventArgs e)
        {
            if (GUI.CApp.messageBoxForm != null)
            {
                if (GUI.CApp.messageBoxForm.IsAccessible)
                    GUI.CApp.messageBoxForm.Activate();
                else if (dat != null)
                { 
                    if (dat.IsAccessible)
                        dat.Activate();
                }
            }
        }

        private void btnDivideOrder_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                GUI.CApp.bll.ExecuteSql("WMS_P_PARTIR_DOCUMENTO", qp, "PDV");
                newOrder();
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Dividir Pedido", true);
        }

        private void btnObservaciones_Click(object sender, EventArgs e)
        {
            try
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                Utils.Helpers.pdocumento = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString();

                Dialogs.Observations.dlgObservationPedido obserPed = (Dialogs.Observations.dlgObservationPedido)GUI.CApp.CreateForm(typeof(Dialogs.Observations.dlgObservationPedido), true);
                if (obserPed.DialogResult == DialogResult.OK)
                {
                    qp.Clear();
                    int documento = Convert.ToInt32(Utils.Helpers.pdocumento);
                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    qp.AddReplaceParam("OBSERVACIONES", obserPed.txtObservaciones.Text.ToString());
                    GUI.CApp.bll.ExecuteSql("ACTUALIZAOBSERVACIONES", qp, "PDV");

                }
            }
            catch
            {
                GUI.CApp.ShowMessage("No ha creado ningún pedido", "Observaciones", true);

            }

        }

        private void btlListaPrecios_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ListaPrecio", "ListaPrecios"))
            {
                Utils.Helpers.pdocumento = DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString();
                bool hayProductos = true;
                decimal LineaDocumento = 0;
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", Utils.Helpers.pdocumento);
                LineaDocumento = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("LinesDocto", qp, "PDV"));
                //if (Program.FrmMainPos.pos.ctlDetail1.Enabled)
                if (LineaDocumento > 0)
                    hayProductos = true;
                else
                    hayProductos = false;

                LLNet.Tienda.Dialogs.ListaPrecios.dlgEfectivoEmpresa lp = new LLNet.Tienda.Dialogs.ListaPrecios.dlgEfectivoEmpresa(Utils.Helpers.pdocumento, hayProductos);
                lp.ShowDialog();
            }
        }

        private void btnExonerar_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ExonerarFactura", "Exoneraciones"))
            {
                if (!refundEnabled)
                {
                    if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count == 0)
                    {
                        GUI.CApp.ShowMessage("No se puede aplicar la exoneración si no se han agregado productos", "Exoneración", true);
                    }
                    else
                    {
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                        string pdocumento = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString();

                        qp.Clear();
                        qp.AddReplaceParam("DOCUMENTO", pdocumento);

                        if (exentEnabled)
                        {
                            exentEnabled = false;
                            Program.exonerado = "N";
                            btnExonerar.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;

                            qp.AddReplaceParam("EXONERA", Program.exonerado);
                            GUI.CApp.bll.ExecuteSql("WMS_P_EXONERA_DOCTO", qp, "PDV");
                            DsPedido.WMS_DOCUMENTOS[0].DIRECCION2 = null;
                            //
                            qp = new QueryParams();
                            qp.AddReplaceParam("pNDOCUMENTO", DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                            qp.AddReplaceParam("pUSUARIO", CApp.usuario);
                            GUI.CApp.bll.ExecuteSql("FE_P_ANUL_EXONERACION", qp, "PDV");

                            QueryParams vParametros = new QueryParams();
                            vParametros.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                            vParametros.AddReplaceParam("pIVA", "0");
                            vParametros.AddReplaceParam("pDESC", "0");
                            vParametros.AddReplaceParam("pUSUARIO", GUI.CApp.usuario);
                            vParametros.AddReplaceParam("pSENTENCIA", "A");

                            GUI.CApp.bll.ExecuteSql("EX_SP_ACTUALIZCION_IVA", vParametros, "PDV");
                        }
                        else
                        {
                            if (Utils.Helpers.Nvl(CApp.GetParam("FEEH"), "N").ToString() == "S")
                            {
                                using (Forms.FacturaElect.FrmExoneracion vForm = new Forms.FacturaElect.FrmExoneracion())
                                {
                                    vForm.ShowDialog();
                                    Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DIRECCION2 = vForm.mIdentificacion;
                                    vIVA = vForm.mIVA;
                                }
                            }

                            if (Utils.Helpers.Nvl(CApp.GetParam("FEEH"), "N").ToString() == "S"
                                && !String.IsNullOrEmpty(Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DIRECCION2))
                            {
                                if (vIVA == "S")
                                {
                                    Program.exonerado = "S";
                                }
                                else
                                {
                                    Program.exonerado = "D";
                                }
                                exentEnabled = true;
                                //Program.exonerado = "S";
                                btnExonerar.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                                btnExonerar.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);
                                qp.AddReplaceParam("EXONERA", Program.exonerado);
                                GUI.CApp.bll.ExecuteSql("WMS_P_EXONERA_DOCTO", qp, "PDV");
                            }
                            //else
                            //{
                            //    exentEnabled = true;
                            //    Program.exonerado = "S";
                            //    btnExonerar.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                            //    btnExonerar.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);
                            //    qp.AddReplaceParam("EXONERA", Program.exonerado);
                            //    GUI.CApp.bll.ExecuteSql("WMS_P_EXONERA_DOCTO", qp, "PDV");
                            //}
                        }

                        Program.FrmMainPos.RefreshData();
                    }
                }
                else
                {
                    GUI.CApp.ShowMessage("No se puede exonerar una devolucion", "Error", true);
                }
            }
            else
            {
                exentEnabled = false;
                btnExonerar.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
            }

            pos.ActiveControl = pos.ctlAddSkus1;
            pos.ctlAddSkus1.txtSku.Focus();
        }

        #region WRLG. DESARROLLO DE GARANTIAS

        private void btnAppGarantia_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                using (Forms.frmAppGarantias app = new LLNet.Tienda.MainForms.Forms.frmAppGarantias())
                {
                    app.Init(new object[] { 
                        pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("SKU"),
                        pos.ctlDetail1.bgvDetail.GetFocusedRowCellValue("LINEA")});
                    app.ShowDialog();
                }
            }
            else
                GUI.CApp.ShowMessage("No ha ingresado ningún producto al pedido", "Aplicar Garantías", true);

        }

        private void btnConsGarantia_Click(object sender, EventArgs e)
        {
            using (Finders.frmFindWarranty fgar = new LLNet.Tienda.MainForms.Finders.frmFindWarranty())
            {
                fgar.ShowDialog();
            }
        }

        #endregion

        //Formulario pago de servicios
        private Forms.frmPagoServicios serv;

        private void btnPagoServ_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IPagoServ", "Integracion Pago de Servicios"))
            {
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                if (serv == null)
                    serv = new LLNet.Tienda.MainForms.Forms.frmPagoServicios();

                serv.Init(null);

                serv.MdiParent = null;
                serv.Parent = null;
                serv.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;
            }
            pos.ctlAddSkus1.txtSku.Focus();
            //**********************************IMGF
            mRevisar_Monto_Maximo();
            mBloquear_Funcionalidad();
            //**********************************IMGF
        }

        #region sbtnConstanciaR_Click IGF
        private void sbtnConstanciaR_Click(object sender, EventArgs e)
        {
            Forms.frmConstanciaRegalo consreg = new Forms.frmConstanciaRegalo();
            consreg.ShowDialog();
        }
        #endregion

        #region sbtnActCliente_Click
        private void sbtnActCliente_Click(object sender, EventArgs e)
        {
            Forms.FrmRegCliente regc = new LLNet.Tienda.MainForms.Forms.FrmRegCliente(0, 0);
            regc.ShowDialog();
        }
        #endregion




        private void btnClientFrec_Click(object sender, EventArgs e)
        {
            if (Helpers.Nvl(CApp.GetParam("DPTS"), "N").ToString() != "S")
            {
                //Formulario pago de servicios
                Forms.MisPuntos.frmTarjCli tarjCli;
                //if (GUI.CApp.ValidateAccess("IPagoServ", "Integracion Pago de Servicios"))
                //{
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                //if (tarjCli == null)
                tarjCli = new LLNet.Tienda.MainForms.Forms.MisPuntos.frmTarjCli();

                // tarjCli.Init(null);

                tarjCli.MdiParent = null;
                tarjCli.Parent = null;
                tarjCli.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;
                //}
                pos.ctlAddSkus1.txtSku.Focus();

                //IGF
                int deshabilitar = Convert.ToInt32(Helpers.Nvl(CApp.GetParam("DBOP"), "0").ToString());
                if (deshabilitar == 1)
                {
                    try
                    {
                        if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0)
                        {
                            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].TARJETA1.ToString() != "")
                                this.btnObservaciones.Enabled = false;
                        }
                    }
                    catch (StrongTypingException) { this.btnObservaciones.Enabled = true; }
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Sistema de Puntos fuera de Servicio", "Sistema de Puntos", true);
            }
        }

        #region sbtnDevolFONABE_Click
        private void sbtnDevolFONABE_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("DevolFONABE", "Devoluciones FONABE"))
            {
                Forms.frmDevolFONABE devfonabe = new LLNet.Tienda.MainForms.Forms.frmDevolFONABE();
                devfonabe.ShowDialog();
            }
        }
        #endregion


        //Formulario Donaciones
        private void sbtnDonaciones_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("Donacion", "Control de Donaciones"))
            {
                //Formulario de Donacion
                Forms.FrmDonacion donac;
                donac = new LLNet.Tienda.MainForms.Forms.FrmDonacion();

                donac.Init(null);

                donac.MdiParent = null;
                donac.Parent = null;
                donac.ShowDialog(this);

                //pos.ctlAddSkus1.txtSku.Text = parq.SkuAlterno;
                if (donac.monto > 0)
                {
                    string SKU_donac = Helpers.Nvl(CApp.GetParam("SADO"), " ").ToString();
                    if (SKU_donac != " ")
                    {
                        //agrega el articulo
                        pos.ctlAddSkus1.txtSku.Text = SKU_donac; //"173096686";
                        pos.ctlAddSkus1.txtCantidad.Text = "1";
                        pos.ctlAddSkus1.PrecioUnitario = donac.monto;
                        KeyPressEventArgs kea = new KeyPressEventArgs((char)13);
                        pos.ctlAddSkus1.txtSku_KeyPress(null, kea);
                    }
                }

                donac.monto = 0;
                pos.ActiveControl = pos.ctlAddSkus1;
            }
            pos.ctlAddSkus1.txtSku.Focus();
        }

        private void hideContainerLeft_Click(object sender, EventArgs e)
        {

        }

        private void btnCuotsCredEko_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("CuotsCreditoEKO", "Pago Cuotas Credito Ekono"))
            {
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                Forms.CreditEko.FrmPagoCuots fcrek = new Forms.CreditEko.FrmPagoCuots();

                //if (serv == null)
                //    serv = new LLNet.Tienda.MainForms.Forms.frmPagoServicios();

                //serv.Init(null);

                fcrek.MdiParent = null;
                fcrek.Parent = null;
                fcrek.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;
            }
            pos.ctlAddSkus1.txtSku.Focus();
            //**********************************IMGF
            mRevisar_Monto_Maximo();
            mBloquear_Funcionalidad();
            //**********************************IMGF
        }

        private void btnCuotsInstC_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("CuotsInstacredit", "Pago Cuotas Credito Instacredit"))
            {
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                Forms.Instacredit.FrmPagoCuotsI fcrek = new Forms.Instacredit.FrmPagoCuotsI();

                //if (serv == null)
                //    serv = new LLNet.Tienda.MainForms.Forms.frmPagoServicios();

                //serv.Init(null);

                fcrek.MdiParent = null;
                fcrek.Parent = null;
                fcrek.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;
            }
            pos.ctlAddSkus1.txtSku.Focus();
            //**********************************IMGF
            mRevisar_Monto_Maximo();
            mBloquear_Funcionalidad();
            //**********************************IMGF
        }

        private void btnCuotsMultiC_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("CuotsMULTICRED", "Pago Cuotas MULTICREDITOS"))
            {
                //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);
                Forms.MultiCredits.FrmPagoCuotsM fcrek = new Forms.MultiCredits.FrmPagoCuotsM();

                //if (serv == null)
                //    serv = new LLNet.Tienda.MainForms.Forms.frmPagoServicios();

                //serv.Init(null);

                fcrek.MdiParent = null;
                fcrek.Parent = null;
                fcrek.ShowDialog(this);

                pos.ActiveControl = pos.ctlAddSkus1;
            }
            pos.ctlAddSkus1.txtSku.Focus();
            //**********************************IMGF
            mRevisar_Monto_Maximo();
            mBloquear_Funcionalidad();
            //**********************************IMGF
        }


        private void btnCliCredie_Click(object sender, EventArgs e)
        {
            if (refundEnabled)
            {
                GUI.CApp.ShowMessage("No puedes asociar el cliente si se tiene activa la opción devoluciones", "crediE", true);
            }
            else if (this.vAsociacion)
            {
                GUI.CApp.ShowMessage("No puedes asociar el cliente si se tiene activa la opción de asociaciones", "crediE", true);
            }
            else
            {
                //codigo del socio cliente CrediE
                decimal sociocredie = decimal.Parse(GUI.CApp.bll.GetSingleValue("C_CliCrediE", "PDV").ToString());

                if (clicredie)
                {
                    if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count == 0 || Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["TOTAL"] == DBNull.Value)
                    {
                        GUI.CApp.ShowMessage("No puedes asociar el cliente si no tienes productos", "crediE", true);
                        pos.ctlAddSkus1.txtSku.Focus();
                    }
                    else
                    {
                        //Elimina el socio en nuestra Base d Datos
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                        // Llama el procedimiento que almacena la tarjeta 
                        GUI.CApp.bll.ExecuteSql("WMS_ESocioCrediE", qp, "PDV");

                        //Elimina el socio en memoria
                        Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO = 0;
                        clicredie = false;
                        //Program.opcion = "P";
                        btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;

                    }

                }
                else
                {
                    if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count == 0 || Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["TOTAL"] == DBNull.Value)
                    {
                        GUI.CApp.ShowMessage("No puedes asociar el cliente si no tienes productos", "crediE", true);
                        //this.Close();
                        //this.Dispose();
                    }
                    else
                    {
                        //Almacena el socio en nuestra Base d Datos
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                        // Llama el procedimiento que almacena la tarjeta 
                        GUI.CApp.bll.ExecuteSql("WMS_ASocioCrediE", qp, "PDV");

                        //Almacena el socio en memoria
                        Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO = sociocredie;

                        clicredie = true;
                        //Program.opcion = "D";
                        btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                        btnCliCredie.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);

                    }

                }

                //Aplica ofertas activas al socio
                btnOfertas_Click(null, null);
            }
        }


        public void LimpiarDatosCredie()
        {
            //Elimina el socio en memoria
            Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO = 2;
            clicredie = false;
            //Program.opcion = "P";
            btnCliCredie.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
        }

        //29/06/2016 IMGF

        #region mReseteoAsociacion
        /// <summary>
        /// Quita el color amarillo al botón de asociaciones
        /// </summary>
        public void mReseteoAsociacion()
        {
            btnAsociaciones.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
            this.vAsociacion = false;
            this.vTipoPago = Forms.FrmOpcGrupoPago.eTipoPago.Ninguno;
            pos.ctlAddSkus1.txtSku.Focus();
        }
        #endregion

        #region btnAsociaciones_Click
        private void btnAsociaciones_Click(object sender, EventArgs e)
        {
            bool vResultado = false;
            QueryParams vParametros;
            bool vClienteAsociacion = false;
            decimal vDescuentoAsociacion = 0;

            // Revisa si se tiene activo el botón de devolución
            if (refundEnabled)
            {
                GUI.CApp.ShowMessage("No se puede activar esta opción si está activa la devolución", "Asociaciones", true);
            }
            else if (clicredie)
            {
                GUI.CApp.ShowMessage("No se puede activar si está activa la opción de Credi-e", "Asociaciones", true);
            }
            else
            {
                // Verifica si ya está activo el botón
                if (vAsociacion)
                {
                    vAsociacion = false;
                    btnAsociaciones.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
                    //
                    vParametros = new QueryParams();
                    vParametros.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                    // Desmarca el documento
                    GUI.CApp.bll.ExecuteSql("POS_P_DESMARCAR_ASOCIACION", vParametros, "PDV");
                    //Aplica ofertas activas al socio
                    btnOfertas_Click(null, null);
                }
                else
                {
                    // Valida que haya un documento
                    if (Program.FrmMainPos != null && Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0 &&
                        Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO != 0)
                    {
                        vParametros = new QueryParams();
                        //
                        vParametros.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                        vResultado = Convert.ToBoolean(GUI.CApp.bll.GetSingleValue("POS_F_VALIDAR_ASOCIACION",
                            vParametros, "PDV"));


                    ClienteAsociacion:
                        // Valida que el socio sea parte de las asociaciones con descuentos
                        if (vResultado || vClienteAsociacion)
                        {
                            using (Forms.FrmOpcGrupoPago vform = new Forms.FrmOpcGrupoPago())
                            {
                                //si no es un cliente con el descuento de una asociacion
                                if (!vClienteAsociacion)
                                {
                                    vform.ShowDialog();
                                }

                                if (vform.TipoPago != LLNet.Tienda.MainForms.Forms.FrmOpcGrupoPago.eTipoPago.Ninguno || vClienteAsociacion)
                                {
                                    vAsociacion = true;
                                    //si no es un cliente con el descuento de una asociacion
                                    if (!vClienteAsociacion)
                                        this.vTipoPago = vform.TipoPago;
                                    else
                                        this.vTipoPago = LLNet.Tienda.MainForms.Forms.FrmOpcGrupoPago.eTipoPago.Contado;
                                    //
                                    btnAsociaciones.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;
                                    btnAsociaciones.Appearance.BackColor = Color.FromKnownColor(KnownColor.Yellow);

                                    // Aplica ofertas activas al socio
                                    btnOfertas_Click(null, null);
                                    //
                                    vParametros = new QueryParams();
                                    vParametros.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                                    vParametros.AddReplaceParam("GRUPO_PAGO", this.vTipoPago.ToString());
                                    // Marca el documento
                                    GUI.CApp.bll.ExecuteSql("POS_P_SOCIO_ASOCIACION", vParametros, "PDV");
                                    //
                                    //validar clienteasociacion si es true busca la asociacion 
                                    if (vClienteAsociacion)
                                    {
                                        //Busca el cliente
                                        LLNet.Tienda.MainForms.Finders.frmFindCustomerFEAssociation dat = new LLNet.Tienda.MainForms.Finders.frmFindCustomerFEAssociation();

                                        dat.Init(null);
                                        dat.ShowDialog(this);

                                        try
                                        {
                                            if (!string.IsNullOrEmpty(dat.Socio))
                                            {
                                                vParametros = new QueryParams();
                                                vParametros.AddReplaceParam("SOCIO", dat.Socio.ToString());
                                                vParametros.AddReplaceParam("TIPO_PAGO", this.vTipoPago.ToString());
                                                using (DataSet vDatos = GUI.CApp.bll.getDataSet("PDV",
                                                                                                "OBTENER_DESCUENTO_ASOCIACIONES",
                                                                                                vParametros))
                                                {
                                                    if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                                                        vDescuentoAsociacion = Convert.ToDecimal(vDatos.Tables[0].Rows[0].ItemArray[0].ToString());
                                                    else
                                                        CApp.ShowMessage("Al socio del pedido no se le pueden aplicar descuentos", "Asociaciones", true);
                                                }
                                            }
                                        }
                                        catch
                                        { //ENTRA AL CATCH PORQUE EL CLIENTE cuenta con datos
                                            //devolver a la insercion del cliente

                                            CApp.ShowMessage("Al socio del pedido no se le pueden aplicar descuentos", "Asociaciones", true);
                                        }
                                    }

                                    vParametros = new QueryParams();
                                    vParametros.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                                    vParametros.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                                    if (vDescuentoAsociacion == 0)
                                        vParametros.AddReplaceParam("DESCUENTO", "NULL");
                                    else
                                        vParametros.AddReplaceParam("DESCUENTO", vDescuentoAsociacion.ToString());
                                    // Aplica descuentos del socio
                                    GUI.CApp.bll.ExecuteSql("POS_P_DESCUENTO_ASOCIACIONES", vParametros, "PDV");
                                    RefreshData();
                                }
                            }
                        }
                        else
                        {
                            //consulta si se debe escoger un cliente para enviar FE
                            frmConsultasSiNo frmConsulta = new frmConsultasSiNo("¿Se debe utilizar el descuento de una asociación?");
                            frmConsulta.ShowDialog(this);

                            //si la respuesta es si
                            if (frmConsulta.Respuesta)
                            {
                                vClienteAsociacion = true;
                                goto ClienteAsociacion;
                            }
                            CApp.ShowMessage("Al socio del pedido no se le pueden aplicar descuentos", "Asociaciones", true);
                        }
                    }
                }
            }
        }
        #endregion

        private void btnAplCupnCrediE_Click(object sender, EventArgs e)
        {
            using (Forms.CreditEko.FrmAplCupon vform = new Forms.CreditEko.FrmAplCupon())
            {
                vform.ShowDialog();
            }
            Program.FrmMainPos.RefreshData();
        }

        private void btnMarchamos_Click(object sender, EventArgs e)
        {
            //limpiar variables
            Id_March = string.Empty;
            if (GUI.CApp.ValidateAccess("IMARCHAMOS", "Integracion Marchamos"))
            {
                Forms.OtrosServ.Marchamos.FrmMarchamos frmMarchams = new Forms.OtrosServ.Marchamos.FrmMarchamos();
                frmMarchams.ShowDialog();
                if (frmMarchams.facturar)
                {
                    Id_March = frmMarchams.Id;
                    pos.ctlAddSkus1.txtSku.Text = frmMarchams.SkuAlterno;
                    pos.ctlAddSkus1.txtCantidad.Text = "1";
                    pos.ctlAddSkus1.PrecioUnitario = decimal.Parse(frmMarchams.Monto);
                    KeyPressEventArgs kea = new KeyPressEventArgs((char)13);
                    pos.ctlAddSkus1.txtSku_KeyPress(null, kea);

                    //codigo del socio cliente Marchamos
                    decimal sociomarch = decimal.Parse(GUI.CApp.bll.GetSingleValue("C_CliMarchams", "PDV").ToString());
                    //Almacena el socio en nuestra Base d Datos
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                    qp.AddReplaceParam("pEMPRESA", frmMarchams.Multi);

                    GUI.CApp.bll.ExecuteSql("WMS_ASocioMarchams", qp, "PDV");
                    //Almacena el socio en memoria
                    Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO = sociomarch;
                    RefreshData();

                    btnPayments_Click(null, null);
                    Id_March = String.Empty;
                }
                pos.ctlAddSkus1.txtSku.Focus();
            }
        }

        private void btnCuponApp_Click(object sender, EventArgs e)
        {
            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count != 0)
            {
                if (GUI.CApp.ValidateAccess("CUP_ACCESS", "Ofertas"))
                {
                    using (Forms.Cupones.FrmEkonoCupones vform = new Forms.Cupones.FrmEkonoCupones())
                    {
                        vform.ShowDialog();
                    }
                    Program.FrmMainPos.RefreshData();
                }
            }
            else
            {
                GUI.CApp.ShowMessage("No puedes asociar cupones si no tienes productos", "cupones", true);
                pos.ctlAddSkus1.txtSku.Focus();
            }
        }

        private void btn_selecLista_CBB_Click(object sender, EventArgs e)
        {
            frm_FiltrarBusquedaFacCBB frm = new frm_FiltrarBusquedaFacCBB();
            frm.Show();
        }

        private void hideContainerLeft_Click_1(object sender, EventArgs e)
        {

        }

        private void dockPanel4_Click(object sender, EventArgs e)
        {

        }

        private void btn_ligar_desligar_documentos_Click(object sender, EventArgs e)
        {
            frm_ligar_desligar_documentos vFrmDocumentos = new frm_ligar_desligar_documentos();
            vFrmDocumentos.MdiParent = null;
            vFrmDocumentos.Parent = null;
            vFrmDocumentos.ShowDialog(this);
        }

        private void btn_pago_efectivo_ecommerce_Click(object sender, EventArgs e)
        {
            frm_Pago_Efectivo_Ecommerce vFrmPagoEfectivoEcommerce = new frm_Pago_Efectivo_Ecommerce();
            vFrmPagoEfectivoEcommerce.MdiParent = null;
            vFrmPagoEfectivoEcommerce.Parent = null;
            vFrmPagoEfectivoEcommerce.ShowDialog(this);
        }

        private void sBtnEknExpress_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("EXPRESS_ACCESS", "EKONOEXPRESS"))
            {
                using (Forms.Express.FrmExpress vform = new  Forms.Express.FrmExpress())
                {
                    vform.ShowDialog();
                }
                //Program.FrmMainPos.RefreshData();
            }
        }



        //29/06/2016 IMGF -FIN-

        //Formulario de Control del Parqueo
        //private Forms.frmParqueo parq;

        //private void btnParqueo_Click(object sender, EventArgs e)
        //{
        //    //Forms.frmParqueo parq;
        //    if (GUI.CApp.ValidateAccess("Parqueo", "Control de Parqueo"))
        //    {
        //        //Dialogs.Customer.dlgCustomer customer = (Dialogs.Customer.dlgCustomer)GUI.CApp.CreateForm(typeof(Dialogs.Customer.dlgCustomer), "Datos de Cliente", true, null, true);

        //        //if (parq == null)
        //        //Formulario de Control del Parqueo
        //        Forms.frmParqueo parq;
        //        parq = new LLNet.Tienda.MainForms.Forms.frmParqueo();

        //        parq.Init(null);

        //        parq.MdiParent = null;
        //        parq.Parent = null;
        //        parq.ShowDialog(this);

        //        pos.ActiveControl = pos.ctlAddSkus1;
        //    }
        //     pos.ctlAddSkus1.txtSku.Focus();
        //}

    }
}