private ArrayList Obtener_Lista_Albaranes(string DetCod) { //devuelve array de datos, con todos los albaranes sin facturar del detallista ArrayList resultado = new ArrayList(); string strQ = "SELECT * FROM VENALB_CABE WHERE (DetCod=" + DetCod + ") AND (VenNfp IS NULL) AND (AnyoFra IS NULL) AND (SerieFra IS NULL) AND (Anulado<>1) AND (VenTve<>51) AND (VenTve<>43)"; if (ckbFechaDesde.Checked == true) { //filtro por fecha strQ += " AND (VenFec BETWEEN '" + dateTimePicker_Inicio.Text + "' AND '" + dateTimePicker_Fin.Text + "') "; } strQ += " ORDER BY VenFec, VenAlb"; try { SqlDataReader myReader = null; SqlCommand myCommand = new SqlCommand(strQ, CnO); myReader = myCommand.ExecuteReader(); while (myReader.Read()) { dato_albaran albaran = new dato_albaran(); albaran.VenAlb = myReader["VenAlb"].ToString(); albaran.Anyo = myReader["Anyo"].ToString(); resultado.Add(albaran); } myReader.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return(resultado); }
//Antes creaba para cada albarán seleccionado una factura, ahora, a partir de la versión 3.01, crea una factura con todos los albaranes seleccionados de un detallista private void btn_Grabar_Facturas_Click(object sender, EventArgs e) { string gIdent = this.GetType().FullName + " " + System.Reflection.MethodBase.GetCurrentMethod().Name; GloblaVar.gUTIL.ATraza(gIdent + " Entrada a " + sender.ToString()); if (MessageBox.Show("¿Seguro que desea emitir las facturas seleccionadas?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { bool seleccion = false; this.Cursor = Cursors.WaitCursor; try { List<dato_albaran> albaranesSeleccionados = new List<dato_albaran>(); DataGridViewCheckBoxCell CelChk; foreach (DataGridViewRow Fila in dGV1.Rows) { CelChk = Fila.Cells[Col_Selecc] as DataGridViewCheckBoxCell; if (Convert.ToBoolean(CelChk.EditedFormattedValue) == true) { //GloblaVar.gUTIL.SP4(Fila.Cells["Albaran"].Value.ToString(), Convert.ToDateTime(Fila.Cells["Fecha"].Value.ToString()).Year.ToString(), "AA"); dato_albaran dato = new dato_albaran(); dato.VenAlb = Fila.Cells["Albaran"].Value.ToString(); dato.Anyo = Convert.ToDateTime(Fila.Cells["Fecha"].Value.ToString()).Year.ToString(); dato.CodDet = Fila.Cells["Cod.Det"].Value.ToString(); albaranesSeleccionados.Add(dato); seleccion = true; } } if(seleccion==true) { //obtiene los distintos detallistas (CodDet) de los albaranes que hemos seleccionado var distinctCodDet = albaranesSeleccionados.GroupBy(x => x.CodDet).Select(group => group.First()); foreach (dato_albaran d in distinctCodDet) { //obtiene los albaranes de un detallista (CodDet) ArrayList albaranesCodDet = new ArrayList(albaranesSeleccionados.Where(x => x.CodDet == d.CodDet).ToList()); if (frmPpal.USUARIO == "5" || frmPpal.USUARIO == "8") { Funciones.Facturar(d.CodDet, "AA", true, albaranesCodDet, GloblaVar.gConRem, dateTimePicker_FechaFactura.Text); } else { Funciones.Facturar(d.CodDet, "AA", true, albaranesCodDet, GloblaVar.gConRem, dateTimePicker_Inicio.Text); } } CargardGV(); } else { MessageBox.Show("Debe seleccionar algún albarán para emitir la factura"); } } catch (Exception ex) { GloblaVar.gUTIL.ATraza(gIdent + ex.ToString()); MessageBox.Show(ex.ToString()); } this.Cursor = Cursors.Default; } }
private void button_Grabar_Click(object sender, EventArgs e) { //GRABAR LA FACTURA string gIdent = this.GetType().FullName + " " + System.Reflection.MethodBase.GetCurrentMethod().Name; GloblaVar.gUTIL.ATraza(gIdent + " Click en Grabar Factura Manual"); //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); } } GloblaVar.gUTIL.ATraza(gIdent + " Recopiladas lineas que formarán parte de la factura"); //comprobamos que al menos haya un albarán marcado por el usuario antes de seguir //si no lo que pasaría es que se haría una factura vacía, sin líneas if (Lista_Albaranes.Count > 0) { //introducimos una comprobación de albaranes facturados para que no se facturen dos veces //así sabemos si se les ha aplicado Marcar_Ventas //en ese caso IdFactura devolverá cadena vacía string IdFactura = Funciones.Facturar(textBox_DetCod.Text, comboBox_Serie.Text, false, Lista_Albaranes, CnO); GloblaVar.gUTIL.ATraza(gIdent + " Obtenido numero de Factura " + IdFactura + "/" + comboBox_Serie.Text + "-"); if (IdFactura != "") { //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 insert_cabecera = "INSERT INTO FACTV_CABE(Factura, Anyo, Serie, FechaEmision, DetCod, BI1, IVA1, RE1, ImpteFactura, ImpteCobrado, ImptePendiente, Observaciones, TextoPie, TextoCabe) "; insert_cabecera += " VALUES(" + IdFactura + "," + textBox_Anyo.Text + ", '" + comboBox_Serie.Text + "', '" + DateTime.Today.ToShortDateString() + "', " + textBox_DetCod.Text + ", " + textBox_BI.Text.Replace(",", ".") + ", " + textBox_IVA.Text.Replace(",", ".") + ", " + textBox_Recargo.Text.Replace(",", ".") + ", " + textBox_Importe.Text.Replace(",", ".") + ", 0, " + textBox_Importe.Text.Replace(",", ".") + ", '" + observaciones + "', '" + textopie + "', '" + textocabe + "')"; int res_cabecera = EjecutaNonQuery(insert_cabecera); if (res_cabecera == 1) { //ahora hay que marcar los albaranes de venta como facturados Funciones.Marcar_Ventas(IdFactura, textBox_Anyo.Text, comboBox_Serie.Text, Lista_Albaranes, CnO); switch (frmPpal.USUARIO) { case "1": Imprimir_factura(IdFactura); Cobrar_factura(IdFactura); break; case "2": break; default: break; } GloblaVar.gUTIL.ATraza(gIdent + " Se ajustará el cobro de la factura Introducida: " + IdFactura + "/" + textBox_Anyo.Text + "-" + comboBox_Serie.Text); GloblaVar.gUTIL.SP3(IdFactura, textBox_Anyo.Text, comboBox_Serie.Text); Cargar(); Limpieza_Factura(); MessageBox.Show("Factura " + IdFactura.ToString() + " ha sido grabada"); GloblaVar.gUTIL.ATraza(gIdent + "Factura " + IdFactura + " ha sido grabada"); } else { MessageBox.Show("Problema al grabar la factura"); GloblaVar.gUTIL.ATraza(gIdent + "Factura " + IdFactura + " ha sido grabada"); } } else { //posible albarán ya facturado, recargar Cargar(); Limpieza_Factura(); } } }
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 } }