# Project Planning (Extended) (cf.cplace.projektplanung.projektplanungExtended)

## Overview

The "Project Planning (Extended)" app is the foundation for hybrid project management. In addition to the features included in the "Project Planning (Basic)" app, this app gives you advanced features such as delegating and subscribing tasks, choosing between forward and backward scheduling, and combining classic and agile project management.

**Key capabilities:**
- Task delegation across schedules
- Task/milestone subscriptions (cross-schedule references)
- Forward and backward scheduling modes
- Protection controls for subscriptions
- Constraint-based scheduling (must start, must finish, startline, deadline)

## Dependencies

Installing this app automatically installs:

| App | Qualified Name | Purpose |
|-----|----------------|---------|
| cplace Basis | `cf.cplace.platform` | Base platform (always installed) |
| Project Planning (Basic) | `cf.cplace.projektplanung.projektplanungBasic` | Core Gantt functionality, Schedule/Task/Milestone types |

## Types Provided

The types below are provided by this app and its dependencies. All three types work together to form a hierarchical schedule structure.

### cf.schedule (Schedule)

The root container for project planning. Contains all tasks and milestones.

| Attribute | Internal Name | Type | Required | Description |
|-----------|---------------|------|----------|-------------|
| Start | `startDate` | Date | No | Schedule starts in the morning of the specified day |
| Finish | `endDate` | Date | No | Schedule finishes in the evening of the specified day |
| Duration | `duration` | Number | Yes | Duration value |
| Duration Unit | `durationUnit` | Enumeration | Yes | Unit for duration |
| % Completed | `percentComplete` | Number | Yes | Completion percentage |
| RAG Rating | `ratingLight` | Enumeration | No | Red/Amber/Green status indicator |
| Note | `note` | Text | No | Free-text notes |
| Calendar ID | `calendarId` | Text | Yes | Calendar for working days |
| Task Class | `activityClass` | Reference | No | Visual styling category |
| **Extended Features:** | | | | |
| Backwards scheduling | `scheduleBackwards` | Boolean | Yes | Forward vs backward scheduling mode |
| Allow Subscribing | `allowSubscription` | Boolean | Yes | Enable subscriptions in this schedule |
| Allow Delegating | `allowDelegation` | Boolean | Yes | Enable delegations in this schedule |
| Restricted Read Access for Subscriptions | `protectSubscriptions` | Boolean | No | Protect subscription visibility |
| Parent Project | `parentProject` | Reference | No | Parent project for hierarchy |
| Links to Other Projects | `additionalProjectLinks` | Reference (multi) | No | Cross-project references |
| **Baseline/Target:** | | | | |
| Target Start | `baselineStartDate` | Date | No | Baseline start date |
| Target Finish | `baselineEndDate` | Date | No | Baseline end date |
| Target Duration (Days) | `baselineDuration` | Number | No | Baseline duration |
| Target % Done | `baselinePercentComplete` | Number | No | Baseline completion |
| **Display Options:** | | | | |
| Rollup | `rollup` | Boolean | No | Display in parent object row |
| Hide at Rollup of Subtasks | `hideOnSubtaskRollup` | Boolean | No | Hide when subtasks roll up |
| Alias | `alias` | Text | No | Alternative display name |
| Gantt Version | `cf.cplace.gantt.ganttVersion` | Text | No | "2.0" for New Gantt Widget |
| **Integration:** | | | | |
| Print Profile | `printProfile` | Reference | No | Default print profile |
| PG Profile | `pgProfile` | Reference | No | Presentation Graphic profile |

### cf.activity (Task)

Work items with duration within a schedule.

| Attribute | Internal Name | Type | Required | Description |
|-----------|---------------|------|----------|-------------|
| Parent object | `parent` | Reference | Yes | Parent schedule or task (for hierarchy) |
| Schedule | `containingSchedule` | Reference | No | Containing schedule (computed) |
| Start | `startDate` | Date | No | Task starts in the morning |
| Finish | `endDate` | Date | No | Task finishes in the evening |
| Duration | `duration` | Number | Yes | Duration value |
| Duration Unit | `durationUnit` | Enumeration | Yes | Unit for duration |
| % Completed | `percentComplete` | Number | Yes | Completion percentage |
| RAG Rating | `ratingLight` | Enumeration | No | Status indicator |
| Automatically scheduled | `automaticScheduling` | Boolean | No | Auto-reschedule on predecessor changes |
| Note | `note` | Text | No | Free-text notes |
| Calendar ID | `calendarId` | Text | Yes | Calendar for working days |
| Task Class | `activityClass` | Reference | No | Visual styling category |
| **Extended Features:** | | | | |
| Delegated from subscribed task | `delegationSource` | Reference | No | Source of delegation |
| Additional delegation data | `delegationData` | Text | No | Delegation metadata |
| Additional subscription data | `mirrorData` | Text | No | Subscription metadata |
| Restricted Read Access | `protectSubscriptions` | Boolean | No | Protect subscription visibility |
| **Constraints:** | | | | |
| Must Start | `mustStartOnDate` | Boolean | No | Task must start on start date |
| Must End | `mustFinishOnDate` | Boolean | No | Task must end on end date |
| Startline | `startlineDate` | Date | No | Earliest possible start |
| Deadline | `deadlineDate` | Date | No | Latest possible end |
| Task Position | `taskPosition` | Enumeration | No | "as soon as possible" or "as late as possible" |
| **Baseline/Target:** | | | | |
| Target Start | `baselineStartDate` | Date | No | Baseline start |
| Target Finish | `baselineEndDate` | Date | No | Baseline end |
| Target Duration (Days) | `baselineDuration` | Number | No | Baseline duration |
| Target % Done | `baselinePercentComplete` | Number | No | Baseline completion |
| **Display Options:** | | | | |
| Rollup | `rollup` | Boolean | No | Display in parent row |
| Hide at Rollup of Subtasks | `hideOnSubtaskRollup` | Boolean | No | Hide when subtasks roll up |
| Alias | `alias` | Text | No | Alternative display name |

### cf.milestone (Milestone)

Point-in-time markers within a schedule (zero duration).

| Attribute | Internal Name | Type | Required | Description |
|-----------|---------------|------|----------|-------------|
| Parent object | `parent` | Reference | Yes | Parent schedule or task |
| Schedule | `containingSchedule` | Reference | No | Containing schedule (computed) |
| Date | `date` | Date | No | Milestone date (evening of day) |
| % Completed | `percentComplete` | Number | Yes | Completion percentage (0 or 100) |
| RAG Rating | `ratingLight` | Enumeration | No | Status indicator |
| Automatically scheduled | `automaticScheduling` | Boolean | No | Auto-reschedule on predecessor changes |
| Note | `note` | Text | No | Free-text notes |
| Calendar ID | `calendarId` | Text | Yes | Calendar reference |
| Task Class | `activityClass` | Reference | No | Visual styling category |
| **Extended Features:** | | | | |
| Delegated from original milestone | `delegationSource` | Reference | No | Source of delegation |
| Additional delegation data | `delegationData` | Text | No | Delegation metadata |
| Additional subscription data | `mirrorData` | Text | No | Subscription metadata |
| Restricted Read Access | `protectSubscriptions` | Boolean | No | Protect subscription visibility |
| **Constraints:** | | | | |
| Must Start | `mustStartOnDate` | Boolean | No | Must occur on date |
| Must End | `mustFinishOnDate` | Boolean | No | Must occur on date |
| Startline | `startlineDate` | Date | No | Earliest possible date |
| Deadline | `deadlineDate` | Date | No | Latest possible date |
| Task Position | `taskPosition` | Enumeration | No | Scheduling preference |
| **Baseline/Target:** | | | | |
| Target Start | `baselineStartDate` | Date | No | Baseline date |
| Target Finish | `baselineEndDate` | Date | No | Baseline date |
| Target Duration (Days) | `baselineDuration` | Number | No | Always 0 for milestones |
| Target % Done | `baselinePercentComplete` | Number | No | Baseline completion |
| **Display Options:** | | | | |
| Rollup | `rollup` | Boolean | No | Display in parent row |
| Hide at Rollup of Subtasks | `hideOnSubtaskRollup` | Boolean | No | Hide when subtasks roll up |
| Alias | `alias` | Text | No | Alternative display name |
| Show time interval | `cf.cplace.projektplanung.pptexport.showMilestoneTimeInterval` | Boolean | No | Show interval in PG export |

## Widgets Provided

### From Project Planning (Extended)

| Widget | Kind | Description | Use Case |
|--------|------|-------------|----------|
| Subscriptions | `cf.cplace.projektplanung.subscriptions` | Shows subscriptions of a planning element in a table | Display cross-schedule references for Tasks and Milestones |

### From Project Planning (Basic) (Dependency)

| Widget | Kind | Description | Use Case |
|--------|------|-------------|----------|
| Gantt chart | `cf.projektplanung.singleGantt` | Gantt chart of all tasks and milestones of a schedule | Primary visualization for single schedule |
| Multi Gantt Chart | `cf.projektplanung.multiGantt` | Displays multiple schedules simultaneously | Portfolio views, program dashboards |
| Structured Table for Schedules | `cf.projektplanung.scheduleTreeTable` | Tree table showing tasks and milestones | Spreadsheet-like editing of task properties |
| Schedule Edit State | `cf.projektplanung.scheduleLockState` | Shows who is editing the schedule | Collaborative editing coordination |
| Open Gantt Chart | `cf.projektplanung.singleGanttLink` | Button to open Gantt in new tab | Quick access from overview pages |

## Key Concepts

### Hierarchy Structure

```
Schedule (cf.schedule)
  |-- Task (cf.activity) [parent -> Schedule]
  |     |-- Task (cf.activity) [parent -> Task] (sub-task)
  |     |-- Milestone (cf.milestone) [parent -> Task]
  |-- Milestone (cf.milestone) [parent -> Schedule]
```

### Delegation vs Subscription

- **Subscription**: Read-only mirror of a task/milestone from another schedule. Changes sync automatically.
- **Delegation**: Creates a new task/milestone that references the original, allowing independent editing while maintaining a link.

### Scheduling Modes

- **Forward scheduling** (`scheduleBackwards: false`): Calculate dates from start to end
- **Backward scheduling** (`scheduleBackwards: true`): Calculate dates from end to start

### Constraints

Tasks and milestones support constraint-based scheduling:
- **Must Start/Must End**: Fixed date constraints
- **Startline**: Earliest allowed start (like "start no earlier than")
- **Deadline**: Latest allowed end (like "finish no later than")
- **Task Position**: "as soon as possible" vs "as late as possible"

## Usage Notes

### When to use this app

- When you need cross-schedule coordination (subscriptions, delegations)
- When you need backward scheduling
- When you need constraint-based scheduling (must start, deadline, etc.)
- For hybrid project management combining classic and agile approaches

### When to use Project Planning (Basic) instead

- Simple single-schedule Gantt charts
- Basic task/milestone tracking without cross-schedule features
- Smaller projects without complex scheduling constraints

### Related Apps

| App | Purpose |
|-----|---------|
| Task Classes (`cf.cplace.projektplanungMasterData`) | Visual styling for tasks in Gantt |
| Project Structure (`cf.cplace.projectTree`) | Project hierarchy management |
| New Gantt (`cf.cplace.projectPlanning.app.gantt2.gantt2`) | Modern Gantt widget (Bryntum-based) |
| Presentation Graphic (`cf.cplace.pptexport`) | Schedule export to PowerPoint |
| Project Planning Calendar (`cf.cplace.projektplanungCalendar`) | Non-working days configuration |

## Investigation Metadata

- **Investigation Date**: 2026-02-02
- **Workspace Used**: `[App Investigation] cf.cplace.projektplanung.projektplanungExtended`
- **Workspace ID**: `fsy78ggmnkcbyp1om5ofe6xkb`
