import MT_940 file create new bank statement
internal final class BankstatmentRunnableClass
{
// Define constants for tag names
#define.Tag20(":20:")
#define.Tag25(":25:")
#define.Tag28C(":28C:")
#define.Tag60F(":60F:")
#define.Tag60M(":60M:")
#define.Tag61(":61:")
#define.Tag62F(":62F:")
#define.Tag62M(":62M:")
#define.Tag64(":64:")
#define.Tag65(":65:")
#define.Tag86(":86:")
private static utcdatetime ExtractDateline( str dateStr)
{
utcdatetime statementdate;
// Extract date
int year = 2000 + str2Int(subStr(dateStr, 1, 2)); // 24 → 2024
int month = str2Int(subStr(dateStr, 3, 2)); // 12
int day = str2Int(subStr(dateStr, 5, 2)); // 01
date d = mkDate(day, month, year);
timeOfDay t = str2Time("00:00:00"); // default time
statementdate = DateTimeUtil::newDateTime(d, t);
return statementdate;
}
private static utcdatetime ExtractDate(str _line)
{
utcdatetime statementdate;
// Extract date
str dateStr = subStr(_line, 2, 6);
int year = 2000 + str2Int(subStr(dateStr, 1, 2)); // 24 → 2024
int month = str2Int(subStr(dateStr, 3, 2)); // 12
int day = str2Int(subStr(dateStr, 5, 2)); // 01
date d = mkDate(day, month, year);
timeOfDay t = str2Time("00:00:00"); // default time
statementdate = DateTimeUtil::newDateTime(d, t);
return statementdate;
}
private static BankStmtISOCurrencyCode ExtractCurrency(str _line)
{
BankStmtISOCurrencyCode statementCurrency;
statementCurrency = subStr(_line, 8, 3);
return statementCurrency;
}
private static Amount ExtractOpeningBalance(str _line)
{
Amount statementOpening;
str dcIndicator = subStr(_line, 1, 1);
str amountStr = strReplace(subStr(_line, 11, strLen(_line) - 10), ",", ".");
statementOpening = str2Num(amountStr);
if(dcIndicator == "C")
statementOpening = statementOpening * -1;
return statementOpening;
}
private static BankStmtISODocument createBankISODocument()
{
//#define.MT940Auto('MT940 Auto')
NumberSeq numISOGrp;
BankStmtISODocument bankISODocument;
BankStmtISOGroupHeader bankISOGrpHeader;
bankISOGrpHeader.initValue();
numISOGrp = NumberSeq::newGetNum(BankParameters::numRefBankStatementDownloadId());
bankISOGrpHeader.MessageIdentification = numISOGrp.num();
numISOGrp.used();
bankISOGrpHeader.insert();
bankISOdocument.initValue();
//bankISOdocument.FormatName = #MT940Auto;
bankISOdocument.GroupHeader = bankISOGrpHeader.RecId;
bankISOdocument.insert();
return bankISODocument;
}
public static boolean validateAccountNumber(AccountNum _accountNum)
{
BankAccountTable _BankAccountTable;
select count(RecId) from _BankAccountTable
where _BankAccountTable.AccountNum == _accountNum
&& _BankAccountTable.BankReconciliationEnabled == NoYes::Yes;
if(_BankAccountTable.RecId > 1)
{
error('account numbers should be unique within a bank');
return false;
}
if(_BankAccountTable)
return true;
else
return false;
}
public static NoYes ValidateBankReconciliationEnabled(AccountNum _accountNum)
{
BankAccountTable _BankAccountTable;
select firstonly _BankAccountTable
where _BankAccountTable.AccountNum == _accountNum;
return _BankAccountTable.BankReconciliationEnabled;
}
private static void insertTransaction(int i, container currentLine, Recid _ParentRecId)
{
BankStmtISOReportEntry BankStmtISOReportEntry;
BankStmtISOPartyIdentification BankStmtISOPartyIdentification;
while(i <= conLen(currentLine) - 2)
{
int StrtRefNoLen;
int AmountLen;
str line = strReplace(strFmt("%1",conPeek(currentLine, i)),':61:','');
str datestr = subStr(line, 1, 6);
BankStmtISOReportEntry.BankStmtISOAccountStatement = _ParentRecId;
BankStmtISOReportEntry.BookingDateTime = BankstatmentRunnableClass::ExtractDateline(datestr);
str Indicator = subStr(line, 11, 1);
AmountLen = strFind(line,"N",1, strLen(line));
StrtRefNoLen = strFind(line,"//",1, strLen(line));
str Amount = subStr(line, 13, AmountLen - 13);
Amount LAmount = str2Num( strReplace(Amount, ",", "."));
BankStmtISOPartyIdentification.Name = subStr(line, amountlen + 4, StrtRefNoLen - (amountlen + 4) );
BankStmtISOPartyIdentification.insert();
if(Indicator == "C")
{
BankStmtISOReportEntry.Amount = LAmount;
BankStmtISOReportEntry.AmountCreditDebitIndicator = DebitCredit::Credit;
}
else
{
BankStmtISOReportEntry.Amount = LAmount;
BankStmtISOReportEntry.AmountCreditDebitIndicator = DebitCredit::Debit;
}
BankStmtISOReportEntry.ProprietaryBankTransactionCode = subStr(line, AmountLen + 1, 4);
BankStmtISOReportEntry.ReferenceNumber = strReplace(subStr(line, StrtRefNoLen, strLen(line)-StrtRefNoLen + 1),"//","");
BankStmtISOReportEntry.TradingParty = BankStmtISOPartyIdentification.RecId;
//description 86
BankStmtISOReportEntry.AdditionalEntryInformation = strReplace(strFmt("%1",conPeek(currentLine, i+1)),':86:','');
BankStmtISOReportEntry.insert();
//BankStmtISOPartyIdentification.Name =
//BankStmtISOPartyIdentification.insert();
//BankStmtISOReportEntry.BankStmtISOAccountStatement = _ParentRecId;
//BankStmtISOReportEntry.TradingParty = BankStmtISOPartyIdentification.RecId;
//BankStmtISOReportEntry.insert();
i = i+2;
}
}
/// <summary>
/// Class entry point. The system will call this method when a designated menu
/// is selected or when execution starts and this class is set as the startup class.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
#File;
BankStmtISOAccountStatement BankStmtISOAccountStatement;
BankStmtISOCashBalance BankStmtISOCashBalance;
System.IO.Stream stream;
FileUploadBuild fileUpload;
DialogGroup dlgUploadGroup;
FileUploadBuild fileUploadBuild;
FormBuildControl formBuildControl;
Dialog dialog = new Dialog("Import the data from File");
dlgUploadGroup = dialog.addGroup("@SYS54759");
formBuildControl = dialog.formBuildDesign().control(dlgUploadGroup.name());
fileUploadBuild = formBuildControl.addControlEx(classstr(FileUpload), 'Upload');
fileUploadBuild.style(FileUploadStyle::MinimalWithFilename);
//fileUploadBuild.fileTypesAccepted('.txt');
fileUploadBuild.fileTypesAccepted('.MT940');
if (dialog.run() && dialog.closedOk())
{
FileUpload fileUploadControl = dialog.formRun().control(dialog.formRun().controlId('Upload'));
FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult();
if (fileUploadResult && fileUploadResult.getUploadStatus())
{
CommaTextStreamIo textStream = CommaTextStreamIo::constructForRead(File::UseFileFromURL(fileUploadResult.getDownloadUrl()));
textStream.inFieldDelimiter('\n');
textStream.inRecordDelimiter(#delimiterCRLF);
// First line might have header information
//container line = textStream.read();
container currentLine = textStream.read();
int i = 1;
while (i <= conLen(currentLine))
{
if(strStartsWith(strFmt("%1",conPeek(currentLine, i)), ":20:"))
{
str _accountnum = strReplace(strFmt("%1",conPeek(currentLine, i+1)),':25:','');
//subStr(strFmt("%1",conPeek(currentLine, i)), 5, strLen(strFmt("%1",conPeek(currentLine, i))));
if(!BankstatmentRunnableClass::validateAccountNumber(_accountnum))
error('Account Number is not valid or Bank Reconciliation is not enabled');
//else if(BankstatmentRunnableClass::ValidateBankReconciliationEnabled(_accountnum) == NoYes::no)
// error('Bank Reconciliation is not enabled');
else
{
str line60F, line62F;
BankAccountTable _BankAccountTable;
select firstonly _BankAccountTable
where _BankAccountTable.AccountNum == _accountNum
&& _BankAccountTable.BankReconciliationEnabled == NoYes::Yes;;
BankStmtISOAccountStatement.BankAccountTable = _BankAccountTable.AccountID;
BankStmtISOAccountStatement.AccountIdOtherId = _accountNum;
BankStmtISOAccountStatement.Identification = subStr(strFmt("%1",conPeek(currentLine, i)), 5, strLen(strFmt("%1",conPeek(currentLine, i))));
//strReplace(strFmt("%1",conPeek(currentLine, i)),':25:','');
i = i+1;
BankStmtISOAccountStatement.BankStatementType = BankStatementType::Reconciliation;
BankStmtISOAccountStatement.Status = BankStatementStatus::Open;
BankStmtISOAccountStatement.BankStmtISODocument = BankstatmentRunnableClass::createBankISODocument().RecId;
i = i+2;
line60F = strReplace(strFmt("%1",conPeek(currentLine, i)),':60F:','');
line62F = strReplace(strFmt("%1",conPeek(currentLine, conLen(currentLine)-1)),':62F:','');
BankStmtISOAccountStatement.AccountCurrency = BankstatmentRunnableClass::ExtractCurrency(line60F);
BankStmtISOAccountStatement.FromDateTime = BankstatmentRunnableClass::ExtractDate(line60F);
BankStmtISOAccountStatement.ToDateTime = BankstatmentRunnableClass::ExtractDate(line62F);
BankStmtISOAccountStatement.insert();
//Opening
BankStmtISOCashBalance.clear();
amount OBAmount = BankstatmentRunnableClass::ExtractOpeningBalance(line60F);
BankStmtISOCashBalance.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
if (OBAmount < 0)
{
BankStmtISOCashBalance.CashBalanceAmount = OBAmount * -1;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Credit;
}
else
{
BankStmtISOCashBalance.CashBalanceAmount = OBAmount;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Debit;
}
BankStmtISOCashBalance.BankStatementBalanceType = BankStatementBalanceType::Opening;
BankStmtISOCashBalance.insert();
//closing
BankStmtISOCashBalance.clear();
Amount EBAmount = BankstatmentRunnableClass::ExtractOpeningBalance(line62F);
BankStmtISOCashBalance.CashBalanceAmount = EBAmount * -1;
BankStmtISOCashBalance.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
if (EBAmount < 0)
{
BankStmtISOCashBalance.CashBalanceAmount = EBAmount * -1;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Credit;
}
else
{
BankStmtISOCashBalance.CashBalanceAmount = EBAmount;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Debit;
}
BankStmtISOCashBalance.BankStatementBalanceType = BankStatementBalanceType::Closing;
BankStmtISOCashBalance.insert();
BankstatmentRunnableClass::insertTransaction(i+1, currentLine, BankStmtISOAccountStatement.RecId);
}
}
i++;
}
}
}
}
}
////batch
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.ExcelPackage;
using OfficeOpenXml.ExcelRange;
class BI_ImportMT940BankStatement extends RunBaseBatch
{
Filename ItemFileName;
Filename filename;
DialogField dialogFilename;
System.IO.Stream stream;
FileUploadTemporaryStorageResult fileUploadResult;
OfficeOpenXml.ExcelRange range;
CommaTextStreamIo commaIo;
RecordInsertList rsl;
boolean newIteration;
int line,
lineimported,lineerror, lineskipped;
Counter loop;
FileUploadBuild dialogFileUpload;
FileUpload fileUpload;
DialogRunbase dialog;
BankStmtISOAccountStatement BankStmtISOAccountStatement;
BankStmtISOCashBalance BankStmtISOCashBalance;
BankAccountTable BankAccountTable;
real OBAmount , EBAmount;
utcdatetime OBDate, EBDate;
DialogField Bankaccount;
CompanyBankAccountID bankAccountID;
#define.CurrentVersion(1)
#define.Version1(1)
#localmacro.CurrentList
fileName,bankAccountID
#endmacro
/*void create(int row)
{
real OB , TransacionAmount , EB;
date OBDate , TransactionDate , EBDaet
/*str itemId;
price inventPrice;
InventTableModule inventTableModule;
itemId = range.get_Item(row, 1).Value;
inventPrice = range.get_Item(row, 2).Value;*/
if(row == 2)
{
BankStmtISOAccountStatement.clear();
BankStmtISOAccountStatement.BankAccountTable = BankAccountTable.AccountID;
//BankStmtISOAccountStatement.insert();
}
/*try
{
ttsbegin;
select forUpdate inventTableModule
where inventTableModule.ItemId == ItemId
&& inventTableModule.ModuleType == ModuleInventPurchSales::Invent;
if (!inventTableModule)
{
inventTableModule.clear();
}
inventTableModule.Price = inventPrice;
if (!inventTableModule)
{
inventTableModule.insert();
}
else
{
inventTableModule.update();
}
lineimported ++;
ttscommit;
}
catch
{
lineerror ++;
ttsAbort;
}*/
}*/
void GetHeaderData(int row)
{
anytype datestr;
str Amountstr;
str type = range.get_Item(row, 1).Value;
if(type == 'OB')
{
datestr = range.get_Item(row,2).value; //get_Value(); //Value;
OBDate = DateTimeUtil::removeTimeZoneOffset (datestr,DateTimeUtil::getUserPreferredTimeZone()); //str2DateDMY(datestr);
Amountstr = range.get_Item(row, 3).Value;
OBAmount = str2Num(Amountstr);
}
if(type == 'EB')
{
datestr = range.get_Item(row, 2).Value;
EBDate = DateTimeUtil::removeTimeZoneOffset(datestr,DateTimeUtil::getUserPreferredTimeZone()); //str2DateDMY(datestr);
Amountstr = range.get_Item(row, 3).Value;
EBAmount = str2Num(Amountstr);
}
}
/*try
{
ttsbegin;
select forUpdate inventTableModule
where inventTableModule.ItemId == ItemId
&& inventTableModule.ModuleType == ModuleInventPurchSales::Invent;
if (!inventTableModule)
{
inventTableModule.clear();
}
inventTableModule.Price = inventPrice;
if (!inventTableModule)
{
inventTableModule.insert();
}
else
{
inventTableModule.update();
}
lineimported ++;
ttscommit;
}
catch
{
lineerror ++;
ttsAbort;
}
}*/
void createLine(int row)
{
anytype datestr;
str Amountstr;
real amountReal;
utcdatetime Tdate;
BankStmtISOReportEntry reportEntryLoc;
int currencyStr;
int positionSlash = 0;
str type = range.get_Item(row, 1).Value;
if(type == 'Transaction')
{
datestr = range.get_Item(row, 2).Value;
Tdate = DateTimeUtil::removeTimeZoneOffset(datestr,DateTimeUtil::getUserPreferredTimeZone());//str2DateDMY(datestr);
Amountstr = range.get_Item(row, 3).Value;
amountReal = str2Num(Amountstr);
reportEntryLoc.clear();
reportEntryLoc.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
if(amountReal < 0 )
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Credit;
reportEntryLoc.Amount = amountReal * -1;
}
else
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Debit;
reportEntryLoc.Amount = amountReal;
}
reportEntryLoc.BankStatementLineStatus = BankStatementLineStatus::Booked;
reportEntryLoc.BookingDateTime = Tdate;//DateTimeUtil::newDateTime(Tdate,0);
reportEntryLoc.insert();
/*if(subStr(_statementLineVal, 11, 1) == 'D')
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Credit;
amountReal = str2Num(strReplace(subStr(_statementLineVal, 12, strLen(_statementLineVal)), ",", "."));
reportEntryLoc.ProprietaryBankTransactionCode = subStr(_statementLineVal, 12 + strLen(num2Str(amountReal,1,2,1,0)), 4);
}
else if(subStr(_statementLineVal, 11, 1) == 'C')
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Debit;
amountReal = str2Num(strReplace(subStr(_statementLineVal, 12, strLen(_statementLineVal)), ",", "."));
reportEntryLoc.ProprietaryBankTransactionCode = subStr(_statementLineVal, 12 + strLen(num2Str(amountReal,1,2,1,0)), 4);
}
else
{
reportEntryLoc.ReversalIndicator = NoYes::Yes;
if(subStr(_statementLineVal, 12, 1) == 'D')
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Debit;
}
else
{
reportEntryLoc.AmountCreditDebitIndicator = DebitCredit::Credit;
}
amountReal = str2Num(strReplace(subStr(_statementLineVal, 13, strLen(_statementLineVal)), ",", "."));
reportEntryLoc.ProprietaryBankTransactionCode = subStr(_statementLineVal, 13 + strLen(num2Str(amountReal,1,2,1,0)), 4);
}
reportEntryLoc.Amount = amountReal;
currencyStr = strScan(_statementLineVal, Ledger::accountingCurrency(CompanyInfo::current()), 1, strLen(_statementLineVal));
if(currencyStr)
{
reportEntryLoc.BankStatementCounterCurrency = Ledger::accountingCurrency(CompanyInfo::current());
reportEntryLoc.BankStatementCounterCurrencyAmount = amountReal;
}
else
{
reportEntryLoc.BankStatementCounterCurrency = "";
reportEntryLoc.BankStatementCounterCurrencyAmount = 0;
}
reportEntryLoc.BankStatementLineStatus = BankStatementLineStatus::Booked;
reportEntryLoc.BookingDateTime = _bankStmtHeader.ToDateTime;
reportEntryLoc.ReferenceNumber = subStr(_statementLineVal,
12 + strLen(num2Str(amountReal,1,2,1,0)) + 4,
strScan(_statementLineVal, "//", 1, strLen(_statementLineVal)) - (12 + strLen(num2Str(amountReal,1,2,1,0)) + 4));
positionSlash = strScan(_statementLineVal, "//", 1, strLen(_statementLineVal)) + 2;
reportEntryLoc.BankDocumentNumber = subStr(_statementLineVal,
positionSlash,
strLen(_statementLineVal));
reportEntryLoc.insert();
ttsCommit;*/
}
/*str itemId;
price inventPrice;
InventTableModule inventTableModule;
itemId = range.get_Item(row, 1).Value;
inventPrice = range.get_Item(row, 2).Value;*/
/*if(row == 2)
{
BankStmtISOAccountStatement.clear();
BankStmtISOAccountStatement.BankAccountTable = BankAccountTable.AccountID;
//BankStmtISOAccountStatement.insert();
}*/
/*try
{
ttsbegin;
select forUpdate inventTableModule
where inventTableModule.ItemId == ItemId
&& inventTableModule.ModuleType == ModuleInventPurchSales::Invent;
if (!inventTableModule)
{
inventTableModule.clear();
}
inventTableModule.Price = inventPrice;
if (!inventTableModule)
{
inventTableModule.insert();
}
else
{
inventTableModule.update();
}
lineimported ++;
ttscommit;
}
catch
{
lineerror ++;
ttsAbort;
}*/
}
private BankStmtISODocument createBankISODocument()
{
//#define.MT940Auto('MT940 Auto')
NumberSeq numISOGrp;
BankStmtISODocument bankISODocument;
BankStmtISOGroupHeader bankISOGrpHeader;
bankISOGrpHeader.initValue();
numISOGrp = NumberSeq::newGetNum(BankParameters::numRefBankStatementDownloadId());
bankISOGrpHeader.MessageIdentification = numISOGrp.num();
numISOGrp.used();
bankISOGrpHeader.insert();
bankISOdocument.initValue();
//bankISOdocument.FormatName = #MT940Auto;
bankISOdocument.GroupHeader = bankISOGrpHeader.RecId;
bankISOdocument.insert();
return bankISODocument;
}
void createHeader()
{
if(!OBDate)
throw Error('Opening balance date does not exists');
if(!EBDate)
throw Error('Ending balance date does not exists');
NumberSeq NumberSeq;
BankStmtISOAccountStatement.clear();
BankStmtISOAccountStatement.initValue();
BankStmtISOAccountStatement.BankAccountTable = BankAccountTable.AccountID;
BankStmtISOAccountStatement.AccountCurrency = bankAccountTable.CurrencyCode;
BankStmtISOAccountStatement.AccountIdOtherId = bankAccountTable.AccountNum;
BankStmtISOAccountStatement.BankStatementType = BankStatementType::Reconciliation;
BankStmtISOAccountStatement.IBAN = bankAccountTable.IBAN;
NumberSeq = NumberSeq::newGetNum(BankParameters::numRefBankStatementId());
BankStmtISOAccountStatement.Identification = NumberSeq.num();;
NumberSeq.used();
BankStmtISOAccountStatement.FromDateTime = OBDate;//DateTimeUtil::newDateTime( OBDate,0);// DateTimeUtil::removeTimeZoneOffset(DateTimeUtil::newDateTime( OBDate,0),Timezone::GMTPLUS0200CAIRO)));
BankStmtISOAccountStatement.ToDateTime = EBDate;//DateTimeUtil::newDateTime( EBDate,str2Time('11:59:59'));
BankStmtISOAccountStatement.Status = BankStatementStatus::Open;
BankStmtISOAccountStatement.BankStmtISODocument = this.createBankISODocument().RecId;
BankStmtISOAccountStatement.insert();
//Opening
BankStmtISOCashBalance.clear();
BankStmtISOCashBalance.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
if (OBAmount < 0)
{
BankStmtISOCashBalance.CashBalanceAmount = OBAmount * -1;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Credit;
}
else
{
BankStmtISOCashBalance.CashBalanceAmount = OBAmount;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Debit;
}
BankStmtISOCashBalance.BankStatementBalanceType = BankStatementBalanceType::Opening;
BankStmtISOCashBalance.insert();
//Ending
BankStmtISOCashBalance.clear();
BankStmtISOCashBalance.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
if (EBAmount < 0)
{
BankStmtISOCashBalance.CashBalanceAmount = EBAmount * -1;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Credit;
}
else
{
BankStmtISOCashBalance.CashBalanceAmount = EBAmount;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Debit;
}
BankStmtISOCashBalance.BankStatementBalanceType = BankStatementBalanceType::Closing;
BankStmtISOCashBalance.insert();
//Net Amount
BankStmtISOCashBalance.clear();
BankStmtISOCashBalance.BankStmtISOAccountStatement = BankStmtISOAccountStatement.RecId;
BankStmtISOCashBalance.CashBalanceAmount = 0;
BankStmtISOCashBalance.AmountCreditDebitIndicator = DebitCredit::Debit;
BankStmtISOCashBalance.BankStatementBalanceType = BankStatementBalanceType::NetAmount;
BankStmtISOCashBalance.insert();
}
void import()
{
Container con;
InventTable inventTable;
;
setPrefix("Import ");
if (this.openFile())
{
FileIOPermission perm;
TextIO textIo;
FileName filePath = filename;
// Update with your actual file path
str lines, mt940Data = "";
// Grant permission to read the file
perm = new FileIOPermission(filePath, 'r');
perm.assert();
// Open the file
textIo = new TextIO(filePath, 'r');
if (!textIo)
{
error("Failed to open the file.");
return;
}
// Read each line and append to the variable
//while (textIo.status() == IO_Status::Ok)
// {
// lines = textIo.read();
// if (lines)
// {
// mt940Data += lines + '\n';
// }
// }
CodeAccessPermission::revertAssert();
// Output or use the data
info("MT-940 data loaded into variable.");
info(mt940Data); // Optional: display the data
//using (ExcelPackage Package = new ExcelPackage(stream))
//{
// int rowCount, i, endRow, startRow;
// Package.Load(stream);
// ExcelWorksheet worksheet = package.get_Workbook().get_Worksheets().get_Item(1);
// range = worksheet.Cells;
// endRow = worksheet.Dimension.End.Row;
// startRow = worksheet.Dimension.Start.Row;
// rowCount = endRow - startRow + 1;
// try
// {
// ttsbegin;
// for (i = 2; i<= rowCount; i++)
// {
// setPrefix(strFmt("Line %1", i));
// this.GetHeaderData(i);
// }
// this.createHeader();
// for (i = 2; i<= rowCount; i++)
// {
// setPrefix(strFmt("Line %1", i));
// this.createLine(i);
// }
// ttscommit;
// }
// catch
// {
// throw error("Error - Import template");
// }
// }
}
//info(strfmt("%1 record(s) imported", lineimported));
//info(strfmt("%1 record(s) fail", lineerror));
}
boolean openFile()
{
boolean ret = false;
if (fileUploadResult != null && fileUploadResult.getUploadStatus())
{
stream = fileUploadResult.openResult();
ret = true;
}
else
{
throw error(strfmt("@SYS62207",filename));
}
return ret;
}
public Object dialog()
{
dialog = super();
FormbuildStringControl control;
DialogGroup dialogGroup = dialog.addGroup('Upload file');
FormBuildControl formBuildControl = dialog.formBuildDesign().control(dialogGroup.name());
dialogFileUpload = formBuildControl.addControlEx(classstr(FileUpload), 'FileUpload');
dialogFileUpload.style(FileUploadStyle::MinimalWithFilename);
dialogFileUpload.fileNameLabel("@SYS308842");
dialogFileUpload.fileTypesAccepted(".MT940");
Bankaccount = dialog.addField( extendedTypeStr(CompanyBankAccountId));
control = Bankaccount.control();
//control.
control.registerOverrideMethod(methodStr(FormStringControl,lookup),
methodStr(BI_ImportBankStatement,bankaccountLookup),this);
return dialog;
}
private void bankaccountLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup;
QueryBuildDataSource qbds;
Query query = new Query();
qbds = Query.addDataSource(tableNum(BankAccountTable));
sysTableLookup = SysTableLookup::newParameters(tableNum(BankAccountTable), _control,true);
sysTableLookup.addLookupfield(fieldNum(BankAccountTable, ACCOUNTID), true);
//sysTableLookup.addLookupfield(fieldNum(BankAccountTable, Name), true);
qbds.addRange(fieldNum(BankAccountTable , BankReconciliationEnabled)).value(enum2Str(NoYes::Yes));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
/// <summary>
/// Disables the dialog Ok button until the file upload is complete.
/// </summary>
/// <param name="_dialog">The <c>Runbase</c> dialog object.</param>
public void dialogPostRun(DialogRunbase _dialog)
{
fileUpload = _dialog.formRun().control(_dialog.formRun().controlId('FileUpload'));
fileUpload.notifyUploadCompleted += eventhandler(this.uploadCompleted);
this.setDialogOkButtonEnabled(_dialog, false);
}
/// <summary>
/// After the file has been uploaded, the Ok button is enabled.
/// </summary>
public void uploadCompleted()
{
filename = fileUpload.fileName();
this.setDialogOkButtonEnabled(dialog, true);
fileUploadResult = fileUpload.getFileUploadResult();
fileUpload.notifyUploadCompleted -= eventhandler(this.UploadCompleted);
}
/// <summary>
/// Enables or disables the dialog Ok button.
/// </summary>
/// <param name = "_dialog">The <c>Runbase</c> dialog object.</param>
/// <param name = "_isEnabled">Indicates to enable or disable the Ok button.</param>
protected void setDialogOkButtonEnabled(DialogRunbase _dialog, boolean _isEnabled)
{
FormControl okButtonControl = _dialog.formRun().control(_dialog.formRun().controlId('OkButton'));
if (okButtonControl)
{
okButtonControl.enabled(_isEnabled);
}
}
public container pack()
{
return [#CurrentVersion,#CurrentList];
}
public boolean unpack(container packedClass)
{
Version version = runbase::getVersion(packedClass);
;
switch (version)
{
case #CurrentVersion:
[version,#CurrentList] = packedClass;
break;
default:
return false;
}
return true;
}
public void run()
{
if(bankAccountID)
{
BankAccountTable = BankAccountTable::find(bankAccountID);
if(!BankAccountTable)
{
Error (strfmt('Bank account %1 does not exists',bankAccountID));
}
else if(BankAccountTable.BankReconciliationEnabled)
{
this.import();
}
else if(!BankAccountTable.BankReconciliationEnabled)
{
Error (strfmt('Bank account %1 does not enabled for automatic reconciliation',bankAccountID));
}
}
else
{
Error (strfmt('Bank account does not exists',bankAccountID));
}
//this.import();
super();
}
static void main(Args _args)
{
BI_ImportBankStatement import;
FormRun formRun;
Args args;
;
import = new BI_ImportBankStatement();
if (import.prompt())
{
import.run();
}
}
public ClassDescription caption()
{
return 'Import Bank Statement';
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public boolean getFromDialog()
{
boolean ret;
bankAccountID = Bankaccount.value();
ret = super();
return ret;
}
}
Comments
Post a Comment