From 983c2af2efd4cac40fbc2f7cb29dd5f3dc3aecbf Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Wed, 13 Nov 2024 16:48:37 +0100 Subject: [PATCH] clean up orphaned entries, fixes #75 and #77 --- migrations/007_cleanup_timesheets.php | 39 +++++++++++++++++++++++++ models/StundenzettelContract.class.php | 6 ++++ models/StundenzettelRecord.class.php | 3 +- models/StundenzettelTimesheet.class.php | 6 ++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 migrations/007_cleanup_timesheets.php diff --git a/migrations/007_cleanup_timesheets.php b/migrations/007_cleanup_timesheets.php new file mode 100644 index 0000000..01d6f74 --- /dev/null +++ b/migrations/007_cleanup_timesheets.php @@ -0,0 +1,39 @@ +<?php + +class CleanupTimesheets extends Migration +{ + public function description() + { + return 'remove orphaned entries from stundenzettel_timesheets'; + } + + public function up() + { + $db = DBManager::get(); + + $sql = 'ALTER TABLE stundenzettel_contracts ADD KEY inst_id (inst_id)'; + $db->exec($sql); + + $sql = 'ALTER TABLE stundenzettel_timesheets ADD KEY contract_id (contract_id)'; + $db->exec($sql); + + $sql = 'DELETE FROM stundenzettel_timesheets + WHERE contract_id NOT IN (SELECT id FROM stundenzettel_contracts)'; + $db->exec($sql); + + $sql = 'DELETE FROM stundenzettel_records + WHERE timesheet_id NOT IN (SELECT id FROM stundenzettel_timesheets)'; + $db->exec($sql); + } + + public function down() + { + $db = DBManager::get(); + + $sql = 'ALTER TABLE stundenzettel_contracts DROP KEY inst_id'; + $db->exec($sql); + + $sql = 'ALTER TABLE stundenzettel_timesheets DROP KEY contract_id'; + $db->exec($sql); + } +} diff --git a/models/StundenzettelContract.class.php b/models/StundenzettelContract.class.php index 7237488..7900eea 100644 --- a/models/StundenzettelContract.class.php +++ b/models/StundenzettelContract.class.php @@ -36,6 +36,12 @@ class StundenzettelContract extends \SimpleORMap 'foreign_key' => 'inst_id' ]; + $config['has_many']['timesheets'] = [ + 'class_name' => 'StundenzettelTimesheet', + 'assoc_foreign_key' => 'contract_id', + 'on_delete' => 'delete' + ]; + $config['additional_fields']['default_workday_time']['get'] = function ($item) { $workday_hours = $item->contract_hours / 4.348 / 5; $hours = floor($workday_hours); diff --git a/models/StundenzettelRecord.class.php b/models/StundenzettelRecord.class.php index fa13dc8..74a8553 100644 --- a/models/StundenzettelRecord.class.php +++ b/models/StundenzettelRecord.class.php @@ -26,7 +26,8 @@ class StundenzettelRecord extends \SimpleORMap $config['belongs_to']['timesheet'] = [ 'class_name' => 'StundenzettelTimesheet', - 'foreign_key' => 'timesheet_id',]; + 'foreign_key' => 'timesheet_id' + ]; $config['registered_callbacks']['before_store'][] = 'before_store'; diff --git a/models/StundenzettelTimesheet.class.php b/models/StundenzettelTimesheet.class.php index a988f3c..b452db3 100644 --- a/models/StundenzettelTimesheet.class.php +++ b/models/StundenzettelTimesheet.class.php @@ -29,6 +29,12 @@ class StundenzettelTimesheet extends \SimpleORMap 'foreign_key' => 'approver_id' ]; + $config['has_many']['records'] = [ + 'class_name' => 'StundenzettelRecord', + 'assoc_foreign_key' => 'timesheet_id', + 'on_delete' => 'delete' + ]; + $config['additional_fields']['timesheet_balance']['get'] = function ($item) { if ($item->month_completed) { return $item->sum - ($item->contract->contract_hours * 3600); -- GitLab