Untitled

 avatar
unknown
csharp
a year ago
10 kB
3
Indexable
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();
    }

}