<?xml version="1.0" encoding="utf-8"?>
<AlvaoApplication xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ModelVersion="1">
  <Applications>
    <Application id="1100">
      <Name>Object Manufacturer Support</Name>
      <Description>Adds the Manufacturer support command to the Object page. The command opens the device manufacturer's web-page for the selected object based on the Manufacturer, and Serial number (or BIOS serial number) object property values. Works only for Dell and Lenovo.</Description>
      <UniqueId>86e26971-31be-4f88-9b09-d3018a0b0eec</UniqueId>
      <Version>2</Version>
      <AdvancedSettings />
      <Scripts>
        <Script id="2813">
          <Name>Localization</Name>
          <Code>using System.Linq;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using Alvao.API.Common;

public class Localization 
{
    public static List&lt;LocalizationItem&gt; Localizations {get {
        return new List&lt;LocalizationItem&gt;() {
            new LocalizationItem(1029, "CommandName", "Podpora výrobce"),
            new LocalizationItem(1031, "CommandName", "Herstellerunterstützung"),
            new LocalizationItem(1033, "CommandName", "Manufacturer support"),            
            new LocalizationItem(1045, "CommandName", "Wsparcie producenta"),
            new LocalizationItem(1051, "CommandName", "Podpora výrobcu")
        };
    } }

    public static string GetLocalization(int personId, string name)
    {
        var localeId = GetPersonLocaleId(personId);
        var translation = FindInList(localeId, name);
        if (string.IsNullOrEmpty(translation))
        {
            localeId = GetDefaultLocaleId();
            translation = FindInList(localeId, name); 
            if (string.IsNullOrEmpty(translation))
            {
                localeId = Locale.GetDatabaseLocaleId();
                translation = FindInList(localeId, name); 
            }
        }
        return translation;
    }

    private static string FindInList(int localeId, string name)
    {
        return Localizations.FirstOrDefault(x=&gt;x.LocaleId == localeId &amp;&amp; x.Name == name)?.Translation;
    }

    private static int GetDefaultLocaleId()
    {
        var locale = Person.GetCultureInfoOrDefault(new Alvao.API.Common.Model.Database.tPerson()).LCID;
        return locale;
    }

    private static int GetPersonLocaleId(int personId)
    {
        var locale = Person.GetById(personId).iPersonLocaleId;
        if (!locale.HasValue)
        {
            return GetDefaultLocaleId();
        }
        return locale.Value;
    }
}

public class LocalizationItem
{
    public int LocaleId {get; set;}
    public string Name {get; set;}
    public string Translation {get; set;}

    public  LocalizationItem(int localeId, string name, string translation)
    {
        this.LocaleId = localeId;
        this.Name = name;
        this.Translation = translation;
    }
}</Code>
          <IsLibCode>true</IsLibCode>
          <Codesign>QlPfP7JWeq6Kf1HlivFG+6YWmHAeWAWd3/JA4M7SIkPPNf3Ss1DAHEkefjn9d0hiNTyuPUNF+WtfWVs9aKTLJLJtbWsXIiVAkz0r8sso/7ZWIhRoPz9zUg+w6atrGYhdbU347Q9XKsHRRmBlKKu4BmD1MrZuodBLkC38A5Lrqmy1VHs6X8xjBUEefedOFNyEtSkHSbsFax4Y8G0w3pNPQr6rEQ6uiPHh8H/GeT3S4KO3JO9NJ24lcgGmRivMUvc3+Porx/Gy/+i1LdmBmxvtWLC9ygHewIMTZwrb4wLe6buuxrBwnjq8GzGZrHr0ghzglHgRDSI94Z+XiIef+e9egg==</Codesign>
        </Script>
        <Script id="2814">
          <Name>ManufacturerSupport</Name>
          <Code>using Alvao.API.Common.Model.CustomApps;
using Alvao.Apps.API;
using Alvao.Context;
using Dapper;

public class ManufacturerSupport : IEntityCommand 
{
    public string Id {get; set;}
    public Entity Entity {get; set;}

    public ManufacturerSupport()
    {
        Id = "ObjectManufacturerSupport";
        Entity = Entity.Object;
    }

    public EntityCommandShowResult Show(int entityId, int personId)
    {   
        int position = 2; 
        string icon = "wrench_20_regular"; 
        string name = Localization.GetLocalization(personId, "CommandName"); 
        bool show = !string.IsNullOrEmpty(GetManufacturerSupportUrl(entityId));
               
        return new EntityCommandShowResult (show, name, icon, position);
    }

    public CommandResult Run(int entityId, int personId)
    {
        MessageType messageType = MessageType.None; 
        string messageText = string.Empty;
        string navigateToUrl = GetManufacturerSupportUrl(entityId);

        return new CommandResult(messageType, messageText, navigateToUrl);
    }

    private string GetManufacturerSupportUrl(int objectId)
    {
        using (var scope = AlvaoContext.GetConnectionScope())
        {
            //Retrieving the required object data from the database.
            var objectModel = scope.Connection.QueryFirstOrDefault&lt;ManufacturerSupportObjectModel&gt;(@"
            select
                SerialNumber,
                Manufacturer,
                BiosSerialNumber
            from NodeCust
            where NodeId = @objectId", new { objectId }
            );

            if (objectModel == null){
            return string.Empty;
            }

            string serialNumber = string.IsNullOrEmpty(objectModel.SerialNumber) ? objectModel.BiosSerialNumber : objectModel.SerialNumber;

            //Check if the object has filled properties.
            if (!string.IsNullOrEmpty(objectModel.Manufacturer) &amp;&amp; !string.IsNullOrEmpty(serialNumber))
            {
                string url = string.Empty;

                switch (objectModel.Manufacturer.ToLower()){
                    case "dell":
                    case "dell inc.":
                        url = "https://www.dell.com/support/home/product-support/servicetag/" + serialNumber;
                        break;
                    case "lenovo":
                        url = "https://pcsupport.lenovo.com/products/" + serialNumber;
                        break;
                }

                return url;
            }

            return string.Empty;
        }
    }

    public class ManufacturerSupportObjectModel {
        public string Manufacturer {get; set;}
        public string SerialNumber {get; set;}
        public string BiosSerialNumber {get; set;}
    }
}</Code>
          <IsLibCode>false</IsLibCode>
          <Codesign>Wv+KDNpuMa/WLOrKYey3L7+u6BpsE7tdwV/xCZN+W2Tu2vBCPAIo0Qsf6Y9A23VgqlU7XwM5JClmWoxDiXxxexoziZmWMkzUYMnXdj+xkzY0mYFbW7wyEB9vSJU0A62GJN+GvUlHfZgVvFMZig4CaVu7H6XIiIce7KADgy1KbwD7BtS60zvti/jZfj8yB4rmJ8Nen0g63eHhexZkrAZIh5vMR/nB5kcaCHcPxzkJ4sLrDzKehrSg6wyZCuwv/MRftkrN+geeCGlGevFE7tVUltBDfue9ta9L6T9XZrb+N4LxnZbatIoP4x8Nd2yULHn6CvA1Exb6sVlN4rvKCIZKWQ==</Codesign>
        </Script>
      </Scripts>
    </Application>
  </Applications>
</AlvaoApplication>