OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

231_recurring_tickets.sql

3 KB
-- Migration 231: Wiederkehrende Tickets
--
-- Regelmäßige Arbeiten – der monatliche Rückspiel-Test, die Quartalsprüfung –
-- entstehen bisher von Hand oder gar nicht. Eine Vorlage beschreibt das Ticket
-- und den Takt; der Scheduler legt es zum Termin an.
--
-- `next_run` ist der Tag, an dem das nächste Ticket entstehen soll. Nach jedem
-- Lauf rückt er um den Takt weiter – damit steht der Zustand in der Zeile
-- selbst und nicht in der Laufhistorie.

CREATE TABLE IF NOT EXISTS `ticket_recurrences` (
    `id`             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `title`          VARCHAR(500)    NOT NULL COMMENT 'Betreff des entstehenden Tickets',
    `description`    TEXT            NULL,
    `category_id`    INT UNSIGNED    NULL,
    `location_id`    INT UNSIGNED    NULL,
    `assignee_id`    BIGINT UNSIGNED NULL COMMENT 'Bearbeiter des entstehenden Tickets',
    `priority`       TINYINT UNSIGNED NOT NULL DEFAULT 2 COMMENT '1 kritisch, 2 normal, 3 niedrig',
    `interval_unit`  ENUM('daily','weekly','monthly','quarterly','yearly') NOT NULL DEFAULT 'monthly',
    `interval_count` SMALLINT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'jede N-te Einheit',
    `next_run`       DATE            NOT NULL COMMENT 'Tag, an dem das nächste Ticket entsteht',
    `due_days`       SMALLINT UNSIGNED NULL COMMENT 'Fälligkeit des Tickets in Tagen nach seiner Entstehung',
    `is_active`      TINYINT(1)      NOT NULL DEFAULT 1,
    `last_run_at`    DATETIME        NULL,
    `last_ticket_id` INT UNSIGNED    NULL COMMENT 'zuletzt daraus entstandenes Ticket',
    `created_by`     BIGINT UNSIGNED NULL,
    `created_at`     DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`     DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_ticket_recurrences_due` (`is_active`, `next_run`),
    INDEX `idx_ticket_recurrences_title` (`title`(100)),
    CONSTRAINT `fk_trec_category` FOREIGN KEY (`category_id`) REFERENCES `ticket_categories`(`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_trec_location` FOREIGN KEY (`location_id`) REFERENCES `ticket_locations`(`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_trec_assignee` FOREIGN KEY (`assignee_id`) REFERENCES `users`(`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_trec_ticket`   FOREIGN KEY (`last_ticket_id`) REFERENCES `tickets`(`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_trec_user`     FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Der Scheduler-Task. Einmal täglich genügt: Der Takt der Vorlagen ist
-- tagesgenau, nicht stundengenau.
INSERT IGNORE INTO `cron_tasks`
    (`name`, `label`, `description`, `handler_class`, `frequency_minutes`, `enabled`, `run_in_background`, `max_runtime_seconds`)
VALUES
    ('recurring_tickets', 'Wiederkehrende Tickets',
     'Legt Tickets aus den Vorlagen für regelmäßige Arbeiten an, sobald ihr Termin erreicht ist.',
     'OpenNIT\\Cron\\Handlers\\RecurringTicketHandler', 1440, 1, 0, 120);