Price disc agreement
PriceGroupType
PriceType
Class
GOPPriceDiscAdmTransTable_Extension
GOPPriceDiscTableDSForm_Extension
GOPPriceTypeConverter_Extension
GOPPriceGroupTypeTradeAgreementMappingSalesQtyPromo
GOPPriceTypeTradeAgreementMappingSalesQtyPromoDisc
GopPriceDiscTableCopyFromPriceDiscAdmTrans_Extension
Table
CustTable - PriceDiscGroup_LineDisc
InventTableModule - InventLineDiscountGroup
PriceDiscAdmTrans - CustLineGroup
PriceDiscTable - CustLineGroup
SalesLine -
Relation
dataEntity
SalesOpenSalesLineDiscountJournalLineEntity
/// <summary>
/// Extension class for table : PriceDiscAdmTrans
/// </summary>
[ExtensionOf(tableStr(PriceDiscAdmTrans))]
internal final class GOPPriceDiscAdmTransTable_Extension
{
/// <summary>
/// Validate weite extension before writng to DB
/// </summary>
/// <returns>Return true if pass</returns>
public boolean validateWrite()
{
boolean ret;
ret = next validateWrite();
if (this.relation == PriceType::GOPPromotionalItemSales)
{
if (this.GOPQuantity <= 0)
{
warning(strFmt("@GOP:ValidateNegativeParenetItemQuantity", this.GOPQuantity));
ret = 0 * ret;
}
if (this.GOPPromotionalItemCode == '')
{
warning("@GOP:ValidateBlankPromotionalItemCode");
ret = 0 * ret;
}
if (this.GOPPromotionalItemQuantity <= 0)
{
warning(strFmt("@GOP:ValidateNegativePromotionalItemQuantity", this.GOPPromotionalItemQuantity));
ret = 0 * ret;
}
}
return ret;
}
}
*./// <summary>
/// Form EventHandler for trade agreement Journal lines(PriceDiscTable - Datasource)
/// </summary>
[ExtensionOf(formDataSourceStr(PriceDiscTable, PriceDiscTable))]
final class GOPPriceDiscTableDSForm_Extension
{
/// <summary>
/// COC to enable & hide the controls based on the Trade agrement PriceType(Promotional item (Sales))
/// </summary>
/// <returns>boolean true or fasle</returns>
public int active()
{
PriceDiscAdmTable priceDiscAdmTableLoc;
priceDiscAdmTrans priceDiscAdmTransLoc;
PriceDiscTable PriceDiscTableLoc;
//FormDataSource priceDiscAdmTrans_ds = this;
//PriceDiscTable PriceDiscTableBuff = this.cursor();
FormRun formrun = this.formRun();
FalseTrue fasleTrue = FalseTrue::False;
select firstonly JournalNum, DefaultRelation from priceDiscAdmTableLoc
join recid, JournalNum from priceDiscAdmTransLoc
where priceDiscAdmTableLoc.JournalNum == priceDiscAdmTransLoc.JournalNum
join OriginalPriceDiscAdmTransRecId from PriceDiscTableLoc
where PriceDiscTableLoc.OriginalPriceDiscAdmTransRecId == priceDiscAdmTransLoc.recid
&& priceDiscAdmTableLoc.DefaultRelation == PriceType::GOPPromotionalItemSales;
if (priceDiscAdmTableLoc.JournalNum && PriceDiscTableLoc.OriginalPriceDiscAdmTransRecId)
{
fasleTrue = FalseTrue::True;
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, GOPQuantity))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, GOPPromotionalItemCode))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, GOPPromotionalItemQuantity))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, PriceDiscTable_QuantityAmountFrom))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, PriceDiscTable_QuantityAmountTo))).visible(!fasleTrue);
//formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, PriceDiscTable_GOPTransferCost))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, PriceDiscTable_Amount))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscTable, PriceDiscTable_Currency))).visible(!fasleTrue);
}
return next active();
}
}
/// <summary>
/// The <c>GOPPriceGroupTypeTradeAgreementMappingSalesQtyPromo</c> class is handling the mapping of fields, module and other types for <c>PriceGroupType</c> line discount.
/// </summary>
[PriceGroupTypeFactory(PriceGroupType::GOPPromotionalItemSalesLineDisc)]
class GOPPriceGroupTypeTradeAgreementMappingSalesQtyPromo extends PriceGroupTypeTradeAgreementMapping
{
public PriceType priceDiscType(ModuleInventCustVend _module)
{
PriceType PriceType;
switch (_module)
{
case ModuleInventCustVend::Cust:
PriceType = PriceType::GOPPromotionalItemSales;
}
return PriceType;
}
}
/// <summary>
/// The <c>PriceTypeConverter</c> class provides method for conversion price type to price group type.
/// </summary>
[ExtensionOf(classStr(PriceTypeConverter))]
final class MMMPriceTypeConverter_Extension
{
/// <summary>
/// Converts a price type value to its corresponding price group type value.
/// </summary>
/// <param name = "_priceType">A price type.</param>
/// <returns>Price group type which corresponds to price type.</returns>
public static PriceGroupType priceTypeToPriceGroupType(PriceType _priceType)
{
PriceGroupType priceGroupType;
priceGroupType = next priceTypeToPriceGroupType(_priceType);
switch (_priceType)
{
case PriceType::MMMPromotionalItemSales:
priceGroupType = PriceGroupType::MMMPromotionalItemSalesLineDisc;
}
return priceGroupType;
}
/// <summary>
/// Repalced to avoid the error
/// Performs the default conversion from a price type value to its corresponding price group type value.
/// </summary>
/// <param name = "_priceType">A price type.</param>
/// <returns>Price group type which corresponds to price type.</returns>
protected static PriceGroupType defaultPriceTypeToPriceGroupTypeConversion(PriceType _priceType)
{
PriceGroupType PriceGroupType;
if (_priceType != PriceType::MMMPromotionalItemSales)
{
next defaultPriceTypeToPriceGroupTypeConversion(_priceType);
}
return PriceGroupType;
}
}
/// <summary>
/// The <c>GOPPriceTypeTradeAgreementMappingSalesQtyPromoDisc</c> class is responsible for handling mapping of the price type <c>GOPPromotionalItemSalesLineDisc</c>.
/// </summary>
[PriceTypeFactory(PriceType::GOPPromotionalItemSales)]
final class GOPPriceTypeTradeAgreementMappingSalesQtyPromoDisc extends PriceTypeTradeAgreementMappingSales
{
/// <summary>
/// Retrun table group
/// </summary>
/// <returns>TableGroupAll</returns>
public TableGroupAll tableGroupAll()
{
return TableGroupAll::Table;
}
/// <summary>
/// Retrun table group
/// </summary>
/// <returns>TableGroupAll</returns>
public PriceDiscProductCodeType priceDiscProductCodeType()
{
return PriceDiscProductCodeType::Table;
}
/// <summary>
/// CustTable Promotional Item Sales Line Disc
/// </summary>
/// <returns>Promotional Item Sales Line </returns>
public FieldId custVendTableField()
{
return fieldNum(CustTable, GOPPromotionalItemSalesLineDisc);
}
/// <summary>
/// InventTableModule Promotional Item Sales Line Disc
/// </summary>
/// <returns>Promotional Item Sales Line </returns>
public FieldId inventTableModuleField()
{
return fieldNum(InventTableModule, GOPPromotionalItemSalesLineDisc);
}
/// <summary>
/// Promotional Item Sales Line Disc
/// </summary>
/// <returns>Promotional Item Sales Line Disc</returns>
public PriceGroupType priceGroupType()
{
return PriceGroupType::GOPPromotionalItemSalesLineDisc;
}
/// <summary>
/// MCR LineDisc
/// </summary>
/// <returns>MCR LineDisc</returns>
public MCRPriceHistoryType mcrPriceHistoryType()
{
return MCRPriceHistoryType::LineDisc;
}
/// <summary>
/// Retrun table Disc group Applicable
/// </summary>
/// <returns>boolean</returns>
public boolean isDiscGroupApplicable()
{
return true;
}
/// <summary>
/// check for active table group
/// </summary>
/// <param name = "_accountCode">TableGroupAll Account relation</param>
/// <param name = "_itemCode">TableGroupAll Item relation</param>
/// <param name = "_priceParameters">Price Parameters</param>
/// <returns>Yes If active</returns>
public NoYes isActivated(
TableGroupAll _accountCode,
TableGroupAll _itemCode,
PriceParameters _priceParameters = PriceParameters::find())
{
return this.isPartyCodeProductCodeActivated(
PriceDiscPartyCodeTypeTableGroupAllMapping::tableGroupAllToPriceDiscPartyCodeType(_accountCode),
PriceDiscProductCodeTypeTableGroupAllMapping::tableGroupAllToPriceDiscProductCodeType(_itemCode),
_priceParameters);
}
/// <summary>
/// check for active account relation table group
/// </summary>
/// <param name = "_partyCode">TableGroupAll Account relation</param>
/// <param name = "_productCode">TableGroupAll Item relation</param>
/// <param name = "_priceParameters">Price Parameters</param>
/// <returns>Yes If active</returns>
public NoYes isPartyCodeProductCodeActivated(
PriceDiscPartyCodeType _partyCode,
PriceDiscProductCodeType _productCode,
PriceParameters _priceParameters = PriceParameters::find())
{
switch (_partyCode)
{
case PriceDiscPartyCodeType::Table:
switch (_productCode)
{
case PriceDiscProductCodeType::Table:
return _priceParameters.SalesLineAccountItem;
case PriceDiscProductCodeType::GroupId:
return _priceParameters.SalesLineAccountGroup;
case PriceDiscProductCodeType::All:
return _priceParameters.SalesLineAccountAll;
}
break;
case PriceDiscPartyCodeType::GroupId:
switch (_productCode)
{
case PriceDiscProductCodeType::Table:
return _priceParameters.SalesLineGroupItem;
case PriceDiscProductCodeType::GroupId:
return _priceParameters.SalesLineGroupGroup;
case PriceDiscProductCodeType::All:
return _priceParameters.SalesLineGroupAll;
}
break;
case PriceDiscPartyCodeType::All:
switch (_productCode)
{
case PriceDiscProductCodeType::Table:
return _priceParameters.SalesLineAllItem;
case PriceDiscProductCodeType::GroupId:
return _priceParameters.SalesLineAllGroup;
case PriceDiscProductCodeType::All:
return _priceParameters.SalesLineAllAll;
}
break;
}
return NoYes::No;
}
/// <summary>
/// is Relation Activation Possible
/// </summary>
/// <param name = "_accountCode">accountCode</param>
/// <param name = "_itemCode">itemCode</param>
/// <returns>Yes or No</returns>
public NoYes isActivationPossible(TableGroupAll _accountCode, TableGroupAll _itemCode)
{
return this.isActivationPossibleForPartyCodeProductCode(
PriceDiscPartyCodeTypeTableGroupAllMapping::tableGroupAllToPriceDiscPartyCodeType(_accountCode),
PriceDiscProductCodeTypeTableGroupAllMapping::tableGroupAllToPriceDiscProductCodeType(_itemCode));
}
/// <summary>
/// Activation possible for Item and Account code
/// </summary>
/// <param name = "_partyCode">Account code</param>
/// <param name = "_productCode">Item Code</param>
/// <returns>No Yes based on activation </returns>
public NoYes isActivationPossibleForPartyCodeProductCode(PriceDiscPartyCodeType _partyCode, PriceDiscProductCodeType _productCode)
{
return NoYes::Yes;
}
}
form
<?xml version="1.0" encoding="utf-8"?>
<AxForm xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V6">
<Name>GOPPromotionItemPartyCodeTypeCombination</Name>
<SourceCode>
<Methods xmlns="">
<Method>
<Name>classDeclaration</Name>
<Source><![CDATA[
[Form]
public class GOPPromotionItemPartyCodeTypeCombination extends FormRun
{
}
]]></Source>
</Method>
</Methods>
<DataSources xmlns="" />
<DataControls xmlns="" />
<Members xmlns="" />
</SourceCode>
<DataSources>
<AxFormDataSource xmlns="">
<Name>GOPPromotionItemPartyCodeTypeCombination</Name>
<Table>GOPPromotionItemPartyCodeTypeCombination</Table>
<Fields>
<AxFormDataSourceField>
<DataField>DataAreaId</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>LineNum</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>Partition</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>PriceDiscPartyCodeType</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>PriceDiscProductCodeType</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>RecId</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>SysRowVersionNumber</DataField>
</AxFormDataSourceField>
<AxFormDataSourceField>
<DataField>TableId</DataField>
</AxFormDataSourceField>
</Fields>
<ReferencedDataSources />
<InsertIfEmpty>No</InsertIfEmpty>
<DataSourceLinks />
<DerivedDataSources />
</AxFormDataSource>
</DataSources>
<Design>
<Caption xmlns="">@GOP:GOPPromotionItemPartyCodeTypeCombinationSetup</Caption>
<HideIfEmpty xmlns="">No</HideIfEmpty>
<Pattern xmlns="">SimpleList</Pattern>
<PatternVersion xmlns="">1.1</PatternVersion>
<StatusBarStyle xmlns="">Simple</StatusBarStyle>
<Style xmlns="">SimpleList</Style>
<TitleDataSource xmlns="">GOPPromotionItemPartyCodeTypeCombination</TitleDataSource>
<Controls xmlns="">
<AxFormControl xmlns=""
i:type="AxFormActionPaneControl">
<Name>ActionPane</Name>
<ElementPosition>715827882</ElementPosition>
<FilterExpression>%1</FilterExpression>
<Type>ActionPane</Type>
<VerticalSpacing>-1</VerticalSpacing>
<FormControlExtension
i:nil="true" />
<Controls />
<AlignChild>No</AlignChild>
<AlignChildren>No</AlignChildren>
<ArrangeMethod>Vertical</ArrangeMethod>
</AxFormControl>
<AxFormControl xmlns=""
i:type="AxFormGroupControl">
<Name>FilterGroup</Name>
<Pattern>CustomAndQuickFilters</Pattern>
<PatternVersion>1.1</PatternVersion>
<Type>Group</Type>
<WidthMode>SizeToAvailable</WidthMode>
<FormControlExtension
i:nil="true" />
<Controls>
<AxFormControl>
<Name>QuickFilterControl</Name>
<FormControlExtension>
<Name>QuickFilterControl</Name>
<ExtensionComponents />
<ExtensionProperties>
<AxFormControlExtensionProperty>
<Name>targetControlName</Name>
<Type>String</Type>
<Value>Grid</Value>
</AxFormControlExtensionProperty>
<AxFormControlExtensionProperty>
<Name>defaultColumnName</Name>
<Type>String</Type>
</AxFormControlExtensionProperty>
<AxFormControlExtensionProperty>
<Name>placeholderText</Name>
<Type>String</Type>
</AxFormControlExtensionProperty>
</ExtensionProperties>
</FormControlExtension>
</AxFormControl>
</Controls>
<ArrangeMethod>HorizontalLeft</ArrangeMethod>
<FrameType>None</FrameType>
<Style>CustomFilter</Style>
<ViewEditMode>Edit</ViewEditMode>
</AxFormControl>
<AxFormControl xmlns=""
i:type="AxFormGridControl">
<Name>Grid</Name>
<ElementPosition>1431655764</ElementPosition>
<FilterExpression>%1</FilterExpression>
<Type>Grid</Type>
<VerticalSpacing>-1</VerticalSpacing>
<FormControlExtension
i:nil="true" />
<Controls>
<AxFormControl xmlns=""
i:type="AxFormComboBoxControl">
<Name>GOPPromotionItemPartyCodeTypeCombination_PriceDiscPartyCodeType</Name>
<Type>ComboBox</Type>
<FormControlExtension
i:nil="true" />
<DataField>PriceDiscPartyCodeType</DataField>
<DataSource>GOPPromotionItemPartyCodeTypeCombination</DataSource>
<Items />
</AxFormControl>
<AxFormControl xmlns=""
i:type="AxFormComboBoxControl">
<Name>GOPPromotionItemPartyCodeTypeCombination_PriceDiscProductCodeType</Name>
<Type>ComboBox</Type>
<FormControlExtension
i:nil="true" />
<DataField>PriceDiscProductCodeType</DataField>
<DataSource>GOPPromotionItemPartyCodeTypeCombination</DataSource>
<Items />
</AxFormControl>
<AxFormControl xmlns=""
i:type="AxFormIntegerControl">
<Name>GOPPromotionItemPartyCodeTypeCombination_LineNum</Name>
<Type>Integer</Type>
<FormControlExtension
i:nil="true" />
<DataField>LineNum</DataField>
<DataSource>GOPPromotionItemPartyCodeTypeCombination</DataSource>
</AxFormControl>
</Controls>
<AlternateRowShading>No</AlternateRowShading>
<DataSource>GOPPromotionItemPartyCodeTypeCombination</DataSource>
<MultiSelect>No</MultiSelect>
<ShowRowLabels>No</ShowRowLabels>
<Style>Tabular</Style>
</AxFormControl>
</Controls>
</Design>
<Parts />
</AxForm>
<?xml version="1.0" encoding="utf-8"?>
<AxTable xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>GOPPromotionItemPartyCodeTypeCombination</Name>
<SourceCode>
<Declaration><![CDATA[
public class GOPPromotionItemPartyCodeTypeCombination extends common
{
}
]]></Declaration>
<Methods>
<Method>
<Name>find</Name>
<Source><![CDATA[
/// <summary>
/// Find method to
/// </summary>
/// <param name = "_PriceDiscProductCodeType"></param>
/// <param name = "_PriceDiscPartyCodeType"></param>
/// <returns>return GOPPromotionItemPartyCodeTypeCombinationtable buffer</returns>
static GOPPromotionItemPartyCodeTypeCombination find(PriceDiscProductCodeType _PriceDiscProductCodeType, PriceDiscPartyCodeType _PriceDiscPartyCodeType)
{
GOPPromotionItemPartyCodeTypeCombination promotionItemPratyCodeTypeCombination;
select firstonly promotionItemPratyCodeTypeCombination
index hint AccountIAndItemPratyCodeTypeCombinationIdx
where promotionItemPratyCodeTypeCombination.PriceDiscPartyCodeType == _PriceDiscPartyCodeType
&& promotionItemPratyCodeTypeCombination.PriceDiscProductCodeType == _PriceDiscProductCodeType;
return promotionItemPratyCodeTypeCombination;
}
]]></Source>
</Method>
<Method>
<Name>incrementLineNumber</Name>
<Source><![CDATA[
/// <summary>
/// to increment the number and to maintain the product & party code sequency
/// </summary>
private void incrementLineNumber()
{
GOPPromotionItemPartyCodeTypeCombination incrementLineNum;
select firstonly LineNum from incrementLineNum
order by incrementLineNum.lineNum desc;
this.LineNum = incrementLineNum.LineNum+1;
}
]]></Source>
</Method>
<Method>
<Name>initValue</Name>
<Source><![CDATA[
/// <summary>
/// to increment the number and to maintain the product & party code sequency
/// </summary>
public void initValue()
{
super();
this.incrementLineNumber();
}
]]></Source>
</Method>
</Methods>
</SourceCode>
<DeveloperDocumentation>@GOP:GOPPromotionItemPartyCodeTypeCombinationSetup</DeveloperDocumentation>
<FormRef>GOPPromotionItemPartyCodeTypeCombination</FormRef>
<Label>@GOP:GOPPromotionItemPartyCodeTypeCombinationSetup</Label>
<TableGroup>Group</TableGroup>
<TitleField1>PriceDiscPartyCodeType</TitleField1>
<TitleField2>PriceDiscProductCodeType</TitleField2>
<CacheLookup>EntireTable</CacheLookup>
<ClusteredIndex></ClusteredIndex>
<CreateRecIdIndex>No</CreateRecIdIndex>
<Modules>SalesAndMarketing</Modules>
<PrimaryIndex>AccountIAndItemPratyCodeTypeCombinationIdx</PrimaryIndex>
<DeleteActions>
<AxTableDeleteAction>
<Name>PriceDiscAdmTable</Name>
<DeleteAction>Restricted</DeleteAction>
<Relation></Relation>
<Table>PriceDiscAdmTable</Table>
</AxTableDeleteAction>
</DeleteActions>
<FieldGroups>
<AxTableFieldGroup>
<Name>AutoReport</Name>
<Fields>
<AxTableFieldGroupField>
<DataField>PriceDiscPartyCodeType</DataField>
</AxTableFieldGroupField>
<AxTableFieldGroupField>
<DataField>PriceDiscProductCodeType</DataField>
</AxTableFieldGroupField>
<AxTableFieldGroupField>
<DataField>LineNum</DataField>
</AxTableFieldGroupField>
</Fields>
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>AutoLookup</Name>
<Fields />
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>AutoIdentification</Name>
<AutoPopulate>Yes</AutoPopulate>
<Fields />
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>AutoSummary</Name>
<Fields />
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>AutoBrowse</Name>
<Fields />
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>Defaults</Name>
<Label>@SYS334126</Label>
<Fields />
</AxTableFieldGroup>
<AxTableFieldGroup>
<Name>Identification</Name>
<Label>@SYS5711</Label>
<Fields>
<AxTableFieldGroupField>
<DataField>PriceDiscPartyCodeType</DataField>
</AxTableFieldGroupField>
<AxTableFieldGroupField>
<DataField>PriceDiscProductCodeType</DataField>
</AxTableFieldGroupField>
</Fields>
</AxTableFieldGroup>
</FieldGroups>
<Fields>
<AxTableField xmlns=""
i:type="AxTableFieldEnum">
<Name>PriceDiscPartyCodeType</Name>
<AllowEdit>No</AllowEdit>
<Mandatory>Yes</Mandatory>
<EnumType>PriceDiscPartyCodeType</EnumType>
</AxTableField>
<AxTableField xmlns=""
i:type="AxTableFieldEnum">
<Name>PriceDiscProductCodeType</Name>
<AllowEdit>No</AllowEdit>
<Mandatory>Yes</Mandatory>
<EnumType>PriceDiscProductCodeType</EnumType>
</AxTableField>
<AxTableField xmlns=""
i:type="AxTableFieldInt">
<Name>LineNum</Name>
<AllowEdit>No</AllowEdit>
<AllowEditOnCreate>No</AllowEditOnCreate>
<ExtendedDataType>Integer</ExtendedDataType>
<IgnoreEDTRelation>Yes</IgnoreEDTRelation>
<Label>@SYS101704</Label>
</AxTableField>
</Fields>
<FullTextIndexes />
<Indexes>
<AxTableIndex>
<Name>AccountIAndItemPratyCodeTypeCombinationIdx</Name>
<AlternateKey>Yes</AlternateKey>
<Fields>
<AxTableIndexField>
<DataField>PriceDiscPartyCodeType</DataField>
</AxTableIndexField>
<AxTableIndexField>
<DataField>PriceDiscProductCodeType</DataField>
</AxTableIndexField>
</Fields>
</AxTableIndex>
</Indexes>
<Mappings />
<Relations />
<StateMachines />
</AxTable>
/// <summary>
/// Form EventHandler for trade agreement Journal lines(PriceDiscAdmTrans - Datasource)
/// </summary>
[ExtensionOf(formDataSourceStr(PriceDiscAdm, PriceDiscAdmTrans))]
final class MMMPriceDiscAdmTransDSForm_Extension
{
/// <summary>
/// COC to enable & hide the controls based on the Trade agrement PriceType(Promotional item (Sales))
/// </summary>
/// <returns>boolean true or fasle</returns>
public int active()
{
PriceDiscAdmTable priceDiscAdmTableLoc;
//FormDataSource priceDiscAdmTrans_ds = this;
PriceDiscAdmTrans priceDiscAdmTransLoc = this.cursor();
FormRun formrun = this.formRun();
FalseTrue fasleTrue = FalseTrue::False;
select firstonly JournalNum, DefaultRelation from priceDiscAdmTableLoc
where priceDiscAdmTableLoc.JournalNum == priceDiscAdmTransLoc.JournalNum
&& priceDiscAdmTableLoc.DefaultRelation == PriceType::MMMPromotionalItemSales;
if (priceDiscAdmTableLoc.JournalNum)
{
fasleTrue = FalseTrue::True;
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, MMMQuantity))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, MMMPromotionalItemCode))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, MMMPromotionalItemQuantity))).visible(fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, PriceDiscAdmTrans_QuantityAmountFrom))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, PriceDiscAdmTrans_QuantityAmountTo))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, PriceDiscAdmTrans_MMMTransferCost))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, Amount))).visible(!fasleTrue);
formRun.control(FormRun.controlId(formControlStr(PriceDiscAdm, PriceDiscAdmTrans_Currency))).visible(!fasleTrue);
}
return next active();
}
}
/// <summary>
/// Extended class for mapping customized field
/// </summary>
[ExtensionOf(classStr(PriceDiscTableCopyFromPriceDiscAdmTrans))]
final class MMMPriceDiscTableCopyFromPriceDiscAdmTrans_Extension
{
/// <summary>
/// Extended initFieldMapping() method to map MMMTransferCost from PriceDiscAdmTrans to PriceDiscTable
/// </summary>
protected void initFieldMapping()
{
next initFieldMapping();
this.insertFieldMap(this.priceDiscAdmTransDatasourceId(), tableNum(PriceDiscAdmTrans), fieldNum(PriceDiscAdmTrans, SolvMUF), tableNum(PriceDiscTable), fieldNum(PriceDiscTable, SolvMUF));
this.insertFieldMap(this.priceDiscAdmTransDatasourceId(), tableNum(PriceDiscAdmTrans), fieldNum(PriceDiscAdmTrans, MMMTransferCost), tableNum(PriceDiscTable), fieldNum(PriceDiscTable, MMMTransferCost));
this.insertFieldMap(this.priceDiscAdmTransDatasourceId(), tableNum(PriceDiscAdmTrans), fieldNum(PriceDiscAdmTrans, MMMPromotionalItemQuantity), tableNum(PriceDiscTable), fieldNum(PriceDiscTable, MMMPromotionalItemQuantity));
this.insertFieldMap(this.priceDiscAdmTransDatasourceId(), tableNum(PriceDiscAdmTrans), fieldNum(PriceDiscAdmTrans, MMMPromotionalItemCode), tableNum(PriceDiscTable), fieldNum(PriceDiscTable, MMMPromotionalItemCode));
this.insertFieldMap(this.priceDiscAdmTransDatasourceId(), tableNum(PriceDiscAdmTrans), fieldNum(PriceDiscAdmTrans, MMMQuantity), tableNum(PriceDiscTable), fieldNum(PriceDiscTable, MMMQuantity));
}
}
/// <summary>
/// Event handler for sales line
/// </summary>
internal final class MMMSalesLineTableEventHandler
{
AmountQty Quantity = 0.00, PromotionalItemQuantity = 0.00;
ItemId PromotionalItemCode = '';
RefRecId salesOrderLineRecId;
FalseTrue isMatchingPriceDiscTableFound;
UnitOfMeasureSymbol unitId;
/// <summary>
/// To create a new Sales order line based on the Item qty & Price type(Promotional item (Sales))
/// </summary>
/// <param name="sender">table buffer</param>
/// <param name="e">Event that occure on this moment(insert)</param>
[DataEventHandler(tableStr(SalesLine), DataEventType::Inserted)]
public static void SalesLine_onInserted(Common sender, DataEventArgs e)
{
MMMPromotionItemPartyCodeTypeCombination promotionItemPartyCodeTypeCombination;
MMMSalesLineTableEventHandler mmmSalesLineTable = new MMMSalesLineTableEventHandler();
SalesLine salesLine = sender as SalesLine;
FalseTrue isMatchingPriceDiscTableFound = FalseTrue::False;
if (salesLine.MMMIsPromotionalItemSales == NoYes::No)
{
while select promotionItemPartyCodeTypeCombination
{
if (isMatchingPriceDiscTableFound == FalseTrue::False )
{
isMatchingPriceDiscTableFound
= mmmSalesLineTable.creatPromoSLFrom_PartyAndProductCodeType(salesLine,
promotionItemPartyCodeTypeCombination.PriceDiscProductCodeType,
promotionItemPartyCodeTypeCombination.PriceDiscPartyCodeType);
}
}
if (isMatchingPriceDiscTableFound == FalseTrue::True)
{
salesLine.MMMIsPromotionalItemExistforSalesLine = NoYes::Yes;
}
}
if(InventTable::find(salesLine.ItemId).MMMDlvMode)
{
salesLine.MMMDlvMode = InventTable::find(salesLine.ItemId).MMMDlvMode;
}
else
{
if(VendGroup::find(VendTable::find(InventTable::find(salesLine.ItemId).PrimaryVendorId).VendGroup).MMMDlvMode)
{
salesLine.MMMDlvMode = VendGroup::find(VendTable::find(InventTable::find(salesLine.ItemId).PrimaryVendorId).VendGroup).MMMDlvMode;
}
}
/// #ISOCountryRegionCodes
/// if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoCO,#isoCL]))
/// {
/// salesLine.SolvCOC = InventTable::find(salesLine.ItemId).SolvCOC;
/// }
}
/// <summary>
/// To create a new Sales order line based on the Item qty & Price type(Promotional item (Sales))
/// </summary>
/// <param name="sender">Table buffer</param>
/// <param name="e">Event that occure on this moment(Update)</param>
[DataEventHandler(tableStr(SalesLine), DataEventType::Updated)]
public static void SalesLine_onUpdated(Common sender, DataEventArgs e)
{
SalesLine SalesLineLoc;
MMMPromotionItemPartyCodeTypeCombination promotionItemPartyCodeTypeCombination;
MMMSalesLineTableEventHandler mmmSalesLineTable = new MMMSalesLineTableEventHandler();;
SalesLine salesLine = sender as SalesLine;
FalseTrue isMatchingPriceDiscTableFound = FalseTrue::False;
if (salesLine.MMMIsPromotionalItemSales == NoYes::No && salesLine.orig().salesQty != salesLine.SalesQty)
{
while select promotionItemPartyCodeTypeCombination
{
if (isMatchingPriceDiscTableFound == FalseTrue::False )
{
ttsbegin;
select firstonly forupdate salesLineLoc
where salesLineLoc.MMMParentSLItemRecIDForPromotional == salesLine.RecId;
if (salesLineLoc)
{
salesLineLoc.MMMIsPromotionalItemSales = NoYes::No;
salesLineLoc.update();
salesLineLoc.delete();
}
ttscommit;
isMatchingPriceDiscTableFound
= mmmSalesLineTable.creatPromoSLFrom_PartyAndProductCodeType(salesLine,
promotionItemPartyCodeTypeCombination.PriceDiscProductCodeType,
promotionItemPartyCodeTypeCombination.PriceDiscPartyCodeType);
}
}
if (isMatchingPriceDiscTableFound == FalseTrue::True)
{
salesLine.MMMIsPromotionalItemExistforSalesLine = NoYes::Yes;
}
}
if(InventTable::find(salesLine.ItemId).MMMDlvMode)
{
salesLine.MMMDlvMode = InventTable::find(salesLine.ItemId).MMMDlvMode;
}
else
{
if(VendGroup::find(VendTable::find(InventTable::find(salesLine.ItemId).PrimaryVendorId).VendGroup).MMMDlvMode)
{
salesLine.MMMDlvMode = VendGroup::find(VendTable::find(InventTable::find(salesLine.ItemId).PrimaryVendorId).VendGroup).MMMDlvMode;
}
}
/// #ISOCountryRegionCodes
/// if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoCO,#isoCL]))
/// {
/// salesLine.SolvCOC = InventTable::find(salesLine.ItemId).SolvCOC;
/// }
}
/// <summary>
/// TO create Sales line based on promotional tradeagrement
/// </summary>
/// <param name = "_salesLine">Sales Line buffer</param>
/// <param name = "_PriceDiscProductCodeType">Item relation</param>
/// <param name = "_PriceDiscPartyCodeType">Account relation</param>
/// <returns>Returns true if Sales order line is created</returns>
public FalseTrue creatPromoSLFrom_PartyAndProductCodeType(SalesLine _salesLine,
PriceDiscProductCodeType _PriceDiscProductCodeType,
PriceDiscPartyCodeType _PriceDiscPartyCodeType)
{
PriceDiscTable PriceDiscTableLoc;
isMatchingPriceDiscTableFound = FalseTrue::False;
PriceDiscTableLoc= this.getPricDiscTablebuffer(_salesLine,
_PriceDiscProductCodeType,
_PriceDiscPartyCodeType);
if (PriceDiscTableLoc.MMMQuantity && PriceDiscTableLoc.MMMPromotionalItemQuantity && PriceDiscTableLoc.MMMPromotionalItemCode)
{
salesOrderLineRecId = this.creatSalesLineForMMMPromotionalItem(_salesLine, PriceDiscTableLoc.MMMQuantity,
PriceDiscTableLoc.MMMPromotionalItemQuantity,
PriceDiscTableLoc.MMMPromotionalItemCode);
if (salesOrderLineRecId)
{
isMatchingPriceDiscTableFound = FalseTrue::True;
}
}
return isMatchingPriceDiscTableFound;
}
/// <summary>
/// to crete a promotional sales line Item
/// </summary>
/// <param name = "_salesLine">Sales Line buffer</param>
/// <param name = "_MMMQuantity">Sales line Parent Item Qty</param>
/// <param name = "_MMMPromotionalItemQuantity">Sales line Promotional Item Qty </param>
/// <param name = "_MMMPromotionalItemCode">Sales line Promotional Item</param>
/// <returns>Returns true if Sales order line is created</returns>
public RefRecId creatSalesLineForMMMPromotionalItem(salesLine _salesLine, AmountQty _MMMQuantity, AmountQty _MMMPromotionalItemQuantity, ItemId _MMMPromotionalItemCode)
{
salesLine salesLineLoc;
SalesTable salesTableloc;
ttsbegin;
salesLineLoc.clear();
salesLineLoc.SalesId = _salesLine.SalesId;
salesTableloc = salesTable::find(_salesLine.SalesId);
salesLineLoc.initValue(salesTableloc.SalesType);
salesLineLoc.initFromSalesTable(salesTableloc);
salesLineLoc.initFromInventTable(InventTable::find(_mmmPromotionalItemCode));
salesLineLoc.ItemId = _mmmPromotionalItemCode;
salesLineLoc.SalesQty = (_MMMPromotionalItemQuantity * (trunc(_salesLine.SalesQty / _MMMQuantity)));
salesLineLoc.salesQtyModified();
salesLineLoc.SalesPrice = 0.00;
salesLineLoc.LineAmount = 0.00;
SalesLineloc.MMMIsPromotionalItemSales = NoYes::Yes;
salesLineLoc.MMMParentPromotionalItemCode = _salesLine.ItemId;
salesLineLoc.MMMParentPromotionalItemLineNum = _salesLine.LineNum;
salesLineLoc.MMMParentQuantity = _salesLine.SalesQty;
salesLineLoc.MMMParentSLItemRecIDForPromotional = _salesLine.RecId;
salesLineLoc.createLine(true, true, true, true, true, true, true, true, false, false, false);
ttsCommit;
return salesLineLoc.RecId;
}
/// <summary>
/// to delete the Promotional sales line
/// </summary>
/// <param name="sender">Table buffer</param>
/// <param name="e">Delete event</param>
[DataEventHandler(tableStr(SalesLine), DataEventType::Deleting)]
public static void SalesLine_onDeleted(Common sender, DataEventArgs e)
{
SalesLine salesLineLoc;
SalesLine salesLine = sender as SalesLine;
if (salesLine.MMMIsPromotionalItemExistforSalesLine == NoYes::Yes)
{
ttsbegin;
select firstonly forupdate salesLineLoc
where salesLineLoc.MMMParentSLItemRecIDForPromotional == salesLine.RecId;
if (salesLineLoc)
{
salesLineLoc.MMMIsPromotionalItemSales = NoYes::No;
salesLineLoc.update();
salesLineLoc.delete();
}
ttscommit;
}
if (salesLine.MMMIsPromotionalItemSales == NoYes::Yes)
{
select firstonly * from salesLineLoc
where salesLineLoc.MMMParentSLItemRecIDForPromotional == salesLine.RecId;
throw Error(strFmt("@MMM:DeletePromotionalItemQuantityError",salesLineLoc.MMMParentPromotionalItemCode, salesLineLoc.ItemId));
}
}
/// <summary>
/// To get Item Relation
/// </summary>
/// <param name = "_itemId">itemId</param>
/// <param name = "_unitId">unitId</param>
/// <param name = "_PriceDiscProductCodeType">Item Code Type</param>
/// <returns>Return type of relation </returns>
public PriceDiscItemRelation getItemRelation(ItemId _itemId,UnitOfMeasureSymbol _unitId, PriceDiscProductCodeType _PriceDiscProductCodeType)
{
PriceDiscItemRelation itemRelation;
if (PriceDiscProductCodeType::Table == _PriceDiscProductCodeType)
{
itemRelation = _ItemId;
unitId = _unitId;
}
else if (PriceDiscProductCodeType::GroupId == _PriceDiscProductCodeType)
{
itemRelation = InventTableModule::find(_ItemId, ModuleInventPurchSales::Sales).MMMPromotionalItemSalesLineDisc;
unitId = '';
}
else if (PriceDiscProductCodeType::All == _PriceDiscProductCodeType)
{
itemRelation = '';
unitId = '';
}
return itemRelation;
}
/// <summary>
/// To get Account Relation
/// </summary>
/// <param name = "_CustAccount">Account</param>
/// <param name = "_PriceDiscPartyCodeType">Account Code Type</param>
/// <returns></returns>
public PriceDiscAccountRelation getAccountRelation(AccountNum _CustAccount, PriceDiscPartyCodeType _PriceDiscPartyCodeType)
{
PriceDiscAccountRelation accountRelation;
if (PriceDiscPartyCodeType::Table == _PriceDiscPartyCodeType)
{
accountRelation = _CustAccount;
}
else if (PriceDiscPartyCodeType::GroupId == _PriceDiscPartyCodeType)
{
accountRelation = CustTable::find(_CustAccount).CustGroup;
}
else if (PriceDiscPartyCodeType::All == _PriceDiscPartyCodeType)
{
accountRelation = '';
}
return accountRelation;
}
/// <summary>
/// to find record in Pric discount table
/// </summary>
/// <param name = "_salesLine">Buffer</param>
/// <param name = "_PriceDiscProductCodeType">Item Code Type</param>
/// <param name = "_PriceDiscPartyCodeType">Account Code Type</param>
/// <returns>return Price discount table buffer</returns>
public PriceDiscTable getPricDiscTablebuffer(SalesLine _salesLine,
PriceDiscProductCodeType _PriceDiscProductCodeType,
PriceDiscPartyCodeType _PriceDiscPartyCodeType)
{
PriceDiscAdmTrans priceDiscAdmTransloc;
PriceDiscAdmTable priceDiscAdmTableLoc;
PriceDiscTable PriceDiscTableLoc;
FromDate salesLineCreatedDate;
PriceDiscItemRelation itemRelation;
PriceDiscAccountRelation accountRelation;
InventDim inventDim;
//isMatchingPriceDiscTableFound = FalseTrue::False;
Quantity = 0.00;
PromotionalItemQuantity = 0.00;
PromotionalItemCode = '';
salesLineCreatedDate = DateTimeUtil::date(_salesLine.CreatedDateTime);
itemRelation = this.getItemRelation(_salesLine.ItemId, _salesLine.SalesUnit, _PriceDiscProductCodeType);
accountRelation = this.getAccountRelation(_salesLine.CustAccount, _PriceDiscPartyCodeType);
select FromDate, TODATE, AccountRelation, AccountCode, ItemCode, ItemRelation, MMMQuantity, MMMPromotionalItemCode, MMMPromotionalItemQuantity,
relation, UnitId, InventDimId, RecId from PriceDiscTableLoc
order by MMMQuantity desc, ToDate asc, fromDate asc
join priceDiscAdmTransloc
where priceDiscAdmTransloc.RECID == PriceDiscTableLoc.OriginalPriceDiscAdmTransRecId
join JournalNum from priceDiscAdmTableLoc
where priceDiscAdmTableLoc.JournalNum == priceDiscAdmTransloc.JournalNum
join InventLocationId, InventSiteId, inventDimId from inventDim
where inventDim.InventDimId == PriceDiscTableLoc.InventDimId
&& PriceDiscTableLoc.relation == PriceType::MMMPromotionalItemSales
&& PriceDiscTableLoc.ItemCode == _PriceDiscProductCodeType
&& PriceDiscTableLoc.ItemRelation == itemRelation
&& PriceDiscTableLoc.AccountCode == _PriceDiscPartyCodeType
&& PriceDiscTableLoc.AccountRelation == accountRelation
&& PriceDiscTableLoc.UnitId == unitId
//&& PriceDiscTableLoc.InventDimId == _salesLine.InventDimId
&& ( PriceDiscTableLoc.FromDate <= salesLineCreatedDate
&& PriceDiscTableLoc.ToDate >= salesLineCreatedDate)
&& PriceDiscTableLoc.MMMQuantity <= _salesLine.SalesQty
&& PriceDiscTableLoc.MMMQuantity != 0.00
&& PriceDiscTableLoc.MMMPromotionalItemQuantity != 0.00
&& PriceDiscTableLoc.MMMPromotionalItemCode != '';
if (inventDim.inventDimId == 'AllBlank')
{
return PriceDiscTableLoc;
}
else if (inventDim.inventDimId == _salesLine.InventDimId)
{
priceDiscAdmTransloc.clear();
priceDiscAdmTableLoc.clear();
PriceDiscTableLoc.clear();
inventDim.clear();
select FromDate, TODATE, AccountRelation, AccountCode, ItemCode, ItemRelation, MMMQuantity, MMMPromotionalItemCode, MMMPromotionalItemQuantity,
relation, UnitId, InventDimId, RecId from PriceDiscTableLoc
order by MMMQuantity desc, ToDate asc, fromDate asc
join priceDiscAdmTransloc
where priceDiscAdmTransloc.RECID == PriceDiscTableLoc.OriginalPriceDiscAdmTransRecId
join JournalNum from priceDiscAdmTableLoc
where priceDiscAdmTableLoc.JournalNum == priceDiscAdmTransloc.JournalNum
join InventLocationId, InventSiteId, inventDimId from inventDim
where inventDim.InventDimId == PriceDiscTableLoc.InventDimId
&& PriceDiscTableLoc.relation == PriceType::MMMPromotionalItemSales
&& PriceDiscTableLoc.ItemCode == _PriceDiscProductCodeType
&& PriceDiscTableLoc.ItemRelation == itemRelation
&& PriceDiscTableLoc.AccountCode == _PriceDiscPartyCodeType
&& PriceDiscTableLoc.AccountRelation == accountRelation
&& PriceDiscTableLoc.UnitId == unitId
//&& PriceDiscTableLoc.InventDimId == _salesLine.InventDimId
&& ( PriceDiscTableLoc.FromDate <= salesLineCreatedDate
&& PriceDiscTableLoc.ToDate >= salesLineCreatedDate)
&& PriceDiscTableLoc.MMMQuantity <= _salesLine.SalesQty
&& PriceDiscTableLoc.MMMQuantity != 0.00
&& PriceDiscTableLoc.MMMPromotionalItemQuantity != 0.00
&& PriceDiscTableLoc.MMMPromotionalItemCode != ''
&& PriceDiscTableLoc.MMMPromotionalItemCode != ''
&& inventDim.InventDimId == _salesLine.InventDimId;
}
return PriceDiscTableLoc;
}
}
Comments
Post a Comment