public void ComprarPeliculaSinSaldoTest()
        {
            ComprasCN  comprasCN = new ComprasCN();
            UsuariosAD usuariosAD = new UsuariosAD();
            string     nifSocio = "00000000T";
            string     codBarrasPelicula = "0686983675479";
            Socio      socio, socioOriginal;

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

            using (TransactionScope tx = new TransactionScope())
            {
                // Quitamos el saldo al socio
                socio         = usuariosAD.ObtenerSocioPorNIF(nifSocio);
                socioOriginal = (Socio)OperacionesEntidad.CreateDataCopy(socio, false);
                socio.Saldo   = 0;
                usuariosAD.ActualizarUsuario(socio, socioOriginal);

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

                Assert.AreEqual(EstadoPedido.SaldoInsuficiente, estadoPedido);
            }
        }
        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);
            }
        }
        private void RecogerPeliculaInternal(string nifSocio, string peliculaCodBarras)
        {
            Alquiler     alquiler, alquilerOriginal;
            Historico    historico;
            AlquileresAD alquileresAD = new AlquileresAD();
            HistoricosAD historicosAD = new HistoricosAD();

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

                // Actualización estado alquiler
                alquilerOriginal       = (Alquiler)OperacionesEntidad.CreateDataCopy(alquiler, false);
                alquiler.FechaRecogida = DateTime.Now;
                alquileresAD.ActualizarAlquiler(alquiler, alquilerOriginal);

                // Almacenamos en históricos
                historico               = new Historico();
                historico.PeliculaID    = alquiler.PeliculaID;
                historico.SocioID       = alquiler.SocioID;
                historico.Fecha         = alquiler.FechaAlquiler;
                historico.FechaRecogida = alquiler.FechaRecogida;
                historico.TipoOperacion = TipoOperacion.Recogida;
                historicosAD.AgregarHistorico(historico);

                tx.Complete();
            }
        }
        public void ChangeSetModificacionBorradoTest()
        {
            IMSDNVideoServices client = ConnectionHelper.ServiceClient;
            int actoresCount;

            Pelicula        pelicula = client.Peliculas_ObtenerPeliculaPorCodBarras("0045907014545", true, false);
            ActoresPelicula actorPeliculaBorrado;

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

            dataContext.Attach(pelicula);

            pelicula.Duracion = 119;
            actoresCount      = pelicula.ActoresPeliculas.Count;

            actorPeliculaBorrado = (ActoresPelicula)OperacionesEntidad.CreateDataCopy(pelicula.ActoresPeliculas[0], false);
            pelicula.ActoresPeliculas.RemoveAt(0);

            DisconnectedChangeSet changeSet = dataContext.GetChangeSet();

            client.ChangeSet_ActualizarChangeSet(changeSet);
            pelicula = client.Peliculas_ObtenerPeliculaPorCodBarras("0045907014545", true, false);
            Assert.AreEqual(119, pelicula.Duracion);
            Assert.AreEqual(actoresCount - 1, pelicula.ActoresPeliculas.Count);

            // Compensación
            dataContext.AcceptChanges();
            dataContext.Attach(pelicula);
            pelicula.Duracion = 118;
            pelicula.ActoresPeliculas.Add(actorPeliculaBorrado);
            changeSet = dataContext.GetChangeSet();
            client.ChangeSet_ActualizarChangeSet(changeSet);
        }
        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);
            }
        }
        public void ModificarActorTest()
        {
            ActoresAD           target = new ActoresAD();
            string              nombre = "Robin Williams";
            Actor               actor, actorOriginal;
            BindingList <Actor> result;

            actor         = target.ObtenerActoresPorNombre(nombre)[0];
            actorOriginal = (Actor)OperacionesEntidad.CreateDataCopy(actor, false);

            actor.UrlPersonal = "nueva url";

            using (TransactionScope tx = new TransactionScope())
            {
                target.ActualizarActor(actor, actorOriginal);
                result = target.ObtenerActoresPorNombre(nombre);

                Assert.AreEqual(1, result.Count);
                Assert.AreEqual("nueva url", result[0].UrlPersonal);
            }
        }
Example #7
0
        /// <summary>
        /// Actualiza la base de datos con todos los cambios incluidos en un Changeset
        /// </summary>
        /// <param name="changeSet">Changeset con cambios</param>
        public void ActualizarChangeSet(DisconnectedChangeSet changeSet)
        {
            EntidadesDataContext dc = GetDC();
            int    i;
            object entidad;
            ITable tabla;

            if (changeSet.Agregados != null)
            {
                for (i = 0; i < changeSet.Agregados.Count; i++)
                {
                    entidad = changeSet.Agregados[i];
                    tabla   = OperacionesEntidad.GetTablaFromEntidad(dc, entidad);
                    tabla.InsertOnSubmit(entidad);
                }
            }

            if (changeSet.Modificados != null)
            {
                for (i = 0; i < changeSet.Modificados.Count; i++)
                {
                    entidad = changeSet.Modificados[i];
                    tabla   = OperacionesEntidad.GetTablaFromEntidad(dc, entidad);
                    tabla.Attach(entidad, changeSet.ModificadosOriginal[i]);
                }
            }

            if (changeSet.Eliminados != null)
            {
                for (i = 0; i < changeSet.Eliminados.Count; i++)
                {
                    entidad = changeSet.Eliminados[i];
                    tabla   = OperacionesEntidad.GetTablaFromEntidad(dc, entidad);
                    tabla.Attach(entidad);
                    tabla.DeleteOnSubmit(entidad);
                }
            }

            dc.SubmitChanges();
        }
        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);
        }
        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);
        }