Commit a483ebbd authored by Frank Bergmann's avatar Frank Bergmann

- debugged intranet-hr

- orgchart now working
- added old ACS files ad-tree and and ad-functional as intranet-*
parent 0581ca74
Pipeline #19 failed with stages
......@@ -161,8 +161,6 @@ insert into im_categories (category_id, category, category_type) values
(454, 'Active', 'Intranet Employee Pipeline State');
insert into im_categories (category_id, category, category_type) values
(455, 'Past', 'Intranet Employee Pipeline State');
insert into im_categories (category_id, category, category_type) values
(456, 'Potential Employee', 'Intranet Employee Pipeline State');
------------------------------------------------------
......@@ -195,9 +193,6 @@ where category_type = 'Intranet Employee Pipeline State';
prompt *** Creating im_supervises_p
create or replace function im_supervises_p(
v_supervisor_id IN integer,
......@@ -404,3 +399,31 @@ begin
end;
/
show errors;
------------------------------------------------------
-- HR Permissions
--
prompt *** Creating HR Profiles
begin
im_create_profile ('HR Managers','profile');
end;
/
show errors;
prompt *** Creating Privileges
begin
acs_privilege.create_privilege('view_hr','View HR','View HR');
end;
/
prompt Initializing HR Permissions
BEGIN
im_priv_create('view_hr', 'HR Managers');
im_priv_create('view_hr', 'P/O Admins');
im_priv_create('view_hr', 'Senior Managers');
END;
/
commit;
......@@ -11,6 +11,19 @@ ad_library {
@author frank.bergmann@project-open.com
}
# ----------------------------------------------------------------------
# Constant Functions
# ----------------------------------------------------------------------
ad_proc -public im_employee_status_potential {} { return 450 }
ad_proc -public im_employee_status_received_test {} { return 451 }
ad_proc -public im_employee_status_failed_test {} { return 452 }
ad_proc -public im_employee_status_approved_test {} { return 453 }
ad_proc -public im_employee_status_active {} { return 454 }
ad_proc -public im_employee_status_past {} { return 455 }
# ----------------------------------------------------------------------
# Employee Info Component
# Some simple extension data for employeers
......@@ -19,23 +32,35 @@ ad_library {
ad_proc im_employee_info_component { employee_id return_url {view_name ""} } {
Show some simple information about a employeer
} {
ns_log Notice "im_employee_info_component: employee_id=$employee_id, view_name=$view_name"
set current_user_id [ad_get_user_id]
if {"" == $view_name} { set view_name "employees_view" }
ns_log Notice "im_employee_info_component: employee_id=$employee_id, view_name=$view_name"
set department_url "/intranet/intranet-cost/cost_centers/view?cost_center_id="
set user_url "/intranet/users/view?user_id="
set td_class(0) "class=roweven"
set td_class(1) "class=rowodd"
# employee_id gets modified by the SQl ... :-(
set org_employee_id $employee_id
# --------------- Security --------------------------
set view 0
set read 0
set write 0
set admin 0
im_user_permissions $current_user_id $employee_id view read write admin
if {!$read} { return "" }
set td_class(0) "class=roweven"
set td_class(1) "class=rowodd"
# Check if the current_user is a HR manager
if {![im_permission $current_user_id view_hr]} { return "" }
# employee_id gets modified by the SQl ... :-(
set org_employee_id $employee_id
# Finally: Show this component only for employees
if {![im_user_is_employee_p $employee_id]} { return "" }
# --------------- Security --------------------------
db_1row employee_info "
select
......
......@@ -25,8 +25,6 @@ ad_page_contract {
# ------------------------------------------------------------------
set user_id [ad_maybe_redirect_for_registration]
set page_title "Edit Employee Information"
set context [ad_context_bar $page_title]
set today [db_string birthday_today "select sysdate from dual"]
if {![im_permission $user_id view_users]} {
......@@ -38,6 +36,8 @@ set action_url "/intranet-hr/new"
set focus "cost.var_name"
set employee_name ""
set form_mode "edit"
if {[info exists employee_id]} {
set employee_name [db_string employee_name "select im_name_from_user_id(:employee_id) from dual"]
ns_log Notice "/intranet-hr/new/: employee_id=$employee_id"
......@@ -45,26 +45,39 @@ if {[info exists employee_id]} {
ns_log Notice "/intranet-hr/new/: employee_id doesn't exist"
}
# ------------------------------------------------------------------
# Get everything about the employee
# ------------------------------------------------------------------
if {![exists_and_not_null item_id]} {
# New variable: setup some reasonable defaults
set page_title "Employee Information of $employee_name"
set context [ad_context_bar $page_title]
set form_mode "edit"
}
# ------------------------------------------------------------------
# Build the form
# Insert default information if the record doesn't exist
# ------------------------------------------------------------------
set availability "100"
set birthdate $today
set currency [ad_parameter -package_id [im_package_cost_id] "DefaultCurrency" "" "EUR"]
set exists_p [db_string exists_employee "select count(*) from im_employees where employee_id=:employee_id"]
if {!$exists_p} {
db_dml insert_employee_record "
insert into im_employees (
employee_id,
availability,
currency,
employee_status_id
) values (
:employee_id,
100,
:currency,
[im_employee_status_active]
)"
}
# ------------------------------------------------------------------
# Build the form
# ------------------------------------------------------------------
set currency_options [im_cost_currency_options]
set currency_options [im_currency_options]
set department_options [im_department_options]
......
......@@ -25,9 +25,8 @@ set page_focus "im_header_form.keywords"
set user_admin_p [im_is_user_site_wide_or_intranet_admin $user_id]
set return_url [im_url_with_query]
if {![im_permission $user_id view_users]} {
set err_msg "You don't have permissions to view users"
ad_returnredirect "/error?error=$err_msg"
if {![im_permission $user_id view_hr]} {
ad_return_complaint 1 "You don't have permissions to view users"
return
}
......@@ -36,21 +35,27 @@ if {![im_permission $user_id view_users]} {
# im_employees - basically, until you say This user is supervised by nobody
# or by her, that user won't show up in the query
set big_kahuna_list [db_list kahuna_find \
"select info.user_id
from im_employees_active info
where supervisor_id is null
and exists (select 1
from im_employees_active info2
where info2.supervisor_id = info.user_id)"]
set big_kahuna_list [db_list kahuna_find "
select
info.employee_id
from
im_employees_active info
where
supervisor_id is null
and exists (
select 1
from im_employees_active info2
where info2.supervisor_id = info.employee_id
)
"]
if { [llength $big_kahuna_list] == 0 || [llength $big_kahuna_list] > 1 } {
ad_return_error "No Big Kahuna" "<blockquote>For the org chart page to work, you need to have set up the \"who supervises whom\" relationships so that there is only one person (the CEO) who has no supervisor and no subordinates.</blockquote>"
return
}
if { ![exists_and_not_null starting_user_id] } {
set starting_user_id [lindex $big_kahuna_list 0]
if { ![exists_and_not_null starting_employee_id] } {
set starting_employee_id [lindex $big_kahuna_list 0]
}
set page_body "<blockquote>\n"
......@@ -70,39 +75,39 @@ set vacant_position ""
set nodes_sql "
select
user_id,
im_name_from_user_id(user_id) as employee_name,
ad_group_member_p(user_id, [im_employee_group_id]) as currently_employed_p
employee_id,
im_name_from_user_id(employee_id) as employee_name,
ad_group_member_p(employee_id, [im_employee_group_id]) as currently_employed_p
from
im_employees
start with
user_id = :starting_user_id
employee_id = :starting_employee_id
connect by
supervisor_id = PRIOR user_id"
supervisor_id = PRIOR employee_id"
set bind_vars [ns_set create]
ns_set put $bind_vars starting_user_id $starting_user_id
ns_set put $bind_vars starting_employee_id $starting_employee_id
# generate the org chart
append page_body [tree_to_horizontal_table [im_prune_org_chart [db_tree nodes_display $nodes_sql -bind $bind_vars]] im_print_employee]
# Now pull out the people who don't get included because they
# aren't starting_user_id and they don't have supervisors
# aren't starting_employee_id and they don't have supervisors
set employee_listing_sql "
select u.user_id, u.first_names || ' ' || u.last_name as employee_name
select u.employee_id, u.first_names || ' ' || u.last_name as employee_name
from im_employees_active u
where u.user_id <> :starting_user_id
where u.employee_id <> :starting_employee_id
and u.supervisor_id is null
order by lower(employee_name)"
set homeless_employees ""
db_foreach employee_listing $employee_listing_sql {
append homeless_employees " <li> <a href=../users/view?[export_url_vars user_id]>$employee_name</a>"
append homeless_employees " <li> <a href=../users/view?[export_url_vars employee_id]>$employee_name</a>"
if { $user_admin_p } {
append homeless_employees " (<a href=admin/update-supervisor?[export_url_vars user_id return_url]>add supervisor</a>)"
append homeless_employees " (<a href=admin/update-supervisor?[export_url_vars employee_id return_url]>add supervisor</a>)"
}
append homeless_employees "\n"
}
......@@ -119,7 +124,7 @@ append page_body "</blockquote>\n"
set page_body "
<BR>
[im_user_navbar "none" "/intranet/users/index" "" "" [list starting_user_id]]
[im_user_navbar "none" "/intranet/users/index" "" "" [list starting_employee_id]]
$page_body
"
......
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