using Exferia_Sincronizacion._0_Conexion;
using Exferia_Sincronizacion._0_Modelos;
using Exferia_Sincronizacion._0_Modelos.GEN;
using Exferia_Sincronizacion._0_Modelos.HPV;
using Exferia_Sincronizacion._0_Modelos.MAE;
using Exferia_Sincronizacion._0_Modelos.MYT;
using Exferia_Sincronizacion._0_Modelos.SNC;
using Exferia_Sincronizacion.Datos.GEN;
using Exferia_Sincronizacion.Datos.HPV;
using Exferia_Sincronizacion.Datos.SNC;
using Exferia_Sincronizacion.General;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Sincronizacion
{
    public class Sincronizacion
    {
        #region Inicial
        public static List<object> Inicial( string _str_Conexion_Servidor,
                                            string _str_Conexion_BaseDatos,
                                            string _str_Conexion_Usuario,
                                            string _str_Conexion_Clave,
                                            DbConnection _obj_DbConnection,
                                            DbTransaction _obj_DbTransaction,
                                            long _lng_idTerminal,
                                            List<long> _lst_idProductos)
        {

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Conexion y trasaccion
            DbConnection obj_DbConnection = _obj_DbConnection;
            DbTransaction obj_DbTransaction = _obj_DbTransaction;

            try
            {
                if (obj_DbConnection == null)
                {
                    Variables_Sincronizacion.g_str_Conexion_Servidor = _str_Conexion_Servidor;
                    Variables_Sincronizacion.g_str_Conexion_BaseDatos = _str_Conexion_BaseDatos;
                    Variables_Sincronizacion.g_str_Conexion_Usuario = _str_Conexion_Usuario;
                    Variables_Sincronizacion.g_str_Conexion_Clave = _str_Conexion_Clave;

                    //Crear Conexion
                    obj_DbConnection = Conexion.Crear_Conexion();
                }


                foreach (long lng_idProducto in _lst_idProductos)
                {
                    //HOTELPUNTOVENTA
                    if (Variables_Sincronizacion.G_LNG_IDPRODUCTO_HOTELPUNTOVENTA == lng_idProducto)
                    {
                        //Se busca el Terminal
                        HPV_Terminales_Modelo mdl_HPV_Terminales_Modelo = HPV_Terminales_Sincronizacion.Obtener_Registro(obj_DbConnection, obj_DbTransaction, _lng_idTerminal);
                        if (mdl_HPV_Terminales_Modelo != null)
                        {
                            #region Desasignar todo
                            SNC_SincronizacionRegistros_Datos.Desasignar(obj_DbConnection,
                                                                        obj_DbTransaction,
                                                                         lng_idProducto,
                                                                         _lng_idTerminal);
                            #endregion

                            #region HPV_Terminales
                            HPV_Terminales_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                obj_DbTransaction,
                                                                                lng_idProducto,
                                                                                mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                mdl_HPV_Terminales_Modelo.id,
                                                                                mdl_HPV_Terminales_Modelo.idPerfil);
                            #endregion

                            #region GEN_Empresas
                            GEN_Empresas_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                            obj_DbTransaction,
                                                                            lng_idProducto,
                                                                            mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                            _lng_idTerminal);
                           
                            #endregion

                            #region HPV_Camareros
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPV_Camareros_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                obj_DbTransaction,
                                                                                 lng_idProducto,
                                                                                 mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                 mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region HPV_Clientes
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPV_Clientes_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                obj_DbTransaction,
                                                                                 lng_idProducto,
                                                                                 mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                 mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region HPV_AgrupacionesClientesCabeceras
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPV_AgrupacionesClientesCabeceras_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                                    obj_DbTransaction,
                                                                                                     lng_idProducto,
                                                                                                     mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                                     mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region MAE_TiposGastos
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                MAE_TiposGastos_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                    obj_DbTransaction,
                                                                                    lng_idProducto,
                                                                                    mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                    mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region MAE_TiposPagos
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                MAE_TiposPagos_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                    obj_DbTransaction,
                                                                                    lng_idProducto,
                                                                                    mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                    mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region HPV_Tarifas
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPV_Tarifas_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                    obj_DbTransaction,
                                                                                    lng_idProducto,
                                                                                    mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                    mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region HPVS_Liquidaciones
                            string str_GUID = "";
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                str_GUID=HPVS_Liquidaciones_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                            obj_DbTransaction,
                                                                                            lng_idProducto,
                                                                                            mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                            mdl_HPV_Terminales_Modelo.id);

                            }
                            #endregion

                            #region HPVS_Gastos
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPVS_Gastos_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                obj_DbTransaction,
                                                                                lng_idProducto,
                                                                                mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                mdl_HPV_Terminales_Modelo.id,
                                                                                str_GUID);

                            }
                            #endregion

                            #region HPVS_Tickets_Cabecera
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                HPVS_Tickets_Cabecera_Sincronizacion.Sincronizar_Inicial(obj_DbConnection,
                                                                                        obj_DbTransaction,
                                                                                        lng_idProducto,
                                                                                        mdl_HPV_Terminales_Modelo.idEmpresa,
                                                                                        mdl_HPV_Terminales_Modelo.id,
                                                                                        str_GUID);

                            }
                            #endregion
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                Control_Errores.Errores_Log("", ex, nameof(Sincronizacion) + "/" + nameof(Inicial));
            }
            finally
            {
                if (_obj_DbConnection == null)
                {
                    //Termino la Transaccion
                    if (obj_DbTransaction != null)
                    {
                        obj_DbTransaction.Commit();
                    }

                    if (obj_DbConnection != null && obj_DbConnection.State == ConnectionState.Open)
                    {
                        obj_DbConnection.Close();
                    }
                }
            }

            //Agregar regsitros a devolver
            List<object> lst_ValoresDevueltos = new List<object>();
            lst_ValoresDevueltos.Add(mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto);
            lst_ValoresDevueltos.Add(mdl_INTERNO_ValorDevuelto_Modelo.Mensaje);

            return lst_ValoresDevueltos;
        }

        #endregion

        public static INTERNO_ValorDevuelto_Modelo Registro_Individual_Actualizar(  string _str_Conexion_Servidor,
                                                                                    string _str_Conexion_BaseDatos,
                                                                                    string _str_Conexion_Usuario,
                                                                                    string _str_Conexion_Clave,
                                                                                    DbConnection _obj_DbConnection,
                                                                                    DbTransaction _obj_DbTransaction,
                                                                                    long _lng_idEmpresa,
                                                                                    List<object> _lst_CamposRegistro,
                                                                                    string _str_Tabla,
                                                                                    List<long> _lst_idProductos
                                                                                    )
        {
            //Conexion y trasaccion
            DbConnection obj_DbConnection = _obj_DbConnection;
            DbTransaction obj_DbTransaction = _obj_DbTransaction;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                if (obj_DbConnection==null)
                {
                    Variables_Sincronizacion.g_str_Conexion_Servidor = _str_Conexion_Servidor;
                    Variables_Sincronizacion.g_str_Conexion_BaseDatos = _str_Conexion_BaseDatos;
                    Variables_Sincronizacion.g_str_Conexion_Usuario = _str_Conexion_Usuario;
                    Variables_Sincronizacion.g_str_Conexion_Clave = _str_Conexion_Clave;

                    //Crear Conexion
                    obj_DbConnection = Conexion.Crear_Conexion();

                }

                //Obtener listado de productos activos
                if (_lst_idProductos != null &&
                    _lst_idProductos.Count > 0)
                {
                    foreach (long lng_idProducto in _lst_idProductos)
                    {
                        //Productos que pueden sincronizar datos
                        if (Variables_Sincronizacion.G_LNG_IDPRODUCTO_HOTELPUNTOVENTA.Equals(lng_idProducto))
                        {
                            
                            //GEN_Empresas
                            if (_str_Tabla.Equals(GEN_Empresas_Modelo.Tabla))
                            {
                                GEN_Empresas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //GEN_Direcciones
                            else if (_str_Tabla.Equals(GEN_Direcciones_Modelo.Tabla))
                            {
                                long? lng_idCliente = null;
                                if (_lst_CamposRegistro[1] != null)
                                {
                                    lng_idCliente = long.Parse(_lst_CamposRegistro[1].ToString());
                                }
                                long? lng_idProveedor = null;
                                if (_lst_CamposRegistro[2] != null)
                                {
                                    lng_idProveedor = long.Parse(_lst_CamposRegistro[2].ToString());
                                }

                                long? lng_idEmpleado = null;
                                if (_lst_CamposRegistro[3] != null)
                                {
                                    lng_idEmpleado = long.Parse(_lst_CamposRegistro[3].ToString());
                                }

                                long? lng_idSocio = null;
                                if (_lst_CamposRegistro[4] != null)
                                {
                                    lng_idSocio = long.Parse(_lst_CamposRegistro[4].ToString());
                                }

                                long? lng_idEmpresa_Filtro = null;
                                if (_lst_CamposRegistro[5] != null)
                                {
                                    lng_idEmpresa_Filtro = long.Parse(_lst_CamposRegistro[5].ToString());
                                }

                                long? lng_idOrganismoCertificador = null;
                                if (_lst_CamposRegistro[6] != null)
                                {
                                    lng_idOrganismoCertificador = long.Parse(_lst_CamposRegistro[6].ToString());
                                }

                                long? lng_idEmpresaInstaladora = null;
                                if (_lst_CamposRegistro[7] != null)
                                {
                                    lng_idEmpresaInstaladora = long.Parse(_lst_CamposRegistro[7].ToString());
                                }

                                long? lng_idCliente_HPV = null;
                                if (_lst_CamposRegistro[8] != null)
                                {
                                    lng_idCliente_HPV = long.Parse(_lst_CamposRegistro[8].ToString());
                                }

                                long lng_idPais = long.Parse(_lst_CamposRegistro[9].ToString());

                                long lng_idProvincia = long.Parse(_lst_CamposRegistro[10].ToString());

                                long? lng_idMunicipio = null;
                                if (_lst_CamposRegistro[11] != null)
                                {
                                    lng_idMunicipio = long.Parse(_lst_CamposRegistro[11].ToString());
                                }

                                long? lng_idPoblacion = null;
                                if (_lst_CamposRegistro[12] != null)
                                {
                                    lng_idPoblacion = long.Parse(_lst_CamposRegistro[12].ToString());
                                }

                                long? lng_idTipoVia = null;
                                if (_lst_CamposRegistro[13] != null)
                                {
                                    lng_idTipoVia = long.Parse(_lst_CamposRegistro[13].ToString());
                                }

                                GEN_Direcciones_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection,
                                                                                      obj_DbTransaction,
                                                                                    lng_idProducto,
                                                                                    _lng_idEmpresa,
                                                                                    long.Parse(_lst_CamposRegistro[0].ToString()),
                                                                                    lng_idCliente,
                                                                                    lng_idProveedor,
                                                                                    lng_idEmpleado,
                                                                                    lng_idSocio,
                                                                                    lng_idEmpresa_Filtro,
                                                                                    lng_idOrganismoCertificador,
                                                                                    lng_idEmpresaInstaladora,
                                                                                    lng_idCliente_HPV,
                                                                                    lng_idPais,
                                                                                    lng_idProvincia,
                                                                                    lng_idMunicipio,
                                                                                    lng_idPoblacion,
                                                                                    lng_idTipoVia);
                            }
                            //GEN_ImpuestosCabecera
                            else if (_str_Tabla.Equals(GEN_ImpuestosCabecera_Modelo.Tabla))
                            {
                                GEN_ImpuestosCabecera_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //GEN_ImpuestosLineas
                            else if (_str_Tabla.Equals(GEN_ImpuestosLineas_Modelo.Tabla))
                            {
                                long? lng_idImpuestoCabecera = null;
                                if (_lst_CamposRegistro[1] != null)
                                {
                                    lng_idImpuestoCabecera = long.Parse(_lst_CamposRegistro[1].ToString());
                                }

                                long? lng_idImpuestoTipo = null;
                                if (_lst_CamposRegistro[2] != null)
                                {
                                    lng_idImpuestoTipo = long.Parse(_lst_CamposRegistro[2].ToString());
                                }


                                GEN_ImpuestosLineas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), lng_idImpuestoCabecera, lng_idImpuestoTipo);
                            }
                            //GEN_ImpuestosTipos
                            else if (_str_Tabla.Equals(GEN_ImpuestosTipos_Modelo.Tabla))
                            {
                                GEN_ImpuestosTipos_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //GEN_Municipios
                            else if (_str_Tabla.Equals(GEN_Municipios_Modelo.Tabla))
                            {
                                GEN_Municipios_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //GEN_Paises
                            else if (_str_Tabla.Equals(GEN_Paises_Modelo.Tabla))
                            {
                                GEN_Paises_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //GEN_Poblaciones
                            else if (_str_Tabla.Equals(GEN_Poblaciones_Modelo.Tabla))
                            {
                                GEN_Poblaciones_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //GEN_Provincias
                            else if (_str_Tabla.Equals(GEN_Provincias_Modelo.Tabla))
                            {
                                GEN_Provincias_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //GEN_TiposVias
                            else if (_str_Tabla.Equals(GEN_TiposVias_Modelo.Tabla))
                            {
                                GEN_TiposVias_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_AgrupacionesClientesCabeceras
                            else if (_str_Tabla.Equals(HPV_AgrupacionesClientesCabeceras_Modelo.Tabla))
                            {
                                HPV_AgrupacionesClientesCabeceras_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_AgrupacionesClientesLineas
                            else if (_str_Tabla.Equals(HPV_AgrupacionesClientesLineas_Modelo.Tabla))
                            {
                                HPV_AgrupacionesClientesLineas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_AgrupacionesPLVCabeceras
                            else if (_str_Tabla.Equals(HPV_AgrupacionesPLVCabeceras_Modelo.Tabla))
                            {
                                HPV_AgrupacionesPLVCabeceras_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_AgrupacionesPLVLineas
                            else if (_str_Tabla.Equals(HPV_AgrupacionesPLVLineas_Modelo.Tabla))
                            {
                                HPV_AgrupacionesPLVLineas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_Camareros
                            else if (_str_Tabla.Equals(HPV_Camareros_Modelo.Tabla))
                            {
                                HPV_Camareros_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_CamarerosPerfiles
                            else if (_str_Tabla.Equals(HPV_CamarerosPerfiles_Modelo.Tabla))
                            {
                                HPV_CamarerosPerfiles_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_Caracteristicas
                            else if (_str_Tabla.Equals(HPV_Caracteristicas_Modelo.Tabla))
                            {
                                HPV_Caracteristicas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_CaracteristicasTipos
                            else if (_str_Tabla.Equals(HPV_CaracteristicasTipos_Modelo.Tabla))
                            {
                                HPV_CaracteristicasTipos_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_Clientes
                            else if (_str_Tabla.Equals(HPV_Clientes_Modelo.Tabla))
                            {
                                HPV_Clientes_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_Impresoras
                            else if (_str_Tabla.Equals(HPV_Impresoras_Modelo.Tabla))
                            {
                                HPV_Impresoras_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_Ingredientes
                            else if (_str_Tabla.Equals(HPV_Ingredientes_Modelo.Tabla))
                            {
                                HPV_Ingredientes_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_Mesas
                            else if (_str_Tabla.Equals(HPV_Mesas_Modelo.Tabla))
                            {
                                HPV_Mesas_Sincronizacion.Sincronizar_Actualizar_Terminales(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_Perfiles
                            else if (_str_Tabla.Equals(HPV_Perfiles_Modelo.Tabla))
                            {
                                HPV_Perfiles_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_PLV
                            else if (_str_Tabla.Equals(HPV_PLV_Modelo.Tabla))
                            {
                                HPV_PLV_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), bool.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_PuntosBarra
                            else if (_str_Tabla.Equals(HPV_PuntosBarra_Modelo.Tabla))
                            {
                                HPV_PuntosBarra_Sincronizacion.Sincronizar_Actualizar_Terminales(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPV_Salas
                            else if (_str_Tabla.Equals(HPV_Salas_Modelo.Tabla))
                            {
                                HPV_Salas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_SeccionesMenu
                            else if (_str_Tabla.Equals(HPV_SeccionesMenu_Modelo.Tabla))
                            {
                                HPV_SeccionesMenu_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //HPV_Tarifas
                            else if (_str_Tabla.Equals(HPV_Tarifas_Modelo.Tabla))
                            {
                                HPV_Tarifas_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()), long.Parse(_lst_CamposRegistro[2].ToString()), long.Parse(_lst_CamposRegistro[3].ToString()), long.Parse(_lst_CamposRegistro[4].ToString()));
                            }
                            //HPV_Terminales
                            else if (_str_Tabla.Equals(HPV_Terminales_Modelo.Tabla))
                            {
                                HPV_Terminales_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), long.Parse(_lst_CamposRegistro[1].ToString()));
                            }
                            //HPVS_Tickets_Cabecera
                            else if (_str_Tabla.Equals(HPVS_Tickets_Cabecera_Modelo.Tabla))
                            {
                                HPVS_Tickets_Cabecera_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()), _lst_CamposRegistro[1].ToString(), _lst_CamposRegistro[2].ToString(), long.Parse(_lst_CamposRegistro[3].ToString()));
                            }
                            //MAE_TiposGastos
                            else if (_str_Tabla.Equals(MAE_TiposGastos_Modelo.Tabla))
                            {
                                MAE_TiposGastos_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }
                            //MAE_TiposPagos
                            else if (_str_Tabla.Equals(MAE_TiposPagos_Modelo.Tabla))
                            {
                                MAE_TiposPagos_Sincronizacion.Sincronizar_Actualizar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, long.Parse(_lst_CamposRegistro[0].ToString()));
                            }


                            //Se Inserta registro, para que se fuerce la sincronizacion en los terminales
                            SNC_SincronizacionForzar_Datos.Insertar_(obj_DbConnection,
                                                                     obj_DbTransaction,
                                                                     lng_idProducto);

                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                Control_Errores.Errores_Log("", ex, nameof(Sincronizacion) + "/" + nameof(Registro_Individual_Actualizar));
            }
            finally
            {
                if (_obj_DbConnection == null)
                {
                    //Termino la Transaccion
                    if (obj_DbTransaction != null)
                    {
                        obj_DbTransaction.Commit();
                    }

                    if (obj_DbConnection != null && obj_DbConnection.State == ConnectionState.Open)
                    {
                        obj_DbConnection.Close();
                    }
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #region Borrar
        public static INTERNO_ValorDevuelto_Modelo Registro_Individual_Borrar(  string _str_Conexion_Servidor,
                                                                                string _str_Conexion_BaseDatos,
                                                                                string _str_Conexion_Usuario,
                                                                                string _str_Conexion_Clave,
                                                                                DbConnection _obj_DbConnection,
                                                                                DbTransaction _obj_DbTransaction,
                                                                                long _lng_idEmpresa,
                                                                                long _lng_idTerminal,
                                                                                string _str_campoClave,
                                                                                string _str_Tabla,
                                                                                List<long> _lst_idProductos)
        {
            DbConnection obj_DbConnection = _obj_DbConnection;
            DbTransaction obj_DbTransaction = _obj_DbTransaction;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                if (obj_DbConnection == null)
                {
                    Variables_Sincronizacion.g_str_Conexion_Servidor = _str_Conexion_Servidor;
                    Variables_Sincronizacion.g_str_Conexion_BaseDatos = _str_Conexion_BaseDatos;
                    Variables_Sincronizacion.g_str_Conexion_Usuario = _str_Conexion_Usuario;
                    Variables_Sincronizacion.g_str_Conexion_Clave = _str_Conexion_Clave;

                    //Crear Conexion
                    obj_DbConnection = Conexion.Crear_Conexion();
                }

                //Obtener listado de productos activos
                if (_lst_idProductos != null &&
                    _lst_idProductos.Count > 0)
                {
                    foreach (long lng_idProducto in _lst_idProductos)
                    {
                        //Productos que pueden sincronizar datos
                        if (Variables_Sincronizacion.G_LNG_IDPRODUCTO_HOTELPUNTOVENTA.Equals(lng_idProducto))
                        {
                            //HPVS_Tickets_Cabecera
                            if (_str_Tabla.Equals(HPVS_Tickets_Cabecera_Modelo.Tabla))
                            {
                                HPVS_Tickets_Cabecera_Sincronizacion.Sincronizar_Borrar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, _lng_idTerminal, _str_campoClave);
                            }
                            else 
                            {
                                Borrar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa,_str_Tabla, _str_campoClave);
                            }

                            //Se Inserta registro, para que se fuerce la sincronizacion en los terminales
                            SNC_SincronizacionForzar_Datos.Insertar_(obj_DbConnection,
                                                                    obj_DbTransaction,
                                                                    lng_idProducto);
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                Control_Errores.Errores_Log("", ex, nameof(Sincronizacion) + "/" + nameof(Registro_Individual_Borrar));
            }
            finally
            {
                if (_obj_DbConnection == null)
                {
                    //Termino la Transaccion
                    if (obj_DbTransaction != null)
                    {
                        obj_DbTransaction.Commit();
                    }

                    if (obj_DbConnection != null && obj_DbConnection.State == ConnectionState.Open)
                    {
                        obj_DbConnection.Close();
                    }
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        public static INTERNO_ValorDevuelto_Modelo Registro_Multiple_Borrar(string _str_Conexion_Servidor,
                                                                                string _str_Conexion_BaseDatos,
                                                                                string _str_Conexion_Usuario,
                                                                                string _str_Conexion_Clave,
                                                                                DbConnection _obj_DbConnection,
                                                                                DbTransaction _obj_DbTransaction,
                                                                                long _lng_idEmpresa,
                                                                                string _str_Where,
                                                                                List<long> _lst_idProductos)
        {
            DbConnection obj_DbConnection = _obj_DbConnection;
            DbTransaction obj_DbTransaction = _obj_DbTransaction;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                if (_str_Where != null &&
                    _str_Where.Trim().Length > 0)
                {

                    if (obj_DbConnection == null)
                    {
                        Variables_Sincronizacion.g_str_Conexion_Servidor = _str_Conexion_Servidor;
                        Variables_Sincronizacion.g_str_Conexion_BaseDatos = _str_Conexion_BaseDatos;
                        Variables_Sincronizacion.g_str_Conexion_Usuario = _str_Conexion_Usuario;
                        Variables_Sincronizacion.g_str_Conexion_Clave = _str_Conexion_Clave;

                        //Crear Conexion
                        obj_DbConnection = Conexion.Crear_Conexion();
                    }

                    //Obtener listado de productos activos
                    if (_lst_idProductos != null &&
                        _lst_idProductos.Count > 0)
                    {
                        foreach (long lng_idProducto in _lst_idProductos)
                        {
                            //Productos que pueden sincronizar datos
                            if (Variables_Sincronizacion.G_LNG_IDPRODUCTO_HOTELPUNTOVENTA.Equals(lng_idProducto))
                            {
                                Borrar(obj_DbConnection, obj_DbTransaction, lng_idProducto, _lng_idEmpresa, _str_Where);

                                //Se Inserta registro, para que se fuerce la sincronizacion en los terminales
                                SNC_SincronizacionForzar_Datos.Insertar_(obj_DbConnection,
                                                                        obj_DbTransaction,
                                                                        lng_idProducto);
                            }
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                if (_obj_DbConnection == null && obj_DbTransaction != null)
                {
                    obj_DbTransaction.Rollback();
                }

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                Control_Errores.Errores_Log("", ex, nameof(Sincronizacion) + "/" + nameof(Registro_Multiple_Borrar));
            }
            finally
            {
                if (_obj_DbConnection == null)
                {
                    //Termino la Transaccion
                    if (obj_DbTransaction != null)
                    {
                        obj_DbTransaction.Commit();
                    }

                    if (obj_DbConnection != null && obj_DbConnection.State == ConnectionState.Open)
                    {
                        obj_DbConnection.Close();
                    }
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        public static void Borrar(DbConnection _obj_DbConnection,
                                   DbTransaction _obj_DbTransaction,
                                   long _lng_idProducto,
                                   long _lng_idEmpresa,
                                   string _str_Where)
        {
            try
            {
                List<long> lst_idTerminal = SNC_SincronizacionRegistros_Datos.Obtener_Terminales_PorProducto(_obj_DbConnection, _obj_DbTransaction, _lng_idProducto, _lng_idEmpresa);

                if (lst_idTerminal != null &&
                    lst_idTerminal.Count > 0)
                {
                    //Poner el idProducto
                    _str_Where = _str_Where.Replace("[PPPPPPPPPP]",_lng_idProducto.ToString());


                    foreach (long lng_idTerminal in lst_idTerminal)
                    {
                        SNC_SincronizacionRegistros_Datos.Desasignar(_obj_DbConnection,
                                                            _obj_DbTransaction,
                                                            _str_Where.Replace("[TTTTTTTTTT]", lng_idTerminal.ToString()));
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Sincronizacion) + "/" + nameof(Borrar), true);
            }
        }

        public static void Borrar(  DbConnection _obj_DbConnection,
                                    DbTransaction _obj_DbTransaction,
                                    long _lng_idProducto,
                                    long _lng_idEmpresa,
                                    string _str_Tabla,
                                    string _str_CampoClave)
        {
            try
            {
                List<long> lst_idTerminal = SNC_SincronizacionRegistros_Datos.Obtener_Terminales_PorProducto(_obj_DbConnection, _obj_DbTransaction, _lng_idProducto, _lng_idEmpresa);

                if (lst_idTerminal != null &&
                    lst_idTerminal.Count > 0)
                {
                    foreach (long lng_idTerminal in lst_idTerminal)
                    {
                        SNC_SincronizacionRegistros_Datos.Desasignar(_obj_DbConnection,
                                                            _obj_DbTransaction,
                                                             _lng_idProducto,
                                                             lng_idTerminal,
                                                             _lng_idEmpresa,
                                                             _str_Tabla,
                                                             _str_CampoClave
                                                             );
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(Sincronizacion) + "/" + nameof(Borrar), true);
            }
        }

        #endregion
    }
}
