QR_code_generator/app/Services/DaDataService.php

87 lines
3.3 KiB
PHP

<?php
namespace App\Services;
use App\Models\Companies\Company;
use Exception;
use Illuminate\Support\Facades\Storage;
use MoveMoveIo\DaData\Enums\BranchType;
use MoveMoveIo\DaData\Enums\CompanyType as DaDataCompanyType;
use MoveMoveIo\DaData\Facades\DaDataCompany;
class DaDataService {
public string $inn;
public ?string $kpp;
public function __construct($inn, $kpp = null) {
$this->inn = $inn;
$this->kpp = $kpp;
}
public function saveToCompany(Company $company): Company {
if ($result = $this->getCompanyData()) {
if (!empty($result['company'])) $company->update($result['company']);
if (!empty($result['address'])) {
$company->legalAddress->update($result['address']);
$company->actualAddress->update($result['address']);
}
}
return $company;
}
public function getCompanyData() {
$result = [];
$data = $this->getSavedResponse();
if (!$data && is_numeric($this->inn)) {
try {
$data = DaDataCompany::id($this->inn, 1, $this->kpp, BranchType::MAIN, DaDataCompanyType::LEGAL);
$this->saveResponse($data);
} catch (Exception $exception) {
echo 'INN: ' . $this->inn . ' error: ' . $exception->getMessage() . "\n";
return false;
}
}
if ($data && is_array($data) && !empty($data['suggestions'])) {
$data = $data['suggestions'];
if (!empty($data[0])) $data = $data[0];
$data = $data['data'];
$result['company'] = [
'name' => $data['name']['short_with_opf'] ?? null,
'full_name' => $data['name']['full_with_opf'] ?? null,
'kpp' => $data['kpp'] ?? null,
'ogrn' => $data['ogrn'] ?? null,
'okpo' => $data['okpo'] ?? null,
'okved' => $data['okved'] ?? null
];
$result['address'] = [
'full' => $data['address']['unrestricted_value'] ?? null,
'postcode' => $data['address']['data']['postal_code'] ?? null,
'country' => $data['address']['data']['country'] ?? null,
'region' => $data['address']['data']['region'] ?? null,
'city' => $data['address']['data']['city'] ?? null,
'district' => $data['address']['data']['federal_district'] ?? null,
'street' => $data['address']['data']['street_with_type'] ?? null,
'house' => "{$data['address']['data']['house_type_full']} {$data['address']['data']['house']}",
'block' => "{$data['address']['data']['block_type_full']} {$data['address']['data']['block']}",
'office' => "{$data['address']['data']['flat_type_full']} {$data['address']['data']['flat']}"
];
}
return $result;
}
public function saveResponse($data) {
Storage::put($this->makePath(), collect($data)->toJson());
}
public function getSavedResponse() {
$path = $this->makePath();
return Storage::exists($path) ? json_decode(Storage::get("dadata/{$this->inn}.json"), true) : null;
}
public function makePath(): string {
return "dadata/{$this->inn}.json";
}
}