<?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="67">
      <Name>Ticket Create Outlook Mail</Name>
      <Description>To the Ticket page, adds the “Create mail” command that creates a new mail in the MS Outlook.</Description>
      <UniqueId>87b2b547-e185-47d8-beda-4fd397bb20bc</UniqueId>
      <Version>2</Version>
      <AdvancedSettings />
      <Scripts>
        <Script id="305">
          <Name>TicketCreateOutlookMailCommand</Name>
          <Code>// Last update: 16.4.2025 15:00.
using System;
using Alvao.API.Common;
using Alvao.API.Common.Model.CustomApps;
using Alvao.Apps.API;
using Alvao.API.Common.Model.Database;
using MessageType = Alvao.API.Common.Model.CustomApps.MessageType;

public class TicketCreateOutlookMailCommand : IEntityCommand
{
    public string Id { get; set; }
    public Entity Entity { get; set; }

    public TicketCreateOutlookMailCommand()
    {
        Id = "TicketCreateOutlookMail".GetHashCode().ToString();
        Entity = Entity.Request;
    }

    public EntityCommandShowResult Show(int entityId, int personId)
    {
        int position = 3;
        string icon = "mail_add_20_regular";
        string name = "Create mail";
        bool show = false;
        
        tHdTicket ticket = Alvao.API.SD.Ticket.GetById(entityId);

        if (ticket != null &amp;&amp; ticket.liHdTicketHdSectionId &gt; 0)
        {
            var teamRoles = PersonRights.TicketRoles.SectionManager | PersonRights.TicketRoles.SectionMainSolver | PersonRights.TicketRoles.SectionSolver;
            show = PersonRights.HaveTicketRole(personId, entityId, ticket.liHdTicketHdSectionId, teamRoles, true);

            if ( !show )
            {
                var person = Person.GetById(personId);
                if (person.sPersonEmail != null)
                    show = person.sPersonEmail.Contains("@alvao.com");
            }
        }

        return new EntityCommandShowResult(show, name, icon, position);
    }

    public CommandResult Run(int entityId, int personId)
    {
        MessageType messageType = MessageType.None;
        string messageText = string.Empty;
        string navigateToUrl = string.Empty;

        try
        {
            var userMail = Person.GetById(personId).sPersonEmail;

            if (!string.IsNullOrEmpty(userMail))
            {
                // Get ticket info
                var waUrl = DbProperty.WebAppUrl;
                var ticket = Alvao.API.SD.Ticket.GetById(entityId);
                var ticketFullName = $"{ticket.sHdTicket} ({ticket.sHdTicketMessageTag})";
                var ticketUrl = "";
                if (!string.IsNullOrEmpty(waUrl))
                {
                    ticketUrl = waUrl + "/Ticket/" + entityId;
                    //ticketUrl = $"&lt;a href=\"{ticketUrl}\"&gt;{ticketUrl}&lt;/a&gt;";
                }

                navigateToUrl = "https://outlook.office.com/mail/deeplink/compose?subject=" + System.Net.WebUtility.UrlEncode(ticketFullName).Replace("+","%20");// + "&amp;body=" + System.Net.WebUtility.UrlEncode(ticketUrl);
            }
        }
        catch (Exception e)
        {
            messageType = MessageType.Error;
            messageText = e.Message;
            return new CommandResult(messageType, messageText, navigateToUrl);
        }

        return new CommandResult(messageType, messageText, navigateToUrl);
    }
}
</Code>
          <IsLibCode>false</IsLibCode>
          <Codesign>kDEfct6oVUGWpqaYtn7vZeD9KjAqHWn0/pxaOvgTtl4epGTpcbhZwwPHeImOdyw3EYuubU6/Q4ocVtaVJEHGA2Wju44IzpMV+ECCz/DXTc50u52f28R5Isfu8EAaEkvK8KBCQEEIARpPNSRAicSoRhhY6O1I9X/3ip3KmGAaP2p+EzhRGNkQOWQbRvK3i4RTE6lIKaQyev5pRyEhaL0UjGunFQwwDXBZyJtOFN+u/IHbfY2W9SSPkliLvSJHUICau4cxcHy70KVx6tD/aPnD5OQAAOX1293K0kocU8Q9X+fL3DgAxV44+Jbf+xxjF866RBK0fLt4l32e2EKko8v8Dw==</Codesign>
        </Script>
      </Scripts>
    </Application>
  </Applications>
</AlvaoApplication>