using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using LLNet.GUI;
using System.Text.RegularExpressions;
using LLNet.Utils;
using System.Reflection;

using System.Data.OracleClient;
using System.Globalization;

namespace LLNet.Tienda.MainForms.Forms.MisPuntos
{
    public partial class frmGestionCbb : Form
    {
        public static String _idListaClubBebe = String.Empty;

        public String _cedula = String.Empty;
        public String _cedulaSinComillas = String.Empty;
        public String _idLista = String.Empty;

        public String _bebe = String.Empty;
        public String _genero = String.Empty;
        public String _mama = String.Empty;
        public String _cedmama = String.Empty;
        public String _papa = String.Empty;
        public String _cedpapa = String.Empty;
        public String _fechaGestacion = String.Empty;

        public String _queryDinamico = String.Empty;

        public int _modoDeComportamiento = -1;

        public static List<String> listaSkus = new List<String>();
        public static List<String> listaSkusCant = new List<String>();

        public static String _reportesUsuarioFinal = String.Empty;

        public frmGestionCbb(String cedula, String bebe, String genero, String mama, String cedmama, String papa
            , String cedpapa, String fechaGestacion, int modoDeComportamiento)
        {
            InitializeComponent();

            _cedula = cedula;
            _cedulaSinComillas = cedula;

            _modoDeComportamiento = modoDeComportamiento;
            _bebe = PonerComillaSimpleAString(bebe);

            if (Validate(genero))
            {
                if (genero.Trim().Equals("HOMBRE"))
                {
                    genero = "M";
                }
                else
                {
                    genero = "F";
                }
                _genero = PonerComillaSimpleAString(genero);
            }
            else
            {
                _genero = PonerComillaSimpleAString(genero);
            }

            _mama = PonerComillaSimpleAString(mama);


            _cedmama = PonerComillaSimpleAString(cedmama);


            _papa = PonerComillaSimpleAString(papa);


            _cedpapa = PonerComillaSimpleAString(cedpapa);

            _cedula = PonerComillaSimpleAString(cedula);

            _fechaGestacion = PonerComillaSimpleAString(fechaGestacion);
            _fechaGestacion = "TO_DATE(" + _fechaGestacion + ", 'yyyy/mm/dd')";




        }
        public static Boolean Validate(String value) { if (value != String.Empty && value != null && value != "")return true; else return false; }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        public String PonerComillaSimpleAString(String _value)
        {
            return _value = "'" + _value + "'";
        }

        private void frmGestionCbb_Load(object sender, EventArgs e)
        {
            if (_modoDeComportamiento == 1)
            {
                btnVerListaEspecifica.Text = "Seleccionar";
                if (Validate(_cedmama)) { _cedmama = PonerComillaSimpleAString(_cedmama); }
                if (Validate(_cedpapa)) { _cedpapa = PonerComillaSimpleAString(_cedpapa); }

                if (Validate(_bebe) || Validate(_genero) || Validate(_mama)
                || Validate(_cedmama) || Validate(_papa) || Validate(_cedpapa) || Validate(_fechaGestacion))
                {

                    _queryDinamico = "SELECT N_ID_LISTA_DESEO \"Id\",C_CEDULA as \"Cedula Afiliado\",C_NOMBRE_LISTA as \"Bebé\",C_NOMBRE_MAMA as \"Mamá\",C_CEDULA_MAMA as \"Cedula Mamá\",D_FECHA_GESTACION as \"Gestación\" FROM CBB_LISTAS_DESEO WHERE C_ESTADO='A' AND C_NOMBRE_LISTA = " + _bebe + " AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR D_FECHA_GESTACION = " + _fechaGestacion + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR  C_SEXO_BEBE = " + _genero + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR C_NOMBRE_MAMA = " + _mama + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR C_CEDULA_MAMA = " + _cedmama + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR C_NOMBRE_PAPA = " + _papa + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR C_CEDULA_PAPA = " + _cedpapa + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9) OR C_CEDULA = " + _cedula + " AND C_ESTADO='A' AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9)";

                    Onload(true, _queryDinamico);
                }
            }
            else if (_modoDeComportamiento == 0)
            {
                Onload(true, null);
            }


        }

        public void Onload(Boolean cargaInicial, String queryDinamico)
        {
            panelEditarLista.Visible = false;
            string queryString = String.Empty;
            DataTable dttListas = new DataTable();
            //if (cargaInicial)
            //{
            //    _cedula = "'" + _cedula + "'";
            //}
            if (!Validate(queryDinamico))
            {
                queryString = "SELECT N_ID_LISTA_DESEO \"Id\",C_CEDULA as \"Cedula Afiliado\",C_NOMBRE_LISTA as \"Bebé\",C_NOMBRE_MAMA as \"Mamá\",C_CEDULA_MAMA as \"Cedula Mamá\",D_FECHA_GESTACION as \"Gestación\" FROM CBB_LISTAS_DESEO WHERE C_CEDULA = " + _cedula + " AND D_FECHA_INICIO_LISTA <= ADD_MONTHS(D_FECHA_INICIO_LISTA,9)";
            }
            else
            {
                queryString = queryDinamico;
            }


            string connectionString = GUI.CApp.bll.ConnectionString;



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();

                command.CommandText = queryString;



                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    //dtgv_listasClubBebe.DataSource = dataTable;
                    dtg_listasCBB.DataSource = dataTable;
                    command.Dispose();
                    if (dataTable.Rows.Count == 0)
                    {
                        CApp.ShowMessage("No existen listas de regalo activas para elegir", "Club del Bebé", true);
                        this.Close();
                    }

                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                }
            }
        }

        private void btnVerListaEspecifica_Click(object sender, EventArgs e)
        {
            try
            {
                if (_modoDeComportamiento == 0)
                {
                    // Enter key pressed
                    panelListas.Visible = false;
                    btnVerListaEspecifica.Visible = false;
                    panelEditarLista.Visible = true;
                    _idLista = gridView1.GetFocusedRowCellValue("Id").ToString();
                    LlenarFormularioEditarListaCBB();

                }
                else
                {
                    if (Validate(gridView1.GetFocusedRowCellValue("Id").ToString()))
                    {

                        _idListaClubBebe = gridView1.GetFocusedRowCellValue("Id").ToString();
                        if (Validate(_idListaClubBebe))
                        {
                            CApp.ShowMessage("Lista asociada exitosamente a su pedido", "Club del Bebé", true);

                        }
                        else
                        {
                            CApp.ShowMessage("Lista no asociada", "Club del Bebé", true);

                        }
                        this.Close();

                    }
                }
            }
            catch (Exception ex)
            {

                CApp.ShowMessage(ex.Message, "Club del Bebé", true);
            }

        }


        private void dtg_listasCBB_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (e.KeyChar == (char)13 && _modoDeComportamiento == 0)
                {
                    // Enter key pressed
                    panelListas.Visible = false;
                    btnVerListaEspecifica.Visible = false;
                    panelEditarLista.Visible = true;
                    _idLista = gridView1.GetFocusedRowCellValue("Id").ToString();
                    LlenarFormularioEditarListaCBB();

                }
                else
                {
                    if (Validate(gridView1.GetFocusedRowCellValue("Id").ToString()))
                    {

                        _idListaClubBebe = gridView1.GetFocusedRowCellValue("Id").ToString();
                        if (Validate(_idListaClubBebe))
                        {
                            CApp.ShowMessage("Lista asociada exitosamente a su pedido", "Club del Bebé", true);

                        }
                        else
                        {
                            CApp.ShowMessage("Lista no asociada", "Club del Bebé", true);

                        }
                        this.Close();

                    }
                }
            }
            catch (Exception ex)
            {

                CApp.ShowMessage(ex.Message, "Club del Bebé", true);
            }


        }

        private void LlenarFormularioEditarListaCBB()
        {
            string queryString = "SELECT * FROM CBB_LISTAS_DESEO WHERE C_CEDULA = " + _cedula + " AND N_ID_LISTA_DESEO = " + _idLista + "";
            string connectionString = GUI.CApp.bll.ConnectionString;



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();
                command.CommandText = queryString;

                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    command.Dispose();

                    foreach (DataRow row in dataTable.Rows)
                    {


                        txt_nombreBebeEditar.Text = row.ItemArray[2].ToString();
                        if (row.ItemArray[7].ToString().Equals("M"))
                        {
                            cbxMGeneroEditar.Text = "HOMBRE";
                        }
                        else
                        {
                            cbxMGeneroEditar.Text = "MUJER";
                        }
                        txt_nombreMamaEditar.Text = row.ItemArray[8].ToString();
                        txt_CedulaMamaEditar.Text = row.ItemArray[9].ToString();
                        txt_NombrePapaEditar.Text = row.ItemArray[10].ToString();
                        txt_CedulaPapaEditar.Text = row.ItemArray[11].ToString();
                        dtp_FechaGestacionEditar.Value = DateTime.Parse(row.ItemArray[6].ToString());





                    }





                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                }
            }
        }

        private void btnActDatos_ListaCbb_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_CedulaMamaEditar.Text != "" && txt_nombreMamaEditar.Text != ""
                    && txt_nombreBebeEditar.Text != "")
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                    qp.AddReplaceParam("P_N_ID_LISTA_DESEO", _idLista);
                    qp.AddReplaceParam("P_C_CEDULA", _cedulaSinComillas);
                    qp.AddReplaceParam("P_C_NOMBRE_LISTA", txt_nombreBebeEditar.Text);

                    qp.AddReplaceParam("P_D_FECHA_GESTACION", dtp_FechaGestacionEditar.Value.ToString("yyyy/MM/dd"));


                    if (cbxMGeneroEditar.Text.Equals("HOMBRE"))
                    {
                        qp.AddReplaceParam("P_C_SEXO_BEBE", "M");
                    }
                    else
                    {
                        qp.AddReplaceParam("P_C_SEXO_BEBE", "F");
                    }

                    qp.AddReplaceParam("P_C_NOMBRE_MAMA", txt_nombreMamaEditar.Text);

                    qp.AddReplaceParam("P_C_CEDULA_MAMA", txt_CedulaMamaEditar.Text);
                    qp.AddReplaceParam("P_C_NOMBRE_PAPA", txt_NombrePapaEditar.Text);
                    qp.AddReplaceParam("P_C_CEDULA_PAPA", txt_CedulaPapaEditar.Text);



                    GUI.CApp.bll.ExecuteSql("cbb_A_LISTA_DESEO", qp, "PDV");
                    CApp.ShowMessage("Lista actualizada exitosamente", "Actualización - Club del Bebé", true);
                    Onload(false, null);
                    panelListas.Visible = true;
                    btnVerListaEspecifica.Visible = true;
                }
                else
                {
                    if (txt_CedulaMamaEditar.Text == "")
                    {
                        CApp.ShowMessage("El campo cedula mamá no puede quedar vacio", "Actualización - Club del Bebé", true);
                    }
                    if (txt_nombreMamaEditar.Text == "")
                    {
                        CApp.ShowMessage("El campo mamá no puede quedar vacio", "Actualización - Club del Bebé", true);
                    }
                    if (txt_nombreBebeEditar.Text == "")
                    {
                        CApp.ShowMessage("El campo Bebé no puede quedar vacio", "Actualización - Club del Bebé", true);
                    }
                }

            }
            catch (Exception ex)
            {


            }
        }
        public String FechaServer()
        {


            return GUI.CApp.bll.GetSingleValue("pos_F_CG_F_SYSDATE", "PDV").ToString();

        }

        private void btn_CancelarEditarListaCBB_Click(object sender, EventArgs e)
        {
            try
            {
                panelEditarLista.Visible = false;
                panelListas.Visible = true;
                btnVerListaEspecifica.Visible = true;
            }
            catch (Exception)
            {


            }
        }

        private void panelEditarLista_Paint(object sender, PaintEventArgs e)
        {

        }

        public static String ObtenerTarjetaValida(String tarjetaClubBebe)
        {
            tarjetaClubBebe = "'" + tarjetaClubBebe + "'";
            string queryString = "SELECT wmscpts.TARJETA FROM WMS_CLIENTES_PTS wmscpts INNER JOIN CBB_FIDELIZA_CLIENTE cbbfc on  wmscpts.CEDULA = cbbfc.C_CEDULA WHERE  cbbfc.C_TARJETA = " + tarjetaClubBebe + "";
            string connectionString = GUI.CApp.bll.ConnectionString;
            string tarjetaValida = "";



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();
                command.CommandText = queryString;

                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    command.Dispose();

                    foreach (DataRow row in dataTable.Rows)
                    {

                        tarjetaValida = row.ItemArray[0].ToString();


                    }





                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                    return tarjetaValida;
                }
            }

            return tarjetaValida;
        }

        public static String Obtener_SKU_ALTERNO(String SKU)
        {
            SKU = "'" + SKU + "'";
            string queryString = "SELECT SKU_ALTERNO FROM WMS_SKUS WHERE SKU = " + SKU + "";
            string connectionString = GUI.CApp.bll.ConnectionString;
            string SKU_ALTERNO = "";



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();
                command.CommandText = queryString;

                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    command.Dispose();

                    foreach (DataRow row in dataTable.Rows)
                    {

                        SKU_ALTERNO = row.ItemArray[0].ToString();


                    }





                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                    return SKU_ALTERNO;
                }
            }

            return SKU_ALTERNO;
        }

        public static String DocumentoFacturado(String DOCUMENTO)
        {
            DOCUMENTO = "'" + DOCUMENTO + "'";
            string queryString = "SELECT COUNT(DOCUMENTO) FROM WMS_DOCUMENTOS WHERE TIPO_DOCUMENTO = 'F' AND DOCUMENTO = " + DOCUMENTO + " ";
            string connectionString = GUI.CApp.bll.ConnectionString;
            string esFactura = "";



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();
                command.CommandText = queryString;

                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    command.Dispose();

                    foreach (DataRow row in dataTable.Rows)
                    {

                        esFactura = row.ItemArray[0].ToString();


                    }





                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                    return esFactura;
                }
            }

            return esFactura;
        }

        public static List<String> DescontarArticulosCBB(List<String> listaSkus, String DOCUMENTO, List<String> listaSkusCant, String idListaDeseo, String registradopor)
        {
            int contDinamico = 0;
            List<String> SKUS_ERROR = new List<String>();
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
        Continuar:
            try
            {


                for (int i = contDinamico; i < listaSkus.Count; i++)
                {
                    qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("P_C_SKU_ALTERNO", listaSkus[i]);
                    qp.AddReplaceParam("P_N_DOCUMENTO", DOCUMENTO);
                    qp.AddReplaceParam("P_N_CANT_ARTICULO_COMPRA", listaSkusCant[i]);

                    qp.AddReplaceParam("P_N_ID_LISTA_DESEO", idListaDeseo);


                    qp.AddReplaceParam("P_C_REGISTRADO_POR", registradopor);

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

                }

            }
            catch (Exception ex)
            {
                SKUS_ERROR.Add(listaSkus[contDinamico]);
                contDinamico = contDinamico + 1;
                goto Continuar;

            }

            return SKUS_ERROR;
        }

        private void btn_verReporteLista_Click(object sender, EventArgs e)
        {
            if (frmGestionCbb.Validate(gridView1.GetFocusedRowCellValue("Id").ToString()))
            {
                _idLista = gridView1.GetFocusedRowCellValue("Id").ToString();
                frmReporteCBB frrcbb = new frmReporteCBB(_idLista, gridView1.GetFocusedRowCellValue("Bebé").ToString());
                frrcbb.Show();
            }
        }

        public static String NumeroFacturaCBB()
        {

            string queryString = "SELECT CBB_S_FAC.NextVal from dual";
            string connectionString = GUI.CApp.bll.ConnectionString;
            string numeroFactura = "";



            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                OracleCommand command = connection.CreateCommand();
                command.CommandText = queryString;

                try
                {
                    connection.Open();

                    OracleDataReader reader = command.ExecuteReader();
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    reader.Close();
                    connection.Close();
                    command.Dispose();

                    foreach (DataRow row in dataTable.Rows)
                    {

                        numeroFactura = "CBB" + row.ItemArray[0].ToString();


                    }
                }
                catch (Exception ex)
                {
                    command.Dispose();
                    connection.Close();
                    Console.WriteLine(ex.Message);
                    return numeroFactura;
                }
            }

            return numeroFactura;
        }

        public static Boolean AnularFacturaCBB(String DOCUMENTO, String USUARIO)
        {
            try
            {
                if (frmGestionCbb.Validate(DOCUMENTO))
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                    qp.AddReplaceParam("P_N_DOCUMENTO", DOCUMENTO);
                    qp.AddReplaceParam("P_C_REGISTRADO_POR", USUARIO);


                    GUI.CApp.bll.ExecuteSql("cbb_A_ANULA_DOCUMENTO", qp, "PDV");
                    return true;

                }

            }
            catch (Exception ex)
            {
                CApp.ShowMessage("Ocurrio un error al anular la factura en Club Bebé, favor contactar al administrador", "Anulación de Documentos Club Bebé", true);

            }
            return false;
        }

        //NOTA*
        public static Boolean TarjetaCBBActiva(String _cedula)
        {
            int Codrespuesta = -2;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp = new QueryParams();
            qp.AddReplaceParam("P_C_CEDULA", _cedula);

            Codrespuesta = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("cbb_VALIDA_VIGENCIA_TARJECBB", qp, "PDV"));

            if (Codrespuesta == 1)
            {

                return true;
            }
            else
            {
                return false;

            }
        }

    }
}
