Skip to content

[IP-268]: bill project tasks#578

Draft
nielsdrost7 wants to merge 1 commit into
InvoicePlane:developfrom
underdogg-forks:feature/268-bill-project-tasks
Draft

[IP-268]: bill project tasks#578
nielsdrost7 wants to merge 1 commit into
InvoicePlane:developfrom
underdogg-forks:feature/268-bill-project-tasks

Conversation

@nielsdrost7

@nielsdrost7 nielsdrost7 commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

What

  • ProjectBillingService::billTasks(Project, array $taskIds): Invoice — creates one invoice item per selected task (item name = task name, quantity 1, price = task_price, task's tax rate, task_id link). Appends to the client's existing draft invoice when one exists, otherwise creates a new draft with a null invoice number (numbering is assigned when the invoice leaves draft — consistent with the duplicate-prevention observer on PR [IP-513]: duplicate-number prevention via Observers #540, which allows multiple nulls for drafts).
  • Only completed tasks that are not already on an invoice (invoice_items.task_id) qualify — double billing is impossible.
  • Bill Tasks row action on the projects list (gated by create-invoices) opens a checkbox list of billable tasks; guard failures surface as a notification.
  • Invoice totals are refreshed from the item subtotals after billing.

Deviation from the SMART plan: no redirect to EditInvoice after billing — that page didn't exist on develop when this PR was written. It does now (and is further extended by PR #575), so the redirect is a ready-to-do follow-up (#587).

Closes

Closes #268 — Convert project tasks to invoice items for billing

Follow-up issues (not resolved here — reopen if auto-closed on merge)

Closes #587 — No redirect to the invoice edit page after billing project tasks (action only shows a success toast; now unblocked since EditInvoice exists on develop)

Tests

ProjectBillingTest — 5 tests: new draft creation, append-to-existing-draft, double-billing rejection, non-completed rejection, and modal option filtering.

@InvoicePlane InvoicePlane deleted a comment from coderabbitai Bot Jul 4, 2026
@nielsdrost7 nielsdrost7 self-assigned this Jul 4, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@nielsdrost7 nielsdrost7 force-pushed the feature/268-bill-project-tasks branch from 98e15f8 to 3bfd531 Compare July 4, 2026 12:23
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d3ca87b0-01f0-40ad-ac31-c18dd2715815

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Projects]: Redirect to the invoice edit page after billing project tasks [Projects]: Convert project tasks to invoice items for billing

1 participant