PHPackages                             workplanner/work-planner - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. workplanner/work-planner

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

workplanner/work-planner
========================

Construction work planning engine with CPM scheduling, Gantt charts, and host-integratable HTTP controllers

00PHP

Since Jul 1Pushed todayCompare

[ Source](https://github.com/amazbhola/workplan-package)[ Packagist](https://packagist.org/packages/workplanner/work-planner)[ RSS](/packages/workplanner-work-planner/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Work Planner
============

[](#work-planner)

[![Latest Version on Packagist](https://camo.githubusercontent.com/617a1da4d51cb7f8e42928974ca706d6acc74faf0b5b1128d267caa7b8ed2d8c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f776f726b706c616e6e65722f776f726b2d706c616e6e65722e737667)](https://packagist.org/packages/workplanner/work-planner)[![License: MIT](https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667)](LICENSE)

Construction work planning engine with critical-path scheduling, Gantt chart generation, and host-integratable HTTP controllers.

Features
--------

[](#features)

- **Schedule generation** — template-driven activity durations, dependencies, and working-day calendars
- **Critical Path Method (CPM)** — early/late dates, slack, and critical path day counts
- **Gantt engine** — timeline columns, bar positioning, milestone support
- **Template validation** — duration percent totals, dependency integrity, work-type matching
- **HTTP controllers** — projects, templates, calendar, dashboard, reports, exports, settings, users (via host closures)
- **UI kit** — reusable PHP view components, CSS, and JavaScript (Gantt, calendar, dashboard)
- **Publishable assets** — config, migrations, seeds, views, menu, and permission manifests
- **Framework adapters** — contracts for request, response, session, authorization, CSRF, views, and database
- **Laravel support** — auto-discovery, config merge, and `workplanner:publish` Artisan command

Requirements
------------

[](#requirements)

- PHP **8.3** or higher
- Composer 2.x

Optional (host integrations):

- `dompdf/dompdf` ^3.0 — PDF exports
- `phpoffice/phpspreadsheet` ^5.8 — Excel exports
- `illuminate/support` ^11|^12 — Laravel auto-discovery

Installation
------------

[](#installation)

### Any PHP application

[](#any-php-application)

```
composer require workplanner/work-planner
```

### Laravel

[](#laravel)

```
composer require workplanner/work-planner
php artisan vendor:publish --tag=workplanner-config
php artisan vendor:publish --tag=workplanner-migrations
php artisan workplanner:publish
```

Register host bridge adapters in your application bootstrap (see [Host integration](#host-integration)).

Configuration
-------------

[](#configuration)

Default configuration ships in `config/workplanner.php`:

```
return [
    'name' => 'Work Planner',
    'pagination' => ['per_page' => 10],
    'calendar' => ['default_duration_days' => 180],
    'theme' => ['default' => 'system'],
];
```

Access merged config in PHP:

```
use WorkPlanner\WorkPlannerServiceProvider;

$perPage = WorkPlannerServiceProvider::config('pagination')['per_page'] ?? 10;
```

Laravel reads the same values from `config('workplanner')` after publishing.

Publishing assets
-----------------

[](#publishing-assets)

Publish tags:

TagContents`workplanner-config``config/workplanner.php``workplanner-menu``config/workplanner-menu.php``workplanner-permissions``config/workplanner-permissions.php``workplanner-views`View components under `resources/views/vendor/workplanner``workplanner-assets`CSS/JS under `public/vendor/workplanner``workplanner-migrations`Database migrations`workplanner-seeds`Database seeders**Standalone PHP host:**

```
php vendor/bin/workplanner-install          # list tags and publish all
php vendor/bin/workplanner-install --tag=workplanner-config
```

Or programmatically:

```
use WorkPlanner\PackageInstaller;
use WorkPlanner\WorkPlannerServiceProvider;

$installer = new PackageInstaller('/path/to/host');
$installer->publish(WorkPlannerServiceProvider::TAG_CONFIG);
$installer->publishAll();
```

Usage examples
--------------

[](#usage-examples)

### Generate a schedule (core engine)

[](#generate-a-schedule-core-engine)

```
use WorkPlanner\Calendar\WorkingCalendar;
use WorkPlanner\DTO\ProjectInputDTO;
use WorkPlanner\Template\TemplateActivity;
use WorkPlanner\Template\TemplateCollection;
use WorkPlanner\Template\TemplateDependency;
use WorkPlanner\WorkPlanner;

$template = new TemplateCollection(workTypeId: 1, versionId: 1);
$template->addActivity(new TemplateActivity(1, 'Mobilization', 40.0, '#3498db', false, 5, 1));
$template->addActivity(new TemplateActivity(2, 'Handover', 60.0, '#9b59b6', true, 1, 2));
$template->addDependency(new TemplateDependency(1, 2));

$input = new ProjectInputDTO(
    workTypeId: 1,
    template: $template,
    startDate: new DateTimeImmutable('2026-07-01'),
    calendar: new WorkingCalendar([1, 2, 3, 4, 5]),
    durationDays: 30,
);

$result = (new WorkPlanner())->generate($input);

echo $result->criticalPathDays;
foreach ($result->activities as $activity) {
    echo $activity->name, ' ', $activity->startDate->format('Y-m-d'), PHP_EOL;
}
```

### Host integration

[](#host-integration)

Package controllers depend on **host closures** — thin wrappers in your application wire repositories and services:

```
use WorkPlanner\Http\Controllers\ProjectController;
use WorkPlanner\WorkPlannerServiceProvider;

WorkPlannerServiceProvider::registerHostBridge(static function ($registry): void {
    $registry->request($hostRequestAdapter);
    $registry->response($hostResponseAdapter);
    $registry->session($hostSessionAdapter);
    $registry->authorization($hostAuthorizationAdapter);
    $registry->views($hostViewFactory);
});

WorkPlannerServiceProvider::boot();
```

See the reference host wrappers in the Work Planner application repository under `app/Controllers/`.

Screenshots
-----------

[](#screenshots)

DashboardGantt chart[![Dashboard placeholder](docs/screenshots/dashboard.png)](docs/screenshots/dashboard.png)[![Gantt placeholder](docs/screenshots/gantt.png)](docs/screenshots/gantt.png)Project calendarTemplate builder[![Calendar placeholder](docs/screenshots/calendar.png)](docs/screenshots/calendar.png)[![Template placeholder](docs/screenshots/templates.png)](docs/screenshots/templates.png)> Screenshot files are not bundled in the Composer package. Add your own captures under `docs/screenshots/` in the application repository.

Troubleshooting
---------------

[](#troubleshooting)

### `ProjectInputDTO` deprecation warnings (PHP 8.3+)

[](#projectinputdto-deprecation-warnings-php-83)

Use named arguments and place `calendar` before optional `endDate` / `durationDays`. See [UPGRADE.md](UPGRADE.md).

### `Service not registered: WorkPlanner\Contracts\...`

[](#service-not-registered-workplannercontracts)

Call `WorkPlannerServiceProvider::registerHostBridge()` before `boot()` and register all required contract adapters.

### Published assets missing

[](#published-assets-missing)

Ensure `workplanner-assets` tag was published and web server serves `public/vendor/workplanner/`.

### Laravel provider not discovered

[](#laravel-provider-not-discovered)

Confirm `illuminate/support` is installed and run `php artisan package:discover`.

### Migrations fail on fresh install

[](#migrations-fail-on-fresh-install)

Run migrations in order from `database/migrations/vendor/workplanner` (or published path). Seed permissions using published seeders before creating users.

Testing
-------

[](#testing)

```
composer test
# or
php tests/WorkPlannerGenerateTest.php
```

License
-------

[](#license)

MIT — see [LICENSE](LICENSE).

Changelog
---------

[](#changelog)

See [CHANGELOG.md](CHANGELOG.md).

###  Health Score

20

↑

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/d0ce52a20c524b198e1b2c9978c90672bc2711ba7295279cbc19baca99e99a95?d=identicon)[Md Fayezullah](/maintainers/Md%20Fayezullah)

---

Top Contributors

[![amazbhola](https://avatars.githubusercontent.com/u/12036044?v=4)](https://github.com/amazbhola "amazbhola (1 commits)")

### Embed Badge

![Health badge](/badges/workplanner-work-planner/health.svg)

```
[![Health](https://phpackages.com/badges/workplanner-work-planner/health.svg)](https://phpackages.com/packages/workplanner-work-planner)
```

###  Alternatives

[remotelyliving/doorkeeper

A Feature Toggle

1637.8k](/packages/remotelyliving-doorkeeper)[lexik/cron-file-generator-bundle

This bundle provides service for generate cron file

236.5k](/packages/lexik-cron-file-generator-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
