public FrmGenerarPublicacion(Publicacion publication)
        {
            InitializeComponent();
            //Trabaja en modo alta cuando se le pasa NULL como parametro
            insertMode = publication == null;

            if (!insertMode)
                CurrentPublication = publication;
        }
        public static int InsertByPublication(Publicacion publication, SqlTransaction transaction)
        {
            var regsAffected = 0;

            foreach (var rubro in publication.Rubros)
            {
                var param = new List<SPParameter> { new SPParameter("ID_Rubro", rubro.ID), new SPParameter("ID_Publicacion", publication.ID) };
                var sp = (transaction != null)
                            ? new StoreProcedure(DataBaseConst.Rubro.SPInsertRubroByPublicacion, param, transaction)
                            : new StoreProcedure(DataBaseConst.Rubro.SPInsertRubroByPublicacion, param);

                regsAffected += sp.ExecuteNonQuery(transaction);
            }

            return regsAffected;
        }
Beispiel #3
0
 public void GetObjectsById()
 {
     Factura = FacturaPersistance.GetById(_idFactura);
     Publicacion = PublicacionPersistance.GetById(_idPublicacion);
 }
        public static int Update(Publicacion publication, SqlTransaction transaction)
        {
            var param = new List<SPParameter>
                {
                    new SPParameter("ID_Publicacion", publication.ID),
                    new SPParameter("ID_Tipo_Publicacion", publication.TipoPublicacion.ID),
                    new SPParameter("Descripcion", publication.Descripcion),
                    new SPParameter("Stock", publication.Stock),
                    new SPParameter("Precio", publication.Precio),
                    new SPParameter("ID_Visibilidad", publication.Visibilidad.ID),
                    new SPParameter("ID_Estado_Publicacion", publication.EstadoPublicacion.ID),
                    new SPParameter("Permitir_Preguntas", publication.RecibirPreguntas)
                };

            var sp = (transaction != null)
                        ? new StoreProcedure(DataBaseConst.Publicacion.SPUpdate, param, transaction)
                        : new StoreProcedure(DataBaseConst.Publicacion.SPUpdate, param);

            return sp.ExecuteNonQuery(transaction);
        }
        public static int Update(Publicacion publication)
        {
            /* Lo tengo que hacer transaccionado ya que no quiero que pueda llegar a quedar un rol insertado
            sin las funcionalidades asociadas debido a un error */
            using (var transaction = DataBaseManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    Update(publication, transaction);

                    if (RubroPersistance.DeleteByPublication(publication, transaction) > 0)
                    {
                        if (RubroPersistance.InsertByPublication(publication, transaction) > 0)
                        {
                            //La unica forma que se realice la transaction: borro todas los rubros viejos e inserto los nuevos
                            transaction.Commit();
                            return 1;
                        }
                        else
                        {
                            //Tuvo que haber insertado por lo menos uno, sino es un error
                            transaction.Rollback();
                            return 0;
                        }
                    }
                    else
                    {
                        //Tuvo que haber insertado por lo menos uno, sino es un error
                        transaction.Rollback();
                        return 0;
                    }
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw new Exception("Se produjo un error durante la modificacion de la publicacion");
                }
            }
        }
        public static Publicacion Insert(Publicacion publication, SqlTransaction transaction)
        {
            var param = new List<SPParameter>
                {
                    new SPParameter("ID_Tipo_Publicacion", publication.TipoPublicacion.ID),
                    new SPParameter("Descripcion", publication.Descripcion),
                    new SPParameter("ID_Usuario", publication.UsuarioCreador.ID),
                    new SPParameter("Stock", publication.Stock),
                    new SPParameter("Fecha_Inicio", publication.FechaInicio),
                    new SPParameter("Fecha_Vencimiento", publication.FechaVencimiento),
                    new SPParameter("Precio", publication.Precio),
                    new SPParameter("ID_Visibilidad", publication.Visibilidad.ID),
                    new SPParameter("ID_Estado_Publicacion", publication.EstadoPublicacion.ID),
                    new SPParameter("Permitir_Preguntas", publication.RecibirPreguntas)
                };

            var sp = (transaction != null)
                        ? new StoreProcedure(DataBaseConst.Publicacion.SPInsert, param, transaction)
                        : new StoreProcedure(DataBaseConst.Publicacion.SPInsert, param);

            publication.ID = Convert.ToInt32(sp.ExecuteScalar(transaction));

            return publication;
        }
        public static int Insert(Publicacion publication)
        {
            //Tiene que insertar en la tabla TL_Publicacion, TL_Rubro_Publicacion
            using (var transaction = DataBaseManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    publication = Insert(publication, transaction);
                    var categoriesAdded = RubroPersistance.InsertByPublication(publication, transaction);

                    if (categoriesAdded > 0)
                    {
                        transaction.Commit();
                        return 1;
                    }

                    transaction.Rollback();
                    return 0;
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw new Exception("Se produjo un error durante la insercion de la publicacion");
                }
            }
        }
        private void LoadObjectFromUIControls(Publicacion publication)
        {
            publication.Descripcion = TxtDescripcion.Text;
            publication.Stock = Convert.ToInt32(TxtStock.Text);
            publication.TipoPublicacion = ((TipoPublicacion)CboTipoPublicacion.SelectedItem);
            publication.EstadoPublicacion = ((EstadoPublicacion)CboEstadoPublicacion.SelectedItem);
            publication.Precio = (Auction) ? Convert.ToDouble(TxtValorInicioSubasta.Text) : Convert.ToDouble(TxtPrecio.Text);
            publication.RecibirPreguntas = ChkRecibirPreguntas.Checked;
            publication.Visibilidad = ((Visibilidad)CboVisibilidad.SelectedItem);
            publication.FechaInicio = ConfigurationVariables.FechaSistema;
            publication.FechaVencimiento = ConfigurationVariables.FechaSistema.AddDays(publication.Visibilidad.Duracion);
            publication.UsuarioCreador = SessionManager.CurrentUser;

            publication.Rubros = new List<Rubro>();
            foreach (var checkedItem in LstRubro.CheckedItems)
            {
                var category = (Rubro)checkedItem;
                publication.Rubros.Add(category);
            }
        }
        private void LblListo_Click(object sender, EventArgs e)
        {
            try
            {
                #region Validations

                var exceptionMessage = string.Empty;

                if (Auction)
                {
                    if (TypesHelper.IsEmpty(TxtValorInicioSubasta.Text))
                        exceptionMessage += Environment.NewLine + "El valor de inicio de la subasta no puede ser vacío.";

                    if (!TypesHelper.IsDecimal(TxtValorInicioSubasta.Text))
                        exceptionMessage += Environment.NewLine + "El valor de inicio de la subasta debe ser decimal (o numérico).";
                }
                else
                {
                    if (TypesHelper.IsEmpty(TxtPrecio.Text))
                        exceptionMessage += Environment.NewLine + "El precio del articulo no puede ser vacío.";

                    if (!TypesHelper.IsDecimal(TxtPrecio.Text))
                        exceptionMessage += Environment.NewLine + "El precio del articulo debe ser decimal (o numérico).";
                }

                if (TypesHelper.IsEmpty(TxtDescripcion.Text))
                    exceptionMessage += Environment.NewLine + "La descripcion del articulo no puede ser vacío.";

                if (TypesHelper.IsEmpty(TxtStock.Text))
                    exceptionMessage += Environment.NewLine + "El stock del articulo no puede ser vacío.";

                if (!TypesHelper.IsNumeric(TxtStock.Text))
                    exceptionMessage += Environment.NewLine + "El stock del articulo debe ser numérico.";

                if (LstRubro.CheckedItems.Count == 0)
                    exceptionMessage += Environment.NewLine + "Debe informar por lo menos un rubro.";

                if (!TypesHelper.IsEmpty(exceptionMessage))
                    throw new Exception(exceptionMessage);

                #endregion

                if (insertMode)
                {
                    #region Insert the new publication

                    if (CboVisibilidad.Text == "Gratis" && CboEstadoPublicacion.Text == "Publicada")
                    {
                        var freePublicationsActive = PublicacionPersistance.GetAllActiveAndFreeByUser(SessionManager.CurrentUser.ID);
                        if (freePublicationsActive > 2)
                            throw new Exception("No se puede generar la publicación, ya que cuenta con tres publicaciones activas con visibilidad 'Gratis'.");
                    }

                    var publication = new Publicacion();

                    LoadObjectFromUIControls(publication);

                    var dialogAnswer = MessageBox.Show("Esta seguro que quiere insertar la nueva publicacion?", "Atencion", MessageBoxButtons.YesNo);
                    if (dialogAnswer == DialogResult.Yes)
                    {
                        if (PublicacionPersistance.Insert(publication) == 1)
                        {
                            MessageBox.Show("Se inserto satisfactoriamente la nueva publicacion", "Atencion");
                            CompleteAction = true;
                            Close();
                        }
                    }

                    #endregion
                }
                else
                {
                    #region Update an existing publication

                    #region Validations

                    var messageExceptions = string.Empty;

                    //Realizo la validación solo cuando cambió o el estado o el tipo de publicación
                    if (CurrentPublication.EstadoPublicacion.Descripcion != CboEstadoPublicacion.Text || CurrentPublication.Visibilidad.Descripcion != CboVisibilidad.Text)
                    {
                        if (CboVisibilidad.Text == "Gratis" && CboEstadoPublicacion.Text == "Publicada")
                        {
                            var freePublicationsActive = PublicacionPersistance.GetAllActiveAndFreeByUser(SessionManager.CurrentUser.ID);
                            if (freePublicationsActive > 2)
                                throw new Exception("No se puede generar la publicación, ya que cuenta con tres publicaciones activas con visibilidad 'Gratis'.");
                        }
                    }

                    if (CurrentPublication.EstadoPublicacion.Descripcion == "Publicada" && CboEstadoPublicacion.Text == "Borrador")
                        messageExceptions += "No se puede cambiar el estado de una publicacion 'Publicada' a 'Borrador'.";

                    if (CurrentPublication.EstadoPublicacion.Descripcion == "Publicada" && CurrentPublication.Stock > Convert.ToInt32(TxtStock.Text))
                        messageExceptions += Environment.NewLine + "No se puede decrementar el stock de una publicacion en estado 'Publicada'.";

                    if (!TypesHelper.IsEmpty(messageExceptions))
                        throw new Exception(messageExceptions);

                    #endregion

                    var oldDescription = CurrentPublication.Descripcion;
                    LoadObjectFromUIControls(CurrentPublication);

                    var dialogAnswer = MessageBox.Show(string.Format("Esta seguro que quiere modificar la publicacion {0}?", oldDescription), "Atencion", MessageBoxButtons.YesNo);
                    if (dialogAnswer == DialogResult.Yes)
                    {
                        if (CboTipoPublicacion.Text == "Subasta" && CboEstadoPublicacion.Text == "Finalizada")
                        {
                            using (var transaction = DataBaseManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable))
                            {
                                if (PublicacionPersistance.Update(CurrentPublication, transaction) == 1)
                                {
                                    var lastOffer = OfertaPersistance.GetLastOfertaByPublication(CurrentPublication.ID, transaction);

                                    //No tiene ofertas, no genero ningun registro en la tabla de compras
                                    if (lastOffer == null)
                                    {
                                        CommitTransaction(transaction);
                                        return;
                                    }

                                    var purchase = CompraPersistance.Insert(lastOffer.ConvertToPurchase(), transaction);

                                    //Commiteo la transaccion solo si pudo insertar la compra en la base de datos
                                    if (purchase.ID != 0)
                                    {
                                        CommitTransaction(transaction);
                                        return;
                                    }
                                    else
                                        transaction.Rollback();
                                }
                                else
                                    transaction.Rollback();
                            }
                        }
                        else if (PublicacionPersistance.Update(CurrentPublication) == 1)
                        {
                            MessageBox.Show("Se modifico satisfactoriamente la publicacion", "Atencion");
                            CompleteAction = true;
                            Close();
                        }
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Atencion");
            }
        }
Beispiel #10
0
 public FrmPreguntar(Publicacion unaPublicacion)
 {
     InitializeComponent();
     CurrentPublication = unaPublicacion;
 }