756 lines
20 KiB
PHP
756 lines
20 KiB
PHP
<?php
|
|
|
|
namespace App\Traits;
|
|
|
|
use Akaunting\Module\Module;
|
|
use App\Events\Common\BulkActionsAdding;
|
|
use App\Traits\Modules;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\Str;
|
|
|
|
trait ViewComponents
|
|
{
|
|
use Modules;
|
|
|
|
public function setParentData()
|
|
{
|
|
$excludes = [
|
|
'componentName',
|
|
'attributes',
|
|
'except',
|
|
];
|
|
|
|
foreach ($this as $key => $value) {
|
|
if (in_array($key, $excludes)) {
|
|
continue;
|
|
}
|
|
|
|
$this->{$key} = $this->getParentData($key, $value);
|
|
}
|
|
}
|
|
|
|
public function getTextFromConfig($type, $config_key, $default_key = '', $trans_type = 'trans')
|
|
{
|
|
$translation = '';
|
|
|
|
// if set config translation config_key
|
|
if ($translation = config('type.' . static::OBJECT_TYPE . '.' . $type . '.translation.' . $config_key)) {
|
|
return $translation;
|
|
}
|
|
|
|
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
|
|
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.translation.prefix');
|
|
|
|
if (! empty($alias)) {
|
|
$alias .= '::';
|
|
}
|
|
|
|
// This magic trans key..
|
|
$translations = [
|
|
'general' => $alias . 'general.' . $default_key,
|
|
'prefix' => $alias . $prefix . '.' . $default_key,
|
|
'config_general' => $alias . 'general.' . $config_key,
|
|
'config_prefix' => $alias . $prefix . '.' . $config_key,
|
|
];
|
|
|
|
switch ($trans_type) {
|
|
case 'trans':
|
|
foreach ($translations as $trans) {
|
|
if (trans($trans) !== $trans) {
|
|
return $trans;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 'trans_choice':
|
|
foreach ($translations as $trans_choice) {
|
|
if (trans_choice($trans_choice, 1) !== $trans_choice) {
|
|
return $trans_choice;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return $translation;
|
|
}
|
|
|
|
public function getRouteFromConfig($type, $config_key, $config_parameters = [], $modal = false)
|
|
{
|
|
$route = '';
|
|
|
|
// if set config trasnlation config_key
|
|
if ($route = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.' . $config_key)) {
|
|
return $route;
|
|
}
|
|
|
|
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
|
|
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix');
|
|
|
|
// if use module set module alias
|
|
if (! empty($alias)) {
|
|
$route .= $alias . '.';
|
|
}
|
|
|
|
if ($modal == true) {
|
|
$route .= 'modals.';
|
|
}
|
|
|
|
if (! empty($prefix)) {
|
|
$route .= $prefix . '.';
|
|
}
|
|
|
|
$route .= $config_key;
|
|
|
|
try {
|
|
route($route, $config_parameters);
|
|
} catch (\Exception $e) {
|
|
try {
|
|
$route = Str::plural($type, 2) . '.' . $config_key;
|
|
|
|
route($route, $config_parameters);
|
|
} catch (\Exception $e) {
|
|
$route = '';
|
|
}
|
|
}
|
|
|
|
return $route;
|
|
}
|
|
|
|
public function getPermissionFromConfig($type, $config_key)
|
|
{
|
|
$permission = '';
|
|
|
|
// if set config trasnlation config_key
|
|
if ($permission = config('type.' . static::OBJECT_TYPE . '.' . $type . '.permission.' . $config_key)) {
|
|
return $permission;
|
|
}
|
|
|
|
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
|
|
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
|
|
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $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;
|
|
|
|
return $permission;
|
|
}
|
|
|
|
public function getHideFromConfig($type, $config_key)
|
|
{
|
|
$hide = false;
|
|
|
|
$hides = config('type.' . static::OBJECT_TYPE . '.' . $type . '.hide');
|
|
|
|
if (! empty($hides) && (in_array($config_key, $hides))) {
|
|
$hide = true;
|
|
}
|
|
|
|
return $hide;
|
|
}
|
|
|
|
public function getClassFromConfig($type, $config_key)
|
|
{
|
|
$class_key = 'type.' . $type . '.class.' . $config_key;
|
|
|
|
return config($class_key, '');
|
|
}
|
|
|
|
public function getCategoryFromConfig($type)
|
|
{
|
|
$category_type = '';
|
|
|
|
// if set config trasnlation config_key
|
|
if ($category_type = config('type.' . static::OBJECT_TYPE . '.' . $type . '.category_type')) {
|
|
return $category_type;
|
|
}
|
|
|
|
switch ($type) {
|
|
case 'bill':
|
|
case 'expense':
|
|
case 'purchase':
|
|
$category_type = 'expense';
|
|
break;
|
|
case 'item':
|
|
$category_type = 'item';
|
|
break;
|
|
case 'other':
|
|
$category_type = 'other';
|
|
break;
|
|
case 'transfer':
|
|
$category_type = 'transfer';
|
|
break;
|
|
default:
|
|
$category_type = 'income';
|
|
break;
|
|
}
|
|
|
|
return $category_type;
|
|
}
|
|
|
|
public function getScriptFromConfig($type, $config_key)
|
|
{
|
|
$script_key = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.' . $config_key, '');
|
|
|
|
return $script_key;
|
|
}
|
|
|
|
protected function getTextPage($type, $textPage)
|
|
{
|
|
if (! empty($textPage)) {
|
|
return $textPage;
|
|
}
|
|
|
|
$config_route_prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', static::DEFAULT_PLURAL_TYPE);
|
|
|
|
$page = str_replace('-', '_', $config_route_prefix);
|
|
|
|
$translation = $this->getTextFromConfig($type, 'page', $page);
|
|
|
|
if (! empty($translation)) {
|
|
return $translation;
|
|
}
|
|
|
|
return 'general.' . $page;
|
|
}
|
|
|
|
protected function getGroup($type, $group)
|
|
{
|
|
if (! empty($group)) {
|
|
return $group;
|
|
}
|
|
|
|
return config('type.' . static::OBJECT_TYPE . '.' . $type . '.group', static::DEFAULT_PLURAL_TYPE);
|
|
}
|
|
|
|
protected function getPage($type, $page)
|
|
{
|
|
if (! empty($page)) {
|
|
return $page;
|
|
}
|
|
|
|
return Str::plural($type);
|
|
}
|
|
|
|
protected function getPermissionCreate($type, $permissionCreate)
|
|
{
|
|
if (! empty($permissionCreate)) {
|
|
return $permissionCreate;
|
|
}
|
|
|
|
$permissionCreate = $this->getPermissionFromConfig($type, 'create');
|
|
|
|
return $permissionCreate;
|
|
}
|
|
|
|
protected function getPermissionUpdate($type, $permissionUpdate)
|
|
{
|
|
if (! empty($permissionUpdate)) {
|
|
return $permissionUpdate;
|
|
}
|
|
|
|
$permissionUpdate = $this->getPermissionFromConfig($type, 'update');
|
|
|
|
return $permissionUpdate;
|
|
}
|
|
|
|
protected function getPermissionDelete($type, $permissionDelete)
|
|
{
|
|
if (! empty($permissionDelete)) {
|
|
return $permissionDelete;
|
|
}
|
|
|
|
$permissionDelete = $this->getPermissionFromConfig($type, 'delete');
|
|
|
|
return $permissionDelete;
|
|
}
|
|
|
|
protected function getIndexRoute($type, $indexRoute)
|
|
{
|
|
if (! empty($indexRoute)) {
|
|
return $indexRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'index');
|
|
|
|
if (!empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.index';
|
|
}
|
|
|
|
protected function getShowRoute($type, $showRoute)
|
|
{
|
|
if (! empty($showRoute)) {
|
|
return $showRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'show', 1);
|
|
|
|
if (!empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.show';
|
|
}
|
|
|
|
protected function getCreateRoute($type, $createRoute)
|
|
{
|
|
if (! empty($createRoute)) {
|
|
return $createRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'create');
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.create';
|
|
}
|
|
|
|
protected function getEditRoute($type, $editRoute)
|
|
{
|
|
if (! empty($editRoute)) {
|
|
return $editRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'edit', 1);
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.edit';
|
|
}
|
|
|
|
protected function getDuplicateRoute($type, $duplicateRoute)
|
|
{
|
|
if (! empty($duplicateRoute)) {
|
|
return $duplicateRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'duplicate', 1);
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.duplicate';
|
|
}
|
|
|
|
protected function getDeleteRoute($type, $deleteRoute)
|
|
{
|
|
if (! empty($deleteRoute)) {
|
|
return $deleteRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'destroy', 1);
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.destroy';
|
|
}
|
|
|
|
protected function getCancelRoute($type, $cancelRoute)
|
|
{
|
|
if (! empty($cancelRoute)) {
|
|
return $cancelRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'index');
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.index';
|
|
}
|
|
|
|
protected function getImportRoute($importRoute)
|
|
{
|
|
if (! empty($importRoute)) {
|
|
return $importRoute;
|
|
}
|
|
|
|
$route = 'import.create';
|
|
|
|
return $route;
|
|
}
|
|
|
|
protected function getImportRouteParameters($type, $importRouteParameters)
|
|
{
|
|
if (! empty($importRouteParameters)) {
|
|
return $importRouteParameters;
|
|
}
|
|
|
|
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
|
|
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
|
|
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix');
|
|
|
|
if (empty($group) && ! empty($alias)){
|
|
$group = $alias;
|
|
} else if (empty($group) && empty($alias)) {
|
|
$group = 'sales';
|
|
}
|
|
|
|
$importRouteParameters = [
|
|
'group' => $group,
|
|
'type' => $prefix,
|
|
];
|
|
|
|
return $importRouteParameters;
|
|
}
|
|
|
|
protected function getExportRoute($type, $exportRoute)
|
|
{
|
|
if (! empty($exportRoute)) {
|
|
return $exportRoute;
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, 'export');
|
|
|
|
if (! empty($route)) {
|
|
return $route;
|
|
}
|
|
|
|
return static::DEFAULT_PLURAL_TYPE . '.export';
|
|
}
|
|
|
|
protected function getSearchStringModel($type, $searchStringModel)
|
|
{
|
|
if (! empty($searchStringModel)) {
|
|
return $searchStringModel;
|
|
}
|
|
|
|
$search_string_model = config('type.' . static::OBJECT_TYPE . '.' . $type . '.search_string_model');
|
|
|
|
if (! empty($search_string_model)) {
|
|
return $search_string_model;
|
|
}
|
|
|
|
if ($group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group')) {
|
|
$group = Str::studly(Str::singular($group)) . '\\';
|
|
}
|
|
|
|
$prefix = Str::studly(Str::singular(config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')));
|
|
|
|
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
|
|
$searchStringModel = 'Modules\\' . Str::studly($alias) .'\Models\\' . $group . $prefix;
|
|
} else {
|
|
$searchStringModel = 'App\Models\\' . $group . $prefix;
|
|
}
|
|
|
|
return $searchStringModel;
|
|
}
|
|
|
|
protected function getBulkActionClass($type, $bulkActionClass)
|
|
{
|
|
if (! empty($bulkActionClass)) {
|
|
return $bulkActionClass;
|
|
}
|
|
|
|
$bulk_actions = config('type.' . static::OBJECT_TYPE . '.' . $type . '.bulk_actions');
|
|
|
|
if (! empty($bulk_actions)) {
|
|
return $bulk_actions;
|
|
}
|
|
|
|
$file_name = '';
|
|
|
|
if ($group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group')) {
|
|
$file_name .= Str::studly($group) . '\\';
|
|
}
|
|
|
|
if ($prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')) {
|
|
$file_name .= Str::studly($prefix);
|
|
}
|
|
|
|
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
|
|
$module = module($alias);
|
|
|
|
if (! $module instanceof Module) {
|
|
$b = new \stdClass();
|
|
$b->actions = [];
|
|
|
|
event(new BulkActionsAdding($b));
|
|
|
|
return $b->actions;
|
|
}
|
|
|
|
$bulkActionClass = 'Modules\\' . $module->getStudlyName() . '\BulkActions\\' . $file_name;
|
|
} else {
|
|
$bulkActionClass = 'App\BulkActions\\' . $file_name;
|
|
}
|
|
|
|
return $bulkActionClass;
|
|
}
|
|
|
|
protected function getBulkActionRouteParameters($type, $bulkActionRouteParameters)
|
|
{
|
|
if (! empty($bulkActionRouteParameters)) {
|
|
return $bulkActionRouteParameters;
|
|
}
|
|
|
|
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
|
|
|
|
if (! empty(config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias'))) {
|
|
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
|
|
}
|
|
|
|
$bulkActionRouteParameters = [
|
|
'group' => $group,
|
|
'type' => config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')
|
|
];
|
|
|
|
return $bulkActionRouteParameters;
|
|
}
|
|
|
|
protected function getClassBulkAction($type, $classBulkAction)
|
|
{
|
|
if (! empty($classBulkAction)) {
|
|
return $classBulkAction;
|
|
}
|
|
|
|
$class = $this->getClassFromConfig($type, 'bulk_action');
|
|
|
|
if (! empty($class)) {
|
|
return $class;
|
|
}
|
|
|
|
return 'ltr:pr-6 rtl:pl-6 hidden sm:table-cell';
|
|
}
|
|
|
|
protected function getImageEmptyPage($type, $imageEmptyPage)
|
|
{
|
|
if (! empty($imageEmptyPage)) {
|
|
return $imageEmptyPage;
|
|
}
|
|
|
|
$image_empty_page = config('type.' . static::OBJECT_TYPE . '.' . $type . '.image_empty_page');
|
|
|
|
if (! empty($image_empty_page)) {
|
|
return $image_empty_page;
|
|
}
|
|
|
|
$page = str_replace('-', '_', config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', 'invoices'));
|
|
$image_path = 'public/img/empty_pages/' . $page . '.png';
|
|
|
|
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
|
|
$image_path = 'modules/' . Str::studly($alias) . '/Resources/assets/img/empty_pages/' . $page . '.png';
|
|
}
|
|
|
|
return $image_path;
|
|
}
|
|
|
|
protected function getTextEmptyPage($type, $textEmptyPage)
|
|
{
|
|
if (! empty($textEmptyPage)) {
|
|
return $textEmptyPage;
|
|
}
|
|
|
|
$page = str_replace('-', '_', config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', 'invoices'));
|
|
|
|
$translation = $this->getTextFromConfig($type, 'empty_page', 'empty.' . $page);
|
|
|
|
if (! empty($translation)) {
|
|
return $translation;
|
|
}
|
|
|
|
return 'general.empty.' . $page;
|
|
}
|
|
|
|
protected function getTextSectionTitle($type, $key, $default_key = '')
|
|
{
|
|
$translation = $this->getTextFromConfig($type, 'section_'. $key . '_title', $key);
|
|
|
|
if (! empty($translation)) {
|
|
return $translation;
|
|
}
|
|
|
|
if ($default_key) {
|
|
return $default_key;
|
|
}
|
|
|
|
return 'general.' . $key;
|
|
}
|
|
|
|
protected function getTextSectionDescription($type, $key, $default_key = '')
|
|
{
|
|
$translation = $this->getTextFromConfig($type, 'section_'. $key . '_description', 'form_description.' . $key);
|
|
|
|
if (! empty($translation)) {
|
|
return $translation;
|
|
}
|
|
|
|
if ($default_key) {
|
|
return $default_key;
|
|
}
|
|
|
|
return 'general.form_description.' . $key;
|
|
}
|
|
|
|
protected function getUrlDocsPath($type, $urlDocsPath)
|
|
{
|
|
if (! empty($urlDocsPath)) {
|
|
return $urlDocsPath;
|
|
}
|
|
|
|
$docs_path = config('type.' . static::OBJECT_TYPE . '.' . $type . '.docs_path');
|
|
|
|
if (! empty($docs_path)) {
|
|
return $docs_path;
|
|
}
|
|
|
|
switch ($type) {
|
|
case 'bill':
|
|
case 'expense':
|
|
case 'purchase':
|
|
$docsPath = 'purchases/bills';
|
|
break;
|
|
case 'vendor':
|
|
$docsPath = 'purchases/vendors';
|
|
break;
|
|
case 'customer':
|
|
$docsPath = 'sales/customers';
|
|
break;
|
|
case 'transaction':
|
|
$docsPath = 'banking/transactions';
|
|
break;
|
|
default:
|
|
$docsPath = 'sales/invoices';
|
|
break;
|
|
}
|
|
|
|
return 'https://akaunting.com/docs/user-manual/' . $docsPath;
|
|
}
|
|
|
|
public function getSuggestionModule()
|
|
{
|
|
return !empty($this->suggestions) ? Arr::random($this->suggestions) : false;
|
|
}
|
|
|
|
public function getSuggestionModules()
|
|
{
|
|
if ((! $user = user()) || $user->cannot('read-modules-home')) {
|
|
return [];
|
|
}
|
|
|
|
if (! $path = Route::current()->uri()) {
|
|
return [];
|
|
}
|
|
|
|
$path = str_replace('{company_id}/', '', $path);
|
|
|
|
if (! $suggestions = $this->getSuggestions($path)) {
|
|
return [];
|
|
}
|
|
|
|
$modules = [];
|
|
|
|
foreach ($suggestions->modules as $s_module) {
|
|
if ($this->moduleIsEnabled($s_module->alias)) {
|
|
continue;
|
|
}
|
|
|
|
$s_module->action_url = company_id() . '/' . $s_module->action_url;
|
|
|
|
$modules[] = $s_module;
|
|
}
|
|
|
|
if (empty($modules)) {
|
|
return [];
|
|
}
|
|
|
|
return $modules;
|
|
}
|
|
|
|
protected function getFormRoute($type, $formRoute, $model = false)
|
|
{
|
|
if (! empty($formRoute)) {
|
|
return $formRoute;
|
|
}
|
|
|
|
$prefix = 'store';
|
|
$parameters = [];
|
|
|
|
if (! empty($model)) {
|
|
$prefix = 'update';
|
|
$parameters = [$model->id];
|
|
}
|
|
|
|
$route = $this->getRouteFromConfig($type, $prefix, $parameters);
|
|
|
|
return (! empty($model)) ? [$route, $model->id] : $route;
|
|
}
|
|
|
|
protected function getFormMethod($type, $formMethod, $model = false)
|
|
{
|
|
if (! empty($formMethod)) {
|
|
return $formMethod;
|
|
}
|
|
|
|
$method = 'POST';
|
|
|
|
if (! empty($model)) {
|
|
$method = 'PATCH';
|
|
}
|
|
|
|
return $method;
|
|
}
|
|
|
|
protected function getAlias($type, $alias)
|
|
{
|
|
if (!empty($alias)) {
|
|
return $alias;
|
|
}
|
|
|
|
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
|
|
return $alias;
|
|
}
|
|
|
|
return 'core';
|
|
}
|
|
|
|
protected function getScriptFolder($type, $folder)
|
|
{
|
|
if (!empty($folder)) {
|
|
return $folder;
|
|
}
|
|
|
|
if ($folder = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.folder')) {
|
|
return $folder;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
protected function getScriptFile($type, $file)
|
|
{
|
|
if (!empty($file)) {
|
|
return $file;
|
|
}
|
|
|
|
if ($file = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.file')) {
|
|
return $file;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
}
|