Thursday, July 9, 2020

Updating Customer Master and Financial Dimension through Excel Upload

static void GH_CustDimension_SalesGroup_Updating(Args _args)
{
    SysExcelApplication                 application;
    SysExcelWorkbooks                   workbooks;
    SysExcelWorkbook                    workbook;
    SysExcelWorksheets                  worksheets;
    SysExcelWorksheet                   worksheet;
    SysExcelCells                       cells;
    COMVariantType                      type;
    Filename                            filename;
    str                                 filePath, fileNameOnly;
    Dialog                              dialog;
    DialogField                         dialogFileName;
    int                                 row;
    container                           record, roles;

    CustTable                         _custTable;
    DimensionAttribute                _dimAttribute;
    DimensionAttributeValueSet        _dimAttributeSet;
    DimensionAttributeValueSetItem    _dimAttributeSetItem;
    DimensionAttributeValue           _dimValue;
    DimensionAttributeValueSetStorage _dimStorage;
    Common                            _dimensionValueEntry;
    CustAccount                       _custAccount;

    ;

    dialog = new Dialog();
    dialog.caption("Pick excel file");
    dialogFileName = dialog.addField(extendedTypeStr(FilenameOpen), "Enter excel file", "Browse excel file");

    if(!dialog.run())
        return;

    filename                = dialogFileName.value();
    [filePath,fileNameOnly] = fileNameSplit(filename);
    application             = SysExcelApplication::construct();
    workbooks               = application.workbooks();

    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error(strFmt("Filename %1 cannot be blank.",filename));
    }

    workbook   = workbooks.item(1);
    worksheets = workbook.worksheets();
    worksheet  = worksheets.itemFromNum(1);
    cells      = worksheet.cells();

    row = 1;
    do
    {
        try
        {
            row++;
            _custAccount   = cells.item(row, 1).value().bStr();

            if(strLRTrim(cells.item(row, 1).value().bStr())!= "")
                {
                     select forUpdate _custTable where _custTable.AccountNum == _custAccount;
                    {
                         ttsBegin;
                         _custTable.SalesGroup           = 'TES';
                         _custTable.MainContactWorker    = 5637156776;
                         _dimStorage                     = DimensionAttributeValueSetStorage::find(_custTable.DefaultDimension);
                         _dimAttribute                   = DimensionAttribute::findByName("GH01_Salesman");
                         _dimValue                       = DimensionAttributeValue::findByDimensionAttributeAndValue(_dimAttribute, 'TES', true, true);
                         _dimStorage.addItem(_dimValue);
                         _custTable.DefaultDimension     = _dimStorage.save();
                         _custTable.doUpdate();
                        ttsCommit;
                    }
                }

            else
            {
                warning(strFmt("Row %1 not updated.", row));
            }
        }
        catch
        {
            error(strfmt("Row %1 not updated.", row));
        }
        type = cells.item(row+1, 1).value().variantType();
    }
    while (type != COMVariantType::VT_EMPTY);
    workbook.saved(true);
    application.visible(false);
    application.quit();

    info("Excel uploaded successfully");
}


excel sheet - Header name - CustomerAccount 

Wednesday, July 8, 2020

Changing Dimension

static void changeDimensionValue(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    CustTable custTable = CustTable::find("C-04958");
    DimensionValue oldDimensionValue;
    DimensionValue newDimensionValue = "GRE";
    DimensionDefault newDimensionDefault;

    #define.dimensionName("GH01_Salesman")

    DimensionValue getDimensonValue(DimensionDefault _dimensionDefault)
    {
        DefaultDimensionView defaultDimensionView;
        select firstonly DisplayValue
        from defaultDimensionView
        where defaultDimensionView.Name == #dimensionName
            && defaultDimensionView.DefaultDimension == _dimensionDefault;

        return defaultDimensionView.DisplayValue;
    }

    // Get current value
    oldDimensionValue = getDimensonValue(custTable.DefaultDimension);

    // Build DimensionAttributeValueSetStorage
    dimensionAttributeValueSetStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);

    // Remove old dimension value
    dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
    dimensionAttributeValueSetStorage.removeDimensionAttributeValue(
        DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, oldDimensionValue).RecId);

    // Set new dimension value
    if(newDimensionValue != "")
    {
        dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
        dimensionAttributeValueSetStorage.addItem(
            DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, newDimensionValue));
    }

    newDimensionDefault = dimensionAttributeValueSetStorage.save();

    ttsbegin;
    custTable.selectForUpdate(true);
    custTable.DefaultDimension = newDimensionDefault;
    custTable.update();
    ttscommit;
}

Customer Default dimension

static void GH_CustomerDetailsUpdate(Args _args)
{
    CustTable                        _custTable;
    DimensionAttribute               _dimAttribute;
    DimensionAttributeValueSet       _dimAttributeSet;
    DimensionAttributeValueSetItem   _dimAttributeSetItem;
    DimensionAttributeValue          _dimValue;
    Common                           dimensionValueEntry;
   
   
    _custTable = CustTable::find('C-01847');
   
    _dimAttributeSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension);
   
    while select _dimAttributeSetItem
        where _dimAttributeSetItem.DimensionAttributeValueSet == _dimAttributeSet.RecId
       
    {
        _dimValue = DimensionAttributeValue::find(_dimAttributeSetItem.DimensionAttributeValue);
        _dimAttribute = DimensionAttribute::find(_dimValue.DimensionAttribute);
        dimensionValueEntry = DimensionDefaultingControllerBase::findBackingEntityInstance(curext(),_dimAttribute,_dimValue.EntityInstance);
        info(strFmt("Name %1, Value %2",_dimAttribute.Name +'' + _dimValue.getName(),_dimValue.getValue()));
    }
}

Customer Default dimension update

static void GH_CustomerUpdate(Args _args)
{
    CustTable                         _custTable;
    DimensionAttribute                _dimAttribute;
    DimensionAttributeValueSet        _dimAttributeSet;
    DimensionAttributeValueSetItem    _dimAttributeSetItem;
    DimensionAttributeValue           _dimValue;
    DimensionAttributeValueSetStorage _dimStorage;
    Common                            dimensionValueEntry;
   
     select forUpdate _custTable where _custTable.AccountNum == 'C-04856';
    {
        ttsBegin;
       
         _custTable.SalesGroup           = 'GRE';
         _custTable.MainContactWorker    = 5637156776;
         _dimStorage                     = DimensionAttributeValueSetStorage::find(_custTable.DefaultDimension);
         _dimAttribute                   = DimensionAttribute::findByName("GH01_Salesman");
         _dimValue                       = DimensionAttributeValue::findByDimensionAttributeAndValue(_dimAttribute, 'GRE', true, true);
         _dimStorage.addItem(_dimValue);
         _custTable.DefaultDimension     = _dimStorage.save();
         _custTable.doUpdate();
        ttsCommit;
       
   
    }
}

Customer Excel upload

static void GH_UploadCustomerRegion(Args _args)
{

    SysExcelApplication application;
    SysExcelWorkbooks   workbooks;
    SysExcelWorkbook    workbook;
    SysExcelWorksheets  worksheets;
    SysExcelWorksheet   worksheet;
    SysExcelCells       cells;
    int                 row;
    CommaTextIO         csvFile;
    container           readCon;
    counter             icount,updated;
    Dialog              dialog;
    DialogField         dfFileName;


    FileName            fileName;
    Name                name;

    DirPartyContactInfoView   contactView;
    CustTable                 CustTable;
    DirParty                  dirParty;
    DirPartyRecId             partyRecId;

    LogisticsPostalAddress    address;
    DirPartyPostalAddressView addressView;

    updated                  = 0;

    #File

    application = SysExcelApplication::construct();
    workbooks   = application.workbooks();
    dialog      = new Dialog("Pick the file");
    dfFileName  = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);


    if (dialog.run())
    {
      fileName = dfFileName.value() ;
    try
    {
      workbooks.open(filename);
    }
    catch (Exception::Error)
    {
      throw error("File cannot be opened.");
    }

    workbook   = workbooks.item(1);
    worksheets = workbook.worksheets();
    worksheet  = worksheets.itemFromNum(1);
    cells      = worksheet.cells();

    ttsBegin;
    {

    row++;
    name       = strLRTrim(cells.item(row, 2).value().bStr());
    partyRecId = DirPartyTable::createNew( DirPartyType::Organization, name).RecId;

    custTable.clear();
    custTable.initValue();
    custTable.Party         = partyRecId;
    custTable.AccountNum    = strLRTrim(cells.item(row, 1).value().bStr());
    custTable.CustGroup     = strLRTrim(cells.item(row, 3).value().bStr());
    custTable.Currency      = strLRTrim(cells.item(row, 4).value().bStr());
    custTable.DlvMode       = strLRTrim(cells.item(row, 5).value().bStr());
    custTable.PaymTermId    = strLRTrim(cells.item(row, 6).value().bStr());
    custTable.update();

    custTable               = Custtable::find(strLRTrim(cells.item(row, 1).value().bStr()));
    partyRecId              = custTable.Party;

    DirParty                = DirParty::constructFromPartyRecId(partyRecId );
    address.clear();
    //address.PostBox = strLRTrim(conPeek(readCon,13));
    address.CountryRegionId = strLRTrim(cells.item(row, 7).value().bStr());
    if( address.CountryRegionId != "")
    {
        address.State           = strLRTrim(cells.item(row, 8).value().bStr());
        address.ZipCode         = strLRTrim(cells.item(row, 9).value().bStr());
        address.Street          = strLRTrim(cells.item(row, 10).value().bStr());
        address.City            = strLRTrim(cells.item(row, 11).value().bStr());

        //address.Address = conPeek(readCon,4);

        addressView.LocationName = "Address";
        addressView.IsPrimary    = NoYes::Yes;
        addressView.Party        = partyRecId;
        addressview.initFromPostalAddress(address);


        DirParty                 = DirParty::constructFromPartyRecId(addressView.Party );
        DirParty.createOrUpdatePostalAddress(addressView);
    }

    contactView.clear();

    if(strLRTrim(cells.item(row, 12).value().bStr()) != "")
    {
        contactView.LocationName = "Phone Number";
        contactView.Locator      = strLRTrim(cells.item(row, 12).value().bStr());
        contactView.Type         = LogisticsElectronicAddressMethodType::Phone;
        contactView.Party        = partyRecId;
        contactView.IsPrimary    = NoYes::Yes;
        dirParty.createOrUpdateContactInfo(contactView);
    }

    if(strLRTrim(cells.item(row, 13).value().bStr()) != "")
    {
        contactView.LocationName = "Fax Number";
        contactView.Locator      = strLRTrim(cells.item(row, 13).value().bStr());
        contactView.Type         = LogisticsElectronicAddressMethodType::Fax;
        contactView.Party        = partyRecId;
        contactView.IsPrimary    = NoYes::Yes;
        dirParty.createOrUpdateContactInfo(contactView);
    }

    if(strLRTrim(cells.item(row, 14).value().bStr()) != "")
    {
        contactView.LocationName = "Website";
        contactView.Locator      = strLRTrim(cells.item(row, 14).value().bStr());
        contactView.Type         = LogisticsElectronicAddressMethodType::URL;
        contactView.Party        = partyRecId;
        contactView.IsPrimary    = NoYes::Yes;
        dirParty.createOrUpdateContactInfo(contactView);
    }

    if(strLRTrim(cells.item(row, 15).value().bStr())!= "")
    {
        contactView.LocationName = "Email";
        contactView.Locator      = strLRTrim(cells.item(row, 15).value().bStr());
        contactView.Type         = LogisticsElectronicAddressMethodType::Email;
        contactView.Party        = partyRecId;
        contactView.IsPrimary    = NoYes::Yes;
        dirParty.createOrUpdateContactInfo(contactView);
    }



    }
    ttsCommit;
  }
}