# Building Blocks (cf.cplace.buildingBlockSchedule)

## Overview

The Building Blocks app extends the Project Planning apps by introducing the concept of reusable schedule templates called "Building Blocks." It allows users to mark schedules as building blocks, which can then be inserted into other schedules as pre-configured templates.

**Key Capabilities:**
- Mark any Schedule as a Building Block via a checkbox attribute
- Insert Building Block content into other schedules
- Reuse common project patterns across multiple schedules
- Standardize project structures with predefined task and milestone templates

## Dependencies

| App | Qualified Name | Auto-Installed |
|-----|----------------|----------------|
| cplace Basis | `cf.cplace.platform` | Yes (platform base) |
| Project Planning (Basic) | `cf.cplace.projektplanung.projektplanungBasic` | Yes |
| Project Planning (Extended) | `cf.cplace.projektplanung.projektplanungExtended` | Yes |

**Note:** Installing Building Blocks automatically installs both Project Planning (Basic) and (Extended) apps, giving you full Gantt chart functionality including subscriptions and delegations.

## Types Provided

The Building Blocks app does not introduce new types. Instead, it **extends** the existing `cf.schedule` type (from Project Planning Basic) with a single attribute that enables the Building Block functionality.

### Type Extensions

#### cf.schedule (Schedule)
**Extended Attribute:**

| Attribute | Internal Name | Type | Required | Description |
|-----------|---------------|------|----------|-------------|
| Building Block | `cf.cplace.isBuildingBlock` | Boolean | Yes (default: false) | Activate this checkbox to define the schedule as a building block, so its content can be inserted into other schedules |

## Types Available After Installation

When Building Blocks is installed, the following types become available (provided by dependencies):

### cf.schedule (Schedule)

The top-level container for project planning elements. Schedules contain tasks and milestones and define overall project timeline boundaries.

| Attribute | Internal Name | Type | Description |
|-----------|---------------|------|-------------|
| Start | `startDate` | Date | Schedule start date (morning of the specified day) |
| Finish | `endDate` | Date | Schedule finish date (evening of the specified day) |
| Duration | `duration` | Number | Calculated duration |
| Duration Unit | `durationUnit` | Enumeration | Unit for duration (days, weeks, etc.) |
| % Completed | `percentComplete` | Number | Completion percentage (0-100) |
| RAG Rating | `ratingLight` | Enumeration | Traffic light status indicator |
| Note | `note` | Rich String | Additional notes |
| Target Start | `baselineStartDate` | Date | Baseline start date for tracking |
| Target Finish | `baselineEndDate` | Date | Baseline finish date for tracking |
| Task Class | `activityClass` | Reference | Visual styling category |
| Parent Project | `parentProject` | Reference | Hierarchical project structure |
| Building Block | `cf.cplace.isBuildingBlock` | Boolean | **Building Blocks extension** |
| Backwards scheduling | `scheduleBackwards` | Boolean | Forward vs. backward scheduling mode |
| Allow Subscribing | `allowSubscription` | Boolean | Enable task subscription feature |
| Allow Delegating | `allowDelegation` | Boolean | Enable task delegation feature |

### cf.activity (Task)

Work items with duration within a schedule. Tasks can be nested to create hierarchies (summary tasks).

| Attribute | Internal Name | Type | Description |
|-----------|---------------|------|-------------|
| Parent object | `parent` | Reference | Parent schedule or summary task |
| Schedule | `containingSchedule` | Reference | Containing schedule (computed) |
| Start | `startDate` | Date | Task start date |
| Finish | `endDate` | Date | Task finish date |
| Duration | `duration` | Number | Task duration |
| % Completed | `percentComplete` | Number | Completion percentage |
| RAG Rating | `ratingLight` | Enumeration | Traffic light status |
| Automatically scheduled | `automaticScheduling` | Boolean | Auto-reschedule on predecessor changes |
| Note | `note` | Rich String | Additional notes |
| Target Start | `baselineStartDate` | Date | Baseline start date |
| Target Finish | `baselineEndDate` | Date | Baseline finish date |
| Task Class | `activityClass` | Reference | Visual styling category |
| Delegated from | `delegationSource` | Reference | Source of delegated task |
| Rollup | `rollup` | Boolean | Display in parent row |
| Must Start | `mustStartOnDate` | Boolean | Fixed start constraint |
| Must End | `mustFinishOnDate` | Boolean | Fixed end constraint |
| Startline | `startlineDate` | Date | "No earlier than" constraint |
| Deadline | `deadlineDate` | Date | "No later than" constraint |

### cf.milestone (Milestone)

Zero-duration events marking key project dates.

| Attribute | Internal Name | Type | Description |
|-----------|---------------|------|-------------|
| Parent object | `parent` | Reference | Parent schedule or task |
| Schedule | `containingSchedule` | Reference | Containing schedule (computed) |
| Date | `date` | Date | Milestone date (evening of specified day) |
| % Completed | `percentComplete` | Number | Completion percentage (0 or 100) |
| RAG Rating | `ratingLight` | Enumeration | Traffic light status |
| Automatically scheduled | `automaticScheduling` | Boolean | Auto-reschedule on predecessor changes |
| Note | `note` | Rich String | Additional notes |
| Target Start | `baselineStartDate` | Date | Baseline date |
| Task Class | `activityClass` | Reference | Visual styling category |
| Delegated from | `delegationSource` | Reference | Source of delegated milestone |
| Rollup | `rollup` | Boolean | Display in parent row |
| Must Start | `mustStartOnDate` | Boolean | Fixed start constraint |
| Must End | `mustFinishOnDate` | Boolean | Fixed end constraint |

## Widgets Available After Installation

The following widgets become available from the Project Planning dependencies:

| Widget | Widget Kind | Required App | Description |
|--------|-------------|--------------|-------------|
| Gantt chart | `cf.projektplanung.singleGantt` | Basic | Single schedule Gantt visualization |
| Multi Gantt Chart | `cf.projektplanung.multiGantt` | Basic | Multiple schedules in one view |
| Open Gantt Chart | `cf.projektplanung.singleGanttLink` | Basic | Button to open Gantt in new tab |
| Structured Table for Schedules | `cf.projektplanung.scheduleTreeTable` | Basic | Tree-table view of tasks/milestones |
| Schedule Edit State | `cf.cplace.projektplanung.scheduleLockState` | Basic | Shows who is editing the schedule |
| Subscriptions | `cf.cplace.projektplanung.subscriptions` | Extended | Cross-schedule subscription table |

**Note:** The Building Blocks app itself does not provide any widgets. The Building Block insertion functionality is integrated into the existing Gantt chart widgets.

## Use Cases

### Creating Reusable Project Templates
Define common project patterns (e.g., "Software Release Process", "Marketing Campaign", "Product Launch") as Building Block schedules. Project managers can then insert these templates into their schedules to quickly set up standardized structures.

### Standardizing Project Phases
Create Building Blocks for specific project phases (Planning, Development, Testing, Deployment). Teams can compose their schedules from these standardized phase templates.

### Organizational Best Practices
Encode organizational best practices as Building Blocks. Ensures compliance with standard processes across all projects.

### Onboarding Templates
Create Building Blocks for common onboarding activities (Employee Onboarding, Customer Onboarding, Vendor Onboarding) that can be quickly inserted and adapted.

## Design Patterns

### Building Block Structure
1. Create a Schedule with the complete task/milestone structure you want to reuse
2. Check the "Building Block" checkbox (`cf.cplace.isBuildingBlock = true`)
3. The schedule now appears as an option when inserting Building Blocks into other schedules

### Composition Pattern
- **Atomic Building Blocks**: Small, focused templates (3-10 tasks) for specific activities
- **Composite Building Blocks**: Larger templates composed of multiple activity groups
- **Skeleton Building Blocks**: High-level structure with placeholders for team customization

### Best Practices
- Keep Building Block names descriptive and consistent
- Document assumptions in the Schedule's note field
- Set reasonable default durations (can be adjusted after insertion)
- Use Task Classes for visual consistency

## When to Use Building Blocks

| Scenario | Recommendation |
|----------|---------------|
| Frequently repeated project patterns | **Use Building Blocks** |
| One-off unique project structures | Standard schedule creation |
| Organization-wide standardization | Building Blocks + governance |
| Ad-hoc task creation | Direct Gantt editing |

## Related Apps

| App | Qualified Name | Relationship |
|-----|----------------|--------------|
| Task Classes | `cf.cplace.projektplanungMasterData` | Visual styling for tasks/milestones |
| Project Structure | `cf.cplace.projectTree` | Hierarchical project organization |
| New Gantt | `cf.cplace.projectPlanning.app.gantt2.gantt2` | Modern Gantt widget (Bryntum-based) |
| Presentation Graphic | `cf.cplace.pptexport` | PowerPoint export of schedules |

## Investigation Metadata

| Property | Value |
|----------|-------|
| Investigation Date | 2026-02-02 |
| Investigation Workspace | `h07n4sg4y6jfy8r1nsu1jgxqb` |
| Apps After Install | 4 (platform + Basic + Extended + Building Blocks) |
| New Types | 3 (Schedule, Task, Milestone - from dependencies) |
| Type Extensions | 1 (cf.cplace.isBuildingBlock on Schedule) |
| New Widgets | 6 (from Project Planning dependencies) |
