Showing posts with label SalesLine. Show all posts
Showing posts with label SalesLine. Show all posts

Tuesday, May 25, 2021

Set Financial Dimensions by X++ code in AX 2012/Setting one Dimension value in the combination

    /// <summary>
    /// replace specific financial dimension value in DefaultDimension based on the LedgerParameters setup
    /// </summary>
    /// <param name = "_defaultDimensionFrom">DefaultDimension recId the value should be taken from</param>
    /// <param name = "_defaultDimensionTo">DefaultDimension recId the value should be assigned to</param>
    /// <returns>returns new DefaultDimension recId if conditions are met</returns>
    public static DimensionDefault replaceDefaultDim(DimensionDefault _defaultDimensionFrom, DimensionDefault _defaultDimensionTo)
    {
        if(!_defaultDimensionFrom)
        {
            return _defaultDimensionTo;
        }

        LedgerParameters ledgerParameters = LedgerParameters::find();

        if (ledgerParameters.DepartmentSetFinancialDimension &&
            ledgerParameters.DepartmentDimensionAttribute)
        {
            DimensionAttribute                  dimAttr;
            DimensionAttributeValue             dimAttrValue;
            DimensionAttributeValueSetStorage   davss;

            davss = DimensionAttributeValueSetStorage::find(_defaultDimensionTo);

            dimAttr = DimensionAttribute::find(ledgerParameters.DepartmentDimensionAttribute);

            DimensionAttributeValueSetStorage dimStorage = DimensionAttributeValueSetStorage::find(_defaultDimensionFrom);
            DimensionValue dimValue = dimStorage.getDisplayValueByDimensionAttribute(dimAttr.RecId);

            dimAttrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttr, dimValue);

            if(dimAttrValue && !davss.containsDimensionAttributeValue(dimAttrValue.RecId))
            {
                davss.addItem(dimAttrValue);

                return davss.save();
            }
        }

        return _defaultDimensionTo;
    }

Sunday, April 11, 2021

Create charges on sales order line in AX

    salesLine = source;
	salesCurrency = salesLine.CurrencyCode;
	moduleCategory = HeadingLine::Line;
	itemCode = TableGroupAll::Table;
				
	while select markupAutoLine
	  index hint TableIdx
	  where markupAutoLine.TableTableId    == markupAutoTable.TableId   &&
			markupAutoLine.TableRecId      == markupAutoTable.RecId     &&
			markupAutoLine.CurrencyCode    == salesCurrency

	{
		markupTrans.clear();
		markupTrans.initFromMarkupTable(markupAutoLine.markupTable());
		markupTrans.initFromMarkupAutoLine(markupAutoLine);

		switch (source.TableId)
		{
			case tableNum(SalesTable)       :
				markupTrans.initFromSalesTable(source);
				break;
			case tableNum(SalesLine)        :
				markupTrans.initFromSalesLine(source);
				if (salesLine.ReturnDispositionCodeId)
				{
					markupTrans.IsAutoCharge = true;
				}
				break;
		}
		// Preserve original set up currency
		if (markupTrans.markupTable().CustType != MarkupType::CustVend &&
			markupTrans.markupTable().VendType != MarkupType::CustVend)
		{
			markupTrans.CurrencyCode    = markupAutoLine.MarkupCurrencyCode;
		}

		markupTrans.TransTableId    = source.TableId;
		markupTrans.TransRecId      = source.RecId;
		markupTrans.LineNum         = MarkupTrans::lastLineNum(source.TableId, source.RecId) + 1;

		if (languageId)
			markupTrans.Txt = LanguageTxt::languageId(tableNum(MarkupAutoTable), markupAutoLine.RecId, languageId);

		if (! markupTrans.Txt)
			markupTrans.Txt = MarkupTable::find(markupAutoLine.ModuleType, markupAutoLine.MarkupCode).Txt;

		markupTrans.insert();
	}

Table browser URL in D365FO

Critical Thinking icon icon by Icons8