ticket.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2007 by Tomeu Borras Riera                              *
00003  *   tborras@conetxia.com                                                  *
00004  *   http://www.iglues.org                                                 *
00005  *                                                                         *
00006  *   This program is free software; you can redistribute it and/or modify  *
00007  *   it under the terms of the GNU General Public License as published by  *
00008  *   the Free Software Foundation; either version 2 of the License, or     *
00009  *   (at your option) any later version.                                   *
00010  *                                                                         *
00011  *   This program is distributed in the hope that it will be useful,       *
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00014  *   GNU General Public License for more details.                          *
00015  *                                                                         *
00016  *   You should have received a copy of the GNU General Public License     *
00017  *   along with this program; if not, write to the                         *
00018  *   Free Software Foundation, Inc.,                                       *
00019  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00020  ***************************************************************************/
00021 
00022 
00023 #include <QWidget>
00024 #include <QCloseEvent>
00025 #include <QFile>
00026 
00027 #include "empresabase.h"
00028 #include "ticket.h"
00029 #include "plugins.h"
00030 
00033 typedef QMap<QString, Fixed> base;
00034 
00035 Ticket::Ticket(EmpresaBase *emp, QWidget *parent) : BLWidget(emp, parent), DBRecord(emp) {
00036     _depura("Ticket::Ticket", 0);
00038     setDBTableName ( "albaran" );
00039     setDBCampoId ( "idalbaran" );
00040     addDBCampo ( "descalbaran", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Ticket", "descripcion"));
00041     addDBCampo ( "nomticket", DBCampo::DBvarchar, DBCampo::DBNoSave, QApplication::translate("Ticket", "nombre"));
00042     addDBCampo ( "idalbaran", DBCampo::DBint, DBCampo::DBPrimaryKey, QApplication::translate ( "Ticket", "Id albaran" ) );
00043     addDBCampo ( "fechaalbaran", DBCampo::DBdate, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Id fechaalbaran" ) );
00044     addDBCampo ( "horaalbaran", DBCampo::DBvarchar, DBCampo::DBNoSave, QApplication::translate ( "Ticket", "hora" ) );
00045     addDBCampo ( "idtrabajador", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Trabajador" ) );
00046     addDBCampo ( "idcliente", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Cliente" ) );
00047     addDBCampo ( "idalmacen", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Almacen" ) );
00048     addDBCampo ( "numalbaran", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Num" ) );
00049     addDBCampo ( "refalbaran", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Referencia" ) );
00050     addDBCampo ( "ticketalbaran", DBCampo::DBboolean, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Ticket" ) );
00051 
00052 
00053     setDBvalue("ticketalbaran", "TRUE");
00054     setDBvalue("idalmacen", confpr->valor(CONF_IDALMACEN_DEFECTO));
00055     setDBvalue("idcliente", confpr->valor(CONF_IDCLIENTE_DEFECTO));
00056     setDBvalue("descalbaran", "Ticket de venta");
00057 
00058     m_lineaActual = NULL;
00059     m_listaLineas = new QList<DBRecord *>;
00060 
00061     _depura("END Ticket::Ticket", 0);
00062 }
00063 
00064 Ticket::~Ticket() {
00065     _depura("Ticket::~Ticket", 0);
00066     _depura("END Ticket::~Ticket", 0);
00067 }
00068 
00069 DBRecord * Ticket::agregarLinea() {
00070     _depura("Ticket::agregarLinea",0);
00071 
00073     DBRecord * item = new DBRecord(empresaBase());
00074     item->setDBTableName ( "lalbaran" );
00075     item->setDBCampoId ( "numlalbaran" );
00076     item->addDBCampo ( "idalbaran", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Id Albaran" ) );
00077     item->addDBCampo ( "numlalbaran", DBCampo::DBint, DBCampo::DBPrimaryKey, QApplication::translate ( "Ticket", "Id lalbaran" ) );
00078     item->addDBCampo ( "cantlalbaran", DBCampo::DBnumeric, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Cantidad" ) );
00079     item->addDBCampo ( "pvplalbaran", DBCampo::DBnumeric, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Precio" ) );
00080     item->addDBCampo ( "ivalalbaran", DBCampo::DBnumeric, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "IVA" ) );
00081     item->addDBCampo ( "descuentolalbaran", DBCampo::DBnumeric, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Descuento" ) );
00082     item->addDBCampo ( "ordenlalbaran", DBCampo::DBnumeric, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Orden" ) );
00083     item->addDBCampo ( "reqeqlalbaran", DBCampo::DBnumeric, DBCampo::DBNothing, QApplication::translate ( "Ticket", "REQ EQ" ) );
00084 //    item->addDBCampo ( "lotelalbaran", DBCampo::DBnumeric, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Lote" ) );
00085     item->addDBCampo ( "idarticulo", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate ( "Ticket", "Id Articulo" ) );
00086     item->addDBCampo ( "codigocompletoarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, QApplication::translate ( "Ticket", "Codigo Articulo" ) );
00087     item->addDBCampo ( "nomarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, QApplication::translate ( "Ticket", "Nombre Articulo" ) );
00088     item->addDBCampo ( "desclalbaran", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate ( "Ticket", "Nombre Articulo" ) );
00089 
00090 
00091     item->setDBvalue("descuentolalbaran", "0");
00093     m_listaLineas->append(item);
00094 
00095     _depura("END Ticket::agregarLinea",0);
00096     return item;
00097 }
00098 
00099 void Ticket::pintar() {
00100     _depura("Ticket::pintar", 0, "Metodo para reimplementar en clases derivadas");
00102     int res = g_plugins->lanza("Ticket_pintar", this);
00103     if (res != 0) {
00104         return;
00105     } // end if
00106     _depura("END Ticket::pintar", 0);
00107 }
00108 
00109 QList<DBRecord *> *Ticket::listaLineas() {
00110     return m_listaLineas;
00111 }
00112 
00113 
00114 DBRecord *Ticket::insertarArticulo(QString idArticulo, Fixed cantidad, bool nuevaLinea) {
00115     _depura("Ticket::insertarArticulo", 0);
00116 
00118     m_lineaActual = NULL;
00119     DBRecord *item;
00120     for (int i = 0; i < listaLineas()->size(); ++i) {
00121         item = listaLineas()->at(i);
00122         if (item->DBvalue("idarticulo") == idArticulo)
00123             m_lineaActual = item;
00124     }// end for
00125 
00126     if (m_lineaActual && nuevaLinea == FALSE) {
00128         Fixed cantidadib(m_lineaActual->DBvalue("cantlalbaran"));
00129         Fixed cant1 = cantidadib + cantidad;
00130         m_lineaActual->setDBvalue("cantlalbaran", cant1.toQString());
00131     } else {
00133         m_lineaActual = agregarLinea();
00134         m_lineaActual->setDBvalue("idarticulo", idArticulo);
00135         m_lineaActual->setDBvalue("cantlalbaran", cantidad.toQString());
00136 
00138         QString query = "SELECT * FROM articulo WHERE idarticulo = " + idArticulo;
00139         cursor2 *cur = empresaBase()->cargacursor(query);
00140         if (!cur->eof()) {
00141             m_lineaActual->setDBvalue("pvplalbaran", cur->valor("pvparticulo"));
00142             m_lineaActual->setDBvalue("codigocompletoarticulo", cur->valor("codigocompletoarticulo"));
00143             m_lineaActual->setDBvalue("nomarticulo", cur->valor("nomarticulo"));
00144             m_lineaActual->setDBvalue("desclalbaran", cur->valor("nomarticulo"));
00145         } // end if
00146 
00147         cursor2 *cur1 = empresaBase()->cargacursor("SELECT * FROM tasa_iva WHERE idtipo_iva = " + cur->valor("idtipo_iva") + " ORDER BY fechatasa_iva LIMIT 1");
00148         if (!cur1->eof() )
00149             m_lineaActual->setDBvalue("ivalalbaran", cur1->valor("porcentasa_iva"));
00150         delete cur1;
00151         delete cur;
00152     } // end if
00153 
00154 
00156     pintar();
00157 
00158     _depura("END Ticket::insertarArticulo", 0);
00159     return m_lineaActual;
00160 }
00161 
00162 
00163 void  Ticket::borrarArticulo(DBRecord *linea, Fixed cantidad) {
00165         if (m_lineaActual == NULL) {
00166                 return;
00167         }
00168 
00169         m_lineaActual->borrar();
00170 
00171 }
00172 
00173 
00174 void  Ticket::vaciarTicket() {}
00175 
00176 void  Ticket::subirPosArticulo(DBRecord *linea, int filas) {}
00177 
00178 void  Ticket::bajarPosArticulo(DBRecord *linea, int filas) {}
00179 
00180 void  Ticket::inicioPosTicket(DBRecord *) {}
00181 
00182 void  Ticket::finPosTicket(DBRecord *) {}
00183 
00184 
00185 DBRecord * Ticket::lineaTicket(int posicion) {
00186     return NULL;
00187 }
00188 
00189 
00190 DBRecord *Ticket::lineaActTicket() {
00191     return m_lineaActual;
00192 }
00193 
00194 void Ticket::setLineaActual(DBRecord *rec) {
00195     m_lineaActual = rec;
00196 }
00197 
00198 
00199 void  Ticket::setDescuentoGlobal(Fixed descuento) {}
00200 
00201 void  Ticket::imprimir() {
00202     base basesimp;
00203     base basesimpreqeq;
00204 
00205     QFile file( confpr->valor(CONF_TICKET_PRINTER_FILE) );
00206     if ( !file.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) {
00207         _depura("Error en la Impresion de ticket", 2);
00208     } // end if
00209     file.write (QString("Empresa S.L\n").toAscii());
00210     file.write (QString("====================================\n").toAscii());
00211     file.write(QString("Direccion\n").toAscii());
00212     file.write(QString("CP: 07000 Palma de Mallorca\n").toAscii());
00213     file.write(QString("Tel: 971 00 00 00\n").toAscii());
00215     file.write ( "\n \n", 3);
00216 
00218     file.write( QString("Ticket: ").toAscii());
00219     file.write( DBvalue("numalbaran").toAscii());
00220     file.write ( "\n", 1);
00221 
00222 
00224     file.write( QString("Fecha: ").toAscii());
00225     QDate fecha = QDate::currentDate();
00226     QString sfecha = fecha.toString("d-M-yyyy");
00227     file.write( sfecha.toAscii());
00228     QTime hora = QTime::currentTime();
00229     QString stime = " " + hora.toString("HH:mm");
00230     file.write( stime.toAscii());
00231     file.write ( "\n", 1);
00232 
00233 
00235     file.write( QString("Trabajador: ").toAscii());
00236     cursor2 *cur = empresaBase()->cargacursor("SELECT * FROM trabajador WHERE idtrabajador=" + DBvalue("idtrabajador"));
00237     if (!cur->eof()) {
00238             file.write( DBvalue("idtrabajador").toAscii());
00239             file.write(" ");
00240             file.write( cur->valor("nomtrabajador").toAscii());
00241         file.write ( "\n", 1);
00242     } // end if
00243     delete cur;
00244 
00246     cur = empresaBase()->cargacursor("SELECT * FROM cliente WHERE idcliente=" + DBvalue("idcliente"));
00247     if (!cur->eof()) {
00248         file.write( QString("Cliente: ").toAscii());
00249         file.write( cur->valor("cifcliente").toAscii());
00250         file.write ( " ", 1);
00251         file.write( cur->valor("nomcliente").toAscii());
00252         file.write ( "\n", 1);
00253     } // end if
00254     delete cur;
00255 
00257     cur = empresaBase()->cargacursor("SELECT * FROM almacen WHERE idalmacen=" + DBvalue("idalmacen"));
00258     if (!cur->eof()) {
00259         file.write( QString("Almacen: ").toAscii());
00260         file.write( cur->valor("nomalmacen").toAscii());
00261         file.write ( "\n", 1);
00262     } // end if
00263     delete cur;
00264 
00265 
00266     file.write ( "\n", 1);
00267     file.write ( "\n", 1);
00268     /*
00269             file.write( QString("Descripcion: ").toAscii());
00270             file.write( m_albaranClienteView->DBvalue("descalbaran").toAscii());
00271             file.write ( "\n", 1);
00272     */
00273 // ============================================
00275     QString l;
00276     Fixed irpf("0");
00277 
00278     cur = empresaBase()->cargacursor("SELECT * FROM configuracion WHERE nombre = 'IRPF'");
00279     if (cur) {
00280         if (!cur->eof()) {
00281             irpf = Fixed(cur->valor("valor"));
00282         } // end if
00283         delete cur;
00284     } // end if
00285 
00286     DBRecord *linea;
00287     Fixed descuentolinea("0.00");
00288     for (int i = 0; i < listaLineas()->size(); ++i) {
00289         linea = listaLineas()->at(i);
00290         Fixed cant(linea->DBvalue("cantlalbaran"));
00291         Fixed pvpund(linea->DBvalue("pvplalbaran"));
00292         Fixed desc1(linea->DBvalue("descuentolalbaran"));
00293         Fixed cantpvp = cant * pvpund;
00294         Fixed base = cantpvp - cantpvp * desc1 / 100;
00295         descuentolinea = descuentolinea + (cantpvp * desc1 / 100);
00296         basesimp[linea->DBvalue("ivalalbaran")] = basesimp[linea->DBvalue("ivalalbaran")] + base;
00297         basesimpreqeq[linea->DBvalue("reqeqlalbaran")] = basesimpreqeq[linea->DBvalue("reqeqlalbaran")] + base;
00299         QString str = linea->DBvalue("cantlalbaran").rightJustified(5,' ')+QString("   ")+linea->DBvalue("desclalbaran").leftJustified(24,' ', TRUE)+linea->DBvalue("pvplalbaran").rightJustified(10, ' ');
00300         file.write(str.toAscii());
00301         file.write ( "\n", 1);
00302     } // end for
00303 
00304 
00305     file.write ( "\n", 1);
00306     file.write ( "\n", 1);
00307 
00308     Fixed basei("0.00");
00309     base::Iterator it;
00310     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00311         basei = basei + it.value();
00312     } // end for
00313 
00316     Fixed porcentt("0.00");
00317 
00318 
00320     Fixed totbaseimp("0.00");
00321     Fixed parbaseimp("0.00");
00322     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00323         if (porcentt > Fixed("0.00")) {
00324             parbaseimp = it.value() - it.value() * porcentt / 100;
00325         } else {
00326             parbaseimp = it.value();
00327         } // end if
00328         QString str = "Base Imp" + it.key() + "% " + parbaseimp.toQString().rightJustified(10,' ');
00329 //        file.write(str.rightJustified(42,' ').toAscii());
00330 //        file.write ( "\n", 1);
00331         totbaseimp = totbaseimp + parbaseimp;
00332     } // end for
00333 
00335     Fixed totiva("0.00");
00336     Fixed pariva("0.00");
00337     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00338         Fixed piva(it.key().toAscii().constData());
00339         if (porcentt > Fixed("0.00")) {
00340             pariva = (it.value() - it.value() * porcentt / 100) * piva / 100;
00341         } else {
00342             pariva = it.value() * piva / 100;
00343         } // end if
00344         QString str = "IVA" + it.key() + "% " + pariva.toQString().rightJustified(10,' ');
00345 //        file.write(str.rightJustified(42,' ').toAscii());
00346 //        file.write ( "\n", 1);
00347 
00348         totiva = totiva + pariva;
00349     } // end for
00350 
00352     Fixed totreqeq("0.00");
00353     Fixed parreqeq("0.00");
00354     for (it = basesimpreqeq.begin(); it != basesimpreqeq.end(); ++it) {
00355         Fixed preqeq(it.key().toAscii().constData());
00356         if (porcentt > Fixed("0.00")) {
00357             parreqeq = (it.value() - it.value() * porcentt / 100) * preqeq / 100;
00358         } else {
00359             parreqeq = it.value() * preqeq / 100;
00360         } // end if
00361         QString str = "R. Eq" + it.key() + "% " + parreqeq.toQString().rightJustified(10,' ');
00362 //        file.write(str.rightJustified(42,' ').toAscii());
00363 //        file.write ( "\n", 1);
00364         totreqeq = totreqeq + parreqeq;
00365     } // end for
00366 
00367 
00368 
00369     Fixed totirpf = totbaseimp * irpf / 100;
00370 
00371 //    file.write (QString("=======================\n").rightJustified(43,' ').toAscii());
00372 
00373 
00374     QString str = "B.IMP " + totbaseimp.toQString().rightJustified(10,' ');
00375 //    file.write(str.rightJustified(42,' ').toAscii());
00376 //    file.write ( "\n", 1);
00377 
00378     str = "IVA " + totiva.toQString().rightJustified(10,' ');
00379 //    file.write(str.rightJustified(42,' ').toAscii());
00380 //    file.write ( "\n", 1);
00381 
00382     str = "IRPF " + totirpf.toQString().rightJustified(10,' ');
00383 //    file.write(str.rightJustified(42,' ').toAscii());
00384 //    file.write ( "\n", 1);
00385 
00386 
00387     str = "( IVA INCLUIDO )";
00388     file.write(str.rightJustified(42,' ').toAscii());
00389     file.write ( "\n", 1);
00390 
00391 
00392 
00394     file.write (QString("____________________\n").rightJustified(43,' ').toAscii());
00395 
00396     Fixed total = totiva + totbaseimp + totreqeq - totirpf;
00397     str = "TOTAL " + total.toQString().rightJustified(10,' ');
00398     file.write(str.rightJustified(42,' ').toAscii());
00399     file.write ( "\n", 1);
00400 
00401 
00402 // ============================================
00403 
00404 
00406     file.write ( "\n \n \n \n", 7);
00407 
00410     file.write ("\x1Dh\x40",3);
00412     file.write ( "\x1DH\x02",3);
00414     file.write ( "\x1D",1);
00415     file.write ( "f\x01",2);
00416     ;
00418     file.write ( "\x1D\x77\x01",3);
00420     file.write ( "\x1Dk\x04",3);
00421     file.write (QString("ALB").toAscii());
00422     file.write (" ", 1);
00423     file.write (DBvalue("idalbaran").toAscii());
00424     file.write (" ", 1);
00425     file.write (DBvalue("numalbaran").toAscii());
00426     file.write (" ", 1);
00427     file.write (DBvalue("refalbaran").toAscii());
00428     file.write ("\x00", 1);
00429 
00430 
00432     /*
00433             file.write ("\x1B\x2A\x00\xD2\x00", 5);
00434             for (int i=0; i <15; i++) {
00435                 file.write ( "\x01\x02\x04\x08\x10\x20\x40\x80", 8);
00436                 file.write ("\x40\x20\x10\x08\x04\x02", 6);
00437             }
00438     */
00440     file.write ( "\n \n \n \n \n", 9);
00441 
00442 
00444     file.write ("\x1D\x56\x01", 3);
00445     file.close();
00446 }
00447 
00448 
00449 void Ticket::subir() {
00450     int i = listaLineas()->indexOf(lineaActTicket());
00451     if (i > 0) i--;
00452     setLineaActual(listaLineas()->at(i));
00453     pintar();
00454 }
00455 
00456 void Ticket::bajar() {
00457     int i = listaLineas()->indexOf(lineaActTicket());
00458     if (i < listaLineas()->size() -1) i++;
00459     setLineaActual(listaLineas()->at(i));
00460     pintar();
00461 }
00462 
00463 
00464 void Ticket::agregarCantidad(QString cantidad) {
00465     Fixed cant(cantidad);
00467     if (m_lineaActual == NULL) {
00468         mensajeAviso("No existe linea");
00469         return;
00470     } // end if
00471     Fixed cantorig(m_lineaActual->DBvalue("cantlalbaran"));
00472     Fixed suma = cant + cantorig;
00473     if (suma == Fixed("0.00")) {
00474         listaLineas()->removeAt(listaLineas()->indexOf(m_lineaActual));
00475         m_lineaActual = listaLineas()->at(0);
00476     } else {
00477         m_lineaActual->setDBvalue("cantlalbaran", suma.toQString());
00478     } // end if
00479     pintar();
00480 }
00481 
00482 void Ticket::ponerCantidad(QString cantidad) {
00483      Fixed cant(cantidad);
00485     if (m_lineaActual == NULL) {
00486         mensajeAviso("No existe linea");
00487         return;
00488     } // end if
00489 
00490     if (cant == 0) {
00491         listaLineas()->removeAt(listaLineas()->indexOf(m_lineaActual));
00492         m_lineaActual = listaLineas()->at(0);
00493     } else {
00494         m_lineaActual->setDBvalue("cantlalbaran", cant.toQString());
00495     } // end if
00496     pintar();
00497 }
00498 
00499 void Ticket::ponerPrecio(QString precio) {
00500     Fixed valor(precio);
00502     if (m_lineaActual == NULL) {
00503         mensajeAviso("No existe linea");
00504         return;
00505     } // end if
00506     m_lineaActual->setDBvalue("pvplalbaran", valor.toQString());
00507     pintar();
00508 }
00509 
00510 void Ticket::insertarArticuloCodigo(QString codigo) {
00511     QString query = "SELECT * FROM articulo WHERE codigocompletoarticulo= '"+ codigo +"'";
00512     cursor2 *cur = empresaBase()->cargacursor(query);
00513     if (!cur->eof()) {
00514         insertarArticulo(cur->valor("idarticulo"), Fixed("1"));
00515     } // end if
00516     delete cur;
00517 }
00518 
00519 void Ticket::insertarArticuloCodigoNL(QString codigo) {
00520     QString query = "SELECT * FROM articulo WHERE codigocompletoarticulo= '"+ codigo +"'";
00521     cursor2 *cur = empresaBase()->cargacursor(query);
00522     if (!cur->eof()) {
00523         insertarArticulo(cur->valor("idarticulo"), Fixed("1"), TRUE);
00524     } // end if
00525     delete cur;
00526 }
00527 
00528 
00529 
00530 
00532 
00538 int Ticket::guardar() {
00539     _depura("Ticket::guardar", 0);
00540 
00541     try {
00542         QString id;
00543         empresaBase()->begin();
00544         DBsave(id);
00545         DBRecord *item;
00546         for (int i = 0; i < listaLineas()->size(); ++i) {
00547             QString id1;
00548             item = listaLineas()->at(i);
00549             item->setDBvalue("idalbaran", id);
00550             item->setDBvalue("ordenlalbaran", QString::number(i));
00551             item->DBsave(id1);
00552         }// end for
00553         empresaBase()->commit();
00554 
00555         cursor2 *cur = empresaBase()->cargacursor("SELECT * FROM albaran WHERE idalbaran = " + id);
00556         DBload(cur);
00557         delete cur;
00558 
00559         _depura("END Ticket::guardar", 0);
00560         return 0;
00561     } catch (...) {
00562         mensajeInfo("Error inesperado con la base de datos");
00563         empresaBase()->rollback();
00564         return -1;
00565     } // end try
00566 }
00567 

Generated on Sat Dec 15 00:01:24 2007 for BulmaGes by  doxygen 1.5.1