Page 7499 Item From Picture-Attrib Part, source in 29

Source29

src/Layers/W1/BaseApp/Inventory/Item/Picture/ItemFromPictureAttribPart.Page.al153 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.Picture;

using Microsoft.Inventory.Item;
using Microsoft.Inventory.Item.Attribute;

page 7499 "Item From Picture-Attrib Part"
{
    Caption = 'Item Attribute Values';
    DelayedInsert = true;
    LinksAllowed = false;
    PageType = ListPart;
    SourceTable = "Item Attribute Value Selection";
    SourceTableTemporary = true;

    layout
    {
        area(content)
        {
            repeater(AttributesRepeater)
            {
                ShowCaption = false;
                field(AttributeNameField; Rec."Attribute Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Attribute';
                    TableRelation = "Item Attribute".Name where(Blocked = const(false));

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

                        if not Rec.FindAttributeValue(ItemAttributeValue) then
                            Rec.InsertItemAttributeValue(ItemAttributeValue, Rec);
                    end;
                }
                field(AttributeValueField; 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));

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

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

    trigger OnModifyRecord(): Boolean
    begin
        UserEdited := true;
    end;

    trigger OnInsertRecord(BelowxRec: Boolean): Boolean
    begin
        UserEdited := true;
    end;

    var
        ItemFromPicture: Codeunit "Item From Picture";
        GlobalCategoryCode: Code[20];
        UserEdited: Boolean;
        ConfirmCategoryChangeTxt: Label 'This will change the new item category from "%1" to "%2", and will reset the item attributes.\\ Do you want to continue?', Comment = '%1, %2: two category names, for example "furniture" and "kitchen appliances"';

    procedure LoadAttributesFromCategory(CategoryCode: Code[20])
    var
        TempItemAttributeValue: Record "Item Attribute Value" temporary;
    begin
        if CategoryCode = GlobalCategoryCode then
            exit;

        GlobalCategoryCode := CategoryCode;

        if GlobalCategoryCode = '' then
            exit;

        if UserEdited then
            if not Confirm(StrSubstNo(ConfirmCategoryChangeTxt, GlobalCategoryCode, CategoryCode)) then
                Error('');

        Rec.DeleteAll();

        PopulateFromCategoryHierarchy(GlobalCategoryCode, TempItemAttributeValue);

        Rec.PopulateItemAttributeValueSelection(TempItemAttributeValue, DATABASE::"Item Category", GlobalCategoryCode);
    end;

    local procedure PopulateFromCategoryHierarchy(CategoryCode: Code[20]; var TempItemAttributeValue: Record "Item Attribute Value")
    var
        ItemCategory: Record "Item Category";
    begin
        repeat
            PopulateFromCategory(CategoryCode, TempItemAttributeValue);
            if ItemCategory.Get(CategoryCode) then
                CategoryCode := ItemCategory."Parent Category";
        until CategoryCode = '';
    end;

    local procedure PopulateFromCategory(CategoryCode: Code[20]; var TempItemAttributeValue: Record "Item Attribute Value")
    var
        ItemAttributeValueMapping: Record "Item Attribute Value Mapping";
        ItemAttributeValue: Record "Item Attribute Value";
    begin
        ItemAttributeValueMapping.SetRange("Table ID", DATABASE::"Item Category");

        ItemAttributeValueMapping.SetRange("No.", CategoryCode);
        if ItemAttributeValueMapping.FindSet() then
            repeat
                ItemAttributeValue.Get(ItemAttributeValueMapping."Item Attribute ID", ItemAttributeValueMapping."Item Attribute Value ID");
                TempItemAttributeValue.TransferFields(ItemAttributeValue);
                if TempItemAttributeValue.Insert() then;
            until ItemAttributeValueMapping.Next() = 0;
    end;

    procedure ClearValues()
    begin
        ItemFromPicture.ClearAttributeValues(Rec);
    end;

    procedure SaveValues(Item: Record Item)
    begin
        ItemFromPicture.SaveAttributeValues(Rec, Item);
    end;
}