public final class SendEmailHelper
{
public static str CCEmail, Esender;
public static LogisticsElectronicAddressLocator GetPrimaryEmail(AccountNum ACCNum)
{
if (!ACCNum)
{
throw error("Account number cannot be null or empty.");
}
DirPartyTable dirPartyTable = DirPartyTable::findRec(CustTable::find(ACCNum).Party);
if (!dirPartyTable)
{
throw error("No party found for the provided account number.");
}
LogisticsElectronicAddress logisticsElectronicAddress;
DirPartyLocation dirLocation;
select logisticsElectronicAddress
join dirLocation
where dirLocation.Location == logisticsElectronicAddress.Location &&
logisticsElectronicAddress.IsPrimary &&
dirLocation.Party == dirPartyTable.RecId &&
logisticsElectronicAddress.Type == LogisticsElectronicAddressMethodType::Email;
if (!logisticsElectronicAddress)
{
warning("No primary email address found.");
}
return logisticsElectronicAddress.Locator;
}
public static container getEmailTemplate(SysEmailId _emailId, LanguageId _languageId)
{
// Info(_emailId);
SysEmailMessageSYSTEMTable messageTable = SysEmailMessageSYSTEMTable::find(_emailId, _languageId);
SysEmailSYSTEMTable emailTable = SysEmailSYSTEMTable::find(_emailId);
if (!messageTable && emailTable)
{
// Try to find the email message using the default language from the email parameters
messageTable = SysEmailMessageSYSTEMTable::find(_emailId, emailTable.DefaultLanguage);
}
if (messageTable)
{
//CCEmail = emailTable.EmailId;
return [messageTable.Subject, messageTable.Mail, emailTable.SenderAddr, emailTable.EmailId];
}
else
{
warning("We didn't find a template"); // Let the user know we didn't find a template
return ['', '', emailTable.SenderAddr, emailTable.SenderName, emailTable.EmailId];
}
}
public static str Email_Body(CustInvoiceJour _custinvoicejour)
{
str InvoiceId = _custinvoicejour.InvoiceId;
str salesid = _custinvoicejour.SalesId;
str invoiceDate = date2str(DateTimeUtil::date(_custinvoicejour.InvoiceDate), 123,DateDay::Digits2,DateSeparator::Slash,DateMonth::Digits2,DateSeparator::Slash,DateYear::Digits4);
str customerName = CustTable::find(_custinvoicejour.InvoiceAccount).name();
str orderDate = date2str(DateTimeUtil::date(SalesTable::find(_custinvoicejour.SalesId).CreatedDateTime), 123,DateDay::Digits2,DateSeparator::Slash,DateMonth::Digits2,DateSeparator::Slash,DateYear::Digits4);
//str trackingNumber
RetailConfigurationParameters _RetailConfigurationParameters = RetailConfigurationParameters::findByName("INVOICED_TEMPLATE_ID");
str sub,tmp,Sender,frm;
str EmailId = _RetailConfigurationParameters.Value;
[sub,tmp,Sender,frm] = SendEmailHelper::getEmailTemplate(EmailId,'en-us');
Esender = sender;
tmp = strReplace(tmp,'%salesid%','%1');
tmp = strReplace(tmp,'%invoiceId%','%2');
tmp = strReplace(tmp,'%invoiceDate%','%3');
tmp = strReplace(tmp,'%customername%','%4');
tmp = strReplace(tmp,'%orderDate%','%5');
str ret = strFmt(tmp,salesid,InvoiceId,invoiceDate,customerName ,orderDate);
return ret;
}
public static void Sendmail(CustInvoiceJour _custinvoicejour)
{
System.Exception ex;
try
{
if (!_custinvoicejour)
{
throw error("CustInvoiceJour parameter is null.");
}
str invoiceId = _custinvoicejour.InvoiceId;
str body = SendEmailHelper::Email_Body(_custinvoicejour);
str emailTo = SendEmailHelper::GetPrimaryEmail(_custinvoicejour.InvoiceAccount);
if (!emailTo)
{
throw error("No email address found for the customer.");
}
SysMailerMessageBuilder builder = new SysMailerMessageBuilder();
builder.setBody(body);
builder.setFrom(Esender);
builder.addTo(emailTo);
builder.setSubject("Your order has been invoiced - " + invoiceId);
System.IO.Stream stream = SendEmailHelper::generateReportStream(_custinvoicejour.RecId);
if (stream)
{
builder.addAttachment(stream, "Your order has been invoiced - " + invoiceId + ".pdf");
}
else
{
warning("Stream for the report attachment could not be generated.");
}
SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(builder.getMessage());
}
catch (Exception::CLRError)
{
ex = CLRInterop::getLastException();
throw error(ex.Message);
}
}
public static System.IO.MemoryStream generateReportStream(RecId invJournalRecId)
{
SalesInvoiceContract contract = new SalesInvoiceContract();
DocReportTemplate _DocReportTemplate ;
//Get Default Template to use from Docentric
select firstonly _DocReportTemplate
where _DocReportTemplate.Report == DOCREPORTTABLE::findReportId("SalesInvoice.Report").RecId
&& _DocReportTemplate.IsDefaultTemplate == NoYes::Yes;
//Get Invoice Record
CustInvoiceJour CustInvoiceJour = CustInvoiceJour::findRecId(invJournalRecId);
Filename fileName = _DocReportTemplate.TemplateId;
// Initialize the SalesInvoiceController
SrsReportRunController controller = new SrsReportRunController();
Args args = new Args();
// Attach the CustInvoiceJour record to the arguments
args.record(CustInvoiceJour);
controller.parmArgs(args);
// Set the report name
controller.parmReportName(ssrsReportStr(SalesInvoice, Report));
contract.parmRecordId(CustInvoiceJour.RecId);
controller.parmShowDialog(false);
controller.parmReportContract().parmRdpContract(contract);
// Use Docentric to generate the report
DocSrsReportGenerator docReportGenerator = new DocSrsReportGenerator(controller);
// Configure Docentric output settings directly in the generator
docReportGenerator.setPrintDestinationSettings_DocentricReport(DocOutputFileFormat::PDF, fileName);
// Generate the report as a container
container reportContainer = docReportGenerator.generateReport();
// Convert container to MemoryStream
System.IO.MemoryStream reportStream;
if (reportContainer)
{
reportStream = DocGlobalHelper::convertContainerToMemoryStream(reportContainer);
}
return reportStream;
}
}
No comments:
Post a Comment