Commit f253df40 authored by Frank Bergmann's avatar Frank Bergmann
parents d29444d2 abd52e0b
......@@ -126,8 +126,16 @@ ad_proc -public im_timesheet2_sync_timesheet_costs {
create costs for new im_hours entries coming
from an external application
} {
ns_log Notice "im_timesheet2_sync_timesheet_costs -user_id $user_id -project_id $project_id -julian_date $julian_date"
set sync_timesheet_costs [parameter::get_from_package_key -package_key intranet-timesheet2 -parameter SyncHoursP -default 1]
if {!$sync_timesheet_costs} { return }
if {"0" eq $sync_timesheet_costs} { return }
if {"1" ne $sync_timesheet_costs} {
# Use custom procedure to sync hours
ns_log Notice "im_timesheet2_sync_timesheet_costs: custom sync procedure '$sync_timesheet_costs'"
set result [$sync_timesheet_costs -user_id $user_id -project_id $project_id -julian_date $julian_date]
ns_log Notice "im_timesheet2_sync_timesheet_costs: custom sync: $result"
return $result
}
set default_currency [im_parameter -package_id [im_package_cost_id] "DefaultCurrency" "" "EUR"]
set default_hourly_cost [parameter::get_from_package_key -package_key intranet-cost -parameter DefaultTimesheetHourlyCost -default 100]
......@@ -175,7 +183,7 @@ ad_proc -public im_timesheet2_sync_timesheet_costs {
db_foreach hours $sql {
ns_log Notice "sync: uid=$hour_user_id, pid=$project_id, day=$day"
set cost_name "Timesheet $hour_date $project_nr $user_name"
set cost_name "$hours hours on $hour_date on $project_nr by $user_name"
set cost_id [im_cost::new -cost_name $cost_name -user_id $hour_user_id -creation_ip "0.0.0.0" -cost_type_id [im_cost_type_timesheet]]
lappend cost_ids $cost_id
db_dml update_hours "
......@@ -262,7 +270,6 @@ ad_proc -public im_timesheet_home_component {user_id} {
the current project and a link to log the users hours.
} {
if {[im_security_alert_check_integer -location im_timesheet_home_component -message "SQL Injection Attempt" -value $user_id]} { set user_id 0 }
# skip the entire component if the user doesn't have
# the permission to log hours
set add_hours [im_permission $user_id "add_hours"]
......@@ -271,6 +278,7 @@ ad_proc -public im_timesheet_home_component {user_id} {
set add_absences [im_permission $user_id "add_absences"]
set view_hours_all [im_permission $user_id view_hours_all]
if {!$add_hours && !$add_absences && !$view_hours_all} { return "" }
set admin_p [im_is_user_site_wide_or_intranet_admin $user_id]
# Get the number of hours in the number of days, and whether
# we should redirect if the user didn't log them...
......@@ -305,8 +313,9 @@ ad_proc -public im_timesheet_home_component {user_id} {
in the last $num_days days out of $expected_hours expected hours.
"
set message "<b>[lang::message::lookup "" intranet-timesheet2.You_need_to_log_hours $default_message]</b>"
if {$redirect_p} {
# Only redirect if it's not the admin...
if {$redirect_p && !$admin_p} {
set header [lang::message::lookup "" intranet-timesheet2.Please_Log_Your_Hours "Please Log Your Hours"]
ad_returnredirect [export_vars -base "/intranet-timesheet2/hours/index" {header message}]
}
......
......@@ -22,6 +22,8 @@ if {![info exists panel_p]} {
{ user_id_from_search "" }
{ duration_days "" }
}
} else {
set user_id_from_search ""
}
if {![info exists enable_master_p]} { set enable_master_p 1}
......@@ -90,7 +92,7 @@ if {![info exists absence_id]} {
set page_title [lang::message::lookup "" intranet-timesheet2.Absence_absence_type "%absence_type%"]
}
if {([info exists user_id_from_search] && $user_id_from_search ne "")} {
if {$user_id_from_search ne ""} {
set user_from_search_name [db_string name "select im_name_from_user_id(:user_id_from_search)" -default ""]
append page_title " "
append page_title [lang::message::lookup "" intranet-timesheet2.for_username " for %user_from_search_name%"]
......@@ -208,9 +210,6 @@ if {[info exists absence_id]} {
set edit_p [eval [list $edit_perm_func -absence_id $absence_id]]
set delete_p [eval [list $delete_perm_func -absence_id $absence_id]]
# ad_return_complaint 1 "edit_p=$edit_p, delete_p=$delete_p, admin=$admin, user_admin_p=$user_admin_p, edit_func=$edit_perm_func, delete_perm_func=$delete_perm_func"
if {$user_admin_p || $edit_p} {
lappend actions [list [lang::message::lookup {} intranet-timesheet2.Edit Edit] edit]
}
......@@ -380,10 +379,18 @@ ad_form -extend -name absence -on_request {
} -validate {
{duration_days
{
duration_days
{[im_absence_formatted_duration_to_days $duration_days] > 0}
"Positive number expected"
}
{
start_date
{ [lindex $start_date 0] >= [db_string this_year "select extract(year from now())"] || $user_admin_p }
"You can not create new absences for the last year or earlier.<br>
Please contact your administrator for exceptions."
}
} -new_data {
......
......@@ -30,20 +30,21 @@
</tr>
<tr class=rowodd>
<td><%= [lang::message::lookup "" intranet-timesheet2.Vacation_Taken_This_Year "Vacation taken this Year"] %></td>
<td>@vacation_days_taken@</td>
<td><%= [format "%.2f" $vacation_days_taken] %></td>
</tr>
<tr class=rowodd>
<td><%= [lang::message::lookup "" intranet-timesheet2.Vacation_Left_for_Period "Vacation Days left for Period"] %></td>
<td>@vacation_days_left@</td>
</tr>
</table>
</if>
<if @view_absences_details_p@>
<br>
<h2><%=[lang::message::lookup "" intranet-timesheet2.Absences_This_Year "Current Year"]%></h2>
<listtemplate name="vacation_balance"></listtemplate>
<br>
<h2><%=[lang::message::lookup "" intranet-timesheet2.Absences_Next_Year "Next Year"]%></h2>
<listtemplate name="vacation_days_next_year"></listtemplate>
</if>
......@@ -35,19 +35,21 @@ set view_absences_p [im_permission $current_user_id "view_absences"]
set view_absences_all_p [im_permission $current_user_id "view_absences_all"]
set add_absences_p [im_permission $current_user_id "add_absences"]
set today [db_string today "select now()::date"]
set page_title [lang::message::lookup "" intranet-timesheet2.Vacation_Balance "Vacation Balance"]
set absence_base_url "/intranet-timesheet2/absences"
set return_url [im_url_with_query]
set user_view_url "/intranet/users/view"
set current_year [db_string current_year "select to_char(now(), 'YYYY')"]
set start_of_year "$current_year-01-01"
set end_of_year "$current_year-12-31"
# Absence details should be only visible for those managing HR or the specific user (ToDo)
set view_absences_details_p 0
if {[im_permission $current_user_id "view_absences_for_group"]} { set view_absences_details_p 1 }
if {[im_permission $current_user_id "view_hr"]} { set view_absences_details_p 1 }
if {$current_user_id == $user_id_from_search} { set view_absences_details_p 1 }; # the user him/herself
# ------------------------------------------------------------------
# User Info
# ------------------------------------------------------------------
......
......@@ -41,6 +41,12 @@ ad_page_contract {
hours5:array,optional
hours6:array,optional
notes0:array,optional
notes1:array,optional
notes2:array,optional
notes3:array,optional
notes4:array,optional
notes5:array,optional
notes6:array,optional
internal_notes0:array,optional
materials0:array,optional
etc:array,optional
......@@ -334,6 +340,7 @@ foreach j $weekly_logging_days {
if {"skip" == $action && !$show_week_p && $db_notes != $screen_notes} { set action update }
if {"skip" == $action && !$show_week_p && $db_internal_notes != $screen_internal_notes} { set action update }
if {"skip" == $action && !$show_week_p && $db_materials != $screen_materials} { set action update }
if {"skip" != $action} { set action_hash($pid) $action }
}
......
......@@ -374,7 +374,7 @@ set missing_member_sql "
select *
from acs_rels r2
where r2.object_id_one = p.parent_id and
r2.object_id_two = :user_id_from_search
r2.object_id_two = :user_id_from_search
)
"
set debug_ul ""
......@@ -662,7 +662,7 @@ set child_project_sql "
#
set sort_integer_p 0
set sort_legacy_p 0
set sort_legacy_p 0
switch $list_sort_order {
nr {
set sort_order "lower(children.project_nr)"
......@@ -1238,7 +1238,7 @@ template::multirow foreach hours_multirow {
set i 0
foreach j $weekly_logging_days {
set julian_day_offset [expr {$julian_date + $i}]
set julian_day_offset [expr $julian_date + $i]
set hours ""
set note ""
set internal_note ""
......@@ -1283,7 +1283,7 @@ template::multirow foreach hours_multirow {
if { "t" == $edit_hours_p && $log_on_parent_p && !$invoice_id && !$solitary_main_project_p && !$closed_p && !$filter_surpress_output_p && !$blocked_by_wf_p && !$max_julian_date_exceed_p } {
# Write editable entries.
append table_rows "<td><input name=hours${i}.$project_id size=5 MAXLENGTH=5 value=\"$hours\"></td>\n"
append table_rows "<td>\n<input name=hours${i}.$project_id size=5 MAXLENGTH=5 value=\"$hours\">\n"
if {!$show_week_p} {
# Normal display - no Estimate to Complete
......@@ -1298,7 +1298,11 @@ template::multirow foreach hours_multirow {
if {$etc_planned_hours_no_default} { set etc_planned_hours_user "" };# Don't show default value if you really want an estimate...
append table_rows "<td width=20><nobr><input name=etc.$project_id size=1 value=$etc_planned_hours_user> [_ intranet-timesheet2.Hours]</nobr></td>\n"
}
} else {
# show_week_p
append table_rows "<input name=notes${i}.$project_id type=hidden value=\"[ns_quotehtml [value_if_exists note]]\">\n"
}
append table_rows "\n</td>\n"
} else {
if { $filter_surpress_output_p } {
# Filter in use - write only hidden fields
......
......@@ -118,10 +118,11 @@ ad_proc im_do_row {
{ today_date }
{ descrl }
{ workflow_key }
{ number_locale }
{ output_format }
} {
Returns a row with the hours loged of one user
'days' is a list of dates in format 'YYYYMMDD' with seven elements, first day
} {
set user_view_page "/intranet/users/view"
set absence_view_page "/intranet-timesheet2/absences/new?form_mode=display"
......@@ -191,7 +192,10 @@ ad_proc im_do_row {
# Check for hours logged and write hours logged for this day (if applicable)
if { [info exists user_days([lindex $days $i])] } {
lappend cell_text "$user_days([lindex $days $i]) $label_hours_weekly_report"
set user_days_formatted [im_report_format_number $user_days([lindex $days $i]) $output_format $number_locale]
lappend cell_text "$user_days_formatted $label_hours_weekly_report"
set absent_p "t"
if { "" != $workflow_key } {
switch $wf_status_array([lindex $days $i]) {
......@@ -212,7 +216,8 @@ ad_proc im_do_row {
# If no hours are logged and no absences are registered, set bg color of cell to yellow
if { $absent_p == "f" } {
# lappend cell_text "[_ intranet-timesheet2.No_hours_logged]"
lappend cell_text "0.00 $label_hours_weekly_report"
set zero_formatted [im_report_format_number 0.00 $output_format $number_locale]
lappend cell_text "$zero_formatted $label_hours_weekly_report"
lappend cell_param "style=\"background-color: #ffcc66;\""
}
......@@ -221,6 +226,7 @@ ad_proc im_do_row {
if { [lsearch -exact $holydays [lindex $days $i]] >= 0 && !$color_code_we_p } {
set cell_param "style=\"background-color: \#DDDDDD;\""
}
lappend cell_param "align=right"
append html "<td [join $cell_param " "]>[join $cell_text "<br>"]</td>\n"
}
append html "</tr>\n"
......@@ -254,9 +260,11 @@ ad_page_contract {
{ project_id:integer 0 }
{ duration:integer "7" }
{ start_at:integer "" }
{ display "project" }
{ display:word "project" }
{ cost_center_id:integer 0 }
{ workflow_key:word ""}
{ output_format "html" }
{ number_locale "" }
}
# ---------------------------------------------------------------
......@@ -268,6 +276,9 @@ set subsite_id [ad_conn subsite_id]
set site_url "/intranet-timesheet2"
set return_url "$site_url/weekly_report"
set date_format "YYYYMMDD"
set locale [lang::user::locale]
if {"" == $number_locale} { set number_locale $locale }
if { "" ne $owner_id && $owner_id != $user_id && ![im_permission $user_id "view_hours_all"] } {
ad_return_complaint 1 "<li>[_ intranet-timesheet2.lt_You_have_no_rights_to]"
......@@ -283,8 +294,6 @@ if { $start_at eq "" && $project_id != 0 } {
ad_returnredirect [export_vars -base $return_url {start_at duration project_id owner_id workflow_key}]
}
if {$start_at eq ""} {
set start_at [db_string get_today "select to_char(next_day(to_date(to_char(sysdate,:date_format),:date_format)+1, 'sun'), :date_format) from dual"]
} else {
......@@ -317,8 +326,7 @@ if { $project_id != 0 } {
[export_vars -form {start_at duration project_id owner_id workflow_key}]
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td colspan='2' class=rowtitle align=center>
[_ intranet-timesheet2.Filter]
<td colspan='2' class=rowtitle align=center>[_ intranet-timesheet2.Filter]
</td>
</tr>
<tr>
......@@ -346,8 +354,22 @@ if { $project_id != 0 } {
<div class='filter-title'>[_ intranet-timesheet2.Filter]</div>
<table border=0 cellpadding=5 cellspacing=5>
<tr>
<td valign=top><strong>[_ intranet-core.Cost_Center]:</strong><br>$im_cc_select </td>
<td valign=top><strong>[_ intranet-core.Cost_Center]:</strong><br>$im_cc_select</td>
</tr>
<tr>
<td valign=top><strong>Format:</strong><br>
[im_report_output_format_select output_format "" $output_format]
</td>
</tr>
<tr>
<td valign=top><strong>Number Format</strong><br>
[im_report_number_locale_select number_locale $number_locale]
</td>
</tr>
<tr>
<td valign=top>&nbsp;</td>
</tr>
......@@ -588,6 +610,8 @@ db_foreach get_hours $sql {
$today_date \
[array get user_ab_descr] \
$workflow_key \
$number_locale \
$output_format \
]
set old_owner [list $curr_owner_id $owner_name]
array unset user_days
......@@ -614,7 +638,7 @@ set colspan [expr {[llength $days]+1}]
if { $ctr > 0 } {
# Writing last record
ns_log notice "weekly_report: left loop, now writing last record"
append table_body_html [im_do_row [array get bgcolor] $ctr $curr_owner_id $owner_name $days [array get user_days] [array get user_absences] $holydays $today_date [array get user_ab_descr] $workflow_key ]
append table_body_html [im_do_row [array get bgcolor] $ctr $curr_owner_id $owner_name $days [array get user_days] [array get user_absences] $holydays $today_date [array get user_ab_descr] $workflow_key $number_locale $output_format]
} elseif { $table_body_html eq "" } {
# Show a reasonable message when there are no result rows:
set table_body_html "
......
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