diff --git a/migrations/007_cleanup_timesheets.php b/migrations/007_cleanup_timesheets.php new file mode 100644 index 0000000000000000000000000000000000000000..01d6f74903d7a2842a05326b00914d53d39eb855 --- /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 72374888d8eabc417cc2da30bfb75d6c8fdd95d8..7900eea8ed2abbd5f19af16c8fecdcaf21e66ecf 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 fa13dc8539858210594496efec572c9cb549334f..74a8553aa41ff4b2c2fe1d093142a3866f127345 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 a988f3c9d36048f9aed2394bf1f0d27b022d4734..b452db31cd2c62eed4f28c863b3af6a1b5e7a92a 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);