| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData;
- use App\Data\Pagarme\PagarmeData;
- use Illuminate\Support\Str;
- final readonly class PagarmeRecipientBankAccountData extends PagarmeData
- {
- public function __construct(
- public string $holderName,
- public string $holderType,
- public string $holderDocument,
- public string $bank,
- public string $branchNumber,
- public ?string $branchCheckDigit,
- public string $accountNumber,
- public string $accountCheckDigit,
- public string $type,
- ) {
- self::requireFilled($this->holderName, 'holder_name');
- self::requireIn($this->holderType, ['individual', 'company'], 'holder_type');
- self::requireFilled($this->holderDocument, 'holder_document');
- self::requireFilled($this->bank, 'bank');
- self::requireFilled($this->branchNumber, 'branch_number');
- self::requireFilled($this->accountNumber, 'account_number');
- self::requireFilled($this->accountCheckDigit, 'account_check_digit');
- self::requireFilled($this->type, 'type');
- }
- public static function fromArray(array $payload): self
- {
- return new self(
- holderName: self::normalizeHolderName($payload['holder_name']),
- holderType: $payload['holder_type'],
- holderDocument: self::digits($payload['holder_document']),
- bank: $payload['bank'],
- branchNumber: $payload['branch_number'],
- branchCheckDigit: $payload['branch_check_digit'] ?? null,
- accountNumber: $payload['account_number'],
- accountCheckDigit: $payload['account_check_digit'],
- type: $payload['type'],
- );
- }
- public function toArray(): array
- {
- return $this->filterFilledRecursive([
- 'holder_name' => $this->holderName,
- 'holder_type' => $this->holderType,
- 'holder_document' => $this->holderDocument,
- 'bank' => $this->bank,
- 'branch_number' => $this->branchNumber,
- 'branch_check_digit' => $this->branchCheckDigit,
- 'account_number' => $this->accountNumber,
- 'account_check_digit' => $this->accountCheckDigit,
- 'type' => $this->type,
- ]);
- }
- //
- private static function normalizeHolderName(string $holderName): string
- {
- $holderName = trim(preg_replace('/\s+/', ' ', $holderName) ?? '');
- if (Str::length($holderName) < 30) {
- return $holderName;
- }
- $parts = explode(' ', $holderName);
- if (count($parts) >= 3) {
- $firstName = array_shift($parts);
- $lastName = array_pop($parts);
- $initials = array_map(
- static fn (string $part): string => Str::upper(Str::substr($part, 0, 1)),
- $parts
- );
- $abbreviated = trim($firstName.' '.implode(' ', $initials).' '.$lastName);
- if (Str::length($abbreviated) < 30) {
- return $abbreviated;
- }
- $firstAndLast = trim($firstName.' '.$lastName);
- if (Str::length($firstAndLast) < 30) {
- return $firstAndLast;
- }
- }
- return Str::limit($holderName, 29, '');
- }
- }
|