using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using CrystalDecisions.CrystalReports.Engine;
using LLNet.GUI;

namespace LLNet.Tienda.MainForms.Forms.CierreConsol
{
    public partial class FrmFondosWU : Form
    {
        private Decimal IdFondos = 0;

        public FrmFondosWU()
        {
            InitializeComponent();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Program.CloseWindow(this);
        }

        private void btnAgregarFondo_Click(object sender, EventArgs e)
        {
            if (rowMONTO.Properties.Value != null)
            {//VALIDA QUE TENGA ALGUN VALOR
                string MONTO = rowMONTO.Properties.Value.ToString();
                MONTO = MONTO.Trim();
                decimal MONT = decimal.Parse(MONTO);
                if (MONT > 0)
                {//VALIDA Q EL MONTO SEA MAYOR A 0
                    Vgc.PostEditor();
                    Vgc.UpdateFocusedRecord();
                    Vgc.FocusFirst();

                    IdFondos = Convert.ToDecimal(GUI.CApp.GetSequence("WU_S_FONDOS_WS"));
                    //Almacena el fondo
                    QueryParams vParametros = new QueryParams();
                    vParametros.AddReplaceParam("pID", IdFondos.ToString());
                    vParametros.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
                    vParametros.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                    vParametros.AddReplaceParam("pMONTO", MONTO);
                    vParametros.AddReplaceParam("pCAJA", Program.Caja.ToString());
                    /*
                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != String.Empty)
                    {
                        vParametros.AddReplaceParam("pAUTORIZADO_POR", GUI.CApp.Sup);
                    }
                    else
                    {
                        vParametros.AddReplaceParam("pAUTORIZADO_POR", GUI.CApp.usuario);
                    }
                    */
                    GUI.CApp.bll.ExecuteSql("WU_P_AFONDOS", vParametros, "PDV");

                    ImpComprIFondo();
                    cargarFondos();
                }
            }
        }

        private void FrmFondosWU_Load(object sender, EventArgs e)
        {
            IdFondos = 0;
            cargarFondos();
            Vgc.FocusFirst();
        }

        private decimal FondoDisp ()
        {
            decimal fondo = 0;
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
          
            fondo = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("WU_FONDODISP", vParametros, "PDV"));

            return fondo;
        }

        private void cargarFondos()
        {
            gcFondos.DataSource = null;
            gcSFondos.DataSource = null;

            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
            //
            // Obtiene los fondos
            using (DataSet vfondos = GUI.CApp.bll.getDataSet("PDV", "WU_FONDOS", vParametros))
            {
                // Verifica que haya datos
                if (vfondos.Tables.Count > 0 && vfondos.Tables[0].Rows.Count > 0)
                {
                    gcFondos.DataSource = vfondos.Tables[0];
                }
            }
            // Obtiene las Salidas de Fondos Registrados
            using (DataSet vfondos = GUI.CApp.bll.getDataSet("PDV", "WU_SFONDOS", vParametros))
            {
                // Verifica que haya datos
                if (vfondos.Tables.Count > 0 && vfondos.Tables[0].Rows.Count > 0)
                {
                    gcSFondos.DataSource = vfondos.Tables[0];
                }
            }
            // Obtiene el monto deL fondo
            lblFondoActual.Text = "Fondo Disp : " + Convert.ToString(GUI.CApp.bll.GetSingleValue("WU_FONDODISP", vParametros, "PDV"));
        }

        private void EliminarFondo()
        {
            decimal MONT = 0;
            foreach (int handle in gridView1.GetSelectedRows())
            {
                MONT = Convert.ToDecimal(gridView1.GetRowCellValue(handle, colMONTO));
            }

            if (MONT > FondoDisp())
            {
                GUI.CApp.ShowMessage("No se puede anular el Ingreso de Fondo ya que no cuenta con el suficiente monto disponible", "Error al anular ingreso de fondo", true);
            }
            else
            {

                IdFondos = 0;

                foreach (int handle in gridView1.GetSelectedRows())
                {
                    IdFondos = Convert.ToDecimal(gridView1.GetRowCellValue(handle, colIDFONDO));
                }

                if (IdFondos != 0)
                {
                    if (GUI.CApp.ValidateAccess("EliFondoWU", "Elimina Fondo WU"))
                    {

                        if (GUI.CApp.ShowMessage("Desea anular el Fondo #" + IdFondos + " ?", "Eliminar Fondo", true, true) == DialogResult.OK)
                        {

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

                            Utils.QueryParams qp = new QueryParams();
                            qp.AddReplaceParam("pID", IdFondos.ToString());
                            qp.AddReplaceParam("pUSUARIO", supervisor);
                            GUI.CApp.bll.ExecuteSql("WU_P_EFONDOS", qp, "PDV");

                            FrmFondosWU_Load(null, null);
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                else
                {
                    GUI.CApp.ShowMessage("Seleccione un Fondo a Eliminar", "Error al Eliminar Fondo", true);
                    return;
                }
            }
        }

        private void EliminarSFondo()
        {
            IdFondos = 0;

            foreach (int handle in gridView2.GetSelectedRows())
            {
                IdFondos = Convert.ToDecimal(gridView2.GetRowCellValue(handle, colIDFONDO));
            }

            if (IdFondos != 0)
            {
                if (GUI.CApp.ValidateAccess("EliFondoWU", "Elimina Fondo WU"))
                {

                    if (GUI.CApp.ShowMessage("Desea anular la salida del Fondo #" + IdFondos + " ?", "Eliminar Salida de Fondo", true, true) == DialogResult.OK)
                    {

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

                        Utils.QueryParams qp = new QueryParams();
                        qp.AddReplaceParam("pID", IdFondos.ToString());
                        qp.AddReplaceParam("pUSUARIO", supervisor);
                        GUI.CApp.bll.ExecuteSql("WU_P_ESFONDOS", qp, "PDV");

                        FrmFondosWU_Load(null, null);
                    }
                    else
                    {
                        return;
                    }
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Seleccione la Salida del Fondo a Eliminar", "Error al Eliminar Salida de Fondo", true);
                return;
            }
        }

        #region Imprimir Comprobantes
        /// <summary>
        /// Obtiene los datos para el comprobante de Ingresos
        /// </summary>
        private void ImpComprIFondo()
        {
            ReportDocument vReporte = new ReportDocument();
            vReporte.Load(GUI.CApp.ExeDir + "CR_FondosWU.rpt");
            //
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pIDFondo", IdFondos.ToString());            
            //
            DataSet vDatos = new DataSet();
            vDatos = GUI.CApp.bll.getDataSet("PDV", "WU_FONDO", vParametros);

            if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
            {
                vReporte.Database.Tables[0].SetDataSource(vDatos.Tables[0]);
                vReporte.Refresh();
                FrmReporte vForm = new FrmReporte(vReporte);
                vForm.ShowDialog();
            }
            else
            {
                CApp.ShowMessage("No hay datos del fondo " + IdFondos + " para imprimir", "FondosWU", true);
            }
        }

        private void ImpComprSFondo()
        {
            ReportDocument vReporte = new ReportDocument();
            vReporte.Load(GUI.CApp.ExeDir + "CR_SFondosWU.rpt");
            //
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pIDFondo", IdFondos.ToString());
            //
            DataSet vDatos = new DataSet();
            vDatos = GUI.CApp.bll.getDataSet("PDV", "WU_SFONDO", vParametros);

            if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
            {
                vReporte.Database.Tables[0].SetDataSource(vDatos.Tables[0]);
                vReporte.Refresh();
                FrmReporte vForm = new FrmReporte(vReporte);
                vForm.ShowDialog();
            }
            else
            {
                CApp.ShowMessage("No hay datos de la salida del fondo " + IdFondos + " para imprimir", "FondosWU", true);
            }
        }

        #endregion

        private void sbtnReimpFonds_Click(object sender, EventArgs e)
        {
            IdFondos = 0;

            foreach (int handle in gridView1.GetSelectedRows())
            {
                IdFondos = Convert.ToDecimal(gridView1.GetRowCellValue(handle, colIDFONDO));
            }

            if (IdFondos != 0)
            {
                if (GUI.CApp.ShowMessage("Desea Re-Imprimir el Comprobante del Fondo #" + IdFondos + " ?", "Re-Imprimir Comprobantes", true, true) == DialogResult.OK)
                {
                    ImpComprIFondo();
                }
                else
                {
                    return;
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Seleccione un Fondo a Re-Imprimir", "Error al Imprimir Comprobante", true);
                return;
            }
        }

        private void FrmFondosWU_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Escape:
                    btnCancelar_Click(null, null);
                    break;
                case Keys.F3:
                    EliminarSFondo();
                    break;
                case Keys.F4:
                    EliminarFondo();
                    break;                
                case Keys.F10:
                    sBtnSalidaFond(null, null);
                    break;
                case Keys.F11:
                    btnAgregarFondo_Click(null, null);
                    break;                
            }
        }

        private void sBtnSalidaFond(object sender, EventArgs e)
        {
            if (RowMontoS.Properties.Value != null)
            {//VALIDA QUE TENGA ALGUN VALOR
                string MONTO = RowMontoS.Properties.Value.ToString();
                MONTO = MONTO.Trim();
                decimal MONT = decimal.Parse(MONTO);
                if (MONT > 0)
                {//VALIDA Q EL MONTO SEA MAYOR A 0

                    if (MONT > FondoDisp())
                    {
                        GUI.CApp.ShowMessage("La salida no puede ser mayor al saldo disponible", "Error al realizar salida de fondo", true);
                    }
                    else
                    {
                        Vgc.PostEditor();
                        Vgc.UpdateFocusedRecord();
                        Vgc.FocusFirst();

                        IdFondos = Convert.ToDecimal(GUI.CApp.GetSequence("WU_S_FONDOS_WS"));
                        //Almacena el fondo
                        QueryParams vParametros = new QueryParams();
                        vParametros.AddReplaceParam("pID", IdFondos.ToString());
                        vParametros.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
                        vParametros.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                        vParametros.AddReplaceParam("pMONTO", MONTO);
                        vParametros.AddReplaceParam("pCAJA", Program.Caja.ToString());
                        GUI.CApp.bll.ExecuteSql("WU_P_ASFONDOS", vParametros, "PDV");

                        ImpComprSFondo();
                        cargarFondos();
                    }
                }
            }
        }

        private void sbtnReimpS_Click(object sender, EventArgs e)
        {
            IdFondos = 0;

            foreach (int handle in gridView2.GetSelectedRows())
            {
                IdFondos = Convert.ToDecimal(gridView2.GetRowCellValue(handle, ColIdFondoS));
            }

            if (IdFondos != 0)
            {
                if (GUI.CApp.ShowMessage("Desea Re-Imprimir el Comprobante del Fondo #" + IdFondos + " ?", "Re-Imprimir Comprobantes", true, true) == DialogResult.OK)
                {
                    ImpComprSFondo();
                }
                else
                {
                    return;
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Seleccione un Fondo a Re-Imprimir", "Error al Imprimir Comprobante", true);
                return;
            }
        }

       


    }
}
