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;
            }
        }
        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));
            }
        }