Import multiple projects with project staff

Import a portfolio of projects and assign staff (persons) in Rediflow. For directors, managers, and data administrators loading existing project and people data from spreadsheets.

Overview

Two steps:

  1. Import projects — Organisations, work packages, tasks, milestones, deliverables, and Estimated (EST) capacity from project ODS files.
  2. Import people and assignments — Employee groups, persons, and project assignments from a people ODS file.

Projects must exist before you assign people. Both imports are idempotent — safe to run multiple times; re-running updates existing records.

Prerequisites

  • Database running (PostgreSQL 18+); migrations applied. See Deployment overview, Deploy QA and production, or Run with Podman or Docker.
  • ODS files — LibreOffice Calc (.ods) format. Use the templates from the project or adapt your data to match the sheet layout.
  • Allocation group "fixed" — Required for project assignments. Create it under Settings → Allocation groups if missing.

Step 1: Import projects

Choose the approach that matches your data:

Option A: One project per ODS file

If you have one ODS file per project:

uv run python scripts/seed_from_ods.py --ods path/to/project1.ods --project-name "Project Alpha"
uv run python scripts/seed_from_ods.py --ods path/to/project2.ods --project-name "Project Beta"
# Repeat for each project

Use --project-name to give each project a unique name. See Import project from ODS for the full sheet layout and validation.

Option B: Multiple variants from one template

If you have one ODS template and want many projects with the same structure but different names and dates:

uv run python scripts/seed_example_variants.py --seed 42 --count 30

Creates 30 projects with unique names and randomised dates. See Import project from ODS.

Option C: Per-org ODS files (one project per organisation)

If you have Work breakdown structure (WBS) data per organisation and want one project per organisation:

uv run python scripts/build_ods_per_org.py
uv run python scripts/seed_all_ods_per_org.py

Creates one project per organisation (e.g. "Example project (ACR)", "Example project (BRN)"). See Import per-org ODS.

Container deployment

When using the container image (QA or production), mount the ODS file and run inside the container:

podman compose -f compose.deploy-qa.yml run --rm \
  -v /path/to/project.ods:/app/project.ods:ro \
  app-qa python scripts/seed_from_ods.py --ods /app/project.ods --project-name "Project Alpha"

See Seed projects and calendars for the full container workflow.

Step 2: Import people and project assignments

After projects exist, import persons and their assignments:

uv run python scripts/seed_people_from_ods.py --ods path/to/people.ods

Container deployment: When using the container image (QA or production), mount the ODS file and run inside the container:

podman compose -f compose.deploy-qa.yml run --rm \
  -v /path/to/people.ods:/app/people.ods:ro \
  app-qa python scripts/seed_people_from_ods.py --ods /app/people.ods

Replace compose.deploy-qa.yml / app-qa with compose.deploy-prod.yml / app-prod for production. See Import people from ODS for the full sheet layout.

The people ODS must have sheets:

  • Employee groups — Work-time definitions (e.g. 7.25 h/day)
  • Leave types — Annual leave, unpaid leave, etc.
  • Persons — Name, code, organisation, employee group, employment start
  • Project assignments — Person, project name, role, allocation %, start/end dates

Project assignments link persons to projects. The project_name column must match an existing project. See Import people from ODS for the full sheet layout.

Dry run

To preview what would be imported without writing to the database:

uv run python scripts/seed_people_from_ods.py --ods path/to/people.ods --dry-run

After import

For each imported project:

  1. Open the project — Go to Projects and open the project.
  2. Verify settings — Check name, duration, dates, Project Owner Organisation. Set Home organisation role group and Role type group in Project schemes if needed.
  3. Verify data — Check Work packages (WPs), Work breakdown structure (WBS), Tasks, Milestones, Deliverables, and Capacity demand (Estimated (EST)).
  4. Run data quality check — Project → Settings → Data quality check. Fix any issues; see Fix data quality errors.
  5. Person capacity (if enabled) — Configure in the app:
    • Set Role type group on the project (Project → Settings → Project schemes).
    • Edit Role demand in the Capacity demand view (planned Full-time equivalent (FTE) % per role per month).
    • Create capacity requests if you use cross-organisation capacity; see Cross-org capacity requests.

Use the project list filters (organisation, lifecycle state, search) and pagination (per_page=100 in the URL) to navigate large portfolios.

Summary

Step Script Purpose
1 seed_from_ods.py or seed_all_ods_per_org.py Import projects (organisations, Work packages (WPs), tasks, milestones, deliverables)
2 seed_people_from_ods.py Import persons, employee groups, leave types, and project assignments

Order matters: Projects first, then people. The people import requires projects and organisations to already exist.

See also