Page 7514 Item Variant Attr. Value List

App
Base Application
Namespace
Microsoft.Inventory.Item.Attribute
Versions
28
Source table
7504

Procedures, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Item/Attribute/ItemVariantAttrValueList.Page.al165 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Inventory.Item.Attribute;

page 7514 "Item Variant Attr. Value List"
{
    Caption = 'Item Variant Attribute Values';
    DelayedInsert = true;
    LinksAllowed = false;
    PageType = ListPart;
    SourceTable = "Item Attribute Value Selection";
    SourceTableTemporary = true;

    layout
    {
        area(content)
        {
            repeater(Control1)
            {
                ShowCaption = false;
                field("Attribute Name"; Rec."Attribute Name")
                {
                    ApplicationArea = Basic, Suite;
                    AssistEdit = false;
                    Caption = 'Attribute';
                    TableRelation = "Item Attribute".Name where(Blocked = const(false));
                    ToolTip = 'Specifies the item variant attribute.';

                    trigger OnValidate()
                    var
                        ItemAttributeValue: Record "Item Attribute Value";
                        ItemAttribute: Record "Item Attribute";
                    begin
                        if xRec."Attribute Name" <> '' then begin
                            xRec.FindItemAttributeByName(ItemAttribute);
                            DeleteItemVariantAttributeValueMapping(ItemAttribute.ID);
                        end;

                        if (Rec.Value <> '') and not Rec.FindAttributeValue(ItemAttributeValue) then
                            Rec.InsertItemAttributeValue(ItemAttributeValue, Rec);

                        InsertItemVariantAttributeValueMapping(ItemAttributeValue);

                        CurrPage.Update(true);
                    end;
                }
                field(Value; Rec.Value)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Value';
                    TableRelation = if ("Attribute Type" = const(Option)) "Item Attribute Value".Value where("Attribute ID" = field("Attribute ID"),
                                                                                                            Blocked = const(false));
                    ToolTip = 'Specifies the value of the item variant attribute.';

                    trigger OnValidate()
                    var
                        ItemAttributeValue: Record "Item Attribute Value";
                        ItemVariantAttributeValueMapping: Record "Item Var. Attr. Value Mapping";
                        ItemAttribute: Record "Item Attribute";
                    begin
                        if not Rec.FindAttributeValue(ItemAttributeValue) then
                            Rec.InsertItemAttributeValue(ItemAttributeValue, Rec);

                        InsertItemVariantAttributeValueMapping(ItemAttributeValue);
                        ItemVariantAttributeValueMapping.SetRange("Item No.", RelatedItemCode);
                        ItemVariantAttributeValueMapping.SetRange("Variant Code", RelatedVariantCode);
                        ItemVariantAttributeValueMapping.SetRange("Item Attribute ID", ItemAttributeValue."Attribute ID");
                        if ItemVariantAttributeValueMapping.FindFirst() then begin
                            ItemVariantAttributeValueMapping."Item Attribute Value ID" := ItemAttributeValue.ID;
                            ItemVariantAttributeValueMapping."Inherited-From Table ID" := 0;
                            ItemVariantAttributeValueMapping."Inherited-From Key Value" := '';
                            ItemVariantAttributeValueMapping.Modify();

                            Rec."Inherited-From Table ID" := 0;
                            Rec."Inherited-From Key Value" := '';
                            Rec.Modify();
                        end;

                        ItemAttribute.Get(Rec."Attribute ID");
                        if ItemAttribute.Type <> ItemAttribute.Type::Option then
                            if Rec.FindAttributeValueFromRecord(ItemAttributeValue, xRec) then
                                if not ItemAttributeValue.HasBeenUsed() then
                                    ItemAttributeValue.Delete();
                    end;
                }
                field("Unit of Measure"; Rec."Unit of Measure")
                {
                    ApplicationArea = Basic, Suite;
                }
            }
        }
    }

    actions
    {
    }

    trigger OnDeleteRecord(): Boolean
    begin
        DeleteItemVariantAttributeValueMapping(Rec."Attribute ID");
    end;

    trigger OnOpenPage()
    begin
        CurrPage.Editable(true);
    end;

    protected var
        RelatedItemCode: Code[20];
        RelatedVariantCode: Code[10];

    procedure LoadAttributes(ItemNo: Code[20]; VariantCode: Code[10])
    var
        ItemVariantAttributeValueMapping: Record "Item Var. Attr. Value Mapping";
        TempItemAttributeValue: Record "Item Attribute Value" temporary;
        ItemAttributeValue: Record "Item Attribute Value";
    begin
        RelatedItemCode := ItemNo;
        RelatedVariantCode := VariantCode;
        ItemVariantAttributeValueMapping.SetRange("Item No.", ItemNo);
        ItemVariantAttributeValueMapping.SetRange("Variant Code", VariantCode);
        if ItemVariantAttributeValueMapping.FindSet() then
            repeat
                ItemAttributeValue.Get(ItemVariantAttributeValueMapping."Item Attribute ID", ItemVariantAttributeValueMapping."Item Attribute Value ID");
                TempItemAttributeValue.TransferFields(ItemAttributeValue);
                TempItemAttributeValue.Insert();

                Rec.InsertRecord(TempItemAttributeValue, ItemVariantAttributeValueMapping."Inherited-From Table ID", ItemVariantAttributeValueMapping."Inherited-From Key Value");
            until ItemVariantAttributeValueMapping.Next() = 0;
    end;

    local procedure DeleteItemVariantAttributeValueMapping(AttributeToDeleteID: Integer)
    var
        ItemVariantAttributeValueMapping: Record "Item Var. Attr. Value Mapping";
        ItemAttribute: Record "Item Attribute";
    begin
        ItemVariantAttributeValueMapping.SetRange("Item No.", RelatedItemCode);
        ItemVariantAttributeValueMapping.SetRange("Variant Code", RelatedVariantCode);
        ItemVariantAttributeValueMapping.SetRange("Item Attribute ID", AttributeToDeleteID);
        if ItemVariantAttributeValueMapping.FindFirst() then
            ItemVariantAttributeValueMapping.Delete();

        ItemAttribute.Get(AttributeToDeleteID);
        ItemAttribute.RemoveUnusedArbitraryValues();
    end;

    local procedure InsertItemVariantAttributeValueMapping(ItemAttributeValue: Record "Item Attribute Value")
    var
        ItemVariantAttributeValueMapping: Record "Item Var. Attr. Value Mapping";
    begin
        if not ItemAttributeValue.Get(ItemAttributeValue."Attribute ID", ItemAttributeValue.ID) or
           ItemVariantAttributeValueMapping.Get(RelatedItemCode, RelatedVariantCode, ItemAttributeValue."Attribute ID") then
            exit;

        ItemVariantAttributeValueMapping.Reset();
        ItemVariantAttributeValueMapping.Init();
        ItemVariantAttributeValueMapping.Validate("Item No.", RelatedItemCode);
        ItemVariantAttributeValueMapping.Validate("Variant Code", RelatedVariantCode);
        ItemVariantAttributeValueMapping.Validate("Item Attribute ID", ItemAttributeValue."Attribute ID");
        ItemVariantAttributeValueMapping.Validate("Item Attribute Value ID", ItemAttributeValue.ID);
        ItemVariantAttributeValueMapping.Insert();
    end;
}