Thursday, 25 April 2019

Generate expense Journal Lines in Proj Module

Generate expense Journal Lines in Proj Module

class ALE_GenerateExpenseJournalLines extends RunBase
{
    int                     recordsCount;
    TransDate               fromDate,toDate;
    ProjId                  projId;
    Name                    peroid;
    LedgerJournalId         journalId,journalIdLoc;


    DialogField dlgPeriod;
    DialogField dlgProjId;

    #define.CurrentVersion(1)
    #localmacro.CurrentList
    peroid,
    projId
    #endmacro
}


//////////////////////////////////////////////////


public static void main(Args args)
{
    JournalId           journalId;
    LedgerJournalTable  ledgerJournalTable;
    ALE_GenerateExpenseJournalLines generateExpenseJournalLines = new ALE_GenerateExpenseJournalLines();
    ledgerJournalTable = args.record();
    journalId = ledgerJournalTable.JournalNum;
    generateExpenseJournalLines.getJournalId(journalId);
    if(generateExpenseJournalLines.prompt())
    {
        generateExpenseJournalLines.run();
    }
}

.................................................................................

protected Object dialog()
{
    Dialog dialog;
    FormStringControl           controlPeriodName;

    dialog = super();
    dialog.caption('Generate Expense Journal lines');

    dlgPeriod = dialog.addFieldValue(extendedTypeStr(Name),peroid);
    dlgProjId = dialog.addFieldValue(extendedTypeStr(ProjId),projId);

    controlPeriodName = dlgPeriod.control();

    controlPeriodName.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(ALE_GenerateJournalLines,lookupPeriodName), this);
    return dialog;
}

.................................................................................................

public boolean getFromDialog()
{
    boolean ret;

    ret = super();
    peroid = dlgPeriod.value();
    projId = dlgProjId.value();

    return ret;
}
...............................................................................................

public void getJournalId(JournalId journalIdB)
{
    journalId = journalIdB;
}

....................................................................

public void lookupPeriodName(FormStringControl _control)
{
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource;
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tableNum(Ale_PeriodMaster),_control);

    sysTableLookup.addLookupField(fieldNum(Ale_PeriodMaster, Name));
    queryBuildDataSource = query.addDataSource(tableNum(Ale_PeriodMaster));
    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
}

...............................................................................

public container pack()
{
    return [#CurrentVersion,#CurrentList];
}

...........................................................................

public void run()
{
    ProjForecastUnion           projForecastUnion;
    LedgerJournalTable          ledgerJournalTableLoc;
    Ale_VehicleUploader         vehicleUploader;
    Ale_PeriodMaster            periodMaster;
    TransDate                   periodFromDate,periodToDate;

    ALE_GenerateExpenseJournalLines generareJournalLines = new ALE_GenerateExpenseJournalLines();

    journalIdLoc    = journalId;
    select StartDate,Enddate from periodMaster where periodMaster.Name == peroid;
    periodFromDate  = periodMaster.StartDate;
    periodToDate    = periodMaster.Enddate;

    try
    {
        ttsBegin;
        ledgerJournalTableLoc = LedgerJournalTable::find(journalIdLoc);

        if(LedgerJournalName::find(LedgerJournalTable::find(journalIdLoc).JournalName).Ale_VehiclePrice != NoYes::Yes)
        {
            while select projForecastUnion group by ProjId,CategoryId,Ale_Period where projForecastUnion.ProjId == projId
                && projForecastUnion.Ale_Period == peroid
                && projForecastUnion.ProjTransType == ProjTransType::Cost
            {
                recordsCount++;
                generareJournalLines.createExpenseJournals(projForecastUnion,journalIdLoc);
            }
        }
     
        info(strFmt('%1 journals has been created',recordsCount));
        ttsCommit;
    }
    catch(Exception::Deadlock)
    {
        error('Caught an exception');
        retry;
    }

}


..............................................................................


public boolean unpack(container packedClass)
{
    Integer version = conPeek(packedClass,1);
    switch (version)
    {
        case #CurrentVersion :
            [version,#CurrentList] = packedClass;
        break;
        default :
        return false;
    }

    return true;
}


......................................................................./////////////////////////???????????????????

private void createExpenseJournals(ProjForecastUnion    _projForecastUnion,LedgerJournalId         _journalId)
{
    ProjPosting             projPosting;
    ProjSalesAmount         salesAmount;
    int64                   recId,ledgerDim;
    AmountMST               expenseAssesableValue;

    //ProjForecastUnion       projForecastUnionTransId;
    AxLedgerJournalTable    axLedgerJournalTable = new AxLedgerJournalTable();
    AxLedgerJournalTrans    axLedgerJournalTrans = new AxLedgerJournalTrans();
    ProjForecastUnion       projForecastUnionLoc,projForecastUnionCat;
    ProjBudgetLineDetail    projBudgetLineDetail;
    ProjForecastCost        projForecastCost;
    LedgerJournalTable      ledgerJournalTable,ledgerJournalTableLoc;
    LedgerJournalTrans      ledgerJournalTrans;
    NumberSequenceTable     numberSequenceTable;
    LedgerJournalTrans_Project  ledgerJournalTrans_Project;
    LedgerJournalTrans_ProjectTaxExtensionIN    ledgerJournalTrans_ProjectTaxExtensionIN;

    DefaultDimensionView                defaultDimensionView;
    DimensionAttributeValueCombination  ledgerDimensionvalueCombination;
    DimensionAttributeValueCombination  davc;
    ProjTable   projTable;
    projForecastUnionLoc.clear();
    select Worker,CurrencyId,Qty,LinePropertyId,TransId from projForecastUnionLoc where projForecastUnionLoc.ProjId == _projForecastUnion.ProjId
        && projForecastUnionLoc.CategoryId == _projForecastUnion.CategoryId
        && projForecastUnionLoc.Ale_PositionId == _projForecastUnion.Ale_PositionId
        && projForecastUnionLoc.Ale_Period == _projForecastUnion.Ale_Period;

    ledgerJournalTable = LedgerJournalTable::find(_journalId);
    ledgerJournalTrans.JournalNum = axLedgerJournalTable.LedgerJournalTable().JournalNum;
    //ledgerJournalTrans.DefaultDimension = DimensionDefault;
    ledgerJournalTrans.AccountType = LedgerJournalACTypE::Project;
    numberSequenceTable = NumberSequenceTable::find(LedgerJournalName::find(ledgerJournalTable.JournalName).NumberSequenceTable);
    ledgerJournalTrans.Voucher = NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher();

    select firstonly ProjId from projTable join RecId from ledgerDimensionvalueCombination where ledgerDimensionvalueCombination.DisplayValue == projTable.ProjId
        && projTable.ProjId == _projForecastUnion.ProjId;

    select LedgerDimension from projPosting where projPosting.ProjCategoryRelation == _projForecastUnion.CategoryId
        && projPosting.CategoryCode == TableGroupAll::Table;

    select DefaultDimension from defaultDimensionView where defaultDimensionView.DisplayValue == HcmWorker::find(ProjForecastCost::find(projForecastUnionLoc.TransId).Worker).PersonnelNumber;

    ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum;
    ledgerJournalTrans.Company = curext();
    ledgerJournalTrans.CurrencyCode = projForecastUnionLoc.CurrencyId;//ProjTable::find(_projForecastUnion.ProjId).DefaultDimension
    ledgerJournalTrans.DefaultDimension = DimensionDefaultingService::serviceMergeDefaultDimensions(ProjForecastCost::find(projForecastUnionLoc.TransId).DefaultDimension,defaultDimensionView.DefaultDimension);

    ledgerJournalTrans.Qty = projForecastUnionLoc.Qty;
    ledgerJournalTrans.TransDate = systemDateGet();
    this.createDefaultDimensions(_projForecastUnion,projForecastUnionLoc);
    if(HcmWorker::find(ProjForecastCost::find(projForecastUnionLoc.TransId).Worker).PersonnelNumber)
    {
        //ledgerDim = DimensionDefaultingService::serviceCreateLedgerDimension(projPosting.LedgerDimension);//,ledgerJournalTrans.DefaultDimension,defaultDimensionView.DefaultDimension
        //ledgerJournalTrans.OffsetLedgerDimension = DimensionDefaultingService::serviceMergeDefaultDimensions(ledgerDim,defaultDimensionView.DefaultDimension);
        ledgerJournalTrans.OffsetLedgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(projPosting.LedgerDimension,ledgerJournalTrans.DefaultDimension,defaultDimension);
    }
    else
    {
        select DefaultDimension from defaultDimensionView where defaultDimensionView.DisplayValue == 'Blank';
        ledgerJournalTrans.OffsetLedgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension( projPosting.LedgerDimension,ledgerJournalTrans.DefaultDimension,defaultDimensionView.DefaultDimension,defaultDimension);
    }

    if(ledgerDimensionvalueCombination.recid != 0)
    {
        ledgerJournalTrans.ledgerDimension  = ledgerDimensionvalueCombination.recid;
    }
    else
    {
        recId = DimensionStorage::getDynamicAccount(_projForecastUnion.ProjId, 3, 129);
        davc = DimensionAttributeValueCombination::find(recId);
        ledgerJournalTrans.DefaultDimension = davc.RecId;
    }

    ledgerJournalTrans.OffsetAccountType = LedgerJournalACType::Ledger;

    ledgerJournalTrans.insert();
    // Strat by somendra
    if(ledgerJournalTrans.recid)
    {
         select forUpdate ledgerJournalTableLoc where ledgerJournalTableLoc.JournalNum == ledgerJournalTrans.JournalNum;
         ledgerJournalTableLoc.ALE_ProjId = _projForecastUnion.ProjId;//projTable.ProjId;//projId;
         ledgerJournalTableLoc.Ale_Period = _projForecastUnion.Ale_Period;
         ledgerJournalTableLoc.update();
    }
     //End by somendra
    salesAmount = 0;
    while select TransId from projForecastUnionCat where projForecastUnionCat.ProjId == _projForecastUnion.ProjId
        && projForecastUnionCat.CategoryId == _projForecastUnion.CategoryId
        && projForecastUnionCat.Ale_Period == _projForecastUnion.Ale_Period
        && projForecastUnionCat.ProjTransType == ProjTransType::Cost
    {
        //select SalesPrice from projBudgetLineDetail where projBudgetLineDetail.Ale_TransactionID == projForecastUnionCat.TransId; //
        //salesAmount += projBudgetLineDetail.SalesPrice;
        while select SalesPrice from projForecastCost where projForecastCost.TransId == projForecastUnionCat.TransId
        {
            salesAmount += projForecastCost.SalesPrice;
        }
    }
    expenseAssesableValue = 0;
    ledgerJournalTrans_Project.CategoryId = _projForecastUnion.CategoryId;
    ledgerJournalTrans_Project.Qty = projForecastUnionLoc.Qty;
    ledgerJournalTrans_Project.ALE_PeriodName = _projForecastUnion.Ale_Period;
    ledgerJournalTrans_Project.ProjTransDate = systemDateGet();
    ledgerJournalTrans_Project.SalesPrice = salesAmount;
    ledgerJournalTrans_Project.SalesCurrencyId = projForecastUnionLoc.CurrencyId;
    ledgerJournalTrans_Project.PositionId = _projForecastUnion.Ale_PositionId;
    ledgerJournalTrans_Project.LinePropertyId = projForecastUnionLoc.LinePropertyId;
    ledgerJournalTrans_Project.ProjId = _projForecastUnion.ProjId;
    ledgerJournalTrans_Project.RefRecId = ledgerJournalTrans.RecId;
    expenseAssesableValue  = ledgerJournalTrans_Project.Qty * ledgerJournalTrans_Project.SalesPrice;
    ledgerJournalTrans_Project.Worker = ProjForecastCost::find(projForecastUnionLoc.TransId).Worker;
    ledgerJournalTrans_Project.insert();
    ledgerJournalTrans_ProjectTaxExtensionIN.LedgerJournalTrans_Project = ledgerJournalTrans_Project.RecId;
    ledgerJournalTrans_ProjectTaxExtensionIN.AssessableValue = expenseAssesableValue;
    ledgerJournalTrans_ProjectTaxExtensionIN.insert();
    ledgerJournalTrans_Project.clear();
    ledgerJournalTrans.clear();

}


........................................................................................

Number to textINR

Number to textINR

static TempStr numeralsToTxtINR(real _num)
{


int numOfPennies = (decround(frac(_num), 2) * 100) mod 100;
real test = _num - frac(_num);

int numOfTenths;
str 20 ones[19], tenths[9], hundreds, thousands, lakhs, crores;

int64 temp;
str 200 returntxt;
str 200 pennytxt;
int penny;

real modOperator(real a1, real a2)
{
int tmpi;
real tmp1, tmp2;
tmp1 = a1 / a2;
tmpi = real2int(tmp1);
tmp2 = tmpi;
return (tmp1 - tmp2)*a2;
}

real checkPower(real _test, int64 _power)
{
int64 numOfPower;

if (_test >= _power)
{
numOfPower = _test div _power;
if (numOfPower >= 100)
{
temp = numOfPower div 100;
returntxt = returntxt + ' ' + ones[temp] + ' ' + hundreds;
numOfPower = numOfPower mod 100;
}
if (numOfPower >= 20)
{
temp = numOfPower div 10;
returntxt = returntxt + ' ' + tenths[temp];
numOfPower = numOfPower mod 10;
}
if (numOfPower >= 1)
{
returntxt = returntxt + ' ' + ones[numOfPower];
numOfPower = numOfPower mod 10;
}
switch(_power)
{
case 10000000 :
{
returntxt = returntxt + ' ' + Crores;
_test = modOperator(_test, 10000000);
break;
}
case 100000 :
{
returntxt = returntxt + ' ' + lakhs;
_test = modOperator(_test, 100000);
break;
}
case 1000 :
{
returntxt = returntxt + ' ' + thousands;
_test = modOperator(_test, 1000);
break;
}
case 100 :
{
returntxt = returntxt + ' ' + hundreds;
_test = modOperator(_test, 100);
break;
}
}
}
return _test;
}

#Define.text_1('One')
#Define.text_2('Two')
#Define.text_3('Three')
#Define.text_4('Four')
#Define.text_5('Five')
#Define.text_6('Six')
#Define.text_7('Seven')
#Define.text_8('Eight')
#Define.text_9('Nine')
#Define.text_10('Ten')
#Define.text_11('Eleven')
#Define.text_12('Twelve')
#Define.text_13('Thirteen')
#Define.text_14('Fourteen')
#Define.text_15('Fifteen')
#Define.text_16('Sixteen')
#Define.text_17('Seventeen')
#Define.text_18('Eighteen')
#Define.text_19('Nineteen')
#Define.text_20('Twenty')
#Define.text_30('Thirty')
#Define.text_40('Forty')
#Define.text_50('Fifty')
#Define.text_60('Sixty')
#Define.text_70('Seventy')
#Define.text_80('Eighty')
#Define.text_90('Ninety')
#Define.text_100('Hundred')
#Define.text_1000('Thousand')
#Define.text_100000('Lakh')
#Define.text_10000000('Crore')
#Define.text_and('Rupees and')
#Define.text_paise('Paise Only')
#Define.text_ruppe('Rupees Only')

ones[1] = #text_1;
ones[2] = #text_2;
ones[3] = #text_3;
ones[4] = #text_4;
ones[5] = #text_5;
ones[6] = #text_6;
ones[7] = #text_7;
ones[8] = #text_8;
ones[9] = #text_9;
ones[10] = #text_10;
ones[11] = #text_11;
ones[12] = #text_12;
ones[13] = #text_13;
ones[14] = #text_14;
ones[15] = #text_15;
ones[16] = #text_16;
ones[17] = #text_17;
ones[18] = #text_18;
ones[19] = #text_19;

tenths[1] = 'Not used';
tenths[2] = #text_20;
tenths[3] = #text_30;
tenths[4] = #text_40;
tenths[5] = #text_50;
tenths[6] = #text_60;
tenths[7] = #text_70;
tenths[8] = #text_80;
tenths[9] = #text_90;

hundreds = #text_100;
thousands = #text_1000;
lakhs = #text_100000;
crores = #text_10000000;



test = checkPower(test, 10000000);
test = checkPower(test, 100000);
test = checkPower(test, 1000);
test = checkPower(test, 100);

if (test >= 20)
{
numOfTenths = test div 10;
returntxt = returntxt + ' ' + tenths[numofTenths];
numOfTenths = numOfTenths mod 10;
test = test mod 10;
}
if (test >= 1)
{
numOfTenths = real2int(test);
returntxt = returntxt + ' ' + ones[numOfTenths];
}

if (numOfPennies)
{
if (numOfPennies >= 20)
{
penny = numOfPennies div 10;
pennytxt = tenths[penny];
numOfPennies = numOfPennies mod 10;
}
if (numOfPennies >= 1)
{
pennytxt = pennytxt + ' ' + ones[numOfPennies];
}
returntxt = returntxt + ' ' + #text_and + ' ' + pennytxt + ' ' +#text_paise;
}
else
{
returntxt = returntxt + ' ' + #text_ruppe;
}

return strFmt("%1 %2",returntxt,"******");


}

Thursday, 21 March 2019

Generate Proj Hours Journal Lines

Generate Proj Hours Journal Lines

public class ALE_GenerareJournalLines extends RunBase
{
    TransDate fromDate,toDate;
    ProjId      projId;
    Name        peroid;
    JournalId           journalId;
    ProjCategoryId  projCategoryId;
    HcmPersonnelNumberId  worker;
 

    DialogField dlgPeriod;
    DialogField dlgProjId;
    DialogField dlgWorker;
    DialogField dlgProjCategoryId;

    #define.CurrentVersion(1)
    #localmacro.CurrentList
    peroid,
    projId,
    worker,
    projCategoryId
    #endmacro
}

.................................................................................

protected Object dialog()
{
    Dialog dialog;
    FormStringControl           control,controlPeriodName;

    dialog = super();
    dialog.caption('Generate Journal lines');
 
    dlgPeriod = dialog.addFieldValue(extendedTypeStr(Name),peroid);
    dlgProjId = dialog.addFieldValue(extendedTypeStr(ProjId),projId);
    dlgWorker = dialog.addFieldValue(extendedTypeStr(HcmPersonnelNumberId),worker);
    dlgProjCategoryId = dialog.addFieldValue(extendedTypeStr(ProjCategoryId),projCategoryId);
    control = dlgWorker.control();
    controlPeriodName = dlgPeriod.control();
    control.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(ALE_GenerareJournalLines,lookupCategoryId), this);
    controlPeriodName.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(ALE_GenerareJournalLines,lookupPeriodName), this);
    return dialog;
}

......................................................................................

public boolean getFromDialog()
{
    boolean ret;

    ret = super();
    peroid = dlgPeriod.value();
    projId = dlgProjId.value();
    worker = dlgWorker.value();
    projCategoryId = dlgProjCategoryId.value();
    return ret;
}

.................................................................................................

public container pack()
{
    return [#CurrentVersion,#CurrentList];
}

.......................................................................................................

public boolean unpack(container packedClass)
{
    Integer version = conPeek(packedClass,1);
    switch (version)
    {     
        case #CurrentVersion :
            [version,#CurrentList] = packedClass;
        break;
        default :
        return false;
    }

    return true;
}

.....................................................................................................

public static void main(Args args)
{
    JournalId           journalId;
    ProjJournalTable    projJournalTable;
    ALE_GenerareJournalLines generareJournalLines = new ALE_GenerareJournalLines();
    projJournalTable = args.record(); 
    journalId = projJournalTable.JournalId;
    generareJournalLines.getJournalId(journalId);
    if(generareJournalLines.prompt())
    {
        generareJournalLines.run();
    }
}

...................................................................................

public void lookupCategoryId(FormStringControl _control)
{
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource;
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tableNum(HcmWorker),
                                                                           _control);
   
    sysTableLookup.addLookupField(fieldNum(HcmWorker, PersonnelNumber));
    sysTableLookup.addLookupField(fieldNum(HcmWorker, Person));

    // Setup query
    queryBuildDataSource = query.addDataSource(tableNum(HcmWorker));
    sysTableLookup.parmQuery(query);

    // Perform lookup
    sysTableLookup.performFormLookup();
}

.........................................................................................

public void lookupPeriodName(FormStringControl _control)
{
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource;
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tableNum(Ale_PeriodMaster),_control);
   
    sysTableLookup.addLookupField(fieldNum(Ale_PeriodMaster, Name)); 
    queryBuildDataSource = query.addDataSource(tableNum(Ale_PeriodMaster));
    sysTableLookup.parmQuery(query);
 
    sysTableLookup.performFormLookup();
}

............................................................................................

public void getJournalId(JournalId journalIdB)

    journalId = journalIdB;
 
}

.......................................................................................................

public void run()
{
    int                     linescount;
    Hours                   totalHours;
    JournalId               journalIdLoc;
    ALE_STG_AttendanceData  attendanceData,attendanceDataLoc,attendanceDataLoc1;
    Ale_PeriodMaster        periodMaster;
    ProjJournalTrans        projJournalTrans;
    ProjJournalTable        projJournalTableLoc,projJournalTableLoc1;
    ProjJournalTableData    projJournalTableData;
    ProjJournalTransData    projJournalTransData;
    TransDate               periodFromDate,periodToDate;
    select StartDate,Enddate from periodMaster where periodMaster.Name == peroid;
    periodFromDate  = periodMaster.StartDate;
    periodToDate    = periodMaster.Enddate;
    journalIdLoc    = journalId;
    ttsBegin;
    projJournalTableLoc = ProjJournalTable::find(journalIdLoc);
    if(projId && peroid && projCategoryId == "" && worker == "" )
    {
        projJournalTableData = JournalTableData::newTable(projJournalTableLoc);
        projJournalTransData = projJournalTableData.journalStatic().newJournalTransData(projJournalTrans,projJournalTableData);


        while select attendanceData group by EmployeeID,ProjectId where attendanceData.ProjectId == projId
            && attendanceData.AttendanceDate >= periodFromDate
            && attendanceData.AttendanceDate <= periodToDate
        {
            select sum(Hours) from attendanceDataLoc where attendanceDataLoc.ProjectId == attendanceData.ProjectId
                && attendanceDataLoc.EmployeeID == attendanceData.EmployeeID
                && attendanceDataLoc.AttendanceDate >= periodFromDate
                && attendanceDataLoc.AttendanceDate <= periodToDate;//&& attendanceDataLoc.CategoryId == attendanceData.CategoryId
            select EmployeeID,CategoryId from attendanceDataLoc1 where attendanceDataLoc1.ProjectId == attendanceData.ProjectId
                && attendanceDataLoc1.EmployeeID == attendanceData.EmployeeID
                && attendanceDataLoc1.AttendanceDate >= periodFromDate
                && attendanceDataLoc1.AttendanceDate <= periodToDate;

            projJournalTrans.JournalId = journalIdLoc;
            projJournalTrans.initValue();
            projJournalTrans.ProjId = projId;
            projJournalTrans.initFromProjTable( ProjTable::find(projId));
            projJournalTrans.TransDate = systemDateGet();
            projJournalTrans.LinePropertyId = 'CHRG';
            projJournalTrans.ProjTransDate = projJournalTrans.TransDate;
            projJournalTrans.CategoryId = attendanceDataLoc1.CategoryId;
            projJournalTrans.TaxItemGroupId = ProjCategory::find(projCategoryId).TaxItemGroupId;
            projJournalTrans.Worker = HcmWorker::findByPersonnelNumber(attendanceDataLoc1.EmployeeID).RecId;//HcmWorker::findByPersonnelNumber(worker).RecId;

            projJournalTrans.Txt = 'Create hours journal';

            projJournalTrans.Qty = attendanceDataLoc.Hours;
             projJournalTrans.setHourCostPrice();
            projJournalTrans.setHourSalesPrice();
            linescount++;
            totalHours += attendanceDataLoc.Hours;
            projJournalTransData.create();
            //projJournalTrans.insert();
        }
    }
    select forUpdate projJournalTableLoc1 where projJournalTableLoc1.JournalId == journalIdLoc;
    projJournalTableLoc1.ProjQty = projJournalTableLoc.ProjQty ;
    projJournalTableLoc1.NumOfLines = projJournalTableLoc.NumOfLines ;
    projJournalTableLoc1.update();
    ttsCommit;
    info(strFmt('%1 Journal lines has been created',linescount));
}

Monday, 18 March 2019

lookup - use method in lookup and



Query       query = new Query();
    QueryBuildDataSource    qbds,qbds1;
    //QueryBuildRange         qbr;
    SysTableLookup          sysTableLookUp; VendTable VendTable ;
    sysTableLookUp = SysTableLookup::newParameters(tableNum(VendTable),_control);
    //qbds = query.addDataSource(tableNum(VendorView));     
    //qbr = qbds.addRange(fieldNum(VendorView, AccountNum));
    //qbr.value(SysQuery::valueNotEmptyString());
    //
    //sysTableLookUp.addLookupfield(fieldNum(VendorView,AccountNum));
    //sysTableLookup.addSelectionField(fieldNum(VendorView,AccountNum));
    //sysTableLookUp.addLookupfield(fieldNum(VendorView,Name));
    //
    //sysTableLookUp.parmQuery(query);
    //sysTableLookUp.performFormLookup();
   
    qbds = query.addDataSource(tableNum(VendTable));
   //qbds1  = qbds.addDataSource(tableNum(DirPartyTable));
   //Qbds1.addLink(fieldNum(VendTable, Party), fieldNum(DirPartyTable, RecId));
   //Qbds1.joinMode(JoinMode::InnerJoin);
   //Qbds1.relations(true);
 
     
   sysTableLookup.parmQuery(query);
   sysTableLookup.addLookupfield(fieldNum(VendTable, AccountNum),true); 
   sysTableLookup.addLookupfield(fieldNum(VendTable, party));
   sysTableLookup.performFormLookup(); 

Tuesday, 12 March 2019

Edit field except 1 or more fileds in DataSource - AX 2012

Edit field except 1 or more fileds in DataSource -

allowEditFieldsOnFormDS_W(BankChequeTable_DS, false);

    BankChequeTable_DS.object(fieldNum(BankChequeTable, chequeHandoverTo)).allowEdit(true);
    BankChequeTable_DS.object(fieldNum(BankChequeTable,ChequeHandoverDate)).allowEdit(true);

Monday, 11 February 2019

import sales forecast using CSV file ax 2012

import sales forecast using CSV file ax 2012


public void ImportDate()
{
    #File
     Dialog          dialog;
    Filename         filename;
    DialogField      dialogFilename;

    //To filter the files while selecting
    container    conFilter = ["Comma Seperated Value .txt ", "*.csv"];
    IO                  iO;
    FilenameOpen        filenameOpen;
    Container           record;
    ForecastSales       forecastSales;
    ForecastModel       forecastModel;
    CustTable           custTable;
    InventTable         inventTable;
    InventDim           inventDim,inventDimLoc;
    InventItemGroup     inventItemGroup;
    InventItemPrice     inventItemPrice;
    InventTableModule   inventTableModule;

    DefaultDimensionView   defaultDimensionView;
    boolean             first = true;
    RecId       dd;
    //name dcl
    ForecastModelHeadId  ModelId;
    str                  StartDate;
    str                 itemgroup,SalesUnit;
    real                 priceunit,costprice;
    CustAccount          custAccountId;
    SalesQty             SalesQty;
    ItemId               ItemId;
    CustGroupId          custGroup;
    InventSiteId        InventSiteId;
    RecId               recIdDefaultDimension;
    CustCurrencyCode     Currency;
    HcmPersonnelNumberId  hcmPersonnelNumberId;
    DF_Uploading projDimUpload = new DF_Uploading();
    CostPrice             cp;
    InventLocationId    inventLocationId;

    dialog = new dialog();
    dialog.caption("Select File For forecastSales Master Import");
    dialogFilename = dialog.addField(extendedTypeStr(FilenameOpen));
    //To filter the files while selecting
    dialog.filenameLookupFilter(conFilter);
    dialog.run();


     if(dialog.closedOk())
        {
         filename = dialogFileName.value();
          //info(strFmt("%1", filename));
        }

    iO = new CommaTextIo(filename,#IO_Read);
    if (! iO || iO.status() != IO_Status::Ok)
        {
        throw error("@SYS19358");
        }

    while (iO.status() == IO_Status::Ok)
    {
    record = iO.read();// To read file
        if (record)
        {
        if (first)  //To skip header
        {
        first = false;
        }
       else
        {
            ModelId         = conpeek(record, 1);
            StartDate       = conpeek(record, 2);
            custAccountId   = conpeek(record, 3);
            ItemId          = conpeek(record, 4);
            SalesQty        = conpeek(record, 5);
            priceunit       = conpeek(record, 6);
           // InventSiteId    = conpeek(record, 7);
            hcmPersonnelNumberId = conpeek(record, 8);
            cp       = conpeek(record, 9);
            inventLocationId =  conpeek(record, 10);

            select forecastModel where forecastModel.ModelId == ModelId;

            custGroup = CustTable::find(custAccountId).CustGroup;
           Currency  = CustTable::find(custAccountId).Currency;
           select InventTable where InventTable.ItemId == ItemId;
             //priceunit = any2real(InventTable.());
            SalesUnit = any2str(InventTable.salesUnitId());
            itemgroup = any2str(InventTable.itemGroupId());


            //--> added msk for cost prices

            //select inventItemPrice  order by ActivationDate desc  where inventItemPrice.ItemId ==  ItemId;
            //costprice = inventItemPrice.Price;
//
            InventSiteId = InventTable::find(ItemId).inventInventSiteId();

            select inventDim where inventDim.InventSiteId  == InventSiteId;
            inventDim.InventLocationId =inventLocationId;

            inventDimLoc = InventDim::findOrCreate(inventDim);
//
            //if(costprice == 0 )
            //{
           //select  inventTableModule where inventTableModule.ModuleType == ModuleInventPurchSales::Invent && inventTableModule.ItemId == ItemId;
            //costprice= inventTableModule.Price;
            //}
             //--> added msk for cost prices  end

            forecastSales.Active         =NoYes::Yes;
            forecastSales.ModelId        = ModelId;
            forecastSales.StartDate      = str2Date(StartDate,123);
            forecastSales.CustAccountId  = custAccountId;
            forecastSales.CustGroupId    = custGroup;
            forecastSales.ItemId         = ItemId;
            forecastSales.ItemGroupId    = itemgroup;

            //forecastSales.DefaultDimension  =dd ;//defaultDimensionView.DefaultDimension;
            forecastSales.Currency       = Currency;
            forecastSales.PriceUnit      = 1;
            forecastSales.Comment        = InventTable.ProductName;
            forecastSales.InventDimId    = inventDimLoc.inventDimId;
            forecastSales.CostPrice     =    cp;//costprice;
            forecastSales.SalesUnitId    = SalesUnit;
            forecastSales.SalesQty       = SalesQty;
            forecastSales.InventQty      = SalesQty;

            forecastSales.SalesPrice    = priceunit;

            forecastSales.Amount       =  priceunit * SalesQty;

            forecastSales.insert();

         projDimUpload.importProjDim(hcmPersonnelNumberId,forecastSales.CustAccountId);

        }

        }
    }

 info("Record insert successfully");
}

Monday, 28 January 2019

select marked records on the form and get terms of payment days

select marked records on the form and get terms of payment days

for(custInvoiceJourLoc = CustInvoiceJour_ds.getFirst(true) ? CustInvoiceJour_ds.getFirst(true) : CustInvoiceJour_ds.cursor(); custInvoiceJourLoc; custInvoiceJourLoc = CustInvoiceJour_ds.getNext())
    {
        select custTransOpen
            join custTrans where custTransOpen.AccountNum == custTrans.AccountNum
            && custTransOpen.RefRecId == custTrans.RecId
            && custTrans.Invoice == custInvoiceJourLoc.InvoiceId
            && custTrans.AccountNum == custInvoiceJourLoc.InvoiceAccount
            && custTrans.TransDate == custInvoiceJourLoc.InvoiceDate
            && custTrans.Voucher == custInvoiceJourLoc.LedgerVoucher;

        salesTable = SalesTable::find(custInvoiceJourLoc.SalesId);
       custDueDate = PaymTerm::find(salesTable.Payment).due(today());

        info(strFmt("%1 , %2 , %3 %4", custInvoiceJourLoc.OrderAccount,custInvoiceJourLoc.LedgerVoucher,custTransOpen.DueDate,custDueDate));
    }