private void Marcaciones(int indice) { //esta función se activa cuando se marca un albarán string VenAlb = dataGridView_Albaranes.Rows[indice].Cells[1].Value.ToString(); string Anyo = dataGridView_Albaranes.Rows[indice].Cells[3].Value.ToString(); //string VenFec = dataGridView_Albaranes.Rows[indice].Cells[4].Value.ToString(); //string VenBru = dataGridView_Albaranes.Rows[indice].Cells[6].Value.ToString(); //string VenIva = dataGridView_Albaranes.Rows[indice].Cells[7].Value.ToString(); //string VenRec = dataGridView_Albaranes.Rows[indice].Cells[8].Value.ToString(); //comprobar si estaba marcada bool marcada = false; if (dataGridView_Albaranes.Rows[indice].Cells[0].Value.ToString().ToLower() == "true") { marcada = true; } if (marcada) { //si esta marcada se va a desmarcar dataGridView_Albaranes.Rows[indice].Cells[0].Value = false; for (int y = 0; y < 2; y++) { for (int x = 0; x < dataGridView_Facturado.Rows.Count; x++) { int row = 0; bool encontrada = false; if (dataGridView_Facturado.Rows[x].Cells[4].Value.ToString() == VenAlb) { encontrada = true; row = x; } if (encontrada == true) { dataGridView_Facturado.Rows.Remove(dataGridView_Facturado.Rows[row]); Renumerar_Grid(); x--; } } } } else { dataGridView_Albaranes.Rows[indice].Cells[0].Value = true; int contador = dataGridView_Facturado.Rows.Count + 1; //lectura de lineas de albarán ArrayList Lineas = Funciones.Lineas_Albaran(VenAlb, Anyo, CnO); for (int x = 0; x < Lineas.Count; x++) { detalle_linea_albaran linea_albaran = (detalle_linea_albaran)Lineas[x]; clase_linea_factura linea_factura = new clase_linea_factura(); linea_factura.Albaran = VenAlb; linea_factura.Anyo = textBox_Anyo.Text; linea_factura.AnyoAlb = Anyo; linea_factura.ArtCod = linea_albaran.ArtCod; linea_factura.Cajas = linea_albaran.VelBul; linea_factura.Factura = ""; linea_factura.Importe = Funciones.Formatea(linea_albaran.VelImp); linea_factura.Kilos = linea_albaran.VelKil; linea_factura.Linea = contador.ToString(); linea_factura.LineaAlbaran = linea_albaran.VelLin; linea_factura.PartAnyo = linea_albaran.PartAnyo; linea_factura.Partida = linea_albaran.Partida; linea_factura.Precio = linea_albaran.VelPre; linea_factura.Serie = comboBox_Serie.Text; linea_factura.Traza = linea_albaran.VelTrz; linea_factura.PartAlm = linea_albaran.PartAlm; //se ha creado una línea de factura a partir de las lineas del albarán y ahora se agrega por binding dataSource2.Add(linea_factura); contador++; } } }
private void button_Grabar_Click(object sender, EventArgs e) { //grabar las líneas ArrayList Lista_Albaranes = new ArrayList(); for (int x = 0; x < dataGridView_Albaranes.Rows.Count; x++) { if (dataGridView_Albaranes.Rows[x].Cells[0].FormattedValue.ToString().ToLower() == "true") { dato_albaran dato = new dato_albaran(); dato.VenAlb = dataGridView_Albaranes.Rows[x].Cells[1].Value.ToString(); dato.Anyo = dataGridView_Albaranes.Rows[x].Cells[3].Value.ToString(); Lista_Albaranes.Add(dato); } } //comprobar si la factura tiene líneas if (Lista_Albaranes.Count > 0) { //si tiene se graban los cambios //pero tiene que hacerse con un UPDATE en vez de un INSERT //cabecera string observaciones = textBox_Observaciones.Text.Replace("'", "''"); if (observaciones.Length > 99) { observaciones = observaciones.Substring(0, 99); } string textopie = textBox_TextoPie.Text.Replace("'", "''"); if (textopie.Length > 199) { textopie = textopie.Substring(0, 199); } string textocabe = textBox_TextoCabecera.Text.Replace("'", "''"); if (textocabe.Length > 199) { textocabe = textocabe.Substring(0, 199); } string update_cabecera = "UPDATE FACTV_CABE SET DetCod=" + textBox_DetCod.Text + ", BI1=" + textBox_BI.Text.Replace(",", ".") + ", IVA1=" + textBox_IVA.Text.Replace(",", ".") + ", RE1=" + textBox_Recargo.Text.Replace(",", ".") + ", ImpteFactura=" + textBox_Importe.Text.Replace(",", ".") + ", ImptePendiente=" + textBox_Importe.Text.Replace(",", ".") + ", "; update_cabecera += " Observaciones='" + observaciones + "', TextoPie='" + textopie + "', TextoCabe='" + textocabe + "' "; update_cabecera += " WHERE Factura=" + textBox_Factura.Text + " AND Anyo=" + textBox_Anyo.Text + " AND Serie='" + textBox_Serie.Text + "' "; int res_cabecera = EjecutaNonQuery(update_cabecera); Funciones.Escribe_LOG("Se ha modificado una factura. Se incluye el update a continuación.", "MODIFICAR", CnO); Funciones.Escribe_LOG(update_cabecera, "MODIFICAR", CnO); //hay que borrar las líneas anteriores y escribir las nuevas string delete_lineas = "DELETE FACTV_LINEAS WHERE Factura=" + textBox_Factura.Text + " AND Anyo=" + textBox_Anyo.Text + " AND Serie='" + textBox_Serie.Text + "' "; int res_delete = EjecutaNonQuery(delete_lineas); //hay que desmarcar también los albaranes que estaban marcados string desmarca_albaranes = "UPDATE VENALB_CABE SET VenNfp = NULL, AnyoFra = NULL, SerieFra = NULL WHERE VenNfp=" + textBox_Factura.Text + " AND AnyoFra=" + textBox_Anyo.Text + " AND SerieFra='" + textBox_Serie.Text + "' "; int res_desmarcar = EjecutaNonQuery(desmarca_albaranes); //y marcar los nuevos Funciones.Marcar_Ventas(textBox_Factura.Text, textBox_Anyo.Text, textBox_Serie.Text, Lista_Albaranes, CnO); //y ahora escribimos las nuevas, código basado en Funciones.Facturar ArrayList Lista_Lineas_Factura = new ArrayList(); int contador = 1; for (int y = 0; y < Lista_Albaranes.Count; y++) { dato_albaran albaran = (dato_albaran)Lista_Albaranes[y]; ArrayList Lista_Lineas_Albaran = Funciones.Lineas_Albaran(albaran.VenAlb, albaran.Anyo, CnO); if (Lista_Lineas_Albaran != null) { for (int x = 0; x < Lista_Lineas_Albaran.Count; x++) { detalle_linea_albaran linea_albaran = (detalle_linea_albaran)Lista_Lineas_Albaran[x]; clase_linea_factura linea_factura = new clase_linea_factura(); linea_factura.Albaran = albaran.VenAlb; linea_factura.Anyo = textBox_Anyo.Text; linea_factura.AnyoAlb = albaran.Anyo; linea_factura.ArtCod = linea_albaran.ArtCod; linea_factura.Cajas = linea_albaran.VelBul; linea_factura.Factura = textBox_Factura.Text; linea_factura.Importe = linea_albaran.VelImp; linea_factura.Kilos = linea_albaran.VelKil; linea_factura.Linea = contador.ToString(); linea_factura.LineaAlbaran = linea_albaran.VelLin; linea_factura.PartAnyo = linea_albaran.PartAnyo; linea_factura.Partida = linea_albaran.Partida; linea_factura.Precio = linea_albaran.VelPre; linea_factura.Serie = textBox_Serie.Text; linea_factura.Traza = linea_albaran.VelTrz; linea_factura.PartAlm = linea_albaran.PartAlm; Lista_Lineas_Factura.Add(linea_factura); contador++; } } } for (int x = 0; x < Lista_Lineas_Factura.Count; x++) { clase_linea_factura linea = (clase_linea_factura)Lista_Lineas_Factura[x]; string insert_linea = "INSERT FACTV_LINEAS(Factura, Anyo, Serie, LinF, VelAlb, AnyoAlb, VelLin, ArtCod, VelBul, VelKil, VelPre, VelTrz, VelImp, Partida, PartAnyo, PartAlm) "; insert_linea += " VALUES (" + textBox_Factura.Text + ", " + textBox_Anyo.Text + ", '" + textBox_Serie.Text + "', " + linea.Linea + ", " + linea.Albaran + ", " + linea.AnyoAlb + ", " + linea.LineaAlbaran + ", " + linea.ArtCod + ", " + linea.Cajas.Replace(",", ".") + ", " + linea.Kilos.Replace(",", ".") + ", " + linea.Precio.Replace(",", ".") + ", '" + linea.Traza + "', " + linea.Importe.Replace(",", ".") + ", " + linea.Partida + ", " + linea.PartAnyo + ", '" + linea.PartAlm + "')"; int res_linea = EjecutaNonQuery(insert_linea); } //y ya está todo hecho //cerraremos el formulario y devolverá un OK } else { //si no tiene se avisa MessageBox.Show("No se puede grabar una factura sin líneas"); //el formulario se cerrará pero no habrá hecho ningún cambio en la BD } }