transform($qb_data); } public function ninjaToQb(): void { // Reserved for Ninja → QB sync when needed. } /** * @param mixed $data IPPCompanyInfo object or array * @return array{quickbooks: array, settings: array} */ public function transform(mixed $data): array { $addr = $this->pickAddress($data); $country_raw = data_get($addr, 'Country') ?? data_get($addr, 'CountryCode') ?? data_get($data, 'Country'); $country_id = $this->resolveCountry($country_raw); $quickbooks = [ 'companyName' => data_get($data, 'CompanyName', '') ?: data_get($data, 'LegalName', ''), ]; $settings = [ 'address1' => data_get($addr, 'Line1', ''), 'address2' => data_get($addr, 'Line2', ''), 'city' => data_get($addr, 'City', ''), 'state' => data_get($addr, 'CountrySubDivisionCode', ''), 'postal_code' => data_get($addr, 'PostalCode', ''), 'country_id' => $country_id, 'phone' => $this->pickPhone($data), 'email' => $this->pickEmail($data), 'website' => data_get($data, 'WebAddr', '') ?: data_get($data, 'CompanyURL', ''), 'timezone_id' => $this->resolveTimezone(data_get($data, 'DefaultTimeZone')), ]; return [ 'quickbooks' => $quickbooks, 'settings' => $settings, ]; } /** * Prefer CompanyAddr, then LegalAddr, then CustomerCommunicationAddr. * * @param mixed $data * @return object|array|null */ private function pickAddress(mixed $data) { $addr = data_get($data, 'CompanyAddr') ?? data_get($data, 'LegalAddr') ?? data_get($data, 'CustomerCommunicationAddr'); return is_object($addr) ? $addr : (is_array($addr) ? $addr : []); } private function pickPhone(mixed $data): string { $phone = data_get($data, 'PrimaryPhone.FreeFormNumber'); return is_string($phone) ? $phone : ''; } private function pickEmail(mixed $data): string { $email = data_get($data, 'Email.Address') ?? data_get($data, 'CustomerCommunicationEmailAddr.Address') ?? data_get($data, 'CompanyEmailAddr'); return is_string($email) ? $email : ''; } }