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; } }
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; } }