Vendedor CrearNuevoVendedor(VendedorDTO pVendedorDTO, Almacen pAlmacen,
                                    EstadoVendedor pEstadoVendedor,
                                    UsuarioSistema pUsuarioSistema,
                                    UsuarioSistema pUsuarioSistemaAcceso,
                                    VendedorDireccion pDireccionPrimero)
        {
            try
            {
                Vendedor nuevoVendedor = VendedorFactory.CrearVendedor(pVendedorDTO.NombresVendedor,
                                                                       pVendedorDTO.DocumentoIdentidad, pVendedorDTO.Telefono,
                                                                       pVendedorDTO.Sexo, pVendedorDTO.FechaInicio,
                                                                       pVendedorDTO.CodigoVendedor, pVendedorDTO.Clave,
                                                                       pVendedorDTO.FechaNacimiento, pAlmacen, pEstadoVendedor,
                                                                       pUsuarioSistema, pUsuarioSistemaAcceso, pDireccionPrimero);
                return(nuevoVendedor);
            }
            catch (Exception ex)
            {
                string detallesAsicionales = string.Empty;
                string cadenaExcepcion     = ex.Message;

                if (ex.InnerException != null)
                {
                    detallesAsicionales = " .Detalles Interno: " + ex.InnerException != null && ex.InnerException.InnerException != null ?
                                          ex.InnerException.InnerException.Message : "Ver Detalles.";
                }

                LogFactory.CrearLog().LogWarning(cadenaExcepcion + detallesAsicionales);
                throw;
            }
        }
        void GrabarTransaccionNuevoPedidoRetail(PedidoRetail pPedidoRetail)
        {
            try
            {
                if (pPedidoRetail == null)
                {
                    throw new ArgumentException(Mensajes.advertencia_NoSePuedeGrabarPedidoRetailNulo);
                }

                // using (TransactionScope ambito = new TransactionScope())
                // {
                GrabarPedidoRetail(pPedidoRetail);

                //     ambito.Complete();
                // }
            }
            catch (Exception ex)
            {
                string detallesAsicionales = string.Empty;
                string cadenaExcepcion     = ex.Message;

                if (ex.InnerException != null)
                {
                    detallesAsicionales = " .Detalles Interno: " + ex.InnerException != null && ex.InnerException.InnerException != null ?
                                          ex.InnerException.InnerException.Message : "Ver Detalles.";
                }

                LogFactory.CrearLog().LogWarning(cadenaExcepcion + detallesAsicionales);
                throw;
            }
        }
        public ResultadoServicio <ResultadoPedidoRetailGrabadoDTO> AgregarNuevoPedidoRetail(PedidoRetailDTO pPedidoRetailDTO)
        {
            var pedidoRetailExistente = _IRepositorioPedidoRetail.ObtenerPorNumeroPedido(pPedidoRetailDTO.Correlativo);

            if (pedidoRetailExistente != null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_PedidoRetailYaRegistrado);
                throw new ArgumentException(Mensajes.advertencia_PedidoRetailYaRegistrado);
            }

            var nuevoPedidoRetail = CrearNuevoPedidoRetail(pPedidoRetailDTO);

            GrabarTransaccionNuevoPedidoRetail(nuevoPedidoRetail);

            if (nuevoPedidoRetail != null)
            {
                return(new ResultadoServicio <ResultadoPedidoRetailGrabadoDTO>(7, Mensajes.advertencia_ExitosaCreacionNuevoPedidoRetail,
                                                                               string.Empty, nuevoPedidoRetail.ProyectadoComo <ResultadoPedidoRetailGrabadoDTO>(), null));
            }
            else
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_FalloCreacionNuevoPedidoRetail);
                return(new ResultadoServicio <ResultadoPedidoRetailGrabadoDTO>(6, Mensajes.advertencia_FalloCreacionNuevoPedidoRetail,
                                                                               string.Empty, nuevoPedidoRetail.ProyectadoComo <ResultadoPedidoRetailGrabadoDTO>(), null));
            }
        }
        public ResultadoServicio <ResultadoClienteGrabadoDTO> AgregarNuevoCliente(ClienteDTO pClienteDTO)
        {
            var clienteExistente = _IRepositorioCliente.ObtenerPorCodigo(pClienteDTO.CodigoCliente);

            if (clienteExistente != null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_RucYClienteYaRegistrado);
                throw new ArgumentException(Mensajes.advertencia_RucYClienteYaRegistrado);
            }

            ClienteDireccion direccionClientePrimero = new ClienteDireccion(pClienteDTO.DireccionPrimeroPais,
                                                                            pClienteDTO.DireccionPrimeroDepartamento, pClienteDTO.DireccionPrimeroProvincia,
                                                                            pClienteDTO.DireccionPrimeroDistrito, pClienteDTO.DireccionPrimeroUbicacion);

            ClienteDireccion direccionClienteSegundo = new ClienteDireccion(pClienteDTO.DireccionPrimeroPais,
                                                                            pClienteDTO.DireccionPrimeroDepartamento, pClienteDTO.DireccionPrimeroProvincia,
                                                                            pClienteDTO.DireccionPrimeroDistrito, pClienteDTO.DireccionSegundoUbicacion);

            var nuevoCliente = CrearNuevoCliente(pClienteDTO, direccionClientePrimero, direccionClienteSegundo);

            GrabarTransaccionNuevoCliente(nuevoCliente);

            if (nuevoCliente != null)
            {
                return(new ResultadoServicio <ResultadoClienteGrabadoDTO>(7, Mensajes.advertencia_ExitosaCreacionNuevoCliente,
                                                                          string.Empty, nuevoCliente.ProyectadoComo <ResultadoClienteGrabadoDTO>(), null));
            }
            else
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_FalloCreacionNuevaVentaEnVenta);
                return(new ResultadoServicio <ResultadoClienteGrabadoDTO>(6, Mensajes.advertencia_FalloCreacionNuevaVentaEnVenta,
                                                                          string.Empty, nuevoCliente.ProyectadoComo <ResultadoClienteGrabadoDTO>(), null));
            }
        }
示例#5
0
        public decimal ObtenerPrecioVentaDeArticulo(string pCodigoCliente, string pCodigoArticulo, string pCodigoAlmacen)
        {
            DateTime fechaProcesoVenta;
            string   codigoClienteInterno;
            int      cantidadDecimalPrecio;

            var configuracionGlobal = _IConfiguracionGlobalUnificado.UnificarConfiguracionGlobal();

            if (configuracionGlobal == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ConfiguracionGlobalInvalido);
                throw new ArgumentException(Mensajes.advertencia_ConfiguracionGlobalInvalido);
            }
            else
            {
                fechaProcesoVenta     = configuracionGlobal.FechaProcesoVenta;
                codigoClienteInterno  = configuracionGlobal.CodigoClienteInterno;
                cantidadDecimalPrecio = configuracionGlobal.CantidadDecimalPrecio;
            }

            Articulo articulo = _IRepositorioArticulo.ObtenerPorCodigo(pCodigoArticulo, pCodigoAlmacen);

            if (articulo != null)
            {
                //Obtener Lista Precio Clientes
                ListaPrecioCliente listaPrecioCliente =
                    _IRepositorioListaPrecioCliente.ObtenerListaPrecioCliente(pCodigoCliente, pCodigoArticulo,
                                                                              pCodigoAlmacen, fechaProcesoVenta.ToString("yyyyMMdd"));

                //Obtener Lista Precio Inventarios
                ListaPrecioInventario listaPrecioInventario =
                    _IRepositorioListaPrecioInventario.ObtenerListaPrecioInventario(pCodigoArticulo, pCodigoAlmacen);

                return(_IServicioDominioListaPrecios.ObtenerPrecioVentaArticulo(articulo, listaPrecioCliente, listaPrecioInventario,
                                                                                pCodigoCliente, codigoClienteInterno, cantidadDecimalPrecio));
            }
            else
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ArticuloNoExiste, pCodigoArticulo);
                return(0);
            }
        }
        Cliente CrearNuevoCliente(ClienteDTO pClienteDTO, ClienteDireccion pClienteDireccionPrimero,
                                  ClienteDireccion pClienteDireccionSegundo)
        {
            try
            {
                Cliente nuevoCliente = ClienteFactory.CrearCliente(pClienteDTO.CodigoCliente, pClienteDTO.CodigoContable, pClienteDTO.Ruc,
                                                                   pClienteDTO.NombresORazonSocial, pClienteDTO.Telefono, pClienteDTO.Fax,
                                                                   pClienteDTO.FechaNacimiento, pClienteDTO.FechaInscripcion, pClienteDTO.DiasDeGracia,
                                                                   pClienteDTO.MontoLimiteCredito, pClienteDTO.Deuda, pClienteDTO.EsAfecto,
                                                                   pClienteDTO.ControlarSaldoDisponible, pClienteDTO.CodigoMoneda, pClienteDTO.CodigoClaseTipoCambio,
                                                                   pClienteDTO.CodigoTipoCliente, pClienteDTO.CodigoZonaCliente, pClienteDTO.CodigoDiaDePago,
                                                                   pClienteDTO.CodigoVendedor, pClienteDTO.CodigoImpuestoIgv, pClienteDTO.CodigoImpuestoIsc,
                                                                   pClienteDTO.CodigoCondicionPagoDocumentoGenerado, pClienteDTO.CodigoCondicionPagoTicket, pClienteDTO.CodigoEstadoDeCliente,
                                                                   pClienteDTO.CodigoUsuarioDeSistema, pClienteDTO.CodigoPais, pClienteDTO.CodigoDepartamento,
                                                                   pClienteDTO.CodigoDistrito, pClienteDireccionPrimero, pClienteDireccionSegundo);

                //Placas
                if (pClienteDTO.ClientePlacas != null && pClienteDTO.ClientePlacas.Any())
                {
                    foreach (var placa in pClienteDTO.ClientePlacas)
                    {
                        var detalleDePedido = nuevoCliente.AgregarNuevoClientePlaca(placa.DescripcionPlaca);
                    }
                }

                return(nuevoCliente);
            }
            catch (Exception ex)
            {
                string detallesAsicionales = string.Empty;
                string cadenaExcepcion     = ex.Message;

                if (ex.InnerException != null)
                {
                    detallesAsicionales = " .Detalles Interno: " + ex.InnerException != null && ex.InnerException.InnerException != null ?
                                          ex.InnerException.InnerException.Message : "Ver Detalles.";
                }

                LogFactory.CrearLog().LogWarning(cadenaExcepcion + detallesAsicionales);
                throw;
            }
        }
        public ConfiguracionGlobalDTO UnificarConfiguracionGlobal()
        {
            var configuracionGeneral = _IRepositorioConfiguracionGeneral.Obtener();

            if (configuracionGeneral == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ConsultaConfiguracionGeneralFallo);
                return(null);
            }

            var configuracionVenta = _IRepositorioConfiguracionVenta.Obtener();

            if (configuracionVenta == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ConsultaConfiguracionVentaFallo);
                return(null);
            }

            var configuracionInventario = _IRepositorioConfiguracionInventario.Obtener();

            if (configuracionInventario == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ConsultaConfiguracionInventarioFallo);
                return(null);
            }

            var configuracionFormatoTicket = _IRepositorioConfiguracionFormatoTicket.Obtener();

            if (configuracionFormatoTicket == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ConsultaConfiguracionFormatoTicketFallo);
                return(null);
            }

            var configuracionGlobalDto = MaterializarConfiguracionesAConfiguracionGlobalDTO(configuracionGeneral,
                                                                                            configuracionVenta, configuracionInventario, configuracionFormatoTicket);

            return(configuracionGlobalDto);
        }
        void GrabarTransaccionNuevoPedidoEESS(PedidoEESS pPedidoEESS)
        {
            try
            {
                if (pPedidoEESS == null)
                {
                    throw new ArgumentException(Mensajes.advertencia_NoSePuedeGrabarPedidoEESSNulo);
                }

                // using (TransactionScope ambito = new TransactionScope(TransactionScopeOption.Suppress,
                //                                                         new TransactionOptions
                //                                                         {
                //                                                             IsolationLevel = IsolationLevel.ReadCommitted,
                //                                                             Timeout = TransactionManager.MaximumTimeout,
                //                                                         },
                //                                                         TransactionScopeAsyncFlowOption.Enabled))
                // {
                GrabarPedidoEESS(pPedidoEESS);

                //     ambito.Complete();
                // }
            }
            catch (Exception ex)
            {
                string detallesAsicionales = string.Empty;
                string cadenaExcepcion     = ex.Message;

                if (ex.InnerException != null)
                {
                    detallesAsicionales = " .Detalles Interno: " + ex.InnerException != null && ex.InnerException.InnerException != null ?
                                          ex.InnerException.InnerException.Message : "Ver Detalles.";
                }

                LogFactory.CrearLog().LogWarning(cadenaExcepcion + detallesAsicionales);
                throw;
            }
        }
        public ResultadoServicio <VendedorDTO> AgregarNuevoUsuarioVendedor(VendedorDTO pVendedor)
        {
            if (pVendedor == null || String.IsNullOrEmpty(pVendedor.CodigoVendedor.Trim()))
            {
                throw new ArgumentException(Mensajes.advertencia_DatosDeVendedorOCodigoDeVendedorInvalido);
            }

            var vendedor = _IRepositorioVendedor.ObtenerPorCodigo(pVendedor.CodigoVendedor);

            if (vendedor != null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_VendedorACrearYaExiste);
                throw new ArgumentException(Mensajes.advertencia_VendedorACrearYaExiste);
            }

            //Validaciones
            var almacen = _IRepositorioAlmacen.ObtenerPorCodigo(pVendedor.CodigoAlmacen);

            if (almacen == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_AlmacenAsociadoAlVendedorNoExiste);
                throw new ArgumentException(Mensajes.advertencia_AlmacenAsociadoAlVendedorNoExiste);
            }

            var estadoVendedor = _IRepositorioEstadoVendedor.ObtenerPorCodigo(pVendedor.CodigoEstadoVendedor);

            if (estadoVendedor == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_EstadoDeVendedorAsociadoAlVendedorNoExiste);
                throw new ArgumentException(Mensajes.advertencia_EstadoDeVendedorAsociadoAlVendedorNoExiste);
            }

            var usuarioSistemaRegistrador = _IIRepositorioUsuarioSistema.ObtenerUsuarioSistemaPorUsuario(pVendedor.CodigoUsuarioSistema);

            if (usuarioSistemaRegistrador == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_UsuarioSistemaCreadorNuevoVendedorNoExiste);
                throw new ArgumentException(Mensajes.advertencia_UsuarioSistemaCreadorNuevoVendedorNoExiste);
            }

            var usuarioSistemaDelAcceso = _IIRepositorioUsuarioSistema.ObtenerUsuarioSistemaPorUsuario(EnumUsuarioSistema.CodigoUsuarioDeSistemaVendedorPlaya);

            if (usuarioSistemaDelAcceso == null)
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_UsuarioSistemaAccesoNuevoVendedorNoExiste);
                throw new ArgumentException(Mensajes.advertencia_UsuarioSistemaAccesoNuevoVendedorNoExiste);
            }

            VendedorDireccion direccionVendedor = new VendedorDireccion(pVendedor.DireccionPrimeroPais,
                                                                        pVendedor.DireccionPrimeroDepartamento,
                                                                        pVendedor.DireccionPrimeroProvincia,
                                                                        pVendedor.DireccionPrimeroDistrito,
                                                                        pVendedor.DireccionPrimeroUbicacion);

            var nuevoVendedor = CrearNuevoVendedor(pVendedor, almacen, estadoVendedor, usuarioSistemaRegistrador,
                                                   usuarioSistemaDelAcceso, direccionVendedor);

            GrabarNuevoVendedor(nuevoVendedor);

            if (nuevoVendedor != null)
            {
                return(new ResultadoServicio <VendedorDTO>(7, Mensajes.advertencia_VendedorCreadoSatisfactoriamente,
                                                           string.Empty, nuevoVendedor.ProyectadoComo <VendedorDTO>(), null));
            }
            else
            {
                LogFactory.CrearLog().LogWarning(Mensajes.advertencia_CreacionNuevoVendedorFallo);
                return(new ResultadoServicio <VendedorDTO>(6, Mensajes.advertencia_CreacionNuevoVendedorFallo,
                                                           string.Empty, nuevoVendedor.ProyectadoComo <VendedorDTO>(), null));
            }
        }
        PedidoEESS CrearNuevoPedidoEESS(PedidoEESSDTO pPedidoEESSDTO)
        {
            try
            {
                PedidoEESS nuevoPedido = PedidoEESSFactory.CrearPedidoEESS(pPedidoEESSDTO.Correlativo, pPedidoEESSDTO.NumeroCara, pPedidoEESSDTO.NumeroDocumento,
                                                                           pPedidoEESSDTO.AfectaInventario, pPedidoEESSDTO.FechaDocumento, pPedidoEESSDTO.FechaProceso,
                                                                           pPedidoEESSDTO.Periodo, pPedidoEESSDTO.TotalNacional, pPedidoEESSDTO.TotalExtranjera,
                                                                           pPedidoEESSDTO.SubTotalNacional, pPedidoEESSDTO.SubTotalExtranjera, pPedidoEESSDTO.ImpuestoIgvNacional,
                                                                           pPedidoEESSDTO.ImpuestoIgvExtranjera, pPedidoEESSDTO.ImpuestoIscNacional, pPedidoEESSDTO.ImpuestoIscExtranjera,
                                                                           pPedidoEESSDTO.TotalNoAfectoNacional, pPedidoEESSDTO.TotalNoAfectoExtranjera, pPedidoEESSDTO.PorcentajeDescuentoPrimero,
                                                                           pPedidoEESSDTO.PorcentajeDescuentoSegundo, pPedidoEESSDTO.TotalDescuentoNacional, pPedidoEESSDTO.TotalDescuentoExtranjera,
                                                                           pPedidoEESSDTO.TotalVueltoNacional, pPedidoEESSDTO.TotalVueltoExtranjera, pPedidoEESSDTO.TotalEfectivoNacional,
                                                                           pPedidoEESSDTO.TotalEfectivoExtranjera, pPedidoEESSDTO.RucCliente, pPedidoEESSDTO.NombreCompletoCliente,
                                                                           pPedidoEESSDTO.Placa, pPedidoEESSDTO.NumeroVale, pPedidoEESSDTO.TipoCambio,
                                                                           pPedidoEESSDTO.ProcesadoCierreZ, pPedidoEESSDTO.ProcesadoCierreX, pPedidoEESSDTO.NumeroPuntos,
                                                                           pPedidoEESSDTO.NombreTerminal, pPedidoEESSDTO.Kilometraje, pPedidoEESSDTO.DireccionCliente,
                                                                           pPedidoEESSDTO.TipoCliente, pPedidoEESSDTO.DescripcionTipoCliente, pPedidoEESSDTO.DescripcionEstado,
                                                                           pPedidoEESSDTO.TipoCambioClienteCredito, pPedidoEESSDTO.DiasDeGraciaClienteCredito, pPedidoEESSDTO.LimiteCreditoClienteCredito,
                                                                           pPedidoEESSDTO.DeudaClienteClienteCredito, pPedidoEESSDTO.PlusCreditoClienteCredito, pPedidoEESSDTO.Afecto,
                                                                           pPedidoEESSDTO.NumeroTarjeta, pPedidoEESSDTO.PagoTarjeta, pPedidoEESSDTO.DescripcionTarjeta,
                                                                           pPedidoEESSDTO.CodigoTipoDocumento, pPedidoEESSDTO.CodigoTipoPago, pPedidoEESSDTO.CodigoAlmacen,
                                                                           pPedidoEESSDTO.CodigoMoneda, pPedidoEESSDTO.CodigoEstadoDocumento, pPedidoEESSDTO.CodigoCondicionPago,
                                                                           pPedidoEESSDTO.CodigoVendedor, pPedidoEESSDTO.CodigoUsuarioDeSistema, pPedidoEESSDTO.CodigoImpuestoIgv,
                                                                           pPedidoEESSDTO.CodigoImpuestoIsc, pPedidoEESSDTO.CodigoCliente, pPedidoEESSDTO.CodigoClaseTipoCambio,
                                                                           pPedidoEESSDTO.CodigoPuntoDeVenta, pPedidoEESSDTO.CodigoEstado, pPedidoEESSDTO.CodigoMonedaCredito,
                                                                           pPedidoEESSDTO.CodigoClaseTipoCambioClienteCredito, pPedidoEESSDTO.CodigoTarjetaPromocion, pPedidoEESSDTO.CodigoTarjeta,
                                                                           pPedidoEESSDTO.CodigoMonedaTarjeta);

                //Detalle de Pedido
                if (pPedidoEESSDTO.PedidoEESSDetalles != null && pPedidoEESSDTO.PedidoEESSDetalles.Any())
                {
                    foreach (var pedidoDetalle in pPedidoEESSDTO.PedidoEESSDetalles)
                    {
                        //Obtener Articulo y Precio
                        var articulo = _IRepositorioArticulo.ObtenerPorCodigo(pedidoDetalle.CodigoArticulo, pedidoDetalle.CodigoAlmacen);
                        if (articulo == null)
                        {
                            LogFactory.CrearLog().LogWarning(Mensajes.advertencia_ArticuloAsociadoAVentaDetalleNoExiste);
                            throw new ArgumentException(Mensajes.advertencia_ArticuloAsociadoAVentaDetalleNoExiste);
                        }

                        var detalleDePedido = nuevoPedido.AgregarNuevoPedidoEESSDetalle(pedidoDetalle.Secuencia, pedidoDetalle.NumeroTurno, pedidoDetalle.NumeroTransaccionCombustible,
                                                                                        pedidoDetalle.PorcentajeDescuentoPrimero, pedidoDetalle.PorcentajeDescuentoSegundo, pedidoDetalle.PorcentajeDescuentoNacional,
                                                                                        pedidoDetalle.PorcentajeDescuentoExtranjera, pedidoDetalle.PorcentajeImpuestoIgv, pedidoDetalle.PorcentajeImpuestoIsc,
                                                                                        pedidoDetalle.TotalNacional, pedidoDetalle.TotalExtranjera, pedidoDetalle.ImpuestoNacional,
                                                                                        pedidoDetalle.ImpuestoExtranjera, pedidoDetalle.EsInventariable, pedidoDetalle.EnInventarioFisico,
                                                                                        pedidoDetalle.Precio, pedidoDetalle.PrecioVenta, pedidoDetalle.CostoEstandarNacional,
                                                                                        pedidoDetalle.CostoEstandarExtranjera, pedidoDetalle.DescripcionArticulo, pedidoDetalle.Cantidad,
                                                                                        pedidoDetalle.EsFormula, pedidoDetalle.EsArticuloCombustible, pedidoDetalle.NumeroPeaje,
                                                                                        pedidoDetalle.CodigoArticulo, pedidoDetalle.CodigoUnidadDeMedida, pedidoDetalle.CodigoArticuloAlterno);
                    }
                }

                //Pago Con Vale
                if (pPedidoEESSDTO.PedidoEESSConVales != null && pPedidoEESSDTO.PedidoEESSConVales.Any())
                {
                    foreach (var pedidoConVale in pPedidoEESSDTO.PedidoEESSConVales)
                    {
                        var pedidoPagaVale = nuevoPedido.AgregarNuevoPedidoEESSConVale(pedidoConVale.NumeroVale);
                    }
                }

                return(nuevoPedido);
            }
            catch (Exception ex)
            {
                string detallesAsicionales = string.Empty;
                string cadenaExcepcion     = ex.Message;

                if (ex.InnerException != null)
                {
                    detallesAsicionales = " .Detalles Interno: " + ex.InnerException != null && ex.InnerException.InnerException != null ?
                                          ex.InnerException.InnerException.Message : "Ver Detalles.";
                }

                LogFactory.CrearLog().LogWarning(cadenaExcepcion + detallesAsicionales);
                throw;
            }
        }
        public ResultadoServicio <ModuloSistemaDTO> GestionInicioSesion(string pUsuario, string pClave, string pCodigoModuloSistema)
        {
            UsuarioSistema usuarioSistemaAcceso;
            ModuloSistema  accesosModuloSistema         = null;
            bool           esUsuarioSistemaAccesoValido = false;
            bool           esUsuarioDelVendedorValido   = false;
            string         mensajeValidacion            = string.Empty;

            if (string.IsNullOrEmpty(pUsuario.Trim()) || string.IsNullOrEmpty(pClave.Trim()))
            {
                throw new ArgumentException(Mensajes.advertencia_UsuarioOClaveNula);
            }

            //Validamos Usuario Vendedor
            Vendedor vendedorLogueado = _IRepositorioVendedor.ObtenerVendedorPorUsuario(pUsuario);

            if (vendedorLogueado != null)
            {
                //Desecriptar clave
                var claveDesencriptada = EncriptacionBasica.EncriptarYDesencriptar(pClave.Trim().ToUpper());
                esUsuarioDelVendedorValido = _IServicioDominioValidarUsuarioVendedor
                                             .ValidarUsuarioVendedor(vendedorLogueado, claveDesencriptada.Trim());

                if (esUsuarioDelVendedorValido)
                {
                    usuarioSistemaAcceso = vendedorLogueado.UsuarioSistemaAcceso;
                }
                else
                {
                    usuarioSistemaAcceso = null;
                    mensajeValidacion    = Mensajes.advertencia_UsuarioVendedorInvalido;
                }
            }
            else
            {
                //Para los que inician session como otros usuarios diferentes a Vendedores
                usuarioSistemaAcceso = _IRepositorioUsuarioSistema.ObtenerUsuarioSistemaPorUsuario(pUsuario, pClave);
            }


            //Usaurio Sistema Valido
            if (usuarioSistemaAcceso != null)
            {
                //Obtenemos privilegios del usuario
                accesosModuloSistema = _IRepositorioModuloSistema
                                       .ObtenerDerechosAccesosUsuario(usuarioSistemaAcceso.CodigoUsuarioDeSistema.Trim(), pCodigoModuloSistema.Trim());

                esUsuarioSistemaAccesoValido = _IServicioDominioValidarUsuarioSistema
                                               .ValidarUsuarioSistema(usuarioSistemaAcceso, accesosModuloSistema, pClave.Trim());

                if (!(esUsuarioSistemaAccesoValido))
                {
                    mensajeValidacion = Mensajes.advertencia_UsuarioSistemaDeVendedorInvalido;
                }
            }
            else
            {
                mensajeValidacion = Mensajes.advertencia_UsuarioSistemaInvalido;
            }


            //Validamos usuario en el dominio (PENDIENTE de implementar de una manera orientada a objetos), ej. Active Directory
            // if (esUsuarioSistemaAccesoValido)
            //     esInicioSesionValido = _IAutenticacion.ValidarInicioSesion(string.Empty, string.Empty);


            //Devolucion
            if ((esUsuarioSistemaAccesoValido == true) &&
                (accesosModuloSistema != null))
            {
                mensajeValidacion = Mensajes.advertencia_UsuarioValido;
                // LogFactory.CrearLog().LogError(mensajeValidacion);

                return(new ResultadoServicio <ModuloSistemaDTO>(7, mensajeValidacion,
                                                                string.Empty, accesosModuloSistema.ProyectadoComo <ModuloSistemaDTO>(), null));
            }
            else
            {
                mensajeValidacion = Mensajes.advertencia_UsuarioSistemaInvalidoYSinDerechos;
                LogFactory.CrearLog().LogError(mensajeValidacion);

                return(new ResultadoServicio <ModuloSistemaDTO>(6, mensajeValidacion,
                                                                string.Empty, null, null));
            }
        }