feat: add domain registration form and email notifications

- Create a new Blade view for domain registration (`registrant-tochuc.blade.php`) to capture organization and manager details.
- Implement email templates for new domain orders for both admin (`domain-order-new.blade.php`) and customers (`domain-order-received.blade.php`).
- Add CSV exports for client and domain data.
- Introduce tests for customer mass assignment, password reset, login throttling, and permission gating.
- Ensure service renewals use current pricing and validate ownership for virtual machines.
- Validate mass assignment behavior in service model.
This commit is contained in:
baodev0
2026-08-22 17:30:55 +07:00
parent eec2c5906e
commit c377c7e195
58 changed files with 3063 additions and 418 deletions
@@ -52,6 +52,30 @@ class CustomerRepository extends BaseRepository implements CustomerRepositoryInt
if (isset($data['phone']) && ! empty($data['phone'])) {
$model = $model->where("phone", "LIKE", "%" . $data['phone'] . "%");
}
if (isset($data['company']) && ! empty($data['company'])) {
$model = $model->where('company', 'LIKE', '%' . $data['company'] . '%');
}
if (isset($data['city']) && ! empty($data['city'])) {
$model = $model->where('city', 'LIKE', '%' . $data['city'] . '%');
}
if (isset($data['country']) && ! empty($data['country'])) {
$model = $model->where('country', 'LIKE', '%' . $data['country'] . '%');
}
if (isset($data['note']) && ! empty($data['note'])) {
$model = $model->where('note', 'LIKE', '%' . $data['note'] . '%');
}
if (isset($data['total_min']) && $data['total_min'] !== '') {
$model = $model->where('total', '>=', (int) $data['total_min']);
}
if (isset($data['total_max']) && $data['total_max'] !== '') {
$model = $model->where('total', '<=', (int) $data['total_max']);
}
if (isset($data['created_from']) && ! empty($data['created_from'])) {
$model = $model->whereDate('created_at', '>=', $data['created_from']);
}
if (isset($data['created_to']) && ! empty($data['created_to'])) {
$model = $model->whereDate('created_at', '<=', $data['created_to']);
}
if (isset($data['service_type']) && ! empty($data['service_type'])) {
$types = is_array($data['service_type'])
? $data['service_type']