using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class frmSeries : LLNet.GUI.FormBases.frmBase
    {
        public frmSeries()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }

        private int cantidad;
        private object serie;
        private decimal documento;
        private decimal linea;
        private string situacionSku;
        private decimal? documentoPadre3;
        private decimal? lineaPadre3;
        private string EsquemaC;

        public override void Init(object[] pArgs)
        {
            EsquemaC = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("NDEC"));
            base.Init(pArgs);
            colSERIE.Caption = pArgs[0].ToString();
            cantidad = Convert.ToInt32(pArgs[1]);
            linea = Convert.ToDecimal(pArgs[2]);
            
            if (pArgs[4] != null && pArgs[4] != DBNull.Value)
                documentoPadre3 = Convert.ToDecimal(pArgs[4]);

            if (pArgs[5] != null && pArgs[5] != DBNull.Value)
                lineaPadre3 = Convert.ToDecimal(pArgs[5]);

            documento = Program.FrmMainPos.Order;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();

            qp.AddReplaceParam("DOCUMENTO", documento.ToString());
            qp.AddReplaceParam("LINEA", linea.ToString());

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

        private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            gridView1.SetFocusedRowCellValue(colDOCUMENTO, documento);
            gridView1.SetFocusedRowCellValue(colLINEA, linea);
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (gridView1.IsNewItemRow(gridView1.FocusedRowHandle) && Utils.Helpers.ObjToStr(gridView1.GetFocusedRowCellValue(colSERIE)) == string.Empty)
            {
                gridView1.CancelUpdateCurrentRow();
                gridView1.MoveFirst();
            }
            else
            {
                gridView1.PostEditor();
                gridView1.UpdateCurrentRow();
            }
            
            try
            {
                GUI.CApp.bll.updateDataSet(dsPDV1);
            }
            catch (Exception ex)
            {
                if (ex.Message.IndexOf("SEDO_UK01") > 0)
                {
                    GUI.CApp.ShowMessage("No puede repetir la serie en el pedido", "Series", true);
                }
                else
                    GUI.CApp.ShowMessage(ex.Message, "Series", true);
            }
            DialogResult = DialogResult.OK;
        }

        private void frmSeries_Load(object sender, EventArgs e)
        {
            gridControl1.Focus();
            gridView1.ShowEditor();
            SendKeys.Send("{TAB}");
        }

        private bool isDeleting;

        private void gridView1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            if (!isDeleting)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                if (e.Value != null && e.Value != DBNull.Value)
                {
                    if (gridView1.RowCount == Math.Abs(cantidad))
                    {
                        e.ErrorText = "Ya ha ingresado la cantidad maxima de series para esta línea";
                        e.Value = null;
                        e.Valid = false;
                    }
                    else
                    {
                        if (documentoPadre3 != null) // si es devolución con factura
                        {
                            qp.AddReplaceParam("DOCUMENTO", documentoPadre3.ToString());
                            qp.AddReplaceParam("LINEA", lineaPadre3.ToString());
                            qp.AddReplaceParam("SERIE", Utils.Helpers.ObjToStr(e.Value));

                            try
                            {
                                serie = GUI.CApp.bll.GetConnSingleValue("GetSerieLineaEntrega", qp, "PDV", EsquemaC);
                            }
                            catch (Exception ex)
                            {
                            }

                            if (Utils.Helpers.ObjToStr(serie) == string.Empty)
                            {
                                serie = GUI.CApp.bll.GetSingleValue("GetSerieLineaEntrega", qp, "PDV");
                            }

                            if (Utils.Helpers.ObjToStr(e.Value) != Utils.Helpers.ObjToStr(serie))
                            {
                                e.ErrorText = "El número de serie no es válido para la línea de la factura";
                                GUI.CApp.ShowMessage(e.ErrorText, "Series", true);
                                e.Valid = false;
                            }


                        }
                        else
                        {
                            string CPES = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("CPES"));
                            qp.AddReplaceParam("SERIE", Utils.Helpers.ObjToStr(e.Value));
                            qp.AddReplaceParam("CLASIFICACION", CPES);
                            qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());

                            if (CPES != string.Empty)
                            {
                                int cntSerie = Convert.ToInt32( GUI.CApp.bll.GetSingleValue("CntSeriesXClasificacion", qp, "PDV"));
                                if (cntSerie > 0)
                                {
                                    e.ErrorText = "El número de serie ya fue facturado";
                                    GUI.CApp.ShowMessage(e.ErrorText, "Series", true);
                                    e.Valid = false;
                                }
                                else
                                    e.Valid = true;
                            }
                            else                            
                                e.Valid = true;
                        }
                    }
                }
                else
                {
                    e.Valid = false;
                }
            }
            else
                e.Valid = true;

            isDeleting = false;
        }

        private void frmSeries_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            { 
                case Keys.F9:
                    btnEliminar_Click(null, null);
                    break;
                case Keys.F12:
                    //btnAceptar_Click(null, null);
                    btnAceptar.PerformClick();
                    break;
                case Keys.Escape:
                    btnCancelar_Click(null, null);
                    break;
            }
        }

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

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridView1.IsNewItemRow(gridView1.FocusedRowHandle) && Utils.Helpers.ObjToStr(gridView1.GetFocusedRowCellValue(colSERIE)) == string.Empty)
            {
                gridView1.CancelUpdateCurrentRow();
                gridView1.MoveFirst();
            }
            else
            {
                gridView1.PostEditor();
                gridView1.UpdateCurrentRow();
            }

            if (gridView1.RowCount > 0)
            {
                isDeleting = true;
                gridView1.CancelUpdateCurrentRow();
                gridView1.DeleteRow(gridView1.FocusedRowHandle);
            }
        }

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

        private void repositoryItemTextEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            e.Cancel = (!gridView1.IsNewItemRow(gridView1.FocusedRowHandle));            
        }
    }
}