Task Management System

About

The Task Management System is a web-based application developed for Business Automation Ltd.

Please refer to the system requirements details given below, which I have attempted to follow:

- Authentication and Authorization :

There are two types of users: Managers and Teammates. Managers can sign up using their Email, Name, Employee ID, and Password. They can also create Teammates who can then log in. Managers have access to all features, whereas Teammates have some limitations. A member can only access their assigned data. However, they cannot view tasks assigned to other members.
Managers can access: Team management, Project management, and Task management.
Teammates can access: They can only view their task list, filter it, and update the status.

- Project Management :

Managers can create Projects, each with a unique code and name. They can also create Tasks, which include task name, project code, description, and status.

- Task and Status Management :

Managers can assign tasks to teammates, and teammates, upon logging in, can view their assigned tasks and update their status.

- Search and Filter functionality:

For the search functionality, there is a datatable named Yajra where any word can be easily searched. Additionally, there is a filter option where Managers and Teammates can filter tasks based on Project and status. Managers can also filter projects according to project name.

Technology Used

  • PHP - 8.1
  • Laravel- 10
  • MySQL - 8
  • Bootstrap - 4
  • jQuery, Ajax

How to run this project ?

At first clone the repository

Update Your Composer

composer update

ENV Setup

  • Just copy paste your existing .env.example to .env
  • You have to setup database related credentials properly in .env

Generate APP_KEY

php artisan key:generate

Migrate

Just run this command

php artisan migrate

Seeder

php artisan db:seed

Run Project

php artisan serve

Testing

If need to run test, then please run the following the command after DB Seed

./vendor/bin/pest

or run individually

./vendor/bin/pest tests/Feature/LoginTest.php
./vendor/bin/pest tests/Feature/TeamMemberTest.php
./vendor/bin/pest tests/Feature/ProjectTest.php
./vendor/bin/pest tests/Feature/TaskTest.php

You can check my Feature test result : Click Here

Manager Credentials

url: your_domain/login
Email: manager@gmail.com 
Password: manager123

Team Members Credentials

url: your_domain/member-login
Email: member123@gmail.com 
Password: member123

or,

url: your_domain/member-login
Email: member456@gmail.com 
Password: member456

or goto direct your_domain. There are two options.

Database Schema

Click Here

Decisions made during task completion

  • When rolling back, first drop the foreign keys, and then other constraints.
  • For code clean and formatting, I used Laravel Pint.
  • Used Yajra datatable for server-side rendering, data filtering, sorting and pagination.
  • jQuery Ajax was used for performing actions without reloading the page.
  • Sweetalert was used to display success or error messages.
  • A member can only view their own tasks.
  • I tried to write some test code using the PEST Testing Framework. Currently, I've only written some feature test codes.
  • A member can access only their assigned data. However, they cannot view tasks assigned to other members. Managers have access to all tasks.
  • I separated the data layer and business logic from the controller to facilitate method reusability and parallel testing.
  • Implement error handling using try..catch. When multiple data operations are performed, I followed the transaction mechanism. If successful, the transaction is committed; otherwise, it is rolled back (Used transaction in "Task" operations).

Packages which I used