From 20815d11d8813b7360e55c3089ce0b1f5978441e Mon Sep 17 00:00:00 2001 From: mxmlnwbr <71628027+mxmlnwbr@users.noreply.github.com> Date: Wed, 29 Nov 2023 15:05:44 +0100 Subject: [PATCH] enhance(solution): FlowSecret added for flows with HTTP request and updated solutions folder (#15) --- solutions/UZHBFThesisPlatform.zip | Bin 28458 -> 39370 bytes .../Other/Customizations.xml | 68 + .../{solution.xml => Other/Solution.xml} | 174 +- ...-7C987104-6984-EE11-8179-002248DB4B50.json | 568 +++++ ...-6984-EE11-8179-002248DB4B50.json.data.xml | 26 + ...-3050E705-262A-EE11-BDF5-000D3A831DD0.json | 882 ++++--- ...-262A-EE11-BDF5-000D3A831DD0.json.data.xml | 26 + ...-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json | 1898 ++++++++------ ...-202A-EE11-BDF5-000D3A831DD0.json.data.xml | 26 + ...-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json | 1160 +++++---- ...-152A-EE11-BDF5-000D3A831DD0.json.data.xml | 26 + ...-D12D741B-A027-EE11-9966-000D3A8321BD.json | 2256 +++++++++-------- ...-A027-EE11-9966-000D3A8321BD.json.data.xml | 26 + .../UZHBFThesisPlatform/[Content_Types].xml | 1 - .../UZHBFThesisPlatform/customizations.xml | 161 -- .../environmentvariabledefinition.xml | 10 + .../environmentvariabledefinition.xml | 10 + .../environmentvariabledefinition.xml | 10 + solutions/UZHBFThesisPlatform_managed.zip | Bin 28455 -> 39367 bytes src/server/routers/_app.ts | 19 +- 20 files changed, 4510 insertions(+), 2837 deletions(-) create mode 100644 solutions/UZHBFThesisPlatform/Other/Customizations.xml rename solutions/UZHBFThesisPlatform/{solution.xml => Other/Solution.xml} (94%) create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json.data.xml create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json.data.xml create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json.data.xml create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json.data.xml create mode 100644 solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json.data.xml delete mode 100644 solutions/UZHBFThesisPlatform/[Content_Types].xml delete mode 100644 solutions/UZHBFThesisPlatform/customizations.xml create mode 100644 solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_email_failure_env_var/environmentvariabledefinition.xml create mode 100644 solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_environment_env_var/environmentvariabledefinition.xml create mode 100644 solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_flow_secret_env_var/environmentvariabledefinition.xml diff --git a/solutions/UZHBFThesisPlatform.zip b/solutions/UZHBFThesisPlatform.zip index e7cc78f345769ef2022a754e371d9872cbd161c5..4010bdbf3c6e88aac298a67dfd940000d7671c95 100644 GIT binary patch delta 32262 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 aN^+k+P6jYA%#U{oJQx`AM=Dh?u>S`vjmZ}P delta 21934 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 K=Qd*v1o}UCK_Y(u diff --git a/solutions/UZHBFThesisPlatform/Other/Customizations.xml b/solutions/UZHBFThesisPlatform/Other/Customizations.xml new file mode 100644 index 0000000..811e275 --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Other/Customizations.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + Azure Blob Reference + /providers/Microsoft.PowerApps/apis/shared_azureblob + 1 + 0 + 1 + + + Forms Reference + /providers/Microsoft.PowerApps/apis/shared_microsoftforms + 1 + 0 + 1 + + + Mail Reference + /providers/Microsoft.PowerApps/apis/shared_sendmail + 1 + 0 + 1 + + + OneDrive Reference + /providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness + 1 + 0 + 1 + + + Outlook 365 Reference + /providers/Microsoft.PowerApps/apis/shared_office365 + 1 + 0 + 1 + + + SharePoint Reference + /providers/Microsoft.PowerApps/apis/shared_sharepointonline + 1 + 0 + 1 + + + SQL Reference + /providers/Microsoft.PowerApps/apis/shared_azuremysql + 1 + 0 + 1 + + + + 1033 + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/solution.xml b/solutions/UZHBFThesisPlatform/Other/Solution.xml similarity index 94% rename from solutions/UZHBFThesisPlatform/solution.xml rename to solutions/UZHBFThesisPlatform/Other/Solution.xml index f9d761f..d8af1ce 100644 --- a/solutions/UZHBFThesisPlatform/solution.xml +++ b/solutions/UZHBFThesisPlatform/Other/Solution.xml @@ -1,87 +1,89 @@ - - - UZHBFThesisPlatform - - - - - 0.0.0.4 - 0 - - UZHBF - - - - - - https://www.bf.uzh.ch - uzhbf - 81783 - -
- 1 - 1 - - - - - - - - - - - - - - - - 1 - - - - - - - - -
-
- 2 - 1 - - - - - - - - - - - - - - - - 1 - - - - - - - - -
-
-
- - - - - - - -
+ + + + UZHBFThesisPlatform + + + + + 0.0.0.4 + 2 + + UZHBF + + + + + + https://www.bf.uzh.ch + uzhbf + 81783 + +
+ 1 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+ 2 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+
+ + + + + + + + +
\ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json new file mode 100644 index 0000000..ed4ea4e --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json @@ -0,0 +1,568 @@ +{ + "properties": { + "connectionReferences": { + "shared_azuremysql": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_sql_ref" + }, + "api": { + "name": "shared_azuremysql" + } + }, + "shared_office365": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_outlook365_ref" + }, + "api": { + "name": "shared_office365" + } + }, + "shared_sendmail-2": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_mail_ref" + }, + "api": { + "name": "shared_sendmail" + } + } + }, + "definition": { + "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "$connections": { + "defaultValue": {}, + "type": "Object" + }, + "$authentication": { + "defaultValue": {}, + "type": "SecureObject" + }, + "Environment (uzhbf_thesisplatform_environment_env_var)": { + "defaultValue": "DEV", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_environment_env_var" + } + }, + "Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)": { + "defaultValue": "flow@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_email_failure_env_var" + } + }, + "Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)": { + "defaultValue": "maximilian.weber@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_outlook_from_address_env_var" + } + }, + "Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)": { + "defaultValue": "maximilian.weber@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_thesis_inbox_env_var" + } + }, + "Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)": { + "defaultValue": "abcd", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_flow_secret_env_var" + } + } + }, + "triggers": { + "manual": { + "metadata": { + "operationMetadataId": "1c77e3d6-3094-4200-b0d9-961cba7869ca" + }, + "type": "Request", + "kind": "Http", + "inputs": { + "schema": { + "type": "object", + "properties": { + "proposalId": { + "type": "string" + }, + "proposalApplicationId": { + "type": "string" + }, + "applicantEmail": { + "type": "string" + } + } + }, + "triggerAuthenticationType": "All" + }, + "conditions": [] + } + }, + "actions": { + "Try": { + "actions": { + "UpdateProposalMatched": { + "runAfter": { + "GetProposalInfo": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "b16d2167-065d-479e-bb4d-9792c4e41f51" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "id": "@triggerBody()?['proposalId']", + "item/createdAt": "@outputs('GetProposalInfo')?['body/createdAt']", + "item/description": "@outputs('GetProposalInfo')?['body/description']", + "item/language": "@outputs('GetProposalInfo')?['body/language']", + "item/statusKey": "MATCHED", + "item/studyLevel": "@outputs('GetProposalInfo')?['body/studyLevel']", + "item/title": "@outputs('GetProposalInfo')?['body/title']", + "item/topicAreaSlug": "@outputs('GetProposalInfo')?['body/topicAreaSlug']", + "item/typeKey": "@outputs('GetProposalInfo')?['body/typeKey']", + "item/updatedAt": "@outputs('GetProposalInfo')?['body/updatedAt']", + "item/ownedByStudent": "@outputs('GetProposalInfo')?['body/ownedByStudent']", + "item/ownedByUserEmail": "@outputs('GetProposalInfo')?['body/ownedByUserEmail']", + "item/timeFrame": "@outputs('GetProposalInfo')?['body/timeFrame']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "GetUserProposalSupervisionInfo": { + "runAfter": { + "UpdateProposalMatched": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "63daa442-83a1-4ed0-95fa-d8b2ed6fe0f4" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "id": "@triggerBody()?['proposalId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateUserProposalSupervisionStudentEmail": { + "runAfter": { + "GetUserProposalSupervisionInfo": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "a946287f-1a21-4d92-95e7-a21dc927e738" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "id": "@triggerBody()?['proposalId']", + "item/proposalId": "@outputs('GetUserProposalSupervisionInfo')?['body/proposalId']", + "item/studentEmail": "@triggerBody()?['applicantEmail']", + "item/studyLevel": "@outputs('GetUserProposalSupervisionInfo')?['body/studyLevel']", + "item/supervisorEmail": "@outputs('GetUserProposalSupervisionInfo')?['body/supervisorEmail']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "GetProposalApplicationInfo": { + "runAfter": { + "UpdateUserProposalSupervisionStudentEmail": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "bd966497-1196-4e6d-a954-bcac82c25a74" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "id": "@triggerBody()?['proposalApplicationId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateProposalApplicationAccepted": { + "runAfter": { + "GetProposalApplicationInfo": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "6120af66-b299-4cd8-acd2-88a3d16d415d" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "id": "@triggerBody()?['proposalApplicationId']", + "item/createdAt": "@outputs('GetProposalApplicationInfo')?['body/createdAt']", + "item/email": "@outputs('GetProposalApplicationInfo')?['body/email']", + "item/fullName": "@outputs('GetProposalApplicationInfo')?['body/fullName']", + "item/matriculationNumber": "@outputs('GetProposalApplicationInfo')?['body/matriculationNumber']", + "item/motivation": "@outputs('GetProposalApplicationInfo')?['body/motivation']", + "item/plannedStartAt": "@outputs('GetProposalApplicationInfo')?['body/plannedStartAt']", + "item/proposalId": "@outputs('GetProposalApplicationInfo')?['body/proposalId']", + "item/statusKey": "ACCEPTED", + "item/updatedAt": "@outputs('GetProposalApplicationInfo')?['body/updatedAt']", + "item/supervisionId": "@triggerBody()?['proposalId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "GetProposalApplicationsToDecline": { + "runAfter": { + "UpdateProposalApplicationAccepted": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "f242d66b-b23c-4821-a6e9-102375f81242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "$filter": "proposalId eq '@{triggerBody()?['proposalId']}' and email ne '@{triggerBody()?['applicantEmail']}'" + }, + "authentication": "@parameters('$authentication')" + } + }, + "Apply_to_each": { + "foreach": "@outputs('GetProposalApplicationsToDecline')?['body/value']", + "actions": { + "UpdateProposalApplicationDeclined": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "2598e0d2-d6a3-496b-acf6-eb2f24cc1acd" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "id": "@items('Apply_to_each')?['id']", + "item/createdAt": "@items('Apply_to_each')?['createdAt']", + "item/email": "@items('Apply_to_each')?['email']", + "item/fullName": "@items('Apply_to_each')?['fullName']", + "item/matriculationNumber": "@items('Apply_to_each')?['matriculationNumber']", + "item/motivation": "@items('Apply_to_each')?['motivation']", + "item/plannedStartAt": "@items('Apply_to_each')?['plannedStartAt']", + "item/proposalId": "@items('Apply_to_each')?['proposalId']", + "item/statusKey": "DECLINED", + "item/updatedAt": "@items('Apply_to_each')?['updatedAt']", + "item/supervisionId": "@null" + }, + "authentication": "@parameters('$authentication')" + } + }, + "DeclineApplicantNotification": { + "runAfter": { + "UpdateProposalApplicationDeclined": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "33021eda-e781-4cdf-838e-7280251ec03f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365", + "operationId": "SendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/To": "@outputs('UpdateProposalApplicationDeclined')?['body/email']", + "emailMessage/Subject": "BF Theses - Proposal Application Declined", + "emailMessage/Body": "

Dear @{outputs('UpdateProposalApplicationDeclined')?['body/fullName']},
\n
\nWe are sorry to inform you, that your application on the proposal \"@{outputs('GetProposalInfo')?['body/title']}\" was declined.
\n
\nBest regards,
\nDBF Thesis Coordinator

", + "emailMessage/From": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } + } + }, + "runAfter": { + "GetProposalApplicationsToDecline": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5ae870fc-77a2-4074-844a-5d1ef4da9f2b" + }, + "type": "Foreach" + }, + "GetProposalInfo": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "8db4975b-3fdf-4b60-a02f-5781177d3524" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "id": "@triggerBody()?['proposalId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "AccepApplicantNotification": { + "runAfter": { + "Apply_to_each": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "c770ade3-7921-45b3-802e-c0c6af531b87" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365", + "operationId": "SendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/To": "@triggerBody()?['applicantEmail']", + "emailMessage/Subject": "BF Theses - Proposal Application Accepted", + "emailMessage/Body": "

Dear @{outputs('UpdateProposalApplicationAccepted')?['body/fullName']},
\n
\nYour application to the proposal \"@{outputs('UpdateProposalMatched')?['body/title']}\", was accepted.
\nKindly get in touch with your supervisor by replying to this email within one week.
\n
\nBest regards,
\nDBF Thesis Coordinator

", + "emailMessage/From": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/Cc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/ReplyTo": "@outputs('UpdateUserProposalSupervisionStudentEmail')?['body/supervisorEmail']", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } + }, + "Response": { + "runAfter": { + "AccepApplicantNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "683d1d81-839c-4789-b0f5-5246ea53241d" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": { + "message": "success" + } + } + } + }, + "runAfter": { + "IsFLowSecretCorrect": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7d8a472-e6f6-4fed-9b99-4c9f7109fc71" + }, + "type": "Scope" + }, + "Catch": { + "actions": { + "FilterForFailedOrTimedOutStatus": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "ca1bedd8-7555-4a99-a290-1c22c2e6e229" + }, + "type": "Query", + "inputs": { + "from": "@result('Try')", + "where": "@or(equals(item()?['Status'], 'Failed'), equals(item()?['Status'], 'TimedOut'))" + } + }, + "CreateHtmlTable": { + "runAfter": { + "FilterForFailedOrTimedOutStatus": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "34b6a96f-64c6-43fd-89a3-fe7d5ef245ff" + }, + "type": "Table", + "inputs": { + "from": "@body('FilterForFailedOrTimedOutStatus')", + "format": "HTML", + "columns": [ + { + "header": "ProposalId", + "value": "@triggerBody()?['proposalId']" + }, + { + "header": "proposalApplicationId", + "value": "@triggerBody()?['proposalApplicationId']" + }, + { + "header": "applicantEmail", + "value": "@triggerBody()?['applicantEmail']" + }, + { + "header": "ErrorCode", + "value": "@item()?['code']" + } + ] + } + }, + "Terminate": { + "runAfter": { + "SendFailureNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0f41eff7-41db-4eae-8e12-46f64d545e8b" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } + }, + "SendFailureNotification": { + "runAfter": { + "CreateHtmlTable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7c370de-36de-45b2-ae99-b7d0e7013242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sendmail-2", + "operationId": "SendEmailV3", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail" + }, + "parameters": { + "request/to": "@{parameters('Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)')};", + "request/subject": "(@{parameters('Environment (uzhbf_thesisplatform_environment_env_var)')}) Failure in UZH BF Thesis Platform - Thesis Application Acceptance", + "request/text": "

@{body('CreateHtmlTable')}

" + }, + "authentication": "@parameters('$authentication')" + } + } + }, + "runAfter": { + "Try": [ + "TimedOut", + "Failed" + ] + }, + "metadata": { + "operationMetadataId": "054f28a3-080c-4f8a-9529-1183121f12f9" + }, + "type": "Scope" + }, + "IsFLowSecretCorrect": { + "actions": {}, + "runAfter": {}, + "else": { + "actions": { + "Terminate_2": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "b0e5bdca-638d-4f99-bf6a-88e22b939ecb" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } + } + } + }, + "expression": { + "equals": [ + "@triggerOutputs()['headers']['secretKey']", + "@parameters('Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)')" + ] + }, + "metadata": { + "operationMetadataId": "2e8497de-b65d-41bd-bc3e-8d913d2aba3c" + }, + "type": "If" + } + }, + "outputs": {} + }, + "templateName": "" + }, + "schemaVersion": "1.0.0.0" +} \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json.data.xml b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json.data.xml new file mode 100644 index 0000000..437373d --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json.data.xml @@ -0,0 +1,26 @@ + + + /Workflows/UZHBFThesisPlatform-ThesisApplicationAcceptance-7C987104-6984-EE11-8179-002248DB4B50.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 0.0.0.4 + 1 + 0 + 1 + none + + + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json index 0bab030..d1716e8 100644 --- a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json @@ -10,22 +10,22 @@ "name": "shared_azureblob" } }, - "shared_azuremysql": { + "shared_sharepointonline": { "runtimeSource": "embedded", "connection": { - "connectionReferenceLogicalName": "uzhbf_thesisplatform_sql_ref" + "connectionReferenceLogicalName": "uzhbf_thesisplatform_sharePoint_ref" }, "api": { - "name": "shared_azuremysql" + "name": "shared_sharepointonline" } }, - "shared_sharepointonline": { + "shared_azuremysql": { "runtimeSource": "embedded", "connection": { - "connectionReferenceLogicalName": "uzhbf_thesisplatform_sharePoint_ref" + "connectionReferenceLogicalName": "uzhbf_thesisplatform_sql_ref" }, "api": { - "name": "shared_sharepointonline" + "name": "shared_azuremysql" } }, "shared_office365_1": { @@ -36,6 +36,15 @@ "api": { "name": "shared_office365" } + }, + "shared_sendmail-2": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_mail_ref" + }, + "api": { + "name": "shared_sendmail" + } } }, "definition": { @@ -77,6 +86,27 @@ "metadata": { "schemaName": "uzhbf_thesisplatform_proposals_document_library_name_env_var" } + }, + "Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)": { + "defaultValue": "flow@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_email_failure_env_var" + } + }, + "Environment (uzhbf_thesisplatform_environment_env_var)": { + "defaultValue": "DEV", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_environment_env_var" + } + }, + "Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)": { + "defaultValue": "abcd", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_flow_secret_env_var" + } } }, "triggers": { @@ -178,363 +208,569 @@ "type": "object" }, "triggerAuthenticationType": "All" - } + }, + "conditions": [] } }, "actions": { - "GetCvFile": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "bb3743dd-d6ee-4df7-98fb-a803dc4475db" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azureblob_1", - "operationId": "GetFileContentByPath_V2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" - }, - "parameters": { - "dataset": "AccountNameFromSettings", - "path": "/uploads/uploads/@{triggerBody()?['cvFile']}", - "inferContentType": true + "Try": { + "actions": { + "GetCvFile": { + "runAfter": { + "DummyCompose": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "bb3743dd-d6ee-4df7-98fb-a803dc4475db" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azureblob_1", + "operationId": "GetFileContentByPath_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + }, + "parameters": { + "dataset": "AccountNameFromSettings", + "path": "/uploads/uploads/@{triggerBody()?['cvFile']}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "GetTranscriptFile": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "14d1a5f7-c71b-418c-b446-255db09927ce" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azureblob_1", - "operationId": "GetFileContentByPath_V2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + "GetTranscriptFile": { + "runAfter": { + "DummyCompose": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "14d1a5f7-c71b-418c-b446-255db09927ce" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azureblob_1", + "operationId": "GetFileContentByPath_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + }, + "parameters": { + "dataset": "AccountNameFromSettings", + "path": "uploads/uploads/@{triggerBody()?['transcriptFile']}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "dataset": "AccountNameFromSettings", - "path": "uploads/uploads/@{triggerBody()?['transcriptFile']}", - "inferContentType": true + "CreateCvFile": { + "runAfter": { + "GetCvFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "eed4a74f-45b2-460b-a92b-de312a86d0c5" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Applications/@{triggerBody()?['proposalid']}", + "name": "@triggerBody()?['cvFile']", + "body": "@body('GetCvFile')" + }, + "authentication": "@parameters('$authentication')" + }, + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } }, - "authentication": "@parameters('$authentication')" - } - }, - "PersistCVAttachment": { - "runAfter": { - "PersistApplication": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "810da8cd-a83d-482f-82ab-399a9bc6076d" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "CreateTranscriptFile": { + "runAfter": { + "GetTranscriptFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4ab39de7-1c7d-4bbd-8986-da3028cd1dd0" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Applications/@{triggerBody()?['proposalid']}", + "name": "@triggerBody()?['transcriptFile']", + "body": "@body('GetTranscriptFile')" + }, + "authentication": "@parameters('$authentication')" + }, + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[applicationattachment]", - "item/createdAt": "@outputs('PersistApplication')?['body/createdAt']", - "item/href": "@{parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')}/ProposalDocuments/@{triggerBody()?['cvFile']}?csf=1&web=1&e=e8kFFE", - "item/id": "@guid()", - "item/name": "CV", - "item/proposalApplicationId": "@outputs('PersistApplication')?['body/id']", - "item/type": "application/pdf", - "item/updatedAt": "@outputs('PersistApplication')?['body/updatedAt']" + "DeleteCvFile": { + "runAfter": { + "CreateSharingLinkCv": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "74ffde33-ac17-45f9-b451-f2c07ea4bf45" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azureblob_1", + "operationId": "DeleteFile_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + }, + "parameters": { + "dataset": "AccountNameFromSettings", + "id": "/uploads/uploads/@{triggerBody()?['cvFile']}" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "PersistApplication": { - "runAfter": { - "DeleteCvFile": [ - "Succeeded" - ], - "DeleteTranscriptFile": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "522c8733-2c39-429f-8220-5d9b6df00127" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "DeleteTranscriptFile": { + "runAfter": { + "CreateSharingLinkTranscript": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4db17421-881c-41cc-acdc-0c0610313238" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azureblob_1", + "operationId": "DeleteFile_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + }, + "parameters": { + "dataset": "AccountNameFromSettings", + "id": "/uploads/uploads/@{triggerBody()?['transcriptFile']}" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalapplication]", - "item/createdAt": "@utcNow()", - "item/email": "@triggerBody()?['uzhemail']", - "item/fullName": "@triggerBody()?['fullname']", - "item/id": "@guid()", - "item/matriculationNumber": "@triggerBody()?['matriculationnumber']", - "item/motivation": "@triggerBody()?['motivation']", - "item/plannedStartAt": "@triggerBody()?['startingdate']", - "item/proposalId": "@triggerBody()?['proposalid']", - "item/statusKey": "OPEN", - "item/updatedAt": "@utcNow()" + "DummyCompose": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "a5851fcd-2650-45a7-b21a-f62032a98939" + }, + "type": "Compose", + "inputs": "DoNothing" }, - "authentication": "@parameters('$authentication')" - } - }, - "PersistTranscriptAttachment": { - "runAfter": { - "PersistApplication": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "0bd344e8-ef1b-4632-9084-08bb9284b023" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "PersistApplication": { + "runAfter": { + "DeleteCvFile": [ + "Succeeded" + ], + "DeleteTranscriptFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "522c8733-2c39-429f-8220-5d9b6df00127" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "item/createdAt": "@utcNow()", + "item/email": "@triggerBody()?['uzhemail']", + "item/fullName": "@triggerBody()?['fullname']", + "item/id": "@guid()", + "item/matriculationNumber": "@triggerBody()?['matriculationnumber']", + "item/motivation": "@triggerBody()?['motivation']", + "item/plannedStartAt": "@triggerBody()?['startingdate']", + "item/proposalId": "@triggerBody()?['proposalid']", + "item/statusKey": "OPEN", + "item/updatedAt": "@utcNow()" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[applicationattachment]", - "item/createdAt": "@outputs('PersistApplication')?['body/createdAt']", - "item/href": "@{parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')}/ProposalDocuments/@{triggerBody()?['transcriptFile']}?csf=1&web=1&e=e8kFFE", - "item/id": "@guid()", - "item/name": "Transcript", - "item/proposalApplicationId": "@outputs('PersistApplication')?['body/id']", - "item/type": "application/pdf", - "item/updatedAt": "@outputs('PersistApplication')?['body/updatedAt']" + "PersistCVAttachment": { + "runAfter": { + "PersistApplication": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "810da8cd-a83d-482f-82ab-399a9bc6076d" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[applicationattachment]", + "item/createdAt": "@outputs('PersistApplication')?['body/createdAt']", + "item/href": "@outputs('CreateSharingLinkCv')?['body/link/webUrl']", + "item/id": "@guid()", + "item/name": "CV", + "item/proposalApplicationId": "@outputs('PersistApplication')?['body/id']", + "item/type": "application/pdf", + "item/updatedAt": "@outputs('PersistApplication')?['body/updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "DeleteCvFile": { - "runAfter": { - "CreateCvFile": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "74ffde33-ac17-45f9-b451-f2c07ea4bf45" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azureblob_1", - "operationId": "DeleteFile_V2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + "PersistTranscriptAttachment": { + "runAfter": { + "PersistApplication": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0bd344e8-ef1b-4632-9084-08bb9284b023" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[applicationattachment]", + "item/createdAt": "@outputs('PersistApplication')?['body/createdAt']", + "item/href": "@outputs('CreateSharingLinkTranscript')?['body/link/webUrl']", + "item/id": "@guid()", + "item/name": "Transcript", + "item/proposalApplicationId": "@outputs('PersistApplication')?['body/id']", + "item/type": "application/pdf", + "item/updatedAt": "@outputs('PersistApplication')?['body/updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "dataset": "AccountNameFromSettings", - "id": "/uploads/uploads/@{triggerBody()?['cvFile']}" + "GetSupervisionDetails": { + "runAfter": { + "PersistCVAttachment": [ + "Succeeded" + ], + "PersistTranscriptAttachment": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "c2302b30-1c82-4814-8626-4407bb56d96a" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "id": "@triggerBody()?['proposalid']" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "DeleteTranscriptFile": { - "runAfter": { - "CreateTranscriptFile": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "4db17421-881c-41cc-acdc-0c0610313238" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azureblob_1", - "operationId": "DeleteFile_V2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azureblob" + "GetProposalDetails": { + "runAfter": { + "GetSupervisionDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4e03df1b-d764-44ec-a381-aadfe9a57e22" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "id": "@triggerBody()?['proposalid']" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "dataset": "AccountNameFromSettings", - "id": "/uploads/uploads/@{triggerBody()?['transcriptFile']}" + "SendSupervisorNotification": { + "runAfter": { + "GetProposalDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "9e603a4f-32f8-4286-a880-1c55703f8dba" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@outputs('GetSupervisionDetails')?['body/supervisorEmail']", + "emailMessage/Subject": "DBF Theses - New Application for Proposal \"@{outputs('GetProposalDetails')?['body/title']}\"", + "emailMessage/Body": "

Fullname: @{triggerBody()?['fullname']}
\nMatriculation Number: @{triggerBody()?['matriculationnumber']}
\nStart Date: @{triggerBody()?['startingdate']}
\nMotivation: @{triggerBody()?['motivation']}
\n
\nTranscript:
\n
@{outputs('CreateSharingLinkTranscript')?['body/link/webUrl']}
\nPersonal CV:
\n
@{outputs('CreateSharingLinkCv')?['body/link/webUrl']}

", + "emailMessage/Cc": "@outputs('GetProposalDetails')?['body/ownedByUserEmail']", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/ReplyTo": "@triggerBody()?['uzhemail']", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "CreateCvFile": { - "runAfter": { - "GetCvFile": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "eed4a74f-45b2-460b-a92b-de312a86d0c5" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_sharepointonline", - "operationId": "CreateFile", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + "SendStudentConfirmation": { + "runAfter": { + "SendSupervisorNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "b04c8a2d-0210-48ae-bb35-86d85590fac8" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@triggerBody()?['uzhemail']", + "emailMessage/Subject": "BF Theses - Confirmation Mail", + "emailMessage/Body": "

Dear @{triggerBody()?['fullname']},
\n
\nThank you for applying to the following proposal: \"@{outputs('GetProposalDetails')?['body/title']}\".
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nFullname: @{triggerBody()?['fullname']}
\nMatriculation Number: @{triggerBody()?['matriculationnumber']}
\nStart Date: @{triggerBody()?['startingdate']}
\nMotivation: @{triggerBody()?['motivation']}

", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Applications/@{triggerBody()?['proposalid']}", - "name": "@triggerBody()?['cvFile']", - "body": "@body('GetCvFile')" + "CreateSharingLinkCv": { + "runAfter": { + "CreateCvFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "93899caf-113e-4aeb-af1c-884dd4c38f2d" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('CreateCvFile')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" + "CreateSharingLinkTranscript": { + "runAfter": { + "CreateTranscriptFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0c89f939-751e-44ef-bd8f-b2de0a916585" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('CreateTranscriptFile')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } } - } - }, - "CreateTranscriptFile": { + }, "runAfter": { - "GetTranscriptFile": [ + "IsFLowSecretCorrect": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "4ab39de7-1c7d-4bbd-8986-da3028cd1dd0" + "operationMetadataId": "5dc24c86-4241-49a2-adcd-c9bdc6f126d3" }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_sharepointonline", - "operationId": "CreateFile", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + "type": "Scope" + }, + "Catch": { + "actions": { + "FilterForFailedOrTimedOutStatus": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "ca1bedd8-7555-4a99-a290-1c22c2e6e229" + }, + "type": "Query", + "inputs": { + "from": "@result('Try')", + "where": "@or(equals(item()?['Status'], 'Failed'), equals(item()?['Status'], 'TimedOut'))" + } + }, + "CreateHtmlTable": { + "runAfter": { + "FilterForFailedOrTimedOutStatus": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "34b6a96f-64c6-43fd-89a3-fe7d5ef245ff" + }, + "type": "Table", + "inputs": { + "from": "@body('FilterForFailedOrTimedOutStatus')", + "format": "HTML", + "columns": [ + { + "header": "ProposalId", + "value": "@triggerBody()?['proposalid']" + }, + { + "header": "ProposalTitle", + "value": "@triggerBody()?['proposalTitle']" + }, + { + "header": "Email", + "value": "@triggerBody()?['uzhemail']" + }, + { + "header": "ErrorCode", + "value": "@item()?['code']" + } + ] + } }, - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Applications/@{triggerBody()?['proposalid']}", - "name": "@triggerBody()?['transcriptFile']", - "body": "@body('GetTranscriptFile')" + "Terminate": { + "runAfter": { + "SendFailureNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0f41eff7-41db-4eae-8e12-46f64d545e8b" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } }, - "authentication": "@parameters('$authentication')" - }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" + "SendFailureNotification": { + "runAfter": { + "CreateHtmlTable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7c370de-36de-45b2-ae99-b7d0e7013242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sendmail-2", + "operationId": "SendEmailV3", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail" + }, + "parameters": { + "request/to": "@{parameters('Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)')};", + "request/subject": "(@{parameters('Environment (uzhbf_thesisplatform_environment_env_var)')}) Failure in UZH BF Thesis Platform - Thesis Proposal Application", + "request/text": "

@{body('CreateHtmlTable')}

" + }, + "authentication": "@parameters('$authentication')" + } } - } - }, - "GetProposalDetails": { - "runAfter": { - "GetSupervisionDetails": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "4e03df1b-d764-44ec-a381-aadfe9a57e22" }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "GetItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "id": "@triggerBody()?['proposalid']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "GetSupervisionDetails": { "runAfter": { - "PersistCVAttachment": [ - "Succeeded" - ], - "PersistTranscriptAttachment": [ - "Succeeded" + "Try": [ + "Failed", + "TimedOut" ] }, "metadata": { - "operationMetadataId": "c2302b30-1c82-4814-8626-4407bb56d96a" + "operationMetadataId": "054f28a3-080c-4f8a-9529-1183121f12f9" }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "GetItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalsupervision]", - "id": "@triggerBody()?['proposalid']" - }, - "authentication": "@parameters('$authentication')" - } + "type": "Scope" }, - "SendSupervisorNotification": { - "runAfter": { - "GetProposalDetails": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "9e603a4f-32f8-4286-a880-1c55703f8dba" + "IsFLowSecretCorrect": { + "actions": {}, + "runAfter": {}, + "else": { + "actions": { + "Terminate_2": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "b0e5bdca-638d-4f99-bf6a-88e22b939ecb" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } + } + } }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@outputs('GetSupervisionDetails')?['body/supervisorEmail']", - "emailMessage/Subject": "DBF Theses - New Application for Proposal \"@{outputs('GetProposalDetails')?['body/title']}\"", - "emailMessage/Body": "

Fullname: @{triggerBody()?['fullname']}
\nMatriculation Number: @{triggerBody()?['matriculationnumber']}
\nStart Date: @{triggerBody()?['startingdate']}
\nMotivation: @{triggerBody()?['motivation']}
\n
\nTranscript: https://uzh.sharepoint.com/sites/UZHBFThesisPlatformDEV/ProposalDocuments/Applications/@{triggerBody()?['proposalid']}/@{triggerBody()?['cvFile']}
\nPersonal CV: https://uzh.sharepoint.com/sites/UZHBFThesisPlatformDEV/ProposalDocuments/Applications/@{triggerBody()?['proposalid']}/@{triggerBody()?['transcriptFile']}
\n
\n

", - "emailMessage/Cc": "@outputs('GetProposalDetails')?['body/ownedByUserEmail']", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/ReplyTo": "@triggerBody()?['uzhemail']", - "emailMessage/Importance": "Normal" - }, - "authentication": "@parameters('$authentication')" - } - }, - "SendStudentConfirmation": { - "runAfter": { - "SendSupervisorNotification": [ - "Succeeded" + "expression": { + "equals": [ + "@triggerOutputs()['headers']['secretKey']", + "@parameters('Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)')" ] }, "metadata": { - "operationMetadataId": "b04c8a2d-0210-48ae-bb35-86d85590fac8" + "operationMetadataId": "2e8497de-b65d-41bd-bc3e-8d913d2aba3c" }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@triggerBody()?['uzhemail']", - "emailMessage/Subject": "BF Theses - Confirmation Mail", - "emailMessage/Body": "

Dear @{triggerBody()?['fullname']},
\n
\nThank you for applying to the following proposal: \"@{outputs('GetProposalDetails')?['body/title']}\".
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nFullname: @{triggerBody()?['fullname']}
\nMatriculation Number: @{triggerBody()?['matriculationnumber']}
\nStart Date: @{triggerBody()?['startingdate']}
\nMotivation: @{triggerBody()?['motivation']}

", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/Importance": "Normal" - }, - "authentication": "@parameters('$authentication')" - } + "type": "If" } } }, diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json.data.xml b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json.data.xml new file mode 100644 index 0000000..480028b --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json.data.xml @@ -0,0 +1,26 @@ + + + /Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 0.0.0.1 + 1 + 0 + 1 + none + + + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json index ce3d375..71ae718 100644 --- a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json @@ -27,6 +27,15 @@ "api": { "name": "shared_office365" } + }, + "shared_sendmail-2": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_mail_ref" + }, + "api": { + "name": "shared_sendmail" + } } }, "definition": { @@ -68,6 +77,27 @@ "metadata": { "schemaName": "uzhbf_thesisplatform_supervisors_list_name_env_var" } + }, + "Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)": { + "defaultValue": "flow@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_email_failure_env_var" + } + }, + "Environment (uzhbf_thesisplatform_environment_env_var)": { + "defaultValue": "DEV", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_environment_env_var" + } + }, + "Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)": { + "defaultValue": "abcd", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_flow_secret_env_var" + } } }, "triggers": { @@ -120,672 +150,618 @@ "type": "object" }, "triggerAuthenticationType": "All" - } + }, + "conditions": [] } }, "actions": { - "GetMatchingProposal": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "979db1ef-80b7-44c7-9a52-47de305a3e9f" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "GetItems", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "Try": { + "actions": { + "DummyCompose": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "17a1a8f0-2e50-4873-85ba-308b2695fa8a" + }, + "type": "Compose", + "inputs": "DoNothing" }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "$filter": "id eq '@{triggerBody()?['proposalId']}'", - "$top": 1 + "GetMatchingProposal": { + "runAfter": { + "DummyCompose": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "979db1ef-80b7-44c7-9a52-47de305a3e9f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "$filter": "id eq '@{triggerBody()?['proposalId']}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "ProposalDetails": { - "runAfter": { - "GetMatchingProposal": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "07c8716c-ce34-4692-a313-e524ee356789" - }, - "type": "Compose", - "inputs": "@first(body('GetMatchingProposal')['value'])" - }, - "GetProposalApplication": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "baa5f673-ab9b-4eda-abc3-3da844e3921c" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "GetItems", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "MatchingSupervisor": { + "runAfter": { + "DummyCompose": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "bd22650b-e96a-448f-9483-fb98a6b2a917" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", + "$filter": "Title eq '@{triggerBody()?['supervisoremail']}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalapplication]", - "$filter": "id eq '@{triggerBody()?['proposalid']}'", - "$top": 1 + "GetProposalApplication": { + "runAfter": { + "DummyCompose": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "baa5f673-ab9b-4eda-abc3-3da844e3921c" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "$filter": "proposalId eq '@{triggerBody()?['proposalid']}'" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "ApplicationDetails": { - "runAfter": { - "GetProposalApplication": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "725427ad-a396-4f7f-94fe-18202dcffc15" - }, - "type": "Compose", - "inputs": "@first(body('GetProposalApplication')['value'])" - }, - "MatchingSupervisor": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "bd22650b-e96a-448f-9483-fb98a6b2a917" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_sharepointonline", - "operationId": "GetItems", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + "ProposalDetails": { + "runAfter": { + "GetMatchingProposal": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "07c8716c-ce34-4692-a313-e524ee356789" + }, + "type": "Compose", + "inputs": "@first(body('GetMatchingProposal')['value'])" }, - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", - "$filter": "Title eq '@{triggerBody()?['supervisoremail']}'", - "$top": 1 + "SupervisorDetails": { + "runAfter": { + "MatchingSupervisor": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4fed7a55-4515-4bf4-95fa-a1e295c50e03" + }, + "type": "Compose", + "inputs": "@first(body('MatchingSupervisor')['value'])" }, - "authentication": "@parameters('$authentication')" - } - }, - "SupervisorDetails": { - "runAfter": { - "MatchingSupervisor": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "4fed7a55-4515-4bf4-95fa-a1e295c50e03" - }, - "type": "Compose", - "inputs": "@first(body('MatchingSupervisor')['value'])" - }, - "Switch": { - "runAfter": { - "IsAutoInvokedAction": [ - "Succeeded" - ] - }, - "cases": { - "Accept": { - "case": "ACCEPT", + "ApplicationDetails": { + "runAfter": { + "GetProposalApplication": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "725427ad-a396-4f7f-94fe-18202dcffc15" + }, + "type": "Compose", + "inputs": "@first(body('GetProposalApplication')['value'])" + }, + "IsAutoInvokedAction": { "actions": { - "UpdateProposalStatusAccept": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "7535e2a2-c386-4e8f-abaf-6af7cf4c0159" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PatchItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "id": "@triggerBody()?['proposalid']", - "item/createdAt": "@outputs('ProposalDetails')['createdAt']", - "item/description": "@outputs('ProposalDetails')['description']", - "item/language": "@outputs('ProposalDetails')['language']", - "item/statusKey": "MATCHED", - "item/studyLevel": "@outputs('ProposalDetails')['studyLevel']", - "item/title": "@outputs('ProposalDetails')['title']", - "item/topicAreaSlug": "@outputs('ProposalDetails')['topicAreaSlug']", - "item/typeKey": "@outputs('ProposalDetails')['typeKey']", - "item/updatedAt": "@outputs('ProposalDetails')['updatedAt']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "UpdateStudentApplicationAccept": { - "runAfter": { - "IsStatusKeyOpen": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "7a443136-70e4-4642-a1eb-b0beee17972b" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PatchItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalapplication]", - "id": "@triggerBody()?['proposalId']", - "item/createdAt": "@outputs('ApplicationDetails')['createdAt']", - "item/email": "@outputs('ApplicationDetails')['email']", - "item/fullName": "@outputs('ApplicationDetails')['fullName']", - "item/matriculationNumber": "@outputs('ApplicationDetails')['matriculationNumber']", - "item/motivation": "@outputs('ApplicationDetails')['motivation']", - "item/plannedStartAt": "@outputs('ApplicationDetails')['plannedStartAt']", - "item/proposalId": "@outputs('ApplicationDetails')['proposalId']", - "item/statusKey": "ACCEPTED", - "item/updatedAt": "@outputs('ApplicationDetails')['updatedAt']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "AcceptanceNotification": { - "runAfter": { - "UpdateStudentApplicationAccept": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "df532c74-17e4-4547-ab22-d8685e1eb082" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@{outputs('ApplicationDetails')['email']};@{triggerBody()?['supervisorEmail']}", - "emailMessage/Subject": "DBF Theses - Your Proposal has been accepted", - "emailMessage/Body": "

Dear @{outputs('ApplicationDetails')['fullName']},
\n
\nYour proposal on \"@{outputs('ProposalDetails')['title']}\" has been accepted by a supervisor. Please get in touch with your supervisor \"@{outputs('SupervisorDetails')['field_1']}\" to get started with the thesis process (just reply to this email).
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nMessage of your supervisor: @{triggerBody()?['comment']}

", - "emailMessage/Cc": "@outputs('CreateAcceptSupervision')?['body/supervisorEmail']", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/ReplyTo": "@triggerBody()?['supervisorEmail']", - "emailMessage/Importance": "Normal" + "IsAlreadyAccepted": { + "actions": { + "Response": { + "runAfter": { + "ComposeAlreadyAcceptedResponse": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "587d7896-600a-4582-88f4-f7adb0b524f3" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeAlreadyAcceptedResponse')" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "ComposeAcceptResponse": { - "runAfter": { - "AcceptanceNotification": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "2cdc3e44-0062-4866-a6f9-eca6b8231044" - }, - "type": "Compose", - "inputs": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "size": "Medium", - "text": "Thesis Proposal Accepted", - "type": "TextBlock", - "weight": "Bolder" + "Terminate_2": { + "runAfter": { + "Response": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "30e0b4b9-13f6-451b-8582-402df8cbf50a" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Succeeded" } - ], - "type": "AdaptiveCard", - "version": "1.0" - } - }, - "AcceptResponse": { - "runAfter": { - "ComposeAcceptResponse": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "b28276f8-db87-4742-afc2-bf8251d4cb6b" - }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200, - "headers": { - "CARD-UPDATE-IN-BODY": "true" }, - "body": "@outputs('ComposeAcceptResponse')" - } - }, - "IsStatusKeyOpen": { - "actions": { - "CreateAcceptSupervision": { + "GetAcceptedSupervisor": { "runAfter": {}, "metadata": { - "operationMetadataId": "b2bca9b1-69a4-4e1d-8b9f-46ffa7645a5b" + "operationMetadataId": "19d31a2a-f034-4f8a-a629-02c16a319f8e" }, "type": "OpenApiConnection", "inputs": { "host": { "connectionName": "shared_azuremysql", - "operationId": "PostItem", + "operationId": "GetItems", "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" }, "parameters": { "server": "default", "database": "default", "table": "[main].[userproposalsupervision]", - "item/id": "@triggerBody()?['proposalId']", - "item/proposalId": "@triggerBody()?['proposalId']", - "item/supervisorEmail": "@triggerBody()?['supervisorEmail']" + "$filter": "id eq '@{triggerBody()?['proposalid']}'", + "$top": 1 }, "authentication": "@parameters('$authentication')" } - } - }, - "runAfter": { - "UpdateProposalStatusAccept": [ - "Succeeded" - ] - }, - "expression": { - "equals": [ - "@outputs('ApplicationDetails')['statusKey']", - "OPEN" - ] - }, - "metadata": { - "operationMetadataId": "d2bc87da-0e52-4a9e-9bb2-54e6fedabe6b" - }, - "type": "If" - } - } - }, - "Accept_Tentative": { - "case": "ACCEPT_TENTATIVE", - "actions": { - "UpdateProposalStatusAcceptTentative": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "4331e6c0-ad64-47f4-b1a2-702a4c6ac25f" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PatchItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "id": "@triggerBody()?['proposalId']", - "item/createdAt": "@outputs('ProposalDetails')['createdAt']", - "item/description": "@outputs('ProposalDetails')['description']", - "item/language": "@outputs('ProposalDetails')['language']", - "item/statusKey": "MATCHED_TENTATIVE", - "item/studyLevel": "@outputs('ProposalDetails')['studyLevel']", - "item/title": "@outputs('ProposalDetails')['title']", - "item/topicAreaSlug": "@outputs('ProposalDetails')['topicAreaSlug']", - "item/typeKey": "@outputs('ProposalDetails')['typeKey']", - "item/updatedAt": "@outputs('ProposalDetails')['updatedAt']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "CreateTentativeAcceptSupervision": { - "runAfter": { - "UpdateProposalStatusAcceptTentative": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "add79b87-4eeb-4e50-b802-6aadde3db15c" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalsupervision]", - "item/id": "@triggerBody()?['proposalId']", - "item/proposalId": "@triggerBody()?['proposalId']", - "item/supervisorEmail": "@triggerBody()?['supervisorEmail']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "UpdateStudentApplicationAcceptTentative": { - "runAfter": { - "CreateTentativeAcceptSupervision": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "72b788ae-9d04-4c4c-886e-2f8f5be3bc33" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PatchItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalapplication]", - "id": "@triggerBody()?['proposalId']", - "item/createdAt": "@outputs('ApplicationDetails')['createdAt']", - "item/email": "@outputs('ApplicationDetails')['email']", - "item/fullName": "@outputs('ApplicationDetails')['fullName']", - "item/matriculationNumber": "@outputs('ApplicationDetails')['matriculationNumber']", - "item/motivation": "@outputs('ApplicationDetails')['motivation']", - "item/plannedStartAt": "@outputs('ApplicationDetails')['plannedStartAt']", - "item/proposalId": "@outputs('ApplicationDetails')['proposalId']", - "item/statusKey": "ACCEPTED_TENTATIVE", - "item/updatedAt": "@outputs('ApplicationDetails')['updatedAt']" }, - "authentication": "@parameters('$authentication')" - } - }, - "TentativeAcceptanceNotification": { - "runAfter": { - "UpdateStudentApplicationAcceptTentative": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "fb0316ef-5a1a-4a75-b425-a805eba40653" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@{outputs('ApplicationDetails')['email']};@{triggerBody()?['supervisorEmail']}", - "emailMessage/Subject": "DBF Theses - Your Proposal has attracted interest", - "emailMessage/Body": "

Dear @{outputs('ApplicationDetails')['fullName']},
\n
\nYour proposal on \"@{outputs('ProposalDetails')['title']}\" has attracted the interest of a supervisor on the condition that the proposal is improved in certain areas. Please review the supervisor feedback, adjust your proposal as needed, and get in touch with your potential supervisor \"@{outputs('SupervisorDetails')['field_1']}\" (just reply to this email).
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nFeedback of your potential supervisor: @{triggerBody()?['comment']}

", - "emailMessage/Cc": "@triggerBody()?['supervisorEmail']", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/ReplyTo": "@triggerBody()?['supervisorEmail']", - "emailMessage/Importance": "Normal" + "ComposeAlreadyAcceptedResponse": { + "runAfter": { + "AcceptedSupervisorDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e2871993-5858-486e-b8e6-9a3e8a89ee6a" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "Thesis Proposal was already accepted by @{outputs('AcceptedSupervisorDetails')['supervisorEmail']} (@{outputs('ApplicationDetails')['statusKey']})", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" + } }, - "authentication": "@parameters('$authentication')" - } - }, - "ComposeAcceptTentativeResponse": { - "runAfter": { - "TentativeAcceptanceNotification": [ - "Succeeded" - ] + "AcceptedSupervisorDetails": { + "runAfter": { + "GetAcceptedSupervisor": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "df3def8f-9776-4c1e-89cd-f538ca85a6ba" + }, + "type": "Compose", + "inputs": "@first(body('GetAcceptedSupervisor')['value'])" + } }, - "metadata": { - "operationMetadataId": "3b8a8234-2ea8-4734-bc8c-7d2a2086e40b" + "runAfter": {}, + "else": { + "actions": { + "Terminate": { + "runAfter": { + "Scope": [ + "Failed", + "TimedOut" + ] + }, + "metadata": { + "operationMetadataId": "5fb1e9d7-d829-4b1d-8daa-895dccb71412" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Succeeded" + } + }, + "Scope": { + "actions": { + "GetProvidedFeedbackEntries": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "85c00d53-3213-40c6-b64c-825e1df04411" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalfeedback]", + "$filter": "proposalId eq '@{triggerBody()?['proposalId']}' and userEmail eq '@{triggerBody()?['supervisorEmail']}'" + }, + "authentication": "@parameters('$authentication')" + } + }, + "Condition": { + "actions": { + "ComposeAlreadyProvidedFeedback": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "e2871993-5858-486e-b8e6-9a3e8a89ee6a" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "You have already rejected/declined this proposal!", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" + } + }, + "ResponseFeedback": { + "runAfter": { + "ComposeAlreadyProvidedFeedback": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "587d7896-600a-4582-88f4-f7adb0b524f3" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeAlreadyProvidedFeedback')" + } + }, + "Terminate_4": { + "runAfter": { + "ResponseFeedback": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5fb1e9d7-d829-4b1d-8daa-895dccb71412" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Succeeded" + } + } + }, + "runAfter": { + "Compose": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "Terminate_5": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "5fb1e9d7-d829-4b1d-8daa-895dccb71412" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Succeeded" + } + } + } + }, + "expression": { + "equals": [ + "@outputs('Compose')['userEmail']", + "@triggerBody()?['supervisorEmail']" + ] + }, + "metadata": { + "operationMetadataId": "f65d1d1d-20d9-47cd-8291-b6c8f00e9f7f" + }, + "type": "If" + }, + "Compose": { + "runAfter": { + "GetProvidedFeedbackEntries": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "24d52f92-3c1f-4177-b401-12d10649b0a3" + }, + "type": "Compose", + "inputs": "@first(outputs('GetProvidedFeedbackEntries')?['body/value'])" + } + }, + "runAfter": {}, + "metadata": { + "operationMetadataId": "001e4862-207d-4d76-8244-fd9d0b2d5afa" + }, + "type": "Scope" + } + } }, - "type": "Compose", - "inputs": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ + "expression": { + "or": [ + { + "equals": [ + "@outputs('ApplicationDetails')['statusKey']", + "ACCEPTED" + ] + }, { - "size": "Medium", - "text": "Thesis Proposal Tentatively Accepted", - "type": "TextBlock", - "weight": "Bolder" + "equals": [ + "@outputs('ApplicationDetails')['statusKey']", + "ACCEPTED_TENTATIVE" + ] } - ], - "type": "AdaptiveCard", - "version": "1.0" - } - }, - "AcceptTentativeResponse": { - "runAfter": { - "ComposeAcceptTentativeResponse": [ - "Succeeded" ] }, "metadata": { - "operationMetadataId": "4ed555d0-c4a0-49b2-90f4-cd829feeb041" + "operationMetadataId": "9bd9abc8-9ac9-4134-a2e3-72100f394b43" }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200, - "headers": { - "CARD-UPDATE-IN-BODY": "true" - }, - "body": "@outputs('ComposeAcceptTentativeResponse')" - } + "type": "If" } - } + }, + "runAfter": { + "ApplicationDetails": [ + "Succeeded" + ], + "ProposalDetails": [ + "Succeeded" + ], + "SupervisorDetails": [ + "Succeeded" + ] + }, + "expression": { + "equals": [ + "@triggerBody()?['actionType']", + "REFETCH" + ] + }, + "metadata": { + "operationMetadataId": "7d582be1-075d-4223-8d22-7c7e4fb1dd8e" + }, + "type": "If" }, - "Decline": { - "case": "DECLINE", - "actions": { - "PersistDeclineFeedback": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "5bc2b7d0-6c92-43d5-bc81-0473ac0f025e" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" - }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalfeedback]", - "item/comment": "@triggerBody()?['comment']", - "item/id": "@guid()", - "item/proposalId": "@triggerBody()?['proposalId']", - "item/reason": "@triggerBody()?['reason']", - "item/typeKey": "DECLINED_@{triggerBody()?['reason']}", - "item/userEmail": "@triggerBody()?['supervisorEmail']" - }, - "authentication": "@parameters('$authentication')" - } - }, - "DeclineNotification": { - "runAfter": { - "PersistDeclineFeedback": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "c71259f9-094e-4c1d-86ec-684e6f6380cd" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/Subject": "DBF Theses - Proposal declined (@{outputs('ProposalDetails')['title']})", - "emailMessage/Body": "

The proposal \"@{outputs('ProposalDetails')['title']}\" has been declined by \"@{outputs('SupervisorDetails')['field_1']}\".
\n
\nReason: @{triggerBody()?['reason']}
\nComment: @{triggerBody()?['comment']}

", - "emailMessage/Importance": "Normal" - }, - "authentication": "@parameters('$authentication')" - } - }, - "ComposeDeclineResponse": { - "runAfter": { - "DeclineNotification": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "381fa989-f265-46ee-bbd4-b5fe2c8bca59" - }, - "type": "Compose", - "inputs": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "size": "Medium", - "text": "Thesis Proposal Declined", - "type": "TextBlock", - "weight": "Bolder" - } - ], - "type": "AdaptiveCard", - "version": "1.0" - } - }, - "DeclineResponse": { - "runAfter": { - "ComposeDeclineResponse": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "35a799df-bc89-4032-829d-6f943524cff6" - }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200, - "headers": { - "CARD-UPDATE-IN-BODY": "true" - }, - "body": "@outputs('ComposeDeclineResponse')" - } - } - } - }, - "Reject": { - "case": "REJECT", - "actions": { - "RejectNotification": { - "runAfter": { - "PersistRejectFeedback": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "647c1798-dde8-4ed4-a921-6572d4b5cd77" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365_1", - "operationId": "SharedMailboxSendEmailV2", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/Subject": "DBF Theses - Proposal rejected (@{outputs('ProposalDetails')['title']})", - "emailMessage/Body": "

The proposal \"@{outputs('ProposalDetails')['title']}\" has been rejected by \"@{outputs('SupervisorDetails')['field_1']}\".
\n
\nReason: @{triggerBody()?['reason']}
\nComment: @{triggerBody()?['comment']}

", - "emailMessage/Importance": "Normal" - }, - "authentication": "@parameters('$authentication')" - } - }, - "ComposeRejectResponse": { - "runAfter": { - "RejectNotification": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "bc91fc1b-3a49-494d-adab-6585a07d0f0f" - }, - "type": "Compose", - "inputs": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "size": "Medium", - "text": "Thesis Proposal Rejected", - "type": "TextBlock", - "weight": "Bolder" - } - ], - "type": "AdaptiveCard", - "version": "1.0" - } - }, - "RejectResponse": { - "runAfter": { - "ComposeRejectResponse": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "841ddf7a-a2fb-4073-868b-e31da5fe675e" - }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200, - "headers": { - "CARD-UPDATE-IN-BODY": "true" - }, - "body": "@outputs('ComposeRejectResponse')" - } - }, - "IsStatusKeyAcceptedTentative": { + "Switch": { + "runAfter": { + "IsAutoInvokedAction": [ + "Succeeded" + ] + }, + "cases": { + "Accept": { + "case": "ACCEPT", "actions": { - "DeleteSupervision": { + "UpdateProposalStatusAccept": { "runAfter": {}, "metadata": { - "operationMetadataId": "cdf7798e-3049-40c7-8cde-4ef065861c2e" + "operationMetadataId": "7535e2a2-c386-4e8f-abaf-6af7cf4c0159" }, "type": "OpenApiConnection", "inputs": { "host": { "connectionName": "shared_azuremysql", - "operationId": "DeleteItem", + "operationId": "PatchItem", "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" }, "parameters": { "server": "default", "database": "default", - "table": "[main].[userproposalsupervision]", - "id": "@triggerBody()?['proposalId']" + "table": "[main].[proposal]", + "id": "@triggerBody()?['proposalid']", + "item/createdAt": "@outputs('ProposalDetails')['createdAt']", + "item/description": "@outputs('ProposalDetails')['description']", + "item/language": "@outputs('ProposalDetails')['language']", + "item/statusKey": "MATCHED", + "item/studyLevel": "@outputs('ProposalDetails')['studyLevel']", + "item/title": "@outputs('ProposalDetails')['title']", + "item/topicAreaSlug": "@outputs('ProposalDetails')['topicAreaSlug']", + "item/typeKey": "@outputs('ProposalDetails')['typeKey']", + "item/updatedAt": "@outputs('ProposalDetails')['updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateStudentApplicationAccept": { + "runAfter": { + "IsStatusKeyOpen": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "7a443136-70e4-4642-a1eb-b0beee17972b" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "id": "@triggerBody()?['proposalId']", + "item/createdAt": "@outputs('ApplicationDetails')['createdAt']", + "item/email": "@outputs('ApplicationDetails')['email']", + "item/fullName": "@outputs('ApplicationDetails')['fullName']", + "item/matriculationNumber": "@outputs('ApplicationDetails')['matriculationNumber']", + "item/motivation": "@outputs('ApplicationDetails')['motivation']", + "item/plannedStartAt": "@outputs('ApplicationDetails')['plannedStartAt']", + "item/proposalId": "@outputs('ApplicationDetails')['proposalId']", + "item/statusKey": "ACCEPTED", + "item/updatedAt": "@outputs('ApplicationDetails')['updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "AcceptanceNotification": { + "runAfter": { + "UpdateStudentApplicationAccept": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "df532c74-17e4-4547-ab22-d8685e1eb082" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@{outputs('ApplicationDetails')['email']};@{triggerBody()?['supervisorEmail']}", + "emailMessage/Subject": "DBF Theses - Your Proposal has been accepted", + "emailMessage/Body": "

Dear @{outputs('ApplicationDetails')['fullName']},
\n
\nYour proposal on \"@{outputs('ProposalDetails')['title']}\" has been accepted by a supervisor. Please get in touch with your supervisor \"@{triggerBody()?['supervisorEmail']}\" to get started with the thesis process (just reply to this email).
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nMessage of your supervisor: @{triggerBody()?['comment']}

", + "emailMessage/Cc": "@outputs('CreateAcceptSupervision')?['body/supervisorEmail']", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/ReplyTo": "@triggerBody()?['supervisorEmail']", + "emailMessage/Importance": "Normal" }, "authentication": "@parameters('$authentication')" } }, - "UpdateProposalStatusKeyOpen": { + "ComposeAcceptResponse": { + "runAfter": { + "AcceptanceNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "2cdc3e44-0062-4866-a6f9-eca6b8231044" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "Thesis Proposal Accepted", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" + } + }, + "AcceptResponse": { "runAfter": { - "UpdateProposalApplicationStatusKeyOpen": [ + "ComposeAcceptResponse": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "aa93c012-cb6d-42c6-bd72-ef1574acb2f6" + "operationMetadataId": "b28276f8-db87-4742-afc2-bf8251d4cb6b" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeAcceptResponse')" + } + }, + "IsStatusKeyOpen": { + "actions": { + "CreateAcceptSupervision": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "b2bca9b1-69a4-4e1d-8b9f-46ffa7645a5b" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "item/id": "@triggerBody()?['proposalId']", + "item/proposalId": "@triggerBody()?['proposalId']", + "item/supervisorEmail": "@triggerBody()?['supervisorEmail']" + }, + "authentication": "@parameters('$authentication')" + } + } + }, + "runAfter": { + "UpdateProposalStatusAccept": [ + "Succeeded" + ] + }, + "expression": { + "equals": [ + "@outputs('ApplicationDetails')['statusKey']", + "OPEN" + ] + }, + "metadata": { + "operationMetadataId": "d2bc87da-0e52-4a9e-9bb2-54e6fedabe6b" + }, + "type": "If" + } + } + }, + "Accept_Tentative": { + "case": "ACCEPT_TENTATIVE", + "actions": { + "UpdateProposalStatusAcceptTentative": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "4331e6c0-ad64-47f4-b1a2-702a4c6ac25f" }, "type": "OpenApiConnection", "inputs": { @@ -802,7 +778,7 @@ "item/createdAt": "@outputs('ProposalDetails')['createdAt']", "item/description": "@outputs('ProposalDetails')['description']", "item/language": "@outputs('ProposalDetails')['language']", - "item/statusKey": "OPEN", + "item/statusKey": "MATCHED_TENTATIVE", "item/studyLevel": "@outputs('ProposalDetails')['studyLevel']", "item/title": "@outputs('ProposalDetails')['title']", "item/topicAreaSlug": "@outputs('ProposalDetails')['topicAreaSlug']", @@ -812,14 +788,41 @@ "authentication": "@parameters('$authentication')" } }, - "UpdateProposalApplicationStatusKeyOpen": { + "CreateTentativeAcceptSupervision": { + "runAfter": { + "UpdateProposalStatusAcceptTentative": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "add79b87-4eeb-4e50-b802-6aadde3db15c" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "item/id": "@triggerBody()?['proposalId']", + "item/proposalId": "@triggerBody()?['proposalId']", + "item/supervisorEmail": "@triggerBody()?['supervisorEmail']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateStudentApplicationAcceptTentative": { "runAfter": { - "DeleteSupervision": [ + "CreateTentativeAcceptSupervision": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "311d5cd3-d344-47a3-99b8-9b0664a34f4e" + "operationMetadataId": "72b788ae-9d04-4c4c-886e-2f8f5be3bc33" }, "type": "OpenApiConnection", "inputs": { @@ -839,232 +842,549 @@ "item/matriculationNumber": "@outputs('ApplicationDetails')['matriculationNumber']", "item/motivation": "@outputs('ApplicationDetails')['motivation']", "item/plannedStartAt": "@outputs('ApplicationDetails')['plannedStartAt']", - "item/proposalId": "@triggerBody()?['proposalId']", - "item/statusKey": "OPEN", + "item/proposalId": "@outputs('ApplicationDetails')['proposalId']", + "item/statusKey": "ACCEPTED_TENTATIVE", "item/updatedAt": "@outputs('ApplicationDetails')['updatedAt']" }, "authentication": "@parameters('$authentication')" } - } - }, - "runAfter": {}, - "expression": { - "equals": [ - "@outputs('ApplicationDetails')['statusKey']", - "ACCEPTED_TENTATIVE" - ] - }, - "metadata": { - "operationMetadataId": "ffc51d56-fc50-474a-8db9-d35eedebc5fc" - }, - "type": "If" - }, - "PersistRejectFeedback": { - "runAfter": { - "IsStatusKeyAcceptedTentative": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "f305428c-9d61-40a0-8cb6-b53c26852d0c" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "PostItem", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalfeedback]", - "item/comment": "@triggerBody()?['comment']", - "item/id": "@guid()", - "item/proposalId": "@triggerBody()?['proposalId']", - "item/reason": "@triggerBody()?['reason']", - "item/typeKey": "REJECTED_@{triggerBody()?['reason']}", - "item/userEmail": "@triggerBody()?['supervisorEmail']" + "TentativeAcceptanceNotification": { + "runAfter": { + "UpdateStudentApplicationAcceptTentative": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "fb0316ef-5a1a-4a75-b425-a805eba40653" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@{outputs('ApplicationDetails')['email']};@{triggerBody()?['supervisorEmail']}", + "emailMessage/Subject": "DBF Theses - Your Proposal has attracted interest", + "emailMessage/Body": "

Dear @{outputs('ApplicationDetails')['fullName']},
\n
\nYour proposal on \"@{outputs('ProposalDetails')['title']}\" has attracted the interest of a supervisor on the condition that the proposal is improved in certain areas. Please review the supervisor feedback, adjust your proposal as needed, and get in touch with your potential supervisor \"@{triggerBody()?['supervisorEmail']}\" (just reply to this email).
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nFeedback of your potential supervisor: @{triggerBody()?['comment']}

", + "emailMessage/Cc": "@triggerBody()?['supervisorEmail']", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/ReplyTo": "@triggerBody()?['supervisorEmail']", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } }, - "authentication": "@parameters('$authentication')" - } - } - } - } - }, - "default": { - "actions": { - "Response_4": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "00598947-556d-4afd-8e0c-11c0310f81cc" - }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200 - } - } - } - }, - "expression": "@triggerBody()?['actionType']", - "metadata": { - "operationMetadataId": "5c463cf4-8eb0-443f-99c0-d7807cd879b1" - }, - "type": "Switch" - }, - "IsAutoInvokedAction": { - "actions": { - "IsAlreadyAccepted": { - "actions": { - "Response": { - "runAfter": { - "ComposeAlreadyAcceptedResponse": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "587d7896-600a-4582-88f4-f7adb0b524f3" - }, - "type": "Response", - "kind": "Http", - "inputs": { - "statusCode": 200, - "headers": { - "CARD-UPDATE-IN-BODY": "true" + "ComposeAcceptTentativeResponse": { + "runAfter": { + "TentativeAcceptanceNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "3b8a8234-2ea8-4734-bc8c-7d2a2086e40b" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "Thesis Proposal Tentatively Accepted", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" + } }, - "body": "@outputs('ComposeAlreadyAcceptedResponse')" - } - }, - "Terminate_2": { - "runAfter": { - "Response": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "30e0b4b9-13f6-451b-8582-402df8cbf50a" - }, - "type": "Terminate", - "inputs": { - "runStatus": "Succeeded" + "AcceptTentativeResponse": { + "runAfter": { + "ComposeAcceptTentativeResponse": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4ed555d0-c4a0-49b2-90f4-cd829feeb041" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeAcceptTentativeResponse')" + } + } } }, - "GetAcceptedSupervisor": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "19d31a2a-f034-4f8a-a629-02c16a319f8e" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_azuremysql", - "operationId": "GetItems", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + "Decline": { + "case": "DECLINE", + "actions": { + "PersistDeclineFeedback": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "5bc2b7d0-6c92-43d5-bc81-0473ac0f025e" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalfeedback]", + "item/comment": "@triggerBody()?['comment']", + "item/id": "@guid()", + "item/proposalId": "@triggerBody()?['proposalId']", + "item/reason": "@triggerBody()?['reason']", + "item/typeKey": "DECLINED_@{triggerBody()?['reason']}", + "item/userEmail": "@triggerBody()?['supervisorEmail']" + }, + "authentication": "@parameters('$authentication')" + } }, - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalsupervision]", - "$filter": "id eq '@{triggerBody()?['proposalid']}'", - "$top": 1 + "DeclineNotification": { + "runAfter": { + "PersistDeclineFeedback": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "c71259f9-094e-4c1d-86ec-684e6f6380cd" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/Subject": "DBF Theses - Proposal declined (@{outputs('ProposalDetails')['title']})", + "emailMessage/Body": "

The proposal \"@{outputs('ProposalDetails')['title']}\" has been declined by \"@{triggerBody()?['supervisorEmail']}\".
\n
\nReason: @{triggerBody()?['reason']}
\nComment: @{triggerBody()?['comment']}

", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } + }, + "ComposeDeclineResponse": { + "runAfter": { + "DeclineNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "381fa989-f265-46ee-bbd4-b5fe2c8bca59" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "Thesis Proposal Declined", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" + } }, - "authentication": "@parameters('$authentication')" + "DeclineResponse": { + "runAfter": { + "ComposeDeclineResponse": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "35a799df-bc89-4032-829d-6f943524cff6" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeDeclineResponse')" + } + } } }, - "ComposeAlreadyAcceptedResponse": { - "runAfter": { - "AcceptedSupervisorDetails": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "e2871993-5858-486e-b8e6-9a3e8a89ee6a" - }, - "type": "Compose", - "inputs": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "size": "Medium", - "text": "Thesis Proposal was already accepted by @{outputs('AcceptedSupervisorDetails')['supervisorEmail']} (@{outputs('ApplicationDetails')['statusKey']})", - "type": "TextBlock", - "weight": "Bolder" + "Reject": { + "case": "REJECT", + "actions": { + "RejectNotification": { + "runAfter": { + "PersistRejectFeedback": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "647c1798-dde8-4ed4-a921-6572d4b5cd77" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/Subject": "DBF Theses - Proposal rejected (@{outputs('ProposalDetails')['title']})", + "emailMessage/Body": "

The proposal \"@{outputs('ProposalDetails')['title']}\" has been rejected by \"@{triggerBody()?['supervisorEmail']}\".
\n
\nReason: @{triggerBody()?['reason']}
\nComment: @{triggerBody()?['comment']}

", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } + }, + "ComposeRejectResponse": { + "runAfter": { + "RejectNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "bc91fc1b-3a49-494d-adab-6585a07d0f0f" + }, + "type": "Compose", + "inputs": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "size": "Medium", + "text": "Thesis Proposal Rejected", + "type": "TextBlock", + "weight": "Bolder" + } + ], + "type": "AdaptiveCard", + "version": "1.0" } - ], - "type": "AdaptiveCard", - "version": "1.0" + }, + "RejectResponse": { + "runAfter": { + "ComposeRejectResponse": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "841ddf7a-a2fb-4073-868b-e31da5fe675e" + }, + "type": "Response", + "kind": "Http", + "inputs": { + "statusCode": 200, + "headers": { + "CARD-UPDATE-IN-BODY": "true" + }, + "body": "@outputs('ComposeRejectResponse')" + } + }, + "IsStatusKeyAcceptedTentative": { + "actions": { + "DeleteSupervision": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "cdf7798e-3049-40c7-8cde-4ef065861c2e" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "DeleteItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "id": "@triggerBody()?['proposalId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateProposalStatusKeyOpen": { + "runAfter": { + "UpdateProposalApplicationStatusKeyOpen": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "aa93c012-cb6d-42c6-bd72-ef1574acb2f6" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "id": "@triggerBody()?['proposalId']", + "item/createdAt": "@outputs('ProposalDetails')['createdAt']", + "item/description": "@outputs('ProposalDetails')['description']", + "item/language": "@outputs('ProposalDetails')['language']", + "item/statusKey": "OPEN", + "item/studyLevel": "@outputs('ProposalDetails')['studyLevel']", + "item/title": "@outputs('ProposalDetails')['title']", + "item/topicAreaSlug": "@outputs('ProposalDetails')['topicAreaSlug']", + "item/typeKey": "@outputs('ProposalDetails')['typeKey']", + "item/updatedAt": "@outputs('ProposalDetails')['updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "UpdateProposalApplicationStatusKeyOpen": { + "runAfter": { + "DeleteSupervision": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "311d5cd3-d344-47a3-99b8-9b0664a34f4e" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PatchItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "id": "@triggerBody()?['proposalId']", + "item/createdAt": "@outputs('ApplicationDetails')['createdAt']", + "item/email": "@outputs('ApplicationDetails')['email']", + "item/fullName": "@outputs('ApplicationDetails')['fullName']", + "item/matriculationNumber": "@outputs('ApplicationDetails')['matriculationNumber']", + "item/motivation": "@outputs('ApplicationDetails')['motivation']", + "item/plannedStartAt": "@outputs('ApplicationDetails')['plannedStartAt']", + "item/proposalId": "@triggerBody()?['proposalId']", + "item/statusKey": "OPEN", + "item/updatedAt": "@outputs('ApplicationDetails')['updatedAt']" + }, + "authentication": "@parameters('$authentication')" + } + } + }, + "runAfter": {}, + "expression": { + "equals": [ + "@outputs('ApplicationDetails')['statusKey']", + "ACCEPTED_TENTATIVE" + ] + }, + "metadata": { + "operationMetadataId": "ffc51d56-fc50-474a-8db9-d35eedebc5fc" + }, + "type": "If" + }, + "PersistRejectFeedback": { + "runAfter": { + "IsStatusKeyAcceptedTentative": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "f305428c-9d61-40a0-8cb6-b53c26852d0c" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalfeedback]", + "item/comment": "@triggerBody()?['comment']", + "item/id": "@guid()", + "item/proposalId": "@triggerBody()?['proposalId']", + "item/reason": "@triggerBody()?['reason']", + "item/typeKey": "REJECTED_@{triggerBody()?['reason']}", + "item/userEmail": "@triggerBody()?['supervisorEmail']" + }, + "authentication": "@parameters('$authentication')" + } + } } - }, - "AcceptedSupervisorDetails": { - "runAfter": { - "GetAcceptedSupervisor": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "df3def8f-9776-4c1e-89cd-f538ca85a6ba" - }, - "type": "Compose", - "inputs": "@first(body('GetAcceptedSupervisor')['value'])" } }, - "runAfter": {}, - "else": { + "default": { "actions": { - "Terminate": { + "Response_4": { "runAfter": {}, "metadata": { - "operationMetadataId": "5fb1e9d7-d829-4b1d-8daa-895dccb71412" + "operationMetadataId": "00598947-556d-4afd-8e0c-11c0310f81cc" }, - "type": "Terminate", + "type": "Response", + "kind": "Http", "inputs": { - "runStatus": "Succeeded" + "statusCode": 200 } } } }, - "expression": { - "or": [ + "expression": "@triggerBody()?['actionType']", + "metadata": { + "operationMetadataId": "5c463cf4-8eb0-443f-99c0-d7807cd879b1" + }, + "type": "Switch" + } + }, + "runAfter": { + "IsFLowSecretCorrect": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "ad624be4-2c6e-4ba6-a6ea-289d2a7b8ca9" + }, + "type": "Scope" + }, + "Catch": { + "actions": { + "FilterForFailedOrTimedOutStatus": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "ca1bedd8-7555-4a99-a290-1c22c2e6e229" + }, + "type": "Query", + "inputs": { + "from": "@result('Try')", + "where": "@or(equals(item()?['Status'], 'Failed'), equals(item()?['Status'], 'TimedOut'))" + } + }, + "CreateHtmlTable": { + "runAfter": { + "FilterForFailedOrTimedOutStatus": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "34b6a96f-64c6-43fd-89a3-fe7d5ef245ff" + }, + "type": "Table", + "inputs": { + "from": "@body('FilterForFailedOrTimedOutStatus')", + "format": "HTML", + "columns": [ { - "equals": [ - "@outputs('ApplicationDetails')['statusKey']", - "ACCEPTED" - ] + "header": "ProposalId", + "value": "@triggerBody()?['proposalId']" }, { - "equals": [ - "@outputs('ApplicationDetails')['statusKey']", - "ACCEPTED_TENTATIVE" - ] + "header": "SupervisorEmail", + "value": "@triggerBody()?['supervisorEmail']" + }, + { + "header": "ActionType", + "value": "@triggerBody()?['actionType']" + }, + { + "header": "ErrorCode", + "value": "@item()?['code']" } ] + } + }, + "Terminate_3": { + "runAfter": { + "SendFailureNotification": [ + "Succeeded" + ] }, "metadata": { - "operationMetadataId": "9bd9abc8-9ac9-4134-a2e3-72100f394b43" + "operationMetadataId": "0f41eff7-41db-4eae-8e12-46f64d545e8b" }, - "type": "If" + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } + }, + "SendFailureNotification": { + "runAfter": { + "CreateHtmlTable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7c370de-36de-45b2-ae99-b7d0e7013242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sendmail-2", + "operationId": "SendEmailV3", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail" + }, + "parameters": { + "request/to": "@{parameters('Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)')};", + "request/subject": "(@{parameters('Environment (uzhbf_thesisplatform_environment_env_var)')}) Failure in UZH BF Thesis Platform - Thesis Proposal Feedback", + "request/text": "

@{body('CreateHtmlTable')}

" + }, + "authentication": "@parameters('$authentication')" + } } }, "runAfter": { - "ApplicationDetails": [ - "Succeeded" - ], - "ProposalDetails": [ - "Succeeded" - ], - "SupervisorDetails": [ - "Succeeded" + "Try": [ + "Failed", + "TimedOut" ] }, + "metadata": { + "operationMetadataId": "054f28a3-080c-4f8a-9529-1183121f12f9" + }, + "type": "Scope" + }, + "IsFLowSecretCorrect": { + "actions": {}, + "runAfter": {}, + "else": { + "actions": { + "Terminate_6": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "b0e5bdca-638d-4f99-bf6a-88e22b939ecb" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } + } + } + }, "expression": { "equals": [ - "@triggerBody()?['actionType']", - "REFETCH" + "@triggerOutputs()['headers']['secretKey']", + "@parameters('Flow Secret (uzhbf_thesisplatform_flow_secret_env_var)')" ] }, "metadata": { - "operationMetadataId": "7d582be1-075d-4223-8d22-7c7e4fb1dd8e" + "operationMetadataId": "2e8497de-b65d-41bd-bc3e-8d913d2aba3c" }, "type": "If" } diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json.data.xml b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json.data.xml new file mode 100644 index 0000000..dddef8a --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json.data.xml @@ -0,0 +1,26 @@ + + + /Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 0.0.0.1 + 1 + 0 + 1 + none + + + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json index 0bc0f5d..2b795a1 100644 --- a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json @@ -45,20 +45,29 @@ "api": { "name": "shared_office365" } + }, + "shared_sendmail-2": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_mail_ref" + }, + "api": { + "name": "shared_sendmail" + } } }, "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "contentVersion": "1.0.0.0", "parameters": { - "$authentication": { - "defaultValue": {}, - "type": "SecureObject" - }, "$connections": { "defaultValue": {}, "type": "Object" }, + "$authentication": { + "defaultValue": {}, + "type": "SecureObject" + }, "Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)": { "defaultValue": "https://uzh.sharepoint.com/sites/UZHBFThesisPlatformDEV", "type": "String", @@ -107,6 +116,20 @@ "metadata": { "schemaName": "uzhbf_thesisplatform_proposals_document_library_name_env_var" } + }, + "Environment (uzhbf_thesisplatform_environment_env_var)": { + "defaultValue": "DEV", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_environment_env_var" + } + }, + "Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)": { + "defaultValue": "flow@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_email_failure_env_var" + } } }, "triggers": { @@ -117,569 +140,764 @@ }, "type": "OpenApiConnectionWebhook", "inputs": { + "host": { + "connectionName": "shared_microsoftforms", + "operationId": "CreateFormWebhook", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms" + }, "parameters": { "form_id": "@parameters('Publish Thesis Proposal Forms Id (uzhbf_thesisplatform_publish_thesis_proposal_forms_id_env_var)')" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms", - "operationId": "CreateFormWebhook", - "connectionName": "shared_microsoftforms" - } + "authentication": "@parameters('$authentication')" } } }, "actions": { - "GetResponseDetails": { + "InitializeProposalId": { "runAfter": {}, "metadata": { - "operationMetadataId": "a4ebfb3a-cca3-40f0-ae3c-bcc1463b605d" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "form_id": "@parameters('Publish Thesis Proposal Forms Id (uzhbf_thesisplatform_publish_thesis_proposal_forms_id_env_var)')", - "response_id": "@triggerOutputs()?['body/resourceData/responseId']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms", - "operationId": "GetFormResponseById", - "connectionName": "shared_microsoftforms" - } - } - }, - "GenerateProposalId": { - "runAfter": { - "GetResponseDetails": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "e7ab0158-8106-4190-8eee-bd2eddd72b96" + "operationMetadataId": "67873cd9-daa1-4506-8f4f-afd1c518e723" }, "type": "InitializeVariable", "inputs": { "variables": [ { "name": "ProposalId", - "type": "string", - "value": "@{guid()}" + "type": "string" } ] } }, - "GetMatchingUsers": { + "InitializeSupervisorEmail": { "runAfter": { - "GenerateProposalId": [ + "InitializeProposalId": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "0ba12ef9-1a14-4f00-a1cd-ef238599c322" + "operationMetadataId": "e95b9b49-06d5-4c3c-8ab2-4aefcc8dc16f" }, - "type": "OpenApiConnection", + "type": "InitializeVariable", "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[user]", - "$filter": "email eq '@{outputs('GetResponseDetails')?['body/responder']}'" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "GetItems", - "connectionName": "shared_azuremysql" - } - } - }, - "IfUserExists": { - "actions": {}, - "runAfter": { - "GetMatchingUsers": [ - "Succeeded" - ] - }, - "else": { - "actions": { - "PersistNewUser": { - "metadata": { - "operationMetadataId": "5e447837-c6a0-4b84-bd3d-46efd8c4f5ba" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[user]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/email": "@outputs('GetResponseDetails')?['body/responder']", - "item/id": "@guid()", - "item/name": "Anonymous", - "item/role": "SUPERVISOR", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } + "variables": [ + { + "name": "SupervisorEmail", + "type": "string" } - } - }, - "expression": { - "greater": [ - "@length(body('GetMatchingUsers')['value'])", - 0 - ] - }, - "metadata": { - "operationMetadataId": "c3ab16c6-9dd8-4538-bc92-c9281ec2ed1d" - }, - "type": "If" - }, - "GetSupervisors": { - "runAfter": { - "GenerateProposalId": [ - "Succeeded" ] - }, - "metadata": { - "operationMetadataId": "5ed3ba8d-d9c6-462a-8c1a-04cb56e2b4b7" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", - "$filter": "field_1 eq '@{outputs('GetResponseDetails')?['body/ra234958191ee49a28a4fc68389dd0ce2']}'", - "$top": 1 - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "GetItems", - "connectionName": "shared_sharepointonline" - } } }, - "SetSupervisorEmail": { + "InitializeTopicAreaDetails": { "runAfter": { - "GetSupervisors": [ + "InitializeSupervisorEmail": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "f9ea5082-3cd5-468c-905d-889a1200e698" + "operationMetadataId": "86a0ff6b-0ad7-4176-a775-8140f15fb26a" }, "type": "InitializeVariable", "inputs": { "variables": [ { - "name": "SupervisorEmail", - "type": "string", - "value": "@{first(body('GetSupervisors')['value'])['Title']}" + "name": "TopicAreaDetails", + "type": "object" } ] } }, - "GetTopicAreas": { + "InitializeProposalPdfName": { "runAfter": { - "GenerateProposalId": [ + "InitializeTopicAreaDetails": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "48306085-4df9-4c51-b4b1-2d6de6dc0395" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Topic Areas List Name (uzhbf_thesisplatform_topic_areas_list_name_env_var)')", - "$filter": "Title eq '@{outputs('GetResponseDetails')?['body/r2a41d1ed540f418caa89f10a35cdb069']}'", - "$top": 1 - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "GetItems", - "connectionName": "shared_sharepointonline" - } - } - }, - "SetTopicAreaDetails": { - "runAfter": { - "GetTopicAreas": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "908e7f8f-b3ec-459f-827a-fbee27dc6938" + "operationMetadataId": "53c3620d-45cc-4519-9722-9781fd23386f" }, "type": "InitializeVariable", "inputs": { "variables": [ { - "name": "TopicAreaDetails", - "type": "object", - "value": "@first(body('GetTopicAreas')['value'])" + "name": "ProposalPDFName", + "type": "string" } ] } }, - "ParseProposalPDF": { - "runAfter": { - "GenerateProposalId": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "fa91e1d7-7937-4285-8fc3-677cb8bf6a7c" - }, - "type": "ParseJson", - "inputs": { - "content": "@outputs('GetResponseDetails')?['body/rdde59a23cc104fc7b93e394925f30168']", - "schema": { - "items": { - "properties": { - "driveId": { - "type": "string" + "Try": { + "actions": { + "GetResponseDetails": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "a4ebfb3a-cca3-40f0-ae3c-bcc1463b605d" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_microsoftforms", + "operationId": "GetFormResponseById", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms" + }, + "parameters": { + "form_id": "@parameters('Publish Thesis Proposal Forms Id (uzhbf_thesisplatform_publish_thesis_proposal_forms_id_env_var)')", + "response_id": "@triggerOutputs()?['body/resourceData/responseId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetProposalId": { + "runAfter": { + "GetResponseDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "529ff450-b0d9-46cb-8014-8b375da2ca7e" + }, + "type": "SetVariable", + "inputs": { + "name": "ProposalId", + "value": "@{guid()}" + } + }, + "GetMatchingUsers": { + "runAfter": { + "SetProposalId": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0ba12ef9-1a14-4f00-a1cd-ef238599c322" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[user]", + "$filter": "email eq '@{outputs('GetResponseDetails')?['body/responder']}'" + }, + "authentication": "@parameters('$authentication')" + } + }, + "IfUserExists": { + "actions": {}, + "runAfter": { + "GetMatchingUsers": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "PersistNewUser": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "5e447837-c6a0-4b84-bd3d-46efd8c4f5ba" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[user]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/email": "@outputs('GetResponseDetails')?['body/responder']", + "item/id": "@guid()", + "item/name": "Anonymous", + "item/role": "SUPERVISOR", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + } + } + }, + "expression": { + "greater": [ + "@length(body('GetMatchingUsers')['value'])", + 0 + ] + }, + "metadata": { + "operationMetadataId": "c3ab16c6-9dd8-4538-bc92-c9281ec2ed1d" + }, + "type": "If" + }, + "SetTopicAreaDetails": { + "runAfter": { + "GetTopicAreas": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e71bf2e5-143e-4c24-a190-83399d562950" + }, + "type": "SetVariable", + "inputs": { + "name": "TopicAreaDetails", + "value": "@first(body('GetTopicAreas')['value'])" + } + }, + "GetSupervisors": { + "runAfter": { + "SetProposalId": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5ed3ba8d-d9c6-462a-8c1a-04cb56e2b4b7" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", + "$filter": "field_1 eq '@{outputs('GetResponseDetails')?['body/ra234958191ee49a28a4fc68389dd0ce2']}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetSupervisorEmail": { + "runAfter": { + "GetSupervisors": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "2059bc6b-37e7-4256-b83b-7e5f0e6c33ac" + }, + "type": "SetVariable", + "inputs": { + "name": "SupervisorEmail", + "value": "@{first(body('GetSupervisors')['value'])['Title']}" + } + }, + "GetTopicAreas": { + "runAfter": { + "SetProposalId": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "48306085-4df9-4c51-b4b1-2d6de6dc0395" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Topic Areas List Name (uzhbf_thesisplatform_topic_areas_list_name_env_var)')", + "$filter": "Title eq '@{outputs('GetResponseDetails')?['body/r2a41d1ed540f418caa89f10a35cdb069']}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } + }, + "IsProposalPdfAttached": { + "actions": { + "ParseProposalPDF": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "fa91e1d7-7937-4285-8fc3-677cb8bf6a7c" + }, + "type": "ParseJson", + "inputs": { + "content": "@outputs('GetResponseDetails')?['body/rdde59a23cc104fc7b93e394925f30168']", + "schema": { + "items": { + "properties": { + "driveId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "link": { + "type": "string" + }, + "name": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "type": {}, + "uploadSessionUrl": {} + }, + "required": [ + "name", + "link", + "id", + "type", + "size", + "referenceId", + "driveId", + "status", + "uploadSessionUrl" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "SetProposalPdfName": { + "runAfter": { + "ParseProposalPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "ca060dab-9368-4d1a-9f33-f0015cadcdd2" + }, + "type": "SetVariable", + "inputs": { + "name": "ProposalPDFName", + "value": "@{first(body('ParseProposalPDF'))?['name']}" + } + }, + "GetFileUploadProposalPDF": { + "runAfter": { + "SetProposalPdfName": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "339b9272-47e6-4510-8a05-dad3e41ab01d" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_onedriveforbusiness", + "operationId": "GetFileContentByPath", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness" + }, + "parameters": { + "path": "/Apps/Microsoft Forms/Publish Thesis Proposal/Research Proposal (PDF)/@{variables('ProposalPDFName')}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistProposalPDF": { + "runAfter": { + "GetFileUploadProposalPDF": [ + "Succeeded" + ] }, - "id": { - "type": "string" + "metadata": { + "operationMetadataId": "73d10613-2f21-405c-94f2-a864355e8d60" }, - "link": { - "type": "string" + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", + "name": "@{variables('ProposalId')}.pdf", + "body": "@body('GetFileUploadProposalPDF')" + }, + "authentication": "@parameters('$authentication')" }, - "name": { - "type": "string" + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } + }, + "CreateShareLinkProposalPDF": { + "runAfter": { + "PersistProposalPDF": [ + "Succeeded" + ] }, - "referenceId": { - "type": "string" + "metadata": { + "operationMetadataId": "c63fa1e6-f889-4076-b4d1-47638b03d785" }, - "size": { - "type": "integer" + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('PersistProposalPDF')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistProposalAttachment": { + "runAfter": { + "CreateShareLinkProposalPDF": [ + "Succeeded" + ] }, - "status": { - "type": "integer" + "metadata": { + "operationMetadataId": "2e44e2bf-bb36-4238-8ab8-7804f6a6725d" }, - "type": {}, - "uploadSessionUrl": {} + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalattachment]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/href": "@outputs('CreateShareLinkProposalPDF')?['body/link/webUrl']", + "item/id": "@{guid()}", + "item/name": "Proposal", + "item/proposalId": "@variables('ProposalId')", + "item/type": "@outputs('PersistProposalPDF')?['body/MediaType']", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + } + }, + "runAfter": { + "SetProposalId": [ + "Succeeded" + ] + }, + "expression": { + "not": { + "equals": [ + "@outputs('GetResponseDetails')?['body/rdde59a23cc104fc7b93e394925f30168']", + "" + ] + } + }, + "metadata": { + "operationMetadataId": "a4c8c8ae-151d-4349-9dfc-5fd8ee44e922" + }, + "type": "If" + }, + "GetMatchingSupervisor": { + "runAfter": { + "SetSupervisorEmail": [ + "Succeeded" + ], + "IfUserExists": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "ecae3a00-da6c-48dd-a659-a020e89065e7" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" }, - "required": [ - "name", - "link", - "id", - "type", - "size", - "referenceId", - "driveId", - "status", - "uploadSessionUrl" + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[user]", + "$filter": "Email eq '@{variables('SupervisorEmail')}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } + }, + "IfSupervisorExists": { + "actions": {}, + "runAfter": { + "GetMatchingSupervisor": [ + "Succeeded" + ] + }, + "else": { + "actions": { + "PersistNewSupervisor": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "0bc44550-c738-4962-afd9-8944446555e6" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[user]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/email": "@variables('SupervisorEmail')", + "item/id": "@guid()", + "item/name": "@outputs('GetResponseDetails')?['body/ra234958191ee49a28a4fc68389dd0ce2']", + "item/role": "SUPERVISOR", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + } + } + }, + "expression": { + "greater": [ + "@length(body('GetMatchingSupervisor')['value'])", + 0 + ] + }, + "metadata": { + "operationMetadataId": "c369f54e-1077-42b2-ab0c-b64862ab1b57" + }, + "type": "If" + }, + "PersistProposal": { + "runAfter": { + "IfSupervisorExists": [ + "Succeeded" ], - "type": "object" + "SetTopicAreaDetails": [ + "Succeeded" + ] }, - "type": "array" - } - } - }, - "ExtractProposalPDFName": { - "runAfter": { - "ParseProposalPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "6168e8c3-e6fc-40c3-9af4-7a37c36cdb5a" - }, - "type": "InitializeVariable", - "inputs": { - "variables": [ - { - "name": "ProposalPDFName", - "type": "string", - "value": "@{first(body('ParseProposalPDF'))?['name']}" + "metadata": { + "operationMetadataId": "29966d86-05ac-472a-a145-9be54394940c" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/description": "@outputs('GetResponseDetails')?['body/rc6188bd68e4d4ab19206e5e06dd703be']", + "item/id": "@variables('ProposalId')", + "item/language": "@outputs('GetResponseDetails')?['body/rb26c844ff536435a9abf2fae9d962082']", + "item/statusKey": "OPEN", + "item/studyLevel": "@outputs('GetResponseDetails')?['body/r93c920c31aaf4b8f8ca5e55bb9a0bf87']", + "item/title": "@outputs('GetResponseDetails')?['body/r2b3875d21899474a988a886e0d5b3621']", + "item/topicAreaSlug": "@variables('TopicAreaDetails')['Slug']", + "item/typeKey": "SUPERVISOR", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/ownedByUserEmail": "@outputs('GetResponseDetails')?['body/responder']", + "item/timeFrame": "@outputs('GetResponseDetails')?['body/r564b7a6cc5bf42ffb900990d26246c80']" + }, + "authentication": "@parameters('$authentication')" } - ] - } - }, - "GetFileUploadProposalPDF": { - "runAfter": { - "ExtractProposalPDFName": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "339b9272-47e6-4510-8a05-dad3e41ab01d" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "path": "/Apps/Microsoft Forms/Publish Thesis Proposal/Research Proposal (PDF)/@{variables('ProposalPDFName')}", - "inferContentType": true }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness", - "operationId": "GetFileContentByPath", - "connectionName": "shared_onedriveforbusiness" - } - } - }, - "PersistProposalPDF": { - "runAfter": { - "GetFileUploadProposalPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "73d10613-2f21-405c-94f2-a864355e8d60" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", - "name": "@{variables('ProposalId')}.pdf", - "body": "@body('GetFileUploadProposalPDF')" + "PersistProposalSupervision": { + "runAfter": { + "PersistProposal": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "d310ff8e-6f06-4cbc-bcaf-924e1974cdf2" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[userproposalsupervision]", + "item/id": "@variables('ProposalId')", + "item/proposalId": "@variables('ProposalId')", + "item/studyLevel": "@outputs('GetResponseDetails')?['body/r93c920c31aaf4b8f8ca5e55bb9a0bf87']", + "item/supervisorEmail": "@variables('SupervisorEmail')" + }, + "authentication": "@parameters('$authentication')" + } }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateFile", - "connectionName": "shared_sharepointonline" + "SupervisorConfirmationEmail": { + "runAfter": { + "IsProposalPdfAttached": [ + "Succeeded" + ], + "PersistProposalSupervision": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "daa4cff2-ecb1-4b41-b8b0-5d29d315a3ea" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@variables('SupervisorEmail')", + "emailMessage/Subject": "DBF Theses - Your Proposal was posted", + "emailMessage/Body": "

Your proposal on \"@{outputs('GetResponseDetails')?['body/r2b3875d21899474a988a886e0d5b3621']}\" was posted on the DBF Thesis Platform. You will be notified as soon as applications are received.
\n
\nThe proposal is visible on https://theses.bf.uzh.ch/?supervisor=true&proposalId=@{variables('ProposalId')}.
\n
\nIf you have any further remarks, please contact the DBF Thesis Coordinator by replying to this email.
\n
\nBest regards,
\nDBF Thesis Coordinator

", + "emailMessage/Cc": "@outputs('GetResponseDetails')?['body/responder']", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/ReplyTo": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/Importance": "Normal" + }, + "authentication": "@parameters('$authentication')" + } } }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" - } - } - }, - "CreateShareLinkProposalPDF": { "runAfter": { - "PersistProposalPDF": [ + "InitializeProposalPdfName": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "c63fa1e6-f889-4076-b4d1-47638b03d785" + "operationMetadataId": "c6409f3d-dcb2-43dd-b9fc-82dfb5e57771" }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", - "id": "@outputs('PersistProposalPDF')?['body/ItemId']", - "permission/type": "view", - "permission/scope": "organization" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateSharingLink", - "connectionName": "shared_sharepointonline" - } - } + "type": "Scope" }, - "GetMatchingSupervisor": { - "runAfter": { - "IfUserExists": [ - "Succeeded" - ], - "SetSupervisorEmail": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "ecae3a00-da6c-48dd-a659-a020e89065e7" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[user]", - "$filter": "Email eq '@{variables('SupervisorEmail')}'", - "$top": 1 + "Catch": { + "actions": { + "FilterForFailedOrTimedOutStatus": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "ca1bedd8-7555-4a99-a290-1c22c2e6e229" + }, + "type": "Query", + "inputs": { + "from": "@result('Try')", + "where": "@or(equals(item()?['Status'], 'Failed'), equals(item()?['Status'], 'TimedOut'))" + } }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "GetItems", - "connectionName": "shared_azuremysql" - } - } - }, - "IfSupervisorExists": { - "actions": {}, - "runAfter": { - "GetMatchingSupervisor": [ - "Succeeded" - ] - }, - "else": { - "actions": { - "PersistNewSupervisor": { - "metadata": { - "operationMetadataId": "0bc44550-c738-4962-afd9-8944446555e6" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[user]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/email": "@variables('SupervisorEmail')", - "item/id": "@guid()", - "item/name": "@outputs('GetResponseDetails')?['body/ra234958191ee49a28a4fc68389dd0ce2']", - "item/role": "SUPERVISOR", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + "CreateHtmlTable": { + "runAfter": { + "FilterForFailedOrTimedOutStatus": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "34b6a96f-64c6-43fd-89a3-fe7d5ef245ff" + }, + "type": "Table", + "inputs": { + "from": "@body('FilterForFailedOrTimedOutStatus')", + "format": "HTML", + "columns": [ + { + "header": "ProposalId", + "value": "@triggerBody()?['proposalId']" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" + { + "header": "ProposalTitle", + "value": "@outputs('GetResponseDetails')?['body/r2b3875d21899474a988a886e0d5b3621']" + }, + { + "header": "SubmittedBy", + "value": "@outputs('GetResponseDetails')?['body/responder']" + }, + { + "header": "ErrorCode", + "value": "@item()?['code']" } - } + ] } - } - }, - "expression": { - "greater": [ - "@length(body('GetMatchingSupervisor')['value'])", - 0 - ] - }, - "metadata": { - "operationMetadataId": "c369f54e-1077-42b2-ab0c-b64862ab1b57" - }, - "type": "If" - }, - "PersistProposal": { - "runAfter": { - "SetTopicAreaDetails": [ - "Succeeded" - ], - "IfSupervisorExists": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "29966d86-05ac-472a-a145-9be54394940c" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/description": "@outputs('GetResponseDetails')?['body/rc6188bd68e4d4ab19206e5e06dd703be']", - "item/id": "@variables('ProposalId')", - "item/language": "@outputs('GetResponseDetails')?['body/rb26c844ff536435a9abf2fae9d962082']", - "item/statusKey": "OPEN", - "item/studyLevel": "@outputs('GetResponseDetails')?['body/r93c920c31aaf4b8f8ca5e55bb9a0bf87']", - "item/title": "@outputs('GetResponseDetails')?['body/r2b3875d21899474a988a886e0d5b3621']", - "item/topicAreaSlug": "@variables('TopicAreaDetails')['Slug']", - "item/typeKey": "SUPERVISOR", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/ownedByUserEmail": "@outputs('GetResponseDetails')?['body/responder']", - "item/timeFrame": "@outputs('GetResponseDetails')?['body/r564b7a6cc5bf42ffb900990d26246c80']" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "PersistProposalSupervision": { - "runAfter": { - "PersistProposal": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "d310ff8e-6f06-4cbc-bcaf-924e1974cdf2" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[userproposalsupervision]", - "item/id": "@variables('ProposalId')", - "item/proposalId": "@variables('ProposalId')", - "item/studyLevel": "@outputs('GetResponseDetails')?['body/r93c920c31aaf4b8f8ca5e55bb9a0bf87']", - "item/supervisorEmail": "@variables('SupervisorEmail')" + "Terminate": { + "runAfter": { + "SendFailureNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0f41eff7-41db-4eae-8e12-46f64d545e8b" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" + "SendFailureNotification": { + "runAfter": { + "CreateHtmlTable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7c370de-36de-45b2-ae99-b7d0e7013242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sendmail-2", + "operationId": "SendEmailV3", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail" + }, + "parameters": { + "request/to": "@{parameters('Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)')};", + "request/subject": "(@{parameters('Environment (uzhbf_thesisplatform_environment_env_var)')}) Failure in UZH BF Thesis Platform - Thesis Proposal Posting", + "request/text": "

@{body('CreateHtmlTable')}

" + }, + "authentication": "@parameters('$authentication')" + } } - } - }, - "PersistProposalAttachment": { - "runAfter": { - "PersistProposalSupervision": [ - "Succeeded" - ], - "CreateShareLinkProposalPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "2e44e2bf-bb36-4238-8ab8-7804f6a6725d" }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalattachment]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/href": "@outputs('CreateShareLinkProposalPDF')?['body/link/webUrl']", - "item/id": "@{guid()}", - "item/name": "Proposal", - "item/proposalId": "@variables('ProposalId')", - "item/type": "@outputs('PersistProposalPDF')?['body/MediaType']", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "SupervisorConfirmationEmail": { "runAfter": { - "PersistProposalAttachment": [ - "Succeeded" + "Try": [ + "Failed", + "TimedOut" ] }, "metadata": { - "operationMetadataId": "daa4cff2-ecb1-4b41-b8b0-5d29d315a3ea" + "operationMetadataId": "054f28a3-080c-4f8a-9529-1183121f12f9" }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@variables('SupervisorEmail')", - "emailMessage/Subject": "DBF Theses - Your Proposal was posted", - "emailMessage/Body": "

Your proposal on \"@{outputs('GetResponseDetails')?['body/r2b3875d21899474a988a886e0d5b3621']}\" was posted on the DBF Thesis Platform. You will be notified as soon as applications are received.
\n
\nThe proposal is visible on https://theses.bf.uzh.ch/?supervisor=true&proposalId=@{variables('ProposalId')}.
\n
\nIf you have any further remarks, please contact the DBF Thesis Coordinator by replying to this email.
\n
\nBest regards,
\nDBF Thesis Coordinator

", - "emailMessage/Cc": "@outputs('GetResponseDetails')?['body/responder']", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/ReplyTo": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/Importance": "Normal" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", - "operationId": "SharedMailboxSendEmailV2", - "connectionName": "shared_office365_1" - } - } + "type": "Scope" } } }, - "templateName": null + "templateName": "" }, "schemaVersion": "1.0.0.0" } \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json.data.xml b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json.data.xml new file mode 100644 index 0000000..f6e90e5 --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json.data.xml @@ -0,0 +1,26 @@ + + + /Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 0.0.0.1 + 1 + 0 + 1 + none + + + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json index a053fd8..4b998ad 100644 --- a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json @@ -45,20 +45,29 @@ "api": { "name": "shared_office365" } + }, + "shared_sendmail-2": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "uzhbf_thesisplatform_mail_ref" + }, + "api": { + "name": "shared_sendmail" + } } }, "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "contentVersion": "1.0.0.0", "parameters": { - "$authentication": { - "defaultValue": {}, - "type": "SecureObject" - }, "$connections": { "defaultValue": {}, "type": "Object" }, + "$authentication": { + "defaultValue": {}, + "type": "SecureObject" + }, "Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)": { "defaultValue": "https://uzh.sharepoint.com/sites/UZHBFThesisPlatformDEV", "type": "String", @@ -121,6 +130,20 @@ "metadata": { "schemaName": "uzhbf_thesisplatform_proposals_document_library_name_env_var" } + }, + "Environment (uzhbf_thesisplatform_environment_env_var)": { + "defaultValue": "DEV", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_environment_env_var" + } + }, + "Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)": { + "defaultValue": "flow@bf.uzh.ch", + "type": "String", + "metadata": { + "schemaName": "uzhbf_thesisplatform_email_failure_env_var" + } } }, "triggers": { @@ -131,42 +154,21 @@ }, "type": "OpenApiConnectionWebhook", "inputs": { + "host": { + "connectionName": "shared_microsoftforms", + "operationId": "CreateFormWebhook", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms" + }, "parameters": { "form_id": "@parameters('Submit Thesis Proposal Forms Id (uzhbf_thesisplatform_submit_thesis_proposal_forms_id_env_var)')" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms", - "operationId": "CreateFormWebhook", - "connectionName": "shared_microsoftforms" - } + "authentication": "@parameters('$authentication')" } } }, "actions": { - "GetResponseDetails": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "d7a6dd06-5c53-41d1-966b-2d312f30fe3a" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "form_id": "@parameters('Submit Thesis Proposal Forms Id (uzhbf_thesisplatform_submit_thesis_proposal_forms_id_env_var)')", - "response_id": "@triggerOutputs()?['body/resourceData/responseId']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms", - "operationId": "GetFormResponseById", - "connectionName": "shared_microsoftforms" - } - } - }, "InitializeProposalId": { - "runAfter": { - "GetResponseDetails": [ - "Succeeded" - ] - }, + "runAfter": {}, "metadata": { "operationMetadataId": "4ae19faf-62a6-4fcd-a3ef-8c80f977ec92" }, @@ -175,8 +177,7 @@ "variables": [ { "name": "ProposalId", - "type": "string", - "value": "@{guid()}" + "type": "string" } ] } @@ -195,13 +196,12 @@ "variables": [ { "name": "Originator", - "type": "string", - "value": "@parameters('Originator (uzhbf_thesisplatform_originator_env_var)')" + "type": "string" } ] } }, - "InitializeMatchingSupervisor": { + "InitializeMatchingSupervisors": { "runAfter": { "InitializeOriginator": [ "Succeeded" @@ -222,7 +222,7 @@ }, "InitializeWasSpecificRequest": { "runAfter": { - "InitializeMatchingSupervisor": [ + "InitializeMatchingSupervisors": [ "Succeeded" ] }, @@ -234,39 +234,14 @@ "variables": [ { "name": "WasSpecificRequest", - "type": "boolean", - "value": false + "type": "boolean" } ] } }, - "TopicAreas": { - "runAfter": { - "InitializeWasSpecificRequest": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "ea08e293-d266-49aa-b9e6-adced5938564" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Topic Areas List Name (uzhbf_thesisplatform_topic_areas_list_name_env_var)')", - "$filter": "Title eq '@{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}'", - "$top": 1 - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "GetItems", - "connectionName": "shared_sharepointonline_1" - } - } - }, "InitializeTopicAreaDetails": { "runAfter": { - "TopicAreas": [ + "InitializeWasSpecificRequest": [ "Succeeded" ] }, @@ -278,749 +253,1228 @@ "variables": [ { "name": "TopicAreaDetails", - "type": "object", - "value": "@first(body('TopicAreas')?['value'])" + "type": "object" } ] } }, - "ForEachAreaSupervisor": { - "foreach": "@variables('TopicAreaDetails')['Supervisors']", - "actions": { - "AreaSupervisorDetails": { - "metadata": { - "operationMetadataId": "6e7a457b-5766-48ec-87c8-8f473fdd327c" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", - "id": "@items('ForEachAreaSupervisor')?['ID']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "GetItem", - "connectionName": "shared_sharepointonline_1" - } - } - }, - "Append_to_array_variable": { - "runAfter": { - "AreaSupervisorDetails": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "718cf67d-b738-474b-8492-0cdc54dde8fb" - }, - "type": "AppendToArrayVariable", - "inputs": { - "name": "MatchingSupervisors", - "value": "@outputs('AreaSupervisorDetails')?['body/Title']" - } - } - }, + "InitializeProposalPdfName": { "runAfter": { "InitializeTopicAreaDetails": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "c8b1bdac-53b0-4199-9748-0e5884e131ab" - }, - "type": "Foreach" - }, - "PersistProposalToDB": { - "runAfter": { - "ForEachAreaSupervisor": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "7d90cba3-0cba-448a-a6f3-1bd130f7eed9" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposal]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/description": "@outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']", - "item/id": "@variables('ProposalId')", - "item/language": "@outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']", - "item/statusKey": "OPEN", - "item/studyLevel": "@outputs('GetResponseDetails')?['body/rc797ecd1491b44a0ac091174abbac9f6']", - "item/title": "@outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']", - "item/topicAreaSlug": "@variables('TopicAreaDetails')['Slug']", - "item/typeKey": "STUDENT", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "PersistApplicationToDB": { - "runAfter": { - "PersistProposalToDB": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "fdff0e9f-8f24-4928-bc5f-18b23777b378" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalapplication]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/email": "@outputs('GetResponseDetails')?['body/responder']", - "item/fullName": "@outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']", - "item/id": "@outputs('PersistProposalToDB')?['body/id']", - "item/matriculationNumber": "@outputs('GetResponseDetails')?['body/r6c3b387342aa4bd0b5f423aa43662850']", - "item/motivation": "@outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']", - "item/plannedStartAt": "@outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']", - "item/proposalId": "@outputs('PersistProposalToDB')?['body/id']", - "item/statusKey": "OPEN", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "ParseFileUploadProposalPDF": { - "runAfter": { - "PersistApplicationToDB": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "5702afa2-f3b2-4293-85b7-c1c553782920" - }, - "type": "ParseJson", - "inputs": { - "content": "@outputs('GetResponseDetails')?['body/r97c7d5dddc1c46149360e60cee1c31b2']", - "schema": { - "items": { - "properties": { - "driveId": { - "type": "string" - }, - "id": { - "type": "string" - }, - "link": { - "type": "string" - }, - "name": { - "type": "string" - }, - "referenceId": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "status": { - "type": "integer" - }, - "type": {}, - "uploadSessionUrl": {} - }, - "required": [ - "name", - "link", - "id", - "type", - "size", - "referenceId", - "driveId", - "status", - "uploadSessionUrl" - ], - "type": "object" - }, - "type": "array" - } - } - }, - "ParsePersonalCVPDF": { - "runAfter": { - "PersistApplicationToDB": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "eae9f188-4fd6-450d-a4f1-4bb6b0efb139" - }, - "type": "ParseJson", - "inputs": { - "content": "@outputs('GetResponseDetails')?['body/r36080bd39649467ca994ab4b0435ebbe']", - "schema": { - "items": { - "properties": { - "driveId": { - "type": "string" - }, - "id": { - "type": "string" - }, - "link": { - "type": "string" - }, - "name": { - "type": "string" - }, - "referenceId": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "status": { - "type": "integer" - }, - "type": {}, - "uploadSessionUrl": {} - }, - "required": [ - "name", - "link", - "id", - "type", - "size", - "referenceId", - "driveId", - "status", - "uploadSessionUrl" - ], - "type": "object" - }, - "type": "array" - } - } - }, - "ParseTranscriptPDF": { - "runAfter": { - "PersistApplicationToDB": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "c48ec50d-be41-451e-881b-564d5026744c" - }, - "type": "ParseJson", - "inputs": { - "content": "@outputs('GetResponseDetails')?['body/rd29a58b86f3541de8de84ed702dd0eec']", - "schema": { - "items": { - "properties": { - "driveId": { - "type": "string" - }, - "id": { - "type": "string" - }, - "link": { - "type": "string" - }, - "name": { - "type": "string" - }, - "referenceId": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "status": { - "type": "integer" - }, - "type": {}, - "uploadSessionUrl": {} - }, - "required": [ - "name", - "link", - "id", - "type", - "size", - "referenceId", - "driveId", - "status", - "uploadSessionUrl" - ], - "type": "object" - }, - "type": "array" - } - } - }, - "ExtractProposalPDFName": { - "runAfter": { - "ParseFileUploadProposalPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "35adc576-9010-4690-9d76-81a40985f436" + "operationMetadataId": "081090d7-8e0f-4a42-a33d-3ef0a55f02b7" }, "type": "InitializeVariable", "inputs": { "variables": [ { "name": "ProposalPDFName", - "type": "string", - "value": "@{first(body('ParseFileUploadProposalPDF'))?['name']}" + "type": "string" } ] } }, - "GetFileUploadProposalPDF": { + "InitializePersonalCvPdfName": { "runAfter": { - "ExtractProposalPDFName": [ + "InitializeProposalPdfName": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "fc42a6f8-0ab5-470e-9768-b94ffce6ecbf" + "operationMetadataId": "8c4d455b-8d02-48e8-9d61-0adb91880fa7" }, - "type": "OpenApiConnection", + "type": "InitializeVariable", "inputs": { - "parameters": { - "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Research Proposal (MS Word or PDF)/@{variables('ProposalPDFName')}", - "inferContentType": true - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness", - "operationId": "GetFileContentByPath", - "connectionName": "shared_onedriveforbusiness_1" - } - } - }, - "PersistProposalFile": { - "runAfter": { - "GetFileUploadProposalPDF": [ - "Succeeded" + "variables": [ + { + "name": "PersonalCVPDFName", + "type": "string" + } ] - }, - "metadata": { - "operationMetadataId": "14d5659d-ec2a-4436-a3e4-164bf6e1422e" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", - "name": "@{variables('ProposalId')}_proposal_@{variables('ProposalPDFName')}", - "body": "@body('GetFileUploadProposalPDF')" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateFile", - "connectionName": "shared_sharepointonline_1" - } - }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" - } } }, - "ShareLinkProposalFile": { + "InitializeTranscriptPdfName": { "runAfter": { - "PersistProposalFile": [ + "InitializePersonalCvPdfName": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "97073148-ecee-4222-bc02-d5463a009fb0" + "operationMetadataId": "f133a716-39de-4de8-b3bc-bb87b070eacd" }, - "type": "OpenApiConnection", + "type": "InitializeVariable", "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", - "id": "@outputs('PersistProposalFile')?['body/ItemId']", - "permission/type": "view", - "permission/scope": "organization" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateSharingLink", - "connectionName": "shared_sharepointonline_1" - } - } - }, - "CreateProposalAttachment": { - "runAfter": { - "ShareLinkProposalFile": [ - "Succeeded" + "variables": [ + { + "name": "TranscriptPDFName", + "type": "string" + } ] - }, - "metadata": { - "operationMetadataId": "e3eb6ad7-b695-48b4-8f21-2c10c4ab6b96" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[proposalattachment]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/href": "@outputs('ShareLinkProposalFile')?['body/link/webUrl']", - "item/id": "@{guid()}", - "item/name": "Proposal", - "item/proposalId": "@variables('ProposalId')", - "item/type": "@outputs('PersistProposalFile')?['body/MediaType']", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } } }, - "EmailToSupervisors": { - "foreach": "@variables('MatchingSupervisors')", + "Try": { "actions": { - "AdaptiveCard": { + "GetResponseDetails": { + "runAfter": {}, "metadata": { - "operationMetadataId": "fe7ccff6-5733-4c75-8c50-ce0674dbd1b1" + "operationMetadataId": "d7a6dd06-5c53-41d1-966b-2d312f30fe3a" }, - "type": "Compose", + "type": "OpenApiConnection", "inputs": { - "type": "AdaptiveCard", - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "version": "1.0", - "originator": "@{variables('Originator')}", - "body": [ - { - "type": "TextBlock", - "text": "@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}", - "wrap": true, - "weight": "Bolder", - "size": "Medium" - }, - { - "type": "TextBlock", - "text": "@{outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']}", - "wrap": true - }, - { - "type": "TextBlock", - "text": "@{outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']}", - "wrap": true - }, - { - "type": "FactSet", - "facts": [ - { - "title": "Submitted By", - "value": "@{outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']} (@{outputs('GetResponseDetails')?['body/r6c3b387342aa4bd0b5f423aa43662850']}, @{outputs('GetResponseDetails')?['body/responder']})" - }, - { - "title": "Proposed Title", - "value": "@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}" - }, - { - "title": "Type of Proposal", - "value": "@{outputs('GetResponseDetails')?['body/rc797ecd1491b44a0ac091174abbac9f6']}" - }, - { - "title": "Field of Research", - "value": "@{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}" - }, - { - "title": "Proposal Language", - "value": "@{outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']}" - }, - { - "title": "Planned Start Date", - "value": "@{outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']}" - } - ], - "separator": true - } - ], - "actions": [ - { - "type": "Action.ShowCard", - "title": "Accept", - "card": { - "type": "AdaptiveCard", - "body": [ - { - "type": "TextBlock", - "text": "Once you accept this proposal, the student will be asked to verify the matching. The proposal will be removed from the proposal market and assigned to you for supervision.", - "wrap": true - }, - { - "type": "Input.Text", - "placeholder": "Your message will be sent to the student alongside your acceptance notification.", - "id": "acceptComment", - "isRequired": true, - "errorMessage": "Field required", - "label": "Comment" - } - ], - "actions": [ - { - "type": "Action.Http", - "title": "Submit", - "method": "POST", - "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", - "body": "{\"actionType\": \"ACCEPT\", \"comment\": \"{{acceptComment.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", - "headers": [ + "host": { + "connectionName": "shared_microsoftforms", + "operationId": "GetFormResponseById", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_microsoftforms" + }, + "parameters": { + "form_id": "@parameters('Submit Thesis Proposal Forms Id (uzhbf_thesisplatform_submit_thesis_proposal_forms_id_env_var)')", + "response_id": "@triggerOutputs()?['body/resourceData/responseId']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetProposalId": { + "runAfter": { + "GetResponseDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "a9bc3897-2eca-441e-b401-0ef359b2ffcb" + }, + "type": "SetVariable", + "inputs": { + "name": "ProposalId", + "value": "@{guid()}" + } + }, + "SetOriginator": { + "runAfter": { + "SetProposalId": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "b85d8d03-1af3-43cf-9f22-e42b942ff725" + }, + "type": "SetVariable", + "inputs": { + "name": "Originator", + "value": "@parameters('Originator (uzhbf_thesisplatform_originator_env_var)')" + } + }, + "SetWasSpecificRequest": { + "runAfter": { + "SetOriginator": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0b047e5f-a866-4479-b0a4-5d90658c0cfe" + }, + "type": "SetVariable", + "inputs": { + "name": "WasSpecificRequest", + "value": false + } + }, + "TopicAreas": { + "runAfter": { + "SetWasSpecificRequest": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "ea08e293-d266-49aa-b9e6-adced5938564" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "GetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Topic Areas List Name (uzhbf_thesisplatform_topic_areas_list_name_env_var)')", + "$filter": "Title eq '@{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}'", + "$top": 1 + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetTopicAreaDetails": { + "runAfter": { + "TopicAreas": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "193e9122-5159-45ea-9788-9348d2f829ad" + }, + "type": "SetVariable", + "inputs": { + "name": "TopicAreaDetails", + "value": "@first(body('TopicAreas')?['value'])" + } + }, + "ForEachAreaSupervisor": { + "foreach": "@variables('TopicAreaDetails')['Supervisors']", + "actions": { + "AreaSupervisorDetails": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "a0f45886-9e62-403b-9c5f-06ceb176d88f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "GetItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Supervisors List Name (uzhbf_thesisplatform_supervisors_list_name_env_var)')", + "id": "@items('ForEachAreaSupervisor')?['ID']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "AppendToMatchingSupervisors": { + "runAfter": { + "AreaSupervisorDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "718cf67d-b738-474b-8492-0cdc54dde8fb" + }, + "type": "AppendToArrayVariable", + "inputs": { + "name": "MatchingSupervisors", + "value": "@outputs('AreaSupervisorDetails')?['body/Title']" + } + } + }, + "runAfter": { + "SetTopicAreaDetails": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "64a45e69-b386-4d4f-b93b-538eea74fc79" + }, + "type": "Foreach" + }, + "PersistProposalToDB": { + "runAfter": { + "ForEachAreaSupervisor": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "7d90cba3-0cba-448a-a6f3-1bd130f7eed9" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposal]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/description": "@outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']", + "item/id": "@variables('ProposalId')", + "item/language": "@outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']", + "item/statusKey": "OPEN", + "item/studyLevel": "@outputs('GetResponseDetails')?['body/rc797ecd1491b44a0ac091174abbac9f6']", + "item/title": "@outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']", + "item/topicAreaSlug": "@variables('TopicAreaDetails')['Slug']", + "item/typeKey": "STUDENT", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistApplicationToDB": { + "runAfter": { + "PersistProposalToDB": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "fdff0e9f-8f24-4928-bc5f-18b23777b378" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalapplication]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/email": "@outputs('GetResponseDetails')?['body/responder']", + "item/fullName": "@outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']", + "item/id": "@outputs('PersistProposalToDB')?['body/id']", + "item/matriculationNumber": "@outputs('GetResponseDetails')?['body/r6c3b387342aa4bd0b5f423aa43662850']", + "item/motivation": "@outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']", + "item/plannedStartAt": "@outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']", + "item/proposalId": "@outputs('PersistProposalToDB')?['body/id']", + "item/statusKey": "OPEN", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "ParseFileUploadProposalPDF": { + "runAfter": { + "PersistApplicationToDB": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5702afa2-f3b2-4293-85b7-c1c553782920" + }, + "type": "ParseJson", + "inputs": { + "content": "@outputs('GetResponseDetails')?['body/r97c7d5dddc1c46149360e60cee1c31b2']", + "schema": { + "items": { + "properties": { + "driveId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "link": { + "type": "string" + }, + "name": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "type": {}, + "uploadSessionUrl": {} + }, + "required": [ + "name", + "link", + "id", + "type", + "size", + "referenceId", + "driveId", + "status", + "uploadSessionUrl" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "ParsePersonalCVPDF": { + "runAfter": { + "PersistApplicationToDB": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "eae9f188-4fd6-450d-a4f1-4bb6b0efb139" + }, + "type": "ParseJson", + "inputs": { + "content": "@outputs('GetResponseDetails')?['body/r36080bd39649467ca994ab4b0435ebbe']", + "schema": { + "items": { + "properties": { + "driveId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "link": { + "type": "string" + }, + "name": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "type": {}, + "uploadSessionUrl": {} + }, + "required": [ + "name", + "link", + "id", + "type", + "size", + "referenceId", + "driveId", + "status", + "uploadSessionUrl" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "ParseTranscriptPDF": { + "runAfter": { + "PersistApplicationToDB": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "c48ec50d-be41-451e-881b-564d5026744c" + }, + "type": "ParseJson", + "inputs": { + "content": "@outputs('GetResponseDetails')?['body/rd29a58b86f3541de8de84ed702dd0eec']", + "schema": { + "items": { + "properties": { + "driveId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "link": { + "type": "string" + }, + "name": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "type": {}, + "uploadSessionUrl": {} + }, + "required": [ + "name", + "link", + "id", + "type", + "size", + "referenceId", + "driveId", + "status", + "uploadSessionUrl" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "SetProposalPdfName": { + "runAfter": { + "ParseFileUploadProposalPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "74877f03-bb0b-44eb-afcb-5d1a8d91c64d" + }, + "type": "SetVariable", + "inputs": { + "name": "ProposalPDFName", + "value": "@{first(body('ParseFileUploadProposalPDF'))?['name']}" + } + }, + "GetFileUploadProposalPDF": { + "runAfter": { + "SetProposalPdfName": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "fc42a6f8-0ab5-470e-9768-b94ffce6ecbf" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_onedriveforbusiness_1", + "operationId": "GetFileContentByPath", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness" + }, + "parameters": { + "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Research Proposal (MS Word or PDF)/@{variables('ProposalPDFName')}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistProposalFile": { + "runAfter": { + "GetFileUploadProposalPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "14d5659d-ec2a-4436-a3e4-164bf6e1422e" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", + "name": "@{variables('ProposalId')}_proposal_@{variables('ProposalPDFName')}", + "body": "@body('GetFileUploadProposalPDF')" + }, + "authentication": "@parameters('$authentication')" + }, + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } + }, + "ShareLinkProposalFile": { + "runAfter": { + "PersistProposalFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "97073148-ecee-4222-bc02-d5463a009fb0" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('PersistProposalFile')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetPersonalCvPdfName": { + "runAfter": { + "ParsePersonalCVPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "1f71a2b8-c445-4495-8bfd-f06d5d687972" + }, + "type": "SetVariable", + "inputs": { + "name": "PersonalCVPDFName", + "value": "@{first(body('ParsePersonalCVPDF'))?['name']}" + } + }, + "GetFileUploadCVPDF": { + "runAfter": { + "SetPersonalCvPdfName": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "907d739d-ea78-479a-9b6a-03d3b381ed25" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_onedriveforbusiness_1", + "operationId": "GetFileContentByPath", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness" + }, + "parameters": { + "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Personal CV (PDF)/@{variables('PersonalCVPDFName')}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistCVPDF": { + "runAfter": { + "GetFileUploadCVPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5addcee8-04fe-48e5-aa5b-e73aa3bf0b27" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", + "name": "@{variables('ProposalId')}_cv_@{variables('PersonalCVPDFName')}", + "body": "@body('GetFileUploadCVPDF')" + }, + "authentication": "@parameters('$authentication')" + }, + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } + }, + "ShareLinkCVPDF": { + "runAfter": { + "PersistCVPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "f98fbe3a-7eae-42a9-9aec-2a4950006e98" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('PersistCVPDF')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } + }, + "SetTranscriptPdfName": { + "runAfter": { + "ParseTranscriptPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "748c8af6-c8e9-4914-a67c-7900bc26e727" + }, + "type": "SetVariable", + "inputs": { + "name": "TranscriptPDFName", + "value": "@{first(body('ParseTranscriptPDF'))?['name']}" + } + }, + "GetFileUploadTranscriptPDF": { + "runAfter": { + "SetTranscriptPdfName": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4ba05d15-c466-44b5-956a-92142a49e468" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_onedriveforbusiness_1", + "operationId": "GetFileContentByPath", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness" + }, + "parameters": { + "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Transcript of Records (PDF)/@{variables('TranscriptPDFName')}", + "inferContentType": true + }, + "authentication": "@parameters('$authentication')" + } + }, + "PersistTranscriptPDF": { + "runAfter": { + "GetFileUploadTranscriptPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "c15d6cd9-aa79-4e96-bab0-c70a00a42518" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateFile", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", + "name": "@{variables('ProposalId')}_transcript_@{variables('TranscriptPDFName')}", + "body": "@body('GetFileUploadTranscriptPDF')" + }, + "authentication": "@parameters('$authentication')" + }, + "runtimeConfiguration": { + "contentTransfer": { + "transferMode": "Chunked" + } + } + }, + "ShareLinkTranscriptPDF": { + "runAfter": { + "PersistTranscriptPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "5aa84c0a-2fdd-4b42-a54a-9d0e05c65856" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sharepointonline_1", + "operationId": "CreateSharingLink", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + }, + "parameters": { + "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", + "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", + "id": "@outputs('PersistTranscriptPDF')?['body/ItemId']", + "permission/type": "view", + "permission/scope": "organization" + }, + "authentication": "@parameters('$authentication')" + } + }, + "CreateProposalAttachment": { + "runAfter": { + "ShareLinkProposalFile": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e3eb6ad7-b695-48b4-8f21-2c10c4ab6b96" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[proposalattachment]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/href": "@outputs('ShareLinkProposalFile')?['body/link/webUrl']", + "item/id": "@{guid()}", + "item/name": "Proposal", + "item/proposalId": "@variables('ProposalId')", + "item/type": "@outputs('PersistProposalFile')?['body/MediaType']", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "CreateCVAttachment": { + "runAfter": { + "ShareLinkCVPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "edca8bce-6316-4cee-b027-83094e1b5a19" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[applicationattachment]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/href": "@outputs('ShareLinkCVPDF')?['body/link/webUrl']", + "item/id": "@{guid()}", + "item/name": "CV", + "item/proposalApplicationId": "@outputs('PersistApplicationToDB')?['body/id']", + "item/type": "@outputs('PersistCVPDF')?['body/MediaType']", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "CreateTranscriptAttachment": { + "runAfter": { + "ShareLinkTranscriptPDF": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "6023d5d8-64fd-4511-812e-c3f1f0b1bd8f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_azuremysql", + "operationId": "PostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql" + }, + "parameters": { + "server": "default", + "database": "default", + "table": "[main].[applicationattachment]", + "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", + "item/href": "@outputs('ShareLinkTranscriptPDF')?['body/link/webUrl']", + "item/id": "@{guid()}", + "item/name": "Transcript", + "item/proposalApplicationId": "@outputs('PersistApplicationToDB')?['body/id']", + "item/type": "@outputs('PersistTranscriptPDF')?['body/MediaType']", + "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" + }, + "authentication": "@parameters('$authentication')" + } + }, + "EmailToSupervisors": { + "foreach": "@variables('MatchingSupervisors')", + "actions": { + "AdaptiveCard": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "fe7ccff6-5733-4c75-8c50-ce0674dbd1b1" + }, + "type": "Compose", + "inputs": { + "type": "AdaptiveCard", + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "version": "1.0", + "originator": "@{variables('Originator')}", + "body": [ + { + "type": "TextBlock", + "text": "@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}", + "wrap": true, + "weight": "Bolder", + "size": "Medium" + }, + { + "type": "TextBlock", + "text": "@{outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']}", + "wrap": true + }, + { + "type": "TextBlock", + "text": "@{outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']}", + "wrap": true + }, + { + "type": "FactSet", + "facts": [ + { + "title": "Submitted By", + "value": "@{outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']} (@{outputs('GetResponseDetails')?['body/r6c3b387342aa4bd0b5f423aa43662850']}, @{outputs('GetResponseDetails')?['body/responder']})" + }, + { + "title": "Proposed Title", + "value": "@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}" + }, + { + "title": "Type of Proposal", + "value": "@{outputs('GetResponseDetails')?['body/rc797ecd1491b44a0ac091174abbac9f6']}" + }, + { + "title": "Field of Research", + "value": "@{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}" + }, + { + "title": "Proposal Language", + "value": "@{outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']}" + }, + { + "title": "Planned Start Date", + "value": "@{outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']}" + } + ], + "separator": true + } + ], + "actions": [ + { + "type": "Action.ShowCard", + "title": "Accept", + "card": { + "type": "AdaptiveCard", + "body": [ { - "name": "Authorization", - "value": "" + "type": "TextBlock", + "text": "Once you accept this proposal, the student will be asked to verify the matching. The proposal will be removed from the proposal market and assigned to you for supervision.", + "wrap": true }, { - "name": "Content-type", - "value": "application/json" + "type": "Input.Text", + "placeholder": "Your message will be sent to the student alongside your acceptance notification.", + "id": "acceptComment", + "isRequired": true, + "errorMessage": "Field required", + "label": "Comment" } - ] - } - ] - } - }, - { - "type": "Action.ShowCard", - "title": "Accept (Tentative)", - "card": { - "type": "AdaptiveCard", - "body": [ - { - "type": "TextBlock", - "text": "When you accept the proposal tentatively, the student will receive your feedback and is required to improve the proposal before you finally accept the proposal for supervision.", - "wrap": true - }, - { - "type": "Input.Text", - "placeholder": "Your message will be sent to the student alongside your notification of interest.", - "id": "tentativeComment", - "label": "Comment", - "isMultiline": true, - "isRequired": true, - "errorMessage": "Field required" - } - ], - "actions": [ - { - "type": "Action.Http", - "title": "Submit", - "method": "POST", - "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", - "body": "{\"actionType\": \"ACCEPT_TENTATIVE\", \"comment\": \"{{tentativeComment.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", - "headers": [ - { - "name": "Authorization", - "value": "" - }, + ], + "actions": [ { - "name": "Content-type", - "value": "application/json" + "type": "Action.Http", + "title": "Submit", + "method": "POST", + "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", + "body": "{\"actionType\": \"ACCEPT\", \"comment\": \"{{acceptComment.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", + "headers": [ + { + "name": "Authorization", + "value": "" + }, + { + "name": "Content-type", + "value": "application/json" + } + ] } ] } - ] - } - }, - { - "type": "Action.ShowCard", - "title": "Reject", - "card": { - "type": "AdaptiveCard", - "body": [ - { - "type": "TextBlock", - "text": "Rejecting this proposal because of lacking content quality or format requirements will cause review by the thesis coordinator. The student will need to improve and resubmit the proposal.", - "wrap": true - }, - { - "type": "Input.ChoiceSet", - "choices": [ + }, + { + "type": "Action.ShowCard", + "title": "Accept (Tentative)", + "card": { + "type": "AdaptiveCard", + "body": [ { - "title": "Proposal too broad", - "value": "TOO_BROAD" + "type": "TextBlock", + "text": "When you accept the proposal tentatively, the student will receive your feedback and is required to improve the proposal before you finally accept the proposal for supervision.", + "wrap": true }, { - "title": "Proposal not sufficiently scientific", - "value": "NOT_SCIENTIFIC" - }, + "type": "Input.Text", + "placeholder": "Your message will be sent to the student alongside your notification of interest.", + "id": "tentativeComment", + "label": "Comment", + "isMultiline": true, + "isRequired": true, + "errorMessage": "Field required" + } + ], + "actions": [ + { + "type": "Action.Http", + "title": "Submit", + "method": "POST", + "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", + "body": "{\"actionType\": \"ACCEPT_TENTATIVE\", \"comment\": \"{{tentativeComment.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", + "headers": [ + { + "name": "Authorization", + "value": "" + }, + { + "name": "Content-type", + "value": "application/json" + } + ] + } + ] + } + }, + { + "type": "Action.ShowCard", + "title": "Reject", + "card": { + "type": "AdaptiveCard", + "body": [ { - "title": "Proposal or scope not clear", - "value": "NOT_CLEAR" + "type": "TextBlock", + "text": "Rejecting this proposal because of lacking content quality or format requirements will cause review by the thesis coordinator. The student will need to improve and resubmit the proposal.", + "wrap": true }, { - "title": "Format unsuitable", - "value": "FORMAT_UNSUITABLE" + "type": "Input.ChoiceSet", + "choices": [ + { + "title": "Proposal too broad", + "value": "TOO_BROAD" + }, + { + "title": "Proposal not sufficiently scientific", + "value": "NOT_SCIENTIFIC" + }, + { + "title": "Proposal or scope not clear", + "value": "NOT_CLEAR" + }, + { + "title": "Format unsuitable", + "value": "FORMAT_UNSUITABLE" + }, + { + "title": "Mismatch in topic area", + "value": "TOPIC_AREA_INVALID" + } + ], + "placeholder": "Why should this proposal be rejected?", + "isRequired": true, + "id": "rejectReason", + "errorMessage": "Field required", + "label": "Reason" }, { - "title": "Mismatch in topic area", - "value": "TOPIC_AREA_INVALID" + "type": "Input.Text", + "placeholder": "Why do you recommend this proposal for rejection? Your comment will not be shown to the student.", + "id": "rejectComment", + "isRequired": true, + "errorMessage": "Field required", + "label": "Comment", + "isMultiline": true } ], - "placeholder": "Why should this proposal be rejected?", - "isRequired": true, - "id": "rejectReason", - "errorMessage": "Field required", - "label": "Reason" - }, - { - "type": "Input.Text", - "placeholder": "Why do you recommend this proposal for rejection? Your comment will not be shown to the student.", - "id": "rejectComment", - "isRequired": true, - "errorMessage": "Field required", - "label": "Comment", - "isMultiline": true - } - ], - "actions": [ - { - "type": "Action.Http", - "title": "Submit", - "method": "POST", - "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", - "body": "{\"actionType\": \"REJECT\", \"comment\": \"{{rejectComment.value}}\", \n\"reason\": \"{{rejectReason.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", - "headers": [ - { - "name": "Authorization", - "value": "" - }, + "actions": [ { - "name": "Content-type", - "value": "application/json" + "type": "Action.Http", + "title": "Submit", + "method": "POST", + "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", + "body": "{\"actionType\": \"REJECT\", \"comment\": \"{{rejectComment.value}}\", \n\"reason\": \"{{rejectReason.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", + "headers": [ + { + "name": "Authorization", + "value": "" + }, + { + "name": "Content-type", + "value": "application/json" + } + ] } ] } - ] - } - }, - { - "type": "Action.ShowCard", - "title": "Decline", - "card": { - "type": "AdaptiveCard", - "body": [ - { - "type": "TextBlock", - "text": "Declining this proposal because of a mismatch of interests or a high workload on your side will keep it available for other supervisors.", - "wrap": true - }, - { - "type": "Input.ChoiceSet", - "choices": [ + }, + { + "type": "Action.ShowCard", + "title": "Decline", + "card": { + "type": "AdaptiveCard", + "body": [ { - "title": "Lack of interest in specific topic", - "value": "LACKING_INTEREST" + "type": "TextBlock", + "text": "Declining this proposal because of a mismatch of interests or a high workload on your side will keep it available for other supervisors.", + "wrap": true }, { - "title": "Personal workload too high", - "value": "PERSONAL_WORKLOAD" + "type": "Input.ChoiceSet", + "choices": [ + { + "title": "Lack of interest in specific topic", + "value": "LACKING_INTEREST" + }, + { + "title": "Personal workload too high", + "value": "PERSONAL_WORKLOAD" + }, + { + "title": "Mismatch in language", + "value": "LANGUAGE" + } + ], + "placeholder": "Why do you want to decline this proposal?", + "id": "declineReason", + "label": "Reason", + "isRequired": true, + "errorMessage": "Field required" }, { - "title": "Mismatch in language", - "value": "LANGUAGE" + "type": "Input.Text", + "placeholder": "Why do you decline this proposal specifically? Your comment will not be shown to the student.", + "id": "declineComment", + "label": "Comment", + "isMultiline": true, + "isRequired": true, + "errorMessage": "Field required" } ], - "placeholder": "Why do you want to decline this proposal?", - "id": "declineReason", - "label": "Reason", - "isRequired": true, - "errorMessage": "Field required" - }, - { - "type": "Input.Text", - "placeholder": "Why do you decline this proposal specifically? Your comment will not be shown to the student.", - "id": "declineComment", - "label": "Comment", - "isMultiline": true, - "isRequired": true, - "errorMessage": "Field required" - } - ], - "actions": [ - { - "type": "Action.Http", - "title": "Submit", - "method": "POST", - "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", - "body": "{\"actionType\": \"DECLINE\", \"comment\": \"{{declineComment.value}}\", \n\"reason\": \"{{declineReason.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", - "headers": [ - { - "name": "Authorization", - "value": "" - }, + "actions": [ { - "name": "Content-type", - "value": "application/json" + "type": "Action.Http", + "title": "Submit", + "method": "POST", + "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", + "body": "{\"actionType\": \"DECLINE\", \"comment\": \"{{declineComment.value}}\", \n\"reason\": \"{{declineReason.value}}\", \"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", + "headers": [ + { + "name": "Authorization", + "value": "" + }, + { + "name": "Content-type", + "value": "application/json" + } + ] } ] } + } + ], + "autoInvokeAction": { + "type": "Action.Http", + "method": "POST", + "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", + "body": "{\"actionType\": \"REFETCH\",\"proposalId\": \"@{variables('ProposalId')}\",\"supervisorEmail\": \"@{items('EmailToSupervisors')}\"}", + "headers": [ + { + "name": "Authorization", + "value": "" + }, + { + "name": "Content-type", + "value": "application/json" + } ] } } - ], - "autoInvokeAction": { - "type": "Action.Http", - "method": "POST", - "url": "@{parameters('Http Trigger Thesis Proposal Feedback (uzhbf_thesisplatform_http_trigger_thesis_proposal_feedback_env_var)')}", - "body": "{\"actionType\": \"REFETCH\",\"proposalId\": \"@{variables('ProposalId')}\"}", - "headers": [ - { - "name": "Authorization", - "value": "" + }, + "EmailContents": { + "runAfter": { + "AdaptiveCard": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "4a75e677-4358-4992-a664-ffe5b41e0922" + }, + "type": "Compose", + "inputs": "" + }, + "SupervisorInformationEmail": { + "runAfter": { + "EmailContents": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "ca5e164f-cb5e-4a62-9467-189c5311ca33" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, - { - "name": "Content-type", - "value": "application/json" - } - ] + "parameters": { + "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", + "emailMessage/To": "@items('EmailToSupervisors')", + "emailMessage/Subject": "DBF Theses - New Proposal for Review (@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']})", + "emailMessage/Body": "@outputs('EmailContents')", + "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/Attachments": [ + { + "Name": "@variables('PersonalCVPDFName')", + "ContentBytes": "@body('GetFileUploadCVPDF')" + }, + { + "Name": "@variables('TranscriptPDFName')", + "ContentBytes": "@body('GetFileUploadTranscriptPDF')" + }, + { + "Name": "@variables('ProposalPDFName')", + "ContentBytes": "@body('GetFileUploadProposalPDF')" + } + ], + "emailMessage/ReplyTo": "@outputs('GetResponseDetails')?['body/responder']", + "emailMessage/Importance": "High" + }, + "authentication": "@parameters('$authentication')" + } } - } - }, - "EmailContents": { + }, "runAfter": { - "AdaptiveCard": [ + "CreateCVAttachment": [ + "Succeeded" + ], + "CreateProposalAttachment": [ + "Succeeded" + ], + "CreateTranscriptAttachment": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "4a75e677-4358-4992-a664-ffe5b41e0922" + "operationMetadataId": "59fc0f49-7782-4696-b7cb-f1b30f3402ea" }, - "type": "Compose", - "inputs": "" + "type": "Foreach" }, - "SupervisorInformationEmail": { + "StudentConfirmationEmail": { "runAfter": { - "EmailContents": [ + "EmailToSupervisors": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "ca5e164f-cb5e-4a62-9467-189c5311ca33" + "operationMetadataId": "956b2cfb-109b-4b96-b61d-4431cd5de8f4" }, "type": "OpenApiConnection", "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "SharedMailboxSendEmailV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, "parameters": { "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@items('EmailToSupervisors')", - "emailMessage/Subject": "DBF Theses - New Proposal for Review (@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']})", - "emailMessage/Body": "@outputs('EmailContents')", - "emailMessage/Bcc": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", + "emailMessage/To": "@outputs('GetResponseDetails')?['body/responder']", + "emailMessage/Subject": "DBF Theses - Your Proposal has been received (@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']})", + "emailMessage/Body": "

Dear @{outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']},
\n
\nWe have received your thesis proposal with the information as provided below. Please keep in mind that the thesis matching process usually takes about one month, but might take less or more depending on the workload of our supervisors. You will hear from us as soon as the proposal has been matched to a supervisor or if any further action from your side should be required.
\n
\nIf you have any urgent questions, please contact our DBF Thesis Coordinator by replying to this email.
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nSubmitted By: @{outputs('GetResponseDetails')?['body/submitDate']} (@{outputs('GetResponseDetails')?['body/responder']})
\n
\nProposed Title: @{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}
\nThesis Language: @{outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']}
\nField of Research: @{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}
\nPlanned Start Date: @{outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']}
\n
\nSummary: @{outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']}
\nMotivation: @{outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']}

", "emailMessage/Attachments": [ { "Name": "@variables('PersonalCVPDFName')", @@ -1035,328 +1489,122 @@ "ContentBytes": "@body('GetFileUploadProposalPDF')" } ], - "emailMessage/ReplyTo": "@outputs('GetResponseDetails')?['body/responder']", + "emailMessage/ReplyTo": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", "emailMessage/Importance": "High" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", - "operationId": "SharedMailboxSendEmailV2", - "connectionName": "shared_office365_1" - } + "authentication": "@parameters('$authentication')" } } }, "runAfter": { - "CreateProposalAttachment": [ - "Succeeded" - ], - "CreateCVAttachment": [ - "Succeeded" - ], - "CreateTranscriptAttachment": [ + "InitializeTranscriptPdfName": [ "Succeeded" ] }, "metadata": { - "operationMetadataId": "59fc0f49-7782-4696-b7cb-f1b30f3402ea" + "operationMetadataId": "a5c29fcb-cfb0-47b5-98db-caba000d824f" }, - "type": "Foreach" + "type": "Scope" }, - "ExtractPersonalCVPDFName": { - "runAfter": { - "ParsePersonalCVPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "1e85d048-5c8e-4877-b685-55bed992f515" - }, - "type": "InitializeVariable", - "inputs": { - "variables": [ - { - "name": "PersonalCVPDFName", - "type": "string", - "value": "@{first(body('ParsePersonalCVPDF'))?['name']}" + "Catch": { + "actions": { + "FilterForFailedOrTimedOutStatus": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "ca1bedd8-7555-4a99-a290-1c22c2e6e229" + }, + "type": "Query", + "inputs": { + "from": "@result('Try')", + "where": "@or(equals(item()?['Status'], 'Failed'), equals(item()?['Status'], 'TimedOut'))" } - ] - } - }, - "GetFileUploadCVPDF": { - "runAfter": { - "ExtractPersonalCVPDFName": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "907d739d-ea78-479a-9b6a-03d3b381ed25" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Personal CV (PDF)/@{variables('PersonalCVPDFName')}", - "inferContentType": true - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness", - "operationId": "GetFileContentByPath", - "connectionName": "shared_onedriveforbusiness_1" - } - } - }, - "PersistCVPDF": { - "runAfter": { - "GetFileUploadCVPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "5addcee8-04fe-48e5-aa5b-e73aa3bf0b27" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", - "name": "@{variables('ProposalId')}_cv_@{variables('PersonalCVPDFName')}", - "body": "@body('GetFileUploadCVPDF')" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateFile", - "connectionName": "shared_sharepointonline_1" - } - }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" - } - } - }, - "ShareLinkCVPDF": { - "runAfter": { - "PersistCVPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "f98fbe3a-7eae-42a9-9aec-2a4950006e98" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", - "id": "@outputs('PersistCVPDF')?['body/ItemId']", - "permission/type": "view", - "permission/scope": "organization" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateSharingLink", - "connectionName": "shared_sharepointonline_1" - } - } - }, - "CreateCVAttachment": { - "runAfter": { - "ShareLinkCVPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "edca8bce-6316-4cee-b027-83094e1b5a19" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[applicationattachment]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/href": "@outputs('ShareLinkCVPDF')?['body/link/webUrl']", - "item/id": "@{guid()}", - "item/name": "CV", - "item/proposalApplicationId": "@outputs('PersistApplicationToDB')?['body/id']", - "item/type": "@outputs('PersistCVPDF')?['body/MediaType']", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "ExtractTranscriptPDFName": { - "runAfter": { - "ParseTranscriptPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "98af1222-c483-473f-a5a5-1c90bd4de1e9" - }, - "type": "InitializeVariable", - "inputs": { - "variables": [ - { - "name": "TranscriptPDFName", - "type": "string", - "value": "@{first(body('ParseTranscriptPDF'))?['name']}" + "CreateHtmlTable": { + "runAfter": { + "FilterForFailedOrTimedOutStatus": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "34b6a96f-64c6-43fd-89a3-fe7d5ef245ff" + }, + "type": "Table", + "inputs": { + "from": "@body('FilterForFailedOrTimedOutStatus')", + "format": "HTML", + "columns": [ + { + "header": "ProposalId", + "value": "@triggerBody()?['proposalId']" + }, + { + "header": "ProposalTitle", + "value": "@outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']" + }, + { + "header": "SubmittedBy", + "value": "@outputs('GetResponseDetails')?['body/responder']" + }, + { + "header": "ErrorCode", + "value": "@item()?['code']" + } + ] } - ] - } - }, - "GetFileUploadTranscriptPDF": { - "runAfter": { - "ExtractTranscriptPDFName": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "4ba05d15-c466-44b5-956a-92142a49e468" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "path": "/Apps/Microsoft Forms/Submit Thesis Proposal/Transcript of Records (PDF)/@{variables('TranscriptPDFName')}", - "inferContentType": true - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness", - "operationId": "GetFileContentByPath", - "connectionName": "shared_onedriveforbusiness_1" - } - } - }, - "PersistTranscriptPDF": { - "runAfter": { - "GetFileUploadTranscriptPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "c15d6cd9-aa79-4e96-bab0-c70a00a42518" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "folderPath": "/@{parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')}/Proposals/@{outputs('GetResponseDetails')?['body/responder']}", - "name": "@{variables('ProposalId')}_transcript_@{variables('TranscriptPDFName')}", - "body": "@body('GetFileUploadTranscriptPDF')" }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateFile", - "connectionName": "shared_sharepointonline_1" - } - }, - "runtimeConfiguration": { - "contentTransfer": { - "transferMode": "Chunked" - } - } - }, - "ShareLinkTranscriptPDF": { - "runAfter": { - "PersistTranscriptPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "5aa84c0a-2fdd-4b42-a54a-9d0e05c65856" - }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "dataset": "@parameters('Sharepoint Site (uzhbf_thesisplatform_sharepoint_site_env_var)')", - "table": "@parameters('Proposals Document Library Name (uzhbf_thesisplatform_proposals_document_library_name_env_var)')", - "id": "@outputs('PersistTranscriptPDF')?['body/ItemId']", - "permission/type": "view", - "permission/scope": "organization" + "Terminate": { + "runAfter": { + "SendFailureNotification": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0f41eff7-41db-4eae-8e12-46f64d545e8b" + }, + "type": "Terminate", + "inputs": { + "runStatus": "Cancelled" + } }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "operationId": "CreateSharingLink", - "connectionName": "shared_sharepointonline_1" + "SendFailureNotification": { + "runAfter": { + "CreateHtmlTable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "e7c370de-36de-45b2-ae99-b7d0e7013242" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_sendmail-2", + "operationId": "SendEmailV3", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail" + }, + "parameters": { + "request/to": "@{parameters('Email Failure Notification (uzhbf_thesisplatform_email_failure_env_var)')};", + "request/subject": "(@{parameters('Environment (uzhbf_thesisplatform_environment_env_var)')}) Failure in UZH BF Thesis Platform - Thesis Proposal Submission", + "request/text": "

@{body('CreateHtmlTable')}

" + }, + "authentication": "@parameters('$authentication')" + } } - } - }, - "CreateTranscriptAttachment": { - "runAfter": { - "ShareLinkTranscriptPDF": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "6023d5d8-64fd-4511-812e-c3f1f0b1bd8f" }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "server": "default", - "database": "default", - "table": "[main].[applicationattachment]", - "item/createdAt": "@outputs('GetResponseDetails')?['body/submitDate']", - "item/href": "@outputs('ShareLinkTranscriptPDF')?['body/link/webUrl']", - "item/id": "@{guid()}", - "item/name": "Transcript", - "item/proposalApplicationId": "@outputs('PersistApplicationToDB')?['body/id']", - "item/type": "@outputs('PersistTranscriptPDF')?['body/MediaType']", - "item/updatedAt": "@outputs('GetResponseDetails')?['body/submitDate']" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_azuremysql", - "operationId": "PostItem", - "connectionName": "shared_azuremysql" - } - } - }, - "StudentConfirmationEmail": { "runAfter": { - "EmailToSupervisors": [ - "Succeeded" + "Try": [ + "Failed", + "TimedOut" ] }, "metadata": { - "operationMetadataId": "956b2cfb-109b-4b96-b61d-4431cd5de8f4" + "operationMetadataId": "054f28a3-080c-4f8a-9529-1183121f12f9" }, - "type": "OpenApiConnection", - "inputs": { - "parameters": { - "emailMessage/MailboxAddress": "@parameters('Outlook From Address (uzhbf_thesisplatform_outlook_from_address_env_var)')", - "emailMessage/To": "@outputs('GetResponseDetails')?['body/responder']", - "emailMessage/Subject": "DBF Theses - Your Proposal has been received (@{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']})", - "emailMessage/Body": "

Dear @{outputs('GetResponseDetails')?['body/r7844031f633e4dd49368b0c116ad148d']},
\n
\nWe have received your thesis proposal with the information as provided below. Please keep in mind that the thesis matching process usually takes about one month, but might take less or more depending on the workload of our supervisors. You will hear from us as soon as the proposal has been matched to a supervisor or if any further action from your side should be required.
\n
\nIf you have any urgent questions, please contact our DBF Thesis Coordinator by replying to this email.
\n
\nBest regards,
\nDBF Thesis Coordinator
\n
\n---
\n
\nSubmitted By: @{outputs('GetResponseDetails')?['body/submitDate']} (@{outputs('GetResponseDetails')?['body/responder']})
\n
\nProposed Title: @{outputs('GetResponseDetails')?['body/r7240915136fb41e8b884a045d08f39ce']}
\nThesis Language: @{outputs('GetResponseDetails')?['body/r8b7f3f4a7502459598d155e9b31eb25e']}
\nField of Research: @{outputs('GetResponseDetails')?['body/r975d59f3f5114998b6e30c56c035334b']}
\nPlanned Start Date: @{outputs('GetResponseDetails')?['body/r837fec8c113c4851a217e947217c5b7f']}
\n
\nSummary: @{outputs('GetResponseDetails')?['body/r7425856917f245efbd0c4cb2a7f0c434']}
\nMotivation: @{outputs('GetResponseDetails')?['body/r60d760e8828645cc84d8fde2a6fe3b27']}

", - "emailMessage/Attachments": [ - { - "Name": "@variables('PersonalCVPDFName')", - "ContentBytes": "@body('GetFileUploadCVPDF')" - }, - { - "Name": "@variables('TranscriptPDFName')", - "ContentBytes": "@body('GetFileUploadTranscriptPDF')" - }, - { - "Name": "@variables('ProposalPDFName')", - "ContentBytes": "@body('GetFileUploadProposalPDF')" - } - ], - "emailMessage/ReplyTo": "@parameters('Outlook Management Inbox (uzhbf_thesisplatform_thesis_inbox_env_var)')", - "emailMessage/Importance": "High" - }, - "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", - "operationId": "SharedMailboxSendEmailV2", - "connectionName": "shared_office365_1" - } - } + "type": "Scope" } } }, - "templateName": null + "templateName": "" }, "schemaVersion": "1.0.0.0" } \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json.data.xml b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json.data.xml new file mode 100644 index 0000000..103f6e6 --- /dev/null +++ b/solutions/UZHBFThesisPlatform/Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json.data.xml @@ -0,0 +1,26 @@ + + + /Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 0.0.0.1 + 1 + 0 + 1 + none + + + + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/[Content_Types].xml b/solutions/UZHBFThesisPlatform/[Content_Types].xml deleted file mode 100644 index 70428b9..0000000 --- a/solutions/UZHBFThesisPlatform/[Content_Types].xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/customizations.xml b/solutions/UZHBFThesisPlatform/customizations.xml deleted file mode 100644 index d690d05..0000000 --- a/solutions/UZHBFThesisPlatform/customizations.xml +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - /Workflows/UZHBFThesisPlatform-ThesisProposalPosting-F3E0B1EB-152A-EE11-BDF5-000D3A831DD0.json - 1 - 0 - 5 - 0 - 4 - 0 - 0 - 0 - 0 - 0 - 1 - 2 - 1 - 1 - 0.0.0.1 - 1 - 0 - 1 - none - - - - - - /Workflows/UZHBFThesisPlatform-ThesisProposalFeedback-4BF9872E-202A-EE11-BDF5-000D3A831DD0.json - 1 - 0 - 5 - 0 - 4 - 0 - 0 - 0 - 0 - 0 - 1 - 2 - 1 - 1 - 0.0.0.1 - 1 - 0 - 1 - none - - - - - - /Workflows/UZHBFThesisPlatform-ThesisProposalApplication-3050E705-262A-EE11-BDF5-000D3A831DD0.json - 1 - 0 - 5 - 0 - 4 - 0 - 0 - 0 - 0 - 0 - 1 - 2 - 1 - 1 - 0.0.0.1 - 1 - 0 - 1 - none - - - - - - /Workflows/UZHBFThesisPlatform-ThesisProposalSubmission-D12D741B-A027-EE11-9966-000D3A8321BD.json - 1 - 0 - 5 - 0 - 4 - 0 - 0 - 0 - 0 - 0 - 1 - 2 - 1 - 1 - 0.0.0.1 - 1 - 0 - 1 - none - - - - - - - - - - - - - - - - Azure Blob Reference - /providers/Microsoft.PowerApps/apis/shared_azureblob - 1 - 0 - 1 - - - Forms Reference - /providers/Microsoft.PowerApps/apis/shared_microsoftforms - 1 - 0 - 1 - - - OneDrive Reference - /providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness - 1 - 0 - 1 - - - Outlook 365 Reference - /providers/Microsoft.PowerApps/apis/shared_office365 - 1 - 0 - 1 - - - SharePoint Reference - /providers/Microsoft.PowerApps/apis/shared_sharepointonline - 1 - 0 - 1 - - - SQL Reference - /providers/Microsoft.PowerApps/apis/shared_azuremysql - 1 - 0 - 1 - - - - 1033 - - \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_email_failure_env_var/environmentvariabledefinition.xml b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_email_failure_env_var/environmentvariabledefinition.xml new file mode 100644 index 0000000..1f59244 --- /dev/null +++ b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_email_failure_env_var/environmentvariabledefinition.xml @@ -0,0 +1,10 @@ + + + + 0.0.0.4 + 1 + 0 + 0 + 100000000 + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_environment_env_var/environmentvariabledefinition.xml b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_environment_env_var/environmentvariabledefinition.xml new file mode 100644 index 0000000..db2cc57 --- /dev/null +++ b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_environment_env_var/environmentvariabledefinition.xml @@ -0,0 +1,10 @@ + + + + 0.0.0.4 + 1 + 0 + 0 + 100000000 + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_flow_secret_env_var/environmentvariabledefinition.xml b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_flow_secret_env_var/environmentvariabledefinition.xml new file mode 100644 index 0000000..6b9404a --- /dev/null +++ b/solutions/UZHBFThesisPlatform/environmentvariabledefinitions/uzhbf_thesisplatform_flow_secret_env_var/environmentvariabledefinition.xml @@ -0,0 +1,10 @@ + + + + 0.0.0.4 + 1 + 0 + 0 + 100000000 + \ No newline at end of file diff --git a/solutions/UZHBFThesisPlatform_managed.zip b/solutions/UZHBFThesisPlatform_managed.zip index 7097438a669c7b6fcc804ee4f493f2dd630f6ac2..ace6f109658b12a7cea12bd30a4011795d83426d 100644 GIT binary patch delta 32232 zcmY(JQ&`}Q(}uHc+qSpbY#WqEI0%P2p9+qNUxo*reOE%*CYf8$Oi=o2pR}M!mSy4919_!qieq>f#FxZ@NIZ| z^#T@TDjw^AaHb)hOKPj>8#a^$E@v{`!u~{6a0XmQGMk95xM`ENm21V_OtktO-)G!f z;IsJkfxGfi@0>7Xk)A4NiDEha5=m4R(o*(11)3h_yo^Av41@Dp=1La(EyjE;Z>m&L zme6GC+h(ol+56Kfaoxns8eI|XhCLb%uPD8c)j1hF+LQ>2u_D9M-9Hk5A4e``LJxN(I|Pi}}c?6{L?uHSdTB-S6cGzNHWtH)Gj^ zXu=3Y#9=_2j#i_#y(q1EW>vz zZQD{t0?w^`6;e8?8Ak9@lYGcl4T|^yWKEllRj7UpDrwu;44lYnQF*k9dpjX`APldx zN^7`54qUK$ea+Jxj@926_s28H@$rZN_#$g!<<24y9^u`6<%4oCcJD1U$4r{4O25Xp z#WP^JxyV2VJDS>1zumsS=PLc`6&2DZg8~&cj;}NSw-)%cS|l~)zQ&LauC>{PZbEGl zAA#a%&HmocX;?Ya_CS$QCg$ns#`snRe`HNIS_oFuJuMN9{?xAhxA_1d^Cu>U8ThyCZ{Z~+ z9TS4!SdOlVcM(c!;ib@{owiXv?0P8c?Q_r1r`!t6`cLB}>%j{Ey=lhS|G*P6)kcS~4P>-?`!`o+wNOwTP zsgyiT*8QmtDGAwf>u-V0IJj3F_Jt@)?aohgP8Tm^ys3LGI9m=4&tU5N$o4UzhA(nU z>>~61Y4tOn#cEuxQfkT)$2fnFhLl`u*mm^L|oa) zhI5RsFLMarRy#$$T*oRlAVgjJ1QLm!HubpLgUeH8yAD2#cfJ-p)EXPW3D=cJ=p&GS zsuMY<&ot|AoO0fD*w)q*h=GIVU!8sQ2EsB0XCfLe{z3dC-*&@dPu;d?geBR6!Vyku9-5c%f)n3DczyW3iO zFH3$&$0WO@kHmGT8U<~Ykrr5n95?&^aW9~AY;#wUq8ooD7%&~??~TPA-nw^a__|91 zL__^NNR_#gwoG;YiGCM}#6Cqr0lfd6co3ad`@7)j9#STl#}g9I-AJw4OgU?oxiAKn z-uYY87pZF+-QY=oN(^1eu~`w9!K{92g}S8I0PS|+QaGT=gG2G(1bEd>ogkZat^G{b zc%os%p#KF~Eo9P79-O#L#O#ES&NkG6GpYWOhm$@cW_hVI{W_h~;+uNGAV5vK0_Ozk zo*JEY>XKTOcG{G}vH57*49CfiL^MOnU2)K(t9rUz+lKC1k?xEgOyO@`cH&9CF=k5f z^TJYEH2^Gk%OrVzVMUB$ynwtySPVlGIRwns9QIYG-NaggIFumls*X{F-5Z|O6jeQ1 znDBg58A0^_HBy|=`Y;xN=#qL7CDOEi=^D;UUQ_EZu!qy&?nY=>Sueccg3jI1%vA`! zuzOXMZKQsLc~Y64T)JqxyvC_Tl*%`P;uHu;^TA)|Vc zBu=`PJNCa8KFuIo%!h#on|!)oN|O}YTK|r;nBP^_-C{RaS$7Opy+Hn)HLx~W?@h?P z#2;~@lDu5C5fHpwul4(HqgKNEpX~%PgmmNu9Rwsi8U#c?fdH2|Vbz>9!55bh(D!s+=c)VtR`0yd zxl8woE(eQ%_PCsyI;!K|n%oV$oJgN6(BrXHpimK2am!Hadgl^8JD}BeOZ2?G@Dfl# z|ILBdEjU9W`27q#dhzE|5QR~|i?`h;Z&^H|`i$(+pfSMjpG3uyp`xaL4mt zB50!(*G`ybAYjt~{#3Y<+B_K4w>(B*UF)c#bUfHT$GZfJ73G7&<*gp520@Vszv6Q3 z96wIu$L=pw3XJ&hP$q|3j}8S;oh+8tl3$rdX&4?cF&Q_r(+fO#SrZ0 zgrIcEV0I3Yj8pJcs8LUVs6Cdkz27Jj#<~!>D|{L@n<_*=;jL@D3;}FbkS3T%?mh;Q zY_nM@h{ZI9MKgx%B1pTm#8@osy6e=WZQKYC{=hBt;2fhF8?MgqKXNibid_)x|1u0t z*lNnM7RkUK0CH&?yCT8LEdu_T#42vI!D5_Vsb={P%%6T=qhGON2O)iYZkXP z$U_%&2V{WsJ2N#%S2eV*z`rNPewR4VZ}#_P$Ge|Md*|BA@7=|Y4?^s{bgO1F{kp$d zk8OrGxEF++ImqLCYS>A%(^`qm;}vD|{wR!k#CB2!)=G?euJ$djPD;t%aefl&l%xj| zkKmXiJ_N>%m0qumh8dFd991b4jV$xSvd?-eAvXYNX9AFA&ZzpC263jBIWP( z5)T<=!E;}$-PuCC0*jr5*quN4J=#^-a~NRrBMO;~qG70UwU5Lre^wG)QWXf)WxghL zEsR`w$Uz%P5F+_45UEJc@2kLkVSqgSi&*e=cs-E(-1MgWalCgu zdpm=5|8jMAHl6*eT5}pHBU|z2fvt=)^WkdsO3g-BWHj7Mslql(0A+({M|k*VBBaNukQ(mp(B?s6A9q z8Io=fn!~-+K^yCJts3^`K$5R;XGevsDeSah#Xlc>A}fHEwo4P^3g~~xz*hYE{05X_ z{^dUPn|u8+R<)1ACw)uO2A9Ayw^yE&lA`RAJk`mEhe_au-+tHN9dZNj)4Em818=sA zwG<}e{lW(1w6i1*e{d?b#c%42szK=V%ngdK%6>xuTEmvAMC3?m{e}v|>%2F{bIsF*HM&1ba|wX!ui48U z{3~2U8OJoR7DwQOk1;PmcDr8d-QKh|>A-+tVr#*mVQO5ibC6PpX?HFVF=vAj3LABZ z8MCIum5iaRQ9|{p>cY{Rezq9`AAn^=bt4IXrc4TzvSS;5_-nDMkJTS}-%J4uOBh-; zzEhT?x!tL|6dm6-K`C}5rUs~-^G?kXa3#}rG5FndMewE|Ivt@}qR;Y3%I;UD?$6Ei zPMgTV{7bYler$px0Ske`fF5yZ4P>duy@Q3+qYz;`ayD;slEpOiM7z?5cLB-W3$Y-X zb5K%{a#abeWAbIxztK0AI#n@6xgxdkVj{~rCfObc<{*@2OtvXyN(74Xq;dBSEA&{? zbZPrdIfh;HW3^8y54b1()rt5Z+?Pcs%o4Ol&STe&cLcHj% zU~v=@(&s8P*E~Nbg~XnUZlbJrL=zTuy+2()JI<=DkCF_3QZ~XGN3OtNH3x)(927^U zt~8cf^Nf$FKgFc!?E-L;^>%5G$*x^BUrx4whcd+L%+HIlz>LtZQTfJq2kb1zMikv2 zrt)`~od;H@6MKAHIE|p0TV~!+W6RkBE(4^|=QJ6*p1W;}Slr)YrjJ{0f=fClO9q-% z2WWALnSKz?%;%(raKRGrc1H#F%V+t*r2KeFM{rP3o%I;!2S;Ck-njDYz+GiVOo{ zk3)hZMSOne#=8Rn7jIG$k38 zS%uWoM<~;45$)3Xl=#{@6o}m=Sw1JsJU9;%@@kI}9EKFQPGYroC#u_pN7=l3 zXKvR8pO;i&+z*T~(y0u%uhRIN)@<^^rn50=j2+m3fu9JiwE9?EmLgTJxu;XBCAoCQ zjwLo(qKdMJixE(JyiR0{!b&FR8%fhls^;+bK(K!<7bp-BTqL7y(*X?$r%szGA+hW$ z_+x5os)MD>lxA|G463%zjxSmIQLNCEiBe8-5vmL6YVkmKqS;%s7l#tGYQdKs2CiK2i;qhXI_}aIo5<;Eq#;33uV7f2U=v~AF{(5jpa^p=&B`Do z?(p<>0q)-9-`V$3yZ=coEA{EFhvtQp#n1~f_^Lq;6HAtb=I70nleEmFB`>T6N`j;6 zn(N0QD?9djSDH>quZ%EgCyG&jk9eW5H9# z47gO5T=P4r1=tJjQ6M&54hM=@e!PFy6JH2!L6*?n82|W~qnR2?5Nc{+s9xj4bju7r z8_>g8^FS&wciQEqq&29SQhGbL->t7rtSk&`U)Y$a>oyWj5BjiSfcyPd*CXoqP{4jV z5I_ro6ncoxkb1r@hyx!8D=Qhu`NQHCrj4_iQbQm$Bx{UNM}Eo91q;+B{brag!=Ejg zY#p7bFKM6bY#qb1FD}?2)fU}tTBCT}??TVme)Mc2%xmkSWBmtWJ?KZH29!gu<%{Yn z@x^+u^$Sv;9@LI24;5H~30XwDUP}fp;I`w_EVO+&T~I%{sP0}XdWv)-VW}{ zP}F$dBIqT61JRg2Qneqki}c(%acU7vV2Z7eX`C{KmtG#XJJTe-z}SwtU88sH-j}e> z*HxGtmIs3BITm|mYzE}uC4P0}Q9#0%PJizoqWnL-a62mhe97nO2Bz-iw9WJkfLxc< zvcJ`#r?wWC9r4Ci0B@xa$-$6!j!SO2TJh*YE@oo!7*8}xYI3!)EO3{z;O)lZG57$@ zOqRC)L($iXin#C74VveD_ZNR89h~!3L%*pL-$NEP8=_Dpn-UAto(M(r87ui}i+VZt zy2Y&8C6VM$E+RzZKE*qZZS6c0AYhEZ*t?h|7l`Z^Tkr~0?JFs|`5i4*4xInFAo+vT zHlr_}PD@>~AdRb$k>qvu9OVr+sqUMQ9o+Fy02xnlaMUDyOqXoJ6k9@zoDt6zLXlR` z$6T^FICLWRnMjt{_H$z_%n;%arUDI|&2mWWAO%fqQ&fRb3KDsS<1Z!+;P*~}>OvW< z?q(=vI25O^JVd(yZM*l_wNjMk-zu-)g#RSfEB=Bz7A23DT^UZ2&|x~Q{~Kun$J5IC zTSKj<9%n_8jf1oov<{XYgooLVjhIo{=|`3Xp&wVLGRU&>DFDH0dtds6`g+CV_3wz!Vnr$E;fh9z1o# z5M*5(|6X7DTE?p21V}T8d8N_IBt;H}2X2i-TWIFcoQZNlpd!}PUkdN8ZgA+$OC&YO z1tEsyg2=+7ZVxu?!(_J~61GAqG{Mlc9gbuDt#`m-si;qUOXVNS02ara_*pjWvEHVM>y6l-<{|KJ$73M({1Y`95wT>-1$_R%mr`W` z+hK!IZwaH~_}b^sAbo#?qspsOHt!u-yGvRu%|ChJ(wkfoFI;EFmEz?66H!K}ExPy- z&Dy0`Y!pE|m~(o@VW25rz}Z$>?gpap8ruIZD}qK0YlpC{Nf9yK+s_laARs{qb&UQK zCO-l@3O4xKuzSYrv1wF4-zNcj3|n>mP@GTHuMxipd67fSKim}OOivcbJJrl>xq1>C z+anu|*Ndh3NX$RxK0r8LXX*FpHnh#K5!<#MmX$SRV4y=S1h|5xlP=2>wgm5dz-5zL zveX?k7t$$9(|MbR&yil0VY>Z_tMqWRWyoaRZkFgTCY0{vwu1wm)sl5wL+4Cg93Rkjl*vS!sPX$InLhD znlK|01-;;!XWzEioodWz+Vj8#HltMwUUt;kZ&S8AP&AGIaoa&~fuFLjQ-~R#$!4QU@*ow0vX(q_nt!pml34!TVz7G8 z>Svrs2D>mqdl9_#)x_DzZL&^f?3AB*FlFh|%IY^OQD0J?ZRCI*Q4ejN99@m{o}Y06 zd?Bzm&DfYkZ1J=lAju(k zM0bT)?V*Fhs`|)Z z=hM7u@NTt4%XkUa5OlHr$CQ1_MPHu{SU{}&9QxaqP>&z(jOXZHE}VceQP2=;xFD8d zjINxG2SX4K0Z7l0mETO(j4*D<#XYt-&#AOfM0z}hk9$%Au9rPB zCZhH95*nZZv%IUQHF#S=+VD_-;Ikk-6~vu6+N=B0#m`o_Jp1dgIg@uv?VRLj>%T@v zktV(N<;>V}<-vI$*7;t)|_5DZIH^f@Pg3 zy(rpFM;*cRDSM7%DTwDnI%kFbQLjt)%=_xhqy?h(gF;Y8_X;HKcS>h>s3MuXv=I_- zI(eZRBV+PdF3F5iYiFA&R748V zu0cvj;+cDa`tcvQ)NKQ9Pm6tvXo~6zzNy8*s&Q(*0VC?RGUsPFnW+QMvW<4e}r-*@K3(ZE0%)p?nvMC2P6&DgR75=_6=i? zYnein|8z5!X(^CW-D2nZ)wIYMNcR}bMq1cL7Nr^li8_K!g#&1|rSPwy3hKj_6_M$p zRtcx6GC&i9>b3Xgh+th-k5?qTjiGCC>8^7)_L($UI0V>W`x!}Ie!x3OmkcBB;uhKN z+LPjD_W96G6D?9oB+b*!%Y}E2a#LaH*|5arZB;>_ngK%N`vrgRm+;#na7B)~mtc(M zy!po61hn>yD%)#v$2)2FjTZRdpYMP1e$I#%%62SJiJXod*VPORS4b5Iyk)#I%9f+x z%-lXVV_qCCpZ@D_+rTc@vP3_=Q0V{B-#d5L%gpH$NXp>*2W%KF*7B{%GIg%Ov__+a z`?dbX-}n#cTk6O9US*KIx(2#y&mhjJU(q@dZcM|QlwMp@1xG}Pe#X%_)I3S7n(y!h2 z+)RHU@P6MYiG@gwIfgD*SGzx-hX{RrZgbdjMC9W}&Bs#ZUpEL1D1Jy1$QNT28*%t5 z;zpffEE_ocA0Q1SZu9_?CVZY!e)!AVch9#zKw2=m7v`ji+-o~(CW#CTWxl<&QiNSn zdUMQ9@d?*}!v~ZCTjV{kN$QrcHA^99Zjw?*leKXZw=s|yh1Jrvz#mj!GdthVvz(!V zDE+z&*@PzeKFt7EY{@|wqWY$WC4z9CiL(@ZKAVy~S0)zuH$|t)*+d`?GVJJ-CtNTL zAhm5GSzN$44OAF~2sSYkjQficxSB{6&f8ce{FRJ$7^;M&(7y;9*(H5Lm?<3az$9-m z>P}7l$~;Z&0B3(1q%ePs%PcrNdk`dB`W`#O!|O@7$0I|QBsfi_+aRMLx9Jct_06du zD0xfG6)niz=J#cdCjaeRTVs5wvenNF5SR$o#og**e=iuCvmDJU@Q#d4`POT_7SyVB zsPYgOclX>1BtSkk9#+qXXg9^%&sGxz+8}oYICoiR2(s90dJQU6(Hz0AY%Zz~Zm+4Q zs9b6>DX^8K2Z?UZoPJLJh|GSBs#w#DetZR!ZYl;-cDlP4^7DB;<2%39pIv_i2ARo6 zgXVZLwyHV~ydhxacF(jRkj)2XnQ7A5@fTTr<0>}S^@@I1@BPlpL_?dWh+{A$^|Ql) z?hN29d81RE1`3s`Zk&3n1J#VWIg3e-4v9o$(v#1QY6)nNGEPFM23 zSe9vw(zEW0{XSZW4Vo+H9?Ig`G1`ov%=d~_o`8Jv)MQx)IOJO)4M&x_ zA*g%&#g*)2GGq$FsSndLhlBwOT!X5qJqA5#!!pdOS{Dmx3%R-TSl7Jz@oB4&;9_d3Nxqim_+Rb+3S3DkjIOiBBFeeHLGPj))Xcs+gX5JpkozYEEU zNu;r6SxjdMQg@ctcG%G*06H^QqleF7z}-QnCG0V5%O?+6m#A)KizZ-y+_oBWySu>B z)jpIXHD5Xf#@$4cU+diP{k>&oHT7!qZpP?HPXE}pIm||O9_(@B(j{tK zr0US;K@oLYXA*ttMWfg(4iQJrw2PsNBy`iYc8`0@R;>$hs@)FDN&nCptu)T)g<;r?GY`qN9G}AL}QMczU45dXh&S zHHC(}J=|N~M|H}bQp5@OYp3)#LKSR@XY(pfn~%bV$SSmfjoo3M!w4)2qcKIY*U?p~ zkNOV=lcgwYB2$FmTNo0z_+|8SU~=Un)y+0B`AT4|_2pRh^L|{kQes zZw?JJGm^yJ1fwX0vympOYOaG;zil3jYYm4b>2vGzE#&DgjjrPBvAb?Hht@+=iq219 zW_tc+H2Xq1QGF*O2cG`?b&Mw>ul<%}ly!Ny=%4Kj zohI_t+iV=7Vr*E3T3@h27cA7T!=)s0Au!~J`UYpkhatul4onLOB+NWpQgAPA6%pks zEkfruDRQHHPjnk&CtQCZ+10~n=`qi$>B5B!wm+lljWp_C^(sR& ztjf~dmDOK4O3HoK9<&0Q)7R)&U>AA2BwKRa0?N-fj-7qbUj(tyB2~%eP?HZUXo)c- z8hNH^lO&Pogf_In&e=}rawz_u3h+jRo@^|*0}q_4CiiJIC(F#mm?` zcZeRZPaoIDEtUfI_a|eLU0ei(hAolbd7gCUu09L$dW>9Bi;C~?+Rypcc#3_r2fwmg z5sOxw@0we_M7iMnjaW5Lq#%5H!MU(oCx%0Lz1Y(#Sjyr*$``j1YhK;-%o-SLo~jR( zfU=#s?t<2<8x3D!!ro6foBB&uFk{@AApg_8AyYwaJw0}iwlKtG-E`3VLxGZ-A8^s8 zixQUUZ3N?RzipxG`&dS1D|Bo(cNwx3w3n~_HFCnEe?wMZ#A-0&MW1FoYkS3+VMt$P zXm|uewDw1nJcH$OFsTb>Ms(E5>OQh50S*s%;`r7nMS40OVDBYPC8L{1BsKp1oQO5P z$zTVn*bp;$f)C&_n^9`f3s==7|0q^v$e#WifIdj|9390tLlmAw66)cuuVA6v+A^-# zwaG(@$6Kyru%xtofLVgCyfja?%YBj-{+l-zJ#!ttEVtx40y^SRL3!_=DUOF6pz|f4 zZKB|Snjrt*1@zSMnq#MJzxO1bnb!w!3J#q-(0MLe%@DRdpS%wPoY~%{1~HYayLCth}>#J!ZE1btkHHbH2_~5^`bvU@QMkJcwk3r5U#;HGSVw z7=Z})0fOE`Fg`rvo)bYNd%@8MAWe#2h4QJHSiQIU=D-b|g+{k8r~@UrS2~aDcW?{T zG_aEOzox_c!-6cY`YVzg zh@GKC##yWcw^qUO_28?j#q|HELsDMv)u)7XiAw;pG~mS?ic}D}DhjJO=iKPY zE5wU3&7os50&S}`(b~}-|G}_!H6cBb-Sq?afCUQ?sx3;qym!iEwrc*bDWu8cOAKV0 zYc$_|A}yjq7!}`?eaC|tAg-sTjjFqnUHO_O9+P=w*}UwdanwO4#UjqCy;JGkSgxWP z#}E=aQPGQ1o65QJH>A}gaj3%PYjLdvej35YBI|c0GG?~RElm`EKmUYcB`3p=rEW>* zOQfy&G5M%cDT?BQASH(QvCyO~$K)mq;5p!S$!L zJZ9!B=)Oj5x|xy#yBHsY4lw%e_+vg0W-e!W{|fbnxK{zcp>^0=Fw|YZfIt zBp&$6Mil|f%0{hgAD7#bikiOEQ@Y$|JR0F`QsfsW<(L|`6- zdU=2xFOQXyd~UJ|!0i$of^t|wJ?#Oh{izANG8IDR&`j_I@0~D&; zRR4M?5!*5;)Hier-|oY;k;1pRA;^Jo_9-7?%5p~$k3$9}Flpdsa)xLm#XM6bjD$9m z*}GLtS>If{T_jJC07+F-)9Y{RK_uK{2hvXwe68-3)dIhcJn$&1E7 z&9Iq}HD7H!VNDcTa#j?j=<2eW({!Ddf&2r^X0J5^+4d?Z&i`bD0?AZAm!?oP^CMEs zt7Y!Xc;qw}2%jNxB}Q=1+%AEAP4l>xr#~6x9#OdkaVt}T)y81P{tP@Ld<{0u4by5_Vd}WW*E4Y z7embPMoNAuvUHs8=LiV-VdY#M6q}T|8Ewsg=w$or;EkZ@rOGzZmtx(|z>NDn#)yoO z``>Z*h?v+C2fT}gh`d{R!!y&wwDx3r{68n=vi9SO)qDys@90A%^fVCNE_jQB?)1@Be-HOb0nL+J z8q;uvCP!+G6`d64KoAuVlEvbxH})A`1>PNN#@5s>_pSXpi*Lh}W~L*hAwoiANu zdO}F{$q&M3q~D-rTm@>02`7VTKWWJ#%}E6h0dG&vtnDZADp7j39y9IQpv@9z9?k-B zQVvMAN)moiVa59-k*c>Uo-l_8PEpsKxAT-WGbi=AmKn~@s;PN7w5J?f-QYto#o|4M zZrkvPJs1)~Wf?@~8#x!HerV1PNX`ud*n+;<{5WRr`H{=q-~gFatU+e)Ta|xWKG6x2 z!0;kA{@YAaja3SDY&B(83_FAU5qjdhumLsWB*uHh+zk;IBbGEbW&_?6ZnJn%qQfhG zu~mBehDdF)m-6Zt5!BpKe1O{E@zV14W&WB4W>&cs&tSu^C13oq_GO+GNqL17lhl>^ zfL&Pms}&;m5_xo#?MK2f*S4#1WdCPHAYr+ioA;vqJ?hw4^{SR%XkOu%YqdBThe%_X}fc4$~rQ?%fPnix_}4$B!=_XPkG8tU#V}+ z`wlX8;(^z3&9oL=8Fa+oK+MtY-k%dfIS#uwh4S@W(KZil(+Xdq_uY&>t@F$aKqLZq zee%ZmzL~cCvfwIGDf~UF_HN<3dti5-3`D1~qde>8HfePnueGxta%H;7sxoF+S#k`! zuN|{=&J&4s!;e&~f9daJ7AXfaqQWITr;zR!6dWE<6#Zc*dw0z$(2=v)hn}U7HJ#G9 zS-pRIFqr$#I&A8VeXe4MYwv&sh_j;dQY-7(Lx7Zg+t*U-3}{$9W-eu@DSu}x9=#{5 zB8xtKAXFdFn7f%)$y8xILSh|vOn!uuVg%PFW^%t~OtEPAF>}@I9DhB;frc_u*V9b7 zboG1&BV$)xVt$@tqOqZ^_!$LZMf@hd#6(B8QC^2?yGq-e3Wv`b2NPxmT;l9?g6-Br z%3$=F8!OetdDQ1z*K)aj-a0pr*F~VYl!rdY?Z=&_XN~&^$6kZ3qyJ};lJ`%s=Yy(c zb>a@^B%+&c%uU?R)5FE~g3bs> zu)$z4Y>)go-AH&cGO8;8{2S4_fiO{zQGMI8?B&csBow)Lz*& zrT_S7S7u+npdCyP&uK>xY>=Y^TVw}rb}y=yeq8r#_oY$Y=T3QFl?x3mE<~yQ6NuK& z^^)GZotN3}YWKJ=h@|OjjJ!sLaiJ6Jg8+vE3zFMeSujf!7UO0I@(SGX*Y1ncg_^K- zrcck0((0iwpxSJ%=u_<*O}8$OdmfRftiNeS9h%H=7Y6zK2M&t@hi&{3euF7;=SJy= z%1inkntmHUhp4`E$_KCCoP5S2Xj1h*hBc`pgfz5>L;ojb$+@|wk*jo*+#~s08(kIF z8@>pJKSer7BJ=@ex-P536Oh+7SiO;Lr3jLKOTR@KBQ=BcG>y9hWF0T>!O`aZO8ZsS z?Wp80jzcSViCG85d~U2Y+P-JyCNHWxA7Ur_q>~NEzPy{_5)%uyY~D~E7+rkdq$BIN zN@(np*wBuk_t?;l)ooJLR%mZ)vOAXR2j+zMjyzXlA#T8P`v*<1%eVtAI1&d*P3|#> zX*!aB*Od~4?WSuN6(b;}@(bz*1?}@=byfkwJV$UIQw^5FYxr!zG?7R5zjsLQSs z9hr4=RviOM#B&S7_vANn(W;{Qwo%?+^qwfcWy zIeu#dQj7yiep+dm#77(nh1=%pE0mV=^)#3=A^p_}!k?k3vu2QGbewIr2mI3UTUJ#! zq?m1A0`h^Dw2KvNznW4>R_)_2^D|9JiQkIMz!OA>SBSpx`vjqgSaVC?nHnFX6kd@> zXXPEVom|9?^w@~e3ZbKlsg=E`!E!YZF7gFxXdMB9kQ0z~C1^K)Ih2zLC@r=3!zK7R z+t=neq|$lovdOH4Qz*yET%L754f!&@>2Bz`bXiwF$EW$j^hec_Em+*x0&#ab;(Cva z3R-9*bk7W0J%W^;rcm<40#KJKX40ipJH8NmapGu`W*36;m)vTyoosKJ%3nVZ#SwWH zIx~TggO+LL)xq0Jhb;IQBTV%#D~B-!(x@r>v@f%;T4v*T=*)4xV}sK;CsMm+LW3l@ zdtZ)-8jBQ#9Zi#cstpp0us68^L*wZOiR!3?Ubq{KF)R z)~By3tJX!H(`AeYdbJ5I-*>mnmYB5hJ47gOA&?0dLc{h%u%J-H*#43*-=JOd!x&`H zE~*xW9!;f1(vo7XEWrp@=-v*hqs{|QXs@5bDWNJ5Jxh$LK6#-a$&gKlDO~0gKOlfx zBF4~W5w#eC4sS*H^a_5r=dV40X=>>kOn7TN+Gm8|HLE?g>e8qm-bWbbF+jc*DLB9q zWcgOkm>e2?n!hC$8vAZX#H}s%P;xB016~`^MIXD)Zf(_VXigcAb=TV^7 z?dz628s~f9vCRczL8}G7fRta=ylV8+%WES_>xz_YX~jKwJ7&t( zc%EzZ?{4ZerTm&&mmJv{?RW|cGKuLSE&9ifiAd}Api9-d9(cOG_p4@gTrzNdl`HdW z>j+kDR8^{O#etBxaz`&Y#fJVgS80>oy8H|E{-2%Ivl5iACB10j8|(d)V(PUXfe4P4 z7Pp*#9KB#>xW0d=1=twEa6PGnxulquQIJ6^k6H&pHs=qi{w0m`CD?I1`&z*hq_e+_ zvDYQ$D|vyH%ZR!;zuK}g)$;*0yOzLsBlrhh27C?Cw)Q!rMujF_L7M=Nb;^N(`k1Gm zA$wbCr87szK8zXxW;g@A17HJn;+#sq14x7gVPdb^xEgHCi8BiDk^S$3Z1y3lJDllU~$B(WQ-*kB;x{ z*KOoQAxC(DUB7#n4=`-j$`c3rw?NgnmVgtJW0MT`6`k`_%_2YkM#d&t)FogN=9;nn z1~bi?^K1cGeRS5vx;z6ECzUnTw#KA=sY@17U!xc;#3>`hq$|dQ+N$^i{sW2wfg=?N zE~wxlD+@w}Zt#>3_5k8l=$Ub0VrP>>P9T=%m`@b>~N3x!X;d2%vD3nfr>xx25&|toY;} z^RUXn3v19Zt8=x+sUT@`INI*8oU%IOI*luji=|dJAS&l&h5m2P1GupW@+%ILfxFIW ztq$n~e+lSPuY?8JO+6nK?{dtqzb0L7)p;+N*s+NnQPush-_rtn(_U zvt~wC!;cqw59=JwDMD0c{VbN8xq)bspiPR>!)ZZi;R4)1v3c}(A!fiLy#{h88VHvj zTKH%v4VqkO#Z46ni61L+f`Y}&`6e#N0C+UmUWdMkbfsU%z4~aLP*`-mobG1t36cdP# zBQ^cHzCb>YG`7Q-rT8Ho5kK!*&6n=45nHNJtU5|qeW7+1e28e3+|l(RUk77$J-TPU zd^?6y^lU^RUw>{EuYis6$ds)Pj$FJp{r#e>i$UY3$+76)M^}=6z!)a9=dHYS?RQirNX)^AIRwe8p3-}*#Td#AafiS^6 zjXr(LI-yoaB0KLJ-=YDSN*fyY&8`S=V?YykY<`);`X2ik!>p^zvZJ1+c9wlaLYoC~ zbhtN#BysEC4Ag`Jf4kIPgQ)yz9R(jW)?uCj`RH1||Jdwfp|Xu6P}LN7?x4eh0t%zM zaYq(lgo;k~+X%Bumk%g!%6*YtH6NHXW7XEN+NzNMa!cIaem6UnNqGtB_jv`Bu>Z$m zKbhQ>q=pOvqUV|5$QT6ZpWClDVSNi4eh2RG_rNL*dFh@pdfi*u1#((m?LGCk_2o#> zEs@Dq5lMHFeZNya)|kpBnhlR;Fs#f_pm}j8U1ObDfwR+olGKb3z!YF`u96MFA9|4KTw(H0W z84mh}r#hW_1G_BTs>jW3wzqv?OlDB%Ydf z*a{gkfxjf&YOT%iUaKK%J3Q`8_V|AtcvtPmF``QLEkT-`XYG|dRR2>$BaJTJ<#yLS zxSiY_=#Xk(kbwZYZ23cJ+L}1&_J-rm-POT#HFFhJ`K(`-+CJ_-$zH_M$Qe@c9*>{#c3(- zN$km>bOHjZVI7sRj>V}PBOaMPFE6TZB}!0~TVbb$LHCU>O#w~Xui>iz!^7kTKJv6= z_BFupa;DklAfAM-=ctIu0)<+S4;9tzB{VG&FSubL)`PnrALoK;--fFt@$A=63S3nQ znhW2z&re`?l*ICq%=+?W^BAdERC&ik6Q21L=O+Sr%Lx2@uc;G5Gv;EJ>saCyPu+Wp zakvB8i^(p?zJCy@q(ANlf~}4V%zWNuAy4pjX6-)T%z8T|7VHzFcZ@Vf6p^Bm{0}W@ z9Se3yY=s}=-&1i~Z^tu6;#o-rXFT?lx$tNI-beu#(cKkEN3vYxXv`i%x*90nKWPVz z!93-hF7rB~!Rwc1$=uo8M1ol(I#0R(Ft%CeDKcgNnitq(zk?OrXeS6Mw1nTqm}?Oc zsVUtiUW;|>3T#_Z=r6z6YI*W#WE!vs^7mX3Ln`0=L?mT%pjb&dy6SHWsu1aCyRK(M zUTy(CgMPB+drl@=vy-#3vuULm`e3`la>RAUB#s- zOzTgK^Dl;~-a$+yXZjb6I;i@s*)~~hE#ke^)nf$d*@6?v!Z*bpJ5q)sdV^DORINQ# z@trpkYJ|cFu1Svs7LD-Me`0Ssz^XR;O(@^FAue<4m%#>tDCjz8yz=2M&$9f%nC<}R z;YQN4UW{y_GGhnFkb{^Dp}1n$DEAl}%|D^Yezzjie1`fM*hOpP6G6_vEAPm?1U1VA z?!o$zj1xd(3YGX$pVJ0Y;LLd}uRqi%L$iiKaLHk9X7J!=_Y7iqgY5BUA!VHWYQQE| z$4^JS#a6X)J#=<|H)KlY9+4twu}c8xBYlwhJ%ew@m(9D0mJZ4I19SHB7Lw(*K9a>G zH*zgT&%pWjKrN1Wh+>K*zfz*X%fAcVAec;oV2og|&d#eDgQjC7;K$_x=| z6kwEUH;ZS(Y(amA!by~^E!U_Ul^C4}DTKPSI7Wwe_%t#w6G;Dx{)k0}6gLN6GwNBm z6Uz{%o`o*C2^G20BrWsa9lSvEXK(5!N)f0PbSk;#{dTwKECo`7e&{e=a8_X6L9WCq zF=HC-W5v@bqXd1dM5GXC`8~#qO*F&u5~j>tQGN`gFNg4Cd~STlmG0)o6!W)#zs|{{ zR=qz)i;msepqV<2H*mrk&(#45|0aAbx=)@J+)3-VH!G()DN974-D)rtvTOQe=#p|I z7BLa^n%qMEG(dSsB|XVASjLk+{`U&0 z+=@&W>LsV=L`=+~uEDifYVqBBTNPv1gdkf=ZlyY{3W_4_dltV&6-C4eyTXR{4pEj= zDF|ura(Kc@sLfS1&13FzGe(DK+uF^nI@|Np^U*w=LwOKLTF^9u#R(4bry~_} zMI$F6Q%)8WS1}#*m>oE-3R^swT>5?B1J|I9&RvA5#Lh7)fiu!ZrScB(-V;v=W229S ziJKN&no|B-d@BG-|AgTE*pH*E%1d3$skf;=M0xa7m%drx+O#4-+VwsFJZC+~BaMMP zU(pvCmzGM&Y#s^-W{42(FDf+A#h`5cRzqR_aXt@s!}OcJ7!}tZ?;I-z|CVwI=|Ti; zgCc=zdtlTk1+fGYT}exYZTo!ol`S~>+4WkM2)S1z(8CCEU1fH>35Td)*OVaF`P(f7 z8;*+ej`G`z=ifE-4wQLut59KoLnsEB?8FuVy6a{ZO$KI{R1IN2=QA4=|M?~`6 z_6UD2vkD-RVmE%ViF&45H{{$D_Qt>K@w**CKeZ!M#DdOyL3X&OG+j4NXJ4Uo5=E##79*>H(HAM_Zxk%%!fEpiX+wkUBTphvJ&_zs zt*~J0#hsLM5??Afl}y(`Dr}EIa3R^oGJj%WtoQv?t?N6$o6x3lXy}K_n?tF8y|Vq0 z>)p_O+E*Wo(=89h1IV?G&jt?MYOdwb4fPcl*6*u67s~vX zR7u%pI0iWJB;XSAZaSn&Z1EwMBqmN4Lmzvis`mGBnjdpCdnmG0eo3l6Y(?I2!Y?(% zT+5eV%A1n(S&8xe^rO-22kvV`OFd_^y6o7hzbQ$?wxRv(y@wXe_AkWr|3bkl9s!5( z*#4uEK>k&d@{)ZpDrK4fh&tyRl|Qn`=hcgw?AtFood96mF9~s$Qt`y8;^cNWy$H#0 z(=1&WIkf~(Gk9?=R4ZmAm^yliA`}5m_9=9`h};3pdMpiNIo-&Yez9>4>P}cQJ9N!j zji&oi2uRT)b)b5SUogt=n$U70DnS^zbcJ#h6jFnHw=dqww3H% zOy66rGqVo5ABgT&zPc#bk;sn6l^jY2QBW&BO?m-cF-qERV4gF@HDR|PF*%QgSSd-_DfHNK2Sm!Tem_eU zE$=DM0x_dfK6KlJVvv+_7OwY$fm!;YzWY!jxOZxGknO7|LcUw(gM-Y5{;}O|q6M>z3{bd70ss zOL>`@Q>FxB3q%&5gpKo6FCp$1B^`(-d;W(uF(n&;jA#*J1*{gPs0G~SbVa!BeGOn& zZ3paB=UJ10#t9(xjEz$oO#ttJK}NZzUzG-`RoOkL59!+q0?edVrV(7>ftPR7+!94P zo1uTuXuEGaU|#UWd>GT>TtX)$!tODU)(EZ)0@V;XQt!p=jP|EmEH>R{saAxoL~+4< zc0V)66(MPj4p}s3CF8w{0ox&+PBzdEmwR4H)?f&Nn)i*Wy#fLC6rkxxpV&i9)9{S$ zuA96cob z4$<5LR~*`{2exuyXCLiTjtex0eiAf->uZ*5OM;AU_D_YrS6Y#l_&K~^^~dI?f%FEcDxAvdr}pyUr6gG2nh%XHVSCcHFpru&&Oqb zq~Yj8$E_D!HcO!4%$uAaveq`yL@QMx*)y~0wPi0C~TpSD@WFkTD{gRIjL^^&b z8l6I!B_kPtCQzH3duhOB?%ngc{4w8@ql_P`nGH$5`lSCt3Pcr3q=v_l38v;Z$sVRB zKNt-nJ}F9{i#8J8qmJ~PDDnhyi;-CFIi*92xf8~k3=B0Aa1O<&NP6U^l$8ReFl#S| zE00-;Eghr6Dn@RO1P`&S@+d@Dafz2=;g-^(({FOD>Y+Xv0<#xU!)_w7zxo;NyG`rtV18>!47KDsWRH zrY{ylhYx5ciHXl?ubvniRT~dHms37KG~G8&E&gruuAbFOMdC?qJGVWbGeMx zJtuEAm2BVO4`hzTseTVjdUL=Slt_x|c71}2Bm{U?7H?h|@PZ#Go$*k-wMJbLEv}?j zcm2GFJFK|w&6%OAe74nu%JIFS(DY;TcLh=gU4r4id`!K$FkLf4xH62Fzx}c-BT&MH zBU2xI+JMw`6!8vZoxeOMEbI+3Vun^~dyF)~6dLtajN&)}ZWH~=l&nK<)mLn)a!1`e zuEqU!z=kfJI67Qjk?ZkG311hIM7F3+A&L@WlSdTVd}xuzk$wUsc{~1+8-!(&O(5wB zk^NFR3R7}6l1&IsujXESRSuJhR$zo$a=#+XY93LySZj6IEiX-Pt15z)nt4b6mPT5r z(KA34SJG(>xQ!?6$ovI)Tg(#RDAJ(FQ_T3i1xf%;#oRC`;um(yG~kqVaBIdV^Bj(y zRWkSuMfPRfA6Z{Y<2(&;G0PhHz)EUj)~x@9Tk-~gHVJzJV6@biWv`WG81E{4D!lR8 z*BkxZE8p8w_9PfmE?d!~jLhLL31$rFqK-i41bCPNzygqBU zo%bFe6icnL@lyRQZ3JG#M_uT^K?eBz zP`@3%G01_~0?6PRrLe8AX}`#iN5RKhW!dM#HCA|i8EEs6P;@ta zk=;%aswWb@0EZr&INUivFBp&0G+o(5EVR&AG}9DJYA&F_aZ05?6oxhNTBVKyyQ++c z*6gf69IPFZq~;71&WKukz$0*!06tzuAbd6Vg2hiv!q|v26M{4oIF}N4`1MvP{iQYe zD8T=VQyFqaI4a~Oo2$WhQHbky(q&ac=}?VcZod$ZBX z>G9myC9P=Tu;t#=fjePlFfO|wlWAAwWysLBMqtbjx>cRLVj=cr!pY{pfc{?!v9{^u zea&Ko1)i|vW;9t*k+cv7luYjv!0y}p&6j>P*#q5!SqrJl~l9-~*adHTH$nV8?g$}gJ{&!+nF zYaHG3P0+x^T7~lF?Opw#vyNRo84=nfn&!4C1Sm8DB=cgZoyA6jpRKdPHEXn@wsi22pAaDkN z#%yU!6b0i3c*(VBqDbe;nY%sJGYg-xmg^E2DxzLDE9BWqQx=GjKh_LqY~&Hn{S~2p z`3!Of4VLxXVd5iBmA%<0?+X75y`g`O*l2S4VyM7gN^uEojX^j`S!isCwbSH>=f8&|z}-5D154p2cDHdzjI)QrHi5lvDHEcJ&BI=F>O; z+xKeIoth@{N)@^CV7MjUI6E%jEPH zxLEq+f`_EAf&v#A;C)F0A}^7{5S9yaN9jV^ykVFu+R*)y&}o7w!Aqg-?S{-(*-XZ8 zVK)*ODlP1&vP#D;mut!?EA7^w-6uFXbHh2nBKdRAzt(t^h$`rR4P(XC^0z4}w!X3i z4ehIoe<(!6BcwFTj8*??7u!+Zq*o!H^p=?S1@9|Yu@3Nra`_tCLl?Hr#tWna864@E zau$YyvpCtymj!cvHc6BV!&WeU9qp7Mn|7fhFLeX2U_u^Y3nEy3dJa8|X5%YaxBC22 z|3s^gj@}l~ya@@+13v;{#3|&=7Uty(&HlhL>ceCU|42L>kJFpk&a{*LyUulp?+w{+ zRTPI)2_~RHRS@Z!;W(w!N=c6bb3?!@n(#460KPpaxa#11JDqnEdN|Qo7DEa2@&0fR zM)ji3M+!aAEH%jco75bTYaZJZYlT`;V-alFgW);MRfbQx($3WVVOpc6B*{zkva!j!^WE3=G3@}pnme`#b2!oBPNwMGry%8iD;_JQq0s6A!Nnq6#a*|Vbt9N1hmI6nK2)q) zQZsnpw>TX^t6fR$mCC#RKMhG(RL9yC=$UjDS6)|}lSK>q zX!oAt4$a7%6iSI%+y%psUKEwu?baskGMwL3r`--+c3|{K;z~V1#W*qq8XOg z*V-KVM+(Z@gp%7;kNQ(*(@q1^vk$eOJeh$qj0@^0KFFu3{RET70}DYt2cDW#VY|de zaQtiIK?<1_vtSD?L8%jA)Un{Kgk_OD1V~Plhy+l3$Z~B^HD3TB`F)@(hqFyX9+OV; zGe33KzRmC8GDHgE=X89V=AZeEZ;7@ia_Tf851Nw^3TSN~PXIw7DLSHwS}+r*f1n4Z zvF%0jG(i8h1jMBYg!nFR2uah2<-&myW`+rVLkm7pZ<(w&s+=%+@4it3N4e})-g|A0s$THIXg=+`6XaLv(E`BcB1FBm%nmx>| zEfDSA>;Mdbgk0(y!~8Yn{x^C1Q3QR7)6IS><-HQVxmjZUsjjx~(81ypYJO z@W@mH8!F&li(C=Rok*^?^(U6zCx1-59=!$DJ@RDv7_wI0+Fq4qyhwrGdRLgVUu=`a zgV3nAGrfeRRv>4WaIW=6!B@hw(GHn|u(-ZEY;``J(pm6!m(F~DVHOKuvfnCfGEj9+ z(Ri5R8eVi!JNtd9U%LI3K;=T=IWfm$yH*gsmr0mGjO9czZdAz2uf{LJxI&_ylKk!D z{f-I4r}37f-341ZN1`!HVFQ zm~>~0@`Ew@bYyJAp$#KQ_NfxYKEVc;M6cA9eE0RIRzH+#a zXA|K3fd8^s;({Ny+uHX4^pp;{OS(7Ssq^|w|0Drr22+q?1r#+Pp>jJ}N^2YB-C5%h z??L|ocTE=+4b@Z;A??qhvzgZOVxIo92wFsjUe99vRqG z54UC3d@6L-B#oSO%06)}(B=XY61_(reQUVUBDFE+p5W_S_3EtG*t3IERez7___J%> zI|YvRky2c3dp7}K`F1sBh!J*Ke7`?Q-!kaSqC!qQbsW}E8a2G21+1MabBXKqS|Snc z03%Dt)8koIaX0)W?${6^F*2+a$}{IR^Y?%=#OCr}?L9VI9_RV0rGur%{qhJlF}PJ- zB88IKoHEG1n^pm1(J+`E1-@m32295PeosL19fD>~2$=so0QCb1A5Pr5 z_0f9yc4U14%<_2AN!p+rV6^{u)$awU=rI0{2yX+A81)750|(o0gJ|oiF)`--p@+y+ zL$<5;-S+`t|M6Kq*B6Iwt47HxP8nii$qoPl9&*|3sWIN47RL|2g@E}~mScWMz81HS zG{=wctmP8Ad?w^kRw@|Knwpt$0?3YM7@K88oK|{3w82uu0zu(1jHuiv#6IY=fHvNF zHweJGC;XW=9`*_(vRnuWxvVD<4GDBxs z(4kv>UOd=73AfVqp#-ay_lGDiJZ{g|z+fJ?M>{BF)_O+DV`2cx2~s1P<)lw6hff)& zOf(BH+6YP+%W$+6^fzJGdisu&fr5!6eZNVJ_x-=-kchWJk++Aq37=DsaICotHn zH3?7GK8CJ4J!fg?*7s9uAm^XJndM9obx7>2>uq^254@)=1Bx}a_&0jx1ncE-hxQ~L}3Md$A-n-q>1%P(p?9Cld1 zUS)RKU>o;{y)||^51(y33r3P`zCL#bIbpkHNWywI;q=S4cw=irlawl~@HwTi$B9;I zK#e&qTUi66$m=G#;+(?g^3wLzRZ$l<%5Y*g@!AY^;y5^Q-uatyhA&O+y*6X2{B4Xt zcPc&YHVyxazq$9O;{{#XiCo$mIintMe(Cp$!AZ1;IBr9`w6#czo3mc4!{RsD=0_UI zqE~NJLtcrz9kV5&l;q}%AMqjIK2b6Z>$E8B8jsx7#nML%?&b@4geE%KL|6dI*o zDm*UdTJ0%Rv&>1U!f>_HufPhR`BfK@pY_19R)%p8BD9fPjh%uVZdb;zf~)W!uLREG zY(H&s2dysE^2F%Mj; zfgXU>pit2Rs zfYiG+BQ=6L^#?2c^GW76@eY5V#Cw8gE?nY)=L`+viFe#s6T7iQaq1zMTGVly{vg(~ zIbv9*q=1U@sJnJi=hK1DWfDU6Y-ur``U)yDb7WcBof6E=?kpD275SNTwxrhz zl7_>kn0k*~NDFqZ_R_XJ5D}5$wjTVqy(oK<lNZt+ah%@# zRYg8trhg~8V*uzT_PJ`ABv;hh8Ntuk#2b-4qC>_NE0fDt;xS(B!9@VV0LDX_I`UvGbG73Nt>%H82h zye>8$l-0kyit!W#{?_7-_LOxbXZXX`Rt_S>LMG2Y8RJ;6hwhHz-N7o z8KSHU)6JPO8$IXYq2X5PM-s2)@&nGVU2$aW*qwRLr9h1sYENzx#pi0&K^Y+r7pUhQ z@e2?OaMTCIftA0vy4pRR9u9X7x=#m(L7`o#9oeuzSdbe?``ik9q=(wh;}y1lGfpEZ zhFtLT2=e&uILUYj=a#B~lY@uha-lCG99=KX^{)=b>~pJv{$j>~vU0mjID9ASG z{k-$${eD^OalN-RHyHEFExwGo^_p+U8t03+7>n2>6ELlnDjW;SLJA6t>iZRvevYd) zSGBpP71gM z##R!R$-b9Y*KtRY5!pc7_i~zT-tedPZggw0=Vh?F5En#uk5L|*-Gpvt&0*DT@2L{h z?d)Y=ci`{IIiq{IunY|5U)15f(FY{z6ZBT4<}HkF;SD-z9j{N2x~FL|)HyHJ&x@;n z@cgWc5#YMCVBM(Z352zU+RknA3jfHOH_R0>N5@r4w>La##Kf}iA{N;ckQRF@Gn1gg zx<1>B97k7&Z_H+hel?IeQ_BQ{`A9+`o3H=z8UQp)8L12&1mJs9Tm(YjNZhwN!vV;`+@4x_{s?K$jbtEG4FeqnVv zO9gUZdY;>_P8JPnP<>yzVzyWoZZzR6LTJs^`YiuU)oZ)QOx3fz#kQv`Nc*u3r2h4>aAkC2s-CgrOc5q@ zZqfX<$dNMWN|P6|`VKi)hZ?#b(bq+9*8z`g$~G8?k8H~Zl3)Tx#LLLcpSO}~gbXy* zsvHvz-{*0ty9gNc7Q<)=VbxO{T>V(MrMjF;Jp>#z1O}uYmD$;9RVm zNBAPKZB5y$AmSn2R5X@;?sge*aa6>U&z{Of;wzNav_Hj7AU>DkP9NuXAkOiXe?ppR zAEpj2IiZEJQSV%dNhQaUxmwQ#bqkof_LHKhp6MF~wNWHwlj?&NEWmW}H~o6y;!}uM zxY%M2-&3Kqp`ewwq?{|!1)Qk0#T5tamq=JZc8GC{jX86;ejvG)(P638kbS64RLXPL z(?lDlAxpa;xmku9lUuOvjTQl%dTb$S?HjJ-T<+n!y`(CAf!ntdHH$lG>(7vsQd$Bg zMg4#p>(nWTIX8i9=wh@=w(N$CJhK%)nNa_;7!{5#?Jg9<0w_DJ4_cRwn)sVqSU(Q( zD}5U{4jg1I8i#@lmqM3g@a21X5CSi|7&+!0$QD<7kxf&}jIPj8FZ(*JpkX}X2JYsL z+Cqf478zNypACS$dI!E0a{SL_iARVR2R=w_NbZeNIY5*?C@i=Feeg7b=Y zQZAUDucFKMD@pd6U%TBi16BoP*?(wi;+qsd23l3#oFf(G>9eAHC^Rj8hDd58a-_$9 zJD)+4k9o)hNL4&Y?T^CAuF}l+c;8^kZ+arofYJ1;Iocrmtu1UJV#@+Gd&)@{!vfbr zBIj>2LPC8of8{1qWs2{Q;bZq$Bf98IkPhsO3+A@2&NTO@>N0` z&_I`!Jd19esyJgz6XtvS`HFd9r!OY~zC{?hZ@uuMSQ(X;{A z*Sfq9)fbl^sP|x(8JrU<^hgO2luN>JR+#XD*@UnOqY}n2bBmCf)IN6=`?jTUO#9}s z>3S2{k?pQ(%NmRjAk-g?$L>6XtB(s?9?9FzJ+lTbXaX(-MM#T)ShD4m`> zy`N9ESkC5{S~*`W8^qR1S1GX)&8ufE!>cr1s`STBnd{?6!Ls9KjV80L0H+>Z+e;by8D1y&XeqD-J^KF+TanQ z1V;!P{-OyDQsl6w&x{U?RW&l2cXB(uJRDlB)E9_`|3MAB53pJ13>bR^W%VP#9%7Fi z$2ZTE+XUR@u|(4)_Hn*6q3Y0Wk~jx07kEC>zeU`_V&ksW`~@2wywnKR_C+Q!s;nO45o zSfR<;7AT*&6P$Xz|5b#KIO4{*3q)gjMaqxa{nA z0;9{Wlf~}zgCez36_Q@+71YiaYzTt9pK&Rp5-$}7iwo0Ezexb)jv_&z3@&X3YMtuF z%_bIjb6<#M17AC-NhCM_#(tM%&goSFYT2G{ZN^jWl#+bs(%%SnK#={>8U`bAHqO5F zW?F-^>xL{DP<;#2GiEMrKeq>>XOXHh`wbVE8Q{60bF?N(efD!TijrsZH zDGk2k2ZQ(=6b6BpE@58ZNlLCBIdeyD@;Guzeqh0e=&c==UM*;Y!^p2o0B3A{r7!Ii4B;^^(i1>dcZ$ld)1_`l~XvghP4_tpW%p6^f>`lxVxWst4xmcLl88~^k*%>4xSXdai zS-5x@n3-8w*}26<*+n^$dSS?bx;_qz(x@N6k~hSk`19l{yf-iPt!rcu&f;$x(i1l%B@<88X?dU|mNY3qJ>zmS5MGo*I$3x|R| zZ<8F8{6Y89K1l1r0QKj*)mzWr4zkg7q;|orY>V3f8(1YlXtey zT=4GNA{E`tn;;MSjOL<+IvrDXJ{eAS?g?lmyOQn+SzXb_2zK~;sz-0V2_OddE`?3m zrsaotjMdNDl3qluZbMFGOLCt>$fTNID%(A^nbD%lstS2Yy|J?aR{;wxo;>ZjN2$JM zAK&mjU9KZaxowV#5HGTy6GRpIM8F@Sy)kvYm9b49Fk5&DAg!a$?^Y>dTf*5h`TZX3 z2b5_eyLNm}NY^r0GiS|uwD1qmHqPb=a1}Cj?Y&H9vNgGfh%700&C)&Xt(sPsa9$NnGymfq>Gw`ft@xYF??FwuY?%i>x8#@95oh=ke>if_TC} zVHYAvwP}^jl*wDh=#5VjO;iUL8NwM)*X`Q5u4zKKwOBW$n8r%@N3FYE$KejG<|{%x zIPDB9q2Z$Unifcp2eui4m`nWy{~!j1#kXCDa!%RF*$3ae`(CCU?DU(>26@EqQydfi zNbA*pHrDb49)!HW{n=|mZ@hZ(Lky}5_rf^!`Y705x55(4%$8hcP`oPsQQMVMr_aHA`P4^oZ*N?@krbn4mZV((u2ZQ%nR=0JlCy^|JLx>uN z6ZuqE@ZHLh2y0DYTOG3@R{B+CkrZ8kHO(T)8=}rMkYpv#2kL&l05BQ7`no3(u{(1& zj{DlPUxUo2+r#r}yi(iv#4l?&LNXdEEwU2%ZV;|?s0(^N}=7O zFz~SsXlg`U|3-ckH<5gEP{7-CHeSP&hZ z4=K)!HrQ>k^%365S~ao6z@7T1TIH^e^6eA&0fpADX+a+LpCP`3R<28LMRUcXUSq0? zs<&$(J9(_fd;Hj8rcFAdMxr@MxX^s9-!Mq$uR+`W>0185ylJ172bvu?VO~^?E-1tD zXyC2YSVG@Nx9muWy;3Y&Ll>i>o)THE6j|0MZfwO!@uSJiumi5J(myx_pX$YjVCKv- z3dmYfh`%fd%xmbOLD3r`qAHu*AJ?0T0XcpzJHA!ZZ8=-~@-f{R* zZwd}S{0dq0%BTOK`l|~HnZAh^6GcREaS_C*D%+DKY8{rTg&{1%sqc=uWYqX%;*|s{ zAr`G=%rto39{ipIPvsFz`B&l}$`aiyEnr8DHe>?1oRnb+n`y<^7P2nVGJP=iVWEjQZJ`zhnjVdU|M2x6UQ4APhsB00{h+UxnTw&SNcZMm~$ zX?sP4&+p^6w!KPt+3W0vyBcLz74@yBkWs4j%ih8@4R;S#-y2`rW{O{ubv<1r>w+7e zP5mD7QZj|8TU`YCL{ve0X~=SKKTumY=;DtLjeZHbkh4Iqq4vynijG_9>p$>(orEBRhyBTKHiU7H}~?!bF-G=a=O9WR=ItR z_V&``zU{Gjd1F0E0(mMP7^;%7OtYW}&)gF=l8VsrP~IAazEqZV?r$N6y+9M^&hH-0 zi-`-5C286DOvC#SHs3QO8e@Xqo*0mF9sV5Rr+7FwB(zg~C&&RhpZe_QzrH)m#2X>O zH--NBQ8e*Ov~2I;!8l;j8u`yMzRmT_XDEW-HVSZtd6Tx#E6cB*JGqnIUx>Hk8=w!L zen18KOf`acxjcOXKSkJzHp~Iecp#@Q^JDcrEm%M?ebc|~^YU9D6+Sv;fgZuLZUXU& zf2KQ%^wId4{W8X?|Fh~17K+{DIIhAZTO@`iF(-h(w-YJZ0;t`W&DG=RuMNbk@Td{lhC5J6=`UZnT@naNu z^f&&4!k|PK_i-87i-esFl~w%>?yvw4x&jk%m?p6(g{SduZ`4xPhMGP?a;}+eL zoWDoQLfDO_bMtBSoBtC7wf{RFL^d`FV$rd-v}iwE!_?D&TlyvR_!mHfV#2I20@(Xt zF}WI#&L6w^Sxd|9%?k%0+HTYc7#+rj-RUjFo_NGgwj@1cim!I&LUd>_b4)tcEP0Io zR@MjWPv2EOuIiy@C8m8tNy74xIa@+W7=)-aGy_tL4xS}r@kgU-Dl)j(T)^qLCAz$r zD}gb#8fArL*^rvLEIVajC98FNL$|ErVV!R7H;3?8@BLT9UmO|0YV9y{wBg~2(zOoh zGU`t8L2D`;NLBWy7x3+maLmQlIyc6vyKj>9Vi`8=k4-XG6D;rvtV$6^W;(yvbx5G4 z0=Wx|R5et|*V%i5>Ij7M>568cq;k(7?XlK$U6Pj99B(hnN1=PpgvX;kn3G>;SXIQi z$EBij@Mb%&_Y@F;*jD9|FxbF*utNj5qj+Lt36XLa5?!xx2~dr*H;W*@*a%dz4Y+AI zKV%t9z1x_L$sKxV4G&6SUt7fzFk_!Jg(|d7+}(r$fLLI&_jDqPAFMO+|U*f zz~KXagP(A#9VhBTw@Zn^x~Y~vBp;a`b%4CY%wQZ{BZ&-jKNaSX_*#if4Hy76 z^7d}%Y(;JDiHxz5G*G+q41H1hsey(V)u<$WkLgH8a%px{8so;_IkvPZY94BF#KD<0 z%dLN8cX(JU$3%5U;NXl-)B{}`wE%@UKurs)KDpkO`%oZtep-7H+%I2&%L=-=6nP3p zmYQ?r)u;;;LuFWI!Q6g0Ah_Ji2iYoTgwk@;{#kwmI2(K=VPu4D98?PEj#B8xc~7IH zY7h2ncgqtiIY%c?!pUn6yjxT)?KY*;VgcB@TjB9Oh_xV-~`wJj+4!r;zs9CrmC8uaO0UUoYf`?i!~TU|-0(rKZLF3E$4{q>yjo?Cim!9<=Kskm4*!hE&Rq}nvO zx_mOJofDffs)jc33>RWIAE1^mEFW)LXl$pEQEF{ivzS^9XfY-gwb?SWs(Np8zW$tM zzyol$Pw5m5JBjV)hXQx0!^Q%rdEb>dbSQ!7$hIqxX#L0(2WKn4R=D+?hZRz8KP8;L z-4Q=g;w_g&MTwO?BpQG5U(g*8oUQj;xLEIXiBXb?J8Sv*GZE2-AS;5j^$PtFZ1)0~ z2j`Y{=;l=^T;Z^0*VsihTk8szm(*bK@TatoLasi-dfzU;x1y+Si?xQEucF(wlKCr8 zY6ye*Tv2a2GV^qTa!+9noj`XwBUv-k7Da{?Lnc*M#=Y8y>8L}aZev(44v@wexVqcL5bf=eh#8a4pfL))3Qe)Zjq&hmNpt%-Xy-bHD~IH1VA zX?YNJ!D|K+bG^Bv>dNl*Y$f4VS4e%2%Mvmu* zuJ&(X1B(g+iUj$QHTssZts~-|Mu)yf@Wg#H(*1nbR$oIZS`7__<6wd&YL6pGkW8e`~IWp%y4eC`d?AiTTV7~-)}JJ^3?@ag2VybOXYdk zjS~iq9YH3Dr5k&*gmDPJ&ft4+8r)~8U@2{w*_7yw8r~{j$p5r9@fJ?Adr@-pICRETkxYDzp#PnS$xUa5ds zapxa8%xxV!3|!1ioX!3Z9RT~mPdXkGoT2u?(WOojJy+p=gFp{*6GjrH5owH{@CmC? zRH$iAbvbMWqwILZd@|ytfwE-V-xoy4204?c-%nGEuN&rUa3pbvfm%9M(G_yMZ#>v4 zpHF5g^EHt_?8MVhK3#J2l%7mV-L?mwD5P;F%p*p)(!4H&oB-%lSzh}eYN9)W5X1DH zaA%GJZ*u$dM7^Q>zV)Lcn1`p2+2U@W`eD7+E>a~j(m;hjK0ls_@7NrPNc^G2?w2>A z@UJX=_%bUWLMxO8m}!m89vwyLS{e=B`LG8*|4WQUV=8yz+9w~GpUuM(1Run#(e5)` z{NEf@L7PCn9`6CQojiClEndHScClcT`w#{l!! zr}mBCzB=UXKJ=UR_c!_LX}t^oZ%lP)z2x>+kVaaA+W(TaVVM5k2M^=&|2~kJR)hXk zSp6T3>7*?)R^tEk(nar++mcUa!9JP&)OY+}ADk~q%;qG2LI0!73IYQEzaStWaF9t( z=D2@B|42ms1Ns4zq-@FfsTe8n7x+Ix;6Xt2{{iX{{sqe6uqMG;!2bpRPgD#L5Tk#< zJv@KG*A^mwf&c5i4v67Dz-pOKp#5LaKdVmvfTV0bL6kQCzZapH8LeF$?3Ls|!5BdP zN7Va&50Nha_+$1;GP2=J!myJ2o3X10Rj2XZ>GJ{ux>S z0qgtz2mJpGw6y;*g!xZpUmOgtKP1iAVSp|BB_-H%C23fz{dLdxzXzv(QVaq9P4VBc z>Tinw>8eRJ)_7o0fq!$Dug(5{b12Jc7E=zoC!Z?~uWzaIbF3qU~5J_!u|$5KE1uZsy=oxd*bhLMpkKLP*w)%v$e zup&Q!TuHumvVXHTZifff5cSs<-(LN%ZAPS*{KKd1#;2|SzfNL4`HVos0Kot$f&1(v KpE9W+Apaknoy0K! delta 21928 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%0Aw5=T5iCW5_o~t%UR?4WMlXXbdk=b!TQZ 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 QSQJ<=LM*IS#P8_;0C;{K#{d8T diff --git a/src/server/routers/_app.ts b/src/server/routers/_app.ts index f1f6d32..e32cfee 100644 --- a/src/server/routers/_app.ts +++ b/src/server/routers/_app.ts @@ -262,7 +262,13 @@ export const appRouter = router({ .mutation(async ({ ctx, input }) => { const res = await axios.post( process.env.PROPOSAL_FEEDBACK_URL as string, - input + input, + { + headers: { + 'Content-Type': 'application/json', + secretkey: process.env.FLOW_SECRET as string, + }, + } ) }), @@ -281,7 +287,16 @@ export const appRouter = router({ }) ) .mutation(async ({ ctx, input }) => { - const res = await axios.post(process.env.APPLICATION_URL as string, input) + const res = await axios.post( + process.env.APPLICATION_URL as string, + input, + { + headers: { + 'Content-Type': 'application/json', + secretkey: process.env.FLOW_SECRET as string, + }, + } + ) }), acceptProposalApplication: publicProcedure