Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
UpdateOrganizationProfileAction
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 1
 execute
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3declare(strict_types=1);
4
5namespace ImovelZapAi\Organizations\Application\Actions;
6
7use ImovelZapAi\Organizations\Infrastructure\Persistence\Eloquent\OrganizationSettingsModel;
8use ImovelZapAi\Tenancy\Infrastructure\Persistence\Eloquent\TenantModel;
9
10final class UpdateOrganizationProfileAction
11{
12    /**
13     * @param  array{
14     *     name?: string,
15     *     trade_name?: string|null,
16     *     legal_name?: string|null,
17     *     document?: string|null,
18     *     creci?: string|null,
19     *     email?: string|null,
20     *     phone?: string|null,
21     *     whatsapp?: string|null,
22     *     website?: string|null,
23     *     cep?: string|null,
24     *     street?: string|null,
25     *     number?: string|null,
26     *     complement?: string|null,
27     *     district?: string|null,
28     *     city?: string|null,
29     *     state?: string|null,
30     *     timezone?: string,
31     *     locale?: string,
32     *     currency?: string,
33     *     about?: string|null,
34     * }  $data
35     */
36    public function execute(string $tenantId, array $data): OrganizationSettingsModel
37    {
38        $tenant = TenantModel::query()->findOrFail($tenantId);
39
40        if (isset($data['name']) && is_string($data['name']) && trim($data['name']) !== '') {
41            $tenant->forceFill(['name' => trim($data['name'])])->save();
42        }
43
44        /** @var OrganizationSettingsModel $settings */
45        $settings = OrganizationSettingsModel::query()->firstOrCreate(
46            ['tenant_id' => $tenantId],
47            [
48                'trade_name' => $tenant->name,
49                'timezone' => config('organizations.default_timezone', 'America/Sao_Paulo'),
50                'locale' => 'pt_BR',
51                'currency' => 'BRL',
52            ],
53        );
54
55        $settings->forceFill([
56            'trade_name' => $data['trade_name'] ?? $settings->trade_name,
57            'legal_name' => $data['legal_name'] ?? $settings->legal_name,
58            'document' => $data['document'] ?? $settings->document,
59            'creci' => $data['creci'] ?? $settings->creci,
60            'email' => $data['email'] ?? $settings->email,
61            'phone' => $data['phone'] ?? $settings->phone,
62            'whatsapp' => $data['whatsapp'] ?? $settings->whatsapp,
63            'website' => $data['website'] ?? $settings->website,
64            'cep' => $data['cep'] ?? $settings->cep,
65            'street' => $data['street'] ?? $settings->street,
66            'number' => $data['number'] ?? $settings->number,
67            'complement' => $data['complement'] ?? $settings->complement,
68            'district' => $data['district'] ?? $settings->district,
69            'city' => $data['city'] ?? $settings->city,
70            'state' => isset($data['state']) ? strtoupper((string) $data['state']) : $settings->state,
71            'timezone' => $data['timezone'] ?? $settings->timezone,
72            'locale' => $data['locale'] ?? $settings->locale,
73            'currency' => $data['currency'] ?? $settings->currency,
74            'about' => $data['about'] ?? $settings->about,
75        ])->save();
76
77        return $settings->fresh() ?? $settings;
78    }
79}