Index: openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/sql/postgresql/Attic/project-manager-drop.sql,v diff -u -N -r1.3 -r1.4 --- openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-drop.sql 30 Jul 2003 20:42:05 -0000 1.3 +++ openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-drop.sql 1 Aug 2003 20:51:04 -0000 1.4 @@ -6,6 +6,42 @@ -- @cvs-id $Id$ -- +-------- +-- TASKS +-------- + +-- task constraint types +drop table pm_task_constraint_types cascade; +drop table pm_task_constraints cascade; + + +create function inline_0 () +returns integer as ' +declare + v_item RECORD; + +begin + for v_item in select + item_id + from + cr_items + where + content_type = ''pm_task'' + LOOP + + PERFORM pm_task__delete_task_item(v_item); + end loop; + + return 0; +end; +' language 'plpgsql'; + +-- select inline_0(); +drop function inline_0(); + +select drop_package('pm_task'); + + --drop permissions delete from acs_permissions where object_id in (select project_id from pm_projects); @@ -50,7 +86,7 @@ drop function inline_0(); ----------- --- PACKAGES +-- PROJECTS ----------- -- delete content_type 'pm_project' @@ -83,42 +119,13 @@ --drop table drop table pm_projects cascade; -select content_type__drop_type('pm_project', 't', 'f'); --------- --- TASKS --------- - - -create function inline_0 () -returns integer as ' -declare - v_item RECORD; - -begin - for v_item in select - item_id - from - cr_items - where - content_type = ''pm_task'' - LOOP - - PERFORM pm_task__delete_task_item(v_item); - end loop; - - return 0; -end; -' language 'plpgsql'; - --- select inline_0(); -drop function inline_0(); - -select drop_package('pm_task'); - select content_type__drop_type('pm_task', 't', 'f'); drop table pm_tasks cascade; drop table pm_tasks_revisions cascade; +select content_type__drop_type('pm_project', 't', 'f'); + -- note that the Project Repository folder is not deleted + Index: openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-table-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/sql/postgresql/Attic/project-manager-table-create.sql,v diff -u -N -r1.3 -r1.4 --- openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-table-create.sql 30 Jul 2003 20:42:05 -0000 1.3 +++ openacs-4/contrib/packages/project-manager/sql/postgresql/project-manager-table-create.sql 1 Aug 2003 20:51:04 -0000 1.4 @@ -129,3 +129,36 @@ null, -- default value 'numeric' -- column_spec ); + + + +-- constraint types +-- such as: +-- cannot start until Task X finishes +-- cannot start until Task X begins +-- cannot finish until Task X finishes +-- cannot finish until Task X begins + +create table pm_task_constraint_types ( + task_constraint_type_id integer + constraint pm_task_const_type_id_pk + primary key, + short_name varchar(100), + description varchar(1000) +); + +create table pm_task_constraints ( + task_id integer + constraint pm_tasks_const_task_id_fk + references pm_tasks + on delete cascade + constraint pm_task_const_task_id_pk + primary key, + parent_task_id integer + constraint pm_tasks_const_parent_id_fk + references pm_tasks + on delete cascade, + task_type integer + constraint pm_tasks_const_type + references pm_task_constraint_types +); Index: openacs-4/contrib/packages/project-manager/www/one.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/www/Attic/one.adp,v diff -u -N -r1.4 -r1.5 --- openacs-4/contrib/packages/project-manager/www/one.adp 30 Jul 2003 23:36:08 -0000 1.4 +++ openacs-4/contrib/packages/project-manager/www/one.adp 1 Aug 2003 20:51:04 -0000 1.5 @@ -16,31 +16,53 @@ Start date End date +
+ + + -edit + + @tasks.title@ + @tasks.start_date@ + @tasks.end_date@ + + +
+ + - - -
Project Information Index: openacs-4/contrib/packages/project-manager/www/task-add-edit-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/www/Attic/task-add-edit-postgresql.xql,v diff -u -N -r1.3 -r1.4 --- openacs-4/contrib/packages/project-manager/www/task-add-edit-postgresql.xql 31 Jul 2003 20:11:41 -0000 1.3 +++ openacs-4/contrib/packages/project-manager/www/task-add-edit-postgresql.xql 1 Aug 2003 20:51:04 -0000 1.4 @@ -5,10 +5,10 @@ select pm_task__new_task_item ( null, :project_item_id, - :task_title, - :description, - to_timestamp(:start_date,'YYYY MM DD HH24 MI SS'), - to_timestamp(:end_date,'YYYY MM DD HH24 MI SS'), + '$task_title($i)', + '$description($i)', + to_timestamp(now(),'YYYY MM DD HH24 MI SS'), + to_timestamp(now(),'YYYY MM DD HH24 MI SS'), '0', now(), :user_id, Index: openacs-4/contrib/packages/project-manager/www/task-add-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/www/Attic/task-add-edit.adp,v diff -u -N -r1.2 -r1.3 --- openacs-4/contrib/packages/project-manager/www/task-add-edit.adp 30 Jul 2003 23:36:08 -0000 1.2 +++ openacs-4/contrib/packages/project-manager/www/task-add-edit.adp 1 Aug 2003 20:51:04 -0000 1.3 @@ -2,7 +2,45 @@ @context_bar@ @title@ +
- + + + + + + + + + + + + + + + + + + + + + + +
Task +Subject +Description +Start/End + + + + + + + +
@num.rownum@

+


+ +
+ Index: openacs-4/contrib/packages/project-manager/www/task-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/project-manager/www/Attic/task-add-edit.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/contrib/packages/project-manager/www/task-add-edit.tcl 31 Jul 2003 20:11:41 -0000 1.3 +++ openacs-4/contrib/packages/project-manager/www/task-add-edit.tcl 1 Aug 2003 20:51:04 -0000 1.4 @@ -8,35 +8,60 @@ @return context_bar Context bar. @return title Page title. + @return num num is used as a multirow datasource to iterate over the ad_form elements @param project_item_id Specifies which project this task is associated with @param project_id Specifies which project revision this task is associated with + @param number The number of Tasks to create @param task_revision_id Specifies the revision this task represents (each revision of a task has a separate id) @param task_id Specifies the item for the task (every revision of a task shares the same task_id) } { project_item_id:integer,optional project_id:integer,optional + {number:integer "1"} task_revision_id:integer,optional - task_id:integer,optional - {task_title ""} - {description ""} - {name ""} - {parent_id ""} - {start_date ""} - {end_date ""} - {percent_complete "0"} + task_id:multiple,integer,optional + task_title:array,optional + description:array,optional + name:array,optional + parent_id:array,optional + start_date:array,optional + end_date:array,optional + percent_complete:array,optional } -properties { context_bar:onevalue title:onevalue + num:multirow +} -validate { + number_is_in_range -requires {number:integer} { + # todo: make 100 a parameter + if {$number < 1 || $number > 100} { + ad_complain + } + } + percent_is_in_range -requires {percent_complete:integer} { + if {$percent_complete < 0 || $percent_complete > 100} { + ad_complain + } + } +} -errors { + number_is_in_range {Number must be between 1 and 100} + percent_is_in_range {Percent completed must be between 0 and 100} } # --------------------------------------------------------------- # +template::multirow create num number + +for {set i 1} {$i <= $number} {incr i} { + template::multirow append num $i +} + set user_id [ad_maybe_redirect_for_registration] # the unique identifier for this package @@ -55,6 +80,7 @@ permission::require_permission -party_id $user_id -object_id $package_id -privilege create } + ad_form -name add_edit -form { task_id:key @@ -66,64 +92,85 @@ {value $project_id} } - {task_title:text - {label "Title"} - {value $task_title} - {html {size 59}} + {number:text(hidden) + {value $number} } - {description:text(textarea) - {label "Description"} - {value $description} - {html {rows 10 cols 60}} - } +} -select_query { - {parent_id:text(hidden) - {value $parent_id} - } +} -on_submit { - {start_date:date {value {[util::date acquire clock [clock scan $start_date]]}} optional - {label "Start date"} - {format "MONTH DD YYYY"} - {help} - } - - {end_date:date {value {[util::date acquire clock [clock scan $end_date]]}} optional - {label "End date"} - {format "MONTH DD YYYY"} - {help} - } - -} -select_query_name task_query -on_submit { - set user_id [ad_conn user_id] set peeraddr [ad_conn peeraddr] } -new_data { + + for {set i 1} {$i <= $number} {incr i} { + # ns_log Notice "task_title($i) = $task_title($i)" + db_exec_plsql new_task_item { *SQL* } + } - db_exec_plsql new_task_item { *SQL* } - } -edit_data { db_exec_plsql new_task_revision { *SQL* } -} -after_submit { +} -select_query_name task_query -after_submit { ad_returnredirect "one?item_id=$project_item_id&project_id=$project_id" ad_script_abort } +for {set i 0} {$i <= $number} {incr i} { + + # reading this code, you may wonder why we put the .$i at the end. + # DaveB showed me this trick. It lets you make a multiple out of + # the items by stuffing them in an array. Long live DaveB. + + append add_edit_definition " + {task_title.$i:text + {label \"Subject \#$i\"} + {html {size 30}} + } + + {description.$i:text(textarea) + {label \"Description\"} + {html {rows 5 cols 40}} + } + + {parent_id.$i:text(hidden) + } + + {start_date.$i:date + {label \"Start date\"} + {format \"MONTH DD YYYY\"} + {help} + } + + {end_date.$i:date + {label \"End date\"} + {format \"MONTH DD YYYY\"} + {help} + } + + {percent_complete.$i:integer + {label \"Percent complete\"} + {html {size 3}} + } + " + +} + +ad_form -extend -name add_edit -form $add_edit_definition -select_query_name task_query + + # we are editing? if {[exists_and_not_null task_id]} { ad_form -extend -name add_edit -form { {percent_complete:integer {label "Percent complete"} - {value $percent_complete} {html {size 4}} - } - } -select_query_name task_query -on_submit { - + } -select_query_name task_query } }