#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;
#endregion

namespace LLNet.Tienda.Dialogs.Refunds
{
    public partial class dlgRefundInvoiceOT : GUI.FormBases.frmBase
    {
        decimal documento = 0;
        public bool isInvalid;
        private string EsquemaC;

        #region Constructor
        public dlgRefundInvoiceOT()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }
        #endregion

        #region Init
        public override void Init(object[] pArgs)
        {
            base.Init(pArgs);
        }
        #endregion

        #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; }
        }

        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 txtFactura_KeyDown
        private void txtFactura_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
            {
                //Se obtiene el documento de la factura
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("SERIE", rowFACTURA.PropertiesCollection[0].Value.ToString());
                qp.AddReplaceParam("NO_DOCUMENTO", Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.ButtonEdit)sender).EditValue));

                this.documento = decimal.Parse(Utils.Helpers.Nvl(GUI.CApp.bll.GetSingleValue("WMS_F_DEVOLTIENDS_DOC", qp, "PDV"), "0").ToString());

                if(this.documento == 0)
                {
                    this.btnAceptar.Enabled = false;
                    CApp.ShowMessage(@"La factura no existe", "", true);
                }
                else
                {
                    this.btnAceptar.Enabled = true;
                    //getInvoiceData(Utils.Helpers.ObjToStr(rowFACTURA.PropertiesCollection[0].Value), Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.ButtonEdit)sender).EditValue));
                    e.Handled = true;
                    this.Focus();
                }
            }
        }
        #endregion

        #region dlgRefundInvoiceOT_Load
        private void dlgRefundInvoiceOT_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";

        }
        #endregion

        #region dlgRefundInvoiceOT_KeyDown
        private void dlgRefundInvoiceOT_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.F12:
                    if(this.btnAceptar.Enabled == true)
                        btnAceptar_Click(null, null);
                    break;
            }
        }
        #endregion

        #region btnAceptar_Click
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", documento.ToString());
            qp.AddReplaceParam("SKU_ALTERNO", producto);
            qp.AddReplaceParam("CANTIDAD", cantidad.ToString());

            if (Program.FrmMainPos != null && Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.Count > 0 && Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO != null)
                qp.AddReplaceParam("DOCUMENTOD", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            else
                qp.AddReplaceParam("DOCUMENTOD", "0");
            
            string result = Utils.Helpers.Nvl(GUI.CApp.bll.GetSingleValue("WMS_F_DEVOLTIENDS_CANTIDAD", qp, "PDV"), "").ToString();

            if (result == "")
                CApp.ShowMessage(@"El artículo no existe en la factura", "", true);
            else
            {
                if (result == "0")
                    CApp.ShowMessage(@"La cantidad a devolver, es mayor a la existente en la factura", "", true);
                else
                {
                    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;
                    DialogResult = DialogResult.OK;
                }
            }
        }
        #endregion

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