//---------------------------------------------------------------------------

#include <vcl.h>
#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();
		if(pay!=0) Synchronize(UpdateCaption);
	}
	validator->endPay();
}
//---------------------------------------------------------------------------
void ValidatorThread::Stop()
{
	bStop=true;
}
//---------------------------------------------------------------------------
//передаём сумму
void __fastcall ValidatorThread::UpdateCaption()
{
	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=frmMain->Label13->Caption;
try
{
	//Сохраняем платёж в базе данных
	if(dModule->UserType) //true - Юредическое лицо
	{
		if(dModule->BalanceType) //Задолженность по холодной воде
		{
			if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
				dModule->OraSession1->Commit();
			else
				{isOk=false; dModule->OraSession1->Rollback();}
		}else //Задолженность по канализации
		{
			if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
				dModule->OraSession1->Commit();
			else
				{isOk=false; dModule->OraSession1->Rollback();}
		}
	}else //false - физическое лицо
	{
		if(dModule->BalanceType) //Задолженность по холодной воде
		{
			if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
				dModule->OraSession1->Commit();
			else
				{isOk=false; dModule->OraSession1->Rollback();}
		}else //Задолженность по канализации
		{
			if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
				dModule->OraSession1->Commit();
			else
				{isOk=false; dModule->OraSession1->Rollback();}
		}
	}
}catch(...){isOk=false;}

	//Если не сохранился в баре Оракла то сохраняем локально
	if(!isOk)
	{
		if(dModule->BalanceType)
			dModule->savePay(1,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //Холодная
		else
			dModule->savePay(2,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //Канализация
	}

}
//---------------------------------------------------------------------------
