> > Topic


Jan 9, 2007 / pixtur
Dec 24, 2008 / pixtur

Attached files

No files uploaded
Describes possible implementation of invoicing

New table invoice:

field comment
status new, open, paid, booked, dropped, etc.
short e.g. invoice number
booked_asshort name for id, quartal etc.


  • There is no client field because this can be retrieved from the project's client.
  • Each effort can be linked to one invoice.
  • The sum of Efforts is not related to amount_clear but could be used for initialization.
  • Like with Tasks Files can attached to invoices (e.g. PDF-Versions of the invoices).
  • It more flexible to store the tax rate because we can use this for efforts as well.
  • The initial tax rate should be a conf-setting


  • Should the currency be a installation wide setting?

Additional Discussionπ

invoice itemsπ

phpCollab also features a Table called invoice_items:
  • invoice
  • position
  • mod_type
  • mod_value
  • title
  • description
  • amout_ex_tax
  • active
  • completed
  • pixtur thinks that it would be more flexible to extend the effort table with some additional fields like:
    • invoice
    • order_id
    • amount_clear (optional)
    • category
      • billable_time
      • nonbillable_time
      • expense (reimbursable)
      • expense (non reimbursable)
      • finished products
  • Expense categories (e.g. Travelling, Hotel etc.) could be done with Task folders.

Also seeπ

  • budget (Comment with Feature requests)
  • (very early thoughts)
  • (more discussion on this topic)

Additional notesπ

  • effort -> expenditures or expenses
  • categories:
    • work hours,
    • expenditures
      • Employee meals (Breakfast, Lunch, Diner)
      • Travel (Hotel, Rental Car, Taxi, Parking, Tips, Miles driven)
      • Airline
      • Entertainment
      • Leased Vehicles (Major repair, Gas)
      • Phone
      • Postage
      • Office supplies
      • Dues & Subscription
      • Seminars
      • Other Reimb items
    • Product per item


binder:some thoughts

12 years ago (3. update 12 years ago)

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, ...

pixtur:about your comments...

12 years ago

Actually I don't see that Streber will ever "create" any invoice. I just want to store and manage invoice information. We cannot and should not try to do a job, Excel can do better. I want the handle meta-information and probably attach a PDF document created with a decent text program.

The workflow would be like this:
  1. Book Efforts (Time and Expenses) for a project.
  2. In projViewEfforts select 'billable' Efforts and use Create New Invoice function to link those Efforts with an invoice. An Effort could be linked to One Invoice only.
  3. The new invoice is displayed listing the efforts and summing them up. I could export these efforts as CSV-list and finetune the list with StarOffice, create an PDF.
  4. I would attach the PDF to the invoice for reference only.
  5. I would fill out dates for sent and due and the invoice number.
  6. When the client as paid the invoice I set its status to Paid.
  7. When I sent the invoice to my tax consultant I set the status to booked.

I also do not see any relation ship between Invoice and Task. Only between Invoice and Effort.

I don't want to clutter the interface with information which is irrelevant for most users. So I see only two links for invoices:
  • In home a link to all invoices probably highlighting the open ones.
  • In project View a link in the Details block
Although most of you features would be nice, they might be overdone for Streber. How was the principle? Keep it Simple and Stupid. Most of those features could be done with duplicating Efforts. But I confirm on adding Efforts of another project to an Invoice would be nice.

binder:sorry, misunderstanding! ;)

12 years ago (2. update 12 years ago)

Sorry, there was a misunderstanding; I missed saying, that after step 9 you have to built a invoice yourself, using the invoice tool of you choice (Excel, Access, ....)
But all invoice-data (including meta-data such as adressing, ...) is stored in streber-database. There are so many different needs on invoicing concerning fiscual needs alone in Germany... streber could never meet all requirements!

What I want to achieve is to store the invoice in streber-readable format. So I can search for a specific position in streber-invoice-table and just list the invoices positions to do a quick phonecall with my client... Adding the "real" invoice as a file is optional.
With that I have:
  • cumulating invoicenumbers in streber
  • all information where I need it (in streber)
  • export easily to my invoice-software as needed
  • view/search invoice-information in streber without having to search for excelfiles or in my access-database

Position of invoicesπ

back to topic:
I think, changing invoice position in the invoice-view boosts of the creation of invoices in my external software and leaves streber-readable content (see above).
But I think building invoices on tasks is more intuitive? Because often we have like 10 or more efforts concerning one task.?

pixtur:I though a bit...

12 years ago

I somehow don't see the difference between Invoice Position and Effort. Why couldn't we use effort for both?

A convenient selection of Efforts is a must have. The workflow would work like this:
  1. Above the Effort list is an option to adjust filter settings. This default settings would be current project and no invoice. You could add any number of tasks or other options to filter the list.
  2. Use Select all or Shift select in Lists to mark all Efforts
  3. Create new Invoice with selected Efforts.
What if an Effort already have an Invoice? Copy/Remove from last invoice? Option?

binder:invoice position vs effort

12 years ago

usually an effort is not 1:1 taken over in invoice positions. We add some text or we merge efforts to one position, ...

What I want to achieve, is to store Invoice-data in streber, therefore I could also add an invoice without any efforts (Perhaps an installment/Abschlagszahlung, ...). Then I could import the relevant data into Excel/Access/... to do the math and print the invoice with the relevant meta-data available for my country.

With that in mind, I can have more than one invoice for an effort. => the user has to decide! But streber could say, that there has already been an invoice for that effort?

pixtur:Some late reply

12 years ago

Yes you are right, in that they could be invoices without any efforts attached. That really makes efforts different from invoice positions.
But I don't like the idea of heaving a new table for invoice positions. I already know this will be cumbersome to edit (or it would be some huge amount of ajax coding).

Why not settle at a compromise: We store in the efforts, if it has been used for an invoice (so billable efforts are not forgotten). But the invoicde positions could actually be written as Wiki text, couldn't they?

binder:Antwort auf Some late reply

12 years ago

yes, this would be nice! We can live with that! *G*

damian2:monetary efforts

12 years ago

please, take into consideration the monetary efforts along with the time efforts.

pixtur:Antwort auf monetary efforts

12 years ago

Could define monetary effort and you would store it?

damian2:Responder a Antwort auf monetary efforts

12 years ago

monetary effort, as far i understand, is the appointment of a monetary quantity (a field of type decimal with 2 places), in the efforts form.

a field of same type in the task form, will serve as budget.

in lists, the totals for the field in tasks could be the budget , and the totals for that field in efforts become the realized.


pixtur:may like...

12 years ago

Would this be identical to adding the field.


("amount" for money, and "clear" for not including taxes)? Maybe "monetary" would even be a better name for this field. My English is not good enough for such discissions...


12 years ago - visible as suggested -

yes, would be as is, but i think that the effort only need a realized amount (amount_clear), because the amount in tasks will be the budget. althought is better differenciate budget and amount.

therefore, do you think that could be: effort.amount_clear and task.budget_clear????

there isn't the need for multiple currency, this is a something that could be implemented in a future, but i think that will be some more complex (multiple currencies rates, triangulations, etc..) althought i insist, i see no need.



12 years ago

yes, would be as is, but i think that the effort only need a realized amount (amount_clear), because the amount in tasks will be the budget. althought is better differenciate budget and amount.

therefore, do you think that could be: effort.amount_clear and task.budget_clear????

there isn't the need for multiple currency, this is a something that could be implemented in a future, but i think that will be some more complex (multiple currencies rates, triangulations, etc..) althought i insist, i see no need.



12 years ago -


I think the currency should not be per-installation, not even per-client, but per-project.

I am an outsourcer and it happens a lot that I work in multiple currencies, depending on the country of the client...

Expanding efforts (or tasks!) with billing fields is an attractive option as long as we still have the option to generate other invoices besides this. A rate per hour would be good for automatic calculation.

pixtur:Antwort auf Currency

12 years ago

Thanks for the feedback. I still cannot foresee, if project specific currency has any side effects. The problems will start if you transfer tasks between projects etc.

I am pretty sure, that there will be the option to have invoices without any tasks.

rayz:Transferring items with any currencies

10 years ago

The problems will start if you transfer tasks between projects etc.

A lot of frameworks using currencies working with abstract money-unit wich taken as basic. Other currencies transferring in between with some sort of multiplier.

For example: 1 MoneyUNIT =~ 1 EUR. 1 USD = 0.83*1 MoneyUNIT and so on.
But it too complex. Currencies changing their costs.