Пример #1
0
        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();
        }