Content
View differences
Updated by Andrej Sandorf 4 days ago
### Goal
Let users create work packages in bulk from a spreadsheet.
### Requirements
* Accept `.csv` with UTF-8 encoding
* Column contract
* Downloadable template for creating new CSV files
* Column reference in docs/user-guide/
* Date fields: ISO
* Canonical English headers, but the users current language is also accepted
* Column matching is done be the column name, not by position
* Text/date only: subject, description, estimated hours, percent complete, dates
* Must exist
* Type, Status, Priority, Category by name
* Assignee by email address
* Backdate journals if created\_at and/or updated\_at are part of the data
* Error handling
* Validate the header row once, up front, and report unknown or ambiguous columns before any row is processed.
* Report the line number of each error encountered
* An error rolls back all changes
* Row or file-size limit
* Permission
* A dedicated `import_work_packages` permission, modelled on `export_work_packages`
* Not admin-only
* Setting.attachment\_whitelist must be ignored for the csv import
* File size limits must be respected
* UI
* On the project level
* Upload page with a downloadable sample file
* Dry-run toggle
* Runs as a background job
* Notifications (e.g. assignee) to imported work packages are suppressed
* Tag journals with `Journal::CausedByImport` "Imported by CSV"
* Feature flag
### Out of scope
* Different csv file encoding
* User specified column mapping
* Attachments
* API endpoint
* Historic import (multiple rows for different states of the same work package)
* XLS/XLSX
* create fields/types/status on-the-fly - need admin rights
* Parent / hierarchy by row number, external ID
* Relations by row number, external ID
* Custom fields by name
* Version by name
* Reports progress
* Is abortable
## Open questions
* Fixed English headers? (preferable)
<br>
Let users create work packages in bulk from a spreadsheet.
### Requirements
* Accept `.csv` with UTF-8 encoding
* Column contract
* Downloadable template for creating new CSV files
* Column reference in docs/user-guide/
* Date fields: ISO
* Canonical English headers, but the users current language is also accepted
* Column matching is done be the column name, not by position
* Text/date only: subject, description, estimated hours, percent complete, dates
* Must exist
* Type, Status, Priority, Category by name
* Assignee by email address
* Backdate journals if created\_at and/or updated\_at are part of the data
* Error handling
* Validate the header row once, up front, and report unknown or ambiguous columns before any row is processed.
* Report the line number of each error encountered
* An error rolls back all changes
* Row or file-size limit
* Permission
* A dedicated `import_work_packages` permission, modelled on `export_work_packages`
* Not admin-only
* Setting.attachment\_whitelist must be ignored for the csv import
* File size limits must be respected
* UI
* On the project level
* Upload page with a downloadable sample file
* Dry-run toggle
* Runs as a background job
* Notifications (e.g. assignee) to imported work packages are suppressed
* Tag journals with `Journal::CausedByImport` "Imported by CSV"
* Feature flag
### Out of scope
* Different csv file encoding
* User specified column mapping
* Attachments
* API endpoint
* Historic import (multiple rows for different states of the same work package)
* XLS/XLSX
* create fields/types/status on-the-fly - need admin rights
* Parent / hierarchy by row number, external ID
* Relations by row number, external ID
* Custom fields by name
* Version by name
* Reports progress
* Is abortable
## Open questions
* Fixed English headers? (preferable)
<br>