Forum OpenACS Development: Re: dotWRK: Project Manager

Collapse
Posted by Jade Rubick on
Caroline makes some very good points. Thanks for your data model, Caroline.

Here are some thoughts in response to your posting:

-- First of all, every company is going to have a list of information they will need to associate with a project. For example, our company associates recipes with each project. Some companies may associate products with projects. I think this need is going to be pretty universal.

Also, there will be other information, such as PO numbers, or customer codes, or Sales regions, etc...

This is an absolutely critical element of dotProject, I think. We have to find a flexible solution to this. For us, this is one of the main reasons we're building it ourselves instead of using something off the shelf (there are other reasons too, however).

Here are a couple of brainstorms to this idea:

- we set up a table of attributes, as you describe. Allow people to set up attributes for different types of tables, and then allow them to actually set up the values. This is pretty flexible. The attributes act as additional columns they can add information into.

- this is not mutually exclusive, but we could also have some sort of service contract for queries that are run when you look at a project page. For example, at our company, we want to see all the products associated with that project.

A way this could work is we could have a set of project_types:

create table project_type (
-- info on project type
);

Each project has one (or more?) project_types. Let's say one or more for the sake of flexibility. We can categorize projects into many types then.

We also create a table that tracks the service contracts:

create table project_type_service_contracts (
  project_type_id  integer constraint dfsafdsaf
                            references project_type(project_type_id),
  tcl_procedure_name  varchar(200),
  tcl_sortby                  varchar(100)
);

Then each project_type could have a set of associated code that would be run for it. Potentially several pieces of code.

For example, let's say we have two project types:

* Customer projects
* Research and development projects

For all customer projects, we want to display a list of relevant products.

Let's say we have a table, called customer_products. It has a column called project_id that references the relevant Project.

We set up a Tcl function called customer_product_list_by_project(project_id). It returns a list of products for that project, in an HTML table.

We insert a row into project_type_service_contract, and then whenever we look at the project page, you see the relevant entries.

Does this make sense? Does it seem useful to other people? The nice thing about it is that it's only used if necessary.

Of course, this does mean that someone who can insert rows into your table can root your computer. But I think that's probably true anyway. ?

I'll finish reading your posting, Caroline. This is just one thought I had had that I hadn't posted about much.