some thoughts

Description

generating invoices is very complex...
especially if you make invoices for just a few tasks of a project or even just a few efforts of a project...

But let me explain my thoughts for the first step into a invoice-workflow:
  1. click on "new invoice" in a project
  2. add tasks to the new invoice (could be done in projViewTask with checkboxes?)
  3. all task-names (perhaps also description?) fill out the rough sketch for the invoice (each task a new invoice-position)
  4. the cumulated logged hours of the related "efforts" for each tasks initialise the hours for that position
  5. text of the efforts could be included optionally (some clients insist on detailled invoices)
  6. the complete invoice is now initialised and can be changed for each position needed...
  7. the invoice-related meta-data (invoice number, ...) are generated and stored in database.
  8. from now on all changes to positions/invoice is made in the invoice-related tables, no link whatsoever back to tasks/efforts/...
  9. after playing around with the invoice and perhaps adding some more positions the invoice is sent out (status change). from now on, the invoice can't be edited anymore, only status (paid, reminded Unkwown item 1, reminded guest, ...) can be changed
some more thoughts:
  • tasks could be partially invoiced =>
    • task-invoice linking must be done with a linking table (n:n)
    • tasks need some invoice-status (billed, partially billed, ...)
  • should fully billed tasks be allowed to be added again to a new invoice?
  • where should invoices be displayed? new tab for project?
some modifications for the future:
  • invoices merging tasks from different projects
  • invoices can have different recipient than client assigned to project
  • extension of clients adress (P.O. Box, different adress for invoices than for "normal" mail, ...)
  • make part payments for a project based on predicted efforts
  • export invoices for accounting
  • broaden invoice-managment and add external costs (e.g. print shop, freelancer, ...) to an invoice directly
  • add support for periodic invoices like service contracts, ...