BEGIN
/* u obou faktur je nutne brat ohled na dobropisy */
CN_LocalAmount = 0;
CN_PayLocalAmount = 0;
CN_PartialPayLocalAmount = 0;
CN_PartialLocalAmount = 0;
if (DocumentType = '03') then begin
for select CN.ID, CN.LocalAmount from IssuedCreditNotes CN where
CN.Source_ID = :Document_ID and CN.DocDate$Date <= :EndDate
into CN_ID, CN_PartialLocalAmount
do begin
if (CN_PartialLocalAmount is NULL) then
CN_PartialLocalAmount = 0;
select Sum(LocalPAmount) from PaymentsForDocument('60', :CN_ID, :EndDate)
into CN_PartialPayLocalAmount;
if (CN_PartialPayLocalAmount is NULL) then
CN_PartialPayLocalAmount = 0;
CN_PayLocalAmount = CN_PartialPayLocalAmount + CN_PayLocalAmount;
CN_LocalAmount = CN_PartialLocalAmount + CN_LocalAmount;
end
end
if (DocumentType = '04') then begin
for select CN.ID, CN.LocalAmount from ReceivedCreditNotes CN where
CN.Source_ID = :Document_ID and CN.DocDate$Date <= :EndDate
into CN_ID, CN_PartialLocalAmount
do begin
if (CN_PartialLocalAmount is NULL) then
CN_PartialLocalAmount = 0;
select Sum(LocalPAmount) from PaymentsForDocument('61', :CN_ID, :EndDate)
into CN_PartialPayLocalAmount;
if (CN_PartialPayLocalAmount is NULL) then
CN_PartialPayLocalAmount = 0;
CN_PayLocalAmount = CN_PartialPayLocalAmount + CN_PayLocalAmount;
CN_LocalAmount = CN_PartialLocalAmount + CN_LocalAmount;
end
end
select Sum(LocalPAmount) from PaymentsForDocument(:DocumentType, :Document_ID, :EndDate)
into :PayLocalAmount;
if (PayLocalAmount is NULL) then
PayLocalAmount = 0;
ReceivableAmount = DocLocalAmount - PayLocalAmount - (CN_LocalAmount - CN_PayLocalAmount);
for select DT.ID, DT.DueTermLimit from DueTermLimits DT where
(:DueTermLimitSelID = '' or DT.ID in (select OBJ_ID from SELDAT where SEL_ID = :DueTermLimitSelID))
order by DT.DueTermLimit
into :DT_ID, :DT_DueTermLimit
do begin
/* zaplaceno */
if (ReceivableAmount = 0.00) then begin
LocalAmount = ReceivableAmount;
Suspend;
end
if (ReceivableAmount <> 0.00) then
begin
ReceivableDate = EndDate - DocDueDate;
select Max(A.DueTermLimit) from DueTermLimits A where
(:DueTermLimitSelID = '' or A.ID in (select OBJ_ID from SELDAT where SEL_ID = :DueTermLimitSelID))
into :NextLimit;
/* musim dohledat nejblizsi nasledujici limit */
if (NextLimit = DT_DueTermLimit) then begin
NextLimit = 1000000;
end
else
begin
for select DueTermLimit from DueTermLimits where
(:DueTermLimitSelID = '' or ID in (select OBJ_ID from SELDAT where SEL_ID = :DueTermLimitSelID))
into :DLimit
do begin
if ((DLimit > DT_DueTermLimit) and (DLimit <= NextLimit)) then
NextLimit = DLimit;
end
end
if ((ReceivableDate >= DT_DueTermLimit) and (ReceivableDate < NextLimit)) then begin
LocalAmount = ReceivableAmount;
Suspend;
end
else
begin
LocalAmount = 0.00;
Suspend;
end
end
end
end;