Пример #1
0
        /// <summary>
        /// Devuelve una colección de artículos de los cuales este es un ingrediente.
        /// </summary>
        public ColeccionGenerica <Articulo> SuperArticulos()
        {
            System.Data.DataTable SuperArticulos = this.Connection.Select("SELECT DISTINCT id_articulo FROM articulos_recetas WHERE id_item=" + this.Id.ToString());
            if (SuperArticulos == null || SuperArticulos.Rows.Count == 0)
            {
                return(null);
            }
            ColeccionGenerica <Articulo> Res = new ColeccionGenerica <Articulo>(this.Connection, SuperArticulos);

            return(Res);
        }
Пример #2
0
        /// <summary>
        /// Propaga los cambios de costo 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 costo de este ingrediente.
        /// </summary>
        public void RecalcularCostoSuperArticulos()
        {
            ColeccionGenerica <Articulo> SuperArts = this.SuperArticulos();

            if (SuperArts != null)
            {
                foreach (Articulo SuperArt in SuperArts)
                {
                    SuperArt.Cargar();
                    qGen.Update UpdateSuperArt = new qGen.Update("articulos");
                    UpdateSuperArt.ColumnValues.AddWithValue("costo", SuperArt.ObtenerCosto());
                    UpdateSuperArt.WhereClause = new qGen.Where("id_articulo", SuperArt.Id);
                    this.Connection.ExecuteNonQuery(UpdateSuperArt);
                    SuperArt.RecalcularCostoSuperArticulos();
                }
            }
        }
Пример #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);
        }
Пример #4
0
                public override void Crear()
                {
                        m_Impresoras = new ColeccionGenerica<Lbl.Impresion.TipoImpresora>(this.Connection);

                        base.Crear();
                }
Пример #5
0
 public static ColeccionGenerica<Componente> Todos()
 {
         if (m_Todos == null) {
                 System.Data.DataTable Comps = Lfx.Workspace.Master.MasterConnection.Select("SELECT * FROM sys_components");
                 m_Todos = new ColeccionGenerica<Componente>(Lfx.Workspace.Master.MasterConnection, Comps);
         }
         return m_Todos;
 }
Пример #6
0
 public static ColeccionGenerica<Etiqueta> ObtenerPorTabla(string tablaDeDatos)
 {
         ColeccionGenerica<Etiqueta> Res = new ColeccionGenerica<Etiqueta>();
         foreach (Etiqueta Et in Lbl.Etiqueta.Todas) {
                 if (Et.TablaDatos == tablaDeDatos)
                         Res.Add(Et);
         }
         return Res;
 }
Пример #7
0
        public override void Crear()
        {
            m_Impresoras = new ColeccionGenerica <Lbl.Impresion.TipoImpresora>(this.Connection);

            base.Crear();
        }
Пример #8
0
 /// <summary>
 /// Devuelve una colección de artículos de los cuales este es un ingrediente.
 /// </summary>
 public ColeccionGenerica<Articulo> SuperArticulos()
 {
         System.Data.DataTable SuperArticulos = this.Connection.Select("SELECT DISTINCT id_articulo FROM articulos_recetas WHERE id_item=" + this.Id.ToString());
         if (SuperArticulos == null || SuperArticulos.Rows.Count == 0)
                 return null;
         ColeccionGenerica<Articulo> Res = new ColeccionGenerica<Articulo>(this.Connection, SuperArticulos);
         return Res;
 }