diff --git a/app/Http/Controllers/RenewalController.php b/app/Http/Controllers/RenewalController.php index 08f8d83c..143d94cb 100644 --- a/app/Http/Controllers/RenewalController.php +++ b/app/Http/Controllers/RenewalController.php @@ -585,15 +585,11 @@ public function export(Request $request) { $export = Task::renewals()->where('invoice_step', 1) ->orderBy('pmal_cli.actor_id')->get(); - $export->transform(function ($ren) { + $export = $export->map(function ($ren) { $this->adjustFees($ren, $cost, $fee); $ren->cost = $cost; $ren->fee = $fee; - // Convert to array and remove any empty arrays - $data = $ren->toArray(); - return array_filter($data, function($value) { - return !is_array($value) || !empty($value); - }); + return $ren->getAttributes(); }); $captions = config('renewal.invoice.captions'); diff --git a/database/migrations/2025_04_23_000001_update_task_detail_renewal_json.php b/database/migrations/2025_04_23_000001_update_task_detail_renewal_json.php new file mode 100644 index 00000000..8d1a51a2 --- /dev/null +++ b/database/migrations/2025_04_23_000001_update_task_detail_renewal_json.php @@ -0,0 +1,115 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; + +class UpdateTaskDetailRenewalJson extends Migration +{ + public function up() + { + // Update procedures to wrap RYear in JSON + DB::statement("DROP PROCEDURE IF EXISTS insert_recurring_renewals"); + DB::statement(" + CREATE PROCEDURE insert_recurring_renewals( + IN P_trigger_id INT, + IN P_rule_id INT, + IN P_base_date DATE, + IN P_responsible CHAR(16), + IN P_user CHAR(16) + ) + proc: BEGIN + DECLARE FirstRenewal, RYear INT; + DECLARE BaseDate, StartDate, DueDate, ExpiryDate DATE DEFAULT NULL; + DECLARE Origin CHAR(2) DEFAULT NULL; + + SELECT ebase.event_date, estart.event_date, country.renewal_first, matter.expire_date, matter.origin + INTO BaseDate, StartDate, FirstRenewal, ExpiryDate, Origin + FROM country + JOIN matter ON country.iso = matter.country + JOIN event estart ON estart.matter_id = matter.id AND estart.id = P_trigger_id + JOIN event ebase ON ebase.matter_id = matter.id + WHERE country.renewal_start = estart.code + AND country.renewal_base = ebase.code; + + IF StartDate IS NULL THEN + LEAVE proc; + END IF; + SET BaseDate = LEAST(BaseDate, P_base_date); + SET RYear = ABS(FirstRenewal); + renloop: WHILE RYear <= 20 DO + IF (FirstRenewal > 0) THEN + SET DueDate = BaseDate + INTERVAL RYear - 1 YEAR; + ELSE + SET DueDate = StartDate + INTERVAL RYear - 1 YEAR; + END IF; + IF DueDate > ExpiryDate THEN + LEAVE proc; + END IF; + IF DueDate < StartDate THEN + SET DueDate = StartDate; + END IF; + IF (DueDate < Now() - INTERVAL 6 MONTH AND Origin != 'WO') OR (DueDate < (Now() - INTERVAL 19 MONTH) AND Origin = 'WO') THEN + SET RYear = RYear + 1; + ITERATE renloop; + END IF; + INSERT INTO task (trigger_id, code, due_date, detail, rule_used, assigned_to, creator, created_at, updated_at) + VALUES (P_trigger_id, 'REN', DueDate, JSON_OBJECT('en', RYear), P_rule_id, P_responsible, P_user, Now(), Now()); + SET RYear = RYear + 1; + END WHILE; + END"); + } + + public function down() + { + // Restore original procedure + DB::statement("DROP PROCEDURE IF EXISTS insert_recurring_renewals"); + DB::statement(" + CREATE PROCEDURE insert_recurring_renewals( + IN P_trigger_id INT, + IN P_rule_id INT, + IN P_base_date DATE, + IN P_responsible CHAR(16), + IN P_user CHAR(16) + ) + proc: BEGIN + DECLARE FirstRenewal, RYear INT; + DECLARE BaseDate, StartDate, DueDate, ExpiryDate DATE DEFAULT NULL; + DECLARE Origin CHAR(2) DEFAULT NULL; + + SELECT ebase.event_date, estart.event_date, country.renewal_first, matter.expire_date, matter.origin + INTO BaseDate, StartDate, FirstRenewal, ExpiryDate, Origin + FROM country + JOIN matter ON country.iso = matter.country + JOIN event estart ON estart.matter_id = matter.id AND estart.id = P_trigger_id + JOIN event ebase ON ebase.matter_id = matter.id + WHERE country.renewal_start = estart.code + AND country.renewal_base = ebase.code; + + IF StartDate IS NULL THEN + LEAVE proc; + END IF; + SET BaseDate = LEAST(BaseDate, P_base_date); + SET RYear = ABS(FirstRenewal); + renloop: WHILE RYear <= 20 DO + IF (FirstRenewal > 0) THEN + SET DueDate = BaseDate + INTERVAL RYear - 1 YEAR; + ELSE + SET DueDate = StartDate + INTERVAL RYear - 1 YEAR; + END IF; + IF DueDate > ExpiryDate THEN + LEAVE proc; + END IF; + IF DueDate < StartDate THEN + SET DueDate = StartDate; + END IF; + IF (DueDate < Now() - INTERVAL 6 MONTH AND Origin != 'WO') OR (DueDate < (Now() - INTERVAL 19 MONTH) AND Origin = 'WO') THEN + SET RYear = RYear + 1; + ITERATE renloop; + END IF; + INSERT INTO task (trigger_id, code, due_date, detail, rule_used, assigned_to, creator, created_at, updated_at) + VALUES (P_trigger_id, 'REN', DueDate, RYear, P_rule_id, P_responsible, P_user, Now(), Now()); + SET RYear = RYear + 1; + END WHILE; + END"); + } +} \ No newline at end of file