Wednesday, June 20, 2018

Free Text invoice values Importing before posting

class BFIL_createDefaultDimension
{
}

public DimensionDefault  createDefaultDimension(container conAttr, container conValue)
{
    DimensionAttributeValueSetStorage       valueSetStorage = new DimensionAttributeValueSetStorage();
    DimensionDefault                        result;
    DimensionAttribute                      dimensionAttribute;
    DimensionAttributeValue                 dimensionAttributeValue;
    str                                     dimValue;
    int                                     i;
    boolean                                 _createIfNotFound = true;

    for (i = 1; i <= conLen(conAttr); i++)
    {
        dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i));
        if (dimensionAttribute.RecId == 0)
        {
            continue;
        }
        dimValue = conPeek(conValue,i);
        if (dimValue != "")
        {
            // The last parameter is "true". A dimensionAttributeValue record will be created if not found.
            dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);
            // Add the dimensionAttibuteValue to the default dimension
            valueSetStorage.addItem(dimensionAttributeValue);
        }
    }
    result = valueSetStorage.save();
    return result;
}






Public void run(Filename   _filename)
{
    SysExcelApplication                 application;
    SysExcelWorkbooks                   workbooks;
    SysExcelWorkbook                    workbook;
    SysExcelWorksheets                  worksheets;
    SysExcelWorksheet                   worksheet;
    SysExcelCells                       cells;
    COMVariantType                      type;
    Name                                name;
    FileName                            filename;
    LineNum                             lineNum;
    int                                 row = 1;
    CustAccount                         custAccount,precustAccount;
    TransDate                           invDate;
    Description                         invDescription;
    str                                 numberSequenceGroup,accountNo,locationId,mainAccount;
    str                                 Accountingregion,Department,Entities,Product,Purpose,Region,Vendor;// Header Financial Dimensions declaration
    str                                 Accountingregion1,Department1,Entities1,Product1,Purpose1,Region1,Vendor1; //Line Financial Dimensions declaration
    str                                 HSNRate,SACRate,itcCategory,Exempt,HSNCode,SAC,salesTaxGroup;
    str                                 invoiceDate,qty,unitPr,amt;
    Location                            companylocation,Companylocationid,customerlocation,Customerlocationid;
    InvoiceQuantity                     quantity;
    UnitPrice                           unitPrice;
    Amount                              amount;
    String10                            TDSGroup;
    Container                           account,conAttr, conValue;
    int                                 counter =0;
    RefRecId                            ledgerDimension;
    Set                                 failedCustAccount = new Set(Types::String);
    SetEnumerator                       setEnum;
    BFIL_createDefaultDimension         createDefaultDimension;
    NoYes                               noYes;
    ITCCategory_IN                      iTCCategory_IN;

    // tables
    CustTable                           custTable;
    CustInvoiceTable                    custInvoiceTable;
    CustInvoiceLine                     custInvoiceLine,custInvLine;
    ServiceAccountingCodeTable_IN       serviceAccountingCodeTable_IN;
    HSNCodeTable_IN                     hSNCodeTable_IN;
    LogisticsLocation                   logisticsLocation;
    CustInvoiceLineTaxExtensionIN       custInvoiceLineTaxExtensionIN;
    SKS_ServiceAccountingCodeTable_IN   sKS_ServiceAccountingCodeTable_IN;


    str COMVariant2Str(COMVariant _cv, int _decimals = 0,int _characters = 0,int _separator1 = 0,int _separator2 = 0)
       {
            switch(_cv.variantType())
            {
                case (COMVariantType::VT_BSTR):
                    return _cv.bStr();
                case (COMVariantType::VT_R4):
                    return num2str(_cv.float(),_characters,_decimals, _separator1,_separator2);
                case (COMVariantType::VT_R8):
                    return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);
                case (COMVariantType::VT_DECIMAL):
                    return num2str(_cv.decimal(),_characters,_decimals, _separator1, _separator2);
                case (COMVariantType::VT_DATE):
                    return date2str(_cv.date(),123,2,1,2, 1,4);
                case (COMVariantType::VT_EMPTY):
                    return "";
                default:
                    throw error(strfmt("@SYS26908",_cv.variantType()));
            }
            return "";
        }


    createDefaultDimension = new BFIL_createDefaultDimension();

    application = SysExcelApplication::construct();
    workbooks = application.workbooks();
    application.displayAlerts(false);
    filename =_filename;
    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();
    cells.range('D:D').numberFormat('@');
    cells.range('E:E').numberFormat('@');
    cells.range('U:U').numberFormat('@');
    cells.range('Z:Z').numberFormat('@');

    ttsBegin;
    do
    {
        row++;

         CustAccount            = COMVariant2Str(cells.item(row, 1).value());
         numberSequenceGroup    = COMVariant2Str(cells.item(row, 2).value());
         invoiceDate            = COMVariant2Str(cells.item(row, 3).value());
         accountNo              = COMVariant2Str(cells.item(row, 4).value());
         locationId             = COMVariant2Str(cells.item(row, 5).value());
         TDSGroup               = COMVariant2Str(cells.item(row, 6).value());
         Accountingregion       = COMVariant2Str(cells.item(row, 7).value());
         Department             = COMVariant2Str(cells.item(row, 8).value());
         Entities               = COMVariant2Str(cells.item(row, 9).value());
         Product                = COMVariant2Str(cells.item(row, 10).value());
         Purpose                = COMVariant2Str(cells.item(row, 11).value());
         Region                 = COMVariant2Str(cells.item(row, 12).value());
         Vendor                 = COMVariant2Str(cells.item(row, 13).value());
         invDescription         = COMVariant2Str(cells.item(row, 14).value());
         mainAccount            = COMVariant2Str(cells.item(row, 15).value());
         HSNCode                = COMVariant2Str(cells.item(row, 16).value());
         SAC                    = COMVariant2Str(cells.item(row, 17).value());
         qty                    = COMVariant2Str(cells.item(row, 18).value());
         unitPr                 = COMVariant2Str(cells.item(row, 19).value());
         amt                    = COMVariant2Str(cells.item(row, 20).value());
         companylocation        = COMVariant2Str(cells.item(row, 21).value());
         HSNRate                = COMVariant2Str(cells.item(row, 22).value());
         SACRate                = COMVariant2Str(cells.item(row, 23).value());
         itcCategory            = COMVariant2Str(cells.item(row, 24).value());
         Exempt                 = COMVariant2Str(cells.item(row, 25).value());
         customerlocation       = COMVariant2Str(cells.item(row, 26).value());
         Accountingregion1      = COMVariant2Str(cells.item(row, 27).value());
         Department1            = COMVariant2Str(cells.item(row, 28).value());
         Entities1              = COMVariant2Str(cells.item(row, 29).value());
         Product1               = COMVariant2Str(cells.item(row, 30).value());
         Purpose1               = COMVariant2Str(cells.item(row, 31).value());
         Region1                = COMVariant2Str(cells.item(row, 32).value());
         Vendor1                = COMVariant2Str(cells.item(row, 33).value());


        account                 = [mainAccount, mainAccount];
        ledgerDimension         = AxdDimensionUtil::getLedgerAccountId(account);
        invDate                 = str2Date(invoiceDate,123);
        quantity                = str2int(qty);
        unitPrice               = any2real(unitPr);
        amount                  = quantity*unitPrice;
        if(precustAccount != CustAccount  && !failedCustAccount.in(CustAccount))
        {
            select custTable where custTable.AccountNum == CustAccount;
            custInvoiceTable.clear();
            if (custTable.RecId > 0)
            {
                custInvoiceTable.clear();
                custInvoiceTable.OrderAccount           = custTable.AccountNum;
                custInvoiceTable.modifiedField(fieldNum(CustInvoiceTable, OrderAccount));
                custInvoiceTable.DefaultDimension       = ledgerDimension;
                custInvoiceTable.InvoiceDate            = invDate;
                custInvoiceTable.SKS_BeneficiaryAccount = accountNo;
                custInvoiceTable.DeliveryLocation       = LogisticsLocation::findByLocationId(locationId).RecId;
                conAttr                                 = ["AccountingRegion","Department","Entities","Product","Purpose","Region","Vendor"];
                conValue                                = [ Accountingregion, Department, Entities,Product,Purpose,Region,Vendor];
                custInvoiceTable.DefaultDimension       = createDefaultDimension.createDefaultDimension(conAttr, conValue);
                custInvoiceTable.TDSGroup_IN            = TDSGroup;
                custInvoiceTable.insert();
                lineNum = 0;
                precustAccount = CustAccount;
            }
            else
            {
                if (!failedCustAccount.in(CustAccount))
                {
                    failedCustAccount.add(CustAccount);
                }
            }
        }
        if (custInvoiceTable.RecId > 0)
        {
            counter++;

            custInvoiceLine.clear();
            custInvoiceLine.initValue();
            custInvoiceLine.initFromCustInvoiceTable(custInvoiceTable);
            custInvoiceLine.LedgerDimension      = DimensionStorage::getDefaultAccount(MainAccount::findByMainAccountId(mainAccount).RecId);
            custInvoiceLine.DefaultDimension     = ledgerDimension;
            conAttr                              = ["AccountingRegion","Department","Entities","Product","Purpose","Region","Vendor"];
            conValue                             = [ Accountingregion1, Department1, Entities1,Product1,Purpose1,Region1,Vendor1];
            custInvoiceLine.DefaultDimension     = createDefaultDimension.createDefaultDimension(conAttr, conValue);
            custInvoiceLine.Description          = invDescription;
            custInvoiceLine.Quantity             = quantity;
            custInvoiceLine.UnitPrice            = unitPrice;
            custInvoiceLine.AmountCur            = amount;
            custInvoiceLine.ParentRecId          = custInvoiceTable.RecId;
            custInvoiceLine.InvoiceTxt           = invDescription;
            custInvoiceLine.SKS_HSNCode          = SKS_HSNCodeTable_IN::findByCode(HSNCode);

            select firstonly  sKS_ServiceAccountingCodeTable_IN
                    where sKS_ServiceAccountingCodeTable_IN.SAC == COMVariant2Str(cells.item(row, 17).value());

            custInvoiceLine.SKS_ServiceAccountingCodeTable = sKS_ServiceAccountingCodeTable_IN.RecId; //SKS_ServiceAccountingCodeTable_IN::findByServiceAccountingCode(SAC);
            custInvoiceLine.Exempt_IN            = str2enum(noYes,Exempt);
            custInvoiceLine.ITCCategory_IN       = str2enum(iTCCategory_IN,itcCategory);

            //Tax Informatiom
            custInvoiceLine.CompanyLocation_IN   = LogisticsLocation::findByLocationId(companylocation).RecId;
            custInvoiceLine.HSNCodeTable_IN      = HSNCodeTable_IN::findByCode(HSNRate);
            custInvoiceLine.ServiceCodeTable_IN  = ServiceAccountingCodeTable_IN::findByServiceAccountingCode(SACRate);
            custInvoiceLine.CustomerLocation_IN  = LogisticsLocation::findByLocationId(customerlocation).RecId;
            lineNum += 1;
            custInvoiceLine.LineNum = lineNum;
            custInvoiceLine.insert();
            //Added by sarath-->>start
            select forupdate custinvline where custinvline.recid == custinvoiceline.recid
                                              && custinvline.linenum == linenum;
            ttsbegin;
            custinvline.serviceaccountingcodetable_in = serviceaccountingcodetable_in::findbyserviceaccountingcode(SACRate);
            custinvline.update();
            ttscommit;
            //Added by sarath-->>ended
            //Specific to Indian localization, not required for other localizations
            custInvoiceLineTaxExtensionIN.CustInvoiceLine  = custInvoiceLine.RecId;
            custInvoiceLineTaxExtensionIN.TaxInformation_IN = TaxInformation_IN::findDefaultbyLocation(DirPartyTable::find(CompanyInfo::findDataArea(curext()).PartyNumber).PrimaryAddressLocation).RecId;
            custInvoiceLineTaxExtensionIN.initValue();
            custInvoiceLineTaxExtensionIN.insert();

        }
        type = cells.item(row+1, 1).value().variantType();

    }

    while (type != COMVariantType::VT_EMPTY);
    ttsCommit;
    application.workbooks().close();
    application.quit();
    application.finalize();
    application = null;

    info(strFmt("%1 - Uploaded Successfully",counter));
}

No comments:

Post a Comment

TFS Work space configuration

Refer below link:  https://d365byjp.blogspot.com/2018/10/steps-to-configure-tfsvsts-workspace-in.html