class ExportPaymAdviceRptViaEmailService extends SysOperationServiceBase
{
VendTrans vendTrans;
LedgerJournalTrans LedgerJournalTrans;
str subject,messageBody;
SysEmailSystemTable sysEmailTable;
public void printReport( ExportPaymAdviceRptViaEmailContract _contract)
{
FromDate fromDate
= _contract.parmFromDate();
ToDate toDate
= _contract.parmToDate();
VendAccount vendAccount =
_contract.parmVendAccount();
QueryBuildDataSource vendTrans_Ds,vendSettlement_DS;
Query query =
new Query();
vendTrans_Ds = query.addDataSource(TableNum(VendTrans));
vendTrans_Ds.addRange(fieldNum(VendTrans, TransType)).value(SysQuery::value(LedgerTransType::Payment));
vendTrans_Ds.addRange(fieldNum(VendTrans,
IsEmailSent)).value(SysQuery::value(NoYes::No));
// vendTrans_Ds.addRange(fieldNum(VendTrans,
Voucher)).value('T-VPV-0038801');
if
(fromDate && toDate)
{
vendTrans_Ds.addRange(fieldNum(VendTrans, TransDate)).value(queryRange(fromDate,toDate));
}
if
(vendAccount)
{
vendTrans_Ds.addRange(fieldNum(VendTrans, AccountNum)).value(SysQuery::value(vendAccount));
}
vendSettlement_DS = vendTrans_Ds.addDataSource(TableNum(VendSettlement));
vendSettlement_DS.relations(true);
vendSettlement_DS.joinMode(JoinMode::ExistsJoin);
QueryRun qr =
new QueryRun (query);
while
(qr.next())
{
vendTrans = qr.get(tableNum(vendTrans));
try
{
LedgerJournalTrans =
LedgerJournalTrans::find(vendTrans.JournalNum,vendTrans.Voucher,false);
if (LedgerJournalTrans.RecId != 0)
{
this.getReport();
}
else
{
warning ("Transaction is not available.");
}
}
catch
{
continue;
}
}
}
public void getReport()
{
Filename fileName =
"PaymentAdviceReport.Pdf";
SrsReportRunController
controller = new SrsReportRunController();
BankPaymAdviceContract
contract = new BankPaymAdviceContract();
SRSPrintDestinationSettings
settings;
Array arrayFiles;
System.Byte[] reportBytes =
new System.Byte[0]();
SRSProxy srsProxy;
SRSReportRunService srsReportRunService =
new SrsReportRunService();
DimensionAttributeValueCombination dimensionAttributeValueCombination;
Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray;
Map reportParametersMap;
SRSReportExecutionInfo executionInfo =
new SRSReportExecutionInfo();
contract.parmAccountNum(vendtrans.AccountNum);
contract.parmLedgerJournalId(LedgerJournalTrans.JournalNum);
contract.parmLedgerJournalTransRecId(LedgerJournalTrans.RecId);
contract.parmPaymentStatus(CustVendPaymStatus::Sent);
contract.parmPaymMode(LedgerJournalTrans.PaymMode);
select
DISPLAYVALUE from dimensionAttributeValueCombination
where dimensionAttributeValueCombination.RECID == LedgerJournalTrans.OffsetLedgerDimension;
contract.parmCompanyBankAccountId(dimensionAttributeValueCombination.DisplayValue);
controller.parmArgs(new Args());
controller.parmReportName(ssrsReportStr(
BankPaymAdviceVendV2, Report));
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.parmReportContract().parmRdpContract(contract);
settings
= controller.parmReportContract().parmPrintSettings();
settings.printMediumType(SRSPrintMediumType::File);
settings.fileName(fileName);
settings.fileFormat(SRSReportFileFormat::PDF);
controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration());
controller.parmReportContract().parmReportExecutionInfo(executionInfo);
srsReportRunService.getReportDataContract(controller.parmreportcontract().parmReportName());
srsReportRunService.preRunReport(controller.parmreportcontract());
reportParametersMap = srsReportRunService.createParamMapFromContract(controller.parmReportContract());
parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap);
srsProxy =SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig());
reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(),
parameterValueArray,
settings.fileFormat(),
settings.deviceinfo());
container binData;
Binary binaryData;
System.IO.MemoryStream mstream =
new System.IO.MemoryStream(reportBytes);
binaryData =
Binary::constructFromMemoryStream(mstream);
if(binaryData)
{
binData = binaryData.getContainer();
}
System.Byte[]
binData1;
System.IO.Stream
stream1;
for(int i = 0; i < conLen(binData); i++)
{
binData1 = conPeek(binData,i+1);
stream1 = new System.IO.MemoryStream(binData1);
}
VendTable vendTable = vendTable::find(vendTrans.AccountNum);
if
(vendTable.email() != '')
{
this.InsertIntoMap();
this.sendEmail(vendTable.email(),"Payment
advice report",stream1,fileName);
}
else
{
warning (strFmt("Email address is missing for vendor -
%1"),vendTable.AccountNum);
}
}
private void sendEmail(Description
_emailTo, Description
_Subject,System.IO.MemoryStream attachmentStream,FileName _filename)
{
if
(attachmentStream != null)
{
var user
= xUserInfo::find();
//
var sysUser = SysUserInfo::find(user.id);
//
var userEmail = sysUser.getSendAsEmail(user);
Map sysMailers = SysMailerFactory::getMailers();
str sendTo =
_emailTo;
var tempTo =
new System.Net.Mail.MailAddress(sendTo);
String255 emails;
ActualVendorTable ActualVendorTable;
container conEmails;
int i;
select * from ActualVendorTable;
emails = ActualVendorTable.CCEmail;
conEmails =
str2con(emails,';');
if (tempTo.ToString() != sendTo)
{
warning("Email address is invalid.");
}
var messageBuilder =
new SysMailerMessageBuilder();
for (i=1;i<=conLen(conEmails);i++)
{
messageBuilder.addCc(conPeek(conEmails,i));
}
messageBuilder.addTo(sendTo);
messageBuilder.setSubject(subject);
messageBuilder.setBody(messageBody);
messageBuilder.setFrom(sysEmailTable.SenderAddr);
var message = messageBuilder.getMessage();
messageBuilder.addAttachment(attachmentStream,'payment.pdf');
boolean messageSent;
SysIMailer
mailer;
SysMailerSMTP smtp
= new SysMailerSMTP();
mailer = sysMailers.lookup('SMTP');
if (mailer is SysIMailerNonInteractive)
{
SysIMailerNonInteractive nonInteractiveMailer =
mailer;
messageSent = nonInteractiveMailer.sendNonInteractive(messageBuilder.getMessage());
}
else if (mailer is SysIMailerInteractive)
{
SysIMailerInteractive interactiveMailer =
mailer;
messageSent = interactiveMailer.sendInteractive(messageBuilder.getMessage());
}
if (messageSent)
{
VendTrans vendTransLoc;
select firstonly vendTransLoc
where vendTransLoc.RecId == vendTrans.RecId;
if (vendTransLoc.remainAmountMST() == 0)
{
ttsbegin;
vendTransLoc.selectForUpdate(true);
vendTransLoc.
IsEmailSent = 1;
vendTransLoc.update();
ttscommit;
}
}
}
else
{
warning("File is empty.");
}
}
public void InsertIntoMap()
{
Map placeholderMap =
new Map(Types::String, Types::AnyType);
SysEmailMessagesystemTable messageTable;
placeholderMap.insert("Vendor
Name",VendTable::find(vendTrans.AccountNum).name());
placeholderMap.insert("Payment
voucher",vendTrans.Voucher);
sysEmailTable = SysEmailSystemTable::find('PaymAdvice');
select firstonly messageTable
where messageTable.EmailId == sysEmailTable.EmailId;
subject = messageTable.Subject;
messageBody = messageTable.Mail;
messageBody = SysEmailMessage::stringExpand(messageBody, placeholderMap);
//
return messageBody;
}
}
No comments:
Post a Comment