<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 22:18:07 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[MGRENTITLE-3] mgr-tenant-entitlements - Prevent applications from being uninstalled if depended on</title>
                <link>https://folio-org.atlassian.net/browse/MGRENTITLE-3</link>
                <project id="10245" key="MGRENTITLE">mgr-tenant-entitlements</project>
                    <description>&lt;p&gt;If an application is being depended on, we should not allow it to be disabled, unless the applications which depend on it are also being disabled.&#160;&#160;&lt;/p&gt;

&lt;p&gt;Scope:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Return an error indicating that the application cannot be disabled because other applications enabled for your tenant depend on it. &#160;This error message should include a list of those applications&lt;/li&gt;
	&lt;li&gt;Ideally not just those which directly depend on the application being disabled, but also those which indirectly depend on it.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;NOTE: &#160;Could mean traversing the tree of application dependencies from the target node (application) out to the leaves&lt;/p&gt;

&lt;p&gt;NOTE:&#160; May require schema changes and API spec updates&#160;&lt;/p&gt;

&lt;p&gt;NOTE: &#160;Support for a &quot;&quot;cascade&quot;&quot; parameter is an interesting idea. &#160;When cascade=true, the application(s) specified would be disabled for the tenant along with those which depend on it. &#160;This is potentially dangerous, but also very convenient/powerful. &#160;For now, let&apos;s keep this out of scope, but it&apos;s something to think about as a potential future enhancement.&#160;&lt;/p&gt;

&lt;p&gt;DEV NOTES:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;This story relates to the hierarchical installation/hierarchical uninstallation&lt;/li&gt;
	&lt;li&gt;Should be done after this US1129694&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;&lt;a name=&quot;Example%C2%A0&quot;&gt;&lt;/a&gt;Example&#160;&lt;/h2&gt;

&lt;p&gt;Given:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;app-foo depends on app-foo-core&lt;/li&gt;
	&lt;li&gt;app-foo-core depends on app-bar and app-baz.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Then:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;trying to disable [ app-foo ] would result in an error indicating that [ app-foo-core, app-bar, app-baz ] would also need to be disabled.&lt;/li&gt;
	&lt;li&gt;trying to disable [ app-foo-core ] would result in an error indicating that [ app-bar, app-baz ] would also need to be disabled.&lt;/li&gt;
	&lt;li&gt;trying to disable [ app-foo, app-foo-core, app-bar ] would result in an error indicating that [ app-baz ] would also need to be disabled.&lt;/li&gt;
	&lt;li&gt;trying to disable [ app-bar] would succeed since nothing depends on app-bar&lt;/li&gt;
	&lt;li&gt;trying to disable [ app-baz] would succeed since nothing depends on app-baz&lt;/li&gt;
	&lt;li&gt;trying to disable [ app-foo, app-foo-core, app-bar, app-baz ] would succeed because all dependencies would still be satisfied after these applications are disabled.&#160;&#160;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="78888">MGRENTITLE-3</key>
            <summary>mgr-tenant-entitlements - Prevent applications from being uninstalled if depended on</summary>
                <type id="10005" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium">Story</type>
                                            <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="557058:2002428d-c11e-48c4-98e0-a5b1104bd0b6">Dima Tkachenko</assignee>
                                                                <reporter accountid="5cf6c546b87c300f36eb7b9a">Craig McNally</reporter>
                                    <labels>
                            <label>back-end</label>
                            <label>epam-eureka</label>
                            <label>eureka-phase4</label>
                            <label>need-review</label>
                    </labels>
                <created>Sun, 31 Dec 2023 15:52:36 +0000</created>
                <updated>Fri, 12 Jan 2024 13:44:06 +0000</updated>
                            <resolved>Fri, 12 Jan 2024 13:44:05 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                <comments>
                                                            <comment id="187676" author="70121:26da6b78-0d8a-4d47-b80e-9541f5e4cea5" created="Sun, 31 Dec 2023 15:52:36 +0000"  >&lt;p&gt;Exmaple:&#160;Given:app-foo depends on app-foo-coreapp-foo-core depends on app-bar and app-baz.&#160;Then:trying to disable [ app-foo ] would result in an error indicating that [ app-foo-core, app-bar, app-baz ] would also need to be disabled.trying to disable [ app-foo-core ] would result in an error indicating that [ app-bar, app-baz ] would also need to be disabled.trying to disable [ app-foo, app-foo-core, app-bar ] would result in an error indicating that [ app-baz ] would also need to be disabled.trying to disable [ app-bar] would succeed since nothing depends on app-bartrying to disable [ app-baz] would succeed since nothing depends on app-baztrying to disable [ app-foo, app-foo-core, app-bar, app-baz ] would succeed because all dependencies would still be satisfied after these applications are disabled.&#160;&#160;&#160;&lt;/p&gt;</comment>
                                                            <comment id="187677" author="70121:26da6b78-0d8a-4d47-b80e-9541f5e4cea5" created="Sun, 31 Dec 2023 15:52:36 +0000"  >&lt;p&gt;It&apos;s not possible to disable an application for a tenant if other applications enabled for that tenant depend on it. &#160;It&apos;s possible to disable an application for a tenant if all other applications enabled for the tenant which depend on it are also disabled in the same callTests are updated and coverage is 80%+&lt;/p&gt;</comment>
                                                            <comment id="187678" author="61af2efff24150007266ea04" created="Wed, 3 Jan 2024 10:14:33 +0000"  >&lt;p&gt;Tested on &lt;a href=&quot;https://evrk.int.aws.folio.org/&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://evrk.int.aws.folio.org/&lt;/a&gt; - works as expected &lt;img class=&quot;emoticon&quot; src=&quot;/images/icons/emoticons/check.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Used the following app dependencies on &quot;ok2&quot; tenant:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&quot;app-agreements&quot; depends on &quot;app-licenses&quot;&lt;/li&gt;
	&lt;li&gt;&quot;app-licenses&quot; depends on &quot;app-platform-minimal&quot;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Scenarios:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Disable minimal &#8594; error&lt;/li&gt;
	&lt;li&gt;Disable licenses &#8594; error&lt;/li&gt;
	&lt;li&gt;Disable minimal, licenses, agreements in one API call &#8594; success (all three disabled)&lt;/li&gt;
	&lt;li&gt;Re-enable all three apps &#8594; Disable agreements &#8594; success (agreements disabled; licenses, minimal not disabled)&lt;/li&gt;
	&lt;li&gt;Disable licenses &#8594; success (licenses disabled; minimal not disabled)&lt;/li&gt;
	&lt;li&gt;Re-enable all three apps &#8594; Disable licenses, agreements &#8594; success (licenses, agreements disabled; minimal not disabled)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;See examples:&#160;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;/rest/api/3/attachment/content/63767&quot; title=&quot;MGRENTITLE-3_disabling_apps_errors.mp4 attached to MGRENTITLE-3&quot; data-attachment-type=&quot;file&quot; data-attachment-name=&quot;MGRENTITLE-3_disabling_apps_errors.mp4&quot; data-media-services-type=&quot;file&quot; data-media-services-id=&quot;c81d6abf-9cd4-46c1-bfb5-2dbeeb326d19&quot; rel=&quot;noreferrer&quot;&gt;MGRENTITLE-3_disabling_apps_errors.mp4&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;/rest/api/3/attachment/content/63768&quot; title=&quot;MGRENTITLE-3_disabling_apps_success.mp4 attached to MGRENTITLE-3&quot; data-attachment-type=&quot;file&quot; data-attachment-name=&quot;MGRENTITLE-3_disabling_apps_success.mp4&quot; data-media-services-type=&quot;file&quot; data-media-services-id=&quot;9e36348e-81a1-4bdc-b304-5d54ca4c5075&quot; rel=&quot;noreferrer&quot;&gt;MGRENTITLE-3_disabling_apps_success.mp4&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10008">
                    <name>Defines</name>
                                            <outwardlinks description="defines">
                                        <issuelink>
            <issuekey id="13721">UXPROD-4633</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="63767" name="MGRENTITLE-3_disabling_apps_errors.mp4" size="13378661" author="61af2efff24150007266ea04" created="Wed, 3 Jan 2024 10:08:04 +0000"/>
                            <attachment id="63768" name="MGRENTITLE-3_disabling_apps_success.mp4" size="6602420" author="61af2efff24150007266ea04" created="Wed, 3 Jan 2024 10:07:09 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10149"><![CDATA[Eureka]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i08wtk:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="276">Eureka Sprint 42</customfieldvalue>
    <customfieldvalue id="229">Eureka Sprint 43</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Sun, 31 Dec 2023 15:52:36 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>