Using System.IO;
Using OfficeOpenXml;
Using OfficeOpenXml.ExcelPackage;
Using OfficeOpenXml.ExcelRange;
internal final class CeImportBonus
{
/// <summary>
/// Runs the class with the specified arguments.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
int insertCounter;
int updateCounter;
container updateInfo;
str moreThan1Ins = "";
str moreThan1Upd = "";
updateInfo = conIns(updateInfo,1,insertCounter);
updateInfo = conIns(updateInfo,1,updateCounter);
System.IO.Stream stream;
FileUploadTemporaryStorageResult
fileUploadResult=file::GetFileFromUser(classStr(FileUploadTemporaryStorageStrategy));
if(fileUploadResult!= null && fileUploadResult.getUploadStatus())
{
stream=fileUploadResult.openResult();
if(strEndsWith(fileUploadResult.getFileName() ,'xlsx'))
{
updateInfo = CeImportBonus::RunIfExcel(stream, updateInfo);
if (conPeek(updateInfo,2) > 1)
{
moreThan1Upd = "s";
}
if (conPeek(updateInfo,1) > 1)
{
moreThan1Ins = "s";
}
if(conPeek(updateInfo,1) >= 1 && conPeek(updateInfo,2) >= 1)
{
Info(strFmt("%1 row%4 have been added, %2 row%3 have been updated",
conPeek(updateInfo,1), conPeek(updateInfo,2),moreThan1Upd,moreThan1Ins));
}
else if(conPeek(updateInfo,1) >= 1)
{
Info(strFmt("%1 row%2 have been added", conPeek(updateInfo,1),moreThan1Ins));
}
else if(conPeek(updateInfo,2) >= 1)
{
Info(strFmt("%1 row%2 have been updated", conPeek(updateInfo,2),moreThan1Upd));
}
else
{
Info("Nothing to update");
}
}
else if(strEndsWith(fileUploadResult.getFileName() ,'csv'))
{
updateInfo = CeImportBonus::RunIfCSV(fileUploadResult, updateInfo);
if (conPeek(updateInfo,2) > 1)
{
moreThan1Upd = "s";
}
if (conPeek(updateInfo,1) > 1)
{
moreThan1Ins = "s";
}
if(conPeek(updateInfo,1) >= 1 && conPeek(updateInfo,2) >= 1)
{
Info(strFmt("%1 row%4 have been added, %2 row%3 have been updated",
conPeek(updateInfo,1), conPeek(updateInfo,2),moreThan1Upd,moreThan1Ins));
}
else if(conPeek(updateInfo,1) >= 1)
{
Info(strFmt("%1 row%2 have been added", conPeek(updateInfo,1),moreThan1Ins));
}
else if(conPeek(updateInfo,2) >= 1)
{
Info(strFmt("%1 row%2 have been updated", conPeek(updateInfo,2),moreThan1Upd));
}
else
{
Info("Nothing to update");
}
}
CeImportBonus::Update(_args);
}
}
public static container RunIfCSV(FileUploadTemporaryStorageResult fileUploadResult, container counter)
{
int insertCounter;
int updateCounter;
AsciiStreamIo file;
FileUploadTemporaryStorageResult fileUpload;
CeBonustabell Bonustabell;
fileUpload = fileUploadResult;
File = AsciiStreamIo::constructForRead(fileUpload.openResult());
if (file)
{
if (file.status())
{
throw error("@SYS52680");
}
file.inFieldDelimiter(',');
file.inRecordDelimiter('\r\n');
}
container record;
while (!file.status())
{
record = file.read();
try
{
select * from Bonustabell
where Bonustabell.Id == conPeek(record,1);
}
catch
{
continue;
}
if(conLen(record) && any2Str(conPoke(record,1)) != "ID")
{
if(Bonustabell)
{
str incomingActive = any2Str(Bonustabell.Inactive);
str dbActive = any2Str(conPeek(record,4));
if(any2Str(conPeek(record,4)) == "Yes")
{
dbActive = "1";
}
else
{
dbActive = "0";
}
if(Bonustabell.Id != conPeek(record,1)
|| Bonustabell.Description != conPeek(record,2)
|| any2Real(Bonustabell.BonusAmount) != any2Real(conPeek(record,3))
|| incomingActive != dbActive)
{
Bonustabell.SelectForUpdate(true);
Bonustabell.Id = conPeek(record,1);
Bonustabell.Description = conPeek(record,2);
Bonustabell.BonusAmount = conPeek(record,3);
if(conPeek(record,4) == "Yes")
{
Bonustabell.Inactive = 1;
}
else
{
Bonustabell.Inactive = conPeek(record,4);
}
ttsbegin;
Bonustabell.update();
ttscommit;
updateCounter++;
}
}
else
{
Bonustabell.Id = conPeek(record,1);
Bonustabell.Description = conPeek(record,2);
Bonustabell.BonusAmount = conPeek(record,3);
if(conPeek(record,4) == "Yes")
{
Bonustabell.Inactive = 1;
}
else
{
Bonustabell.Inactive = conPeek(record,4);
}
ttsbegin;
Bonustabell.insert();
ttscommit;
insertCounter++;
}
}
}
counter = conPoke(counter,1,insertCounter);
counter = conPoke(counter,2,updateCounter);
return counter;
}
public static container RunIfExcel(Stream stream, container counter)
{
int insertCounter;
int updateCounter;
using(ExcelPackage package= new ExcelPackage(stream))
{
int rowCount, i;
package.Load(stream);
ExcelWorksheet worksheet= package.get_workbook().get_worksheets().get_Item(1);
OfficeOpenXml.ExcelRange range=worksheet.Cells;
rowCount = worksheet.Dimension.End.Row - worksheet.Dimension.Start.Row + 1;
for (i = 2; i<= rowCount; i++)
{
NoYes mEnum;
CeBonustabell Bonustabell;
select firstonly Bonustabell
where BonusTabell.Id == (range.get_Item(i, 1).value);
if(Bonustabell)
{
if(Bonustabell.Id != any2Str((range.get_Item(i, 1).value))
|| Bonustabell.Description != any2Str((range.get_Item(i, 2).value))
|| Bonustabell.BonusAmount != any2Real(range.get_Item(i, 3).value)
|| Bonustabell.Inactive != str2Enum(mEnum, range.get_Item(i, 4).value))
{
try
{
Bonustabell.selectForUpdate(true);
Bonustabell.Id = any2Str((range.get_Item(i, 1).value));
Bonustabell.Description = any2Str((range.get_Item(i, 2).value));
Bonustabell.BonusAmount = any2Real(range.get_Item(i, 3).value);
Bonustabell.Inactive = str2Enum(mEnum, range.get_Item(i, 4).value);
ttsbegin;
Bonustabell.update();
ttscommit;
updateCounter++;
}
catch
{
continue;
}
}
}
else
{
Bonustabell.Id = any2Str((range.get_Item(i, 1).value));
Bonustabell.Description = any2Str((range.get_Item(i, 2).value));
Bonustabell.BonusAmount = (range.get_Item(i, 3).value);
Bonustabell.Inactive = str2Enum(mEnum, range.get_Item(i, 4).value);
ttsbegin;
Bonustabell.insert();
ttscommit;
insertCounter++;
}
}
}
counter = conPoke(counter,1,insertCounter);
counter = conPoke(counter,2,updateCounter);
return counter;
}
public static void Update(Args _args)
{
FormDataSource formDs = _args.record().dataSource();
formDs.research();
}
}