Hi Agha
/// Processes the report business logic.
/// </summary>
/// <remarks>
/// Provides the ability to write the report business logic. This method will be called by SQL
/// ServerReporting Services at runtime. The method should compute data and populate the data tables
/// that will be returned to SQL ServerReporting Services.
/// </remarks>
[SysEntryPointAttribute(false)]
public void processReport()
{
boolean firstCustomer = true;
boolean journalFound = false;
CustTable custTableTmp;
Query qCustTable, qJournals;
QueryRun qRunCustTable;
QueryBuildRange qBuildRange;
QueryRun localQueryRun;
AccountNum rangeValue;
smmCustRevenueContract contract;
qCustTable = this.parmQuery();
qJournals = this.parmQuery();
contract = this.parmDataContract() as smmCustRevenueContract;
currency = infolog.isoCurrencyCode() ? infolog.isoCurrencyCode() : Ledger::accountingCurrency(CompanyInfo::find().RecId);
qCustTable.recordLevelSecurity(true);
qJournals.recordLevelSecurity(true);
invoiceOrderAccount = contract.parmInvoiceOrderAccount();
if (invoiceOrderAccount == InvoiceOrderAccount::InvoiceAccount)
{
qJournals.dataSourceTable(tablenum(CustInvoiceJour)).addLink(fieldnum(CustTable, AccountNum),fieldnum(CustInvoiceJour, InvoiceAccount));
qJournals.dataSourceTable(tablenum(ProjInvoiceJour)).addLink(fieldnum(CustTable, AccountNum),fieldnum(ProjInvoiceJour, InvoiceAccount));
}
else
{
qJournals.dataSourceTable(tablenum(CustInvoiceJour)).addLink(fieldnum(CustTable, AccountNum),fieldnum(CustInvoiceJour, OrderAccount));
qJournals.dataSourceTable(tablenum(ProjInvoiceJour)).addLink(fieldnum(CustTable, AccountNum),fieldnum(ProjInvoiceJour, InvoiceAccount));
}
qBuildRange = SysQuery::findOrCreateRange(qJournals.dataSourceTable(tablenum(CustTable)),fieldnum(CustTable, AccountNum));
if (!qBuildRange.value())
{
qBuildRange.status(RangeStatus::Hidden);
}
else
{
rangeValue = qBuildRange.value();
}
qRunCustTable = new QueryRun(qCustTable);
while(qRunCustTable.next())
{
if (SysReportRun::changed(qRunCustTable,tablenum(CustTable)))
{
custTableTmp = qRunCustTable.get(tablenum(CustTable));
journalFound = false;
revenue = 0;
sumMarkup = 0;
qBuildRange.value(queryValue(custTableTmp.AccountNum));
localQueryRun = new QueryRun(qJournals);
localQueryRun.recordLevelSecurity(true);
while(localQueryRun.next())
{
if (SysReportRun::changed(localQueryRun,tablenum(CustInvoiceJour)))
{
custInvoiceJour = localQueryRun.get(tablenum(CustInvoiceJour));
if (custInvoiceJour)
{
revenue += Currency::mstAmount(custInvoiceJour.SalesBalance-custInvoiceJour.EndDisc,custInvoiceJour.CurrencyCode,custInvoiceJour.InvoiceDate,
Currency::noYes2UnknownNoYes(custInvoiceJour.Triangulation),
custInvoiceJour.ExchRate,custInvoiceJour.ExchRateSecondary);
sumMarkup += Currency::mstAmount(custInvoiceJour.SumMarkup,custInvoiceJour.CurrencyCode,custInvoiceJour.InvoiceDate,
Currency::noYes2UnknownNoYes(custInvoiceJour.Triangulation),
custInvoiceJour.ExchRate,custInvoiceJour.ExchRateSecondary);
journalFound = true;
}
}
if (SysReportRun::changed(localQueryRun,tablenum(ProjInvoiceJour)))
{
projInvoiceJour = localQueryRun.get(tablenum(ProjInvoiceJour));
if (projInvoiceJour)
{
revenue += Currency::mstAmount(projInvoiceJour.SalesOrderbalance-projInvoiceJour.EndDisc,projInvoiceJour.CurrencyId,projInvoiceJour.InvoiceDate,
Currency::noYes2UnknownNoYes(projInvoiceJour.Triangulation),
projInvoiceJour.ExchRate,projInvoiceJour.ExchrateSecondary);
sumMarkup += Currency::mstAmount(projInvoiceJour.SumMarkup,projInvoiceJour.CurrencyId,projInvoiceJour.InvoiceDate,
Currency::noYes2UnknownNoYes(projInvoiceJour.Triangulation),
projInvoiceJour.ExchRate,projInvoiceJour.ExchrateSecondary);
journalFound = true;
}
}
}
if (journalFound)
{
qBuildRange.value(rangeValue);
this.insertIntoTmpTable(custTableTmp);
}
}
}
}