/** \return **/ void AlbaranClienteView::on_mui_duplicar_released() { BL_FUNC_DEBUG AlbaranClienteView *fpv = this ; AlbaranClienteView *bud = NULL; BlDbRecordSet *cur = NULL; try { /// Comprueba si disponemos de los datos mínimos. Si no se hace esta /// comprobación la consulta a la base de datos será erronea y al hacer /// el siguiente cur->eof() el programa fallará. /// Comprobamos que existe una albaran con esos datos, y en caso afirmativo lo mostramos. /// Creamos la albaran. AlbaranClienteView *bud = new AlbaranClienteView ( ( BfCompany * ) fpv->mainCompany(), 0 ); fpv->mainCompany() ->m_pWorkspace->addSubWindow ( bud ); bud->inicializar(); bud->setDbValue ( "comentalbaran", fpv->dbValue ( "comentalbaran" ) ); bud->setDbValue ( "idforma_pago", fpv->dbValue ( "idforma_pago" ) ); bud->setDbValue ( "refalbaran", fpv->dbValue ( "refalbaran" ) ); bud->setDbValue ( "idcliente", fpv->dbValue ( "idcliente" ) ); bud->pintar(); bud->show(); /// Traspasamos las lineas de albaran QString l; BlDbSubFormRecord *linea, *linea1; for ( int i = 0; i < fpv->m_listalineas->rowCount(); ++i ) { linea = fpv->m_listalineas->lineaat ( i ); if ( linea->dbValue ( "idarticulo" ) != "" ) { linea1 = bud->getlistalineas() ->lineaat ( bud->getlistalineas() ->rowCount() - 1 ); bud->getlistalineas() ->newRecord(); bud->getlistalineas() ->setProcesarCambios ( false ); linea1->setDbValue ( "desclalbaran", linea->dbValue ( "desclalbaran" ) ); linea1->setDbValue ( "cantlalbaran", linea->dbValue ( "cantlalbaran" ) ); linea1->setDbValue ( "pvplalbaran", linea->dbValue ( "pvplalbaran" ) ); linea1->setDbValue ( "descuentolalbaran", linea->dbValue ( "descuentolalbaran" ) ); linea1->setDbValue ( "idarticulo", linea->dbValue ( "idarticulo" ) ); linea1->setDbValue ( "codigocompletoarticulo", linea->dbValue ( "codigocompletoarticulo" ) ); linea1->setDbValue ( "nomarticulo", linea->dbValue ( "nomarticulo" ) ); linea1->setDbValue ( "ivalalbaran", linea->dbValue ( "ivalalbaran" ) ); linea1->setDbValue ( "reqeqlalbaran", linea->dbValue ( "reqeqlalbaran" ) ); } // end if } // end for bud->calculaypintatotales(); } catch ( ... ) { blMsgInfo ( _ ( "Error inesperado" ), this ); if ( cur ) delete cur; if ( bud ) delete bud; } // end try }
void ImpQToolButton::click() { BL_FUNC_DEBUG QString res = ""; if ( m_albaranClienteList != NULL ) { m_companyact = ( BfCompany * ) m_albaranClienteList->mainCompany(); BlSubForm *sub = m_albaranClienteList->mui_list; /// Creamos la factura /// Como estamos en un plugin buscamos nuevas formas de creacion de objetos. int resur = g_plugins->run ( "SNewFacturaView", m_companyact ); if ( !resur ) { blMsgInfo ( "no se pudo crear instancia de factura" ); return; } // end if FacturaView *fac = ( FacturaView * ) g_plugParams; m_companyact->m_pWorkspace->addSubWindow ( fac ); /// Cargamos un elemento que no existe para inicializar bien la clase. fac->load ( "0" ); /// Reseteamos los valores for ( int i = 0; i < sub->rowCount(); i++ ) { BlDbSubFormRecord *rec = sub->lineaat ( i ); rec->refresh(); QString val = rec->dbValue ( "selector" ); if ( val == "TRUE" ) { QString id = rec->dbValue ( "idalbaran" ); /// Como estamos en un plugin buscamos nuevas formas de creacion de objetos. int resur = g_plugins->run ( "SNewAlbaranClienteView", m_companyact ); if ( !resur ) { blMsgInfo ( "no se pudo crear instancia de albaran" ); return; } // end if AlbaranClienteView *pres = ( AlbaranClienteView * ) g_plugParams; pres->load ( id ); if ( pres->mui_procesadoalbaran->isChecked() ) { pres->close(); return; } // end if m_companyact->pWorkspace() ->addSubWindow ( pres ); m_companyact->insertWindow ( pres->windowTitle(), pres, FALSE ); pres->show(); // El calculo de descuentos es complejo BlFixed descgen1 = pres->getlistadescuentos() ->sumarCampo ( "proporciondalbaran" ); BlFixed descgen = BlFixed ( "1.000" ) - descgen1 / BlFixed ( "100" ); /// Agregamos a comentarios que albaran se corresponde. QString comm = fac->dbValue ( "comentfactura" ) + "(" + _ ( "ALBARAN: Num " ) + pres->dbValue ( "numalbaran" ) + _ ( "Ref:" ) + " " + pres->dbValue ( "refalbaran" ) + _ ( "Fecha:" ) + " " + pres->dbValue ( "fechaalbaran" ) + ")\n"; fac->setDbValue ( "comentfactura", comm ); fac->setDbValue ( "idforma_pago", pres->dbValue ( "idforma_pago" ) ); fac->setDbValue ( "reffactura", pres->dbValue ( "refalbaran" ) ); fac->setDbValue ( "idcliente", pres->dbValue ( "idcliente" ) ); fac->setDbValue ( "idalmacen", pres->dbValue ( "idalmacen" ) ); QString l; BlDbSubFormRecord *linea, *linea1; for ( int i = 0; i < pres->getlistalineas() ->rowCount(); ++i ) { linea = pres->getlistalineas() ->lineaat ( i ); if ( linea->dbValue ( "idarticulo" ) != "" ) { linea1 = fac->getlistalineas() ->lineaat ( fac->getlistalineas() ->rowCount() - 1 ); /// Haciendo el nuevo registro antes nos evitamos problemas de foco. fac->getlistalineas() ->newRecord(); fac->getlistalineas() ->setProcesarCambios ( FALSE ); linea1->setDbValue ( "codigocompletoarticulo", linea->dbValue ( "codigocompletoarticulo" ) ); linea1->setDbValue ( "desclfactura", linea->dbValue ( "desclalbaran" ) ); linea1->setDbValue ( "cantlfactura", linea->dbValue ( "cantlalbaran" ) ); linea1->setDbValue ( "pvplfactura", linea->dbValue ( "pvplalbaran" ) ); linea1->setDbValue ( "ivalfactura", linea->dbValue ( "ivalalbaran" ) ); BlFixed descpar1 = BlFixed ( linea->dbValue ( "descuentolalbaran" ) ); BlFixed descpar = BlFixed ( "1.000" ) - descpar1 / BlFixed ( "100" ); BlFixed desc = ( BlFixed ( "1.00" ) - descpar * descgen ) * BlFixed ( "100.00" ); linea1->setDbValue ( "descuentolfactura", desc.toQString ( '.' ) ); linea1->setDbValue ( "idarticulo", linea->dbValue ( "idarticulo" ) ); linea1->setDbValue ( "nomarticulo", linea->dbValue ( "nomarticulo" ) ); fac->getlistalineas() ->setProcesarCambios ( TRUE ); linea1->refresh(); } // end if } // end for pres->mui_procesadoalbaran->setChecked ( TRUE ); } // end if } // end for fac->calculaypintatotales(); fac->pintar(); fac->show(); } // end if }