Commit 813df5db authored by Frank Bergmann's avatar Frank Bergmann

- objectified version of im_user_absences

parent 391ccbaf
......@@ -17,8 +17,25 @@
-- @author frank.bergmann@project-open.com
-----------------------------------------------------------
-- Create the object type
SELECT acs_object_type__create_type (
'im_user_absence', -- object_type
'Absence', -- pretty_name
'Absences', -- pretty_plural
'acs_object', -- supertype
'im_user_absences', -- table_name
'absence_id', -- id_column
'intranet-timesheet2', -- package_name
'f', -- abstract_p
null, -- type_extension_table
'im_user_absence__name' -- name_method
);
------------------------------------------------------
-- Absences
-- Absences Table
--
......@@ -37,6 +54,9 @@ begin
absence_id integer
constraint im_user_absences_pk
primary key,
absence_name varchar(1000),
owner_id integer
constraint im_user_absences_user_fk
references users,
......@@ -46,14 +66,24 @@ begin
constraint im_user_absences_end_const not null,
description varchar(4000),
contact_info varchar(4000),
-- should this user receive email during the absence?
receive_email_p char(1) default ''t''
constraint im_user_absences_email_const
check (receive_email_p in (''t'',''f'')),
last_modified date,
-- Status and type for orderly objects...
absence_type_id integer
constraint im_user_absences_type_fk
references im_categories
constraint im_user_absences_type_const not null
constraint im_user_absences_type_nn
not null,
absence_status_id integer
constraint im_user_absences_status_fk
references im_categories
constraint im_user_absences_type_nn
not null
);
alter table im_user_absences add constraint owner_and_start_date_unique unique (owner_id,start_date);
......@@ -69,6 +99,104 @@ drop function inline_0 ();
-----------------------------------------------------------
-- Create, Drop and Name PlPg/SQL functions
--
-- These functions represent creator/destructor
-- functions for the OpenACS object system.
create or replace function im_user_absence__name(integer)
returns varchar as '
DECLARE
p_absence_id alias for $1;
v_name varchar(2000);
BEGIN
select absence_name into v_name
from im_user_absences
where absence_id = p_absence_id;
-- compatibility fallback
IF v_name is null THEN
select substring(description for 1900) into v_name
from im_user_absences
where absence_id = p_absence_id;
END IF;
return v_name;
end;' language 'plpgsql';
create or replace function im_user_absence__new (
integer, varchar, timestamptz,
integer, varchar, integer,
varchar, integer, timestamptz, timestamptz,
integer, integer, varchar, varchar
) returns integer as '
DECLARE
p_absence_id alias for $1; -- absence_id default null
p_object_type alias for $2; -- object_type default ''im_user_absence''
p_creation_date alias for $3; -- creation_date default now()
p_creation_user alias for $4; -- creation_user default null
p_creation_ip alias for $5; -- creation_ip default null
p_context_id alias for $6; -- context_id default null
p_absence_name alias for $7; -- absence_name
p_owner_id alias for $8; -- owner_id
p_start_date alias for $9;
p_end_date alias for $10;
p_absence_status_id alias for $11;
p_absence_type_id alias for $12;
p_description alias for $13;
p_contact_info alias for $14;
v_absence_id integer;
BEGIN
v_absence_id := acs_object__new (
p_absence_id, -- object_id
p_object_type, -- object_type
p_creation_date, -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
p_context_id, -- context_id
''f'' -- security_inherit_p
);
insert into im_user_absences (
absence_id, absence_name,
owner_id, start_date, end_date,
absence_status_id, absence_type_id,
description, contact_info
) values (
v_absence_id, p_absence_name,
p_owner_id, p_start_date, p_end_date,
p_absence_status_id, p_absence_type_id,
p_description, p_contact_info
);
return v_absence_id;
END;' language 'plpgsql';
create or replace function im_user_absence__delete(integer)
returns integer as '
DECLARE
p_absence_id alias for $1;
BEGIN
-- Delete any data related to the object
delete from im_user_absences
where absence_id = p_absence_id;
-- Finally delete the object iself
PERFORM acs_object__delete(p_absence_id);
return 0;
end;' language 'plpgsql';
------------------------------------------------------
-- Absences Permissions
--
......@@ -117,6 +245,17 @@ drop function inline_0 ();
-----------------------------------------------------------
-- Type and Status
--
-- 5000 - 5099 Intranet Absence types
-- 16000-16999 Intranet Absences (1000)
-- 16000-16099 Intranet Absence Status
-- 16100-16999 reserved
create or replace function inline_0 ()
returns integer as '
declare
......@@ -126,8 +265,6 @@ begin
from im_categories where category_id = 5000;
if v_count > 0 then return 0; end if;
-- 5000 - 5099 Absence types
insert into im_categories ( CATEGORY_DESCRIPTION, ENABLED_P, CATEGORY_ID, CATEGORY, CATEGORY_TYPE) values
('''', ''f'', ''5000'', ''Vacation'', ''Intranet Absence Type'');
insert into im_categories ( CATEGORY_DESCRIPTION, ENABLED_P, CATEGORY_ID, CATEGORY, CATEGORY_TYPE) values
......@@ -143,7 +280,34 @@ select inline_0 ();
drop function inline_0 ();
insert into im_categories(category_id, category, category_type)
values (16000, 'Active', 'Intranet Absences Status');
insert into im_categories(category_id, category, category_type)
values (16002, 'Deleted', 'Intranet Absences Status');
-----------------------------------------------------------
-- Create views for shortcut
--
create or replace view im_user_absence_status as
select category_id as absence_status_id, category as absence_status
from im_categories
where category_type = 'Intranet Absences Status'
and (enabled_p is null or enabled_p = 't');
create or replace view im_user_absence_types as
select category_id as absence_type_id, category as absence_type
from im_categories
where category_type = 'Intranet Absences Type'
and (enabled_p is null or enabled_p = 't');
-----------------------------------------------------------
-- On vacation?
-- on_vacation_p refers to the vacation_until column of the users table
-- it does not care about user_vacations!
......
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