void FormFacturacionEmitida::imprimirListadoGeneral()
{
    // Busco el id que está del servicio
    EReporte *rep = new EReporte( 0 );
    ParameterList lista;
    lista.append( "id_servicio", CBServicio->idActual() );
    if( ERegistroPlugins::getInstancia()->existePluginExterno( "hicomp" ) ) {
        rep->especial( "ListaDeudoresServicioHC", lista );
    } else {
        rep->especial( "ListaDeudoresServicio", lista );
    }
    rep->hacer();
    delete rep;
}
void FormFacturacionEmitida::imprimirListadoGeneralPDF()
{
    // Busco el id que está del servicio
    EReporte *rep = new EReporte( 0 );
    ParameterList lista;
    int id_servicio = CBServicio->idActual();
    lista.append( "id_servicio", id_servicio );
    if( ERegistroPlugins::getInstancia()->existePluginExterno( "hicomp" ) ) {
        rep->especial( "ListaDeudoresServicioHC", lista );
    } else {
        rep->especial( "ListaDeudoresServicio", lista );
    }
    rep->hacerPDF( lista, QString( "Lista Deudores del servicio %1 al %2" ).arg( MServicios::getNombreServicio( id_servicio ) ).arg( QDate::currentDate().toString( Qt::SystemLocaleShortDate ) ) );
    delete rep;
}
/*!
 * \fn VCuentaCorriente::listadoDeudorPDF()
 * Pasa a PDF el listado de cuentas corrientes deudoras
 */
void VCuentaCorriente::listadoDeudorPDF()
{
    EReporte *rep = new EReporte( 0 );
    rep->especial( "ListadoCtaCteSaldo", ParameterList() );
    rep->hacerPDF( ParameterList(), QString( "Listado de Cuenta Corriente con saldo al %1" ).arg( QDate::currentDate().toString( Qt::SystemLocaleShortDate ) ) );
    delete rep;
}
/*!
 * \fn VCuentaCorriente::listadoDeudor()
 * Imprime el listado de cuentas corrientes deudoras
 */
void VCuentaCorriente::listadoDeudor()
{
    EReporte *rep = new EReporte( 0 );
    rep->especial( "ListadoCtaCteSaldo", ParameterList() );
    rep->hacer();
    delete rep;
}
/*!
    \fn FormResumenCtaCte::imprimir()
 */
void FormResumenCtaCte::imprimir()
{
    if( modeloItem->rowCount() <= 0 ) {
        QMessageBox::warning( this, "Error", "No hay ningun movimiento para la cuenta corriente. No se imprimira nada" );
        return;
    }
    // Busco la cuenta?
    ParameterList lista;
    lista.append( Parameter( "ctacte", CBClienteCtaCte->itemData( CBClienteCtaCte->currentIndex(), Qt::UserRole ).toString() ) );
    lista.append( Parameter( "filtro", this->_filtro ) );
    EReporte *rep = new EReporte( 0 );
    rep->especial( "ResumenCtaCte", lista );
    if( ! rep->hacer() ) {
        QMessageBox::warning( this, "Error", "No se pudo imprimir el resumen de cuenta corriente" );
    }
    delete rep;
    rep = 0;
}
/*!
    \fn FormResumenCtaCte::pdf()
 */
void FormResumenCtaCte::aPdf()
{
    if( modeloItem->rowCount() <= 0 ) {
        QMessageBox::warning( this, "Error", "No hay ningun movimiento para la cuenta corriente. No se imprimira nada" );
        return;
    }
    // Parametros para el nombre

    QString nombre = QString( "%1 - Resumen de cuenta corriente.pdf").arg( CBClienteCtaCte->currentText() );
    ParameterList lista;
    lista.append( Parameter( "ctacte", CBClienteCtaCte->itemData( CBClienteCtaCte->currentIndex(), Qt::UserRole ).toString() ) );
    lista.append( Parameter( "filtro", this->_filtro ) );
    EReporte *rep = new EReporte( 0 );
    rep->especial( "ResumenCtaCte", lista );
    if( ! rep->hacerPDF( lista, nombre ) ) {
        QMessageBox::warning( this, "Error", "No se pudo generar como pdf el resumen de cuenta corriente" );
    }
    delete rep;
    rep = 0;
}
/*!
 * @fn MClientesServicios::darDeBaja( int id_cliente, int id_servicio, QString razon )
 * Da de baja al cliente seleccionado segun la razon espcificada
 * Si no se especifica una razon, se coloca una predeterminada.
 * La fecha de baja es cuando se realiza la operación.
 * Si la baja se realizo correctamente, se imprime el comprobante de baja. El no imprimirlo, no modifica el resultado.
 * \param id_cliente Identificador del cliente.
 * \param id_servicio Identificador del servicio.
 * \param razon Texto de por que da de baja el servicio.
 * \return Verdadero se pudo realizar la baja.
 */
bool MClientesServicios::darDeBaja( int id_cliente, int id_servicio, QString razon ) {
    // Verificar existencia de la asociacion
    QSqlQuery cola;
    if( !cola.exec( QString( "SELECT COUNT(id_cliente) FROM servicios_clientes WHERE id_cliente = %1 AND id_servicio = %2" ).arg( id_cliente ).arg( id_servicio ) ) ) {
        qDebug( "Error al ejecutar la cola de obtencion de lciente servicio." );
        qDebug( cola.lastError().text().toLocal8Bit() );
        qDebug( cola.lastQuery().toLocal8Bit() );
    } else {
        if( !cola.next() ) {
            qDebug( "Error al hacer next en la cola de obtencion del cliente servicio" );
            qDebug( cola.lastError().text().toLocal8Bit() );
            qDebug( cola.lastQuery().toLocal8Bit() );
            return false;
        } else {
            if( cola.record().value(0).toInt() <= 0 ) {
                qWarning( "El cliente seleccionado no esta adherido al servicio especificado" );
                qDebug( cola.lastError().text().toLocal8Bit() );
                qDebug( cola.lastQuery().toLocal8Bit() );
                return false;
            }
        }
    } // Existe
    // verificar deudas existentes respecto a servicios
    if( MCobroServicioClientePeriodo::esDeudor( id_cliente, id_servicio ) ) {
        QMessageBox::warning( 0, "Saldo incompleto", "El cliente todavía tiene cuotas pendientes de pago. <br/> No se podrá realizar la baja hasta que se paguen las deudas pendientes" );
        return false;
    }
    // verificar fecha respecto al periodo del servicio y facturar lo que falte ? ( ya esta echo por el punto anterior )
    // Verificar la razon
    if( razon.isEmpty() ) {
        qDebug( "Razon de baja de adhesion desconocida. Colocando la default." );
        razon = "Desconocida - No Especificada.";
    }
    // Ingresar baja
    QSqlQuery cola2;
    if( !cola2.prepare(
         QString( "UPDATE servicios_clientes SET fecha_baja = :fecha, razon = :razon WHERE id_cliente = %1 AND id_servicio = %2" )
                .arg( id_cliente ).arg( id_servicio ) ) ) {
        qDebug( "Error al preparar la cola" );
        qDebug( cola2.lastError().text().toLocal8Bit() );
        qDebug( cola2.lastQuery().toLocal8Bit() );
        return false;
    }
    cola2.bindValue( ":fecha" , QDate::currentDate() );
    cola2.bindValue( ":razon", razon );
    /*cola2.bindValue( ":id_cliente",  id_cliente );
    cola2.bindValue( ":id_servicio", id_servicio );*/
    if( !cola2.exec() ) {
        qDebug( "Error al ejecutar la cola de insercion de fecha de baja y razon en la tabla de servicios_clientes" );
        qDebug( cola2.lastError().text().toLocal8Bit() );
        qDebug( cola2.lastQuery().toLocal8Bit() );
        return false;
    } else {
        qDebug( cola2.lastError().text().toLocal8Bit() );
        qDebug( cola2.lastQuery().toLocal8Bit() );
    }
    // Imprimir comprobante de baja
    EReporte *rep = new EReporte( 0 );
    ParameterList parametros;
    parametros.append( Parameter( "id_cliente", id_cliente ) );
    parametros.append( Parameter( "id_servicio", id_servicio ) );
    parametros.append( Parameter( "razon", razon ) );
    parametros.append( Parameter( "fecha", QDate::currentDate() ) );
    rep->especial( "baja-servicio", parametros );
    rep->hacer();
    delete rep;
    return true;
}