Thursday, 28 March 2019

onValidated field (table level) in D365

class BWP_FieldValidations
{
    [DataEventHandler(tableStr(PurchLine), DataEventType::ValidatedField)]
    public static void PurchLine_onValidatedField(Common sender, DataEventArgs e)
    {
        PurchLine                           purchLineLocal;
        InventTable                         inventTable, inventTableLocal;
        ItemGroupId                         itemGroupId, lineItemGroupId;
        BWBudgetDetail                      budgetDetail;
        InventItemGroupItem                 itemGroupItem;
        LineAmount                          lineAmount;
        PurchId                             purchId;
        ValidateFieldEventArgs              event           = e as ValidateFieldEventArgs;
        PurchLine                           purchLine       = sender as PurchLine;
        boolean                             result          = event.parmValidateResult();
        LineAmount                          lineSum;


        lineAmount      =   purchLine.PurchQty*purchLine.PurchPrice;
        inventTable     =   InventTable::find(purchLine.ItemId);
        itemGroupId     =   inventTable.itemGroupId();
        purchId         =   purchLine.PurchId;

        while select purchLineLocal where purchLineLocal.PurchId ==  purchId
        {
            inventTableLocal    =   InventTable::find(purchLineLocal.ItemId);
            lineItemGroupId     =   inventTableLocal.itemGroupId();
            if(lineItemGroupId  ==  itemGroupId)
            {
                lineSum  +=   purchLineLocal.LineAmount;
            }
        }
        select budgetDetail where budgetDetail.ItemGroupId == itemGroupId
            && budgetDetail.FromDate <= today()
            && budgetDetail.ToDate   >= today();
            //&& budgetDetail.DimensionDefault == purchLine.DefaultDimension
        {
            if(budgetDetail)
            {
                if (lineAmount  > (budgetDetail.amount - lineSum))
                {
                    result  =   false;
                    warning(strFmt("Actual budget : %1, Remain budget : %2, line amount : %3 (Please raise a budget adjustment request for item group - %4)", budgetDetail.Amount, (budgetDetail.amount - lineSum), lineAmount, itemGroupId));
                }
                else
                {
                    result  =   true;
                }
            }
        }
        event.parmValidateResult(result);
    }

}

No comments:

Post a Comment