Files
2023-05-26 19:02:46 +03:00

93 lines
2.3 KiB
PHP

<?php
namespace App\Transformers;
use App\Models\Company;
use App\Models\CompanyModule;
use Illuminate\Support\Facades\Crypt;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
class CompanyTransformer extends TransformerAbstract
{
/**
* List of all default includes
*/
protected array $defaultIncludes = [
'company_module'
];
/**
* List of all possible includes
* @var array|string[]
*/
protected array $availableIncludes = [
'segments',
'last_order',
'identification',
];
public function transform(Company $company): array
{
$companyModule = $company->companyModules()->first();
$hasConfirmedOrders = checkIfHasConfirmedOrders($company);
return [
'id' => $company->id,
'hash_id' => Crypt::encryptString($company->id),
'name' => $company->name,
'debtor' => $company->debtor,
'reference' => $company->reference,
'type' => $company->type,
'business_type' => (int)$company->business_type,
'status' => $company->status,
'created_at' => $company->created_at->format('d-m-Y'),
'order_count' => $companyModule->orders()->count(),
'has_confirmed_order' => $hasConfirmedOrders,
];
}
/**
* Include Contact
*
* @param Company $company
* @return Item
*/
public function includeContact(Company $company): Item
{
$contact = $company->contacts();
return $this->item($contact->first(), new ContactTransformer());
}
/**
* add Employee to owner
* @param Company $company
* @return Item
*/
public function includeEmployee(Company $company): Item
{
$companyModule = $company->companyModules()->first();
$employee = $companyModule->employees()->first();
return $this->item($employee, new UserTransformer());
}
/**
* Include a company Module to the Owner Object
* @param Company $company
* @return Item
*/
public function includeCompanyModule(Company $company): Item
{
$companyModule = $company->companyModules()->first();
return $this->item($companyModule, new CompanyModuleTransformer());
}
}