Exemple #1
0
        private void RefreshList()
        {
            if (SituacionOrigen != null && SituacionOrigen.CuentaExistencias)
            {
                Lbl.Articulos.ColeccionDatosSeguimiento SelectedSeries = new Lbl.Articulos.ColeccionDatosSeguimiento();
                if (m_DatosSeguimiento != null && m_DatosSeguimiento.Count > 0)
                {
                    SelectedSeries.AddRange(m_DatosSeguimiento);
                }

                ListaDatosSeguimiento.BeginUpdate();
                ListaDatosSeguimiento.Items.Clear();

                System.Data.DataTable TablaListaItem = this.Connection.Select("SELECT serie, cantidad FROM articulos_series WHERE id_articulo=" + this.Articulo.Id.ToString() + " AND cantidad>0 AND id_situacion=" + this.SituacionOrigen.Id.ToString());
                foreach (System.Data.DataRow RowItem in TablaListaItem.Rows)
                {
                    string  Variacion      = RowItem["serie"].ToString();
                    decimal StockVariacion = System.Convert.ToDecimal(RowItem["cantidad"]);

                    ListViewItem Itm = ListaDatosSeguimiento.Items.Add(Variacion);
                    Itm.UseItemStyleForSubItems = false;
                    Itm.SubItems[0].Text        = Variacion;
                    Itm.SubItems.Add("0");
                    Itm.SubItems.Add(System.Convert.ToInt32(StockVariacion).ToString());
                    Itm.SubItems[2].ForeColor = this.DisplayStyle.DataAreaGrayTextColor;
                    if (SelectedSeries.ContainsKey(Variacion))
                    {
                        if (SelectedSeries[Variacion].Cantidad-- > 0)
                        {
                            Itm.Checked = SelectedSeries.ContainsKey(Variacion);
                        }
                    }
                }

                ListaDatosSeguimiento.CheckBoxes = true;
                ListaDatosSeguimiento.EndUpdate();
                ListaDatosSeguimiento.Visible = true;
                if (ListaDatosSeguimiento.Items.Count > 0)
                {
                    ListaDatosSeguimiento.Items[0].Selected = true;
                    ListaDatosSeguimiento.Items[0].Focused  = true;
                }
                VariacionesCantidades.Visible = false;
                TextoLibre = false;
            }
            else
            {
                ListaDatosSeguimiento.Visible = false;
                VariacionesCantidades.Visible = true;
                TextoLibre = true;
                VariacionesCantidades.DatosSeguimiento = m_DatosSeguimiento;
            }
        }
Exemple #2
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);
        }
                private void RefreshList()
                {
                        if (SituacionOrigen != null && SituacionOrigen.CuentaExistencias) {
                                Lbl.Articulos.ColeccionDatosSeguimiento SelectedSeries = new Lbl.Articulos.ColeccionDatosSeguimiento();
                                if (m_DatosSeguimiento != null && m_DatosSeguimiento.Count > 0)
                                        SelectedSeries.AddRange(m_DatosSeguimiento);

                                ListaDatosSeguimiento.BeginUpdate();
                                ListaDatosSeguimiento.Items.Clear();

                                System.Data.DataTable TablaListaItem = this.Connection.Select("SELECT serie, cantidad FROM articulos_series WHERE id_articulo=" + this.Articulo.Id.ToString() + " AND cantidad>0 AND id_situacion=" + this.SituacionOrigen.Id.ToString());
                                foreach (System.Data.DataRow RowItem in TablaListaItem.Rows) {
                                        string Variacion = RowItem["serie"].ToString();
                                        decimal StockVariacion = System.Convert.ToDecimal(RowItem["cantidad"]);

                                        ListViewItem Itm = ListaDatosSeguimiento.Items.Add(Variacion);
                                        Itm.UseItemStyleForSubItems = false;
                                        Itm.SubItems[0].Text = Variacion;
                                        Itm.SubItems.Add("0");
                                        Itm.SubItems.Add(System.Convert.ToInt32(StockVariacion).ToString());
                                        Itm.SubItems[2].ForeColor = this.DisplayStyle.DataAreaGrayTextColor;
                                        if (SelectedSeries.ContainsKey(Variacion)) {
                                                if (SelectedSeries[Variacion].Cantidad-- > 0)
                                                        Itm.Checked = SelectedSeries.ContainsKey(Variacion);
                                        }
                                }

                                ListaDatosSeguimiento.CheckBoxes = true;
                                ListaDatosSeguimiento.EndUpdate();
                                ListaDatosSeguimiento.Visible = true;
                                if (ListaDatosSeguimiento.Items.Count > 0) {
                                        ListaDatosSeguimiento.Items[0].Selected = true;
                                        ListaDatosSeguimiento.Items[0].Focused = true;
                                }
                                VariacionesCantidades.Visible = false;
                                TextoLibre = false;
                        } else {
                                ListaDatosSeguimiento.Visible = false;
                                VariacionesCantidades.Visible = true;
                                TextoLibre = true;
                                VariacionesCantidades.DatosSeguimiento = m_DatosSeguimiento;
                        }
                }