コード例 #1
0
        public void ComprarPeliculaSinStockTest()
        {
            ComprasCN   comprasCN = new ComprasCN();
            PeliculasAD peliculasAD = new PeliculasAD();
            string      nifSocio = "00000000T";
            string      codBarrasPelicula = "0686983675479";
            Pelicula    pelicula, peliculaOriginal;

            // Necesitamos ser administrador para comprar, impersonamos
            ConnectionHelper.ImpersonateAdmin();

            using (TransactionScope tx = new TransactionScope())
            {
                // Quitamos el stock a la pelicula
                pelicula                       = peliculasAD.ObtenerPeliculaPorCodBarras(codBarrasPelicula, false, false);
                peliculaOriginal               = (Pelicula)OperacionesEntidad.CreateDataCopy(pelicula, false);
                pelicula.UnidadesVenta         = 0;
                pelicula.UnidadesVentaAlquiler = 1;
                pelicula.UnidadesAlquiladas    = 1;
                pelicula.UnidadesAlquiler      = 0;
                peliculasAD.ActualizarPelicula(pelicula, peliculaOriginal);

                // Intentamos alquilar
                EstadoPedido estadoPedido = comprasCN.ComprarPelicula(nifSocio, codBarrasPelicula);

                Assert.AreEqual(EstadoPedido.StockInsuficiente, estadoPedido);
            }
        }
コード例 #2
0
        public BindingList <Pelicula> ObtenerMisPeliculasPendienteDevolver()
        {
            string      nifUsuario  = Thread.CurrentPrincipal.Identity.Name;
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerPeliculasPendienteDevolver(nifUsuario));
        }
コード例 #3
0
        /// <summary>
        /// Obtiene la carátula asociada a la película indicada
        /// Seguridad: Público
        /// </summary>
        /// <param name="codBarras">Código de barras de la película</param>
        /// <param name="ancho">Ancho deseado de la imagen</param>
        /// <param name="alto">Alto deseado de la imagen</param>
        /// <returns>Array de bytes con la imagen de la carátula</returns>
        public byte[] ObtenerCaratula(string codBarras, int ancho, int alto)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            byte[]       buffer;
            Bitmap       bmpSource, bmpDest;
            MemoryStream memStream;

            buffer = peliculasAD.ObtenerCaratula(codBarras);

            if (ancho == 0 && alto == 0)
            {
                return(buffer);
            }

            bmpSource = new Bitmap(new MemoryStream(buffer));
            if (ancho >= bmpSource.Width || alto >= bmpSource.Height)
            {
                return(buffer);
            }

            bmpDest = new Bitmap(ancho, alto, bmpSource.PixelFormat);
            Graphics g = Graphics.FromImage(bmpDest);

            g.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.DrawImage(bmpSource, 0, 0, bmpDest.Width, bmpDest.Height);
            g.Dispose();

            memStream = new MemoryStream();
            bmpDest.Save(memStream, ImageFormat.Jpeg);

            return(memStream.ToArray());
        }
コード例 #4
0
        public void ModificarPeliculaYEliminarActorTest()
        {
            PeliculasAD peliculasAD = new PeliculasAD();
            ChangeSetAD changesetAD = new ChangeSetAD();
            string      codBarras   = "0045907014545";
            Pelicula    pelicula;
            int         actoresCount;

            pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, true, false);

            DisconnectedDataContext <EntidadesDataContext> dataContext = new DisconnectedDataContext <EntidadesDataContext>();

            dataContext.Attach(pelicula);

            pelicula.Duracion = 100;

            actoresCount = pelicula.ActoresPeliculas.Count;
            pelicula.ActoresPeliculas.RemoveAt(0);

            using (TransactionScope tx = new TransactionScope())
            {
                DisconnectedChangeSet changeSet = dataContext.GetChangeSet();
                changesetAD.ActualizarChangeSet(changeSet);

                pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, true, false);

                Assert.AreEqual(100, pelicula.Duracion);
                Assert.AreEqual(actoresCount - 1, pelicula.ActoresPeliculas.Count);
            }
        }
コード例 #5
0
        public void ObtenerPeliculaConPuntuacionPorCodBarrasTest()
        {
            PeliculasAD target    = new PeliculasAD();
            string      codBarras = "0045907014545";
            Pelicula    actual;

            actual = target.ObtenerPeliculaPorCodBarras(codBarras, false, true);
            Assert.IsTrue(actual.PuntuacionMedia > 0);
        }
コード例 #6
0
        public void ObtenerPeliculaNoExistenteTest()
        {
            PeliculasAD target         = new PeliculasAD();
            string      codBarras      = "0000000000000";
            bool        incluirActores = true;
            Pelicula    actual;

            actual = target.ObtenerPeliculaPorCodBarras(codBarras, incluirActores, false);
            Assert.IsNull(actual);
        }
コード例 #7
0
        public void ModificarPeliculaYEliminarModificarAgregarActorTest()
        {
            PeliculasAD peliculasAD = new PeliculasAD();
            ChangeSetAD changesetAD = new ChangeSetAD();
            string      codBarras   = "0045907014545";
            Pelicula    pelicula;
            int         actoresCount;

            pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, true, false);

            DisconnectedDataContext <EntidadesDataContext> dataContext = new DisconnectedDataContext <EntidadesDataContext>();

            dataContext.Attach(pelicula);

            pelicula.Duracion = 100;

            actoresCount = pelicula.ActoresPeliculas.Count;
            pelicula.ActoresPeliculas[0].Papel = "Nuevo papel";
            pelicula.ActoresPeliculas.RemoveAt(0);

            ActoresPelicula nuevoActorPelicula = new ActoresPelicula();

            nuevoActorPelicula.ActorID = 100;
            nuevoActorPelicula.Papel   = "Nuevo actor";
            pelicula.ActoresPeliculas.Add(nuevoActorPelicula);

            using (TransactionScope tx = new TransactionScope())
            {
                DisconnectedChangeSet changeSet = dataContext.GetChangeSet();
                changesetAD.ActualizarChangeSet(changeSet);

                pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, true, false);

                Assert.AreEqual(100, pelicula.Duracion);
                Assert.AreEqual(actoresCount, pelicula.ActoresPeliculas.Count);

                bool foundNuevo   = false;
                bool foundAntiguo = false;
                foreach (ActoresPelicula actor in pelicula.ActoresPeliculas)
                {
                    if (actor.Papel == "Nuevo actor")
                    {
                        foundNuevo = true;
                    }
                    if (actor.Papel == "Nuevo papel")
                    {
                        foundAntiguo = true;
                    }
                }

                Assert.IsTrue(foundNuevo);
                Assert.IsFalse(foundAntiguo);
            }
        }
コード例 #8
0
        public void ObtenerPeliculaConActoresPorCodBarrasTest()
        {
            PeliculasAD target         = new PeliculasAD();
            string      codBarras      = "0045907014545";
            bool        incluirActores = true;
            Pelicula    actual;

            actual = target.ObtenerPeliculaPorCodBarras(codBarras, incluirActores, false);
            Assert.AreEqual("María Antonieta", actual.Titulo);
            Assert.AreEqual(9, actual.ActoresPeliculas.Count);
        }
コード例 #9
0
        public void ObtenerPeliculaPorFiltro2Test()
        {
            PeliculasAD            target         = new PeliculasAD();
            bool                   incluirActores = false;
            BindingList <Pelicula> actual;
            FiltroPeliculas        filtro = new FiltroPeliculas();

            filtro.CamposFiltrado = (int)CamposFiltro.Titulo;
            filtro.Titulo         = "dos";
            int total;

            actual = target.ObtenerPeliculasPorFiltro(filtro, incluirActores, false, out total);
            Assert.AreEqual(4, actual.Count);
        }
コード例 #10
0
        public void EliminarPeliculaTest()
        {
            PeliculasAD peliculasAD = new PeliculasAD();
            string      codBarras   = "0045907014545";
            Pelicula    pelicula;

            pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, false, false);
            using (TransactionScope tx = new TransactionScope())
            {
                peliculasAD.EliminarPelicula(pelicula);
                pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, false, false);

                Assert.IsNull(pelicula);
            }
        }
コード例 #11
0
        public void ObtenerPeliculaPorFiltro1Test()
        {
            PeliculasAD            target         = new PeliculasAD();
            string                 codBarras      = "0045907014545";
            bool                   incluirActores = false;
            BindingList <Pelicula> actual;
            FiltroPeliculas        filtro = new FiltroPeliculas();

            filtro.CamposFiltrado = (int)CamposFiltro.CodBarras;
            filtro.CodBarras      = codBarras;
            int total;

            actual = target.ObtenerPeliculasPorFiltro(filtro, incluirActores, false, out total);
            Assert.AreEqual(1, actual.Count);
            Assert.AreEqual(codBarras, actual[0].CodBarras);
        }
コード例 #12
0
        public void ModificarPeliculaTest()
        {
            PeliculasAD peliculasAD = new PeliculasAD();
            string      codBarras = "0045907014545";
            Pelicula    pelicula, peliculaOriginal;

            pelicula         = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, false, false);
            peliculaOriginal = (Pelicula)OperacionesEntidad.CreateDataCopy(pelicula, false);

            pelicula.Duracion = 100;

            using (TransactionScope tx = new TransactionScope())
            {
                peliculasAD.ActualizarPelicula(pelicula, peliculaOriginal);
                pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, false, false);

                Assert.AreEqual(100, pelicula.Duracion);
            }
        }
コード例 #13
0
        public void AgregarPeliculaTest()
        {
            PeliculasAD peliculasAD = new PeliculasAD();
            Pelicula    pelicula;
            string      codBarras = "1111111111111";
            string      titulo    = "Titulo prueba";

            pelicula           = new Pelicula();
            pelicula.CodBarras = codBarras;
            pelicula.Titulo    = titulo;
            pelicula.Sinopsis  = "Sinopsis";

            using (TransactionScope tx = new TransactionScope())
            {
                peliculasAD.AgregarPelicula(pelicula);
                pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, false, false);

                Assert.IsNotNull(pelicula);
                Assert.AreEqual(codBarras, pelicula.CodBarras);
                Assert.AreEqual(titulo, pelicula.Titulo);
            }
        }
コード例 #14
0
        /// <summary>
        /// Obtiene las películas más vendidas
        /// Seguridad: Público
        /// </summary>
        /// <returns>Lista de películas</returns>
        public BindingList <Pelicula> ObtenerTopPeliculasVentas()
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerTopPeliculasVentas());
        }
コード例 #15
0
        public BindingList <Pelicula> ObtenerPeliculasPendienteDevolver(string nifUsuario)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerPeliculasPendienteDevolver(nifUsuario));
        }
コード例 #16
0
        public Pelicula ObtenerPeliculaPorCodBarras(string codBarras, bool incluirActores, bool incluirPuntuacionMedia)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerPeliculaPorCodBarras(codBarras, incluirActores, incluirPuntuacionMedia));
        }
コード例 #17
0
        /// <summary>
        /// Obtiene las películas que cumplen el filtro dinámico indicado
        /// Seguridad: Público
        /// </summary>
        /// <param name="filtro">Filtro dinámico</param>
        /// <param name="incluirActores">Incluir actores asociados</param>
        /// <param name="incluirPuntuaciones">Incluir puntuaciones asociadas</param>
        /// <param name="total">Número total de registros sin paginar</param>
        /// <returns>Lista de películas</returns>
        public BindingList <Pelicula> ObtenerPeliculasPorFiltro(FiltroPeliculas filtro, bool incluirActores, bool incluirPuntuaciones, out int total)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerPeliculasPorFiltro(filtro, incluirActores, incluirPuntuaciones, out total));
        }
コード例 #18
0
        public BindingList <Pelicula> ObtenerPeliculas(bool incluirActores)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerPeliculas(incluirActores));
        }
コード例 #19
0
        public void ModificarCaratula(byte[] caratula, string codBarras)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            peliculasAD.ModificarCaratula(caratula, codBarras);
        }
コード例 #20
0
        public void AgregarPelicula(Pelicula pelicula)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            peliculasAD.AgregarPelicula(pelicula);
        }
コード例 #21
0
        public void EliminarPelicula(Pelicula pelicula)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            peliculasAD.EliminarPelicula(pelicula);
        }
コード例 #22
0
        public void ActualizarPelicula(Pelicula pelicula, Pelicula original)
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            peliculasAD.ActualizarPelicula(pelicula, original);
        }
コード例 #23
0
        /// <summary>
        /// Obtiene las películas más valoradas
        /// Seguridad: Público
        /// </summary>
        /// <returns>Lista de películas</returns>
        public BindingList <Pelicula> ObtenerTopPeliculasPuntuacion()
        {
            PeliculasAD peliculasAD = new PeliculasAD();

            return(peliculasAD.ObtenerTopPeliculasPuntuacion());
        }
コード例 #24
0
        private EstadoPedido DevolverPeliculaInternal(string nifSocio, string peliculaCodBarras, out Historico historico)
        {
            Alquiler     alquiler;
            Pelicula     pelicula, peliculaOriginal;
            Socio        socio, socioOriginal;
            AlquileresAD alquileresAD = new AlquileresAD();
            HistoricosAD historicosAD = new HistoricosAD();
            PeliculasAD  peliculasAD  = new PeliculasAD();
            UsuariosAD   usuariosAD   = new UsuariosAD();

            historico = null;
            using (TransactionScope tx = new TransactionScope())
            {
                // Buscamos alquiler pendiente de devolver
                alquiler = alquileresAD.ObtenerAlquilerSinDevolverPorSocioPelicula(nifSocio, peliculaCodBarras);
                if (alquiler == null)
                {
                    throw new ArgumentException();
                }

                // Actualización de stock
                pelicula         = peliculasAD.ObtenerPeliculaPorCodBarras(peliculaCodBarras, false, false);
                peliculaOriginal = (Pelicula)OperacionesEntidad.CreateDataCopy(pelicula, false);
                pelicula.UnidadesAlquiladas--;
                try
                {
                    peliculasAD.ActualizarPelicula(pelicula, peliculaOriginal);
                }
                catch (ChangeConflictException)
                {
                    // Error de concurrencia
                    return(EstadoPedido.ErrorConcurrencia);
                }

                // Almacenamos en históricos
                historico                 = new Historico();
                historico.PeliculaID      = alquiler.PeliculaID;
                historico.SocioID         = alquiler.SocioID;
                historico.Fecha           = alquiler.FechaAlquiler;
                historico.FechaRecogida   = alquiler.FechaRecogida;
                historico.FechaDevolucion = DateTime.Now;
                historico.TipoOperacion   = TipoOperacion.Devolucion;
                historico.Precio          = CalcularPrecio(alquiler.FechaAlquiler, alquiler.FechaRecogida.Value, historico.FechaDevolucion.Value);
                historicosAD.AgregarHistorico(historico);

                // Borrado alquiler
                try
                {
                    alquileresAD.EliminarAlquiler(alquiler);
                }
                catch (ChangeConflictException)
                {
                    // Error de concurrencia
                    return(EstadoPedido.ErrorConcurrencia);
                }

                // Actualización saldo
                socio         = usuariosAD.ObtenerSocioPorNIF(nifSocio);
                socioOriginal = (Socio)OperacionesEntidad.CreateDataCopy(socio, false);
                socio.Saldo  -= historico.Precio;
                if (socio.Saldo < 0)
                {
                    return(EstadoPedido.SaldoInsuficiente);
                }
                try
                {
                    usuariosAD.ActualizarUsuario(socio, socioOriginal);
                }
                catch (ChangeConflictException)
                {
                    // Error de concurrencia
                    return(EstadoPedido.ErrorConcurrencia);
                }

                tx.Complete();
            }

            return(EstadoPedido.Realizado);
        }
コード例 #25
0
        private EstadoPedido AlquilarPeliculaIntento(string nifSocio, string peliculaCodBarras)
        {
            Socio     socio, socioOriginal;
            Pelicula  pelicula, peliculaOriginal;
            Historico historico;
            Alquiler  alquiler;

            UsuariosAD   usuariosAD   = new UsuariosAD();
            PeliculasAD  peliculasAD  = new PeliculasAD();
            HistoricosAD historicosAD = new HistoricosAD();
            AlquileresAD alquileresAD = new AlquileresAD();

            // Recuperamos película y usuario
            pelicula = peliculasAD.ObtenerPeliculaPorCodBarras(peliculaCodBarras, false, false);
            socio    = usuariosAD.ObtenerSocioPorNIF(nifSocio);

            if (pelicula == null || socio == null)
            {
                throw new ArgumentException();
            }

            peliculaOriginal = (Pelicula)OperacionesEntidad.CreateDataCopy(pelicula, false);
            socioOriginal    = (Socio)OperacionesEntidad.CreateDataCopy(socio, false);

            using (TransactionScope tx = new TransactionScope())
            {
                // Comprobamos stock
                if (pelicula.DisponibleAlquiler == 0)
                {
                    if (pelicula.UnidadesVentaAlquiler + pelicula.UnidadesAlquiler == 0)
                    {
                        return(EstadoPedido.ModalidadNoDisponible);
                    }
                    else
                    {
                        return(EstadoPedido.StockInsuficiente);
                    }
                }

                // Comprobamos saldo
                if (socio.Saldo < _minSaldoParaAlquilar)
                {
                    return(EstadoPedido.SaldoInsuficiente);
                }

                // Actualizamos stock
                pelicula.UnidadesAlquiladas++;

                try
                {
                    peliculasAD.ActualizarPelicula(pelicula, peliculaOriginal);
                }
                catch (ChangeConflictException)
                {
                    return(EstadoPedido.ErrorConcurrencia);
                }

                // Creamos alquiler
                alquiler               = new Alquiler();
                alquiler.SocioID       = socio.UsuarioID;
                alquiler.PeliculaID    = pelicula.PeliculaID;
                alquiler.FechaAlquiler = DateTime.Now;
                alquileresAD.AgregarAlquiler(alquiler);

                // Almacenamos en histórico
                historico               = new Historico();
                historico.SocioID       = socio.UsuarioID;
                historico.PeliculaID    = pelicula.PeliculaID;
                historico.TipoOperacion = TipoOperacion.Alquiler;
                historico.Fecha         = alquiler.FechaAlquiler;

                historicosAD.AgregarHistorico(historico);

                tx.Complete();
            }

            return(EstadoPedido.Realizado);
        }