private void RefreshSources(List <HistoryCompra> history) { ClearDataGridView(); var historyDictionary = new Dictionary <int, HistoryCompra>(); if (history == null) { //The datasource must be all the publications not calified records stored in the database _history = CompraPersistance.GetAllCompras(SessionManager.CurrentUser); historyDictionary = _history.ToDictionary(a => a.ID_Compra, a => a);; } else { //The datasource must be the list of publications not calified received as parameter historyDictionary = history.ToDictionary(a => a.ID_Compra, a => a); } var bind = historyDictionary.Values.Select(a => new { Compra = a.ID_Compra, Descripcion = a.Descripcion, Fecha = a.Compra_Fecha, Precio = string.Format("$ {0}", a.Precio), Cantidad = a.Compra_Cantidad }); dgvHistory.DataSource = bind.ToList(); dgvHistory.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dgvHistory.CurrentCell = null; }
public void GetObjectsById() { UsuarioCreador = UsuarioPersistance.GetById(_usuarioCreador); Visibilidad = VisibilidadPersistance.GetById(_visibilidad); EstadoPublicacion = EstadoPublicacionPersistance.GetById(_estadoPublicacion); TipoPublicacion = TipoPublicacionPersistance.GetById(_tipoPublicacion); Rubros = RubroPersistance.GetByPublicationId(ID); Compras = CompraPersistance.GetByPublicationId(ID); }
private void LblComprar_Click(object sender, EventArgs e) { try { if (SessionManager.CurrentRol.Descripcion == "Administrador General") { throw new Exception("Siendo un administrador no puede comprar ni ofertar"); } List <PublicacionNotCalified> publications = CalificacionPersistance.GetAllPubicacionNotCalified(SessionManager.CurrentUser); if (publications.Count > 5) { throw new Exception("Tiene demasiadas compras sin calificar, por favor califíquelas para poder realizar una compra"); } //Valido que ingrese una cantidad válida (mayor a 0 y menor que el stock) if (txtCantidad.Text == "" || Int32.Parse(txtCantidad.Text) < 0 || Int32.Parse(txtCantidad.Text) > Int32.Parse(lblStock.Text)) { throw new Exception("Ingrese una cantidad válida (mayor a 0 y menor que el stock actual)"); } //Creo la nueva compra y la inserto Compra newPurchase = new Compra(); newPurchase.Usuario = SessionManager.CurrentUser; newPurchase.Publicacion = CurrentPublication; newPurchase.Fecha = ConfigurationVariables.FechaSistema; newPurchase.Cantidad = Int32.Parse(txtCantidad.Text); newPurchase = CompraPersistance.Insert(newPurchase, null); //Resto el stock de la publicación CurrentPublication.Stock = CurrentPublication.Stock - newPurchase.Cantidad; if (CurrentPublication.Stock == 0) { CurrentPublication.EstadoPublicacion = EstadoPublicacionPersistance.GetById(4); //finalizada } PublicacionPersistance.Update(CurrentPublication); //Le muestro al usuario los datos del vendedor var frmDatosVendedor = new FrmDatosVendedor(CurrentPublication.UsuarioCreador); frmDatosVendedor.ShowDialog(); RefreshSources(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void UpdateFinishedAuctions() { List <Publicacion> list = PublicacionPersistance.GetFinishedAuctions(); foreach (Publicacion publication in list) { Oferta lastOffer = OfertaPersistance.GetLastOfertaByPublication(publication.ID); //Si tuvo al menos una oferta, genero la nueva compra correspondiente a esta subasta if (lastOffer != null) { var purchase = new Compra(); purchase.IdPublicacion = publication.ID; purchase.IdUsuario = lastOffer.IdUsuario; purchase.Fecha = lastOffer.Fecha; purchase.Cantidad = 1; CompraPersistance.Insert(purchase, null); } //Finalizo la publicacion publication.EstadoPublicacion = EstadoPublicacionPersistance.GetById(4); //finalizada PublicacionPersistance.Update(publication); } }
private void LblBuscar_Click(object sender, EventArgs e) { try { #region Validations var filtersSetted = false; var exceptionMessage = string.Empty; if (!TypesHelper.IsEmpty(txtCodigo.Text)) { filtersSetted = true; if (!TypesHelper.IsNumeric(txtCodigo.Text)) { exceptionMessage += Environment.NewLine + "El código debe ser numérico."; } } if (!TypesHelper.IsEmpty(txtDesc.Text)) { filtersSetted = true; } if (!TypesHelper.IsEmpty(txtPrecio.Text)) { filtersSetted = true; if (!TypesHelper.IsDecimal(txtPrecio.Text)) { exceptionMessage += Environment.NewLine + "El precio de la publicacion ser decimal (o numérico)."; } } if (!TypesHelper.IsEmpty(txtFecha.Text)) { filtersSetted = true; } if (!TypesHelper.IsEmpty(txtCantidad.Text)) { filtersSetted = true; if (!TypesHelper.IsNumeric(txtCantidad.Text)) { exceptionMessage += Environment.NewLine + "La cantidad debe ser numérica."; } } if (!filtersSetted) { exceptionMessage = "No se puede realizar la busqueda ya que no se informó ningún filtro"; } if (!TypesHelper.IsEmpty(exceptionMessage)) { throw new Exception(exceptionMessage); } #endregion var filters = new HistoryCompraFilters { Codigo = (!TypesHelper.IsEmpty(txtCodigo.Text)) ? Convert.ToInt32(txtCodigo.Text) : (int?)null, Descripcion = (!TypesHelper.IsEmpty(txtDesc.Text)) ? txtDesc.Text : null, Precio = (!TypesHelper.IsEmpty(txtPrecio.Text)) ? Convert.ToDouble(txtPrecio.Text) : (double?)null, Fecha = (!TypesHelper.IsEmpty(txtFecha.Text)) ? txtFecha.Text : null, Cantidad = (!TypesHelper.IsEmpty(txtCantidad.Text)) ? Convert.ToInt32(txtCantidad.Text) : (int?)null }; var historyCompras = (cBExact.Checked) ? CompraPersistance.GetAllComprasByParameters(SessionManager.CurrentUser, filters) : CompraPersistance.GetAllComprasByParametersLike(SessionManager.CurrentUser, filters); if (historyCompras == null || historyCompras.Count == 0) { throw new Exception("No se encontraron compras según los filtros informados."); } RefreshSources(historyCompras); } catch (Exception ex) { MessageBox.Show(ex.Message, "Atención"); ClearFiltersAndTable(); } }
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"); } }
private void LblFacturar_Click(object sender, EventArgs e) { #region Validaciones var exceptionMessage = string.Empty; if (TypesHelper.IsEmpty(TxtCantidad.Text) || !TypesHelper.IsNumeric(TxtCantidad.Text)) { exceptionMessage = "Ingrese una cantidad correcta de publicaciones a facturar"; } if (PagaConTarjeta) { #region Validaciones datos tarjeta if (TypesHelper.IsEmpty(TxtCodSeguridad.Text)) { exceptionMessage += Environment.NewLine + "El codigo de seguridad de la tarjeta es obligatorio"; } if (!TypesHelper.IsNumeric(TxtCodSeguridad.Text)) { exceptionMessage += Environment.NewLine + "El codigo de seguridad de la tarjeta debe ser numerico"; } if (TypesHelper.IsEmpty(TxtDni.Text)) { exceptionMessage += Environment.NewLine + "El numero de documento del titular de la tarjeta es obligatorio"; } if (!TypesHelper.IsNumeric(TxtDni.Text)) { exceptionMessage += Environment.NewLine + "El numero de documento del titular de la tarjeta debe ser numerico"; } if (TypesHelper.IsEmpty(TxtNroTarjeta.Text)) { exceptionMessage += Environment.NewLine + "El numero de la tarjeta es obligatorio"; } if (!TypesHelper.IsNumeric(TxtNroTarjeta.Text)) { exceptionMessage += Environment.NewLine + "El numero de la tarjeta debe ser numerico"; } if (TypesHelper.IsEmpty(TxtTarjeta.Text)) { exceptionMessage += Environment.NewLine + "La descripcion de la tarjeta es obligatorio"; } if (TypesHelper.IsEmpty(TxtTitular.Text)) { exceptionMessage += Environment.NewLine + "El nombre del titular de la tarjeta es obligatorio"; } if (TypesHelper.IsEmpty(TxtVencimiento.Text)) { exceptionMessage += Environment.NewLine + "La fecha de vencimiento de la tarjeta es obligatorio"; } if (!TypesHelper.IsNumeric(TxtVencimiento.Text)) { exceptionMessage += Environment.NewLine + "La fecha de vencimiento de la tarjeta debe ser numerico"; } #endregion } if (!TypesHelper.IsEmpty(exceptionMessage)) { MessageBox.Show(exceptionMessage, "Atencion"); return; } #endregion #region Obtengo las publicaciones que voy a rendir var cant = Convert.ToInt32(TxtCantidad.Text.Trim()); if (cant > LstPublicaciones.Items.Count) { cant = LstPublicaciones.Items.Count; } var listaPublicacionesAFacturar = PublicationsList.GetRange(0, cant); var itemsFactura = new List <ItemFactura>(); #endregion #region Obtengo todos los items de la factura foreach (var publicacionFacturar in listaPublicacionesAFacturar) { var comprasPorPublicacion = CompraPersistance.GetByPublicationId(publicacionFacturar.ID); if (comprasPorPublicacion != null) { //Pueden ser tanto compras inmediatas o subastas, esta hecho de forma polimorfica foreach (var compra in comprasPorPublicacion) { itemsFactura.Add(compra.ConvertToItemFactura()); } } //Agrego el item factura de la publicacion en si misma (aunque no tenga compras) itemsFactura.Add(publicacionFacturar.ConvertToItemFactura()); } #endregion using (var transaction = DataBaseManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable)) { try { var dialogAnswer = MessageBox.Show("¿Está seguro que quiere facturar " + cant + " publicacion/es?", "Atención", MessageBoxButtons.YesNo); if (dialogAnswer == DialogResult.Yes) { #region Armo y guardo la factura en si misma var factura = new Factura { Fecha = ConfigurationVariables.FechaSistema, Numero = FacturaPersistance.GetUltimoNumeroFactura(transaction) + 1, FormaPago = FormaPagoPersistance.GetById((int)CboFormaPago.SelectedValue, transaction), Usuario = (Usuario)SessionManager.CurrentUser, Total = itemsFactura.Sum(item => item.Monto) }; //Guardo la factura en la base de datos (y me retorna la factura insertada con el ID correspondiente) factura = FacturaPersistance.InsertFactura(factura, transaction); #endregion if (factura.ID != 0) { Dictionary <int, int> visibilidadesPorUsuario = VisibilidadPersistance.GetAllByUser(SessionManager.CurrentUser, transaction); #region Guardo los items en la base //Creación de los Items de la Factura foreach (var item in itemsFactura) { item.Factura = factura; #region Logica de bonificacion de items /* Realizo la modificacion del contador solo si el item generado surgio a partir * de una compra y no es el item de la publicacion en si misma. */ if (item.ContadorBonificacion) { var idVisibilidad = item.Publicacion.Visibilidad.ID; if (visibilidadesPorUsuario.ContainsKey(idVisibilidad)) { visibilidadesPorUsuario[idVisibilidad]++; } else { visibilidadesPorUsuario.Add(idVisibilidad, 1); } if (visibilidadesPorUsuario[idVisibilidad] == 10) { item.Monto = visibilidadesPorUsuario[idVisibilidad] = 0; } } #endregion } var insertoCorrectamente = ItemFacturaPersistance.InsertItemsFactura(itemsFactura, transaction); if (!insertoCorrectamente) { throw new Exception("Se produjo un error durante la insercion de los items de la factura"); } #endregion #region Guardo la informacion de las visibilidades insertoCorrectamente = VisibilidadPersistance.InsertVisibilidadesRendidasPorUsuario(visibilidadesPorUsuario, SessionManager.CurrentUser.ID, transaction); if (!insertoCorrectamente) { throw new Exception("Se produjo un error durante la insercion de la informacion de las visibilidades rendidas por usuario"); } #endregion #region Guardo la informacion de la tarjeta de credito if (PagaConTarjeta) { var tarjeta = new TarjetaCredito { Tarjeta = TxtTarjeta.Text, NumeroTarjeta = Convert.ToInt32(TxtNroTarjeta.Text), Vencimiento = Convert.ToInt32(TxtVencimiento.Text), CodigoSeguridad = Convert.ToInt32(TxtCodSeguridad.Text), Titular = TxtTitular.Text, DniTitular = Convert.ToInt32(TxtDni.Text), Factura = factura }; tarjeta = TarjetaCreditoPersistance.Insert(tarjeta, transaction); if (tarjeta.ID == 0) { throw new Exception("Se produjo un error durante la insercion de la informacion de la tarjeta"); } } #endregion transaction.Commit(); MessageBox.Show("Se facturaron satisfactoriamente las publicaciones", "Atencion"); CompleteAction = true; Close(); } else { transaction.Rollback(); } } } catch (Exception ex) { transaction.Rollback(); TxtCantidad.Clear(); MessageBox.Show(ex.Message, "Atencion"); } } }