i develop a job that block some customers :
static void BlocageClient(Args _args)
{
CustTable _custTable;
CustTrans _custTrans;
HcmWorker hcmWorker;
date _dateAujourdhui;
date _fromDate;
date _toDate;
real _encoursClient;
real _effetNonEchu;
real _cheques;
real _montantFacture;
real _soldeTotalClient,custPaymManAmountMST;
boolean _testBlocage;
_montantFacture = 0.0;
_effetNonEchu = 0.0;
_cheques = 0.0;
_testBlocage = false;
_dateAujourdhui =str2Date('20/03/2016',123);
// _dateAujourdhui = DateTimeUtil::Date(DateTimeUtil::getSystemDateTime());
_fromDate = mkDate(1,mthOfYr(_dateAujourdhui)-2,year(_dateAujourdhui));
_toDate = mkDate(30,mthOfYr(_dateAujourdhui)-2,year(_dateAujourdhui));
while select forUpdate _custTable
{ //condition pour vérifier la paiement de Mois - 2
while select _custTrans where _custTrans.AccountNum == _custTable.AccountNum
&& _custTrans.TransDate> _fromDate && _custTrans.TransDate < _toDate
&& _custTrans.TransType == LedgerTransType::Sales
{
_montantFacture=_custTrans.remainAmountCur();
if ( _montantFacture>100.000)
{
_custTable.Blocked = CustVendorBlocked::All;
_custTable.SPLResponsableModification = hcmWorker::find(hcmWorker::userId2Worker(curUserId())).name();
_custTable.SPLDateModification = DateTimeUtil::getSystemDateTime();
_testBlocage = true;
}
}
if (_testBlocage ==false)
{ //condition pour vérifier la limite de crédit
if (_custTable.MandatoryCreditLimit==NoYes::Yes && _custTable.CreditMax ==0.0)
{
_custTable.Blocked= CustVendorBlocked::Invoice;
_custTable.SPLResponsableModification = hcmWorker::find(hcmWorker::userId2Worker(curUserId())).name();
_custTable.SPLDateModification = DateTimeUtil::getSystemDateTime();
_testBlocage = true;
info(strFmt("compte bloqué avec succés."));
}
else
{ //calculer les montants de cheques et traites
while select _custTrans where _custTrans.AccountNum == _custTable.AccountNum
{
if(_custTrans.Invoice=='')
{
if((_custTrans.PaymMode=='REG TRAITE')&&(_custTrans.DueDate>today()))
_effetNonEchu+=abs(_custTrans.AmountMST);
if((_custTrans.PaymMode=='REG CHEQUE')&&(_custTrans.DueDate>today()))
_cheques+=abs(_custTrans.AmountMST);
}
} //calculer le solde total du client
if (isConfigurationkeyEnabled(configurationkeynum(PaymMan)))
{
custPaymManAmountMST = CustPaymManTrans::openAmountMST(_custTable.AccountNum);
}
_soldeTotalClient = custPaymManAmountMST + _custTrans.AmountMST;
_encoursClient=_soldeTotalClient+_effetNonEchu+_cheques;
//condition pour vérifier l'encours du client
if(_encoursClient>_custTable.CreditMax)
{
_custTable.Blocked = CustVendorBlocked::Invoice;
_testBlocage = true;
}
}
}
ttsBegin;
_custTable.Update();
ttsCommit;
}
}