public clsCabeceraComprobante consultaComprobante(decimal NumeroCom, int idEmpresa)
 {
     try
     {
         clsCabeceraComprobante cabecera = new clsCabeceraComprobante();
         EntitiesContabilidad2 ent = new EntitiesContabilidad2();
         var cab = (from q in ent.CabeceraComprobante where q.IdEmpresa == idEmpresa && q.numero_comprobante == NumeroCom select q).First();
         cabecera.fecha = Convert.ToDateTime(cab.fecha);
         cabecera.glosa = cab.glosa;
         cabecera.IdEmpresa = cab.IdEmpresa;
         cabecera.numero_comprobante = cab.numero_comprobante;
         cabecera.periodo_contable = Convert.ToDecimal(cab.periodo_contable);
         cabecera.periodo_contable_IdAFiscal = Convert.ToDecimal(cab.periodo_contable_IdAFiscal);
         ////////////////////////////////
         var det = (from q in ent.DetalleComprobante where q.IdEmpresa == idEmpresa && q.cabecera_comprobante == NumeroCom select q);
         List<clsDetalleComprobante> lista = new List<clsDetalleComprobante>();
         foreach (var item in det)
         {
             clsDetalleComprobante detalle = new clsDetalleComprobante();
             detalle.cuenta = item.cuenta;
             detalle.debe = item.debe;
             detalle.haber = item.haber;
             detalle.linea_comprobante = item.linea_comprobante;
             lista.Add(detalle);
         }
         cabecera.Detalle = lista;
         return cabecera;
     }
     catch (Exception)
     {
         return null;
     }
 }
        public List<clsDetalleComprobante> get()
        {
            try
            {
                cabecera.fecha = dtFecha.Value;
                cabecera.TipoTransaccion = Convert.ToInt32(cmbTipotransaccion.EditValue);
                cabecera.glosa = txtGlosa.Text;
                cabecera.IdEmpresa = 1;
                //////////
                gridViewComprobante.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.None;
                List<clsDetalleComprobante> lista = new List<clsDetalleComprobante>();
                for (int i = 0; i < gridViewComprobante.RowCount; i++)
                {
                    clsDetalleComprobante clas = new clsDetalleComprobante();
                    clas.cuenta = Convert.ToString(gridViewComprobante.GetRowCellValue(i, colcuenta));
                    clas.debe = Convert.ToDecimal(gridViewComprobante.GetRowCellValue(i, coldebe));
                    clas.haber = Convert.ToDecimal(gridViewComprobante.GetRowCellValue(i, colhaber));
                    clas.IdEmpresa = Convert.ToInt32(gridViewComprobante.GetRowCellValue(i, colIdEmpresa));
                    clas.linea_comprobante = Convert.ToInt32(gridViewComprobante.GetRowCellValue(i, collinea_comprobante));
                    if (clas.debe>0 && clas.haber>0)
                    {
                        if (clas.debe > clas.haber)
                        {
                            gridViewComprobante.SetRowCellValue(i, colhaber, 0);
                        }
                        else
                        {
                            gridViewComprobante.SetRowCellValue(i, coldebe, 0);
                        }
                    }

                    lista.Add(clas);

                }
                gridViewComprobante.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;

                return lista;
            }
            catch (Exception)
            {
                return null;
            }
        }
        private void toolStripGenerar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.txtNumeroCliente.Text == "")
                {
                    MessageBox.Show("Ingrese Cliente.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (this.txtNumSRI.Text == "")
                {
                    MessageBox.Show("Ingrese Numero SRI.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (this.txtNumeroCotizacion.Text == "")
                {
                    MessageBox.Show("Ingrese Cotizacion.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (this.txtNumeroPromocion.Text == "")
                {
                    MessageBox.Show("Ingrese Promocion.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (this.txtPromocion.Text == "")
                {
                    MessageBox.Show("Ingrese Promocion.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (cbxFormaPago.SelectedValue == "")
                {
                    MessageBox.Show("Seleccione Forma de Pago.", "Modulo de Facturacion",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (this.tbldetalle.Rows.Count == 0)
                {
                    MessageBox.Show("Favor ingrese un articulo para su factura.", "Modulo de Facturacion",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                Factura obj = new Factura();
                obj.IdNumeroFactura = Int32.Parse(txtNumeroFactura.Text);
               // obj.cabecera_comprobante = Int32.Parse(txtNumSRI.Text);
                obj.IdNumeroCotizacion = Int32.Parse(txtNumeroCotizacion.Text);
                obj.IdPromocion = Int32.Parse(txtNumeroPromocion.Text);
                obj.IdFormaPago = Int32.Parse(cbxFormaPago.SelectedValue.ToString());
                obj.IdNumeroCliente = Int32.Parse(txtNumeroCliente.Text);
                obj.Fecha = this.dtpFecha.Value;
                obj.ValorEntrada = Decimal.Parse (txtValorEntrada.Text);
                obj.NumeroCuotaMensual = Int32.Parse(txtNumeroCuotaMensual.Text);
                obj.Subtotal = txtsubtotal.Value;
                obj.Iva = txtiva.Value;
                obj.Ice = txtice.Value;
                obj.Descuento = txtdescuento.Value;
                obj.TotalPagar = txtTotalPagar.Value;

                obj.IdEmpresa = Seguridad.empresa;
                obj.idUsuario = Seguridad.usuario;
                obj.idEstado = Int32.Parse(cmbestado.SelectedValue.ToString());

                da.AddToFactura(obj);
                int respuesta = da.SaveChanges();
                double totalcosto = 0;

                if (respuesta > 0)
                {
                    // registrar en contabilidad
                    clsDatoComprobante objcontabilidad = new clsDatoComprobante();
                    clsCabeceraComprobante objcontdet = new clsCabeceraComprobante();
                    //objcontdet.fecha =

                    objcontdet.fecha = DateTime.Now;
                    objcontdet.glosa = "Venta Modulo de Facturacion ";
                    objcontdet.IdEmpresa = Seguridad.empresa;

                    List<clsDetalleComprobante> Detalleconta = new List<clsDetalleComprobante>();

                    int i = 0;
                    while (i < tbldetalle.Rows.Count)
                    {
                        FacturaDet objdet = new FacturaDet ();
                        objdet.IdEmpresa = Seguridad.empresa;
                        objdet.idUsuario = Seguridad.usuario;
                        objdet.idEstado = Int32.Parse(cmbestado.SelectedValue.ToString());

                        objdet.Linea = i + 1;
                        objdet.IdNumeroFactura = Int32.Parse(txtNumeroFactura.Text);
                        objdet.IdArticulo = Int32.Parse(tbldetalle.Rows[i][0].ToString());
                        objdet.CuotaMensual = Decimal.Parse(tbldetalle.Rows[i][2].ToString());
                        objdet.FechaPago = DateTime.Parse(tbldetalle.Rows[i][3].ToString());
                        objdet.FechaMaximaPago = DateTime.Parse(tbldetalle.Rows[i][4].ToString());
                        objdet.precio = Decimal.Parse(tbldetalle.Rows[i][5].ToString());
                        objdet.cantidad = Int32.Parse(tbldetalle.Rows[i][6].ToString());
                        objdet.costo = Decimal.Parse(tbldetalle.Rows[i][7].ToString());
                        da.AddToFacturaDet (objdet);
                        da.SaveChanges();
                        i++;
                        totalcosto = totalcosto + Double.Parse(objdet.costo.ToString());
                    }

                    if (obj.IdFormaPago == 1)
                    {
                        clsDetalleComprobante obcontdet = new clsDetalleComprobante();
                        obcontdet.cuenta = "11101001"; // caja
                        obcontdet.debe = Decimal.Parse(obj.TotalPagar.ToString());
                        obcontdet.haber = 0;
                        Detalleconta.Add(obcontdet);

                        clsDetalleComprobante obcontdet1 = new clsDetalleComprobante();
                        obcontdet1.cuenta = "11401001"; // iva
                        obcontdet1.debe = 0;
                        obcontdet1.haber = Decimal.Parse(obj.Iva.ToString());
                        Detalleconta.Add(obcontdet1);

                        clsDetalleComprobante obcontdet2 = new clsDetalleComprobante();
                        obcontdet2.cuenta = "11401003"; // ice
                        obcontdet2.debe = 0;
                        obcontdet2.haber = Decimal.Parse(obj.Ice.ToString()); ;
                        Detalleconta.Add(obcontdet2);

                        clsDetalleComprobante obcontdet3 = new clsDetalleComprobante();
                        obcontdet3.cuenta = "41101001"; // ingreso por venta
                        obcontdet3.debe = 0;
                        obcontdet3.haber = Decimal.Parse(obj.Subtotal.ToString());
                        Detalleconta.Add(obcontdet3);

                        clsDetalleComprobante obcontdet4 = new clsDetalleComprobante();
                        obcontdet4.cuenta = "51101001"; // costo de venta
                        obcontdet4.debe = Decimal.Parse(totalcosto.ToString());
                        obcontdet4.haber = 0;
                        Detalleconta.Add(obcontdet4);

                        clsDetalleComprobante obcontdet5 = new clsDetalleComprobante();
                        obcontdet5.cuenta = "11301001"; // costo de venta
                        obcontdet5.debe = 0;
                        obcontdet5.haber = Decimal.Parse(totalcosto.ToString());
                        Detalleconta.Add(obcontdet5);

                    }
                    else {

                        clsDetalleComprobante obcontdet0 = new clsDetalleComprobante();
                        obcontdet0.cuenta = "11101001"; // caja
                        obcontdet0.debe = Decimal.Parse(txtValorEntrada.Value.ToString());
                        obcontdet0.haber = 0;
                        Detalleconta.Add(obcontdet0);

                        clsDetalleComprobante obcontdet = new clsDetalleComprobante();
                        obcontdet.cuenta = "11201001"; // credito
                        obcontdet.debe = Decimal.Parse((txtTotalPagar.Value - txtValorEntrada.Value).ToString());
                        obcontdet.haber = 0;
                        Detalleconta.Add(obcontdet);

                        clsDetalleComprobante obcontdet1 = new clsDetalleComprobante();
                        obcontdet1.cuenta = "11401001"; // iva
                        obcontdet1.debe = 0;
                        obcontdet1.haber = Decimal.Parse(obj.Iva.ToString());
                        Detalleconta.Add(obcontdet1);

                        clsDetalleComprobante obcontdet2 = new clsDetalleComprobante();
                        obcontdet2.cuenta = "11401003"; // ice
                        obcontdet2.debe = 0;
                        obcontdet2.haber = Decimal.Parse(obj.Ice.ToString()); ;
                        Detalleconta.Add(obcontdet2);

                        clsDetalleComprobante obcontdet3 = new clsDetalleComprobante();
                        obcontdet3.cuenta = "41101001"; // ingreso por venta
                        obcontdet3.debe = 0;
                        obcontdet3.haber = Decimal.Parse(obj.Subtotal.ToString());
                        Detalleconta.Add(obcontdet3);

                        clsDetalleComprobante obcontdet4 = new clsDetalleComprobante();
                        obcontdet4.cuenta = "51101001"; // costo de venta
                        obcontdet4.debe = Decimal.Parse(totalcosto.ToString());
                        obcontdet4.haber = 0;
                        Detalleconta.Add(obcontdet4);

                        clsDetalleComprobante obcontdet5 = new clsDetalleComprobante();
                        obcontdet5.cuenta = "11301001"; // costo de venta
                        obcontdet5.debe = 0;
                        obcontdet5.haber = Decimal.Parse(totalcosto.ToString());
                        Detalleconta.Add(obcontdet5);

                    }
                    objcontdet.Detalle = Detalleconta;

                    objcontabilidad.GuardarCabecera(ref objcontdet);

                    //guardar cuentas por cobrar
                   Int32 maxUnitsInStock=0;
                    try
                    {
                     maxUnitsInStock =
                    (from prod in da.Factura
                    select prod.IdNumeroFactura).Max() + 1;

                    ;
                    }
                    catch (Exception ex)
                    {
                    maxUnitsInStock= 1;
                    }

                    CuentaxCobrar objcxc = new CuentaxCobrar();
                    objcxc.idCuentaxCobrar  =  Int32.Parse(maxUnitsInStock.ToString());
                    //objcxc.numero_comprobante =
                    //objcxc.idTransaccion =
                    objcxc.idNumeroFactura =Int32.Parse(this.txtNumeroFactura.Text);
                    //objcxc.idCabeceraComprobante =
                    objcxc.TotalCuotas =Int32.Parse(txtNumeroCuotaMensual.Text);
                    objcxc.porcentaje_interes=Decimal.Parse(this.txtTasaFija.Text);
                    objcxc.Modulo =1;

                    objcxc.idEmpresa = Seguridad.empresa;
                    objcxc.idUsuario = Seguridad.usuario;
                    //objcxc.estado = Int32.Parse(cmbestado.SelectedValue.ToString());
                    objcxc.estado = cmbestado.SelectedValue.ToString();

                    da.AddToCuentaxCobrar(objcxc);
                     respuesta = da.SaveChanges();
                    if (respuesta > 0)
                    {
                         i = 0;
                        while (i < tblcutoas.Rows.Count)
                        {
                            CuentaxCobrarDet objdetcxc = new CuentaxCobrarDet ();
                            objdetcxc.idCuentaxCobrar = objcxc.idCuentaxCobrar;

                            //objdetcxc.idEmpresa = Seguridad.empresa;
                            //objdetcxc.idUsuario = Seguridad.usuario;
                            //objdetcxc.idEstado = Int32.Parse(cmbestado.SelectedValue.ToString());
                            objdetcxc.estado = cmbestado.SelectedValue.ToString();

                            objdetcxc.Numero = i + 1;
                            objdetcxc.numero_cuota = i + 1;

                            objdetcxc.valor_cuota = Decimal.Parse(tblcutoas.Rows[i][0].ToString());
                            objdetcxc.valor_interes = Decimal.Parse(tblcutoas.Rows[i][1].ToString());
                            objdetcxc.valor_mora = 0;
                            objdetcxc.fecha_cobro = DateTime.Parse(tblcutoas.Rows[i][2].ToString());
                            objdetcxc.fecha_vencimiento = DateTime.Parse(tblcutoas.Rows[i][3].ToString());
                            objdetcxc.FechaModificacion  =  DateTime.Parse(DateAndTime.Now.ToShortDateString());

                            da.AddToCuentaxCobrarDet (objdetcxc);
                            da.SaveChanges();
                            i++;

                        }
                    }

                    MessageBox.Show("Registro Ingresado con exito.", "Modulo de Facturacion",
             MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //cargarpromociones();
                    ImprimirReporte();

                    limpiar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ingrese Correctamente los valores. " + ex.Message, "Modulo de Facturacion",
            MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }