Index: openacs-4/packages/project-manager/www/task-add-edit-one.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one.tcl,v diff -u -r1.16 -r1.17 --- openacs-4/packages/project-manager/www/task-add-edit-one.tcl 10 Aug 2005 18:33:34 -0000 1.16 +++ openacs-4/packages/project-manager/www/task-add-edit-one.tcl 11 Aug 2005 21:31:55 -0000 1.17 @@ -31,687 +31,18 @@ {assignee:array,multiple,optional} } - -# --------------------------------------------------------------- -# Set up -# --------------------------------------------------------------- -set user_id [ad_maybe_redirect_for_registration] -set package_id [ad_conn package_id] - -# use hour units or day units -set use_day_p [parameter::get -parameter "UseDayInsteadOfHour" -default "t"] -set hours_day [pm::util::hours_day] -set root_folder_id [content::folder::get_folder_from_package -package_id $package_id] - -# daily? -set daily_p [parameter::get -parameter "UseDayInsteadOfHour" -default "f"] - - -if {[string is true $use_day_p]} { - set work_units "[_ project-manager.days]" +# Checking if the variables exist to sent them in the include +if { [exists_and_not_null task_item_id] } { + set exist_task_p 1 } else { - set work_units "[_ project-manager.hrs]" + set exist_task_p 0 } -# --------------------------------------------------------------- -# terminology -# --------------------------------------------------------------- -set project_term [_ project-manager.Project] -set task_term [_ project-manager.Task] -set task_term_lower [_ project-manager.task] -set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] - -# ------------------------- -# Set up flags to use later -# ------------------------- - -if {[exists_and_not_null task_item_id] || ![ad_form_new_p -key task_id]} { - set edit_p t - db_1row task_data {} - set logger_project [lindex [application_data_link::get_linked -from_object_id $project_item_id -to_object_type logger_project] 0] - set logger_variable_id [logger::project::get_primary_variable -project_id $logger_project] - logger::variable::get -variable_id $logger_variable_id -array logger_variable - - set open_p [pm::project::open_p -project_item_id $project_item_id] - if {[string is false $open_p]} { - set project_options [list [list [pm::project::name -project_item_id $project_item_id] $project_item_id]] - } else { - set project_options [pm::project::get_list_of_open] - } - db_1row get_dynamic_form {} +if { [array exists assignee] } { + set exist_assignee_p 1 } else { - set edit_p f + set exist_assignee_p 0 } -if {[exists_and_not_null process_id]} { - set using_process_p t -} else { - set using_process_p f -} - -# -------------------------------------------------------------------- -# if we are editing tasks, each task has its own project. We also want -# to look up all the old information to store it for later. We use -# this for comparison, to see what has changed. -# -------------------------------------------------------------------- - -if {![string is true $edit_p] &&[empty_string_p $project_item_id]} { - - ad_return_error "[_ project-manager.Project_missing]" "[_ project-manager.lt_For_new_tasks_a_proje]" - ad_script_abort -} - -# --------------------------------------------------------------- -# permissions and title setup, etc -# --------------------------------------------------------------- - -if {[string is true $edit_p]} { - - set title "[_ project-manager.lt_Edit_a_task_term_lowe]" - set context [list [list $return_url "[_ project-manager.Go_back]"] "[_ project-manager.Edit_task_term]"] - -} else { - - set title "[_ project-manager.Add_task_term_lower]" - set context [list [list [export_vars -base one {project_item_id}] "[pm::project::name -project_item_id $project_item_id]"] "[_ project-manager.New_task_term]"] - - permission::require_permission -party_id $user_id -object_id $project_item_id -privilege create - -} - -# ------------------------------------------------------------- -# Start creating the multirow we'll use to create the interface -# ------------------------------------------------------------- - -set boolean_options [list [list "[_ project-manager.Yes]" t] [list "[_ project-manager.No]" f]] -set format_options [list [list "[_ project-manager.Enhanced_Text]" "text/enhanced"] [list "[_ project-manager.Plain_Text]" "text/plain"] [list "[_ project-manager.Fixed-width_Text]" "text/fixed-width"] [list "[_ project-manager.HTML]" "text/html"]] -set percent_options [list [list "[_ project-manager.Open]" 0] [list "[_ project-manager.Closed]" 100]] -set dependency_options [pm::task::options_list \ - -edit_p $edit_p \ - -project_item_id $project_item_id \ - -number 1 \ - -current_number 1] - -set send_email_p t - -ad_form -name task_add_edit -export {task_item_id} \ - -form { - task_id:key - - {edit_p:text(hidden)} - {dform:text(hidden)} - {using_process_p:text(hidden)} - {return_url:text(hidden),optional} - {process_task_id:text(hidden),optional} - - {send_email_p:text(select) - {label "[_ project-manager.lt_Send_email_to_assigne]"} - {options $boolean_options} - } - } - -if {[string is true $using_process_p]} { - ad_form -extend -name task_add_edit \ - -form { - {process_name:text,optional - {label "[_ project-manager.Process_name]"} - {html {size 25}} - } - } -} - -ad_form -extend -name task_add_edit \ - -form { - {task_title:text - {label "[_ project-manager.Task_name]"} - {html {size 40}} - } - - {description:text(textarea),optional - {label "[_ project-manager.Description_1]"} - {html { rows 14 cols 40 wrap soft}} - } - - {description_mime_type:text(select),optional - {label "[_ project-manager.Format]"} - {options $format_options} - } - } - -if {[string is true $edit_p]} { - if {![empty_string_p [category_tree::get_mapped_trees $root_folder_id]]} { - ad_form -extend -name task_add_edit -form { - {category_ids:integer(category),multiple {label "[_ project-manager.Categories]"} - {html {size 7}} {value {$task_id $root_folder_id}} - } - } - } -} else { - if {![empty_string_p [category_tree::get_mapped_trees $root_folder_id]]} { - ad_form -extend -name task_add_edit -form { - {category_ids:integer(category),multiple,optional {label "[_ project-manager.Categories]"} - {html {size 7}} {value {{} $root_folder_id}} - } - } - } -} - -dtype::form::add_elements -dform $dform -prefix pm -object_type pm_task -object_id [value_if_exists task_id] -form task_add_edit -exclude_static -cr_widget none - -if {[string is true $edit_p]} { - ad_form -extend -name task_add_edit \ - -form { - {comment:text(textarea),optional - {label "[_ project-manager.Description_1]"} - {html { rows 7 cols 40 wrap soft}} - {section "[_ project-manager.Comment]"} - } - - {comment_mime_type:text(select),optional - {label "[_ project-manager.Format]"} - {options $format_options} - {section "[_ project-manager.Comment]"} - } - } -} else { - ad_form -extend -name task_add_edit \ - -form { - {comment:text(hidden) - {value ""} - } - - {comment_mime_type:text(hidden) - {value "text/plain"} - } - } -} - -if {!$use_uncertain_completion_times_p} { - ad_form -extend -name task_add_edit \ - -form { - {estimated_hours_work:text - {label " "} - {html {size 5}} - {after_html $work_units} - {section "[_ project-manager.Work_required]"} - } - } -} elseif {[string is true $use_day_p]} { - ad_form -extend -name task_add_edit \ - -form { - {estimated_days_work_min:text - {label "[_ project-manager.Min]"} - {html {size 5}} - {after_html $work_units} - {section "[_ project-manager.Work_required]"} - } - - {estimated_days_work_max:text - {label "[_ project-manager.Max]"} - {html {size 5}} - {after_html $work_units} - {section "[_ project-manager.Work_required]"} - } - } -} else { - ad_form -extend -name task_add_edit \ - -form { - {estimated_hours_work_min:text - {label "[_ project-manager.Min]"} - {html {size 5}} - {after_html $work_units} - {section "[_ project-manager.Work_required]"} - } - - {estimated_hours_work_max:text - {label "[_ project-manager.Max]"} - {html {size 5}} - {after_html $work_units} - {section "[_ project-manager.Work_required]"} - } - } -} - -ad_form -extend -name task_add_edit \ - -form { - {task_end_date:text(text),optional - {label "[_ project-manager.Deadline]"} - {html {id sel1}} - {after_html { \[y-m-d \] - }} - } - } - -#------------------------ -# Check if the task will be handled on daily basis or will request hours and minutes -#------------------------ - -if { $daily_p } { - ad_form -extend -name task_add_edit \ - -form { - {task_end_time:text(hidden) - {value ""} - } - } -} else { - ad_form -extend -name task_add_edit \ - -form { - {task_end_time:date,optional - {label "[_ project-manager.Deadline_Time]"} - {value {[template::util::date::now]}} - {format {[lc_get formbuilder_time_format]}} - } - } -} - - -if {[string is true $edit_p]} { - ad_form -extend -name task_add_edit \ - -form { - {project_item_id:text(select),optional - {label $project_term} - {options $project_options} - } - } -} else { - ad_form -extend -name task_add_edit \ - -form { - {project_item_id:text(hidden)} - } -} - -ad_form -extend -name task_add_edit \ - -form { - {dependency:text(select),optional - {label "[_ project-manager.Dependency]"} - {options $dependency_options} - } - - {priority:text,optional - {label "[_ project-manager.Priority]"} - {html {size 4}} - {help_text "[_ project-manager.lt_Enter_a_number_for_or]"} - } - } - -if {[string is true $edit_p]} { - ad_form -extend -name task_add_edit \ - -form { - {percent_complete:text,optional - {label "[_ project-manager.Status]"} - {html {size 4}} - {help_text "[_ project-manager.lt_Enter_100_to_close_th_1]"} - } - - {hours:text,optional - {label $logger_variable(name)} - {html {size 4}} - {section "[_ project-manager.Log_entry]"} - {after_html $logger_variable(unit)} - } - - - {logger_variable_id:text(hidden) - {section "[_ project-manager.Log_entry]"} - } - - {log_date:text(text),optional - {label "[_ project-manager.Date_1]"} - {html {id sel2}} - {after_html { \[y-m-d \] - }} - {section "[_ project-manager.Log_entry]"} - } - - {log:text,optional - {label "[_ project-manager.Description_1]"} - {html {size 30}} - {help_text "[_ project-manager.lt_You_can_optionally_lo]"} - {section "[_ project-manager.Log_entry]"} - } - } -} elseif {[string is true $using_process_p]} { - ad_form -extend -name task_add_edit \ - -form { - {percent_complete:text(select),optional - {label "[_ project-manager.Status]"} - {options $percent_options} - } - } -} else { - ad_form -extend -name task_add_edit \ - -form { - {percent_complete:text(hidden)} - } -} - -set roles_list [pm::role::select_list_filter] -set assignee_role_list [pm::project::assignee_role_list -project_item_id $project_item_id] - -# Get assignments for when using processes -if {[string is true $using_process_p]} { - # PROCESS - set task_assignee_list [pm::process::task_assignee_role_list -process_task_id $process_task_id] -} elseif {[string is true $edit_p]} { - # EDITING - set task_assignee_list [pm::task::assignee_role_list -task_item_id $task_item_id] -} else { - # NEW - set task_assignee_list [list] -} - -foreach one_assignee $assignee_role_list { - set person_id [lindex $one_assignee 0] - set name [person::name -person_id $person_id] - lappend assignee_options [list $name $person_id] -} - -foreach role_list $roles_list { - set role_name [lindex $role_list 0] - set role [lindex $role_list 1] - - set assignees [list] - foreach one_assignee $assignee_role_list { - set person_id [lindex $one_assignee 0] - set person_role [lindex $one_assignee 1] - if {[lsearch $task_assignee_list [list $person_id $role]] >= 0 || $role == $person_role} { - lappend assignees $person_id - } - } - - ad_form -extend -name task_add_edit \ - -form [list \ - [list assignee.$role\:text(checkbox),optional,multiple \ - [list label $role_name] \ - [list options $assignee_options] \ - [list section "[_ project-manager.Assignees]"] \ - [list values $assignees] \ - ] ] -} - -ad_form -extend -name task_add_edit -new_request { - set send_email_p t - set task_title "" - set description "" - set description_mime_type "text/plain" - set estimated_hours_work 0 - set estimated_hours_work_min 0 - set estimated_hours_work_max 0 - set estimated_days_work_min 0 - set estimated_days_work_max 0 - set percent_complete 0 - set task_end_date [db_string today {}] - set dependency "" - set priority 0 -} -edit_request { - db_1row get_task_data {} - - set task_end_time [template::util::date::from_ansi $task_end_date [lc_get frombuilder_time_format]] - set task_end_date [lindex $task_end_date 0] - - set hours_day [pm::util::hours_day] - set estimated_days_work_min [expr $estimated_hours_work_min / $hours_day] - set estimated_days_work_max [expr $estimated_hours_work_max / $hours_day] - - set log_date [db_string today {}] -} -validate { -} -on_submit { - set hours_day [pm::util::hours_day] - set status_id [pm::task::default_status_open] - - set end_date_split [split $task_end_date "-"] - set end_date(day) [lindex [set end_date_split] 2] - set end_date(month) [lindex [set end_date_split] 1] - set end_date(year) [lindex [set end_date_split] 0] - set end_date(format) "" - ad_page_contract_filter_proc_date end_date end_date - - set task_end_date_list [split $end_date(date) "-"] - append task_end_date_list " [lrange $task_end_time 3 5]" - - set end_date(date) $task_end_date_list - set end_date_sql [pm::util::datenvl -value $end_date(date) -value_if_null "null" -value_if_not_null "to_timestamp('$end_date(date)','YYYY MM DD HH24 MI SS')"] - - if {[info exists log_date]} { - set log_date_split [split $log_date "-"] - set log_date_array(day) [lindex [set log_date_split] 2] - set log_date_array(month) [lindex [set log_date_split] 1] - set log_date_array(year) [lindex [set log_date_split] 0] - set log_date_array(format) "" - ad_page_contract_filter_proc_date log_date_array log_date_array - } - - if {[string is true $use_day_p]} { - # set the hours work - if {[string is true $use_uncertain_completion_times_p]} { - set estimated_hours_work_min \ - [expr $estimated_days_work_min * $hours_day] - set estimated_hours_work_max \ - [expr $estimated_days_work_max * $hours_day] - } else { - set estimated_hours_work \ - [expr $estimated_days_work * $hours_day] - } - } - - if {$estimated_hours_work_min > $estimated_hours_work_max} { - set temp $estimated_hours_work_max - set estimated_hours_work_max $estimated_hours_work_min - set estimated_hours_work_min $temp - } - - if {[string is true $use_uncertain_completion_times_p]} { - set estimated_hours_work [expr .5 * ($estimated_hours_work_max - $estimated_hours_work_min) + $estimated_hours_work_min] - } else { - set estimated_hours_work_min $estimated_hours_work - set estimated_hours_work_max $estimated_hours_work - } - -} -new_data { - db_transaction { - - # ----------------------------------- - # USING PROCESS OR CREATING NEW TASKS - # ----------------------------------- - - if {[string is true $using_process_p]} { - set process_instance_id [pm::process::instantiate \ - -process_id $process_id \ - -project_item_id $project_item_id \ - -name $process_name] - } else { - set process_instance_id "" - } - - # ----------- - # create task - # ----------- - - permission::require_permission -party_id $user_id -object_id $project_item_id -privilege create - - set task_id [dtype::form::process \ - -dform $dform \ - -prefix pm \ - -object_type pm_task \ - -object_id $task_id \ - -form task_add_edit \ - -cr_widget none \ - -defaults [list title $task_title description $description mime_type $description_mime_type context_id $project_item_id parent_id $project_item_id object_type pm_task] \ - -default_fields {percent_complete {end_date $end_date_sql} estimated_hours_work estimated_hours_work_min estimated_hours_work_max priority dform} \ - -exclude_static] - - set task_item_id [db_string get_item_id {}] - - db_dml new_task {} - - if {[exists_and_not_null category_ids]} { - category::map_object -object_id $task_id $category_ids - } - - if {$percent_complete >= 100} { - pm::task::close -task_item_id $task_item_id - } - - # ---------------- - # add in assignees - # ---------------- - - if {[array exists assignee]} { - foreach role [array names assignee] { - foreach person_id $assignee($role) { - pm::task::assign \ - -task_item_id $task_item_id \ - -party_id $person_id \ - -role_id $role - } - } - } - - # ------------------- - # add in dependencies - # ------------------- - - # if there is a numXX as the dependency, then we are relying - # on new tasks that had not been created yet. So we match them - # up with the new tasks we've just created. - if {[regexp {num(.*)} $dependency match parent]} { - set dependency $task_item_id($parent) - } - - if {[exists_and_not_null dependency]} { - pm::task::dependency_add \ - -task_item_id $task_item_id \ - -parent_id $dependency \ - -dependency_type finish_before_start \ - -project_item_id $project_item_id - } - - callback pm::task_new -package_id $package_id -task_id $task_item_id - } -} -edit_data { - db_transaction { - - pm::task::clear_client_properties \ - -task_item_id $task_item_id - - # ------------------------------------- - # Log hours and other variables to task - # ------------------------------------- - - set logger_project [lindex [application_data_link::get_linked -from_object_id $project_item_id -to_object_type logger_project] 0] - - if {[exists_and_not_null hours]} { - - pm::project::log_hours \ - -logger_project_id $logger_project \ - -variable_id $logger_variable_id \ - -value $hours \ - -description $log \ - -task_item_id $task_item_id \ - -project_item_id $project_item_id \ - -update_status_p f \ - -party_id $user_id \ - -timestamp_ansi $log_date_array(date) - } - - # --------- - # edit task - # --------- - - permission::require_permission -party_id $user_id -object_id $task_item_id -privilege write - - set task_id [dtype::form::process \ - -dform $dform \ - -prefix pm \ - -object_type pm_task \ - -object_id $task_id \ - -form task_add_edit \ - -cr_widget none \ - -defaults [list title $task_title description $description mime_type $description_mime_type context_id $project_item_id parent_id $project_item_id object_type pm_task] \ - -default_fields {percent_complete {end_date $end_date_sql} estimated_hours_work estimated_hours_work_min estimated_hours_work_max priority dform} \ - -exclude_static] - - db_dml update_task {} - - if {[exists_and_not_null category_ids]} { - category::map_object -object_id $task_id $category_ids - } - - set actual_hours_worked [pm::task::update_hours -task_item_id $task_item_id] - if {$percent_complete >= 100} { - pm::task::close -task_item_id $task_item_id - } - - # -------------------------- - # remove all old assignments - # -------------------------- - pm::task::assign_remove_everyone \ - -task_item_id $task_item_id - - # ----------------------- - # remove all dependencies - # ----------------------- - pm::task::dependency_delete_all \ - -task_item_id $task_item_id - - - # ---------------- - # add in assignees - # ---------------- - - if {[array exists assignee]} { - foreach role [array names assignee] { - foreach person_id $assignee($role) { - pm::task::assign \ - -task_item_id $task_item_id \ - -party_id $person_id \ - -role_id $role - } - } - } - - # ----------------------- - # add in the dependencies - # ----------------------- - - if {[exists_and_not_null dependency]} { - pm::task::dependency_add \ - -task_item_id $task_item_id \ - -parent_id $dependency \ - -dependency_type finish_before_start \ - -project_item_id $project_item_id - } - - callback pm::task_edit -package_id $package_id -task_id $task_item_id - } -} -after_submit { - set number 1 - set comments(1) $comment - set comments_mime_type(1) $comment_mime_type - - ad_set_client_property -persistent f -- \ - project-manager \ - project_item_id(1) \ - $project_item_id - - ad_set_client_property -persistent f -- \ - project-manager \ - task_item_id(1) \ - $task_item_id - - ad_returnredirect \ - [export_vars -base task-add-edit-3 \ - { \ - number:multiple \ - using_process_p \ - process_instance_id \ - edit_p \ - comments:array \ - comments_mime_type:array \ - send_email_p \ - return_url}] - - ad_script_abort -} - -ad_return_template "../templates/project-taeo" +# Retrieving the value of the parameter to know which template to call +set template_src [parameter::get -parameter "TaskAdd"]