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:
- Import projects — Organisations, work packages, tasks, milestones, deliverables, and Estimated (EST) capacity from project ODS files.
- 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:
- Open the project — Go to Projects and open the project.
- Verify settings — Check name, duration, dates, Project Owner Organisation. Set Home organisation role group and Role type group in Project schemes if needed.
- Verify data — Check Work packages (WPs), Work breakdown structure (WBS), Tasks, Milestones, Deliverables, and Capacity demand (Estimated (EST)).
- Run data quality check — Project → Settings → Data quality check. Fix any issues; see Fix data quality errors.
- 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
- Import project from ODS — Single project import, sheet layout, validation
- Import people from ODS — Persons, employee groups, leave types, project assignments
- Import per-org ODS — Build and import per-org ODS files
- Seed projects and calendars — Container deployment workflow
- Initial data entry after deployment — First steps after deployment