private void InsertaPartida() { if (producto == null && TxtProductoId.Text.Trim().Length == 0) { Ambiente.Mensaje("Producto no encontrado"); return; } producto = productoController.SelectOne(TxtProductoId.Text.Trim()); if (producto == null) { return; } if (venta.VentaId <= 0) { Ambiente.Mensaje("La venta no existe"); return; } try { if ((bool)producto.Ocupado) { Ambiente.Mensaje("Operación abortada, el articulo está bloqueado por otro proceso [INVENTARIOS, AJUSTES, AUTORIZACIONES, ETC]"); return; } } catch (Exception ex) { Ambiente.Mensaje(ex.Message); } //partida a la lista var partida = new Ventap(); partida.VentaId = venta.VentaId; partida.ProductoId = producto.ProductoId; partida.Descripcion = producto.Descripcion; partida.Descuento = 0; if (Ambiente.Estacion.VenderSinStock) { partida.Cantidad = 1; } else { if (HayStockSuficiente(producto, 1)) { partida.Cantidad = 1; } else { Ambiente.Mensaje("Stock insuficiente"); return; } } partida.Precio = SeleccionaPrecio(producto, cliente); if (partida.Precio == 0) { Ambiente.Mensaje("Proceso abortado, el precio del artículo no puede ser cero. \n ARTÍCULO: " + producto.ProductoId + " Verifique los precios del artículo y el precio asignado al cliente"); return; } partida.Impuesto1 = Ambiente.GetTasaImpuesto(producto.Impuesto1Id); partida.Impuesto2 = Ambiente.GetTasaImpuesto(producto.Impuesto2Id); if (producto.TieneLote) { lote = loteController.GetLoteDisponibilidad(producto.ProductoId, 1); if (lote != null) { partida.LoteId = lote.LoteId; partida.NoLote = lote.NoLote; partida.Caducidad = lote.Caducidad; } else { Ambiente.Mensaje("Este artículo tiene control de lote, pero no hay lotes registrados. No se imprimirá el lote del artículo"); } } else { partida.LoteId = null; partida.NoLote = null; partida.Caducidad = null; } partida.Costo = producto.PrecioCompra; partida.PrecioCaja = producto.PrecioCaja; partida.ClaveProdServ = producto.ClaveProdServId.Trim().Length == 0 ? "01010101" : producto.ClaveProdServId.Trim(); partida.ClaveUnidad = producto.ClaveUnidadId.Trim().Length == 0 ? "H87" : producto.ClaveUnidadId.Trim(); partida.Unidad = producto.UnidadMedidaId.Trim().Length == 0 ? "SYS" : producto.UnidadMedidaId.Trim(); partida.ClaveImpuesto1 = SeleccionaClaveImpuesto(producto, 1); partida.ClaveImpuesto2 = SeleccionaClaveImpuesto(producto, 2); partida.TasaOcuota1 = "Tasa"; partida.TasaOcuota2 = "Tasa"; partida.SubTotal = partida.Cantidad * partida.Precio; partida.ImporteImpuesto1 = partida.SubTotal * partida.Impuesto1; partida.ImporteImpuesto2 = partida.SubTotal * partida.Impuesto2; partida.Total = partida.SubTotal + partida.ImporteImpuesto1 + partida.ImporteImpuesto2; partidas.Add(partida); //Calcular totales de partidas y venta(); CalculaTotales(); // partida al grid Malla.Rows[SigPartida].Cells[0].Value = partida.Descripcion; Malla.Rows[SigPartida].Cells[1].Value = producto.Stock; Malla.Rows[SigPartida].Cells[2].Value = partida.Cantidad; Malla.Rows[SigPartida].Cells[3].Value = Math.Round(partida.Precio, 2); Malla.Rows[SigPartida].Cells[4].Value = partida.SubTotal; Malla.Rows[SigPartida].Cells[5].Value = partida.Impuesto1; Malla.Rows[SigPartida].Cells[6].Value = partida.Impuesto2; Malla.Rows[SigPartida].Cells[7].Value = partida.Total; Malla.Rows[SigPartida].Cells[8].Value = partida.NoLote; Malla.Rows[SigPartida].Cells[9].Value = partida.ProductoId; //Scroll to the last row. if (SigPartida > 10) { Malla.FirstDisplayedScrollingRowIndex = SigPartida - 10; Malla.Rows[SigPartida].Selected = true; } ResetPartida(); }