2021-04-16 00:59:43 +03:00

1508 lines
44 KiB
PHP

<?php
namespace App\Abstracts\View\Components;
use App\Abstracts\View\Components\Document as Base;
use App\Models\Common\Media;
use App\Traits\DateTime;
use App\Traits\Documents;
use File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Str;
use Image;
use Intervention\Image\Exception\NotReadableException;
use Storage;
abstract class DocumentShow extends Base
{
use DateTime;
use Documents;
public $type;
public $document;
/** @var string */
public $documentTemplate;
/** @var string */
public $logo;
/** @var string */
public $backgroundColor;
/** @var string */
public $signedUrl;
public $histories;
public $transactions;
public $date_format;
/** @var string */
public $textRecurringType;
/** @var string */
public $textStatusMessage;
/** @var string */
public $textHistories;
/** @var string */
public $textHistoryStatus;
/** @var string */
public $checkButtonReconciled;
/** @var string */
public $checkButtonCancelled;
/** @var string */
public $routeButtonAddNew;
/** @var string */
public $routeButtonEdit;
/** @var string */
public $routeButtonDuplicate;
/** @var string */
public $routeButtonPrint;
/** @var string */
public $routeButtonPdf;
/** @var string */
public $routeButtonCancelled;
/** @var string */
public $routeButtonCustomize;
/** @var string */
public $routeButtonDelete;
/** @var string */
public $routeButtonSent;
/** @var string */
public $routeButtonReceived;
/** @var string */
public $routeButtonEmail;
/** @var string */
public $routeButtonPaid;
/** @var string */
public $permissionCreate;
/** @var string */
public $permissionUpdate;
/** @var string */
public $permissionDelete;
/** @var string */
public $permissionButtonCustomize;
/** @var bool */
public $hideButtonGroupDivider1;
/** @var bool */
public $hideButtonGroupDivider2;
/** @var bool */
public $hideButtonGroupDivider3;
/** @var bool */
public $hideButtonMoreActions;
/** @var bool */
public $hideButtonAddNew;
/** @var bool */
public $hideButtonEdit;
/** @var bool */
public $hideButtonDuplicate;
/** @var bool */
public $hideButtonPrint;
/** @var bool */
public $hideButtonPdf;
/** @var bool */
public $hideButtonCancel;
/** @var bool */
public $hideButtonCustomize;
/** @var bool */
public $hideButtonDelete;
/** @var bool */
public $hideButtonAddPayment;
/** @var bool */
public $hideHeader;
/** @var bool */
public $hideRecurringMessage;
/** @var bool */
public $hideStatusMessage;
/** @var bool */
public $hideTimeline;
/** @var bool */
public $hideFooter;
/** @var bool */
public $hideFooterHistories;
/** @var bool */
public $hideFooterTransactions;
/** @var array */
public $hideTimelineStatuses;
/** @var bool */
public $hideTimelineSent;
/** @var bool */
public $hideTimelinePaid;
/** @var bool */
public $hideButtonSent;
/** @var bool */
public $hideButtonReceived;
/** @var bool */
public $hideButtonEmail;
/** @var bool */
public $hideButtonShare;
/** @var bool */
public $hideButtonPaid;
/** @var string */
public $textHeaderContact;
/** @var string */
public $textHeaderAmount;
/** @var string */
public $textHeaderDueAt;
/** @var bool */
public $hideHeaderStatus;
/** @var string */
public $classHeaderContact;
/** @var string */
public $classHeaderAmount;
/** @var string */
public $classHeaderDueAt;
/** @var string */
public $classHeaderStatus;
/** @var string */
public $classFooterHistories;
/** @var string */
public $classFooterTransactions;
/** @var bool */
public $hideHeaderContact;
/** @var bool */
public $hideHeaderAmount;
/** @var bool */
public $hideHeaderDueAt;
/** @var bool */
public $hideTimelineCreate;
/** @var string */
public $textTimelineCreateTitle;
/** @var string */
public $textTimelineCreateMessage;
/** @var string */
public $textTimelineSentTitle;
/** @var string */
public $textTimelineSentStatusDraft;
/** @var string */
public $textTimelineSentStatusReceived;
/** @var string */
public $textTimelineSendStatusMail;
/** @var string */
public $textTimelineSentStatusMarkSent;
/** @var string */
public $textTimelineGetPaidTitle;
/** @var string */
public $textTimelineGetPaidStatusAwait;
/** @var string */
public $textTimelineGetPaidStatusPartiallyPaid;
/** @var string */
public $textTimelineGetPaidMarkPaid;
/** @var string */
public $textTimelineGetPaidAddPayment;
public $hideCompanyLogo;
public $hideCompanyDetails;
/** @var bool */
public $hideCompanyName;
public $hideCompanyAddress;
public $hideCompanyTaxNumber;
public $hideCompanyPhone;
public $hideCompanyEmail;
public $hideContactInfo;
public $hideContactName;
public $hideContactAddress;
public $hideContactTaxNumber;
public $hideContactPhone;
public $hideContactEmail;
public $hideOrderNumber;
public $hideDocumentNumber;
public $hideIssuedAt;
public $hideDueAt;
public $textContactInfo;
/** @var string */
public $textIssuedAt;
/** @var string */
public $textDueAt;
/** @var string */
public $textDocumentNumber;
/** @var string */
public $textOrderNumber;
public $hideItems;
public $hideName;
public $hideDescription;
public $hideQuantity;
public $hidePrice;
public $hideDiscount;
public $hideAmount;
/** @var string */
public $textItems;
/** @var string */
public $textQuantity;
/** @var string */
public $textPrice;
/** @var string */
public $textAmount;
/** @var bool */
public $hideNote;
/** @var bool */
public $hideAttachment;
public $attachment;
/** @var string */
public $textDeleteModal;
/**
* Create a new component instance.
*
* @return void
*/
public function __construct(
$type, $document, $documentTemplate = '', $logo = '', $backgroundColor = '', string $signedUrl = '', $histories = [], $transactions = [],
string $textRecurringType = '', string $textStatusMessage = '', string $textHistories = '', string $textHistoryStatus = '',
string $routeButtonAddNew = '', string $routeButtonEdit = '', string $routeButtonDuplicate = '', string $routeButtonPrint = '', string $routeButtonPdf = '', string $routeButtonCancelled = '', string $routeButtonDelete = '', string $routeButtonCustomize = '', string $routeButtonSent = '',
string $routeButtonReceived = '', string $routeButtonEmail = '', string $routeButtonPaid = '',
bool $checkButtonReconciled = true, bool $checkButtonCancelled = true,
string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '', string $permissionButtonCustomize = '',
bool $hideButtonGroupDivider1 = false, bool $hideButtonGroupDivider2 = false, bool $hideButtonGroupDivider3 = false,
bool $hideButtonMoreActions = false, bool $hideButtonAddNew = false, bool $hideButtonEdit = false, bool $hideButtonDuplicate = false, bool $hideButtonPrint = false, bool $hideButtonPdf = false, bool $hideButtonCancel = false, bool $hideButtonCustomize = false, bool $hideButtonDelete = false,
bool $hideHeader = false,bool $hideRecurringMessage = false, bool $hideStatusMessage = false, bool $hideTimeline = false, bool $hideFooter = false, bool $hideFooterHistories = false, bool $hideFooterTransactions = false,
array $hideTimelineStatuses = [], bool $hideTimelineSent = false, bool $hideTimelinePaid = false, bool $hideButtonSent = false, bool $hideButtonReceived = false, bool $hideButtonEmail = false, bool $hideButtonShare = false, bool $hideButtonPaid = false,
string $textHeaderContact = '', string $textHeaderAmount = '', string $textHeaderDueAt = '',
string $classHeaderStatus = '', string $classHeaderContact = '', string $classHeaderAmount = '', string $classHeaderDueAt = '', string $classFooterHistories = '', string $classFooterTransactions = '',
bool $hideHeaderStatus = false, bool $hideHeaderContact = false, bool $hideHeaderAmount = false, bool $hideHeaderDueAt = false,
string $textTimelineCreateTitle = '', string $textTimelineCreateMessage = '', string $textTimelineSentTitle = '', string $textTimelineSentStatusDraft = '', string $textTimelineSentStatusMarkSent = '', string $textTimelineSentStatusReceived = '', string $textTimelineSendStatusMail = '',
string $textTimelineGetPaidTitle = '', string $textTimelineGetPaidStatusAwait = '', string $textTimelineGetPaidStatusPartiallyPaid = '', string $textTimelineGetPaidMarkPaid = '', string $textTimelineGetPaidAddPayment = '',
bool $hideTimelineCreate = false, bool $hideCompanyLogo = false, bool $hideCompanyDetails = false,
bool $hideCompanyName = false, bool $hideCompanyAddress = false, bool $hideCompanyTaxNumber = false, bool $hideCompanyPhone = false, bool $hideCompanyEmail = false, bool $hideContactInfo = false,
bool $hideContactName = false, bool $hideContactAddress = false, bool $hideContactTaxNumber = false, bool $hideContactPhone = false, bool $hideContactEmail = false,
bool $hideOrderNumber = false, bool $hideDocumentNumber = false, bool $hideIssuedAt = false, bool $hideDueAt = false,
string $textContactInfo = '', string $textDocumentNumber = '', string $textOrderNumber = '', string $textIssuedAt = '', string $textDueAt = '',
bool $hideItems = false, bool $hideName = false, bool $hideDescription = false, bool $hideQuantity = false, bool $hidePrice = false, bool $hideDiscount = false, bool $hideAmount = false, bool $hideNote = false, bool $hideAttachment = false,
string $textItems = '', string $textQuantity = '', string $textPrice = '', string $textAmount = '', $attachment = [],
string $textDeleteModal = ''
) {
$this->type = $type;
$this->document = $document;
$this->documentTemplate = $this->getDocumentTemplate($type, $documentTemplate);
$this->logo = $this->getLogo($logo);
$this->backgroundColor = $backgroundColor;
$this->signedUrl = $this->getSignedUrl($type, $signedUrl);
$this->histories = ($histories) ? $histories : $document->histories;
$this->transactions = ($transactions) ? $transactions : $document->transactions;
$this->date_format = $this->getCompanyDateFormat();
$this->textRecurringType = $this->getTextRecurringType($type, $textRecurringType);
$this->textStatusMessage = $this->getTextStatusMessage($type, $textStatusMessage);
$this->textHistories = $this->getTextHistories($type, $textHistories);
$this->textHistoryStatus = $this->getTextHistoryStatus($type, $textHistoryStatus);
$this->checkButtonReconciled = $checkButtonReconciled;
$this->checkButtonCancelled = $checkButtonCancelled;
$this->routeButtonAddNew = $this->getRouteButtonAddNew($type, $routeButtonAddNew);
$this->routeButtonEdit = $this->getRouteButtonEdit($type, $routeButtonEdit);
$this->routeButtonDuplicate = $this->getRouteButtonDuplicate($type, $routeButtonDuplicate);
$this->routeButtonPrint = $this->getRouteButtonPrint($type, $routeButtonPrint);
$this->routeButtonPdf = $this->getRouteButtonPdf($type, $routeButtonPdf);
$this->routeButtonCancelled = $this->getRouteButtonCancelled($type, $routeButtonCancelled);
$this->routeButtonCustomize = $this->getRouteButtonCustomize($type, $routeButtonCustomize);
$this->routeButtonDelete = $this->getRouteButtonDelete($type, $routeButtonDelete);
$this->routeButtonPaid = $this->getRouteButtonPaid($type, $routeButtonPaid);
$this->permissionCreate = $this->getPermissionCreate($type, $permissionCreate);
$this->permissionUpdate = $this->getPermissionUpdate($type, $permissionUpdate);
$this->permissionDelete = $this->getPermissionDelete($type, $permissionDelete);
$this->permissionButtonCustomize = $this->getPermissionButtonCustomize($type, $permissionButtonCustomize);
$this->hideButtonGroupDivider1 = $hideButtonGroupDivider1;
$this->hideButtonGroupDivider2 = $hideButtonGroupDivider2;
$this->hideButtonGroupDivider3 = $hideButtonGroupDivider3;
$this->hideButtonMoreActions = $hideButtonMoreActions;
$this->hideButtonAddNew = $hideButtonAddNew;
$this->hideButtonEdit = $hideButtonEdit;
$this->hideButtonDuplicate = $hideButtonDuplicate;
$this->hideButtonPrint = $hideButtonPrint;
$this->hideButtonPdf = $hideButtonPdf;
$this->hideButtonCancel = $hideButtonCancel;
$this->hideButtonCustomize = $hideButtonCustomize;
$this->hideButtonDelete = $hideButtonDelete;
$this->hideHeader = $hideHeader;
$this->hideRecurringMessage = $hideRecurringMessage;
$this->hideStatusMessage = $hideStatusMessage;
$this->hideTimeline = $hideTimeline;
$this->hideFooter = $hideFooter;
$this->hideFooterHistories = $hideFooterHistories;
$this->hideFooterTransactions = $hideFooterTransactions;
$this->classHeaderStatus = $this->getClassHeaderStatus($type, $classHeaderStatus);
$this->classHeaderContact = $this->getClassHeaderContact($type, $classHeaderContact);
$this->classHeaderAmount = $this->getClassHeaderAmount($type, $classHeaderAmount);
$this->classHeaderDueAt = $this->getClassHeaderDueAt($type, $classHeaderDueAt);
$this->classFooterHistories = $this->getClassFooterHistories($type, $classFooterHistories);
$this->classFooterTransactions = $this->getClassFooterTransactions($type, $classFooterTransactions);
$this->hideHeaderStatus = $hideHeaderStatus;
$this->hideHeaderContact = $hideHeaderContact;
$this->hideHeaderAmount = $hideHeaderAmount;
$this->hideHeaderDueAt = $hideHeaderDueAt;
$this->textHeaderContact = $this->getTextHeaderContact($type, $textHeaderContact);
$this->textHeaderAmount = $this->getTextHeaderAmount($type, $textHeaderAmount);
$this->textHeaderDueAt = $this->getTextHeaderDueAt($type, $textHeaderDueAt);
$this->hideTimelineStatuses = $this->getTimelineStatuses($type, $hideTimelineStatuses);
$this->hideTimelineCreate = $hideTimelineCreate;
$this->hideTimelineSent = $hideTimelineSent;
$this->hideTimelinePaid = $hideTimelinePaid;
$this->hideButtonSent = $hideButtonSent;
$this->hideButtonReceived = $hideButtonReceived;
$this->hideButtonEmail = $hideButtonEmail;
$this->hideButtonShare = $hideButtonShare;
$this->hideButtonPaid = $hideButtonPaid;
$this->textTimelineCreateTitle = $this->getTextTimelineCreateTitle($type, $textTimelineCreateTitle);
$this->textTimelineCreateMessage = $this->getTextTimelineCreateMessage($type, $textTimelineCreateMessage);
$this->textTimelineSentTitle = $this->getTextTimelineSentTitle($type, $textTimelineSentTitle);
$this->textTimelineSentStatusDraft = $this->getTextTimelineSentStatusDraft($type, $textTimelineSentStatusDraft);
$this->textTimelineSentStatusMarkSent = $this->getTextTimelineSentStatusMarkSent($type, $textTimelineSentStatusMarkSent);
$this->textTimelineSentStatusReceived = $this->getTextTimelineSentStatusReceived($type, $textTimelineSentStatusReceived);
$this->textTimelineSendStatusMail = $this->getTextTimelineSendStatusMail($type, $textTimelineSendStatusMail);
$this->textTimelineGetPaidTitle = $this->getTextTimelineGetPaidTitle($type, $textTimelineGetPaidTitle);
$this->textTimelineGetPaidStatusAwait = $this->getTextTimelineGetPaidStatusAwait($type, $textTimelineGetPaidStatusAwait);
$this->textTimelineGetPaidStatusPartiallyPaid = $this->getTextTimelineGetPaidStatusPartiallyPaid($type, $textTimelineGetPaidStatusPartiallyPaid);
$this->textTimelineGetPaidMarkPaid = $this->getTextTimelineGetPaidMarkPaid($type, $textTimelineGetPaidMarkPaid);
$this->textTimelineGetPaidAddPayment = $this->getTextTimelineGetPaidAddPayment($type, $textTimelineGetPaidAddPayment);
$this->routeButtonSent = $this->getRouteButtonSent($type, $routeButtonSent);
$this->routeButtonReceived = $this->getRouteButtonReceived($type, $routeButtonReceived);
$this->routeButtonEmail = $this->getRouteButtonEmail($type, $routeButtonEmail);
$this->hideCompanyDetails = $hideCompanyDetails;
$this->hideCompanyLogo = $hideCompanyLogo;
$this->hideCompanyName = $hideCompanyName;
$this->hideContactAddress = $hideContactAddress;
$this->hideContactTaxNumber = $hideContactTaxNumber;
$this->hideContactPhone = $hideContactPhone;
$this->hideContactEmail = $hideContactEmail;
$this->hideOrderNumber = $hideOrderNumber;
$this->hideDocumentNumber = $hideDocumentNumber;
$this->hideOrderNumber = $hideOrderNumber;
$this->hideIssuedAt = $hideIssuedAt;
$this->hideDueAt = $hideDueAt;
$this->textContactInfo = $textContactInfo;
$this->textIssuedAt = $textIssuedAt;
$this->textDocumentNumber = $textDocumentNumber;
$this->textDueAt = $textDueAt;
$this->textOrderNumber = $textOrderNumber;
$this->hideItems = $this->getHideItems($type, $hideItems, $hideName, $hideDescription);
$this->hideName = $this->getHideName($type, $hideName);
$this->hideDescription = $this->getHideDescription($type, $hideDescription);
$this->hideQuantity = $this->getHideQuantity($type, $hideQuantity);
$this->hidePrice = $this->getHidePrice($type, $hidePrice);
$this->hideDiscount = $this->getHideDiscount($type, $hideDiscount);
$this->hideAmount = $this->getHideAmount($type, $hideAmount);
$this->hideNote = $hideNote;
$this->hideAttachment = $hideAttachment;
$this->attachment = '';
if (!empty($attachment)) {
$this->attachment = $attachment;
} else if (!empty($document)) {
$this->attachment = $document->attachment;
}
$this->textItems = $textItems;
$this->textQuantity = $textQuantity;
$this->textPrice = $textPrice;
$this->textAmount = $textAmount;
$this->textDeleteModal = $textDeleteModal;
}
protected function getTextRecurringType($type, $textRecurringType)
{
if (!empty($textRecurringType)) {
return $textRecurringType;
}
$default_key = config('type.' . $type . '.translation.prefix');
$translation = $this->getTextFromConfig($type, 'recurring_tye', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'general.invoices';
}
protected function getTextStatusMessage($type, $textStatusMessage)
{
if (!empty($textStatusMessage)) {
return $textStatusMessage;
}
$default_key = 'messages.draft';
$translation = $this->getTextFromConfig($type, 'status_message', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.messages.draft';
}
protected function getDocumentTemplate($type, $documentTemplate)
{
if (!empty($documentTemplate)) {
return $documentTemplate;
}
if ($template = config('type.' . $type . 'template', false)) {
return $template;
}
if (!empty($alias = config('type.' . $type . '.alias'))) {
$type = $alias . '.' . str_replace('-', '_', $type);
}
$documentTemplate = setting($this->getSettingKey($type, 'template')) ?: 'default';
return $documentTemplate;
}
protected function getLogo($logo)
{
if (!empty($logo)) {
return $logo;
}
$media = Media::find(setting('company.logo'));
if (!empty($media)) {
$path = Storage::path($media->getDiskPath());
if (!is_file($path)) {
return $logo;
}
} else {
$path = base_path('public/img/company.png');
}
try {
$image = Image::cache(function($image) use ($path) {
$width = setting('invoice.logo_size_width');
$height = setting('invoice.logo_size_height');
$image->make($path)->resize($width, $height)->encode();
});
} catch (NotReadableException | \Exception $e) {
Log::info('Company ID: ' . company_id() . ' components/documentshow.php exception.');
Log::info($e->getMessage());
$path = base_path('public/img/company.png');
$image = Image::cache(function($image) use ($path) {
$width = setting('invoice.logo_size_width');
$height = setting('invoice.logo_size_height');
$image->make($path)->resize($width, $height)->encode();
});
}
if (empty($image)) {
return $logo;
}
$extension = File::extension($path);
return 'data:image/' . $extension . ';base64,' . base64_encode($image);
}
protected function getSignedUrl($type, $signedUrl)
{
if (!empty($signedUrl)) {
return $signedUrl;
}
$page = config('type.' . $type . '.route.prefix');
$alias = config('type.' . $type . '.alias');
$route = '';
if (!empty($alias)) {
$route .= $alias . '.';
}
$route .= 'signed.' . $page . '.show';
try {
route($route, [$this->document->id, 'company_id' => company_id()]);
$signedUrl = URL::signedRoute($route, [$this->document->id]);
} catch (\Exception $e) {
$signedUrl = URL::signedRoute('signed.invoices.show', [$this->document->id]);
}
return $signedUrl;
}
protected function getTextHistories($type, $textHistories)
{
if (!empty($textHistories)) {
return $textHistories;
}
$translation = $this->getTextFromConfig($type, 'histories', 'histories');
if (!empty($translation)) {
return $translation;
}
return 'invoices.histories';
}
protected function getTextHistoryStatus($type, $textHistoryStatus)
{
if (!empty($textHistoryStatus)) {
return $textHistoryStatus;
}
$translation = $this->getTextFromConfig($type, 'document_status', 'statuses.');
if (!empty($translation)) {
return $translation;
}
$alias = config('type.' . $type . '.alias');
if (!empty($alias)) {
$translation = $alias . '::' . config('type.' . $type . '.translation.prefix') . '.statuses';
if (is_array(trans($translation))) {
return $translation . '.';
}
}
return 'documents.statuses.';
}
protected function getRouteButtonAddNew($type, $routeButtonAddNew)
{
if (!empty($routeButtonAddNew)) {
return $routeButtonAddNew;
}
$route = $this->getRouteFromConfig($type, 'create');
if (!empty($route)) {
return $route;
}
return 'invoices.create';
}
protected function getRouteButtonEdit($type, $routeButtonEdit)
{
if (!empty($routeButtonEdit)) {
return $routeButtonEdit;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'edit', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.edit';
}
protected function getRouteButtonDuplicate($type, $routeButtonDuplicate)
{
if (!empty($routeButtonDuplicate)) {
return $routeButtonDuplicate;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'duplicate', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.duplicate';
}
protected function getRouteButtonPrint($type, $routeButtonPrint)
{
if (!empty($routeButtonPrint)) {
return $routeButtonPrint;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'print', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.print';
}
protected function getRouteButtonPdf($type, $routeButtonPdf)
{
if (!empty($routeButtonPdf)) {
return $routeButtonPdf;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'pdf', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.pdf';
}
protected function getRouteButtonCancelled($type, $routeButtonCancelled)
{
if (!empty($routeButtonCancelled)) {
return $routeButtonCancelled;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'cancelled', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.cancelled';
}
protected function getRouteButtonCustomize($type, $routeButtonCustomize)
{
if (!empty($routeButtonCustomize)) {
return $routeButtonCustomize;
}
$route = '';
$alias = config('type.' . $type . '.alias');
if (!empty($alias)) {
$route .= $alias . '.';
}
$route .= 'settings.' . $type . '.edit';
try {
route($route);
} catch (\Exception $e) {
$route = 'settings.invoice.edit';
}
return $route;
}
protected function getRouteButtonDelete($type, $routeButtonDelete)
{
if (!empty($routeButtonDelete)) {
return $routeButtonDelete;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'destroy', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.destroy';
}
protected function getRouteButtonPaid($type, $routeButtonPaid)
{
if (!empty($routeButtonPaid)) {
return $routeButtonPaid;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'paid', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.paid';
}
protected function getRouteButtonSent($type, $routeButtonSent)
{
if (!empty($routeButtonSent)) {
return $routeButtonSent;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'sent', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.sent';
}
protected function getRouteButtonReceived($type, $routeButtonReceived)
{
if (!empty($routeButtonReceived)) {
return $routeButtonReceived;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'received', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.received';
}
protected function getRouteButtonEmail($type, $routeButtonEmail)
{
if (!empty($routeButtonEmail)) {
return $routeButtonEmail;
}
//example route parameter.
$parameter = 1;
$route = $this->getRouteFromConfig($type, 'email', $parameter);
if (!empty($route)) {
return $route;
}
return 'invoices.email';
}
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 getPermissionButtonCustomize($type, $permissionButtonCustomize)
{
if (!empty($permissionButtonCustomize)) {
return $permissionButtonCustomize;
}
$permissionUpdate = $this->getPermissionFromConfig($type, 'update');
return $permissionUpdate;
}
protected function getTextHeaderContact($type, $textHeaderContact)
{
if (!empty($textHeaderContact)) {
return $textHeaderContact;
}
$default_key = Str::plural(config('type.' . $type . '.contact_type'), 2);
$translation = $this->getTextFromConfig($type, 'header_contact', $default_key, 'trans_choice');
if (!empty($translation)) {
return $translation;
}
return 'general.customers';
}
protected function getTextHeaderAmount($type, $textHeaderAmount)
{
if (!empty($textHeaderAmount)) {
return $textHeaderAmount;
}
$translation = $this->getTextFromConfig($type, 'header_amount', 'amount_due');
if (!empty($translation)) {
return $translation;
}
return 'general.amount_due';
}
protected function getTextHeaderDueAt($type, $textHeaderDueAt)
{
if (!empty($textHeaderDueAt)) {
return $textHeaderDueAt;
}
$translation = $this->getTextFromConfig($type, 'header_due_at', 'due_on');
if (!empty($translation)) {
return $translation;
}
return 'general.due_on';
}
protected function getClassHeaderStatus($type, $classHeaderStatus)
{
if (!empty($classHeaderStatus)) {
return $classHeaderStatus;
}
$class = $this->getClassFromConfig($type, 'header_status');
if (!empty($class)) {
return $class;
}
return 'col-md-2';
}
protected function getClassHeaderContact($type, $classHeaderContact)
{
if (!empty($classHeaderContact)) {
return $classHeaderContact;
}
$class = $this->getClassFromConfig($type, 'header_contact');
if (!empty($class)) {
return $class;
}
return 'col-md-6';
}
protected function getClassHeaderAmount($type, $classHeaderAmount)
{
if (!empty($classHeaderAmount)) {
return $classHeaderAmount;
}
$class = $this->getClassFromConfig($type, 'header_amount');
if (!empty($class)) {
return $class;
}
return 'col-md-2';
}
protected function getClassHeaderDueAt($type, $classHeaderDueAt)
{
if (!empty($classHeaderDueAt)) {
return $classHeaderDueAt;
}
$class = $this->getClassFromConfig($type, 'header_due_at');
if (!empty($class)) {
return $class;
}
return 'col-md-2';
}
protected function getClassFooterHistories($type, $classFooterHistories)
{
if (!empty($classFooterHistories)) {
return $classFooterHistories;
}
$class = $this->getClassFromConfig($type, 'footer_histories');
if (!empty($class)) {
return $class;
}
return 'col-sm-6 col-md-6 col-lg-6 col-xl-6';
}
protected function getClassFooterTransactions($type, $classFooterTransactions)
{
if (!empty($classFooterTransactions)) {
return $classFooterTransactions;
}
$class = $this->getClassFromConfig($type, 'footer_transactions');
if (!empty($class)) {
return $class;
}
return 'col-sm-6 col-md-6 col-lg-6 col-xl-6';
}
protected function getTimelineStatuses($type, $hideTimelineStatuses)
{
if (!empty($hideTimelineStatuses)) {
return $hideTimelineStatuses;
}
$hideTimelineStatuses = ['paid', 'cancelled'];
if ($timelime_statuses = config('type.' . $type . 'timeline_statuses')) {
$hideTimelineStatuses = $timelime_statuses;
}
return $hideTimelineStatuses;
}
protected function getTextTimelineCreateTitle($type, $textTimelineCreateTitle)
{
if (!empty($textTimelineCreateTitle)) {
return $textTimelineCreateTitle;
}
$default_key = 'create_' . str_replace('-', '_', $type);
$translation = $this->getTextFromConfig($type, 'timeline_create_title', $default_key);
if (!empty($translation)) {
return $translation;
}
$default_key = 'create_' . str_replace('-', '_', config('type.' . $type . '.alias'));
$translation = $this->getTextFromConfig($type, 'timeline_create_title', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.create_invoice';
}
protected function getTextTimelineCreateMessage($type, $textTimelineCreateMessage)
{
if (!empty($textTimelineCreateMessage)) {
return $textTimelineCreateMessage;
}
$translation = $this->getTextFromConfig($type, 'timeline_create_message', 'messages.status.created');
if (!empty($translation)) {
return $translation;
}
return 'invoices.messages.status.created';
}
protected function getTextTimelineSentTitle($type, $textTimelineSentTitle)
{
if (!empty($textTimelineSentTitle)) {
return $textTimelineSentTitle;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$default_key = 'receive_bill';
break;
default:
$default_key = 'send_invoice';
break;
}
$translation = $this->getTextFromConfig($type, 'timeline_sent_title', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.send_invoice';
}
protected function getTextTimelineSentStatusDraft($type, $textTimelineSentStatusDraft)
{
if (!empty($textTimelineSentStatusDraft)) {
return $textTimelineSentStatusDraft;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$default_key = 'messages.status.receive.draft';
break;
default:
$default_key = 'messages.status.send.draft';
break;
}
$translation = $this->getTextFromConfig($type, 'timeline_sent_status_draft', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.messages.status.send.draft';
}
protected function getTextTimelineSentStatusMarkSent($type, $textTimelineSentStatusMarkSent)
{
if (!empty($textTimelineSentStatusMarkSent)) {
return $textTimelineSentStatusMarkSent;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$default_key = 'mark_received';
break;
default:
$default_key = 'mark_sent';
break;
}
$translation = $this->getTextFromConfig($type, 'timeline_sent_status_mark_sent', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.mark_sent';
}
protected function getTextTimelineSentStatusReceived($type, $textTimelineSentStatusReceived)
{
if (!empty($textTimelineSentStatusReceived)) {
return $textTimelineSentStatusReceived;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$default_key = 'mark_received';
break;
default:
$default_key = 'mark_sent';
break;
}
$translation = $this->getTextFromConfig($type, 'timeline_sent_status_received', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.mark_sent';
}
protected function getTextTimelineSendStatusMail($type, $textTimelineSendStatusMail)
{
if (!empty($textTimelineSendStatusMail)) {
return $textTimelineSendStatusMail;
}
$translation = $this->getTextFromConfig($type, 'timeline_sent_status_mail', 'send_mail');
if (!empty($translation)) {
return $translation;
}
return 'invoices.send_mail';
}
protected function getTextTimelineGetPaidTitle($type, $textTimelineGetPaidTitle)
{
if (!empty($textTimelineGetPaidTitle)) {
return $textTimelineGetPaidTitle;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$default_key = 'make_payment';
break;
default:
$default_key = 'get_paid';
break;
}
$translation = $this->getTextFromConfig($type, 'timeline_get_paid_title', $default_key);
if (!empty($translation)) {
return $translation;
}
return 'invoices.get_paid';
}
protected function getTextTimelineGetPaidStatusAwait($type, $textTimelineGetPaidStatusAwait)
{
if (!empty($textTimelineGetPaidStatusAwait)) {
return $textTimelineGetPaidStatusAwait;
}
$translation = $this->getTextFromConfig($type, 'timeline_get_paid_status_await', 'messages.status.paid.await');
if (!empty($translation)) {
return $translation;
}
return 'invoices.messages.status.paid.await';
}
protected function getTextTimelineGetPaidStatusPartiallyPaid($type, $textTimelineGetPaidStatusPartiallyPaid)
{
if (!empty($textTimelineGetPaidStatusPartiallyPaid)) {
return $textTimelineGetPaidStatusPartiallyPaid;
}
$translation = $this->getTextFromConfig($type, 'timeline_get_paid_status_partially_paid', 'partially_paid');
if (!empty($translation)) {
return $translation;
}
return 'general.partially_paid';
}
protected function getTextTimelineGetPaidMarkPaid($type, $textTimelineGetPaidMarkPaid)
{
if (!empty($textTimelineGetPaidMarkPaid)) {
return $textTimelineGetPaidMarkPaid;
}
$translation = $this->getTextFromConfig($type, 'timeline_get_paid_mark_paid', 'mark_paid');
if (!empty($translation)) {
return $translation;
}
return 'invoices.mark_paid';
}
protected function getTextTimelineGetPaidAddPayment($type, $textTimelineGetPaidAddPayment)
{
if (!empty($textTimelineGetPaidAddPayment)) {
return $textTimelineGetPaidAddPayment;
}
$translation = $this->getTextFromConfig($type, 'timeline_get_paid_add_payment', 'add_payment');
if (!empty($translation)) {
return $translation;
}
return 'invoices.add_payment';
}
protected function getHideItems($type, $hideItems, $hideName, $hideDescription)
{
if (!empty($hideItems)) {
return $hideItems;
}
$hide = $this->getHideFromConfig($type, 'items');
if ($hide) {
return $hide;
}
$hideItems = ($this->getHideName($type, $hideName) & $this->getHideDescription($type, $hideDescription)) ? true : false;
return $hideItems;
}
protected function getHideName($type, $hideName)
{
if (!empty($hideName)) {
return $hideName;
}
// if you use settting translation
if ($hideName = setting($this->getSettingKey($type, 'hide_item_name'), false)) {
return $hideName;
}
$hide = $this->getHideFromConfig($type, 'name');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_item_name', $hideName);
}
protected function getHideDescription($type, $hideDescription)
{
if (!empty($hideDescription)) {
return $hideDescription;
}
// if you use settting translation
if ($hideDescription = setting($this->getSettingKey($type, 'hide_item_description'), false)) {
return $hideDescription;
}
$hide = $this->getHideFromConfig($type, 'description');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_item_description', $hideDescription);
}
protected function getHideQuantity($type, $hideQuantity)
{
if (!empty($hideQuantity)) {
return $hideQuantity;
}
// if you use settting translation
if ($hideQuantity = setting($this->getSettingKey($type, 'hide_quantity'), false)) {
return $hideQuantity;
}
$hide = $this->getHideFromConfig($type, 'quantity');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_quantity', $hideQuantity);
}
protected function getHidePrice($type, $hidePrice)
{
if (!empty($hidePrice)) {
return $hidePrice;
}
// if you use settting translation
if ($hidePrice = setting($this->getSettingKey($type, 'hide_price'), false)) {
return $hidePrice;
}
$hide = $this->getHideFromConfig($type, 'price');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_price', $hidePrice);
}
protected function getHideDiscount($type, $hideDiscount)
{
if (!empty($hideDiscount)) {
return $hideDiscount;
}
// if you use settting translation
if ($hideDiscount = setting($this->getSettingKey($type, 'hide_discount'), false)) {
return $hideDiscount;
}
$hide = $this->getHideFromConfig($type, 'discount');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_discount', $hideDiscount);
}
protected function getHideAmount($type, $hideAmount)
{
if (!empty($hideAmount)) {
return $hideAmount;
}
// if you use settting translation
if ($hideAmount = setting($this->getSettingKey($type, 'hide_amount'), false)) {
return $hideAmount;
}
$hide = $this->getHideFromConfig($type, 'amount');
if ($hide) {
return $hide;
}
// @todo what return value invoice or always false??
return setting('invoice.hide_amount', $hideAmount);
}
}