//--------------------------------------------------------------------------- #include #pragma hdrstop #include "ValidatorThread.h" #include "Validator.h" #include "PrinterOPOS.h" #include "uf_Main.h" #include "ud_Module.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Important: Methods and properties of objects in VCL can only be // used in a method called using Synchronize, for example: // // Synchronize(UpdateCaption); // // where UpdateCaption could look like: // // void __fastcall ValidatorThread::UpdateCaption() // { // Form1->Caption = "Updated in a thread"; // } //--------------------------------------------------------------------------- __fastcall ValidatorThread::ValidatorThread(bool CreateSuspended) : TThread(CreateSuspended) { bStop=false; } //--------------------------------------------------------------------------- void __fastcall ValidatorThread::Execute() { while(!bStop) { pay=validator->getPay(state); Synchronize(UpdateState); if(pay!=0) Synchronize(UpdateCaption); } validator->endPay(); } //--------------------------------------------------------------------------- void ValidatorThread::Stop() { bStop=true; } //--------------------------------------------------------------------------- //Проверка состояния блокировка интерфейса если идёт приём денег void __fastcall ValidatorThread::UpdateState() { //TODO оплатил денюжку потом засунул левую либо не доконца засунул не обновляется кнопка оплатить!!! if(state==0x15) { frmMain->gbtnJCheck->Enabled=false; frmMain->gbtnPCheck->Enabled=false; }else if(state==0x19 || state==0x81) { if(frmMain->sum!=0) { frmMain->gbtnJCheck->Enabled=true; frmMain->gbtnPCheck->Enabled=true; } } } //--------------------------------------------------------------------------- //передаём сумму void __fastcall ValidatorThread::UpdateCaption() { TService* ser=NULL; bool isOk=true; frmMain->gbtnJCheck->Enabled=true; //разрешаем кнопк платёж frmMain->gbtnPCheck->Enabled=true; frmMain->gbtnMainMenu->Enabled=false; frmMain->sum+=pay; // frmMain->Label13->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"тг."; frmMain->Label9->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"тг."; //Добавляю к сумме выделенной услуги TService* s=NULL; for(int i=0;iLService->Count;i++) { if(((TService*)dModule->LService->Items[i])->select) { s=(TService*)dModule->LService->Items[i]; break; } } if(s!=NULL) { s->sum+=pay; s->lblSum->Caption=IntToStr(s->sum); } try { //Сохраняем платёж в базе данных if(dModule->UserType) //true - Юредическое лицо { if(dModule->BalanceType==1) //Задолженность по холодной воде { if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} }else if(dModule->BalanceType==2) //Задолженность по канализации { if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} } }else //false - физическое лицо { ser=dModule->getSelectService(); if(ser==NULL){isOk=false; dModule->OraSession1->Rollback();} else { if(dModule->BalanceType==1) //Задолженность по холодной воде { if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} }else if(dModule->BalanceType==2) //Задолженность по канализации { if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} } } } }catch(...){isOk=false;} //Если не сохранился в базе Оракла то сохраняем локально if(!isOk) { int set_id=0; if(ser!=NULL) set_id=ser->id; if(dModule->BalanceType==1) { dModule->savePay(1,dModule->UserType,dModule->UserId,set_id,pay,g_printer->getCheckId()+1); //Холодная } else if(dModule->BalanceType==2) dModule->savePay(2,dModule->UserType,dModule->UserId,set_id,pay,g_printer->getCheckId()+1); //Канализация } } //---------------------------------------------------------------------------