A "Material" represents a type of service or good that your company sells to a customer.
Typical examples for materials in ]po[ are:
- Java Senior Development (Hour)
- Support Contract (Month)
- Enterprise License (Unit)
Materials in ]po[ serve as a bridge between the "operational world" and the "financial world" on the level of individual tasks and invoice lines:
- A tasks is of a specific material.
- A price list translates the material units into a price.
- The material and the price appear in every line(!) of a financial document.
The only other "bridge" between finance and operations is on the level of main (top-level) projects, which contain both tasks and financial documents, but not on such a fine-grain level as the material.
Use of Materials and Configuration
- You define a reasonable list of materials in Admin -> Materials according to the different types of services that you bill to your customer.
- You specify the material when ever you create a new project. You make sure that every tasks has a correct material specified.
- You define a price list per customer.
- => Now you can use the "New Customer Invoice from Time Sheet Tasks" wizard in order to create customer invoices.
- As an alternative, you can set the Admin -> Parameter -> "ShowInvoiceItemMaterialFieldP" to "1", allowing to specify materials manually in financial documents.
- Now every invoice line in your system should be associated with a material.
- => You can now extract reports on the level of invoice lines per material.
- IT & Software Development: You want to determine how the cost of testing changes if you use a different development methodology?
- Translation: You want to track different source/target language combinations across time and customer.
Just try to keep your list of materials as short as possible. Limit your materials to materials who are really sold at different prices to your customers.
Materials serve as a kind of classification of work units. However, this is not the only option, and there may be more appropriate options for your use case. Working on the level of materials requires a lot of data-entry work and consistency. There may be easier ways than using materials:
- Departments and Cost Centers:
Tasks are also associated with departments/cost centers. Try to avoid creating the same material for different departments.
- Main Project Type:
You could report financial data based on the "type" of the main (top-level) projects. The main projects serves as a container for both operational units (tasks) and financial units (invoices etc.), so you can use the type of the main project as a classifier for both of them.
Example: An IT company may define "Software Development Project", "Rollout Projects", "Update Projects" and "Service Contracts" as types for main projects, allowing them to classify revenues and Profit & Loss.
- Main Project Custom Field or Customer Custom Field:
You could define a custom dynamic field per main project or per customer for the classification of tasks and financial data similar to the Main Project Type above.
Example: You could define a "Business Sectors" dyn field per main projects.
Please contact us for a quick consulting session if you are unsure which of these concepts to use.
It's OK to delete materials during the configuration phase of ]project-open[ (NOT in production use!).
Just go to Admin -> Materials and just try to delete an obsolete material. You may receive an "ugly" error message from the database. In this case please examine the error message, it is very likely that there are still tasks or other objects that reference the material.
- Material ID (material_id:integer references acs_objects):
A unique Material ID. Material is a subtype of Object, so the im_materials.material_id is identical to the acs_objects.object_id.
- Material Name (material_name:text):
A human readable name for the material. Example: "Senior Manager Consulting Hour", "Monthly Service Contract", ...
- Material Nr (material_nr:text):
A short name for each material.
- Material Type (material_type_id:integer references im_categories):
The type of material. Examples include "License", "Consulting Hour" and "Default".
- Material Status (material_status_id:integer references im_categories):
Only "Active" and "Deleted" are used at the moment.
- Material UoM (material_uom_id:integer references im_categories):
The "Unit of Measure" of the materials. You need to set "Hour" for materials of [timesheet tasks], so that logging hours against timesheet tasks is consistent.
- Description (description:text):
Description of the material.
- Billable? (material_billable_p:char(1)):
Is the material billable? This field is used by the [Timesheet Inovoicing Wizard] to exclude non-billable materials from invoices by default.
Structure of the im_materials database table:
material_id | integer | not null
material_name | character varying(2000) |
material_nr | character varying(200) |
material_type_id | integer | not null
material_status_id | integer |
description | character varying(4000) |
material_uom_id | integer |
material_billable_p | character(1) | default 't'::bpchar