feat: bật/tắt yêu cầu hoàn tất hồ sơ, xoá dịch vụ kèm đơn/hoá đơn, sync tên VM đã gán

- setting.require_complete_profile (mặc định bật), trả qua GET v1/setting
- bulkDeleteServices xoá mềm invoice nâng cấp + order mồ côi (ServiceOrderRecorder::discardOrder)
- createService trỏ dịch vụ sang order mới thì bỏ order cũ
- SyncVirtualMachine cập nhật name + gắn virtual_machine_id cho module_vmware

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
baodev0
2026-10-15 08:04:02 +07:00
co-authored by Claude Opus 5.5
parent bf78f3b810
commit 0bd15f6018
9 changed files with 198 additions and 9 deletions
+12 -1
View File
@@ -27,7 +27,8 @@ class PublicSettingTest extends TestCase
->getJson('/v1/setting')
->assertOk()
->assertJsonPath('data.title', 'Portal')
->assertJsonPath('data.brand_color', '#EF6824');
->assertJsonPath('data.brand_color', '#EF6824')
->assertJsonPath('data.require_complete_profile', true);
$admin = $this->getJson('/api/v1/settings/public')->assertOk();
@@ -39,4 +40,14 @@ class PublicSettingTest extends TestCase
$this->assertStringNotContainsString('admin@example.com', $body);
}
}
public function test_client_setting_reflects_disabled_profile_completion(): void
{
Setting::updateOrCreate(['key' => 'setting'], ['value' => json_encode(['require_complete_profile' => false])]);
$this->withHeaders(['x-access-token' => $this->buildClientAccessToken()])
->getJson('/v1/setting')
->assertOk()
->assertJsonPath('data.require_complete_profile', false);
}
}