00001
00002 static QMap< QString, QString > pgBtns ;
00003 static QMap< QString, int > directActions ;
00004 static QMap< QString, int > payStrategies ;
00005
00006
00007 void LabCashbox::init()
00008 {
00009 ticketViewTable->setLeftMargin( 0 ) ;
00010 ticketViewTable->setColumnWidth( 0, 50 ) ;
00011 ticketViewTable->setColumnWidth( 1, 150 ) ;
00012 ticketViewTable->setColumnWidth( 2, 50 ) ;
00013 ticketViewTable->setColumnWidth( 3, 50 ) ;
00014 ticketViewTable->setColumnStretchable( 1, TRUE ) ;
00015 ticketViewTable->refresh( QDataTable::RefreshAll ) ;
00016 totalLCDNumber->display( tr( "hello" ) ) ;
00017
00018 cdata = new QlabCashbox( this, "LabCashbox" ) ;
00019
00020 cdata->setStatus( QlabCashbox::Opened ) ;
00021 cdata->setActionCode( QlabCashbox::Ready ) ;
00022 cdata->clearLine() ;
00023 cdata->setCountDone( FALSE ) ;
00024 stdGetterLineEdit->setFocus() ;
00025
00026 setFreeButtons() ;
00027 inInit = TRUE ;
00028 newTicket() ;
00029 inInit = FALSE ;
00030 }
00031
00032 void LabCashbox::CloseBox()
00033 {
00034 if ( !cdata->countDone() ) {
00035 countBox( "Closing" ) ;
00036 }
00037 cdata->setStatus( QlabCashbox::Closed ) ;
00038 close() ;
00039 }
00040
00041
00042 void LabCashbox::PauseBox()
00043 {
00044 cdata->setStatus( QlabCashbox::Paused ) ;
00045 LoginForm * dialog = new LoginForm( this, "Login Form", TRUE ) ;
00046 if ( dialog->exec() == QDialog::Accepted ) {
00047 cdata->setStatus( QlabCashbox::Opened ) ;
00048 } else {
00049 close() ;
00050 }
00051 delete dialog ;
00052 }
00053
00054
00055 void LabCashbox::countBox( const QString & mode)
00056 {
00057 CashboxCount * dialog = new CashboxCount( this, "Count Box", TRUE ) ;
00058 dialog->setMode( mode ) ;
00059 dialog->exec() ;
00060 }
00061
00062
00063 void LabCashbox::withdrawalBox()
00064 {
00065 countBox( "Withdrawal" ) ;
00066 }
00067
00068
00069 void LabCashbox::optionsBox()
00070 {
00071 qDebug( "Specific options will be inserted here. Not yet implemented" ) ;
00072 }
00073
00074
00075 void LabCashbox::superviseMode()
00076 {
00077
00078 }
00079
00080
00081 void LabCashbox::doAction()
00082 {
00083 QString line = stdGetterLineEdit->text().stripWhiteSpace() ;
00084 if ( line.isEmpty() ) return ;
00085 qDebug( "Entered doAction" ) ;
00086 switch ( cdata->actionCode() ) {
00087 case QlabCashbox::Ready :
00088 qDebug( "Box is Ready" ) ;
00089 CurProd1TextLabel->setText( "" ) ;
00090 if ( cdata->findPart( line ) ) {
00091 CurProd2TextLabel->setText( "" ) ;
00092 ticketViewTable->refresh( QDataTable::RefreshData ) ;
00093 PriceLCDNumber->display( cdata->getElement( QlabCashbox::TTotal ).toDouble() ) ;
00094 currLineTextLabel->setText( cdata->getElement( QlabCashbox::TProdName ).toString() ) ;
00095 totalLCDNumber->display( cdata->getElement( QlabCashbox::TGrandTotal ).toDouble() ) ;
00096 objectsLCDNumber->display( cdata->getElement( QlabCashbox::TTotalItems ).toInt() ) ;
00097 stdGetterLineEdit->setText( "" ) ;
00098 cdata->clearLine() ;
00099 } else {
00100 stdGetterLineEdit->setText( "" ) ;
00101 CurProd2TextLabel->setText( QString( tr( "Part: %1 not found" ).arg( line ) ) ) ;
00102 }
00103 break ;
00104 case QlabCashbox::Searching :
00105 break ;
00106 case QlabCashbox::Payment :
00107 qDebug( "Box is in PayMode" ) ;
00108 if ( cdata->
00109 break ;
00110 case QlabCashbox::BegSubTotal :
00111 break ;
00112 case QlabCashbox::BegTotal :
00113 break ;
00114 case QlabCashbox::BegImmediateCancel :
00115 if ( !cdata->cancelLast() ) {
00116 CurProd1TextLabel->setText( tr( "Invalid action. Nothing to cancel now." ) ) ;
00117 }
00118 cdata->setActionCode( QlabCashbox::Ready ) ;
00119 break ;
00120 case QlabCashbox::BegTicketCancel :
00121 if ( !cdata->cancelLastTicket() ) {
00122 CurProd1TextLabel->setText( tr( "Could not cancel last ticket." ) ) ;
00123 }
00124 break ;
00125 case QlabCashbox::BegTransactionCancel :
00126 if ( cdata->getTicketList() ) {
00127 TicketHistory * dialog = new TicketHistory( this, "TicketHistory", TRUE ) ;
00128 dialog->setMessage( tr( "Select the ticket to cancel and click Apply" ) ) ;
00129 dialog->setDateValues( QDate::currentDate() ) ;
00130 if ( dialog->exec() == QDialog::Accepted ) {
00131
00132 }
00133 delete dialog ;
00134 }
00135 break ;
00136
00137
00138
00139
00140
00141
00142
00143 }
00144 }
00145
00146
00147 void LabCashbox::doCount()
00148 {
00149 countBox( "Cash Counting" ) ;
00150 }
00151
00152
00153
00154 void LabCashbox::evalGetLine( const QString & line )
00155 {
00156 if ( line.isEmpty() ) return ;
00157 qDebug( QString( "evalGetLine reports: %1" ).arg( line ) ) ;
00158 CurProd1TextLabel->setText( "" ) ;
00159 QString test = line.right( 1 ) ;
00160 if ( test == "*" ) {
00161 cdata->setValue( "qty", "1" ) ;
00162 }
00163 }
00164
00168
00169
00170
00171
00172
00178 void LabCashbox::evalPayStrategy()
00179 {
00180 QString mode = QObject::sender()->name() ;
00181 mode.replace( "Button", "" ) ;
00182 CurProd1TextLabel->setText( "" ) ;
00183 cdata->insertLine( QlabCashbox::Total ) ;
00184 ticketViewTable->refresh( QDataTable::RefreshData ) ;
00185 QlabCashbox::PayDialog act = cdata->setPayStrategy( mode ) ;
00186 switch ( act ) {
00187 case QlabCashbox::GetCashValue :
00188 CurProd1TextLabel->setText( tr( "Please enter Money value" ) ) ;
00189 break ;
00190 case QlabCashbox::FullPartial :
00191 CurProd1TextLabel->setText( tr( "1 for Full, 2 for partial" ) ) ;
00192 break ;
00193 case QlabCashbox::GetVoucher :
00194 CurProd1TextLabel->setText( tr( "Enter or scan Voucher value" ) ) ;
00195 break ;
00196 case QlabCashbox::GetCustomer :
00197 CurProd1TextLabel->setText( tr( "Customer Code. ? for search" ) ) ;
00198 break ;
00199 case QlabCashbox::UnknownMode :
00200 CurProd1TextLabel->setText( tr( "Unknown Pay Mode. Correct it" ) ) ;
00201 break ;
00202 }
00203 }
00204
00211 void LabCashbox::evalFreeBtns()
00212 {
00213 QString btn = QObject::sender()->name() ;
00214 stdGetterLineEdit->setText( pgBtns[btn] ) ;
00215 doAction() ;
00216 }
00217
00221 void LabCashbox::newTicket()
00222 {
00223 currLineTextLabel->setText( "" ) ;
00224 CurProd1TextLabel->setText( tr( "Welcome" ) ) ;
00225 CurProd2TextLabel->setText( tr( "Next Customer" ) ) ;
00226
00227 ticketInfoLabel->setText( cdata->createTicket() ) ;
00228 if ( !inInit ) {
00229 cdata->insertLine( QlabCashbox::Header ) ;
00230 PriceLCDNumber->display( 0 ) ;
00231 objectsLCDNumber->display( 0 ) ;
00232 totalLCDNumber->display( 0 ) ;
00233 }
00234 stdGetterLineEdit->setText( "" ) ;
00235 cdata->setActionCode( QlabCashbox::Ready ) ;
00236 }
00237
00238
00242 void LabCashbox::manageCashPayment()
00243 {
00244 double money = stdGetterLineEdit->text().stripWhiteSpace().toDouble() ;
00245
00246 cdata->setValue( "total", QString( "%1" ).arg( money ) ) ;
00247 cdata->insertLine( QlabCashbox::Cashin ) ;
00248
00249 CurProd2TextLabel->setText( tr( "Cash Received" ) ) ;
00250 PriceLCDNumber->display( QString::number( money, 'f', 2 ) ) ;
00251
00252 ticketViewTable->refresh( QDataTable::RefreshData ) ;
00253
00254 double total = cdata->getGrandTotal() ;
00255 if ( money >= total ) {
00256 totalLCDNumber->display( QString::number( money - total, 'f', 2 ) ) ;
00257 CurProd1TextLabel->setText( tr( "Cash to refund" ) ) ;
00258 }
00259
00260 cdata->setValue( "total", QString( "%1" ).arg( money - total ) ) ;
00261 cdata->insertLine( QlabCashbox::Refund ) ;
00262
00263 ticketViewTable->refresh( QDataTable::RefreshData ) ;
00264
00265 if ( money >= total ) {
00266 cdata->informMaster( QlabCashbox::TicketEnd ) ;
00267 } else {
00268 CurProd2TextLabel->setText( tr( "Incomplete. Select complementary pay mode" ) ) ;
00269 }
00270 }
00271
00286 void LabCashbox::setFreeButtons()
00287 {
00288
00289 for ( int i = 0; i < 24; i++ ) {
00290 QPushButton * btn = (QPushButton *)this->child( QString( "free%1" ).arg( i + 1 ) );
00291 btn->setEnabled( FALSE ) ;
00292 btn->setText( "" ) ;
00293 connect( btn, SIGNAL( clicked() ), this, SLOT( evalFreeBtns() ) );
00294 }
00295 QStringList btns = cdata->getProgrammableButtons() ;
00296 for ( QStringList::Iterator it = btns.begin(); it != btns.end(); ++it ) {
00297 QString entry = *it ;
00298 QString name = entry.section( "=", 0, 0 ) ;
00299 QString value = entry.section( "{", 1, 1 ).replace( "}", "" ) ;
00300 QString lbl = value.section( ";", 0, 0 ) ;
00301 lbl = lbl.section( "=", 1, 1 ) ;
00302 QString lvalue = value.section( ";", 1, 1 ) ;
00303 lvalue = lvalue.section( "=", 1, 1 ) ;
00304 QPushButton * btn = (QPushButton * )this->child( name ) ;
00305 btn->setText( lbl ) ;
00306 btn->setEnabled( TRUE ) ;
00307 pgBtns.replace( name, lvalue ) ;
00308 }
00309 }
00310
00314 void LabCashbox::evalDirectAction()
00315 {
00316 QString btn = QObject::sender()->name() ;
00317 btn.replace( "Button", "" ) ;
00318 if ( btn =="subTotal" ) {
00319
00320 cdata->insertLine( QlabCashbox::Subtotal ) ;
00321 } else if ( btn == "total" ) {
00322 cdata->insertLine( QlabCashbox::Total ) ;
00323 } else if ( btn == "immCancel" ) {
00324 cdata->setActionCode( QlabCashbox::BegImmediateCancel ) ;
00325 doAction() ;
00326 } else if ( btn == "ticketCancel" ) {
00327 cdata->setActionCode( QlabCashbox::BegTicketCancel ) ;
00328 doAction() ;
00329 } else if ( btn == "transactionCancel" ) {
00330 cdata->setActionCode( QlabCashbox::BegTransactionCancel ) ;
00331 doAction() ;
00332 } else if ( btn == "qty" ) {
00333 QString line = stdGetterLineEdit->text() ;
00334 if ( line == "*" || line.isEmpty() ) {
00335 cdata->setValue( "qty", "1" ) ;
00336 cdata->setValue( "serial", cdata->prevSerial() ) ;
00337 stdGetterLineEdit->setText( cdata->prevSerial() ) ;
00338 doAction() ;
00339 } else {
00340 cdata->setValue( "qty", stdGetterLineEdit->text().replace( "*", "" ) ) ;
00341 }
00342 CurProd2TextLabel->setText( QString( "%1 x " ).arg( stdGetterLineEdit->text().replace( "*", "" ) ) ) ;
00343 stdGetterLineEdit->setText( "" ) ;
00344 }
00345 ticketViewTable->refresh( QDataTable::RefreshData ) ;
00346 }