web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :

Create Item Requirement from Item Forecast using X++ in D365 Operations

Community Member Profile Picture Community Member

Introduction:

In this blog article, we will see how we can create Item Requirement on insertion of Item Forecast using code.

Steps:

  1. Create Extension Class for ForecastSales Table that is Item Forecast and using CoC for post insert() method we will initialize Item Requirement. We will call a new class which is created in Step 2.
public void insert()
{
    next insert();

    SalesType salesType = SalesType::ItemReq;
    CFSCreateItemReqFrmItemForecast createItemReq = new CFSCreateItemReqFrmItemForecast();
    createItemReq.initParameters(this);
    createItemReq.copyToSalesLine(SalesType);
}
  • Create a new class that will initialize values and insert record in Item Requirement form.
class CFSCreateItemReqFrmItemForecast
{
    ForecastSales forecastSales;
}
  •  In the new class create a method initParameter. This method will initialize ForecastSales object.
void initParameters(ForecastSales _forecastSales)
{
    forecastSales = _forecastSales;
}
  •  Create another method ‘copytoSalesLine’. It will validate the record and call other methods to copy values to SalesLine Table.
public void copyToSalesLine(SalesType _salesType)
{
    ProjTable projTable =   ProjTable::find(forecastSales.ProjId);
    if (_salesType == SalesType::ItemReq)
    {
        if (!ProjStatusType::construct(projTable).validateWriteItemRequirement())
        {
            throw error("@SYS18447");
        }
    }
    else
    {
        if (!ProjStatusType::construct(projTable).validateWriteSalesLine())
        {
            throw error("@SYS18447");
        }
    }

    SalesLine salesLine = this.initializeSalesLine(_salesType, forecastSales, projTable);

    salesLine.createLine(false, // Validation
                         false, // Init from SalesTable
                         true, // Init from InventTable
                         true, // Calc invent Qty
                         false, // Search markup - copied from salesQuotationline
                         false, // Search price - copied from salesQuotationline
                         false, // Check reservation
                         true); // Skip creditlimit check

    this.updateSalesLine(salesLine, forecastSales);

    salesLine.update(); 
}
  • Create a new method ‘initializeSalesLine’. It is called from copyToSalesLine().
protected SalesLine initializeSalesLine(SalesType _salesType, ForecastSales _forecastSales, ProjTable _projTable)
{
    SalesLine salesLine;

    salesLine.SalesType = _salesType;
    salesLine.initValue();                salesLine.setInventDimId(_forecastSales.InventDimId);

    salesLine.ItemId = _forecastSales.ItemId;
    salesLine.SalesQty = _forecastSales.SalesQty;
    salesLine.SalesUnit = _forecastSales.SalesUnitId;

    salesLine.ProjId = _forecastSales.ProjId;
    salesLine.ActivityNumber = _forecastSales.ActivityNumber;
    salesLine.CurrencyCode = _forecastSales.Currency;

    salesLine.initFromProjTable(_projTable, false);

    return salesLine;
}
  • Create a new method updateSalesLine(). It is called from copyToSalesLine() method.
protected void updateSalesLine(SalesLine _salesLine, ForecastSales _forecastSales)
{
    _salesLine.DefaultDimension =       _salesLine.copyDimension(_forecastSales.DefaultDimension);

    _salesLine.ProjLinePropertyId = _forecastSales.ProjLinePropertyId;
    _salesLine.TaxGroup = _forecastSales.TaxGroupId;
    _salesLine.TaxItemGroup = _forecastSales.TaxItemGroupId;
    _salesLine.ProjCategoryId = _forecastSales.ProjCategoryId;
    _salesLine.CostPrice = _forecastSales.CostPrice;
    _salesLine.SalesPrice = _forecastSales.SalesPrice;
    _salesLine.LinePercent = _forecastSales.DiscPercent;
    _salesLine.LineDisc = _forecastSales.DiscAmount;
    _salesLine.LineAmount = 0;
    _salesLine.LineAmount = _salesLine.calcLineAmount();

    SalesLineType_ItemReq::setSalesLineReceiptDate(_salesLine);
}

The post Create Item Requirement from Item Forecast using X++ in D365 Operations appeared first on .


This was originally posted here.

Comments

*This post is locked for comments