Welcome to Unity, your all-in-one solution for seamless leave and employee management within your organizations!
It is an open-source cross-platform Leave management app written in Dart using Flutter.
-
Multi-Platform support🌐: Unity gracefully adapts to your preferred platform – Android, iOS, or web, delivering a unified and professional leave management solution.
-
Space Management🗂️: Create and manage multiple spaces effortlessly, allowing for organized leave tracking across different spaces.
-
Role-based access🔒: Assign different roles to users, including Employees, HR and Admin, ensuring secure and efficient leave management with the right permissions.
-
Real-time Updates🚀: Stay informed with real-time updates on leave request, approvals, and rejections, providing a transparent and efficient leave management.
-
Team Coordination👥: Enhance team coordination by allowing users to view coworkers on leave, promoting a collaborative and informed workplace environment
-
Leave Analytics📊: Keep a record of yearly paid leaves and overall counts.
Create/Join Space | Create Space | Admin Dashboard Screen |
---|---|---|
Admin Leaves Screen | Leave Approval | Employees Screen |
---|---|---|
User Guide
Welcome to Unity, your all-in-one solution for seamless leave and employee management within your organizations. Unity introduces three distinct roles: Admin, HR, and Employee. Let's guide you through the initial steps to ensure a smooth start.
- To get started with unity, signing in with Google or Apple
- After signing in, you have an option to create a new space. By default, the creator is assigned as the Admin role, granting full access,including the ability to edit or remove the space if no longer needed.
- If you've been invited to join a space, these invitations will be visible after signing in. Simply select the space to join it.
- Invited members are assigned the default role of Employee. The role can be edited later by admin after the user has joined the space.
As an Admin, you have the highest level of permissions, allowing you to:
- After Successful Sign in With Google or Apple.
- Navigate to the Spaces screen.
- Click on Create New Space.
- Fill in the required details and confirm.
- Click on ☰ button on the left side on Home screen.
- Click on Edit space to edit it.
- The home screen displays all pending leave requests.
- Review pending requests and approve or reject them. (Employee will receive notification mail for the leave approval/rejection)
- Go to the Leaves Tab.
- Apply filters to view leaves of specific employees. (Can see all Details of the Leaves.)
- Go to Members tab
- Invite New Member,
- To Invite a new member, Click on Invite button.
- Add Email of user and confirm. (User will receive invitation mail - planned.)
- for existing members,
- Click on a specific employee to see detailed information.
- You can Edit or Deactivate them. (After Deactivate user, User will lose access of the space.)
As an HR User, Your permissions are same as Admin including:
(Can't change Role of the employee)
- Go to Leaves Tab
- Click on + Button to apply leave. (Only Admin can review your leave request and approve/reject it.)
As an Employee, you can:
- Go to Leaves Tab.
- Click on + Button to apply leave. (Only Admin/HR can review your leave request and approve/reject it.)
- Can see Leave Details of coworkers except reason.
- Can see only upcoming Leaves of coworkers. (Go to Members tab, Click on member and you can see upcoming leaves of the member.)
- Click on the ☰ button on the left side on Home screen.
- Click on Personal Details to Update it. (As an employee, you can't change your role within the organization.)
Note: This project uses firebase realtime and firestore database and firebase authentication💥
Project Set up Instructions
Note: Flutter sdk version
'>=3.2.0 <4.0.0'
is recommended to run project.
$ git clone https://github.com/canopas/canopas-unity.git
- Rename the app package name (because this can affect the Firebase).
- You can do it manually or using this package Rename Package or look at this Stackoverflow Question.
- You'll need to create a Firebase instance. Follow the instructions at https://console.firebase.google.com.
- Go to the Firebase console for your new instance.
- Click "Authentication" in the left-hand menu.
- Click the "sign-in method" tab.
- Click the "Google" and enable it.
- Go to the Firebase Console.
- Click "Firestore Database" in the left-hand menu.
- Click the "Create Database" button.
- It will prompt you to set up, rules, for the sake of simplicity, let us choose test mode, for now.
- On the next screen, select any of the locations you prefer.
-
In the Firebase console, in the settings of your project.
-
Click on the Flutter Icon to add the Flutter app.
-
Follow the instructions to add the Flutter app.
-
It will create a
firebase_options.dart
file in thelib
folder.
-
Go to Google APIs console.
-
On the top bar, Choose your project from the drop-down menu if the selected default project is not your current project.
-
Click on the "API APIs and services".
-
On the left side menu, Select "Credentials".
-
Click on the "Web client(auto created by Google Service)".
-
Copy "Client Id" and "Client Secret" (We will use in next step).
- Add a new dart file named
desktop_credentials
in thelib
folder. - Add the below Code in the file.
const String googleClientId =
"YOUR_GOOGLE_CLIENT_ID";
const String authClientSecret = "YOUR AUTH_CLIENT_SECRET";
- Run the following command from the project folder to get your SHA-1 key:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
- Open the Android app within your Firebase console.
- Add your SHA-1 key by clicking "Add Fingerprint".
- Download google-services.json.
- Replace it with the old
google_services.json
inandroid/app/
(You can also do it by Flutterfire CLI).
- Open XCode, right-click the Runner folder, select the "Add Files to 'Runner'" menu, and select the GoogleService-Info.plist file to add it to /ios/Runner in XCode.
- Open /ios/Runner/Info.plist in a text editor.
- Then add the CFBundleURLTypes attributes.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<!-- TODO Replace this value: -->
<!-- Copied from GoogleService-Info.plist key REVERSED_CLIENT_ID -->
<string>com.googleusercontent.apps.861823949799-vc35cprkp249096uujjn0vvnmcvjppkn</string>
</array>
</dict>
</array>
- When running the app on the simulator for the first time, it may take a longer time to build.
- Open the "Credentials" page of the Google APIs console.
- Click on the
Web client (auto-created by Google Service)
. - Copy the
Client ID
located at the top left side of the page. - Open the web/index.html file, and add the following meta tag.
<meta name="google-signin-client_id" content="YOUR_GOOGLE_SIGN_IN_OAUTH_CLIENT_ID.apps.googleusercontent.com">
- Add localhost entries if you are running an app on a specific port on
Authorized JavaScript origins
or use the port that is already specified in this field. - Run
flutter run -d chrome --web-hostname localhost --web-port 7357
. - Replace the port with the one you added to the
Authorized JavaScript origins
fields.
We welcome and appreciate any suggestions you may have for improvement.
For bugs, questions and discussions please use the Github Issues.
canopas_unity is owned and maintained by the Canopas team.
You can follow them on X at @canopas_eng for project updates and releases. If you are interested in building apps or designing products, please let us know. We'd love to hear from you!
Unity is licensed under the Apache License, Version 2.0.
Copyright 2024 Canopas Software LLP
Licensed under the Apache License, Version 2.0 (the "License");
You won't be using this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.