'required|is_natural_no_zero', 'invoice_id' => 'required|is_natural_no_zero', 'user_id' => 'permit_empty|is_natural_no_zero', 'used_at' => 'valid_date', 'school_year' => 'required|string|max_length[9]', ]; protected $validationMessages = [ 'voucher_id' => [ 'required' => 'Voucher ID is required.' ], 'invoice_id' => [ 'required' => 'Invoice ID is required.' ] ]; public function getTotalDiscountByParentIdAndSchoolYear(int $parentId, string $schoolYear): float { $db = \Config\Database::connect(); $amountExpression = $db->fieldExists('applied_discount_cents', 'discount_usages') ? 'COALESCE(SUM(du.applied_discount_cents),0) / 100' : 'COALESCE(SUM(du.discount_amount),0)'; $result = $db->table('discount_usages du') ->select($amountExpression . ' AS total_discount', false) ->join('invoices i', 'du.invoice_id = i.id') ->where('i.parent_id', $parentId) ->where('i.school_year', $schoolYear) ->get() ->getRowArray(); return $result && isset($result['total_discount']) ? (float) $result['total_discount'] : 0.00; } }