{
	"name": "Group Sign-Off / Multi-Approval for Jira",
    "description": "Providing a new type of group sign-off fields for approvals be done in parallel. Documentation is available on https://group-sign-off.polscheit.de. Support as well as feature requests via email at support@group-sign-off.polscheit.de. All your data will be stored within your Jira instance and nowhere else. According to GDPR user names are not stored, anonymous Atlassian AccountIds only.",
    "key": "de.polscheit.jira.plugins.group-sign-off",
    "apiMigrations": {
        "gdpr": true
    },
    "baseUrl": "https://polscheit.de/plugins/jira/group-sign-off/cloud",
    "enableLicensing": true,
    "vendor": {
    	"name": "Frank Polscheit - Solutions and IT-Consulting",
        "url": "https://polscheit.de"
	},
    "authentication": {
    	"type": "none"
    },
    "scopes": [ "READ", "WRITE", "DELETE", "ADMIN" ],
    "links": {
		"self": "https://polscheit.de/plugins/jira/group-sign-off/cloud/atlassian-connect.json",
		"documentation": "https://group-sign-off.polscheit.de"
	},
    "modules": { 
    	"jiraReports": [
	      {
	        "url": "/group-sign-off-report",
	        "description": {
	          "value": "Shows all pending issues grouped by deciders. This helps you see who has to approve or decline by Group Sign-Off / Multi-Approvals for pending issues."
	        },
	        "reportCategory": "issue_analysis",
	        "thumbnailUrl": "https://polscheit.de/plugins/jira/group-sign-off/cloud/images/icon-report-pending-issues.png",
	        "name": {
	          "value": "Pending Multi-Approvals/GSO"
	        },
	        "key": "psit-report-pending-issues"
	      }
	    ], 
	    "adminPages": [
	      {
	        "url": "/group-sign-off-config.html",
	        "name": {
	          "value": "Group Sign-Offs"
	        },
	        "key": "psit-global-admin-page"
	      }
	    ],
	    "configurePage": {
	      "url": "/group-sign-off-config.html",
	      "name": {
	        "value": "Group Sign-Offs"
	      },
	      "key": "psit-config-page"
	    },
	    "serviceDeskPortalRequestViewDetailsPanels": [
	        {
	        	"url": "/group-sign-off.html?issuekey={issue.key}",
	            "key": "jsm-portal-request-view-details-content-group-sign-off",
	            "conditions": [
					{
		                "condition": "entity_property_equal_to",
				        "params": {
				        	"entity": "issuetype",
				          	"propertyKey": "groupSignOffProperty",
				          	"objectName": "allowed",
				          	"value": "display"
				        }
		            },
		            {
		                "and": [
		                    {
					            "condition": "entity_property_equal_to",
						        "params": {
						          "entity": "project",
						          "propertyKey": "groupSignOffProperty",
						          "objectName": "allowed",
						          "value": "display"
						        }
					        }
		                ]
		            }
	            ]           
	        }
	    ],
	    "webSections": [{
	        "key": "psit-group-sign-off-project-config-section",
	        "location": "atl.jira.proj.config",
	        "name": {
	          "value": "Group Sign-Off"
	        }
	    }],
    	"jiraProjectAdminTabPanels": [{
	        "location": "psit-group-sign-off-project-config-section",
	        "url": "/group-sign-off-config.html?project.key=${project.key}",
	        "weight": 100,
	        "name": {
	          "value": "Group Sign-Off Fields"
	        },
	        "conditions": [
				{
	                "condition": "user_is_logged_in"
	            }, 
	            {
	                "or": [
	                	{
				            "condition": "user_is_project_admin"
				    	},
				    	{
							"condition": "jira_expression",
							"params": {
								"expression": "project.properties?.style='next-gen'"
							}
						}
					]
	            }
            ],
	        "key": "psit-group-sign-off-project-config-panel"
		}],
		"jiraProjectPages": [
	      {
            "key": "psit-group-sign-off-project-multi-approval",            
            "url": "/group-sign-off-multi-approvals.html?projectKey=${project.key}",
            "iconUrl": "/images/groupSignOffLogo.png",
            "weight": 1,
            "name": {
                "value": "Group Sign-Off"
            },
            "conditions": [		
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        }
	                ]
	            }
            ]
          }
	    ],
	    "webItems": [
		  {
	        "url": "/psit-config-page",
	        "location": "jira.project.sidebar.plugins.navigation",
	        "icon": {
	          "width": 16,
	          "height": 16,
	          "url": "/images/groupSignOffLogo.png"
	        },
	        "weight": 100,
	        "name": {
	          "value": "Group Sign-Off Fields"
	        },
	        "context": "page",
			"target":	{
			   "type": "page",
			   "options": {}
			},
	        "conditions": [
		    	{
					"condition": "jira_expression",
					"params": {
						"expression": "typeof project == 'undefined' || project.style == 'next-gen'"
					}
				}
            ],
	        "key": "psit-config-page-team"
	      }
		],  
		"jiraIssueContents": [{
	        "icon": {
	          "url": "/images/groupSignOffLogo.png"
	        },
	        "target": {
	          "type": "web_panel",
	          "url": "group-sign-off.html?issuekey={issue.key}"
	        },
	        "tooltip": {
	          "value": "Group Sign-Off Approvals"
	        },
	        "name": {
	          "value": ""
	        },
	        "conditions": [
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "issuetype",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{				        
							"condition": "entity_property_equal_to",
							"params": {
							  "entity": "addon",
							  "propertyKey": "groupSignOffProperty",
							  "objectName": "isLeftEnabled",  
							  "value": "true"
							}
						}
	                ]
	            }
            ],
            "contentPresentConditions": [
	          {
	            "condition": "user_is_logged_in"
	          }
	        ],
	        "key": "psit-group-sign-off-leftSide-nextGen"
	    }],    
    	"webPanels": [{
			"url": "/group-sign-off.html?issuekey={issue.key}",
			"location": "atl.jira.view.issue.left.context",
			"conditions": [
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "issuetype",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{				        
							"condition": "entity_property_equal_to",
							"params": {
							  "entity": "addon",
							  "propertyKey": "groupSignOffProperty",
							  "objectName": "isLeftEnabled",  
							  "value": "true"
							}
						}
	                ]
	            }
            ],
			"layout": {
				"width" : "100%",
				"height": "100%"
			},
			"weight": 3,
			"name": {
				"value": " "
			},
			"key": "psit-group-sign-off-leftSide"
		}, {
			"url": "/group-sign-off.html?issuekey={issue.key}",
			"location": "atl.jira.view.issue.right.context",
			"conditions": [
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "issuetype",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{				        
							"condition": "entity_property_equal_to",
							"params": {
							  "entity": "addon",
							  "propertyKey": "groupSignOffProperty",
							  "objectName": "isLeftEnabled",  
							  "value": "false"
							}
						}
	                ]
	            }
            ],
			"layout": {
				"width" : "100%",
				"height": "100%"
			},
			"weight": 50,
			"name": {
				"value": "Group Sign-Off"
			},
			"key": "psit-group-sign-off"
		}],
		
		"jiraIssueContexts": [
	      {
	        "icon": {
	          "width": 24,
	          "height": 24,
	          "url": "/images/groupSignOffLogo.png"
	        },
	        "content": {
	          "type": "label",
	          "label": {
	            "value": "Multi-Approvals"
	          }
	        },
	        "target": {
	          "type": "web_panel",
	          "url": "/group-sign-off.html?issuekey={issue.key}"
	        },
	        "jiraNativeAppsEnabled": true,
	        "name": {
	          "value": "Group Sign-Off"
	        },
	        "key": "psit-group-sign-off-context-panel",
	        "conditions": [
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "issuetype",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{				        
							"condition": "entity_property_equal_to",
							"params": {
							  "entity": "addon",
							  "propertyKey": "groupSignOffProperty",
							  "objectName": "isLeftEnabled",  
							  "value": "false"
							}
						},
						{
				            "condition": "jira_expression",
						    "params": {
						      "expression": "!issue.properties?.approvals || !issue.properties?.approvals?.pending || !issue.properties?.approvals?.pending?.includes(user.accountId)"
						    } 
				        }
	                ]
	            }
            ]
	      },
	      {
	        "icon": {
	          "width": 24,
	          "height": 24,
	          "url": "/images/groupSignOffLogo.png"
	        },
	        "content": {
	          "type": "label",
	          "label": {
	            "value": "You have pending decisions ... "
	          }
	        },
	        "target": {
	          "type": "web_panel",
	          "url": "/group-sign-off.html?issuekey={issue.key}"
	        },
	        "jiraNativeAppsEnabled": true,
	        "name": {
	          "value": "Group Sign-Off"
	        },
	        "key": "psit-group-sign-off-context-pending",
	        "conditions": [
				{
	                "condition": "user_is_logged_in"
	            },
	            {
	                "and": [
	                    {
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "issuetype",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{
				            "condition": "entity_property_equal_to",
					        "params": {
					          "entity": "project",
					          "propertyKey": "groupSignOffProperty",
					          "objectName": "allowed",
					          "value": "display"
					        }
				        },{				        
							"condition": "entity_property_equal_to",
							"params": {
							  "entity": "addon",
							  "propertyKey": "groupSignOffProperty",
							  "objectName": "isLeftEnabled",  
							  "value": "false"
							}
						},{
				            "condition": "jira_expression",
						    "params": {
						      "expression": "issue.properties?.approvals?.pending?.includes(user.accountId)"
						    }
				        }
	                ]
	            }
            ]
	      }
	    ],
		
		"jiraDashboardItems": [
            {
                "name" : {
                    "value" : "Filtered issues incl. Group Sign-Off fields"
                },
                "url" : "/group-sign-off-gadget.html?dashboard={dashboard.id}&dashboardItem={dashboardItem.id}&view={dashboardItem.viewType}",
                "key" : "group-sign-off-gadget",
                "description" : {
                    "value" : "Displaying issues based on specified filter (JQL) with configured columns as gadget on a Jira dashboard"
                },

                "thumbnailUrl": "/images/thumbnailGadget.png",
                "configurable" : true
            }
        ],
		"dialogs":  [{
			"url": "/group-sign-off-create.html?issueKey={issue.key}&project.key=${project.key}",
			"options": {
				"header": {
					"value": "Add a Group Sign-Off field"
				}
			},
			"key": "create-group-sign-off"
		},{
			"url": "/group-sign-off-gadget-config.html?dashboard={dashboard.id}&dashboardItem={dashboardItem.id}&view={dashboardItem.viewType}",
			"options": {
				"header": {
					"value": "Configure Group Sign-Off Gadget"
				}
			},
			"layout": {
				"width" : "900px",
				"height": "100%"
			},
			"key": "config-group-sign-off-gadget"
		},
		{
			"url": "/group-sign-off-delegate.html?issueKey={issue.key}",
			"options": {
				"header": {
					"value": "Delegate decision to another user"
				}
			},
			"key": "delegate-group-sign-off"
		},{
			"url": "/group-sign-off-comment.html?issueKey={issue.key}",
			"options": {
				"header": {
					"value": "Add a comment for decision"
				}
			},
			"key": "comment-group-sign-off"
		}],
		
		"jiraWorkflowConditions": [{
	        "description": {
	          "value": "Group Sign-Off/Multi-Approvals: Condition to block this issue transition for users, but allow configured auto-transition if the rule results in a final 'signed-off'."
	        },
	        "expression": "issue.properties['group-sign-off'].transitionAllowed4SignedOff == true",
	        "name": {
	          "value": "GSO: Block transition (only auto-transition if approved)"
	        },
	        "key": "group-sign-off-workflow-condition-signedOff"
	      },
	      {
	        "description": {
	          "value": "Group Sign-Off/Multi-Approvals: Condition to block issue transition for users, but allow configured auto-transition if the rule results in a final 'declined'."
	        },
	        "expression": "issue.properties['group-sign-off'].transitionAllowed4Declined == true",
	        "name": {
	          "value": "GSO: Block transition (only auto-transition if declined)"
	        },
	        "key": "group-sign-off-workflow-condition-declined"
	      },
	      {
	        "description": {
	          "value": "Group Sign-Off/Multi-Approvals: Condition to enable issue transition for pending issues, detected by issue.properties['group-sign-off-pending'] == true. This must be configured on the tab GSO 'rule'"
	        },
	        "expression": "issue.properties['group-sign-off-pending'] == true",
	        "name": {
	          "value": "GSO: Block transition for none-pending issues only"
	        },
	        "key": "group-sign-off-workflow-condition-pending"
	      },
	      {
	        "description": {
	          "value": "Group Sign-Off/Multi-Approvals: Condition to block this transition until configured Group Sign-Off field(s) are finally decided."
	        },
	        "expression": "app.properties.fields.active.global.map(field => (field.blockedTransitionsUntilSignedOff != null && field.blockedTransitionsUntilSignedOff.split(',').indexOf(''+transition.id) > -1 && issue.properties.groupSignOff.split(',').indexOf(field.name + '=isSignedOff') > -1) || (field.blockedTransitionsUntilDeclined != null && field.blockedTransitionsUntilDeclined.split(',').indexOf(''+transition.id) > -1 && issue.properties.groupSignOff.split(',').indexOf(field.name + '=isDeclined') > -1)).reduce((partialResult, a) => partialResult || a, false)",	        
	        "name": {
	          "value": "GSO: Block transition until finally decided"
	        },
	        "key": "group-sign-off-workflow-condition-by-property"
	      }
	    ],
	    
	    "jiraEntityProperties": [{
		    "key": "group-sign-off-indexing",
		    "name": {
		        "value" :"Group Sign-Off/Multi-Approval Index"
		    },
		    "entityType": "issue",
		    "keyConfigurations": [{
		        "propertyKey" : "approvals",
		        "extractions" : [{
		            "objectName" : "deciders",
		            "type" :       "text"
		        }]
		    },{
		        "propertyKey" : "approvals",
		        "extractions" : [{
		            "objectName" : "pending",
		            "type" :       "text"
		        }]
		    },{
		        "propertyKey" : "approvals",
		        "extractions" : [{
		            "objectName" : "signedOff",
		            "type" :       "text"
		        }]
		    },{
		        "propertyKey" : "approvals",
		        "extractions" : [{
		            "objectName" : "declined",
		            "type" :       "text"
		        }]
		    },{
		        "propertyKey" : "groupSignOff",
		        "extractions" : [{
		            "objectName" : "fields",
		            "type" :       "text"
		        }]
		    }]
		}]
	}
}
