#region using
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;
using LLNet.Tienda.MainForms.Forms;
#endregion

namespace LLNet.Tienda.Dialogs.Refunds
{
    public partial class dlgRefundInvoice : GUI.FormBases.frmBase
    {
        public LLNet.Tienda.MainForms.Controls.ctlDetail ctlDetail1;
        public LLNet.Tienda.MainForms.Controls.ctlAddSkus ctlAddSkus1;
        private DevExpress.XtraBars.Docking.DockManager dockManager1;
        private LLNet.Tienda.MainForms.Controls.ctlMaster_ ctlMaster1;

        #region Properties

        private string producto;

        public string Producto
        {
            set { producto = value; }
            get { return producto; }
        }

        private decimal? vale;

        public decimal? Vale
        {
            get { return vale; }
        }

        private decimal linea;

        public decimal Linea
        {
            get { return linea; }
        }

        private decimal cantidad;

        public decimal Cantidad
        {
            get { return cantidad; }
            set { cantidad = value; }
        }

        private decimal documento;

        public decimal Documento
        {
            get { return documento; }
        }

        private decimal? precioUnitario;

        public decimal? PrecioUnitario
        {
            get { return precioUnitario; }
            set { precioUnitario = value; }
        }

        private decimal? precioModificado;

        public decimal? PrecioModificado
        {
            get { return precioModificado; }
            set { precioModificado = value; }
        }

        private decimal? impuesto;

        public decimal? Impuesto
        {
            get { return impuesto; }
            set { impuesto = value; }
        }

        private decimal? descuento;

        public decimal? Descuento
        {
            get { return descuento; }
            set { descuento = value; }
        }

        private string vendedor;

        public string Vendedor
        {
            get { return vendedor; }
            set { vendedor = value; }
        }

        private DateTime? entrega;

        public DateTime? Entrega
        {
            get { return entrega; }
            set { entrega = value; }
        }

        private decimal? bodega;

        public decimal? Bodega
        {
            get { return bodega; }
            set { bodega = value; }
        }

        private decimal? bodega2;

        public decimal? Bodega2
        {
            get { return bodega2; }
            set { bodega2 = value; }
        }

        private string direccion;

        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        private decimal? region;

        public decimal? Region
        {
            get { return region; }
            set { region = value; }
        }

        private string usuario1;

        public string Usuario1
        {
            get { return usuario1; }
            set { usuario1 = value; }
        }

        private string usuario2;
        public string Usuario2
        {
            get { return usuario2; }
            set { usuario2 = value; }
        }

        private string usuario3;
        public string Usuario3
        {
            get { return usuario3; }
            set { usuario3 = value; }
        }

        private decimal? porcentaje1;
        public decimal? Porcentaje1
        {
            get { return porcentaje1; }
            set { porcentaje1 = value; }
        }

        private decimal? porcentaje2;
        public decimal? Porcentaje2
        {
            get { return porcentaje2; }
            set { porcentaje2 = value; }
        }

        private decimal? porcentaje3;
        public decimal? Porcentaje3
        {
            get { return porcentaje3; }
            set { porcentaje3 = value; }
        }

        private decimal? motivoDevolucion;
        public decimal? MotivoDevolucion
        {
            get { return motivoDevolucion; }
            set { motivoDevolucion = value; }
        }

        #endregion

        #region Constructor

        public dlgRefundInvoice()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }

        #endregion

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

        public void ValidaCombo()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SKU_ALTERNO", Producto.ToUpper());
            string valor = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("EsComboExplotado", qp, "PDV"));
            isInvalid = valor == "D";

            if (isInvalid)
                GUI.CApp.ShowMessage("No puede hacer una devolución de un combo, debe ingresar el contenido", "Devoluciones", true);
        }

        private string EsquemaC;

        #region FE Rechazadas
        #region ObtenerDocFacturaNuevaLigada
        public string ObtenerDocFacturaNuevaLigada(string pSerie, string pFactura)
        {
            try
            {
                //nos devuelve el documento de la factura nueva a la cual esta ligada la digitada
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pSERIE", pSerie);
                qp.AddReplaceParam("pNO_DOCUMENTO", pFactura);
                string valor = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("FE_F_LIGUE_DOCUMENTO", qp, "PDV"));

                return valor;
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message.ToString(), "Hay un problema!", true);
                return "";

            }
        }
        #endregion

        #region ObtenerSerieLigada
        public string ObtenerSerieLigada(string pSerie, string pFactura)
        {
            try
            {
                string valor = "";
                string vDocumento = Convert.ToString(ObtenerDocFacturaNuevaLigada(pSerie, pFactura));
                //nos devuelve el documento de la factura nueva a la cual esta ligada la digitada
                if (vDocumento != String.Empty)
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", vDocumento);

                    valor = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("FE_SERIE_DOCUMENTO", qp, "PDV"));
                }

                return valor;
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message.ToString(), "Hay un problema", true);
                return "";

            }
        }
        #endregion

        #region ObtenerNoDocumentoLigada
        public string ObtenerNoDocumentoLigada(string pSerie, string pFactura)
        {
            try
            {
                string valor = "";
                string vDocumento = Convert.ToString(ObtenerDocFacturaNuevaLigada(pSerie, pFactura));
                //nos devuelve el documento de la factura nueva a la cual esta ligada la digitada
                if (vDocumento != String.Empty)
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", vDocumento);

                    valor = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("FE_NO_DOCUMENTO", qp, "PDV"));
                }
                return valor;
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message.ToString(), "Hay un problema", true);
                return "";

            }
        }
        #endregion
        #endregion

        #region Eventos

        private void dlgRefundInvoice_Load(object sender, EventArgs e)
        {
            EsquemaC = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("NDEC"));
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "TIPO RECEPCION");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsTipoRecepcion.GetType(), dsTipoRecepcion.DOMAINS.TableName, qp), dsTipoRecepcion);

            // CARGA DEL COMBO DE MOTIVOS DE DEVOLUCION
            Utils.QueryParams qpMot = new LLNet.Utils.QueryParams();
            qpMot.AddReplaceParam("RV_DOMAIN", "MOTIVO DEVOLUCION POS");
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsMotivo.GetType(), dsMotivo.DOMAINS.TableName, qpMot), dsMotivo);

            // Cambio realizado para factura electrónica
            for (int vCont = 0; vCont < dsMotivo.DOMAINS.Rows.Count; vCont++)
            {
                if (!String.IsNullOrEmpty(dsMotivo.DOMAINS.Rows[vCont].ItemArray[3].ToString()))
                {
                    dsMotivo.DOMAINS.Rows.RemoveAt(vCont);
                    vCont--;
                }
            }

            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_BODEGAS.TableName), dsPDV1);
            rowTipoRecepcion.Properties.Value = "1";
            rowFechaEntrega.Properties.Value = DateTime.Today;
            rowMotivo.Properties.Value = "1";

        }

        private void btnSinFactura_Click(object sender, EventArgs e)
        {
            Utils.Helpers.pFactCredito = "1";
            if (!ValidarDevolucion())
                return;

            if (GUI.CApp.ValidateAccess("DevolucionSinFactura", "Devolución sin Factura"))
            {
                DatosGeneralesDevolucion();
                DialogResult = DialogResult.OK;
            }
        }

        private void txtFactura_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
            {
                string vSerie = Utils.Helpers.ObjToStr(rowFACTURA.PropertiesCollection[0].Value);
                string vNoDocumento = Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.ButtonEdit)sender).EditValue);


                string vDocumento = ObtenerDocFacturaNuevaLigada(vSerie, vNoDocumento);

                if (vDocumento != String.Empty)
                {
                    string vSerieLigada = ObtenerSerieLigada(vSerie, vNoDocumento);
                    string vNoDocumentoLigado = ObtenerNoDocumentoLigada(vSerie, vNoDocumento);
                    if (GUI.CApp.ShowMessage("Está factura fue rechazada por hacienda, tiene la nueva factura ligada " + vSerieLigada + "-" + vNoDocumentoLigado + ". ¿Desea continuar?", "Factura Ligada", true, true) == DialogResult.OK)
                    {
                        getInvoiceData(vSerieLigada, vNoDocumentoLigado);
                        e.Handled = true;
                    }
                }
                else
                {
                    getInvoiceData(vSerie, vNoDocumento);
                    e.Handled = true;
                }


            }
        }

        private void getInvoiceData(string sSerie, string sFactura)
        {
            dsPDV1.TDA_V_DATOS_FACTURA.Clear();

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", sSerie);
            qp.AddReplaceParam("NO_DOCUMENTO", sFactura);
            qp.AddReplaceParam("SKU_ALTERNO", Producto.ToUpper());
            this.btnAceptar.Enabled = true;

            int count = 0;
            if (EsquemaC != string.Empty)
            {
                // busco consolidado, si no encuentro la factura busco local
                try
                {
                    Utils.Helpers.Merge(GUI.CApp.bll.getConnTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_DATOS_FACTURA.TableName, EsquemaC, qp, "FillInvoice"), dsPDV1);
                    count = dsPDV1.TDA_V_DATOS_FACTURA.Rows.Count;
                }
                catch
                {
                }
            }
            int TiempodeEmitida = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("TiempodeEmitida", qp, "PDV"));
            int TiempoValidoDev = Convert.ToInt32(GUI.CApp.GetParam("DVFD"));
            if (TiempodeEmitida > TiempoValidoDev)
            {
                GUI.CApp.ShowMessage("La Fecha de la Factura " + sSerie + " " + sFactura + " sobre pasa el Tiempo para Devoluciones", "Devoluciones", false);
                return;
            }
            else
            {

                if (count == 0)
                {
                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_DATOS_FACTURA.TableName, qp, "FillInvoice"), dsPDV1);
                    count = dsPDV1.TDA_V_DATOS_FACTURA.Rows.Count;
                }
            }

            if (count > 0)
            {

                if (Utils.Helpers.Nvl(dsPDV1.TDA_V_DATOS_FACTURA[0].APARTADO, "N").ToString() == "N")
                {
                    rowFACTURA.PropertiesCollection[1].Value = sFactura;
                    rowCLIENTE.Properties.Value = dsPDV1.TDA_V_DATOS_FACTURA[0].NOMBRE;
                    rowDIAS_FACTURA.Properties.Value = dsPDV1.TDA_V_DATOS_FACTURA[0].DIAS_FACTURA;
                    rowFECHA_EMISION.Properties.Value = dsPDV1.TDA_V_DATOS_FACTURA[0].FECHA_EMISION;
                    gridView1.BestFitColumns();
                }
                else
                {
                    GUI.CApp.ShowMessage(GUI.CApp.TraducirPalabra("La factura ") + sSerie + " " + sFactura + GUI.CApp.TraducirPalabra(" es sobre un Apartado, no es posible Hacer Devoluciones sobre Apartados"), GUI.CApp.TraducirPalabra("Devoluciones"), false);
                    dsPDV1.TDA_V_DATOS_FACTURA.Clear();
                }



            }
            else
                GUI.CApp.ShowMessage(GUI.CApp.TraducirPalabra("La factura ") + sSerie + " " + sFactura + GUI.CApp.TraducirPalabra(" no existe o no contiene al producto que desea devolver"), GUI.CApp.TraducirPalabra("Devoluciones"), false);

        }

        private void gridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnAceptar_Click(null, null);
        }

        private bool ValidarDevolucion()
        {
            if (Utils.Helpers.ObjToStr(rowTipoRecepcion.Properties.Value) == "2")
            {
                if (Utils.Helpers.ObjToStr(rowDireccion.Properties.Value).Trim() == string.Empty)
                {
                    GUI.CApp.ShowMessage("Ingrese la dirección", "Devoluciones", true);
                    return false;
                }

                if (Utils.Helpers.ObjToStr(rowRegion.PropertiesCollection[0].Value).Trim() == string.Empty)
                {
                    GUI.CApp.ShowMessage("Ingrese la región", "Devoluciones", true);
                    return false;
                }
            }

            if (Utils.Helpers.ObjToStr(rowFechaEntrega.Properties.Value).Trim() == string.Empty)
            {
                GUI.CApp.ShowMessage("Ingrese la fecha de recibo de la mercadería", "Devoluciones", true);
                return false;
            }

            object oVale = gridView1.GetFocusedRowCellValue(colVALE);

            if (oVale != null && oVale != DBNull.Value)
            {
                Utils.QueryParams qpVale = new LLNet.Utils.QueryParams();
                qpVale.AddReplaceParam("VALE", oVale.ToString());

                string estadoVale = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("EstadoVale", qpVale, "PDV"));
                switch (estadoVale)
                {
                    case "":
                        GUI.CApp.ShowMessage(string.Format(GUI.CApp.TraducirPalabra("No se encontró el vale o certificado {0}"), oVale), GUI.CApp.TraducirPalabra("Devolución de Vales"), false);
                        return false;
                        break;
                    case "A":
                        GUI.CApp.ShowMessage(string.Format(GUI.CApp.TraducirPalabra("El vale o certificado {0} está anulado"), oVale), GUI.CApp.TraducirPalabra("Devolución de Vales"), false);
                        return false;
                        break;
                    case "C":
                        GUI.CApp.ShowMessage(string.Format(GUI.CApp.TraducirPalabra("El vale o certificado {0} ya fue canjeado"), oVale), GUI.CApp.TraducirPalabra("Devolución de Vales"), false);
                        return false;
                        break;
                    default:
                        vale = Convert.ToDecimal(oVale);
                        return true;
                        break;
                }
            }

            return true;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (!ValidarDevolucion())
                return;

            if (gridView1.RowCount > 0)
            {
                Utils.QueryParams qpCons = new LLNet.Utils.QueryParams();
                qpCons.AddReplaceParam("DOCUMENTO", gridView1.GetFocusedRowCellValue(colDOCUMENTO).ToString());
                qpCons.AddReplaceParam("LINEA", gridView1.GetFocusedRowCellValue(colLINEA).ToString());


                Utils.Helpers.pFactCredito = (GUI.CApp.bll.GetSingleValue("EsFacturaCredito", qpCons, "PDV")).ToString();

                decimal devuelto = 0;
                if (Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
                {
                    qpCons.AddReplaceParam("PEDIDO", Program.FrmMainPos.Order.ToString());
                    devuelto = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DevueltoEnPedido", qpCons, "PDV"));
                }

                if (Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colDISPONIBLE)) - devuelto >= Cantidad)
                {
                    if (Utils.Helpers.ObjToStr(gridView1.GetFocusedRowCellValue(colSITUACION_SKU)) == "3")
                    {
                        try
                        {
                            if (EsquemaC != string.Empty)
                            {
                                string situacionEntrega = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetConnSingleValue("ValidarSituacionEntrega", qpCons, "PDV", EsquemaC));
                                if (situacionEntrega != "14")
                                {
                                    GUI.CApp.ShowMessage("No se puede efectuar la devolución porque el producto no ha sido despachado", "Devoluciones", true);
                                    return;
                                }
                            }
                        }
                        catch
                        {
                            if (GUI.CApp.ShowMessage("No se pudo conectar a Consolidado, desea continuar con la devolución", "Devoluciones", true, true) == DialogResult.Cancel)
                                return;
                        }
                    }
                    else if (Utils.Helpers.ObjToStr(gridView1.GetFocusedRowCellValue(colSITUACION_SKU)) == "8")
                    {
                        try
                        {
                            if (EsquemaC != string.Empty)
                            {
                                string situacionEntrega = Utils.Helpers.ObjToStr(GUI.CApp.bll.GetConnSingleValue("ValidarSituacionEntrega", qpCons, "PDV", EsquemaC));
                                if (situacionEntrega != "14")
                                {
                                    GUI.CApp.ShowMessage("No se puede efectuar la devolución porque el producto no ha sido despachado", "Devoluciones", true);
                                    return;
                                }
                            }
                        }
                        catch
                        {
                            if (GUI.CApp.ShowMessage("No se pudo conectar a Consolidado, desea continuar con la devolución", "Devoluciones", true, true) == DialogResult.Cancel)
                                return;
                        }
                    }

                    documento = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colDOCUMENTO));
                    linea = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colLINEA));



                    if (precioModificado == null)
                    {
                        if (gridView1.GetFocusedRowCellValue(colPRECIO_UNITARIO) != DBNull.Value)
                            precioUnitario = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colPRECIO_UNITARIO));

                        //                        if (GUI.CApp.bll.GetSingleValue("EsExentoImpuesto", qp, "PDV") == "X")
                        //                        {
                        if (gridView1.GetFocusedRowCellValue(colIMPUESTO) != DBNull.Value)
                            impuesto = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colIMPUESTO));
                        //                        }

                        if (gridView1.GetFocusedRowCellValue(colDESCUENTO) != DBNull.Value)
                            descuento = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colDESCUENTO));
                    }

                    if (gridView1.GetFocusedRowCellValue(colUSUARIO) != DBNull.Value)
                        Usuario1 = gridView1.GetFocusedRowCellValue(colUSUARIO).ToString();
                    else
                        Usuario1 = null;

                    if (gridView1.GetFocusedRowCellValue(colUSUARIO2) != DBNull.Value)
                        Usuario2 = gridView1.GetFocusedRowCellValue(colUSUARIO2).ToString();
                    else
                        Usuario2 = null;

                    if (gridView1.GetFocusedRowCellValue(colUSUARIO3) != DBNull.Value)
                        Usuario3 = gridView1.GetFocusedRowCellValue(colUSUARIO3).ToString();
                    else
                        Usuario3 = null;

                    if (gridView1.GetFocusedRowCellValue(colPORCENTAJE1) != DBNull.Value)
                        Porcentaje1 = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colPORCENTAJE1));
                    else
                        Porcentaje1 = null;

                    if (gridView1.GetFocusedRowCellValue(colPORCENTAJE2) != DBNull.Value)
                        Porcentaje2 = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colPORCENTAJE2));
                    else
                        Porcentaje2 = null;

                    if (gridView1.GetFocusedRowCellValue(colPORCENTAJE3) != DBNull.Value)
                        Porcentaje3 = Convert.ToDecimal(gridView1.GetFocusedRowCellValue(colPORCENTAJE3));
                    else
                        Porcentaje3 = null;

                    vendedor = gridView1.GetFocusedRowCellValue(colVENDEDOR).ToString();

                    DatosGeneralesDevolucion();

                    DialogResult = DialogResult.OK;

                }
                else
                    GUI.CApp.ShowMessage("La cantidad disponible es insuficiente para efectuar la devolución", "Devoluciones", true);
            }
            else
            {
                GUI.CApp.ShowMessage("No ha ingresado una factura para la devolución", "Devoluciones", true);
                vgcGeneral.Focus();
            }

        }

        private void DatosGeneralesDevolucion()
        {
            if (rowFechaEntrega.Properties.Value != null && rowFechaEntrega.Properties.Value != DBNull.Value)
                entrega = Convert.ToDateTime(rowFechaEntrega.Properties.Value);
            else
                entrega = null;

            if (rowDireccion.Properties.Value != null && rowDireccion.Properties.Value != DBNull.Value)
                direccion = rowDireccion.Properties.Value.ToString();
            else
                direccion = null;

            if (rowRegion.PropertiesCollection[0].Value != null && rowRegion.PropertiesCollection[0].Value != DBNull.Value)
                region = Convert.ToDecimal(rowRegion.Properties.Value);
            else
                region = null;

            if (rowBodega.Properties.Value != null && rowBodega.Properties.Value != DBNull.Value)
                bodega = Convert.ToDecimal(rowBodega.Properties.Value);
            else
                bodega = null;

            if (rowBodega2.Properties.Value != null && rowBodega2.Properties.Value != DBNull.Value)
                bodega2 = Convert.ToDecimal(rowBodega2.Properties.Value);
            else
                bodega2 = null;

            if (rowMotivo.Properties.Value != null && rowMotivo.Properties.Value != DBNull.Value)
                motivoDevolucion = Convert.ToDecimal(rowMotivo.Properties.Value);
            else
                motivoDevolucion = null;

            // motivoDevolucion = Convert.ToDecimal(9);

        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("FindInvoice", "Búscar Facturas"))
            {
                MainForms.Finders.frmFindInvoice ffi = (MainForms.Finders.frmFindInvoice)GUI.CApp.CreateForm(typeof(MainForms.Finders.frmFindInvoice), true);
                if (ffi != null)
                {
                    if (ffi.DialogResult == DialogResult.OK)
                    {
                        rowFACTURA.PropertiesCollection[0].Value = ffi.Serie;
                        rowFACTURA.PropertiesCollection[1].Value = ffi.Factura;
                        getInvoiceData(rowFACTURA.PropertiesCollection[0].Value.ToString(), rowFACTURA.PropertiesCollection[1].Value.ToString());
                    }
                }
            }

        }

        private void dlgRefundInvoice_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers == Keys.Alt)
            {
                switch (e.KeyCode)
                {
                    case Keys.D:
                        if (vgcGeneral.Focused == true)
                        {
                            gridControl1.Focus();
                            gridView1.MoveFirst();
                        }
                        else
                            vgcGeneral.Focus();

                        break;
                }

            }

            switch (e.KeyCode)
            {
                case Keys.Escape:
                    btnCancelar_Click(null, null);
                    break;

                case Keys.F2:
                    btnBuscar_Click(null, null);
                    break;

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

                case Keys.F5:
                    btnPrecio_Click(null, null);
                    e.Handled = true;
                    break;

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

                case Keys.F12:
                    btnAceptar_Click(null, null);
                    break;
            }
        }

        #endregion

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

        private void btnRegion_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            MainForms.Finders.frmRegionGeografica rg = new MainForms.Finders.frmRegionGeografica();
            rg.ShowDialog(this);
            if (rg.DialogResult == DialogResult.OK)
            {
                rowRegion.PropertiesCollection[0].Value = rg.Clasificacion;
                rowRegion.PropertiesCollection[1].Value = rg.DescRegion;
            }
        }

        private void vgcGeneral_CellValueChanging(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e)
        {
        }

        private void vgcGeneral_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e)
        {
            switch (e.Row.Name)
            {
                case "rowTipoRecepcion":
                    if (Utils.Helpers.ObjToStr(e.Value) == "1")
                    {
                        rowDireccion.Enabled = false;
                        rowRegion.Enabled = false;

                        rowDireccion.Properties.Value = null;
                        rowRegion.PropertiesCollection[0].Value = null;
                        rowRegion.PropertiesCollection[1].Value = null;
                    }
                    else
                    {
                        rowDireccion.Enabled = true;
                        rowRegion.Enabled = true;
                    }
                    break;
                case "rowRegion":
                    if (e.Value != null && e.Value != DBNull.Value)
                    {
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("REGION", Utils.Helpers.Nvl(Utils.Helpers.NullIf(e.Value.ToString().Trim(), string.Empty), 0).ToString());
                        rowRegion.PropertiesCollection[1].Value = GUI.CApp.bll.GetSingleValue("ObtenerRegion", qp, "PDV");
                    }
                    else
                        rowRegion.PropertiesCollection[1].Value = null;

                    break;
            }
        }

        private void btnPrecio_Click(object sender, EventArgs e)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SKU_ALTERNO", Producto.ToUpper());

            if (gridView1.RowCount > 0)
                qp.AddReplaceParam("SOCIO", gridView1.GetFocusedRowCellValue(colSOCIO).ToString());
            else
            {
                if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Rows.Count == 0)
                    qp.AddReplaceParam("SOCIO", GUI.CApp.GetParam("NSCF").ToString());
                else
                    qp.AddReplaceParam("SOCIO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["SOCIO"].ToString());
            }

            object oPctImp = GUI.CApp.bll.GetSingleValue("GetTaxesByCode", qp, "PDV");

            if (oPctImp != null && oPctImp != DBNull.Value)
            {
                decimal vPctImp = Convert.ToDecimal(oPctImp);
                if (GUI.CApp.ValidateAccess("PrecioDevolucion", "Modificar Precio en Devoluciones"))
                {
                    frmAsignarPrecio ap = new frmAsignarPrecio();
                    if (gridView1.RowCount > 0)
                        ap.Init(new object[] { gridView1.GetFocusedRowCellValue(colPRECIO_FACTURA) });
                    else
                        ap.Init(new object[] { 0 });

                    ap.ShowDialog();

                    if (ap.DialogResult == DialogResult.OK)
                    {
                        precioModificado = ap.Precio.Value;
                        precioUnitario = ap.Precio.Value / (1 + (vPctImp / 100));
                        impuesto = ap.Precio.Value - precioUnitario;
                    }
                }
            }
            else
                GUI.CApp.ShowMessage("El producto no fue encontrado", "Devoluciones", true);
        }

        private void vgcGeneral_Click(object sender, EventArgs e)
        {

        }

        #region sbtnOtraTiend_Click
        private void sbtnOtraTiend_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("DevolETiendas", "Devoluciones entre tiendas"))
            {
                Dialogs.Refunds.dlgRefundInvoiceOT dlgot = new LLNet.Tienda.Dialogs.Refunds.dlgRefundInvoiceOT();
                if (dlgot != null)
                {
                    dlgot.Producto = this.producto;
                    dlgot.Cantidad = this.cantidad;

                    //dlgot.ValidaCombo();

                    if (!dlgot.isInvalid)
                    {
                        base.Hide();
                        dlgot.ShowDialog();

                        if (dlgot.DialogResult == DialogResult.Cancel)
                        {
                            btnCancelar_Click(null, null);
                            return;
                        }

                        DialogResult = DialogResult.OK;

                        if (dlgot.Documento == 0)
                            this.documento = 0;
                        else
                            this.documento = dlgot.Documento;

                        if (dlgot.Linea == 0)
                            this.linea = 0;
                        else
                            this.linea = dlgot.Linea;

                        this.precioUnitario = dlgot.PrecioUnitario;
                        this.impuesto = dlgot.Impuesto;
                        this.descuento = dlgot.Descuento;
                        this.vendedor = dlgot.Vendedor;
                        this.vale = dlgot.Vale;

                        this.entrega = dlgot.Entrega;
                        this.direccion = dlgot.Direccion;
                        this.region = dlgot.Region;
                        this.bodega = dlgot.Bodega;
                        this.bodega2 = dlgot.Bodega2;

                        this.usuario1 = dlgot.Usuario1;
                        this.usuario2 = dlgot.Usuario2;
                        this.usuario3 = dlgot.Usuario3;

                        this.porcentaje1 = dlgot.Porcentaje1;
                        this.porcentaje2 = dlgot.Porcentaje2;
                        this.porcentaje3 = dlgot.Porcentaje3;

                        this.motivoDevolucion = dlgot.MotivoDevolucion;
                    }
                }
            }
        }
        #endregion

        private void lbCaption_Click(object sender, EventArgs e)
        {

        }
    }
}