Showing posts with label Ax7 form DataSource level OnValidating Event Handler and FormDataFieldEventArgs Conditions. Show all posts
Showing posts with label Ax7 form DataSource level OnValidating Event Handler and FormDataFieldEventArgs Conditions. Show all posts

Monday, 9 April 2018

Ax7 form DataSource level OnValidating Event Handler and FormDataFieldEventArgs Conditions

class NEC_RetailPeriodicDiscountFormEventHandler
{

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataFieldEventHandler(formDataFieldStr(RetailPeriodicDiscount, RetailPeriodicDiscountLine, DiscountPercentOrValue), FormDataFieldEventType::Validating)]
    public static void DiscountPercentOrValue_OnValidating(FormDataObject sender, FormDataFieldEventArgs e)
    {
        InventTable                                     inventTable;
        InventTableModule                               inventTableModule;
        EcoResProduct                                   ecoResProduct;
        FormRun                                         formRun = sender.datasource().formRun();
       
        FormDataSource                                  RetailDiscountLineMixAndMatch_ds = FormRun.dataSource(formDataSourceStr(RetailPeriodicDiscount, RetailPeriodicDiscountLine_RetailDiscountLineMixAndMatch));
        RetailDiscountLineMixAndMatch                   RetailDiscountLineMixAndMatch = RetailDiscountLineMixAndMatch_ds.cursor();
        FormDataFieldCancelEventArgs                    args = e as FormDataFieldCancelEventArgs;
        FormDataSource                                  formDataSource = sender.datasource();
        RetailPeriodicDiscountLine                      retailPeriodicDiscountLine = formDataSource.cursor();
        FormReferenceGroupControl                       RetailGroupMemberLine_Product = formRun.design(0).controlName('RetailGroupMemberLine_Product');
       
        if(RetailDiscountLineMixAndMatch.discountType  == retaildealpricediscountpctbase::dealprice)
        {

            select  inventTableModule
                exists join inventTable
                    where inventTableModule.ItemId == inventTable.ItemId
                    && inventTableModule.ModuleType == ModuleInventPurchSales::Sales
                    exists join EcoResProduct
                        where inventTable.Product == RetailGroupMemberLine_Product.value();
            if (inventTableModule.ItemId  && inventTableModule.Price < retailPeriodicDiscountLine.DiscountPercentOrValue)
            {
                boolean doCancel =!checkFailed("Deal price cannot exceeds the base sale price");
                args.cancel(doCancel);
            }
        }
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataFieldEventHandler(formDataFieldStr(RetailPeriodicDiscount, RetailPeriodicDiscountLine_RetailDiscountLineOffer, discAmount), FormDataFieldEventType::Validating)]
    public static void discAmount_OnValidating(FormDataObject sender, FormDataFieldEventArgs e)
    {
        InventTable                             inventTable;
        InventTableModule                       inventTableModule;
        EcoResProduct                           ecoResProduct;
        FormDataFieldCancelEventArgs            args = e as FormDataFieldCancelEventArgs;

        FormRun                                 formRun = sender.datasource().formRun();
        FormDataSource                          RetailDiscountlineoffer_ds = sender.datasource();
        RetailDiscountLineOffer                 retailDiscountLineOffer = RetailDiscountlineoffer_ds.cursor();
        FormReferenceGroupControl               RetailGroupMemberLine_Product = formRun.design(0).controlName('RetailGroupMemberLine_Product');

        if(retailDiscountLineOffer.discountMethod == RetailDiscountOfferLineDiscMethodBase::AmountOff)
        {
            select  inventTableModule
                exists join inventTable
                    where inventTableModule.ItemId == inventTable.ItemId
                    && inventTableModule.ModuleType == ModuleInventPurchSales::Sales
                    exists join EcoResProduct
                        where inventTable.Product == RetailGroupMemberLine_Product.value();
            if (inventTableModule.ItemId  && inventTableModule.Price < retailDiscountLineOffer.discAmount)
            {
                boolean doCancel =!checkFailed("Cash discount Amount cannot exceeds the base sale price");
                args.cancel(doCancel);
            }
        }
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataFieldEventHandler(formDataFieldStr(RetailPeriodicDiscount, RetailPeriodicDiscountLine_RetailDiscountLineOffer, offerPrice), FormDataFieldEventType::Validating)]
    public static void offerPrice_OnValidating(FormDataObject sender, FormDataFieldEventArgs e)
    {
        InventTable                             inventTable;
        InventTableModule                       inventTableModule;
        EcoResProduct                           ecoResProduct;
        FormDataFieldCancelEventArgs            args = e as FormDataFieldCancelEventArgs;

        FormRun                                 formRun = sender.datasource().formRun();
        FormDataSource                          RetailDiscountlineoffer_ds = sender.datasource();
        RetailDiscountLineOffer                 retailDiscountLineOffer = RetailDiscountlineoffer_ds.cursor();
        FormReferenceGroupControl               RetailGroupMemberLine_Product = formRun.design(0).controlName('RetailGroupMemberLine_Product');

        if( retailDiscountLineOffer.discountMethod == RetailDiscountOfferLineDiscMethodBase::Price)
        {
            select  inventTableModule
                exists join inventTable
                    where inventTableModule.ItemId == inventTable.ItemId
                    && inventTableModule.ModuleType == ModuleInventPurchSales::Sales
                    exists join EcoResProduct
                        where inventTable.Product == RetailGroupMemberLine_Product.value();
            if (inventTableModule.ItemId && inventTableModule.Price < retailDiscountLineOffer.offerPrice )
            {
                boolean doCancel =!checkFailed("Discount Price cannot exceeds the base sale price");
                args.cancel(doCancel);
            }
        }
    }

}