- Added backend API routes for case management including listing, creating, updating, and deleting cases. - Implemented relations and tags functionality for cases. - Created frontend views for displaying case lists and details with filtering options. - Added database migration scripts to set up necessary tables and indexes. - Included HTML templates for case listing and detail views with responsive design. - Configured module metadata in module.json for integration.
63 lines
2.6 KiB
PL/PgSQL
63 lines
2.6 KiB
PL/PgSQL
-- Sag Module: Initialize case management tables
|
|
-- Supports universal case handling with relations and tags
|
|
|
|
-- Main cases table
|
|
CREATE TABLE IF NOT EXISTS sag_sager (
|
|
id SERIAL PRIMARY KEY,
|
|
titel VARCHAR(255) NOT NULL,
|
|
beskrivelse TEXT,
|
|
type VARCHAR(50) NOT NULL DEFAULT 'ticket', -- ticket, opgave, ordre, etc.
|
|
status VARCHAR(50) NOT NULL DEFAULT 'åben', -- åben, i_gang, afsluttet, on_hold
|
|
customer_id INTEGER NOT NULL REFERENCES customers(id),
|
|
ansvarlig_bruger_id INTEGER,
|
|
deadline TIMESTAMP,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMP,
|
|
CONSTRAINT valid_status CHECK (status IN ('åben', 'i_gang', 'afsluttet', 'on_hold'))
|
|
);
|
|
|
|
-- Relations between cases
|
|
CREATE TABLE IF NOT EXISTS sag_relationer (
|
|
id SERIAL PRIMARY KEY,
|
|
kilde_sag_id INTEGER NOT NULL REFERENCES sag_sager(id) ON DELETE CASCADE,
|
|
målsag_id INTEGER NOT NULL REFERENCES sag_sager(id) ON DELETE CASCADE,
|
|
relationstype VARCHAR(50) NOT NULL, -- forælder, barn, afledt_af, blokkerer, udfører_for
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMP,
|
|
CONSTRAINT different_cases CHECK (kilde_sag_id != målsag_id)
|
|
);
|
|
|
|
-- Tags for categorization
|
|
CREATE TABLE IF NOT EXISTS sag_tags (
|
|
id SERIAL PRIMARY KEY,
|
|
sag_id INTEGER NOT NULL REFERENCES sag_sager(id) ON DELETE CASCADE,
|
|
tag_navn VARCHAR(100) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMP
|
|
);
|
|
|
|
-- Indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_sag_sager_customer_id ON sag_sager(customer_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_sager_status ON sag_sager(status) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_sager_ansvarlig ON sag_sager(ansvarlig_bruger_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_relationer_kilde ON sag_relationer(kilde_sag_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_relationer_mål ON sag_relationer(målsag_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_tags_sag_id ON sag_tags(sag_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_sag_tags_tag_navn ON sag_tags(tag_navn) WHERE deleted_at IS NULL;
|
|
|
|
-- Trigger to auto-update updated_at
|
|
CREATE OR REPLACE FUNCTION update_sag_sager_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS trigger_sag_sager_updated_at ON sag_sager;
|
|
CREATE TRIGGER trigger_sag_sager_updated_at
|
|
BEFORE UPDATE ON sag_sager
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_sag_sager_updated_at();
|