public void GuardarEnvio(int id)
        {
            try
            {
                if (id == 1)
                {
                    CargarTablas();
                    int correlativo = (from a in dbSoftwareGTDataSet.tbl_series
                                       where a.id_serie == id_serie
                                       select a.correlativo).Max();

                    decimal subtotal = 0;
                    decimal iva      = 0;
                    decimal total    = 0;

                    for (int i = 0; i < gvlistadoproductos.DataRowCount; i++)
                    {
                        total = total + decimal.Parse(gvlistadoproductos.GetRowCellValue(i, "PrecioUnitario").ToString());
                    }

                    iva      = total * 0.12m;
                    subtotal = total - iva;

                    string info_deposito = "";
                    if (luetipomoneda.EditValue.ToString() == "3")
                    {
                        info_deposito = " Información del depósito: banco " + tbbancodeposito.Text + ", fecha depósito " + tbfechadeposito.Text + ", número de boleta " + tbnumeroboleta.Text;
                    }
                    tbl_venta_enc.Insert(int.Parse(tbidcliente.Text), tbnombrecliente.Text, tbnombrecliente.Text, tbnit.Text, id_serie, tbserie.Text, (correlativo + 1), 1, int.Parse(luevendedor.EditValue.ToString()), 1, int.Parse(tbcontrolventa.Text.ToString()), subtotal, iva, total, 1, true, DateTime.Now, 1, (comentarios_autorizaciones + info_deposito), 1, id_tipo_venta == 1 ? 1 : 2);
                    tbl_venta_enc.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    (from a in this.dbSoftwareGTDataSet.tbl_series
                     where a.id_serie == id_serie
                     select a).ToList().ForEach(a => { a.correlativo = (a.correlativo + 1); });
                    tbl_series.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    id_venta_enc = (from a in dbSoftwareGTDataSet.tbl_ventas_enc
                                    select a.id_venta_enc).Max();

                    tbl_auditoria_ventas.Insert(id_venta_enc, 1, 0, "", "", DateTime.Now, null, null, true, 1, false);
                    tbl_auditoria_ventas.Update(dbSoftwareGTDataSet);

                    for (int i = 0; i < gvlistadoproductos.DataRowCount; i++)
                    {
                        CargarTablas();
                        int     id_existencia   = int.Parse(gvlistadoproductos.GetRowCellValue(i, "Id").ToString());
                        decimal precio_unitario = decimal.Parse(gvlistadoproductos.GetRowCellValue(i, "PrecioUnitario").ToString());
                        decimal iva_unidad      = precio_unitario * 0.12m;
                        decimal subtotal_unidad = precio_unitario - iva_unidad;
                        string  no_serie        = gvlistadoproductos.GetRowCellValue(i, "NoSerie").ToString();

                        tbl_venta_det.Insert(id_existencia, 1, precio_unitario, subtotal_unidad, iva_unidad, precio_unitario, id_venta_enc, true, DateTime.Now, 1, no_serie);
                        tbl_venta_det.Update(dbSoftwareGTDataSet);
                    }


                    tbl_promesas_pago_enc.Insert(id_venta_enc, 1, DateTime.Now, DateTime.Now, true, DateTime.Now, 1, total, total);
                    tbl_promesas_pago_enc.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    var promesa_pago_enc = (from a in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_enc
                                            select a).LastOrDefault();

                    tbl_promesas_pago_det.Insert(promesa_pago_enc.id_promesa_pago, total, DateTime.Now, false, DateTime.Now, 1, 0, false, "", 1);
                    tbl_promesas_pago_det.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    var promesa_pago_det = (from a in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_det
                                            select a).LastOrDefault();
                    int id_anticipo = 0;
                    if (anticipos.Count > 0)
                    {
                        var datos_serie = (from a in dbSoftwareGTDataSet.tbl_series
                                           where a.id_tienda == 1 &&
                                           a.id_tipo_serie == 3
                                           select new
                        {
                            a.id_serie,
                            a.serie,
                            a.correlativo
                        }).SingleOrDefault();


                        decimal abonos_aplicados = 0;
                        for (int i = 0; i < anticipos.Count; i++)
                        {
                            id_anticipo = anticipos[i].Item1;
                            if (id_anticipo == 0)
                            {
                                tbl_recibos_anticipos.Insert(anticipos[i].Item2, anticipos[i].Item3, anticipos[i].Item1, tbnombrecliente.Text, anticipos[i].Item4, DateTime.Now, true, 1, (datos_serie.correlativo + 1), 1, datos_serie.serie, datos_serie.id_serie, 2);
                                tbl_recibos_anticipos.Update(dbSoftwareGTDataSet);
                                CargarTablas();

                                id_anticipo = (from a in dbSoftwareGTDataSet.tbl_recibos_anticipos
                                               select a.id_recibos_anticipo).LastOrDefault();
                            }
                            abonos_aplicados = abonos_aplicados + anticipos[i].Item2;

                            promesa_pago_det = (from a in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_det
                                                select a).LastOrDefault();

                            tbl_venta_abonos.Insert(promesa_pago_det.id_promesa_pago_det, id_anticipo, true, DateTime.Now, Configuraciones.Configuraciones.idusuario, Configuraciones.Configuraciones.idtienda, anticipos[i].Item2, 0);
                            tbl_venta_abonos.Update(dbSoftwareGTDataSet);
                            CargarTablas();
                        }
                    }

                    BloquearControles();
                    MessageBox.Show("¡Envío guardado exitosamente!");

                    if (anticipos.Count > 0)
                    {
                        DialogResult imprecibo = MessageBox.Show("Impresión de recibo", "¿Desea imprimir el recibo?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        if (imprecibo == DialogResult.Yes)
                        {
                            int id_recibo = (from a in dbSoftwareGTDataSet.tbl_venta_abonos
                                             join b in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_det on a.id_promesa_pago_det equals b.id_promesa_pago_det
                                             join c in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_enc on b.id_promesa_pago equals c.id_promesa_pago
                                             where c.id_venta_enc == id_venta_enc
                                             select a.id_recibo_anticipo).SingleOrDefault();
                            Complementos.ImprimirRecibo imprimirRecibo = new Complementos.ImprimirRecibo(id_recibo);
                            imprimirRecibo.ShowDialog();
                        }
                        else if (imprecibo == DialogResult.No)
                        {
                        }
                    }

                    DialogResult impenvio = MessageBox.Show("Impresión de envío", "¿Desea imprimir el envío?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (impenvio == DialogResult.Yes)
                    {
                        Complementos.ImprimirEnvio imprimirEnvio = new Complementos.ImprimirEnvio(id_venta_enc);
                        imprimirEnvio.ShowDialog();
                    }
                    else if (impenvio == DialogResult.No)
                    {
                    }

                    DialogResult impfactura = MessageBox.Show("Impresión de factura", "¿Desea imprimir la factura?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (impfactura == DialogResult.Yes)
                    {
                        Complementos.ImprimirEnvio imprimirEnvio = new Complementos.ImprimirEnvio(id_venta_enc);
                        imprimirEnvio.ShowDialog();
                    }
                    else if (impfactura == DialogResult.No)
                    {
                    }
                }
                else if (id == 2)
                {
                    CargarTablas();
                    int correlativo = (from a in dbSoftwareGTDataSet.tbl_series
                                       where a.id_serie == id_serie
                                       select a.correlativo).SingleOrDefault();

                    decimal subtotal = 0;
                    decimal iva      = 0;
                    decimal total    = 0;

                    for (int i = 0; i < gvlistadoproductos.DataRowCount; i++)
                    {
                        total = total + decimal.Parse(gvlistadoproductos.GetRowCellValue(i, "PrecioUnitario").ToString());
                    }

                    iva      = total * 0.12m;
                    subtotal = total - iva;
                    luetipomoneda.EditValue = 1;

                    tbl_venta_enc.Insert(int.Parse(tbidcliente.Text), tbnombrecliente.Text, tbnombrecliente.Text, tbnit.Text, id_serie, tbserie.Text, (correlativo + 1), 1, int.Parse(luevendedor.EditValue.ToString()), 1, int.Parse(tbcontrolventa.Text.ToString()), subtotal, iva, total, 2, true, DateTime.Now, 1, comentarios_autorizaciones, 1, id_tipo_venta == 1 ? 1 : 2);
                    tbl_venta_enc.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    (from a in this.dbSoftwareGTDataSet.tbl_series
                     where a.id_serie == id_serie
                     select a).ToList().ForEach(a => { a.correlativo = (a.correlativo + 1); });
                    tbl_series.Update(dbSoftwareGTDataSet);
                    CargarTablas();

                    id_venta_enc = (from a in dbSoftwareGTDataSet.tbl_ventas_enc
                                    select a.id_venta_enc).Max();

                    tbl_auditoria_ventas.Insert(id_venta_enc, 1, 0, "", "", DateTime.Now, null, null, true, 1, false);
                    tbl_auditoria_ventas.Update(dbSoftwareGTDataSet);

                    for (int i = 0; i < gvlistadoproductos.DataRowCount; i++)
                    {
                        CargarTablas();
                        int     id_existencia   = int.Parse(gvlistadoproductos.GetRowCellValue(i, "Id").ToString());
                        decimal precio_unitario = decimal.Parse(gvlistadoproductos.GetRowCellValue(i, "PrecioUnitario").ToString());
                        decimal iva_unidad      = precio_unitario * 0.12m;
                        decimal subtotal_unidad = precio_unitario - iva_unidad;
                        string  no_serie        = gvlistadoproductos.GetRowCellValue(i, "NoSerie").ToString();

                        tbl_venta_det.Insert(id_existencia, 1, precio_unitario, subtotal_unidad, iva_unidad, precio_unitario, id_venta_enc, true, DateTime.Now, 1, no_serie);
                        tbl_venta_det.Update(dbSoftwareGTDataSet);
                    }

                    if (anticipos.Count > 0)
                    {
                        for (int i = 0; i < anticipos.Count; i++)
                        {
                            CargarTablas();
                            tbl_recibos_anticipos.Insert(anticipos[i].Item2, anticipos[i].Item3, anticipos[i].Item1, tbnombrecliente.Text, anticipos[i].Item4, DateTime.Now, true, 1, 0, 1, "A", 3, 2);
                            tbl_recibos_anticipos.Update(dbSoftwareGTDataSet);
                            abonos_aplicados = abonos_aplicados + anticipos[i].Item2;
                        }
                    }

                    if (fiadores.Count > 0)
                    {
                        for (int i = 0; i < fiadores.Count; i++)
                        {
                            CargarTablas();
                            tbl_fiadores.Insert(fiadores[i].Item1, fiadores[i].Item2, fiadores[i].Item3, id_venta_enc, true, DateTime.Now, 1);
                            tbl_fiadores.Update(dbSoftwareGTDataSet);
                        }
                    }

                    if (autorizaciones.Count > 0)
                    {
                        for (int i = 0; i < autorizaciones.Count; i++)
                        {
                            CargarTablas();
                            tbl_ventas_aprobacion_credito.Insert(autorizaciones[i].Item1, id_venta_enc, true, DateTime.Now, 1);
                            tbl_ventas_aprobacion_credito.Update(dbSoftwareGTDataSet);
                        }
                    }

                    if (cuotas.Count > 0)
                    {
                        CargarTablas();
                        tbl_promesas_pago_enc.Insert(id_venta_enc, cuotas.Count, cuotas[0].Item3, cuotas[cuotas.Count - 1].Item3, true, DateTime.Now, 1, (monto_total_factura - abonos_aplicados), abonos_aplicados);
                        tbl_promesas_pago_enc.Update(dbSoftwareGTDataSet);
                        CargarTablas();
                        int id_promesa_pago = (from a in dbSoftwareGTDataSet.tbl_ventas_promesas_pago_enc
                                               where a.activo == true
                                               select a.id_promesa_pago).Max();
                        for (int i = 0; i < cuotas.Count; i++)
                        {
                            CargarTablas();
                            //tbl_promesas_pago_det.Insert(id_promesa_pago, cuotas[i].Item2, cuotas[i].Item3, true, DateTime.Now, 1);
                            tbl_promesas_pago_det.Update(dbSoftwareGTDataSet);
                        }
                    }

                    BloquearControles();
                    MessageBox.Show("¡Envío guardado exitosamente!");
                    DialogResult impenvio = MessageBox.Show("Impresión de envío", "¿Desea imprimir el envío?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (impenvio == DialogResult.Yes)
                    {
                        Complementos.ImprimirPromesasPago imprimir = new Complementos.ImprimirPromesasPago(id_venta_enc);
                        imprimir.ShowDialog();
                    }
                    else if (impenvio == DialogResult.No)
                    {
                    }

                    DialogResult impcontrato = MessageBox.Show("Impresión de contrato", "¿Desea imprimir el contrato?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (impcontrato == DialogResult.Yes)
                    {
                        Complementos.ImprimirContrato imprimirContrato = new Complementos.ImprimirContrato(id_venta_enc);
                        imprimirContrato.ShowDialog();
                    }
                    else if (impcontrato == DialogResult.No)
                    {
                    }

                    DialogResult impfactura = MessageBox.Show("Impresión de factura", "¿Desea imprimir la factura?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (impfactura == DialogResult.Yes)
                    {
                        //tbl_venta_enc.Insert(int.Parse(tbidcliente.Text), tbnombrecliente.Text, tbnombrecliente.Text, tbnit.Text, id_serie, tbserie.Text, (correlativo + 1), 1, int.Parse(luevendedor.EditValue.ToString()), 1, int.Parse(tbcontrolventa.Text.ToString()), subtotal, iva, total, 1, true, DateTime.Now, 1, comentarios_autorizaciones, 1);
                        Complementos.ImprimirEnvio imprimirEnvio = new Complementos.ImprimirEnvio(id_venta_enc);
                        imprimirEnvio.ShowDialog();
                    }
                    else if (impfactura == DialogResult.No)
                    {
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error al guardar el envío: " + e.Message);
            }
        }
 private void btnimprimirpromesas_Click(object sender, EventArgs e)
 {
     Complementos.ImprimirPromesasPago imprimirPromesasPago = new Complementos.ImprimirPromesasPago(id_venta_enc);
     imprimirPromesasPago.ShowDialog();
 }