2022-06-01 10:15:55 +03:00

317 lines
9.5 KiB
PHP

<?php
namespace App\Abstracts\View\Components\Contacts;
use App\Abstracts\View\Component;
use App\Traits\ViewComponents;
abstract class Show extends Component
{
use ViewComponents;
public const OBJECT_TYPE = 'contact';
public const DEFAULT_TYPE = 'customer';
public const DEFAULT_PLURAL_TYPE = 'customers';
/* -- Main Start -- */
public $type;
public $contact;
public $model;
public $permissionCreate;
public $permissionUpdate;
public $permissionDelete;
/* -- Main End -- */
/* -- Buttons Start -- */
public $hideNewDropdown;
public $hideButtonDocument;
public $hideButtonTransaction;
public $permissionCreateDocument;
public $permissionCreateTransaction;
public $routeButtonDocument;
public $routeButtonTransaction;
public $textDocument;
public $textTransaction;
public $hideButtonEdit;
public $routeButtonEdit;
public $hideActionsDropdown;
public $hideButtonDuplicate;
public $routeButtonDuplicate;
public $hideButtonDelete;
public $routeButtonDelete;
public $textDeleteModal;
/* -- Buttons End -- */
/* -- Profile Start -- */
public $hideTopLeft;
public $hideAvatar;
public $hideEmail;
public $hidePhone;
public $hideTopRight;
public $hideOverdue;
public $hideOpen;
public $hidePaid;
public $hideBottomLeft;
public $hideAddress;
public $hideTaxNumber;
public $hideWebsite;
public $hideReference;
public $hideUser;
public $hideBottomRight;
/* -- Profile End -- */
/**
* Create a new component instance.
*
* @return void
*/
public function __construct(
string $type, $model = false, $contact = false,
string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '',
bool $hideNewDropdown = false, bool $hideButtonDocument = false, $hideButtonTransaction = false,
string $permissionCreateDocument = '', string $permissionCreateTransaction = '',
$routeButtonDocument = '', $routeButtonTransaction = '',
string $textDocument = '', string $textTransaction = '',
bool $hideButtonEdit = false, $routeButtonEdit = '',
bool $hideActionsDropdown = false, bool $hideButtonDuplicate = false, $routeButtonDuplicate = '',
bool $hideButtonDelete = false, $routeButtonDelete = '', $textDeleteModal = '',
bool $hideTopLeft = false, bool $hideAvatar = false, bool $hideEmail = false, bool $hidePhone = false,
bool $hideTopRight = false, bool $hideOverdue = false, bool $hideOpen = false, bool $hidePaid = false,
bool $hideBottomLeft = false, bool $hideAddress = false, bool $hideTaxNumber = false , bool $hideWebsite = false, bool $hideReference = false, bool $hideUser = false,
bool $hideBottomRight = false
) {
/* -- Main Start -- */
$this->type = $type;
$this->model = ! empty($model) ? $model : $contact;
$this->contact = $this->model;
$this->permissionCreate = $this->getPermissionCreate($type, $permissionCreate);
$this->permissionUpdate = $this->getPermissionUpdate($type, $permissionUpdate);
$this->permissionDelete = $this->getPermissionDelete($type, $permissionDelete);
/* -- Main End -- */
/* -- Buttons Start -- */
$this->hideNewDropdown = $hideNewDropdown;
$this->hideButtonDocument = $hideButtonDocument;
$this->hideButtonTransaction = $hideButtonTransaction;
$this->permissionCreateDocument = $this->getPermissionCreateDocument($type, $permissionCreateDocument);
$this->permissionCreateTransaction = $this->getPermissionCreateTransaction($type, $permissionCreateTransaction);
$this->routeButtonDocument = $this->getCreateDocumentRoute($type, $routeButtonDocument);
$this->routeButtonTransaction = $this->getCreateTransactionRoute($type, $routeButtonTransaction);
$this->textDocument = $this->getTextDocument($type, $textDocument);
$this->textTransaction = $this->getTextTransaction($type, $textTransaction);
$this->hideButtonEdit = $hideButtonEdit;
$this->routeButtonEdit = $this->getEditRoute($type, $routeButtonEdit);
$this->hideActionsDropdown = $hideActionsDropdown;
$this->hideButtonDuplicate = $hideButtonDuplicate;
$this->routeButtonDuplicate = $this->getDuplicateRoute($type, $routeButtonDuplicate);
$this->hideButtonDelete = $hideButtonDelete;
$this->routeButtonDelete = $this->getDeleteRoute($type, $routeButtonDelete);
$this->textDeleteModal = $this->getTextDeleteModal($type, $textDeleteModal);
/* -- Buttons End -- */
/* -- Profile Start -- */
$this->hideProfile = $hideTopLeft;
$this->hideAvatar = $hideAvatar;
$this->hideEmail = $hideEmail;
$this->hidePhone = $hidePhone;
$this->hideDetails = $hideTopRight;
$this->hideOverdue = $hideOverdue;
$this->hideOpen = $hideOpen;
$this->hidePaid = $hidePaid;
$this->hideSummary = $hideBottomLeft;
$this->hideAddress = $hideAddress;
$this->hideTaxNumber = $hideTaxNumber;
$this->hideWebsite = $hideWebsite;
$this->hideReference = $hideReference;
$this->hideUser = $hideUser;
$this->hideContent = $hideBottomRight;
/* -- Profile End -- */
}
protected function getPermissionCreateDocument($type, $permissionCreateDocument)
{
if (! empty($permissionCreateDocument)) {
return $permissionCreateDocument;
}
$document_type = config('type.contact.' . $type . '.document_type', 'invoice');
$permission = '';
$config_key = 'create';
// if set config trasnlation config_key
if ($permission = config('type.document.' . $document_type . '.permission.' . $config_key)) {
return $permission;
}
$alias = config('type.document.' . $document_type . '.alias');
$group = config('type.document.' . $document_type . '.group');
$prefix = config('type.document.' . $document_type . '.permission.prefix');
$permission = $config_key . '-';
// if use module set module alias
if (! empty($alias)) {
$permission .= $alias . '-';
}
// if controller in folder it must
if (! empty($group)) {
$permission .= $group . '-';
}
$permission .= $prefix;
$permissionCreateDocument = $permission;
return $permissionCreateDocument;
}
protected function getPermissionCreateTransaction($type, $permissionCreateTransaction)
{
if (! empty($permissionCreateTransaction)) {
return $permissionCreateTransaction;
}
$permissionCreateTransaction = 'create-banking-transactions';
return $permissionCreateTransaction;
}
protected function getCreateDocumentRoute($type, $routeButtonDocument)
{
if (! empty($routeButtonDocument)) {
return $routeButtonDocument;
}
$prefix = config('type.contact.' . $type . '.route.prefix');
$document_type = config('type.contact.' . $type . '.document_type');
return $prefix . '.create-' . $document_type;
}
protected function getCreateTransactionRoute($type, $routeButtonDocument)
{
if (! empty($routeButtonDocument)) {
return $routeButtonDocument;
}
$prefix = config('type.contact.' . $type . '.route.prefix');
$transaction_type = config('type.contact.' . $type . '.transaction_type');
return $prefix . '.create-' . $transaction_type;
}
protected function getTextDocument($type, $textDocument)
{
if (! empty($textDocument)) {
return $textDocument;
}
$document_type = config('type.contact.' . $type . '.document_type');
switch ($document_type) {
case 'invoice':
$text = 'general.invoices';
break;
case 'bill':
$text = 'general.bills';
break;
default:
$text = config('type.contact.' . $type . '.translation.prefix') . '.' . config('type.contact.' . $type . '.route.prefix');
}
return $text;
}
protected function getTextTransaction($type, $textTransaction)
{
if (! empty($textTransaction)) {
return $textTransaction;
}
$document_type = config('type.contact.' . $type . '.document_type');
switch ($document_type) {
case 'invoice':
$text = 'general.incomes';
break;
case 'bill':
$text = 'general.expenses';
break;
default:
$text = config('type.contact.' . $type . '.translation.prefix') . '.' . config('type.contact.' . $type . '.transaction_type') . 's';
}
return $text;
}
protected function getTextDeleteModal($type, $textDeleteModal)
{
if (! empty($textDeleteModal)) {
return $textDeleteModal;
}
$document_type = config('type.contact.' . $type . '.document_type');
switch ($document_type) {
case 'invoice':
$text = 'general.incomes';
break;
case 'bill':
$text = 'general.expenses';
break;
default:
$text = config('type.contact.' . $type . '.translation.prefix') . '.' . config('type.contact.' . $type . '.transaction_type') . 's';
}
return $text;
}
}