Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add Travel Request Approval Management App #122

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions samples/travel-request-approval/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Travel Request Approval Management Canvas Application

## Summary

Travel Request Approval is a comprehensive corporate travel request solution designed to streamline employee trip approvals while ensuring policy compliance. Transform your travel management process with automated workflows and real-time budget tracking.

📢 This enterprise-ready solution enables organizations to:

✈️ Submit Travel Requests
✅ Track Multi-Level Approvals
📊 Enforce Budget Policies

![Travel Approval Interface](./assets/preview.png)

## Applies to

![Power Apps](https://img.shields.io/badge/Power%20Apps-Yes-green "Yes")

## Compatibility
![Premium License](https://img.shields.io/badge/Premium%20License-Not%20Required-green.svg "No premium required")
![Experimental Features](https://img.shields.io/badge/Experimental%20Features-No-red.svg "Production-ready solution")

## Contributors

* [Summit Baj](https://github.com/summitbaj)

## Version history

Version|Date|Comments
-------|----|--------
1.0|Jan 25, 2025|Initial release

## Prerequisites

- Microsoft Dataverse: **Travel Requests**

## Solution Components

Component|Type
---------|-----
Travel Request App | Canvas App
Travel Request Admin Portal | Model Drivel App
Approval Workflow | Power Automate Flow

## Minimal Path to Awesome

1. [Download](./solution/TravelRequestApprovalApp_1_0_0_2.zip) the solution package
2. Import into Power Apps via **Solutions** > **Import solution**
3. Deploy the Travel Request Approval app to your users

## Using the Source Code

To modify and repackage using Power Apps CLI:

```bash
pac solution pack --folder travel-request-src --zipfile travel-request-approval.zip --processCanvasApps
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
88 changes: 88 additions & 0 deletions samples/travel-request-approval/assets/sample.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
[
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/pnp/samples/v1.0/metadata-schema.json",
"name": "travel-request-approval-app",
"version": "1.0.0.0",
"source": "pnp",
"creationDateTime": "2025-01-25T00:00:00.000Z",
"updateDateTime": "2025-01-25T00:00:00.000Z",
"title": "Travel Request Approval Management Canvas App",
"shortDescription": "Streamline employee travel requests with automated approval workflows and policy compliance tracking.",
"longDescription": [
"End-to-end solution for managing corporate travel requests, including multi-level approvals, budget validation, and integration with travel booking systems."
],
"url": "https://github.com/pnp/powerapps-samples/tree/main/samples/travel-request-approval",
"products": [
"Power Apps",
"Power Platform"
],
"tags": [
"POWERAPPS",
"TEMPLATE",
"TRAVEL-REQUESTS",
"APPROVAL-WORKFLOW",
"EXPENSE-MANAGEMENT"
],
"categories": [
"POWERAPPS"
],
"metadata": [
{
"key": "POWERAPPS-MANIFEST-VERSION",
"value": "0.20"
},
{
"key": "POWERAPPS-TYPE",
"value": "Canvas"
},
{
"key": "POWERAPPS-EXPERIMENTAL",
"value": "No"
},
{
"key": "POWERAPPS-PREMIUM",
"value": "No"
},
{
"key": "POWERAPPS-ONPREM",
"value": "No"
},
{
"key": "POWERAPPS-CUSTOMCONNECTOR",
"value": "No"
}
],
"thumbnails": [
{
"type": "image",
"order": 100,
"url": "https://github.com/pnp/powerplatform-samples/blob/0e2eaf70c87cbcb5a19a700bb57a8276ecfefbec/samples/travel-request-approval/assets/preview.png",
"alt": "Approval Workflow Preview"
}
],
"authors": [
{
"gitHubAccount": "summitbaj",
"name": "Summit Bajracharya",
"pictureUrl": "https://avatars.githubusercontent.com/u/109615108"
}
],
"references": [
{
"name": "Create a component for canvas apps",
"description": "Components are reusable building blocks for canvas apps so that app makers can create custom controls to use inside an app, or across apps using a component library",
"url": "https://docs.microsoft.com/powerapps/maker/canvas-apps/"
},
{
"name": "Overview of creating apps in Power Apps",
"description": "Power Apps is a high-productivity development platform for business apps.",
"url": "https://docs.microsoft.com/powerapps/maker/"
},
{
"name": "Power Apps canvas apps documentation",
"description": "Design and build a business app from a canvas in Microsoft Power Apps with data from a variety of sources without writing any code using traditional programming languages, such as C#.",
"url": "https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/"
}
]
}
]
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"Content": "Image",
"FileName": "/ctrllib/image/images/SampleImage.svg",
"IsSampleData": true,
"IsWritable": false,
"Name": "SampleImage",
"Path": "/ctrllib/image/images/SampleImage.svg",
"ResourceKind": "Uri",
"RootPath": "ms-appx:///ctrllib/image/images/SampleImage.svg",
"Schema": "i",
"Type": "ResourceInfo"
}
116 changes: 116 additions & 0 deletions samples/travel-request-approval/sourcecode/src/CanvasManifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
{
"FormatVersion": "0.24",
"Header": {
"DocVersion": "1.326",
"MinVersionToLoad": "1.326",
"MSAppStructureVersion": "2.0"
},
"Properties": {
"AppCreationSource": "AppFromScratch",
"AppDescription": "",
"AppPreviewFlagsMap": {
"aibuilderserviceenrollment": false,
"allowmultiplescreensincanvaspages": false,
"appinsightserrortracing": false,
"appinstrumentationcorrelationtracing": false,
"autocreateenvironmentvariables": false,
"backfromhostaction": false,
"behaviorpropertyui": false,
"blockmovingcontrol": true,
"cdsdataformatting": false,
"classiccontrols": false,
"consistentreturnschemafortabularfunctions": false,
"copyandmerge": false,
"datatablev2control": true,
"delaycontrolrendering": false,
"delayloadscreens": true,
"disablecdsfileandlargeimage": false,
"disablecommandbar": false,
"dynamicschema": false,
"enableappembeddingux": false,
"enablebarcodereaderfeature": false,
"enablecomponentnamemaps": false,
"enablecomponentscopeoldbehavior": false,
"enableeditcacherefreshfrequency": false,
"enableexcelonlinebusinessv2connector": true,
"enableideaspanel": true,
"enableonstart": true,
"enableonstartnavigate": false,
"enablepcfmoderndatasets": true,
"enablepowerautomatepane": true,
"enablerowscopeonetonexpand": false,
"enablerpawarecomponentdependency": true,
"enablerulespanel": false,
"enablesaveloadcleardataonweb": false,
"enhanceddelegation": true,
"enhancedgalleryinitialization": true,
"errorhandling": true,
"excelcompatibility": false,
"expandedsavedatasupport": true,
"exportimportcomponents2": true,
"externalmessage": false,
"formuladataprefetch": true,
"formularepair": false,
"generatedebugpublishedapp": false,
"herocontrols": false,
"improvedmediacapture": false,
"improvedtabstopbehavior": true,
"keeprecentscreensloaded": false,
"longlivingcache": false,
"namedformulas": false,
"nativecdsexperimental": true,
"optimizedforteamsmeeting": false,
"parallelcodegen": false,
"pdffunction": false,
"projectionmapping": true,
"reactformulabar": false,
"reliableconcurrent": true,
"reverttooldpowerautomate": false,
"rtlinstudiopreview": false,
"rtlsupport": false,
"tabledoesntwraprecords": false,
"untypedobject": false,
"usedisplaynamemetadata": true,
"useenforcesavedatalimits": true,
"useexperimentalcdsconnector": true,
"useexperimentalsqlconnector": true,
"useguiddatatypes": true,
"usenonblockingonstartrule": true,
"webbarcodescanner": false,
"zeroalltabindexes": false
},
"Author": "",
"ContainsThirdPartyPcfControls": false,
"DefaultConnectedDataSourceMaxGetRowsCount": 500,
"DocumentAppType": "Phone",
"DocumentLayoutHeight": 1136,
"DocumentLayoutLockOrientation": false,
"DocumentLayoutMaintainAspectRatio": false,
"DocumentLayoutOrientation": "portrait",
"DocumentLayoutScaleToFit": false,
"DocumentLayoutWidth": 640,
"DocumentType": "App",
"EnableInstrumentation": false,
"FileID": "1f4f3f0b-6bc0-4df8-aacd-5356cbea14d7",
"Id": "1f4f3f0b-6bc0-4df8-aacd-5356cbea14d7",
"InstrumentationKey": "",
"Name": "Travel Request App",
"OriginatingVersion": "1.326"
},
"PublishInfo": {
"AppName": "Travel Request App",
"BackgroundColor": "RGBA(0,176,240,1)",
"IconColor": "RGBA(255,255,255,1)",
"IconName": "Edit",
"LogoFileName": "",
"PublishDataLocally": false,
"PublishResourcesLocally": false,
"PublishTarget": "player",
"UserLocale": "en-US"
},
"ScreenOrder": [
"HomeScreen",
"Screen1",
"Screen2"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Loading