--
-- packages/ticket-tracker/sql/ticket-create.sql
--
-- 
-- @author Phong Nguyen (phong@arsdigita.com)
-- @author Tony Tseng (tony@arsidigta.com)
-- 
-- @creation-date 2000-11-15
--
-- @cvs-id $Id: ticket-create.sql,v 1.1.1.1 2001/04/20 20:51:25 donb Exp $
--

----------------------------------
-- KNOWLEDGE LEVEL OBJECTS
----------------------------------
declare
    attr_id     acs_attributes.attribute_id%TYPE;
begin
    acs_object_type.create_type (
        object_type   => 'ttracker_ticket',
        pretty_name   => 'Ticket Tracker Ticket',
        pretty_plural => 'Ticket Tracker Tickets',
        supertype     => 'acs_message',
        table_name    => 'ttracker_tickets',
        id_column     => 'ticket_id',
        package_name  => 'ttracker_ticket',
        name_method   => 'ttracker_ticket.name'
    );    
    attr_id := acs_attribute.create_attribute (
        object_type    => 'ttracker_ticket',
        attribute_name => 'category_id',
        datatype       => 'integer',
        pretty_name    => 'Category ID',
        pretty_plural  => 'Category IDs'
    );
    attr_id := acs_attribute.create_attribute (
        object_type    => 'ttracker_ticket',
        attribute_name => 'subject',
        datatype       => 'string',
        pretty_name    => 'Subject',
        pretty_plural  => 'Subjects'
    );
    attr_id := acs_attribute.create_attribute (
        object_type    => 'ttracker_ticket',
        attribute_name => 'severity',
        datatype       => 'integer',
        pretty_name    => 'Severity',
        pretty_plural  => 'Severities'
    );
    attr_id := acs_attribute.create_attribute (
        object_type    => 'ttracker_ticket',
        attribute_name => 'priority',
        datatype       => 'integer',
        pretty_name    => 'Priority',
        pretty_plural  => 'Priorities'
    );
end;
/
show errors

----------------------------------
-- OPERATIONAL LEVEL
----------------------------------

create table ttracker_tickets (
    ticket_id        integer
                     constraint ttkr_tkt_pk
                     primary key
                     constraint ttkr_tkt_fk	
                     references acs_messages (message_id) on delete cascade,
    category_id      integer 
                     constraint ttkr_tkt_category_id_fk
                     references ttracker_categories (category_id) on delete cascade,
    creation_user    constraint ttkr_tkt_creation_user_fk
                     references persons(person_id)
                     constraint ttkr_tkt_creation_user_nn
                     not null,
    creation_date    date default sysdate
                     constraint ttkr_tkt_date_nn
                     not null,                 
    subject          varchar2(1000)
                     constraint ttkr_tkt_subject_nn
                     not null,
    severity         integer
                     constraint ttkr_tkt_severity_nn
                     not null,
    priority         integer
                     constraint ttkr_tkt_priority_nn
                     not null
);

-- to prevent ttracker_tickets from getting locked when ttracker_categories table is being updated
create index tt_category_id_idx on ttracker_tickets (category_id);

-- to prevent ttracker_tickets from getting locked when persons table is being updated
create index tt_creation_user_idx on ttracker_tickets (creation_user);

comment on table ttracker_tickets is '
    The contents of a ticket is stored as an acs-message. This table 
    extends the the acs_messages table to hold additional knowledge 
    level attributes for a ticket type.    
';
comment on column ttracker_tickets.creation_user is '
    The id of the user who submitted the ticket. It is stored 
    redundantly to avoid joining acs-objects.
';
comment on column ttracker_tickets.creation_date is '
    The creation date of the ticket. It is stored redundantly to 
    avoid joining against cr_items and cr_revisions.
';
comment on column ttracker_tickets.category_id is '
    The id of the category to associate this ticket to.
';
comment on column ttracker_tickets.subject is '
    The subject of the ticket. It is stored redundantly to avoid 
    joining against cr_items and cr_revisions. 
';
comment on column ttracker_tickets.severity is '
    The severity level of the ticket.
';
comment on column ttracker_tickets.priority is '
    The priority level of the ticket.
';


