using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Compras;
using Exferia_Aplicacion.Modelos_Contabilidad;
using Exferia_Aplicacion.Modelos_Existencias;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Modelos_Listado_Filtros;
using Exferia_Aplicacion.Modelos_Volcado;
using Exferia_General._0_Modelos;
using Exferia_Compras._0_Modelos;
using Exferia_Compras._1_Datos;
using Exferia_Compras._3_Vistas;
using Exferia_EntityFramework;
using Exferia_Formularios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Compras
{
    public class Datos_Compras
    {
        #region COM_DevolucionesPagos
        private INTERNO_COM_DevolucionesPagos_Volcado_Modelo COM_DevolucionesPagos_Obtener_Volcado(long _lng_id)
        {
            try
            {
                COM_DevolucionesPagos_Datos obj_COM_DevolucionesPagos_Datos = new COM_DevolucionesPagos_Datos();
                return obj_COM_DevolucionesPagos_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region COM_EntradasMercanciaLineas
        private List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> COM_EntradasMercanciaLineas_Obtener_Para_RecalcularMovimientos(long? _lng_idArticulo, DateTime _dtt_Desde, DateTime _dtt_Hasta)
        {
            List<INTERNO_ArticuloDiarioActualizar_Documentos_Modelo> lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            try
            {
                COM_EntradasMercanciaLineas_Datos obj_COM_EntradasMercanciaLineas_Datos = new COM_EntradasMercanciaLineas_Datos();

                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = obj_COM_EntradasMercanciaLineas_Datos.Obtener_Para_RecalcularMovimientos(_lng_idArticulo, _dtt_Desde, _dtt_Hasta);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = null;
            }

            return lst_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo;
        }

        private List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> COM_EntradasMercanciaLineas_Obtener_Listado_Movimientos(long _lng_idArticulo,
                                                                                                                                DateTime _dtt_FechaDesde,
                                                                                                                                DateTime _dtt_FechaHasta,
                                                                                                                                long? _lng_idDelegacion,
                                                                                                                                long? _lng_idAlmacen,
                                                                                                                                long? _lng_idUbicacion)
        {
            List<INTERNO_INF_MovimientosArticulos_Listado_Modelo> lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            try
            {
                COM_EntradasMercanciaLineas_Datos obj_COM_EntradasMercanciaLineas_Datos = new COM_EntradasMercanciaLineas_Datos();

                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = obj_COM_EntradasMercanciaLineas_Datos.Obtener_Listado_Movimientos(_lng_idArticulo,
                                                                                                                                        _dtt_FechaDesde,
                                                                                                                                        _dtt_FechaHasta,
                                                                                                                                         _lng_idDelegacion,
                                                                                                                                         _lng_idAlmacen,
                                                                                                                                         _lng_idUbicacion);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }
            catch (Exception)
            {
                lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo = null;
            }

            return lst_INTERNO_INF_MovimientosArticulos_Listado_Modelo;
        }
        #endregion

        #region COM_RemesasCabecera
        private INTERNO_COM_RemesasCabecera_Volcado_Modelo COM_RemesasCabecera_Obtener_Volcado(long _lng_id)
        {
            try
            {
                COM_RemesasCabecera_Datos obj_COM_RemesasCabecera_Datos = new COM_RemesasCabecera_Datos();
                return obj_COM_RemesasCabecera_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region COM_FacturasCabecera
        #region Simple
        private INTERNO_COM_FacturasCabecera_Modelo COM_FacturasCabecera_Obtener_Auxiliar(long _lng_Id)
        {
            INTERNO_COM_FacturasCabecera_Modelo mdl_INTERNO_COM_FacturasCabecera_Modelo = null;
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();

                mdl_INTERNO_COM_FacturasCabecera_Modelo = obj_COM_FacturasCabecera_Datos.Obtener_Auxiliar(_lng_Id);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Datos_Compras) + "/" + nameof(COM_FacturasCabecera_Obtener_Auxiliar));
            }

            return mdl_INTERNO_COM_FacturasCabecera_Modelo;
        }

        private COM_FacturasCabecera COM_FacturasCabecera_Obtener_Modelo_Por_Id(long _lng_Id)
        {
            COM_FacturasCabecera mdl_COM_FacturasCabecera = null;
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();

                mdl_COM_FacturasCabecera = obj_COM_FacturasCabecera_Datos.Obtener_Modelo_Por_Id(_lng_Id, false, false, false);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Datos_Compras) + "/" + nameof(COM_FacturasCabecera_Obtener_Modelo_Por_Id));
            }

            return mdl_COM_FacturasCabecera;
        }
        private COM_FacturasCabecera COM_FacturasCabecera_Obtener_Modelo_Por_Id_AUX_1(long _lng_Id, bool _bol_Cargar_Proveedor, bool _bol_Cargar_Empleado, bool _bol_Cargar_Delegacion)
        {
            COM_FacturasCabecera mdl_COM_FacturasCabecera = null;
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();

                mdl_COM_FacturasCabecera = obj_COM_FacturasCabecera_Datos.Obtener_Modelo_Por_Id(_lng_Id, _bol_Cargar_Proveedor, _bol_Cargar_Empleado, _bol_Cargar_Delegacion);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Datos_Compras) + "/" + nameof(COM_FacturasCabecera_Obtener_Modelo_Por_Id_AUX_1));
            }

            return mdl_COM_FacturasCabecera;
        }

        private List<COM_FacturasCabecera> COM_FacturasCabecera_Obtener_ModeloListado_Por_Ids(List<long> _lst_Id)
        {
            List<COM_FacturasCabecera> lst_COM_FacturasCabecera = null;
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();

                lst_COM_FacturasCabecera = obj_COM_FacturasCabecera_Datos.Obtener_ModeloListado_Por_Ids(_lst_Id);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Datos_Compras) + "/" + nameof(COM_FacturasCabecera_Obtener_ModeloListado_Por_Ids));
            }

            return lst_COM_FacturasCabecera;
        }
        #endregion

        private INTERNO_COM_FacturasCabecera_Volcado_Modelo COM_FacturasCabecera_Obtener_Volcado(long _lng_id)
        {
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.Obtener_Volcado_SIMPLE(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private INTERNO_ValorDevuelto_Modelo COM_FacturasCabecera_Borrar_Por_Ids(List<long> lst_idFacturas)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                mdl_INTERNO_ValorDevuelto_Modelo = obj_COM_FacturasCabecera_Datos.Borrar(lst_idFacturas);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }
            catch (Exception)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_COM_FacturasCabecera_Listado_Modelo COM_FacturasCabecera_Obtener_ParaListado(long _lng_id)
        {
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.Obtener_ParaListado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<INTERNO_COM_FacturasCabecera_Listado_Modelo> COM_FacturasCabecera_Obtener_Por_Expediente(long _lng_idExpediente)
        {
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.Obtener_PorExpediente(_lng_idExpediente);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }


        private List<INTERNO_CTU_Cartera_Compras_Modelo> COM_FacturasCabecera_Obtener_Para_CTU_Cartera_Compras_Por_FacturaCabeceraCompra(long _lng_idFacturaCabeceraCompra, long _lng_idEmpresa)
        {
            try
            {
               COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.CTU_Cartera_Compras_Obtener_Por_FacturaCabeceraCompra(_lng_idFacturaCabeceraCompra, _lng_idEmpresa);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private List<INTERNO_CTU_Cartera_Compras_Modelo> COM_FacturasCabecera_Obtener_Para_CTU_Cartera_Compras_Por_Proveedor(long _lng_idProveedor, long _lng_idEmpresa)
        {
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.CTU_Cartera_Compras_Obtener_Por_Proveedor(_lng_idProveedor, _lng_idEmpresa);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> COM_FacturasCabecera_Obtener_ParaResumenImpuestos(DateTime _dtt_FechaDesde, DateTime _dtt_FechaHasta, long? _lng_idDelegacion, List<long> _lst_IdProveedor)
        {
            List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo = null;
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo= obj_COM_FacturasCabecera_Datos.Obtener_ParaResumenImpuestos(_dtt_FechaDesde, _dtt_FechaHasta, _lng_idDelegacion, _lst_IdProveedor);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo= null;
            }
            catch (Exception)
            {
                lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo = null;
            }

            return lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo;
        }

        public static List<INTERNO_ResultadoDeclaracion> COM_FacturaCabecera_ObtenerDeclaracionProveedores(DateTime dtm_FechaDesde, DateTime dtm_FechaHasta)
        {
            try
            {
                COM_FacturasCabecera_Datos obj_COM_FacturasCabecera_Datos = new COM_FacturasCabecera_Datos();
                return obj_COM_FacturasCabecera_Datos.ObtenerDeclaracionProveedores(dtm_FechaDesde, dtm_FechaHasta);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }

        #endregion

        #region COM_Pagos
        private INTERNO_COM_Pagos_Volcado_Modelo COM_Pagos_Obtener_Volcado(long _lng_id)
        {
            try
            {
                COM_Pagos_Datos obj_COM_Pagos_Datos_Datos = new COM_Pagos_Datos();
                return obj_COM_Pagos_Datos_Datos.Obtener_Volcado(_lng_id);
            }
            catch (Control_Errores)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
        #endregion

        #region COM_PedidosComprasCabecera
        private List<INTERNO_Listado_Simple_Modelo> COM_PedidosComprasCabecera_Buscar_Datos_Filtros_Relacionados(string _str_Tabla_Nombre,
                                                                                                                 string _str_Campo_Id,
                                                                                                                 string _str_Campo_Codigo,
                                                                                                                 string _str_Campo_Descripcion,
                                                                                                                 string _str_Campo_FechaBorrado,
                                                                                                                 string _str_Where)
        {

            List<INTERNO_Listado_Simple_Modelo> lst_INTERNO_Listado_Simple_Modelo = null;
            try
            {
                COM_PedidosComprasCabecera_Datos obj_COM_PedidosComprasCabecera_Datos = new COM_PedidosComprasCabecera_Datos();

                lst_INTERNO_Listado_Simple_Modelo= obj_COM_PedidosComprasCabecera_Datos.Buscar_Datos_Filtros_Relacionados(_str_Where);
            }
            catch (Control_Errores)
            {
                lst_INTERNO_Listado_Simple_Modelo = null;
            }

            return lst_INTERNO_Listado_Simple_Modelo;
        }

        #endregion

        #region COM_Vencimientos
        private List<long> COM_Vencimientos_Obtener_Por_IdFacturaCabeceraCompra(long _lng_idFacturaCabeceraCompra)
        {

            List<long> lst_ids_Vencimientos = null;
            try
            {
                COM_Vencimientos_Datos obj_COM_Vencimientos_Datos = new COM_Vencimientos_Datos();

                lst_ids_Vencimientos = obj_COM_Vencimientos_Datos.Obtener_PorFactura(_lng_idFacturaCabeceraCompra);
            }
            catch (Control_Errores)
            {
                lst_ids_Vencimientos = null;
            }

            return lst_ids_Vencimientos;
        }
        #endregion

        #region Pantallas
        private void AbrirPantalla_P_FacturaCabecera_Auxiliar_2(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                                    DateTime _dtt_FechaTrabajo,
                                                                    CTG_Expedientes _mdl_CTG_Expedientes,
                                                                    INTERNO_OpcionesDetalle_Modelo _mdl_INTERNO_OpcionesDetalle_Modelo,
                                                                    int _int_Tipopantalla,
                                                                    long _lng_id,
                                                                    P_Base _frm_PantallaPadre,
                                                                    string _str_identificador_PantallaPadre)
                            {
                                try
                                {
                                    //Buscar Opciones Modelo
                                    P_FacturaCabecera_Auxiliar_2 frm_P_FacturaCabecera_Auxiliar_2 = new P_FacturaCabecera_Auxiliar_2(_mdl_INTERNO_ValoresGenerales_Modelo,
                                                                                _dtt_FechaTrabajo,
                                                                                _mdl_INTERNO_OpcionesDetalle_Modelo,
                                                                                _mdl_CTG_Expedientes
                                                                               );

                                    //Se llamo desde una pantalla
                                    frm_P_FacturaCabecera_Auxiliar_2.P_Base_TipoAperturaPantalla = _int_Tipopantalla;
                                    frm_P_FacturaCabecera_Auxiliar_2.P_Base_id = _lng_id;
                                    frm_P_FacturaCabecera_Auxiliar_2.P_Base_PantallaPadre_IdentificadorTAG = _str_identificador_PantallaPadre;
                                    frm_P_FacturaCabecera_Auxiliar_2.P_Base_PantallaOrigen = _frm_PantallaPadre;
                                    frm_P_FacturaCabecera_Auxiliar_2.P_Base_TituloPantalla_CaminoHormigas = _mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_TituloMantenimiento.ToUpper();

                                    Funciones_PanelPrincipal.Cargar_PantallaEmpotrada(frm_P_FacturaCabecera_Auxiliar_2, Variables.G_STR_OPCION_COM_FACTURACABECERA_AUX_2);
                                }
                                catch (Exception ex)
                                {
                                    Control_Errores.Errores_Log("", ex, nameof(Datos_Compras) + "/" + nameof(AbrirPantalla_P_FacturaCabecera_Auxiliar_2));
                                }
                            }
        #endregion

        

    }
}
