Ejemplo n.º 1
0
        public decimal ObtenerExistencias(Situacion situacion)
        {
            switch (this.TipoDeArticulo)
            {
            case Articulos.TiposDeArticulo.Servicio:
                return(0);

            case Articulos.TiposDeArticulo.ProductoSimple:
                return(this.Connection.FieldDecimal("SELECT cantidad FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacion.Id.ToString()));

            case Articulos.TiposDeArticulo.ProductoCompuesto:
                // Calculo el stock según el elemento de la receta que se acabe primero
                decimal CantMin = decimal.MaxValue;
                foreach (ItemReceta Itm in this.Receta)
                {
                    decimal Cant = Itm.Articulo.ObtenerExistencias(situacion) / Itm.Cantidad;
                    if (Cant < CantMin)
                    {
                        CantMin = Cant;
                    }
                }
                if (CantMin == decimal.MaxValue)
                {
                    return(0);
                }
                else
                {
                    return(CantMin);
                }

            default:
                throw new Lfx.Types.DomainException("ObtenerExistencias(Situacion): No se pueden calcular las existencias para " + this.TipoDeArticulo.ToString());
            }
        }
Ejemplo n.º 2
0
 public bool Contains(string serie, Situacion situacion)
 {
     foreach (Item Itm in this)
     {
         if (Itm.Situacion.Id == situacion.Id && Itm.Serie == serie)
         {
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 3
0
        public void MoverExistencias(Lbl.Comprobantes.ComprobanteConArticulos comprob, decimal cantidad, string obs, Situacion situacionOrigen, Situacion situacionDestino, Lbl.Articulos.ColeccionDatosSeguimiento seguimiento)
        {
            decimal Saldo;

            if (this.TipoDeArticulo != Articulos.TiposDeArticulo.Servicio)
            {
                decimal CantidadEntranteOSaliente = 0;

                // stock saliente (situación de origen)
                if (situacionOrigen != null && situacionOrigen.CuentaExistencias)
                {
                    int Existe = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionOrigen.Id.ToString());
                    if (Existe == 0)
                    {
                        // No existen datos de stock para esta situación... la creo
                        qGen.Insert InsertarCantidadSituacion = new qGen.Insert("articulos_stock");
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("id_articulo", this.Id);
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("id_situacion", situacionOrigen.Id);
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("cantidad", -cantidad);
                        this.Connection.ExecuteNonQuery(InsertarCantidadSituacion);
                    }
                    else
                    {
                        // Actualizo el stock en la nueva situación
                        qGen.Update ActualizarCantidadSituacion = new qGen.Update("articulos_stock");
                        ActualizarCantidadSituacion.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""-" + Lfx.Types.Formatting.FormatStockSql(cantidad)));
                        ActualizarCantidadSituacion.WhereClause = new qGen.Where(qGen.AndOr.And);
                        ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                        ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionOrigen.Id));
                        this.Connection.ExecuteNonQuery(ActualizarCantidadSituacion);
                    }

                    if (seguimiento != null)
                    {
                        // Resto las cantidades de la situación de origen
                        foreach (Lbl.Articulos.DatosSeguimiento Dat in seguimiento)
                        {
                            qGen.Update ActualizarSeries = new qGen.Update("articulos_series");
                            if (Dat.Cantidad > 0)
                            {
                                ActualizarSeries.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""-" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                            }
                            else
                            {
                                ActualizarSeries.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                            }
                            ActualizarSeries.WhereClause = new qGen.Where(qGen.AndOr.And);
                            ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                            ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionOrigen.Id));
                            ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("serie", Dat.Variacion));
                            this.Connection.ExecuteNonQuery(ActualizarSeries);
                        }
                    }

                    CantidadEntranteOSaliente -= cantidad;
                }

                // stock entrante (situación de destino)
                if (situacionDestino != null && situacionDestino.CuentaExistencias)
                {
                    int ExisteSituacion = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionDestino.Id.ToString());
                    if (ExisteSituacion == 0)
                    {
                        // No existen datos de stock para esta situación... la creo
                        qGen.Insert InsertarCantidadSituacion = new qGen.Insert("articulos_stock");
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("id_articulo", this.Id);
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("id_situacion", situacionDestino.Id);
                        InsertarCantidadSituacion.ColumnValues.AddWithValue("cantidad", cantidad);
                        this.Connection.ExecuteNonQuery(InsertarCantidadSituacion);
                    }
                    else
                    {
                        // Actualizo el stock en la nueva situación
                        qGen.Update ActualizarCantidadSituacion = new qGen.Update("articulos_stock");
                        ActualizarCantidadSituacion.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(cantidad)));
                        ActualizarCantidadSituacion.WhereClause = new qGen.Where(qGen.AndOr.And);
                        ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                        ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionDestino.Id));
                        this.Connection.ExecuteNonQuery(ActualizarCantidadSituacion);
                    }

                    if (seguimiento != null)
                    {
                        // Agrego las cantidades en la situación de destino
                        foreach (Lbl.Articulos.DatosSeguimiento Dat in seguimiento)
                        {
                            int ExisteVariacion = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_series WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionDestino.Id.ToString() + " AND serie='" + Dat.Variacion + "'");
                            if (ExisteVariacion > 0)
                            {
                                qGen.Update ActualizarSeries = new qGen.Update("articulos_series");
                                if (Dat.Cantidad > 0)
                                {
                                    ActualizarSeries.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                }
                                else
                                {
                                    ActualizarSeries.ColumnValues.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                }
                                ActualizarSeries.WhereClause = new qGen.Where(qGen.AndOr.And);
                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionDestino.Id));
                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("serie", Dat.Variacion));
                                this.Connection.ExecuteNonQuery(ActualizarSeries);
                            }
                            else
                            {
                                qGen.Insert InsertarSerie = new qGen.Insert("articulos_series");
                                InsertarSerie.ColumnValues.AddWithValue("id_articulo", this.Id);
                                InsertarSerie.ColumnValues.AddWithValue("id_situacion", situacionDestino.Id);
                                InsertarSerie.ColumnValues.AddWithValue("serie", Dat.Variacion);
                                InsertarSerie.ColumnValues.AddWithValue("cantidad", Dat.Cantidad);
                                this.Connection.ExecuteNonQuery(InsertarSerie);
                            }
                        }
                    }

                    CantidadEntranteOSaliente += cantidad;
                }

                // Actualizo el stock actual
                if (CantidadEntranteOSaliente != 0)
                {
                    qGen.Update ActualizarCantidad = new qGen.Update("articulos");
                    ActualizarCantidad.ColumnValues.AddWithValue("stock_actual", new qGen.SqlExpression(@"""stock_actual""+" + Lfx.Types.Formatting.FormatStockSql(CantidadEntranteOSaliente)));
                    string tablaAfecta           = "articulos_cotiza";
                    Lfx.Data.FacCompraTag facCom = null;
                    //Cambia la forma de cotizar el producto.
                    if (comprob != null && comprob.Compra && comprob.Tag != null)
                    {
                        try
                        {
                            facCom = (Lfx.Data.FacCompraTag)comprob.Tag;

                            if (facCom.Afecta != 0)
                            {
                                ActualizarCantidad.ColumnValues.AddWithValue("conotramoneda", facCom.Afecta);
                                ActualizarCantidad.ColumnValues.AddWithValue("cotiza", facCom.cotiza);
                                ActualizarCantidad.ColumnValues.AddWithValue("id_moneda", facCom.id_moneda);
                                //tablaAfecta = facCom.Afecta == 1 ? "articulos_cotiza" : "personas_cotiza"; //No
                            }
                        }
                        catch
                        {
                            //
                        }
                    }


                    ActualizarCantidad.WhereClause = new qGen.Where("id_articulo", this.Id);
                    this.Connection.ExecuteNonQuery(ActualizarCantidad);

                    if (tablaAfecta != "" && facCom != null)
                    {
                        qGen.IStatement cot_ins_Comando = new qGen.Insert(tablaAfecta);
                        if (tablaAfecta == "articulos_cotiza")
                        {
                            cot_ins_Comando.ColumnValues.AddWithValue("id_articulo", this.Id);
                        }
                        else
                        {
                            cot_ins_Comando.ColumnValues.AddWithValue("id_persona", comprob.Cliente.Id);
                        }
                        cot_ins_Comando.ColumnValues.AddWithValue("id_moneda", facCom.id_moneda);
                        cot_ins_Comando.ColumnValues.AddWithValue("cotiza", facCom.cotiza);
                        cot_ins_Comando.ColumnValues.AddWithValue("estado", 1);
                        cot_ins_Comando.ColumnValues.AddWithValue("fecha", DateTime.Now);
                        this.Connection.ExecuteNonQuery(cot_ins_Comando);
                    }

                    // Si ees un artículo compuesto
                    // Propagar los cambios de stock hacia abajo.
                    // Es decir, hacer movimientos de stock de los ingredientes (sub artículos)
                    if (this.TipoDeArticulo == Articulos.TiposDeArticulo.ProductoCompuesto)
                    {
                        string ObsSubItems = "Movim. s/salida de " + this.ToString();
                        foreach (ItemReceta Itm in this.Receta)
                        {
                            Itm.Articulo.MoverExistencias(comprob, Itm.Cantidad * cantidad, ObsSubItems, situacionOrigen, situacionDestino, seguimiento);
                        }
                    }

                    // Propagar los cambios de stock hacia arriba.
                    // Es decir, si este artículo es ingrediente en la receta de otros artículos, actualizar los artículos padre para que reflejen el cambio de stock de este ingrediente.
                    ColeccionGenerica <Articulo> SuperArts = this.SuperArticulos();
                    if (SuperArts != null)
                    {
                        foreach (Articulo SuperArt in SuperArts)
                        {
                            qGen.Update UpdateSuperArt = new qGen.Update("articulos");
                            UpdateSuperArt.ColumnValues.AddWithValue("stock_actual", SuperArt.ObtenerExistencias());
                            UpdateSuperArt.WhereClause = new qGen.Where("id_articulo", SuperArt.Id);
                            this.Connection.ExecuteNonQuery(UpdateSuperArt);
                        }
                    }
                }


                if (this.Caja != null && this.Caja.Existe)
                {
                    this.Caja.Movimiento(true, Lbl.Cajas.Concepto.AjustesYMovimientos,
                                         "Movimiento de stock de artículo " + this.ToString(),
                                         new Lbl.Personas.Persona(this.Connection, Lbl.Sys.Config.Actual.UsuarioConectado.Id), this.Pvp * cantidad, Obs, null, null, null);
                }

                Saldo = this.Connection.FieldDecimal("SELECT stock_actual FROM articulos WHERE id_articulo=" + this.Id.ToString());
            }
            else
            {
                // No controla stock
                Saldo = 0;
            }

            qGen.IStatement Comando = new qGen.Insert("articulos_movim");
            Comando.ColumnValues.AddWithValue("fecha", new qGen.SqlExpression("NOW()"));
            Comando.ColumnValues.AddWithValue("id_articulo", this.Id);
            Comando.ColumnValues.AddWithValue("cantidad", cantidad);
            if (situacionOrigen == null)
            {
                Comando.ColumnValues.AddWithValue("desdesituacion", null);
            }
            else
            {
                Comando.ColumnValues.AddWithValue("desdesituacion", situacionOrigen.Id);
            }
            if (situacionDestino == null)
            {
                Comando.ColumnValues.AddWithValue("haciasituacion", null);
            }
            else
            {
                Comando.ColumnValues.AddWithValue("haciasituacion", situacionDestino.Id);
            }
            Comando.ColumnValues.AddWithValue("saldo", Saldo);
            Comando.ColumnValues.AddWithValue("obs", obs);
            Comando.ColumnValues.AddWithValue("series", seguimiento);
            if (comprob == null)
            {
                Comando.ColumnValues.AddWithValue("id_comprob", null);
            }
            else
            {
                Comando.ColumnValues.AddWithValue("id_comprob", comprob.Id);
            }

            this.Connection.ExecuteNonQuery(Comando);
        }
Ejemplo n.º 4
0
 public Item(string serie, Situacion situacion)
 {
     this.Serie     = serie;
     this.Situacion = situacion;
 }
Ejemplo n.º 5
0
                public void MoverExistencias(Lbl.Comprobantes.ComprobanteConArticulos comprob, decimal cantidad, string obs, Situacion situacionOrigen, Situacion situacionDestino, Lbl.Articulos.ColeccionDatosSeguimiento seguimiento)
		{
                        decimal Saldo;

                        if (this.TipoDeArticulo != Articulos.TiposDeArticulo.Servicio) {
                                decimal CantidadEntranteOSaliente = 0;

                                // stock saliente (situación de origen)
                                if (situacionOrigen != null && situacionOrigen.CuentaExistencias) {
                                        int Existe = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionOrigen.Id.ToString());
                                        if (Existe == 0) {
                                                // No existen datos de stock para esta situación... la creo
                                                qGen.Insert InsertarCantidadSituacion = new qGen.Insert("articulos_stock");
                                                InsertarCantidadSituacion.Fields.AddWithValue("id_articulo", this.Id);
                                                InsertarCantidadSituacion.Fields.AddWithValue("id_situacion", situacionOrigen.Id);
                                                InsertarCantidadSituacion.Fields.AddWithValue("cantidad", -cantidad);
                                                this.Connection.Execute(InsertarCantidadSituacion);
                                        } else {
                                                // Actualizo el stock en la nueva situación
                                                qGen.Update ActualizarCantidadSituacion = new qGen.Update("articulos_stock");
                                                ActualizarCantidadSituacion.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""-" + Lfx.Types.Formatting.FormatStockSql(cantidad)));
                                                ActualizarCantidadSituacion.WhereClause = new qGen.Where(qGen.AndOr.And);
                                                ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                                                ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionOrigen.Id));
                                                this.Connection.Execute(ActualizarCantidadSituacion);
                                        }

                                        if (seguimiento != null) {
                                                // Resto las cantidades de la situación de origen
                                                foreach (Lbl.Articulos.DatosSeguimiento Dat in seguimiento) {
                                                        qGen.Update ActualizarSeries = new qGen.Update("articulos_series");
                                                        if (Dat.Cantidad > 0)
                                                                ActualizarSeries.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""-" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                                        else
                                                                ActualizarSeries.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                                        ActualizarSeries.WhereClause = new qGen.Where(qGen.AndOr.And);
                                                        ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                                                        ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionOrigen.Id));
                                                        ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("serie", Dat.Variacion));
                                                        this.Connection.Execute(ActualizarSeries);
                                                }
                                        }

                                        CantidadEntranteOSaliente -= cantidad;
                                }

                                // stock entrante (situación de destino)
                                if (situacionDestino != null && situacionDestino.CuentaExistencias) {
                                        int ExisteSituacion = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionDestino.Id.ToString());
                                        if (ExisteSituacion == 0) {
                                                // No existen datos de stock para esta situación... la creo
                                                qGen.Insert InsertarCantidadSituacion = new qGen.Insert("articulos_stock");
                                                InsertarCantidadSituacion.Fields.AddWithValue("id_articulo", this.Id);
                                                InsertarCantidadSituacion.Fields.AddWithValue("id_situacion", situacionDestino.Id);
                                                InsertarCantidadSituacion.Fields.AddWithValue("cantidad", cantidad);
                                                this.Connection.Execute(InsertarCantidadSituacion);
                                        } else {
                                                // Actualizo el stock en la nueva situación
                                                qGen.Update ActualizarCantidadSituacion = new qGen.Update("articulos_stock");
                                                ActualizarCantidadSituacion.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(cantidad)));
                                                ActualizarCantidadSituacion.WhereClause = new qGen.Where(qGen.AndOr.And);
                                                ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                                                ActualizarCantidadSituacion.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionDestino.Id));
                                                this.Connection.Execute(ActualizarCantidadSituacion);
                                        }

                                        if (seguimiento != null) {
                                                // Agrego las cantidades en la situación de destino
                                                foreach (Lbl.Articulos.DatosSeguimiento Dat in seguimiento) {
                                                        int ExisteVariacion = this.Connection.FieldInt("SELECT COUNT(id_articulo) FROM articulos_series WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacionDestino.Id.ToString() + " AND serie='" + Dat.Variacion + "'");
                                                        if (ExisteVariacion > 0) {
                                                                qGen.Update ActualizarSeries = new qGen.Update("articulos_series");
                                                                if (Dat.Cantidad > 0)
                                                                        ActualizarSeries.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                                                else
                                                                        ActualizarSeries.Fields.AddWithValue("cantidad", new qGen.SqlExpression(@"""cantidad""+" + Lfx.Types.Formatting.FormatStockSql(Dat.Cantidad)));
                                                                ActualizarSeries.WhereClause = new qGen.Where(qGen.AndOr.And);
                                                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_articulo", this.Id));
                                                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("id_situacion", situacionDestino.Id));
                                                                ActualizarSeries.WhereClause.Add(new qGen.ComparisonCondition("serie", Dat.Variacion));
                                                                this.Connection.Execute(ActualizarSeries);
                                                        } else {
                                                                qGen.Insert InsertarSerie = new qGen.Insert("articulos_series");
                                                                InsertarSerie.Fields.AddWithValue("id_articulo", this.Id);
                                                                InsertarSerie.Fields.AddWithValue("id_situacion", situacionDestino.Id);
                                                                InsertarSerie.Fields.AddWithValue("serie", Dat.Variacion);
                                                                InsertarSerie.Fields.AddWithValue("cantidad", Dat.Cantidad);
                                                                this.Connection.Execute(InsertarSerie);
                                                        }
                                                }
                                        }

                                        CantidadEntranteOSaliente += cantidad;
                                }

                                // Actualizo el stock actual
                                if (CantidadEntranteOSaliente != 0) {
                                        qGen.Update ActualizarCantidad = new qGen.Update("articulos");
                                        ActualizarCantidad.Fields.AddWithValue("stock_actual", new qGen.SqlExpression(@"""stock_actual""+" + Lfx.Types.Formatting.FormatStockSql(CantidadEntranteOSaliente)));
                                        ActualizarCantidad.WhereClause = new qGen.Where("id_articulo", this.Id);
                                        this.Connection.Execute(ActualizarCantidad);

                                        // Si ees un artículo compuesto
                                        // Propagar los cambios de stock hacia abajo.
                                        // Es decir, hacer movimientos de stock de los ingredientes (sub artículos)
                                        if (this.TipoDeArticulo == Articulos.TiposDeArticulo.ProductoCompuesto) {
                                                string ObsSubItems = "Movim. s/salida de " + this.ToString();
                                                foreach (ItemReceta Itm in this.Receta) {
                                                        Itm.Articulo.MoverExistencias(comprob, Itm.Cantidad * cantidad, ObsSubItems, situacionOrigen, situacionDestino, seguimiento);
                                                }
                                        }

                                        // Propagar los cambios de stock hacia arriba.
                                        // Es decir, si este artículo es ingrediente en la receta de otros artículos, actualizar los artículos padre para que reflejen el cambio de stock de este ingrediente.
                                        ColeccionGenerica<Articulo> SuperArts = this.SuperArticulos();
                                        if (SuperArts != null) {
                                                foreach (Articulo SuperArt in SuperArts) {
                                                        qGen.Update UpdateSuperArt = new qGen.Update("articulos");
                                                        UpdateSuperArt.Fields.AddWithValue("stock_actual", SuperArt.ObtenerExistencias());
                                                        UpdateSuperArt.WhereClause = new qGen.Where("id_articulo", SuperArt.Id);
                                                        this.Connection.Execute(UpdateSuperArt);
                                                }
                                        }
                                }


                                if (this.Caja != null && this.Caja.Existe)
                                        this.Caja.Movimiento(true, Lbl.Cajas.Concepto.AjustesYMovimientos,
                                                "Movimiento de stock de artículo " + this.ToString(),
                                                new Lbl.Personas.Persona(this.Connection, Lbl.Sys.Config.Actual.UsuarioConectado.Id), this.Pvp * cantidad, Obs, null, null, null);

                                Saldo = this.Connection.FieldDecimal("SELECT stock_actual FROM articulos WHERE id_articulo=" + this.Id.ToString());
                        } else {
                                // No controla stock
                                Saldo = 0;
                        }

                        qGen.TableCommand Comando; Comando = new qGen.Insert(this.Connection, "articulos_movim");
                        Comando.Fields.AddWithValue("fecha", qGen.SqlFunctions.Now);
			Comando.Fields.AddWithValue("id_articulo", this.Id);
			Comando.Fields.AddWithValue("cantidad", cantidad);
			if(situacionOrigen == null)
				Comando.Fields.AddWithValue("desdesituacion", null);
			else
				Comando.Fields.AddWithValue("desdesituacion", situacionOrigen.Id);
			if(situacionDestino == null)
                                Comando.Fields.AddWithValue("haciasituacion", null);
			else
				Comando.Fields.AddWithValue("haciasituacion", situacionDestino.Id);
			Comando.Fields.AddWithValue("saldo", Saldo);
			Comando.Fields.AddWithValue("obs", obs);
                        Comando.Fields.AddWithValue("series", seguimiento);
                        if (comprob == null)
                                Comando.Fields.AddWithValue("id_comprob", null);
                        else
                                Comando.Fields.AddWithValue("id_comprob", comprob.Id);
			
			this.Connection.Execute(Comando);
		}
Ejemplo n.º 6
0
                public decimal ObtenerExistencias(Situacion situacion)
		{
                        switch (this.TipoDeArticulo) {
                                case Articulos.TiposDeArticulo.Servicio:
                                        return 0;
                                case Articulos.TiposDeArticulo.ProductoSimple:
                                        return this.Connection.FieldDecimal("SELECT cantidad FROM articulos_stock WHERE id_articulo=" + this.Id.ToString() + " AND id_situacion=" + situacion.Id.ToString());
                                case Articulos.TiposDeArticulo.ProductoCompuesto:
                                        // Calculo el stock según el elemento de la receta que se acabe primero
                                        decimal CantMin = decimal.MaxValue;
                                        foreach (ItemReceta Itm in this.Receta) {
                                                decimal Cant = Itm.Articulo.ObtenerExistencias(situacion) / Itm.Cantidad;
                                                if (Cant < CantMin)
                                                        CantMin = Cant;
                                        }
                                        if (CantMin == decimal.MaxValue)
                                                return 0;
                                        else
                                                return CantMin;
                                default:
                                        throw new Lfx.Types.DomainException("ObtenerExistencias(Situacion): No se pueden calcular las existencias para " + this.TipoDeArticulo.ToString());
                        }
		}