Commit 852972ba authored by Frank Bergmann's avatar Frank Bergmann

- added automatic project progress updates percent_completed

parent 45a9c0b4
......@@ -364,40 +364,36 @@ extra_select, extra_where, sort_order, visible_for) values (91022,910,NULL,
--
insert into im_views (view_id, view_name, visible_for) values (911,
'im_timesheet_task_list_short', 'view_projects');
--
delete from im_view_columns where column_id >= 91100 and column_id < 91199;
--
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91100,911,NULL,'"Project Nr"',
'"<a href=/intranet/projects/view?[export_url_vars project_id]>$project_nr</a>"',
'','',0,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91101,911,NULL,'"Task Code"',
'"<a href=/intranet-timesheet2-tasks/new?[export_url_vars project_id task_id return_url]>
$task_nr</a>"','','',1,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91103,911,NULL,'Material',
'"<a href=/intranet-material/new?[export_url_vars material_id return_url]>$material_nr</a>"',
'','',3,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91104,911,NULL,'Plan',
'$planned_units','','',4,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91106,911,NULL,'Bill',
'$billable_units','','',6,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91108,911,NULL,'Log',
'$reported_units_cache','','',8,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91109,911,NULL,'"%"',
'$percent_completed_rounded','','',9,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91110,911,NULL,'UoM',
'$uom','','',10,'');
insert into im_view_columns (column_id, view_id, group_id, column_name, column_render_tcl,
extra_select, extra_where, sort_order, visible_for) values (91112,911,NULL,
'"[im_gif del "Delete"]"',
......
......@@ -25,7 +25,8 @@ select
im_category_from_id(t.task_type_id) as task_type,
im_category_from_id(t.task_status_id) as task_status,
im_category_from_id(t.uom_id) as uom,
im_material_nr_from_id(t.material_id) as material_nr
im_material_nr_from_id(t.material_id) as material_nr,
to_char(t.percent_completed, '999990') as percent_completed_rounded
from
im_projects p,
im_timesheet_tasks t
......
......@@ -357,6 +357,9 @@ ad_proc -public im_timesheet_task_list_component {
# ---------------------- Join all parts together ------------------------
# Restore the original value of project_id
set project_id $restrict_to_project_id
set component_html "
<form action=/intranet-timesheet2-tasks/task-action method=POST>
[export_form_vars project_id return_url]
......@@ -371,3 +374,54 @@ ad_proc -public im_timesheet_task_list_component {
return $component_html
}
# -------------------------------------------------------------------
# Calculate Project Advance
# -------------------------------------------------------------------
ad_proc im_trans_task_project_advance { project_id } {
Calculate the percentage of advance of the project.
The query get a little bit more complex because we
have to take into account the advance of the subprojects.
} {
db_1row project_advance "
select
sum(s.planned_units) as planned_units,
sum(s.reported_units_cache) as reported_units,
sum(s.advanced_units) as advanced_units
from
(select
t.task_id,
t.project_id,
t.planned_units,
t.reported_units_cache,
t.planned_units * t.percent_completed / 100 as advanced_units
from
im_timesheet_tasks t
where
project_id in (
select
children.project_id as subproject_id
from
im_projects parent,
im_projects children
where
children.project_status_id not in (82,83)
and children.tree_sortkey between
parent.tree_sortkey and tree_right(parent.tree_sortkey)
and parent.project_id = :project_id
)
) s
"
db_dml update_project_advance "
update im_projects
set percent_completed = (:advanced_units::numeric / :planned_units::numeric) * 100
where project_id = :project_id
"
# ad_return_complaint 1 "$planned_units $reported_units $advanced_units"
}
......@@ -28,7 +28,7 @@ ad_page_contract {
# Permissions
# ---------------------------------------------------------------------
# ToDo: Permissions on hierarchical projects
set org_project_id $project_id
set current_user_id [ad_maybe_redirect_for_registration]
im_project_permissions $current_user_id $project_id view read write admin
......@@ -37,8 +37,26 @@ if {!$read} {
return
}
set all_task_list [array names task_id]
# Append dummy task in case the list is empty
lappend all_task_list 0
set all_task_list [concat $all_task_list [array names percent_completed]]
ns_log Notice "task-action: all_task_list=$all_task_list"
set perm_sql "
select distinct
project_id
from im_timesheet_tasks t
where t.task_id in ([join $all_task_list ", "])
"
db_foreach perm $perm_sql {
im_project_permissions $current_user_id $project_id view read write admin
set write_project($project_id) $write
}
# ----------------------------------------------------------------------
# Batch-process the tasks
# ---------------------------------------------------------------------
......@@ -49,11 +67,13 @@ switch $action {
save {
set perc_list [array names percent_completed]
foreach task_id $perc_list {
set completed $percent_completed($task_id)
foreach save_task_id $perc_list {
set completed $percent_completed($save_task_id)
set project_id_sql "select project_id from im_timesheet_tasks where task_id = :save_task_id"
set project_id [db_string project_id $project_id_sql -default 0]
if {"" != $completed} {
if {"" != $completed && [info exists write_project($project_id)]} {
if {$completed > 100 || $completed < 0} {
ad_return_complaint 1 "<li>[lang::message::lookup "" intranet-timesheet2-tasks.Percent_completed_between_0_and_100 "Completion percentage must be a value between 0 and 100"]"
......@@ -65,7 +85,7 @@ switch $action {
update im_timesheet_tasks
set percent_completed = :completed
where
task_id = :task_id
task_id = :save_task_id
"
db_dml save_tasks $sql
} errmsg]} {
......@@ -74,49 +94,48 @@ switch $action {
}
}
}
# Update the total advance of the project
}
delete {
set task_list [array names task_id]
ns_log Notice "task-action: delete: task_list=$task_list"
if {0 == [llength $task_list]} {
set delete_task_list [array names task_id]
if {0 == [llength $delete_task_list]} {
ad_returnredirect $return_url
}
# Convert the list of selected tasks into a
# "task_id in (1,2,3,4...)" clause
#
set task_in_clause "and task_id in ([join $task_list ", "])\n"
set task_in_clause "and task_id in ([join $delete_task_list ", "])\n"
ns_log Notice "task-action: delete: task_in_clause=$task_in_clause"
if {[catch {
set sql "
delete from im_timesheet_tasks
where
project_id = :project_id
where 1=1
$task_in_clause"
db_dml delete_tasks $sql
} errmsg]} {
set task_list [db_list task_names "select task_name from im_timesheet_tasks where project_id = :project_id $task_in_clause"]
set task_names [join $task_list "<li>"]
set task_names [join $delete_task_list "<li>"]
ad_return_complaint 1 "<li><B>[_ intranet-timesheet2-tasks.Unable_to_delete_tasks]</B>:<br>
[_ intranet-timesheet2-tasks.Dependent_Objects_Exist]"
[_ intranet-timesheet2-tasks.Dependent_Objects_Exist]<br>
<pre>$errmsg</pre>"
return
}
}
default {
ad_return_complaint 1 "<li>[_ intranet-timesheet2-tasks.Unknown_action_value]: '$action'"
return
}
}
# Update the total advance of the project
if {[ad_parameter -package_id [im_package_timesheet_task_id] AutomaticProjectCompletionP "" 0]} {
im_trans_task_project_advance $org_project_id
}
ad_returnredirect $return_url
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment