Monday, October 7, 2013

Creating Invent Movement Journal in AX 2012 using X++ programming

public class InventMovementJournal extends RunBase
{
    CommaIo                     csvFile;
    Filename                    filename;
    DialogField                 dialogFilename,dialogcheckbox,dialogFromDate,dialogledger,dialogjournalnum,dialogInvent;
    container                   readCon;
    container                   ledgerDimensions, offsetDimensions;
    counter                     icount,inserted;
    Amount                      amount;
    LedgerJournalACType         ledgerJournalACType;
    ledgerJournalName           ledgerJournalName;
    LedgerJournalTable          ledgerJournalTable;
    LedgerJournalTrans          ledgerJournalTrans;
    LedgerJournalTrans_Project  ledgerProjects;
    TransDate                   TransactionDate,Fromdate,TransDate,StartDate,enddate,reversedate;
    NoYesID                     NoYes;
    Ledgerjournalnameid         Ledgerjournalnameid1,LedgerJournalNameId;
    int                         cutoffdays,prevcutoffdays;
    currencycode                currencycode;
    Amount                      AmountDB,AmountCR,CrCutOffAmountCalc,DrCutOffAmountCalc;
    str                         AccountNum,date1;
    JournalId                   journalnum;
    args                        args;
    InventJournalNameid         InventJournalNameid;

    #define.CurrentVersion(2)
    #localmacro.CurrentList
    filename,
    insertIncorrectRecords,
    #endmacro
    #localmacro.ListVersion1
    filename,
    insertIncorrectRecords
    #endmacro
    #File
}

public Object dialog()
{
    DialogRunbase       dialog = super();
    ;
    dialogFilename  = dialog.addField(extendedTypeStr(FilenameOpen));
    dialogFromDate      = dialog.addFieldValue(extendedtypestr(TransDate), TransactionDate,"TransactionDate");
    dialogFilename.value(filename);
    dialog.filenameLookupFilter(["All files", #AllFiles]);
    dialogInvent        = dialog.addFieldvalue(extendedtypestr(InventJournalNameid),"JournalName","JournalName");
    return dialog;
}

public boolean getFromDialog()
{
    filename                = dialogFilename.value();
    FromDate    = dialogFromDate.value();
    InventJournalNameid = dialoginvent.value();
    return true;
}

public LedgerDimensionAccount getLedgerDimension(AccountNum _accountNum)
{
    MainAccount                 mainAccount;
    RefRecId                    accountStructureId;
    List                        dimensionList = new List(Types::Class);
    DimensionDefaultingEngine   dimensionDefaultingEngine;
    ;
    mainAccount = MainAccount::findByMainAccountId(_accountNum);
    accountStructureId = DimensionHierarchy::getAccountStructure(mainAccount.RecId);
    if(mainAccount)
    {
        dimensionDefaultingEngine = DimensionDefaultingEngine::constructForMainAccountId(mainAccount.RecId, accountStructureId);
        dimensionDefaultingEngine.applyDimensionSources(dimensionList);
    return dimensionDefaultingEngine.getLedgerDimension();
    }
    else
    return 0;
}
void run()
{
    boolean                             first = true;
    MainAccount                         mainAccount;
    NumberSequenceTable                 numberSequenceTable;
    LedgerJournalEngine_Daily           ledgerJournalEngine_Daily;
    Voucher                             voucher;
    DimensionLedgerAccountType          ledgerAccountType;
    str                                 accountType;
    Amount                              amountCurDebit,amountCurCredit,amtcrdt,amtdebt,price;
    container                           conSplitValue,dimm,offdim;
    DimensionAttributeValueCombination  ledgerDimension,dimensionAttributeValueCombinationrecid;
    str                                 dimensn,offdimensn;
    str 64                              custAccount,ledgerAccount,Quantity;
    CustTable                           custtable;
    dimensionAttribute                  dimensionAttribute;
    dimensionAttributevalue             dimensionAttributevalue;
    DimensionAttributeValueSetStorage   dimstorage;
    int64                              reccid;
    Struct struct = new Struct();
    container conledgerDimension;
    DimensionDefault DimensionDefault;
    str                                 ItemId,Costprice,Costamount,site,warehouse,ldgracc,batchid,serialnum,location;
    LedgerJournalACTypE                 acctype,offacctype;
    DimensionStorage                    DimensionStorage;
    InventJournalTable journalTable;
    InventJournalTrans journalTrans;
    InventJournalTableData journalTableData;
    InventJournalTransData journalTransData;
    InventTable inventTable;
    InventDim inventDim;
    Counter cnt;
    InventBatch         inventBatch;
   
    ;
    LedgerJournalNameId = Ledgerjournalnameid1;
    TransDate= Fromdate;
    journalnum = journalnum;
    InventJournalNameid = InventJournalNameid;
    csvFile = new CommaIO(filename, 'r');
    try
    {
        if (csvFile)
        {
            ttsbegin;
                    journalTableData = JournalTableData::newTable(journalTable);
                    journalTransData = journalTableData.journalStatic().newJournalTransData(journalTrans,journalTableData);
                    // Init JournalTable
                    journalTable.clear();
                    journalTable.JournalId = journalTableData.nextJournalId();
                    journalTable.JournalType = InventJournalType::Movement;
                    journalTable.JournalNameId = InventJournalNameid;//journalTableData.journalStatic().standardJournalNameId(journalTable.JournalType);
            while (csvFile.status() == IO_Status::OK)
            {
                readCon = csvFile.read();
                icount++;
                journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));
                    // Init JournalTrans
                    journalTrans.clear();
                    journalTransData.initFromJournalTable();
                if (readCon && icount )//dont insert first record of file : header
                {
                    TransDate = TransDate;//str2Date(conPeek(readCon,1),213);
                    ItemId = conpeek(readcon,1);
                    ldgracc = conPeek(readCon,2);
                    CostPrice = conPeek(readCon,3);
                    Quantity = conPeek(readCon,4);
                    Costamount= conPeek(readCon,5);
                    site = conPeek(readCon,6);
                    warehouse = conPeek(readCon,7);
                    batchid = conPeek(readCon,8);
                    location = conPeek(readCon,9);
                    serialnum = conPeek(readCon,10);

                    journalTrans.TransDate = Transdate;
                    journalTrans.ItemId = ItemId;
                    journalTrans.Qty = str2num(Quantity);
                    journalTrans.CostAmount = str2num(Costamount);
                    journalTrans.CostPrice = str2num(Costprice);
                    journalTrans.LedgerDimension = this.getLedgerDimension(ldgracc);
                    inventDim.InventLocationId = warehouse;
                    inventDim.InventSiteId = site;
                    inventDim.inventBatchId = BatchID;
                    inventDim.wMSLocationId = location;
                    inventDim.inventSerialId = serialnum;
                    // Dimension details
                    //inventDim.InventLocationId = ‘MW’;
                    journalTrans.InventDimId = InventDim::findOrCreate(inventDim).inventDimId;
                    journalTransData.create();

                    // Call the static method to post the journal
                    //if(InventJournalCheckPost::newPostJournal(journalTable).validate())
                    //InventJournalCheckPost::newPostJournal(journalTable).run();
                    inserted++;

                }
            }
            journalTable.insert();
            ttsCommit;
        }
        icount--;//Remove header recount from total record count
    }
    catch(Exception::Error)
    {
        info(strFmt("%1 %2",Exception::Error,icount));
    }
    args = new Args();
    args.record(InventJournalTable::find(journalTable.JournalId));
    new MenuFunction(MenuItemDisplayStr(InventJournalTablemovement),MenuItemType::Display).run(args);
}

static void main(Args  args)
{
    InventMovementJournal        InventMovementJournal;
    ledgerJournalTrans              ledgerJournalTrans;
    ;
    InventMovementJournal =  new InventMovementJournal();
    if(InventMovementJournal.prompt())
    {
        InventMovementJournal.run();
    }

}

Friday, October 4, 2013

Updating Product Attribute for an item in AX 2012 using X++ programming

public class ProductAttributeMasterUpload extends RunBase
{
    CommaIo                     csvFile;
    Filename                    filename;
    DialogField                 dialogFilename,dialogcheckbox,dialogFromDate,dialogledger;
    container                   readCon;
    counter                     icount,inserted;
    Amount                      amount;
    int                         cutoffdays,prevcutoffdays;
    currencycode                currencycode;
    Amount                      AmountDB,AmountCR,CrCutOffAmountCalc,DrCutOffAmountCalc;
    str                         AccountNum,date1;
    args                        args;
    EcoResProductVariantDimensionValue  EcoResProductVariantDimensionValue;
    RefRecId                                   ecoResDistinctProductVariantRecId;
    EcoResProductReleaseManagerBase     releaseManager;
    container productDimensions;
    #define.CurrentVersion(2)
    #localmacro.CurrentList
    filename,
    insertIncorrectRecords,
    #endmacro
    #localmacro.ListVersion1
    filename,
    insertIncorrectRecords
    #endmacro
    #File
}


public Object dialog()
{
    DialogRunbase       dialog = super();
    ;
    dialogFilename  = dialog.addField(extendedTypeStr(FilenameOpen));
    dialogFilename.value(filename);
    dialog.filenameLookupFilter(["All files", #AllFiles]);
    return dialog;
}

public boolean getFromDialog()
{
    filename                = dialogFilename.value();
    return true;
}


void ProductAttribute()
{
    boolean                             first = true;
    MainAccount                         mainAccount;
    DimensionAttributeValueCombination  dimensionAttributeValueCombination;
    MainAccountNum                      mainAccountNum;
    NumberSequenceTable                 numberSequenceTable;
    LedgerJournalEngine_Daily           ledgerJournalEngine_Daily;
    Voucher                             voucher;
    DimensionLedgerAccountType          ledgerAccountType;
    str                                 accountType;
    Amount                              amountCurDebit,amountCurCredit,amtcrdt,amtdebt,price;
    container                           conSplitValue,dimm,offdim;
    projTable                           projTable;
    DimensionAttributeValueCombination  ledgerDimension,dimensionAttributeValueCombinationrecid;
    ProjId                              projid;
    JournalTableData                    JournalTableData;
    AxLedgerJournalTrans                trans  = new AxLedgerJournalTrans();
    AxLedgerJournalTable                header = new AxLedgerJournalTable();
    str                                 dimensn,offdimensn;
    str 64                              custAccount,ledgerAccount;
    CustTable                           custtable;
    dimensionAttribute                  dimensionAttribute;
    dimensionAttributevalue             dimensionAttributevalue;
    DimensionAttributeValueSetStorage   dimstorage;
    int64                              reccid;
    Struct struct = new Struct();
    container conledgerDimension;
    DimensionDefault DimensionDefault;
    str                                 costcenter,department,revenueDimension,description;
   
    LedgerJournalACTypE                 acctype,offacctype;
    DimensionStorage                    DimensionStorage;
    AssetTable                          assetTable;
    AssetBook                           assetbook;
    str 64                                assetid;
    transDate                           acqdate,rundate,lastrundt,placedinsev;
    real                                acqprice,sevlife,reaming;
    int                                 lifetime;
    InventTable                         InventTable;
    str  64                               itemid,stdconfig,stdsize,stdcolor,stdstyle,_attributename,_attributevalue;
    RefRecId                           itemRecID;
    EcoResProduct                       EcoResProduct,product;
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;

    ;
    csvFile = new CommaIO(filename, 'r');
    try
    {
        if (csvFile)
        {
            ttsbegin;

            while (csvFile.status() == IO_Status::OK)
            {
                readCon = csvFile.read();
                icount++;
                if(icount == 1)
                    continue;

                if (readCon && icount >1 )//dont insert first record of file : header
                {
                        itemid = conPeek(readCon,1);
                        _attributename = conPeek(readCon,2);
                        _attributevalue  = conPeek(readCon,3);
                        select ecoResAttribute where ecoResAttribute.Name == _attributename
                        join EcoResAttributeType where EcoResAttributeType.RecId == ecoResAttribute.AttributeType;
                        if(EcoResAttributeType.DataType == AttributeDataType::Integer)
                            this.setProductAttributeIntegerValue(itemid,_attributename,_attributevalue);
                        else if(EcoResAttributeType.DataType == AttributeDataType::Currency)
                            this.setProductAttributecurrencyValue(itemid,_attributename,any2real(_attributevalue));
                       // else if(EcoResAttributeType.DataType == AttributeDataType::DateTime)
                         //   this.setProductAttributeDateTimeValue(itemid,_attributename,str2Date(_attributevalue,213));
                        else if(EcoResAttributeType.DataType == AttributeDataType::Decimal)
                            this.setProductAttributeDecimalValue(itemid,_attributename,any2real(_attributevalue));
                        else if(EcoResAttributeType.DataType == AttributeDataType::Text)
                            this.setProductAttributeTextValue(itemid,_attributename,_attributevalue);
                        else if(EcoResAttributeType.DataType == AttributeDataType::TrueFalse)
                            this.setProductAttributeTrueFalseValue(itemid,_attributename,str2num(_attributevalue));

                }
             }
                    inserted++;
            ttsCommit;
        }
        icount--;//Remove header recount from total record count
    }
    catch(Exception::Error)
    {
        info(strFmt("%1 %2",Exception::Error,icount));
    }

}



static void main(Args  args)
{
    ProductAttributeMasterUpload        ProductAttributeMasterUpload;
    ledgerJournalTrans              ledgerJournalTrans;
    ;
    ProductAttributeMasterUpload =  new ProductAttributeMasterUpload();
    if(ProductAttributeMasterUpload.prompt())
    {
        ProductAttributeMasterUpload.ProductAttribute();
    }
}

void setProductAttributeCurrencyValue(itemID _itemid, str _attributeName , AttributeValueCurrency _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {

                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoRescurrencyValue where EcoRescurrencyValue.RecId == ecoResAttributeValue.Value;
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate ecoRescurrencyValue_ForUpdate
                    where ecoRescurrencyValue_ForUpdate.RecId == ecoRescurrencyValue.RecId
                    {
                        ecoRescurrencyValue_ForUpdate.CurrencyValue = (_attributeValue);
                        ecoRescurrencyValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select ecoRescurrencyValue_ForValidation where ecoRescurrencyValue_ForValidation.RecId == ecoRescurrencyValue.RecId;
                    if (ecoRescurrencyValue_ForValidation.CurrencyValue != (_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
            }
        }
    }
   




void setProductAttributeDateTimeValue(itemID _itemid, str _attributeName , utcdatetime _attributeValue)//attributevaluedatetime _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {
                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoResdatetimeValue where EcoResdatetimeValue.RecId == ecoResAttributeValue.Value;
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate ecoResdatetimeValue_ForUpdate
                    where ecoResdatetimeValue_ForUpdate.RecId == ecoResdatetimeValue.RecId
                    {
                        ecoResdatetimeValue_ForUpdate.DateTimeValue = (_attributeValue);
                        ecoResdatetimeValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select ecoResdatetimeValue_ForValidation where ecoResdatetimeValue_ForValidation.RecId == ecoResdatetimeValue.RecId;
                    if (ecoResdatetimeValue_ForValidation.DateTimeValue != (_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
            }
        }
    }

void setProductAttributeDecimalValue(itemID _itemid, str _attributeName , AttributeValueFloat _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {
                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoResfloatValue where EcoResfloatValue.RecId == ecoResAttributeValue.Value;
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate ecoResfloatValue_ForUpdate
                    where ecoResfloatValue_ForUpdate.RecId == ecoResfloatValue.RecId
                    {
                        ecoResfloatValue_ForUpdate.FloatValue = any2real(_attributeValue);
                        ecoResfloatValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select ecoResfloatValue_ForValidation where ecoResfloatValue_ForValidation.RecId == ecoResfloatValue.RecId;
                    if (ecoResfloatValue_ForValidation.FloatValue != any2real(_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
            }
        }
    }
   

void setProductAttributeIntegerValue(itemID _itemid, str _attributeName , str 1999 _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {
           
            select EcoResAttributeType where EcoResAttributeType.RecId == ecoResAttribute.AttributeType;
          
                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoResIntValue where EcoResIntValue.RecId == ecoResAttributeValue.Value;
               
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate ecoResintValue_ForUpdate
                    where ecoResIntValue_ForUpdate.RecId == ecoResIntValue.RecId
                    {
                        ecoResIntValue_ForUpdate.intValue = any2int(_attributeValue);
                        ecoResIntValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select ecoResIntValue_ForValidation where ecoResIntValue_ForValidation.RecId == ecoResIntValue.RecId;
                    if (ecoResIntValue_ForValidation.IntValue != any2int(_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
        }
    }
  
}


void setProductAttributeTextValue(itemID _itemid, str _attributeName , str 1999 _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {
                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoRestextValue where EcoRestextValue.RecId == ecoResAttributeValue.Value;
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate ecoRestextValue_ForUpdate
                    where ecoRestextValue_ForUpdate.RecId == ecoRestextValue.RecId
                    {
                        ecoRestextValue_ForUpdate.textValue = (_attributeValue);
                        ecoRestextValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select ecoRestextValue_ForValidation where ecoRestextValue_ForValidation.RecId == ecoRestextValue.RecId;
                    if (ecoRestextValue_ForValidation.textValue != (_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
        }
    }

}


void setProductAttributeTrueFalseValue(itemID _itemid, str _attributeName , Attributevalueboolean _attributeValue )
{
    RefRecId                           itemRecID;
    EcoResProduct                      product = EcoResProduct::find(InventTable::find(_itemId).Product);
    EcoResProductCategory              ecoResProductCategory;
    EcoResCategory                     ecoResCategory;
    EcoResCategoryAttributeLookup      ecoResCategoryAttributeLookup;
    EcoResAttribute                    ecoResAttribute;
    EcoResAttributeValue               ecoResAttributeValue;
    EcoResProductInstanceValue         ecoResProductInstanceValue;
    EcoResTextValue                    ecoResTextValue, ecoResTextValue_ForUpdate, ecoResTextValue_ForValidation;
    EcoResAttributeType                EcoResAttributeType;
    EcoResIntValue                     EcoResIntValue,ecoresIntValue_forupdate,ecoresIntValue_forValidation;
    EcoResCurrencyValue                ecoResCurrencyValue,ecoResCurrencyValue_forupdate,ecoResCurrencyValue_forvalidation;
    EcoResDateTimeValue                EcoResDateTimeValue,EcoResDateTimeValue_forupdate,EcoResDateTimeValue_forvalidation;
    EcoResFloatValue                   EcoResFloatValue,EcoResFloatValue_forupdate,EcoResFloatValue_forvalidation;
    EcoResBooleanValue                 EcoResBooleanValue,EcoResBooleanValue_forupdate,EcoResBooleanValue_forvalidation;
   
    itemRecID = product.RecId;
    //select EcoResProduct where EcoResProduct.DisplayProductNumber == _itemid;
    while
    select ecoResProductCategory where ecoResProductCategory.Product == itemRecID
    join ecoResCategory where ecoResCategory.RecId == ecoResProductCategory.Category
    {
        while
        select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
        join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
        {
                select ecoResAttributeValue where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
                join ecoResProductInstanceValue where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue && ecoResProductInstanceValue.Product == itemRecID
                join EcoResbooleanValue where EcoResbooleanValue.RecId == ecoResAttributeValue.Value;
                if (strLwr(strLRTrim(ecoResAttribute.Name)) == strLwr(strLRTrim(_attributeName)))
                {
                    ttsBegin;
                    while select forUpdate EcoResbooleanValue_ForUpdate
                    where EcoResbooleanValue_ForUpdate.RecId == EcoResbooleanValue_ForUpdate.RecId
                    {
                        EcoResbooleanValue_ForUpdate.BooleanValue = (_attributeValue);
                        EcoResbooleanValue_ForUpdate.update();
                    }
                    ttsCommit;
                    select EcoResbooleanValue_ForValidation where EcoResbooleanValue_ForValidation.RecId == ecoResbooleanValue.RecId;
                    if (EcoResbooleanValue_ForValidation.BooleanValue != (_attributeValue))
                    throw error('An exception was raised - could not update the attribute value. (ProductAttributesCopy/setProductAttributeValue)');

                 }
        }
    }
   
}

Tuesday, October 1, 2013

Chart Of Accounts import from CSV file through X++ programming

public class ChartOfAccountsMasterImport extends RunBase
{
    CommaIo                     csvFile;
    Filename                    filename;
    DialogField                 dialogFilename,dialogChartOfAccountsName;
    str                         ChartOfAccountsName;
    #define.CurrentVersion(2)
    #localmacro.CurrentList
    filename,
    insertIncorrectRecords,
    #endmacro
    #localmacro.ListVersion1
    filename,
    insertIncorrectRecords
    #endmacro
    #File
}

public Object dialog()
{
    DialogRunbase       dialog = super();
    ;
    dialogFilename  = dialog.addField(extendedTypeStr(FilenameOpen));
    dialogFilename.value(filename);
    dialogChartOfAccountsName = dialog.addField(extendedTypeStr("Name"), "Chart of account name");
    dialog.filenameLookupFilter(["All files", #AllFiles]);
    return dialog;
}

public boolean getFromDialog()
{
    filename                = dialogFilename.value();
    ChartOfAccountsName     = diALOGChartOfAccountsName.value();
    return true;
}
void run()
{
    ChartOfAccountsService                      chartOfAccountsService;
    MainAccountContract                         mainAccountContract;
    CommaTextIo                                 file;
    container                                   rec;
    Name                                        ledgerChartOfAccountsName;
    MainAccountNum                              mainAccountId;
    DimensionLedgerAccountType                  dimensionledgerAccountType;
    MainAccountCategory                         MainAccountCategory;
    MainAccount                                 MainAccount;
    DimensionAttribute                          mainAccountDimAttribute;
    DimensionAttributeValue                     dimensionAttributeValue;
    DimensionAttributeValueTotallingCriteria    totalCriteria;
    AccountCategory                             _accountCategory;
    str                                         strOfAccounts, fromA, toA,MainAccountName;
    int                                         sep;
    container                                   readCon;
    counter                                     icount,inserted;
    ;

    csvFile = new CommaIO(filename, 'r');
    try
    {
        if (csvFile)
        {
            ttsbegin;
            readCon = csvFile.read();
            while (csvFile.status() == IO_Status::OK)
            {
                readCon = csvFile.read();
                if(readCon)
                {
                    mainAccountId = conPeek(readCon, 1);//strlrTrim(
                    mainAccountName = conPeek(readCon, 2);
                    dimensionledgerAccountType = conPeek(readCon, 3);
                    _accountCategory = conPeek(readCon,4);
                    if(!mainAccountId)
                    continue;
                    if (!mainAccount::findByMainAccountId( mainAccountId , false, LedgerChartOfAccounts::findByName(ledgerChartOfAccountsName).RecId))
                    {
                        mainAccountContract = new MainAccountContract();
                        mainAccountContract.parmMainAccountId( mainAccountId );
                        mainAccountContract.parmName(mainAccountName);
                        mainAccountContract.parmLedgerChartOfAccounts(ChartOfAccountsName);
                        mainAccountContract.parmType(enum2int(dimensionledgerAccountType::Expense));
                        select firstonly mainAccountCategory where mainAccountCategory.AccountCategory == _accountCategory;
                        MainAccountContract.parmAccountCategoryRef(mainAccountCategory.AccountCategoryRef);
                        chartOfAccountsService = new ChartOfAccountsService();
                        chartOfAccountsService.createMainAccount(mainAccountContract);
                    }
                }
            }
            ttsCommit;
        }
        icount--;//Remove header recount from total record count
    }
    catch(Exception::Error)
    {
        info(strFmt("%1 %2",Exception::Error,icount));
    }
}

static void main(Args  args)
{
    ChartOfAccountsMasterImport        ChartOfAccountsMasterImport;
    ;
    ChartOfAccountsMasterImport =  new ChartOfAccountsMasterImport();
    if(ChartOfAccountsMasterImport.prompt())
    {
        ChartOfAccountsMasterImport.run();
    }
}

Vendor Master import from CSV file using X++ programming

public class VendorMasterImport extends RunBase
{
    CommaIo                     csvFile;
    Filename                    filename;
    DialogField                 dialogFilename;
    #define.CurrentVersion(2)
    #localmacro.CurrentList
    filename,
    insertIncorrectRecords,
    #endmacro
    #localmacro.ListVersion1
    filename,
    insertIncorrectRecords
    #endmacro
    #File
}
public Object dialog()
{
    DialogRunbase       dialog = super();
    ;
    dialogFilename  = dialog.addField(extendedTypeStr(FilenameOpen));
    dialogFilename.value(filename);
    dialog.filenameLookupFilter(["All files", #AllFiles]);
    return dialog;
}

public boolean getFromDialog()
{
    filename                = dialogFilename.value();
    return true;
}
void run()
{
    //CommaTextIO                             csvFile;
    container                               readCon;
    counter                                 icount,inserted;
    Dialog                                  dialog;
    DialogField                             dfFileName;
    DirPartyRecId                           partyRecId,contactPartyRecid;
    Name                                    name,contactName;
    VendTable                               vendtable;
    str                                     contactperson;
    DirPartyPostalAddressView               addressView;
    DirPartyContactInfoView                 contactView;
    ContactPerson                           contactpersonTable;
    LogisticsElectronicAddressMethodType    enumType;
    DirContactPersonsService                dirContactPersonsService;
    DirContactPersons                       dirContactPersons;
    DirContactPersons_ContactPerson         dirContactPersons_ContactPerson;
    DirContactPersons_Person                dirContactPersons_Person;
    DirContactPersons_PersonName            dirContactPersons_PersonName;
    AifEntityKeyList                        aifEntityKeyList, aifEntityKeyList_DirContactPerson;
    str                                     fName, mName, lName;
    VendAccount                             vendorAccount;
    DirParty                                dirParty;
    LogisticsPostalAddress                  address;
    LogisticsElectronicAddress              logisticsElectronicAddress;
    BinData                                 binData;
    str                                     stringImage;
    LogisticsAddressStateID                 stateId;
    str                                     accountnum,accountName,vendgroup,currency,dlvmode,paymtermid,countryid,street,city,mobile,fax,email,zipcode,pobox,phone;

    ;

    csvFile = new CommaIO(filename, 'r');
    try
    {
        if (csvFile)
        {
            ttsbegin;
            readCon = csvFile.read();
            while (csvFile.status() == IO_Status::OK)
            {
                readCon = csvFile.read();
                if(readCon)
                {
                icount++;
                accountnum = conPeek(readCon,1);
                accountName = conPeek(readCon,2);
                phone = conPeek(readCon,3);
                fax = conPeek(readCon,4);
                vendgroup = conPeek(readCon,5);
                currency = conPeek(readCon,6);
                dlvmode = conPeek(readCon,7);
                paymtermid = conPeek(readCon,8);
                email = conPeek(readCon,9);
                mobile = conPeek(readCon,10);
                contactperson = conPeek(readCon,11);
                pobox = conPeek(readCon,12);
                countryid = conPeek(readCon,13);
                zipcode = conPeek(readCon,14);
                stateId = conPeek(readCon,15);
                city = conPeek(readCon,16);
                street = conPeek(readCon,17);


                ttsBegin;
                name = conPeek(readCon,2);
                if(!name)
                break;
                partyRecId = DirPartyTable::createNew( DirPartyType::Organization, name).RecId;

                vendtable.clear();
                vendtable.initValue();
                vendtable.Party = partyRecId;
                vendtable.AccountNum = accountnum;
                vendtable.VendGroup  = vendgroup;
                vendtable.Currency   = currency;
                //vendtable.Blocked    =
                vendtable.DlvMode    = dlvmode;
                vendtable.PaymTermId   = paymtermid;
                if(contactperson != '')
                {
                    contactname = ContactPerson;
                    ContactPerson::findOrCreateNameParty(partyRecId,contactname);
                }
                vendtable.insert();
                ttsCommit;

                stateId = subStr(stateId,1,25);

                address.PostBox = strLRTrim(PoBox);
                address.CountryRegionId = strLRTrim(Countryid);
                address.State = stateId;
                address.ZipCode = strLRTrim(ZipCode);
                address.Street  = strLRTrim(Street);
                //address.county = strLRTrim(conPeek(readCon,17));
                address.City    = strLRTrim(City);
                addressView.LocationName = name;
                addressView.IsPrimary = NoYes::Yes;
                addressView.Party = partyRecId;
                addressview.initFromPostalAddress(address);

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

                contactView.LocationName = "Email";
                contactView.Locator      = strLRTrim(email);
                contactView.Type         = LogisticsElectronicAddressMethodType::Email;
                contactView.Party        = partyRecId;
                contactView.IsPrimary    = NoYes::Yes;
                dirParty.createOrUpdateContactInfo(contactView);

                contactView.LocationName = "Mobile";
                contactView.Locator      = strLRTrim(mobile);
                contactView.Type         = LogisticsElectronicAddressMethodType::Phone;
                contactView.Party        = partyRecId;
                contactView.IsPrimary    = NoYes::Yes;
                dirParty.createOrUpdateContactInfo(contactView);

                contactView.LocationName = "Phone";
                contactView.Locator      = strLRTrim(Phone);
                contactView.Type         = LogisticsElectronicAddressMethodType::Phone;
                contactView.Party        = partyRecId;
                contactView.IsPrimary    = NoYes::Yes;
                dirParty.createOrUpdateContactInfo(contactView);

                contactView.LocationName = "Fax";
                contactView.Locator      = strLRTrim(Fax);
                contactView.Type         = LogisticsElectronicAddressMethodType::Fax;
                contactView.Party        = partyRecId;
                contactView.IsPrimary    = NoYes::Yes;
                dirParty.createOrUpdateContactInfo(contactView);
                inserted++;
                }
            }
            ttsCommit;
        }
        icount--;//Remove header recount from total record count
    }
    catch(Exception::Error)
    {
        info(strFmt("%1 %2",Exception::Error,icount));
    }
}

static void main(Args  args)
{
    VendorMasterImport        VendorMasterImport;
    ;
    VendorMasterImport =  new VendorMasterImport();
    if(VendorMasterImport.prompt())
    {
        VendorMasterImport.run();
    }
}