| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace App\Traits;
- use App\Enums\PartnerAgreementStatusEnum;
- use App\Enums\UserStatusEnum;
- use App\Enums\UserTypeEnum;
- use App\Models\PartnerAgreement;
- use App\Models\User;
- use Illuminate\Support\Facades\Hash;
- use Illuminate\Support\Str;
- trait ImportsPartners
- {
- private function upsertPartner(string $companyName, array $data): array
- {
- $partner = PartnerAgreement::withTrashed()
- ->whereRaw('LOWER(TRIM(company_name)) = LOWER(TRIM(?))', [$companyName])
- ->first();
- if ($partner) {
- if ($partner->trashed()) {
- $partner->restore();
- }
- $partner->update(array_merge($data, [
- 'status' => PartnerAgreementStatusEnum::ACTIVE,
- ]));
- return [$partner->fresh(), false];
- }
- $user = $this->findOrCreateUser($companyName);
- $partner = PartnerAgreement::create(array_merge($data, [
- 'company_name' => $companyName,
- 'user_id' => $user->id,
- 'status' => PartnerAgreementStatusEnum::ACTIVE,
- ]));
- return [$partner, true];
- }
- private function findOrCreateUser(string $companyName): User
- {
- $slug = Str::slug($companyName);
- $email = "{$slug}@serprati.com";
- $counter = 2;
- while (User::where('email', $email)->exists()) {
- $email = "{$slug}{$counter}@serprati.com";
- $counter++;
- }
- return User::create([
- 'name' => $companyName,
- 'email' => $email,
- 'password' => Hash::make('Serprati2026'),
- 'type' => UserTypeEnum::PARCEIRO,
- 'status' => UserStatusEnum::ACTIVE,
- ]);
- }
- private function parsePrice(?string $value): ?float
- {
- if (empty($value)) {
- return null;
- }
- $cleaned = preg_replace('/[^\d,]/', '', (string) $value);
- $cleaned = str_replace(',', '.', $cleaned);
- return is_numeric($cleaned) ? (float) $cleaned : null;
- }
- private function cell(mixed $value): string
- {
- return trim(preg_replace('/\s+/', ' ', (string) ($value ?? '')));
- }
- private function firstLine(mixed $value): string
- {
- return trim(explode("\n", (string) ($value ?? ''))[0]);
- }
- }
|