transaction show page file updated..
This commit is contained in:
parent
0f6ef79384
commit
19a417791e
175
app/Abstracts/View/Components/Transaction.php
Normal file
175
app/Abstracts/View/Components/Transaction.php
Normal file
@ -0,0 +1,175 @@
|
||||
<?php
|
||||
|
||||
namespace App\Abstracts\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
abstract class Transaction extends Component
|
||||
{
|
||||
public function getTextFromConfig($type, $config_key, $default_key = '', $trans_type = 'trans')
|
||||
{
|
||||
$translation = '';
|
||||
|
||||
// if set config translation config_key
|
||||
if ($translation = config('type.' . $type . '.translation.' . $config_key)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
$alias = config('type.' . $type . '.alias');
|
||||
$prefix = config('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 = [])
|
||||
{
|
||||
$route = '';
|
||||
|
||||
// if set config trasnlation config_key
|
||||
if ($route = config('type.' . $type . '.route.' . $config_key)) {
|
||||
return $route;
|
||||
}
|
||||
|
||||
$alias = config('type.' . $type . '.alias');
|
||||
$prefix = config('type.' . $type . '.route.prefix');
|
||||
|
||||
// if use module set module alias
|
||||
if (!empty($alias)) {
|
||||
$route .= $alias . '.';
|
||||
}
|
||||
|
||||
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.' . $type . '.permission.' . $config_key)) {
|
||||
return $permission;
|
||||
}
|
||||
|
||||
$alias = config('type.' . $type . '.alias');
|
||||
$group = config('type.' . $type . '.group');
|
||||
$prefix = config('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.' . $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.' . $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;
|
||||
}
|
||||
}
|
899
app/Abstracts/View/Components/TransactionShow.php
Normal file
899
app/Abstracts/View/Components/TransactionShow.php
Normal file
@ -0,0 +1,899 @@
|
||||
<?php
|
||||
|
||||
namespace App\Abstracts\View\Components;
|
||||
|
||||
use App\Abstracts\View\Components\Transaction as Base;
|
||||
use App\Models\Common\Media;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions;
|
||||
use App\Utilities\Modules;
|
||||
use File;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\URL;
|
||||
use Illuminate\Support\Str;
|
||||
use Image;
|
||||
use Intervention\Image\Exception\NotReadableException;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
abstract class TransactionShow extends Base
|
||||
{
|
||||
use DateTime, Transactions;
|
||||
|
||||
public $type;
|
||||
|
||||
public $transaction;
|
||||
|
||||
/** @var string */
|
||||
public $transactionTemplate;
|
||||
|
||||
/** @var string */
|
||||
public $logo;
|
||||
|
||||
/** @var string */
|
||||
public $signedUrl;
|
||||
|
||||
public $histories;
|
||||
|
||||
public $date_format;
|
||||
|
||||
/** @var string */
|
||||
public $textHistories;
|
||||
|
||||
/** @var array */
|
||||
public $payment_methods;
|
||||
|
||||
/** @var string */
|
||||
public $checkButtonReconciled;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonAddNew;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonEdit;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonDuplicate;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonPrint;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonPdf;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonDelete;
|
||||
|
||||
/** @var string */
|
||||
public $routeButtonEmail;
|
||||
|
||||
/** @var string */
|
||||
public $permissionCreate;
|
||||
|
||||
/** @var string */
|
||||
public $permissionUpdate;
|
||||
|
||||
/** @var string */
|
||||
public $permissionDelete;
|
||||
|
||||
/** @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 $hideButtonDelete;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeader;
|
||||
|
||||
/** @var bool */
|
||||
public $hideFooter;
|
||||
|
||||
/** @var bool */
|
||||
public $hideFooterHistories;
|
||||
|
||||
/** @var bool */
|
||||
public $hideButtonEmail;
|
||||
|
||||
/** @var bool */
|
||||
public $hideButtonShare;
|
||||
|
||||
/** @var string */
|
||||
public $textHeaderAccount;
|
||||
|
||||
/** @var string */
|
||||
public $textHeaderCategory;
|
||||
|
||||
/** @var string */
|
||||
public $textHeaderContact;
|
||||
|
||||
/** @var string */
|
||||
public $textHeaderAmount;
|
||||
|
||||
/** @var string */
|
||||
public $textHeaderPaidAt;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeaderAccount;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeaderCategory;
|
||||
|
||||
/** @var string */
|
||||
public $classHeaderCategory;
|
||||
|
||||
/** @var string */
|
||||
public $classHeaderContact;
|
||||
|
||||
/** @var string */
|
||||
public $classHeaderAmount;
|
||||
|
||||
/** @var string */
|
||||
public $classHeaderPaidAt;
|
||||
|
||||
/** @var string */
|
||||
public $classHeaderAccount;
|
||||
|
||||
/** @var string */
|
||||
public $classFooterHistories;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeaderContact;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeaderAmount;
|
||||
|
||||
/** @var bool */
|
||||
public $hideHeaderPaidAt;
|
||||
|
||||
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 $hideIssuedAt;
|
||||
|
||||
public $hideDueAt;
|
||||
|
||||
public $textContactInfo;
|
||||
|
||||
/** @var string */
|
||||
public $textIssuedAt;
|
||||
|
||||
/** @var string */
|
||||
public $textDueAt;
|
||||
|
||||
public $hideName;
|
||||
|
||||
public $hideDescription;
|
||||
|
||||
public $hideAmount;
|
||||
|
||||
/** @var string */
|
||||
public $textAmount;
|
||||
|
||||
/** @var bool */
|
||||
public $hideAttachment;
|
||||
|
||||
public $attachment;
|
||||
|
||||
/** @var string */
|
||||
public $textDeleteModal;
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
$type, $transaction, $transactionTemplate = '', $logo = '', string $signedUrl = '', $histories = [], string $textHistories = '',
|
||||
string $routeButtonAddNew = '', string $routeButtonEdit = '', string $routeButtonDuplicate = '', string $routeButtonPrint = '', string $routeButtonPdf = '', string $routeButtonDelete = '', string $routeButtonEmail = '',
|
||||
string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '',
|
||||
bool $checkButtonReconciled = true, array $payment_methods = [],
|
||||
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 $hideButtonDelete = false,
|
||||
bool $hideHeader = false, bool $hideFooter = false, bool $hideFooterHistories = false,
|
||||
bool $hideButtonEmail = false, bool $hideButtonShare = false,
|
||||
string $textHeaderAccount = '', string $textHeaderCategory = '', string $textHeaderContact = '', string $textHeaderAmount = '', string $textHeaderPaidAt = '',
|
||||
string $classHeaderAccount = '', string $classHeaderCategory = '', string $classHeaderContact = '', string $classHeaderAmount = '', string $classHeaderPaidAt = '', string $classFooterHistories = '',
|
||||
bool $hideHeaderAccount = false, bool $hideHeaderCategory = false, bool $hideHeaderContact = false, bool $hideHeaderAmount = false, bool $hideHeaderPaidAt = false,
|
||||
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 $hidetransactionNumber = false, bool $hideIssuedAt = false, bool $hideDueAt = false,
|
||||
string $textContactInfo = '', string $textIssuedAt = '', string $textDueAt = '',
|
||||
bool $hideName = false, bool $hideDescription = false, bool $hideAmount = false, bool $hideAttachment = false,
|
||||
string $textAmount = '', $attachment = [],
|
||||
string $textDeleteModal = ''
|
||||
) {
|
||||
$this->type = $type;
|
||||
$this->transaction = $transaction;
|
||||
$this->transactionTemplate = $this->getTransactionTemplate($type, $transactionTemplate);
|
||||
$this->logo = $this->getLogo($logo);
|
||||
$this->signedUrl = $this->getSignedUrl($type, $signedUrl);
|
||||
|
||||
$this->histories = $this->getHistories($histories);
|
||||
|
||||
$this->date_format = $this->getCompanyDateFormat();
|
||||
|
||||
$this->textHistories = $this->getTextHistories($type, $textHistories);
|
||||
|
||||
$this->checkButtonReconciled = $checkButtonReconciled;
|
||||
|
||||
$this->payment_methods = ($payment_methods) ?: Modules::getPaymentMethods();
|
||||
|
||||
$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->routeButtonDelete = $this->getRouteButtonDelete($type, $routeButtonDelete);
|
||||
|
||||
$this->permissionCreate = $this->getPermissionCreate($type, $permissionCreate);
|
||||
$this->permissionUpdate = $this->getPermissionUpdate($type, $permissionUpdate);
|
||||
$this->permissionDelete = $this->getPermissionDelete($type, $permissionDelete);
|
||||
|
||||
$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->hideButtonDelete = $hideButtonDelete;
|
||||
|
||||
$this->hideHeader = $hideHeader;
|
||||
$this->hideFooter = $hideFooter;
|
||||
$this->hideFooterHistories = $hideFooterHistories;
|
||||
|
||||
$this->classHeaderAccount = $this->getclassHeaderAccount($type, $classHeaderAccount);
|
||||
$this->classHeaderContact = $this->getClassHeaderContact($type, $classHeaderContact);
|
||||
$this->classHeaderCategory = $this->getClassHeaderCategory($type, $classHeaderCategory);
|
||||
$this->classHeaderAmount = $this->getClassHeaderAmount($type, $classHeaderAmount);
|
||||
$this->classHeaderPaidAt = $this->getclassHeaderPaidAt($type, $classHeaderPaidAt);
|
||||
|
||||
$this->classFooterHistories = $this->getClassFooterHistories($type, $classFooterHistories);
|
||||
|
||||
$this->hideHeaderAccount = $hideHeaderAccount;
|
||||
$this->hideHeaderCategory = $hideHeaderCategory;
|
||||
$this->hideHeaderContact = $hideHeaderContact;
|
||||
$this->hideHeaderCategory = $hideHeaderCategory;
|
||||
$this->hideHeaderAmount = $hideHeaderAmount;
|
||||
$this->hideHeaderPaidAt = $hideHeaderPaidAt;
|
||||
|
||||
$this->textHeaderAccount = $this->getTextHeaderAccount($type, $textHeaderAccount);
|
||||
$this->textHeaderCategory = $this->getTextHeaderCategory($type, $textHeaderCategory);
|
||||
$this->textHeaderContact = $this->getTextHeaderContact($type, $textHeaderContact);
|
||||
$this->textHeaderAmount = $this->getTextHeaderAmount($type, $textHeaderAmount);
|
||||
$this->textHeaderPaidAt = $this->gettextHeaderPaidAt($type, $textHeaderPaidAt);
|
||||
|
||||
$this->hideTimelineCreate = $hideTimelineCreate;
|
||||
$this->hideButtonEmail = $hideButtonEmail;
|
||||
$this->hideButtonShare = $hideButtonShare;
|
||||
|
||||
$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->hideIssuedAt = $hideIssuedAt;
|
||||
$this->hideDueAt = $hideDueAt;
|
||||
|
||||
$this->textContactInfo = $textContactInfo;
|
||||
$this->textIssuedAt = $textIssuedAt;
|
||||
$this->textDueAt = $textDueAt;
|
||||
|
||||
$this->hideName = $this->getHideName($type, $hideName);
|
||||
$this->hideDescription = $this->getHideDescription($type, $hideDescription);
|
||||
$this->hideAmount = $this->getHideAmount($type, $hideAmount);
|
||||
$this->hideAttachment = $hideAttachment;
|
||||
|
||||
$this->attachment = '';
|
||||
|
||||
if (!empty($attachment)) {
|
||||
$this->attachment = $attachment;
|
||||
} else if (!empty($transaction)) {
|
||||
$this->attachment = $transaction->attachment;
|
||||
}
|
||||
|
||||
$this->textAmount = $textAmount;
|
||||
|
||||
$this->textDeleteModal = $textDeleteModal;
|
||||
}
|
||||
|
||||
protected function getTransactionTemplate($type, $transactionTemplate)
|
||||
{
|
||||
if (!empty($transactionTemplate)) {
|
||||
return $transactionTemplate;
|
||||
}
|
||||
|
||||
if ($template = config('type.' . $type . 'template', false)) {
|
||||
return $template;
|
||||
}
|
||||
|
||||
if (!empty($alias = config('type.' . $type . '.alias'))) {
|
||||
$type = $alias . '.' . str_replace('-', '_', $type);
|
||||
}
|
||||
|
||||
$transactionTemplate = setting($this->getSettingKey($type, 'template')) ?: 'default';
|
||||
|
||||
return $transactionTemplate;
|
||||
}
|
||||
|
||||
protected function getLogo($logo)
|
||||
{
|
||||
if (!empty($logo)) {
|
||||
return $logo;
|
||||
}
|
||||
|
||||
$media = Media::find(setting('company.logo'));
|
||||
|
||||
if (!empty($media)) {
|
||||
$path = $media->getDiskPath();
|
||||
|
||||
if (Storage::missing($path)) {
|
||||
return $logo;
|
||||
}
|
||||
} else {
|
||||
$path = base_path('public/img/company.png');
|
||||
}
|
||||
|
||||
try {
|
||||
$image = Image::cache(function($image) use ($media, $path) {
|
||||
$width = setting('invoice.logo_size_width');
|
||||
$height = setting('invoice.logo_size_height');
|
||||
|
||||
if ($media) {
|
||||
$image->make(Storage::get($path))->resize($width, $height)->encode();
|
||||
} else {
|
||||
$image->make($path)->resize($width, $height)->encode();
|
||||
}
|
||||
});
|
||||
} catch (NotReadableException | \Exception $e) {
|
||||
Log::info('Company ID: ' . company_id() . ' components/transactionshow.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 getHistories($histories)
|
||||
{
|
||||
if (!empty($histories)) {
|
||||
return $histories;
|
||||
}
|
||||
|
||||
$histories[] = $this->transaction;
|
||||
|
||||
return $histories;
|
||||
}
|
||||
|
||||
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->transaction->id, 'company_id' => company_id()]);
|
||||
|
||||
$signedUrl = URL::signedRoute($route, [$this->transaction->id]);
|
||||
} catch (\Exception $e) {
|
||||
$signedUrl = URL::signedRoute('signed.payments.show', [$this->transaction->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 getRouteButtonAddNew($type, $routeButtonAddNew)
|
||||
{
|
||||
if (!empty($routeButtonAddNew)) {
|
||||
return $routeButtonAddNew;
|
||||
}
|
||||
|
||||
$route = $this->getRouteFromConfig($type, 'create');
|
||||
|
||||
if (!empty($route)) {
|
||||
return $route;
|
||||
}
|
||||
|
||||
return 'revenues.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 'revenues.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 'revenues.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 'revenues.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 'revenues.pdf';
|
||||
}
|
||||
|
||||
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 'revenues.destroy';
|
||||
}
|
||||
|
||||
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 'revenues.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 getTextHeaderAccount($type, $textHeaderAccount)
|
||||
{
|
||||
if (!empty($textHeaderAccount)) {
|
||||
return $textHeaderAccount;
|
||||
}
|
||||
|
||||
$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 getTextHeaderCategory($type, $textHeaderCategory)
|
||||
{
|
||||
if (!empty($textHeaderCategory)) {
|
||||
return $textHeaderCategory;
|
||||
}
|
||||
|
||||
$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 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 gettextHeaderPaidAt($type, $textHeaderPaidAt)
|
||||
{
|
||||
if (!empty($textHeaderPaidAt)) {
|
||||
return $textHeaderPaidAt;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'header_due_at', 'due_on');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'general.due_on';
|
||||
}
|
||||
|
||||
protected function getclassHeaderAccount($type, $classHeaderAccount)
|
||||
{
|
||||
if (!empty($classHeaderAccount)) {
|
||||
return $classHeaderAccount;
|
||||
}
|
||||
|
||||
$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-3';
|
||||
}
|
||||
|
||||
protected function getClassHeaderCategory($type, $classHeaderCategory)
|
||||
{
|
||||
if (!empty($classHeaderCategory)) {
|
||||
return $classHeaderCategory;
|
||||
}
|
||||
|
||||
$class = $this->getClassFromConfig($type, 'header_contact');
|
||||
|
||||
if (!empty($class)) {
|
||||
return $class;
|
||||
}
|
||||
|
||||
return 'col-md-3';
|
||||
}
|
||||
|
||||
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 getclassHeaderAccountAt($type, $classHeaderAccountAt)
|
||||
{
|
||||
if (!empty($classHeaderPaidAt)) {
|
||||
return $classHeaderPaidAt;
|
||||
}
|
||||
|
||||
$class = $this->getClassFromConfig($type, 'header_paid_at');
|
||||
|
||||
if (!empty($class)) {
|
||||
return $class;
|
||||
}
|
||||
|
||||
return 'col-md-2';
|
||||
}
|
||||
|
||||
protected function getclassHeaderPaidAt($type, $classHeaderPaidAt)
|
||||
{
|
||||
if (!empty($classHeaderPaidAt)) {
|
||||
return $classHeaderPaidAt;
|
||||
}
|
||||
|
||||
$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 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 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);
|
||||
}
|
||||
}
|
653
app/Abstracts/View/Components/TransactionTemplate.php
Normal file
653
app/Abstracts/View/Components/TransactionTemplate.php
Normal file
@ -0,0 +1,653 @@
|
||||
<?php
|
||||
|
||||
namespace App\Abstracts\View\Components;
|
||||
|
||||
use App\Abstracts\View\Components\Transaction as Base;
|
||||
use App\Models\Common\Media;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions;
|
||||
use App\Utilities\Modules;
|
||||
use File;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Image;
|
||||
use Intervention\Image\Exception\NotReadableException;
|
||||
use Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
abstract class TransactionTemplate extends Base
|
||||
{
|
||||
use DateTime;
|
||||
use Transactions;
|
||||
|
||||
public $type;
|
||||
|
||||
public $item;
|
||||
|
||||
public $transaction;
|
||||
|
||||
/** @var string */
|
||||
public $transactionTemplate;
|
||||
|
||||
public $date_format;
|
||||
|
||||
public $logo;
|
||||
|
||||
public $backgroundColor;
|
||||
|
||||
public $hideFooter;
|
||||
|
||||
public $hideCompanyLogo;
|
||||
|
||||
public $hideCompanyDetails;
|
||||
|
||||
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 $hidetransactionNumber;
|
||||
|
||||
public $hideIssuedAt;
|
||||
|
||||
public $hideDueAt;
|
||||
|
||||
/** @var array */
|
||||
public $payment_methods;
|
||||
|
||||
/** @var string */
|
||||
public $texttransactionTitle;
|
||||
|
||||
/** @var string */
|
||||
public $texttransactionSubheading;
|
||||
|
||||
public $textContactInfo;
|
||||
|
||||
/** @var string */
|
||||
public $textIssuedAt;
|
||||
|
||||
/** @var string */
|
||||
public $textDueAt;
|
||||
|
||||
/** @var string */
|
||||
public $texttransactionNumber;
|
||||
|
||||
/** @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;
|
||||
|
||||
public $hideNote;
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
$type, $transaction, $item = false, $transactionTemplate = '', $logo = '', $backgroundColor = '',
|
||||
bool $hideFooter = false, bool $hideCompanyLogo = false, bool $hideCompanyDetails = false, array $payment_methods = [],
|
||||
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 $hidetransactionNumber = false, bool $hideIssuedAt = false, bool $hideDueAt = false,
|
||||
string $texttransactionTitle = '', string $texttransactionSubheading = '',
|
||||
string $textContactInfo = '', string $texttransactionNumber = '', 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,
|
||||
string $textItems = '', string $textQuantity = '', string $textPrice = '', string $textAmount = ''
|
||||
) {
|
||||
$this->type = $type;
|
||||
$this->item = $item;
|
||||
$this->transaction = $transaction;
|
||||
$this->transactionTemplate = $this->gettransactionTemplate($type, $transactionTemplate);
|
||||
$this->logo = $this->getLogo($logo);
|
||||
$this->backgroundColor = $this->getBackgroundColor($type, $backgroundColor);
|
||||
|
||||
$this->payment_methods = ($payment_methods) ?: Modules::getPaymentMethods();
|
||||
|
||||
$this->hideFooter = $hideFooter;
|
||||
$this->hideCompanyLogo = $hideCompanyLogo;
|
||||
$this->hideCompanyDetails = $hideCompanyDetails;
|
||||
$this->hideCompanyName = $hideCompanyName;
|
||||
$this->hideCompanyAddress = $hideCompanyAddress;
|
||||
$this->hideCompanyTaxNumber = $hideCompanyTaxNumber;
|
||||
$this->hideCompanyPhone = $hideCompanyPhone;
|
||||
$this->hideCompanyEmail = $hideCompanyEmail;
|
||||
$this->hideContactInfo = $hideContactInfo;
|
||||
$this->hideContactName = $hideContactName;
|
||||
$this->hideContactAddress = $hideContactAddress;
|
||||
$this->hideContactTaxNumber = $hideContactTaxNumber;
|
||||
$this->hideContactPhone = $hideContactPhone;
|
||||
$this->hideContactEmail = $hideContactEmail;
|
||||
$this->hideOrderNumber = $hideOrderNumber;
|
||||
$this->hidetransactionNumber = $hidetransactionNumber;
|
||||
$this->hideIssuedAt = $hideIssuedAt;
|
||||
$this->hideDueAt = $hideDueAt;
|
||||
|
||||
$this->texttransactionTitle = $this->getTexttransactionTitle($type, $texttransactionTitle);
|
||||
$this->texttransactionSubheading = $this->gettexttransactionSubheading($type, $texttransactionSubheading);
|
||||
$this->textContactInfo = $this->getTextContactInfo($type, $textContactInfo);
|
||||
$this->textIssuedAt = $this->getTextIssuedAt($type, $textIssuedAt);
|
||||
$this->texttransactionNumber = $this->getTexttransactionNumber($type, $texttransactionNumber);
|
||||
$this->textDueAt = $this->getTextDueAt($type, $textDueAt);
|
||||
$this->textOrderNumber = $this->getTextOrderNumber($type, $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->textItems = $this->getTextItems($type, $textItems);
|
||||
$this->textQuantity = $this->getTextQuantity($type, $textQuantity);
|
||||
$this->textPrice = $this->getTextPrice($type, $textPrice);
|
||||
$this->textAmount = $this->getTextAmount($type, $textAmount);
|
||||
}
|
||||
|
||||
protected function gettransactionTemplate($type, $transactionTemplate)
|
||||
{
|
||||
if (!empty($transactionTemplate)) {
|
||||
return $transactionTemplate;
|
||||
}
|
||||
|
||||
if ($template = config('type.' . $type . 'template', false)) {
|
||||
return $template;
|
||||
}
|
||||
|
||||
$transactionTemplate = setting($this->getSettingKey($type, 'template'), 'default');
|
||||
|
||||
return $transactionTemplate;
|
||||
}
|
||||
|
||||
protected function getLogo($logo)
|
||||
{
|
||||
if (!empty($logo)) {
|
||||
return $logo;
|
||||
}
|
||||
|
||||
$media = Media::find(setting('company.logo'));
|
||||
|
||||
if (!empty($media)) {
|
||||
$path = $media->getDiskPath();
|
||||
|
||||
if (Storage::missing($path)) {
|
||||
return $logo;
|
||||
}
|
||||
} else {
|
||||
$path = base_path('public/img/company.png');
|
||||
}
|
||||
|
||||
try {
|
||||
$image = Image::cache(function($image) use ($media, $path) {
|
||||
$width = setting('invoice.logo_size_width');
|
||||
$height = setting('invoice.logo_size_height');
|
||||
|
||||
if ($media) {
|
||||
$image->make(Storage::get($path))->resize($width, $height)->encode();
|
||||
} else {
|
||||
$image->make($path)->resize($width, $height)->encode();
|
||||
}
|
||||
});
|
||||
} catch (NotReadableException | \Exception $e) {
|
||||
Log::info('Company ID: ' . company_id() . ' components/transactionshow.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 getBackgroundColor($type, $backgroundColor)
|
||||
{
|
||||
if (!empty($backgroundColor)) {
|
||||
return $backgroundColor;
|
||||
}
|
||||
|
||||
if ($background_color = config('type.' . $type . 'color', false)) {
|
||||
return $background_color;
|
||||
}
|
||||
|
||||
|
||||
if (!empty($alias = config('type.' . $type . '.alias'))) {
|
||||
$type = $alias . '.' . str_replace('-', '_', $type);
|
||||
}
|
||||
|
||||
$backgroundColor = setting($this->getSettingKey($type, 'color'), '#55588b');
|
||||
|
||||
return $backgroundColor;
|
||||
}
|
||||
|
||||
protected function getTexttransactionTitle($type, $texttransactionTitle)
|
||||
{
|
||||
if (!empty($texttransactionTitle)) {
|
||||
return $texttransactionTitle;
|
||||
}
|
||||
|
||||
if (!empty(setting($type . '.title'))) {
|
||||
return setting($type . '.title');
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'transaction_title', Str::plural($type));
|
||||
|
||||
if (!empty($translation)) {
|
||||
return trans_choice($translation, 1);
|
||||
}
|
||||
|
||||
return setting('invoice.title');
|
||||
}
|
||||
|
||||
protected function getTexttransactionSubheading($type, $texttransactionSubheading)
|
||||
{
|
||||
if (!empty($texttransactionSubheading)) {
|
||||
return $texttransactionSubheading;
|
||||
}
|
||||
|
||||
if (!empty(setting($type . '.subheading'))) {
|
||||
return setting($type . '.subheading');
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'transaction_subheading', 'subheading');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return trans($translation);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function getTexttransactionNumber($type, $texttransactionNumber)
|
||||
{
|
||||
if (!empty($texttransactionNumber)) {
|
||||
return $texttransactionNumber;
|
||||
}
|
||||
|
||||
switch ($type) {
|
||||
case 'bill':
|
||||
case 'expense':
|
||||
case 'purchase':
|
||||
$default_key = 'bill_number';
|
||||
break;
|
||||
default:
|
||||
$default_key = 'invoice_number';
|
||||
break;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'transaction_number', $default_key);
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'general.numbers';
|
||||
}
|
||||
|
||||
protected function getTextOrderNumber($type, $textOrderNumber)
|
||||
{
|
||||
if (!empty($textOrderNumber)) {
|
||||
return $textOrderNumber;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'order_number');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.order_number';
|
||||
}
|
||||
|
||||
protected function getTextContactInfo($type, $textContactInfo)
|
||||
{
|
||||
if (!empty($textContactInfo)) {
|
||||
return $textContactInfo;
|
||||
}
|
||||
|
||||
switch ($type) {
|
||||
case 'bill':
|
||||
case 'expense':
|
||||
case 'purchase':
|
||||
$default_key = 'bill_from';
|
||||
break;
|
||||
default:
|
||||
$default_key = 'bill_to';
|
||||
break;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'contact_info', $default_key);
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.bill_to';
|
||||
}
|
||||
|
||||
protected function getTextIssuedAt($type, $textIssuedAt)
|
||||
{
|
||||
if (!empty($textIssuedAt)) {
|
||||
return $textIssuedAt;
|
||||
}
|
||||
|
||||
switch ($type) {
|
||||
case 'bill':
|
||||
case 'expense':
|
||||
case 'purchase':
|
||||
$default_key = 'bill_date';
|
||||
break;
|
||||
default:
|
||||
$default_key = 'invoice_date';
|
||||
break;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'issued_at', $default_key);
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.invoice_date';
|
||||
}
|
||||
|
||||
protected function getTextDueAt($type, $textDueAt)
|
||||
{
|
||||
if (!empty($textDueAt)) {
|
||||
return $textDueAt;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'due_at', 'due_date');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.due_date';
|
||||
}
|
||||
|
||||
protected function getTextItems($type, $textItems)
|
||||
{
|
||||
if (!empty($textItems)) {
|
||||
return $textItems;
|
||||
}
|
||||
|
||||
// if you use settting translation
|
||||
if (setting($this->getSettingKey($type, 'item_name'), 'items') == 'custom') {
|
||||
if (empty($textItems = setting($this->getSettingKey($type, 'item_name_input')))) {
|
||||
$textItems = 'general.items';
|
||||
}
|
||||
|
||||
return $textItems;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'items');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'general.items';
|
||||
}
|
||||
|
||||
protected function getTextQuantity($type, $textQuantity)
|
||||
{
|
||||
if (!empty($textQuantity)) {
|
||||
return $textQuantity;
|
||||
}
|
||||
|
||||
// if you use settting translation
|
||||
if (setting($this->getSettingKey($type, 'quantity_name'), 'quantity') === 'custom') {
|
||||
if (empty($textQuantity = setting($this->getSettingKey($type, 'quantity_name_input')))) {
|
||||
$textQuantity = 'invoices.quantity';
|
||||
}
|
||||
|
||||
return $textQuantity;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'quantity');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.quantity';
|
||||
}
|
||||
|
||||
protected function getTextPrice($type, $textPrice)
|
||||
{
|
||||
if (!empty($textPrice)) {
|
||||
return $textPrice;
|
||||
}
|
||||
|
||||
// if you use settting translation
|
||||
if (setting($this->getSettingKey($type, 'price_name'), 'price') === 'custom') {
|
||||
if (empty($textPrice = setting($this->getSettingKey($type, 'price_name_input')))) {
|
||||
$textPrice = 'invoices.price';
|
||||
}
|
||||
|
||||
return $textPrice;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'price');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'invoices.price';
|
||||
}
|
||||
|
||||
protected function getTextAmount($type, $textAmount)
|
||||
{
|
||||
if (!empty($textAmount)) {
|
||||
return $textAmount;
|
||||
}
|
||||
|
||||
$translation = $this->getTextFromConfig($type, 'amount');
|
||||
|
||||
if (!empty($translation)) {
|
||||
return $translation;
|
||||
}
|
||||
|
||||
return 'general.amount';
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
22
app/Events/Transaction/TransactionPrinting.php
Normal file
22
app/Events/Transaction/TransactionPrinting.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events\Transaction;
|
||||
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class TransactionPrinting
|
||||
{
|
||||
use SerializesModels;
|
||||
|
||||
public $transaction;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*
|
||||
* @param $transaction
|
||||
*/
|
||||
public function __construct($transaction)
|
||||
{
|
||||
$this->transaction = $transaction;
|
||||
}
|
||||
}
|
20
app/Events/Transaction/TransactionSent.php
Normal file
20
app/Events/Transaction/TransactionSent.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events\Transaction;
|
||||
|
||||
use App\Abstracts\Event;
|
||||
|
||||
class TransactionSent extends Event
|
||||
{
|
||||
public $transaction;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*
|
||||
* @param $transaction
|
||||
*/
|
||||
public function __construct($transaction)
|
||||
{
|
||||
$this->transaction = $transaction;
|
||||
}
|
||||
}
|
@ -257,4 +257,69 @@ class Payments extends Controller
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.payments', 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function emailPayment(Transaction $payment)
|
||||
{
|
||||
if (empty($payment->contact->email)) {
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Notify the customer
|
||||
$payment->contact->notify(new Notification($payment, 'payment_new_customer', true));
|
||||
|
||||
event(new \App\Events\Transaction\TransactionSent($payment));
|
||||
|
||||
flash(trans('documents.messages.email_sent', ['type' => trans_choice('general.payments', 1)]))->success();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function printPayment(Transaction $payment)
|
||||
{
|
||||
event(new \App\Events\Transaction\TransactionPrinting($payment));
|
||||
|
||||
$view = view($payment->template_path, compact('payment'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfPayment(Transaction $payment)
|
||||
{
|
||||
event(new \App\Events\Transaction\TransactionPrinting($payment));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view($payment->template_path, compact('payment', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
$pdf->loadHTML($html);
|
||||
|
||||
//$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$file_name = $this->getDocumentFileName($payment);
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
}
|
||||
|
@ -257,4 +257,69 @@ class Revenues extends Controller
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.revenues', 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function emailRevenue(Transaction $revenue)
|
||||
{
|
||||
if (empty($revenue->contact->email)) {
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Notify the customer
|
||||
$revenue->contact->notify(new Notification($revenue, 'revenue_new_customer', true));
|
||||
|
||||
event(new \App\Events\Transaction\TransactionSent($revenue));
|
||||
|
||||
flash(trans('documents.messages.email_sent', ['type' => trans_choice('general.revenues', 1)]))->success();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function printRevenue(Transaction $revenue)
|
||||
{
|
||||
event(new \App\Events\Transaction\TransactionPrinting($revenue));
|
||||
|
||||
$view = view($revenue->template_path, compact('revenue'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfRevenue(Transaction $revenue)
|
||||
{
|
||||
event(new \App\Events\Transaction\TransactionPrinting($revenue));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view($revenue->template_path, compact('revenue', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
$pdf->loadHTML($html);
|
||||
|
||||
//$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$file_name = $this->getDocumentFileName($revenue);
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
}
|
||||
|
@ -391,6 +391,11 @@ class Transaction extends Model
|
||||
return !empty($value) ? $value : (!empty($this->document_id) ? $this->document_id : $this->id);
|
||||
}
|
||||
|
||||
public function getTemplatePathAttribute($value = null)
|
||||
{
|
||||
return $value ?: 'sales.revenues.print_default';
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new factory instance for the model.
|
||||
*
|
||||
|
@ -59,4 +59,20 @@ trait Transactions
|
||||
'transaction.type.' . $index => implode(',', $types),
|
||||
])->save();
|
||||
}
|
||||
|
||||
protected function getSettingKey($type, $setting_key)
|
||||
{
|
||||
$key = '';
|
||||
$alias = config('type.' . $type . '.alias');
|
||||
|
||||
if (!empty($alias)) {
|
||||
$key .= $alias . '.';
|
||||
}
|
||||
|
||||
$prefix = config('type.' . $type . '.setting.prefix');
|
||||
|
||||
$key .= $prefix . '.' . $setting_key;
|
||||
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
|
55
app/View/Components/Transactions/Script.php
Normal file
55
app/View/Components/Transactions/Script.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class Script extends Component
|
||||
{
|
||||
/** @var string */
|
||||
public $type;
|
||||
|
||||
/** @var string */
|
||||
public $scriptFile;
|
||||
|
||||
/** @var string */
|
||||
public $version;
|
||||
|
||||
public $transaction;
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(string $type = '', string $scriptFile = '', string $version = '', $transaction = false)
|
||||
{
|
||||
$this->type = $type;
|
||||
$this->scriptFile = ($scriptFile) ? $scriptFile : 'public/js/common/documents.js';
|
||||
$this->version = $this->getVersion($version);
|
||||
$this->transaction = $transaction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.script');
|
||||
}
|
||||
|
||||
protected function getVersion($version)
|
||||
{
|
||||
if (!empty($version)) {
|
||||
return $version;
|
||||
}
|
||||
|
||||
if ($alias = config('type.' . $this->type . '.alias')) {
|
||||
return module_version($alias);
|
||||
}
|
||||
|
||||
return version('short');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Attachment.php
Normal file
18
app/View/Components/Transactions/Show/Attachment.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Attachment extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.attachment');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Content.php
Normal file
18
app/View/Components/Transactions/Show/Content.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Content extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.content');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Footer.php
Normal file
18
app/View/Components/Transactions/Show/Footer.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Footer extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.footer');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Header.php
Normal file
18
app/View/Components/Transactions/Show/Header.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Header extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.header');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Histories.php
Normal file
18
app/View/Components/Transactions/Show/Histories.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Histories extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.histories');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/TopButtons.php
Normal file
18
app/View/Components/Transactions/Show/TopButtons.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class TopButtons extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.top-buttons');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Show/Transaction.php
Normal file
18
app/View/Components/Transactions/Show/Transaction.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Show;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionShow as Component;
|
||||
|
||||
class Transaction extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.show.transaction');
|
||||
}
|
||||
}
|
18
app/View/Components/Transactions/Template/Ddefault.php
Normal file
18
app/View/Components/Transactions/Template/Ddefault.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Transactions\Template;
|
||||
|
||||
use App\Abstracts\View\Components\TransactionTemplate as Component;
|
||||
|
||||
class Ddefault extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.transactions.template.default');
|
||||
}
|
||||
}
|
@ -89,19 +89,35 @@ return [
|
||||
// Transactions
|
||||
'income' => [
|
||||
'group' => 'sales',
|
||||
'route' => [
|
||||
'prefix' => 'revenues', // core use with group + prefix, module ex. estimates
|
||||
'parameter' => 'revenue', // sales/invoices/{parameter}/edit
|
||||
//'create' => 'invoices.create', // if you change route, you can write full path
|
||||
],
|
||||
'permission' => [
|
||||
'prefix' => 'revenues',
|
||||
//'create' => 'create-sales-revenues',
|
||||
],
|
||||
'translation' => [
|
||||
'prefix' => 'revenues', // this translation file name.
|
||||
],
|
||||
'contact_type' => 'customer',
|
||||
],
|
||||
|
||||
'expense' => [
|
||||
'group' => 'purchases',
|
||||
'route' => [
|
||||
'prefix' => 'payments', // core use with group + prefix, module ex. estimates
|
||||
'parameter' => 'payment', // sales/invoices/{parameter}/edit
|
||||
//'create' => 'invoices.create', // if you change route, you can write full path
|
||||
],
|
||||
'permission' => [
|
||||
'prefix' => 'payments',
|
||||
//'create' => 'create-purchases-payments',
|
||||
],
|
||||
'translation' => [
|
||||
'prefix' => 'payments', // this translation file name.
|
||||
],
|
||||
'contact_type' => 'vendor',
|
||||
],
|
||||
|
||||
|
1
resources/views/components/transactions/script.blade.php
Normal file
1
resources/views/components/transactions/script.blade.php
Normal file
@ -0,0 +1 @@
|
||||
<script src="{{ asset( $scriptFile . '?v=' . $version) }}"></script>
|
@ -0,0 +1,9 @@
|
||||
@if ($attachment)
|
||||
<div class="row align-items-center">
|
||||
@foreach ($attachment as $file)
|
||||
<div class="col-xs-12 col-sm-4 mb-4">
|
||||
@include('partials.media.file')
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
@ -0,0 +1,58 @@
|
||||
@stack('content_header_start')
|
||||
@if (!$hideHeader)
|
||||
<x-transactions.show.header
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
hide-header-account="{{ $hideHeaderAccount }}"
|
||||
text-header-account="{{ $textHeaderAccount }}"
|
||||
class-header-account="{{ $classHeaderAccount }}"
|
||||
hide-header-category="{{ $hideHeaderCategory }}"
|
||||
text-header-category="{{ $textHeaderCategory }}"
|
||||
class-header-category="{{ $classHeaderCategory }}"
|
||||
hide-header-contact="{{ $hideHeaderContact }}"
|
||||
text-header-contact="{{ $textHeaderContact }}"
|
||||
class-header-contact="{{ $classHeaderContact }}"
|
||||
hide-header-amount="{{ $hideHeaderAmount }}"
|
||||
text-header-amount="{{ $textHeaderAmount }}"
|
||||
class-header-amount="{{ $classHeaderAmount }}"
|
||||
hide-header-paid-at="{{ $hideHeaderPaidAt }}"
|
||||
text-header-paid-at="{{ $textHeaderPaidAt }}"
|
||||
class-header-paid-at="{{ $classHeaderPaidAt }}"
|
||||
/>
|
||||
@endif
|
||||
@stack('content_header_end')
|
||||
|
||||
@stack('transaction_start')
|
||||
<x-transactions.show.transaction
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
transaction-template="{{ $transactionTemplate }}"
|
||||
logo="{{ $logo }}"
|
||||
/>
|
||||
@stack('transaction_end')
|
||||
|
||||
@stack('attachment_start')
|
||||
@if (!$hideAttachment)
|
||||
<x-transactions.show.attachment
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
:attachment="$attachment"
|
||||
/>
|
||||
@endif
|
||||
@stack('attachment_end')
|
||||
|
||||
@stack('row_footer_start')
|
||||
@if (!$hideFooter)
|
||||
<x-transactions.show.footer
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
:histories="$histories"
|
||||
class-footer-histories="{{ $classFooterHistories }}"
|
||||
hide-footer-histories="{{ $hideFooterHistories }}"
|
||||
text-histories="{{ $textHistories }}"
|
||||
/>
|
||||
@endif
|
||||
@stack('row_footer_end')
|
||||
|
||||
{{ Form::hidden('transaction_id', $transaction->id, ['id' => 'transaction_id']) }}
|
||||
{{ Form::hidden($type . '_id', $transaction->id, ['id' => $type . '_id']) }}
|
@ -0,0 +1,14 @@
|
||||
<div class="row">
|
||||
@stack('row_footer_histories_start')
|
||||
@if (!$hideFooterHistories)
|
||||
<div class="{{ $classFooterHistories }}">
|
||||
<x-transactions.show.histories
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
:histories="$histories"
|
||||
text-histories="{{ $textHistories }}"
|
||||
/>
|
||||
</div>
|
||||
@endif
|
||||
@stack('row_footer_histories_end')
|
||||
</div>
|
@ -0,0 +1,81 @@
|
||||
<div class="row" style="font-size: inherit !important">
|
||||
@stack('header_account_start')
|
||||
@if (!$hideHeaderAccount)
|
||||
<div class="{{ $classHeaderAccount }}">
|
||||
{{ trans_choice('general.accounts', 1) }}
|
||||
<br>
|
||||
|
||||
<strong>
|
||||
<span class="float-left">
|
||||
{{ $transaction->account->name }}
|
||||
</span>
|
||||
</strong>
|
||||
<br><br>
|
||||
</div>
|
||||
@endif
|
||||
@stack('header_account_end')
|
||||
|
||||
@stack('header_category_start')
|
||||
@if (!$hideHeaderCategory)
|
||||
<div class="{{ $classHeaderCategory }}">
|
||||
{{ trans_choice('general.categories', 1) }}
|
||||
<br>
|
||||
|
||||
<strong>
|
||||
<span class="float-left">
|
||||
{{ $transaction->category->name }}
|
||||
</span>
|
||||
</strong>
|
||||
<br><br>
|
||||
</div>
|
||||
@endif
|
||||
@stack('header_category_end')
|
||||
|
||||
@stack('header_contact_start')
|
||||
@if (!$hideHeaderContact)
|
||||
<div class="{{ $classHeaderContact }}">
|
||||
{{ trans_choice($textHeaderContact, 1) }}
|
||||
<br>
|
||||
|
||||
<strong>
|
||||
<span class="float-left">
|
||||
{{ $transaction->contact->name }}
|
||||
</span>
|
||||
</strong>
|
||||
<br><br>
|
||||
</div>
|
||||
@endif
|
||||
@stack('header_contact_end')
|
||||
|
||||
@stack('header_amount_start')
|
||||
@if (!$hideHeaderAmount)
|
||||
<div class="{{ $classHeaderAmount }}">
|
||||
{{ trans($textHeaderAmount) }}
|
||||
<br>
|
||||
|
||||
<strong>
|
||||
<span class="float-left">
|
||||
@money($transaction->amount, $transaction->currency_code, true)
|
||||
</span>
|
||||
</strong>
|
||||
<br><br>
|
||||
</div>
|
||||
@endif
|
||||
@stack('header_amount_end')
|
||||
|
||||
@stack('header_paid_at_start')
|
||||
@if (!$hideHeaderPaidAt)
|
||||
<div class="{{ $classHeaderPaidAt }}">
|
||||
{{ trans($textHeaderPaidAt) }}
|
||||
<br>
|
||||
|
||||
<strong>
|
||||
<span class="float-left">
|
||||
@date($transaction->paid_at)
|
||||
</span>
|
||||
</strong>
|
||||
<br><br>
|
||||
</div>
|
||||
@endif
|
||||
@stack('header_paid_at_end')
|
||||
</div>
|
@ -0,0 +1,47 @@
|
||||
<div class="accordion">
|
||||
<div class="card">
|
||||
<div class="card-header" id="accordion-histories-header" data-toggle="collapse" data-target="#accordion-histories-body" aria-expanded="false" aria-controls="accordion-histories-body">
|
||||
<h4 class="mb-0">{{ trans($textHistories) }}</h4>
|
||||
</div>
|
||||
|
||||
<div id="accordion-histories-body" class="collapse hide" aria-labelledby="accordion-histories-header">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-flush table-hover">
|
||||
<thead class="thead-light">
|
||||
@stack('row_footer_histories_head_tr_start')
|
||||
<tr class="row table-head-line">
|
||||
@stack('row_footer_histories_head_start')
|
||||
<th class="col-xs-4 col-sm-3">
|
||||
{{ trans('general.date') }}
|
||||
</th>
|
||||
|
||||
<th class="col-xs-8 col-sm-9 text-left long-texts">
|
||||
{{ trans('general.description') }}
|
||||
</th>
|
||||
@stack('row_footer_histories_head_end')
|
||||
</tr>
|
||||
@stack('row_footer_histories_head_tr_end')
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
@stack('row_footer_histories_body_tr_start')
|
||||
@foreach($histories as $history)
|
||||
<tr class="row align-items-center border-top-1 tr-py">
|
||||
@stack('row_footer_histories_body_td_start')
|
||||
<td class="col-xs-4 col-sm-3">
|
||||
@date($history->created_at)
|
||||
</td>
|
||||
|
||||
<td class="col-xs-4 col-sm-6 text-left long-texts">
|
||||
{{ $history->description }}
|
||||
</td>
|
||||
@stack('row_footer_histories_body_td_end')
|
||||
</tr>
|
||||
@endforeach
|
||||
@stack('row_footer_histories_body_tr_end')
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,109 @@
|
||||
@stack('button_group_start')
|
||||
@if (!$hideButtonMoreActions)
|
||||
<div class="dropup header-drop-top">
|
||||
<button type="button" class="btn btn-white btn-sm" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-chevron-down"></i> {{ trans('general.more_actions') }}
|
||||
</button>
|
||||
|
||||
<div class="dropdown-menu" role="menu">
|
||||
@stack('button_dropdown_start')
|
||||
@stack('edit_button_start')
|
||||
@if (!$hideButtonEdit)
|
||||
@can($permissionUpdate)
|
||||
<a class="dropdown-item" href="{{ route($routeButtonEdit, $transaction->id) }}">
|
||||
{{ trans('general.edit') }}
|
||||
</a>
|
||||
@endcan
|
||||
@endif
|
||||
@stack('edit_button_end')
|
||||
|
||||
@stack('duplicate_button_start')
|
||||
@if (!$hideButtonDuplicate)
|
||||
@can($permissionCreate)
|
||||
<a class="dropdown-item" href="{{ route($routeButtonDuplicate, $transaction->id) }}">
|
||||
{{ trans('general.duplicate') }}
|
||||
</a>
|
||||
@endcan
|
||||
@endif
|
||||
@stack('duplicate_button_end')
|
||||
|
||||
@stack('button_dropdown_divider_1_start')
|
||||
@if (!$hideButtonGroupDivider1)
|
||||
<div class="dropdown-divider"></div>
|
||||
@endif
|
||||
@stack('button_dropdown_divider_1_end')
|
||||
|
||||
@if (!$hideButtonPrint)
|
||||
@stack('button_print_start')
|
||||
<a class="dropdown-item" href="{{ route($routeButtonPrint, $transaction->id) }}" target="_blank">
|
||||
{{ trans('general.print') }}
|
||||
</a>
|
||||
@stack('button_print_end')
|
||||
@endif
|
||||
|
||||
@stack('share_button_start')
|
||||
@if (!$hideButtonShare)
|
||||
<a class="dropdown-item" href="{{ $signedUrl }}" target="_blank">
|
||||
{{ trans('general.share') }}
|
||||
</a>
|
||||
@endif
|
||||
@stack('share_button_end')
|
||||
|
||||
@stack('edit_button_start')
|
||||
@if (!$hideButtonEmail)
|
||||
@if($transaction->contact->email)
|
||||
<a class="dropdown-item" href="{{ route($routeButtonEmail, $transaction->id) }}">
|
||||
{{ trans('invoices.send_mail') }}
|
||||
</a>
|
||||
@else
|
||||
<el-tooltip content="{{ trans('invoices.messages.email_required') }}" placement="right">
|
||||
<button type="button" class="dropdown-item btn-tooltip">
|
||||
<span class="text-disabled">{{ trans('invoices.send_mail') }}</span>
|
||||
</button>
|
||||
</el-tooltip>
|
||||
@endif
|
||||
@endif
|
||||
@stack('edit_button_end')
|
||||
|
||||
@stack('button_pdf_start')
|
||||
@if (!$hideButtonPdf)
|
||||
<a class="dropdown-item" href="{{ route($routeButtonPdf, $transaction->id) }}">
|
||||
{{ trans('general.download_pdf') }}
|
||||
</a>
|
||||
@endif
|
||||
@stack('button_pdf_end')
|
||||
|
||||
@stack('button_dropdown_divider_3_start')
|
||||
@if (!$hideButtonGroupDivider3)
|
||||
<div class="dropdown-divider"></div>
|
||||
@endif
|
||||
@stack('button_dropdown_divider_3_end')
|
||||
|
||||
@stack('delete_button_start')
|
||||
@if (!$hideButtonDelete)
|
||||
@can($permissionDelete)
|
||||
@if ($checkButtonReconciled)
|
||||
@if (!$transaction->reconciled)
|
||||
{!! Form::deleteLink($transaction, $routeButtonDelete, $textDeleteModal, 'transaction_number') !!}
|
||||
@endif
|
||||
@else
|
||||
{!! Form::deleteLink($transaction, $routeButtonDelete, $textDeleteModal, 'transaction_number') !!}
|
||||
@endif
|
||||
@endcan
|
||||
@endif
|
||||
@stack('delete_button_end')
|
||||
@stack('button_dropdown_end')
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@stack('button_group_end')
|
||||
|
||||
@stack('add_new_button_start')
|
||||
@if (!$hideButtonAddNew)
|
||||
@can($permissionCreate)
|
||||
<a href="{{ route($routeButtonAddNew) }}" class="btn btn-white btn-sm">
|
||||
{{ trans('general.add_new') }}
|
||||
</a>
|
||||
@endcan
|
||||
@endif
|
||||
@stack('add_new_button_end')
|
@ -0,0 +1,22 @@
|
||||
<div class="card show-card" style="padding: 0; padding-left: 15px; padding-right: 15px; border-radius: 0; box-shadow: 0 4px 16px rgba(0,0,0,.2);">
|
||||
<div class="card-body show-card-body">
|
||||
@if ($transactionTemplate)
|
||||
@switch($transactionTemplate)
|
||||
@case('classic')
|
||||
@break
|
||||
@case('modern')
|
||||
@break
|
||||
@default
|
||||
<x-transactions.template.ddefault
|
||||
type="{{ $type }}"
|
||||
:transaction="$transaction"
|
||||
:payment_methods="$payment_methods"
|
||||
transaction-template="{{ $transactionTemplate }}"
|
||||
logo="{{ $logo }}"
|
||||
/>
|
||||
@endswitch
|
||||
@else
|
||||
@include($transactionTemplate)
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,247 @@
|
||||
<div class="row border-bottom-1 pt-6 pb-6">
|
||||
<div class="col-16">
|
||||
<div class="text company">
|
||||
@stack('company_logo_start')
|
||||
@if (!$hideCompanyLogo)
|
||||
@if (!empty($document->contact->logo) && !empty($document->contact->logo->id))
|
||||
<img src="{{ Storage::url($document->contact->logo->id) }}" height="128" width="128" alt="{{ $document->contact_name }}"/>
|
||||
@else
|
||||
<img src="{{ $logo }}" alt="{{ setting('company.name') }}"/>
|
||||
@endif
|
||||
@endif
|
||||
@stack('company_logo_end')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-42">
|
||||
<div class="text company lead">
|
||||
@stack('company_details_start')
|
||||
@if (!$hideCompanyDetails)
|
||||
@if (!$hideCompanyName)
|
||||
<h2 class="mb-1">
|
||||
{{ setting('company.name') }}
|
||||
</h2>
|
||||
@endif
|
||||
|
||||
@if (!$hideCompanyAddress)
|
||||
<p>{!! nl2br(setting('company.address')) !!}</p>
|
||||
@endif
|
||||
|
||||
@if (!$hideCompanyTaxNumber)
|
||||
<p>
|
||||
@if (setting('company.tax_number'))
|
||||
{{ trans('general.tax_number') }}: {{ setting('company.tax_number') }}
|
||||
@endif
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if (!$hideCompanyPhone)
|
||||
<p>
|
||||
@if (setting('company.phone'))
|
||||
{{ setting('company.phone') }}
|
||||
@endif
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if (!$hideCompanyEmail)
|
||||
<p>{{ setting('company.email') }}</p>
|
||||
@endif
|
||||
@endif
|
||||
@stack('company_details_end')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row border-bottom-1 w-100 mt-6 pb-6 d-flex flex-column">
|
||||
<h2 class="text-center text-uppercase mb-6">{{ trans('invoices.revenue_made') }}</h2>
|
||||
|
||||
<div class="d-flex">
|
||||
<div class="d-flex flex-column col-lg-7 pl-0">
|
||||
<div class="d-flex mt-3">
|
||||
<div class="text company show-company col-lg-4 pl-0">
|
||||
<p>
|
||||
<strong>{{ trans('general.date') }}:</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{{ trans_choice('general.accounts', 1) }}:</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{{ trans_choice('general.categories', 1) }}:</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{{ trans_choice('general.payment_methods', 1) }}:</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{{ trans('general.reference') }}:</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{{ trans('general.description') }}:</strong>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="text company col-lg-8 pr-0 show-company show-company-value">
|
||||
<p class="border-bottom-1">
|
||||
@date($transaction->paid_at)
|
||||
</p>
|
||||
|
||||
<p class="border-bottom-1">
|
||||
{{ $transaction->account->name }}
|
||||
</p>
|
||||
|
||||
<p class="border-bottom-1">
|
||||
{{ $transaction->category->name }}
|
||||
</p>
|
||||
|
||||
<p class="border-bottom-1">
|
||||
{{ $payment_methods[$transaction->payment_method] }}
|
||||
</p>
|
||||
|
||||
<p class="border-bottom-1">
|
||||
{{ $transaction->reference }}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{!! nl2br($transaction->description) !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text company mt-5">
|
||||
<h2>{{ trans('general.paid_by') }}</h2>
|
||||
|
||||
@if ($hideContactInfo)
|
||||
<strong>{{ trans($textContactInfo) }}</strong><br>
|
||||
@endif
|
||||
|
||||
@stack('name_input_start')
|
||||
@if (!$hideContactName)
|
||||
<strong>{{ $transaction->contact->name }}</strong><br>
|
||||
@endif
|
||||
@stack('name_input_end')
|
||||
|
||||
@stack('address_input_start')
|
||||
@if (!$hideContactAddress)
|
||||
<p>{!! nl2br($transaction->contact->address) !!}</p>
|
||||
@endif
|
||||
@stack('address_input_end')
|
||||
|
||||
@stack('tax_number_input_start')
|
||||
@if (!$hideContactTaxNumber)
|
||||
<p>
|
||||
@if ($transaction->contact->tax_number)
|
||||
{{ trans('general.tax_number') }}: {{ $transaction->contact->tax_number }}
|
||||
@endif
|
||||
</p>
|
||||
@endif
|
||||
@stack('tax_number_input_end')
|
||||
|
||||
@stack('phone_input_start')
|
||||
@if (!$hideContactPhone)
|
||||
<p>
|
||||
@if ($transaction->contact->phone)
|
||||
{{ $transaction->contact->phone }}
|
||||
@endif
|
||||
</p>
|
||||
@endif
|
||||
@stack('phone_input_end')
|
||||
|
||||
@stack('email_start')
|
||||
@if (!$hideContactEmail)
|
||||
<p>
|
||||
{{ $transaction->contact->email }}
|
||||
</p>
|
||||
@endif
|
||||
@stack('email_input_end')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-column align-items-end col-lg-5 pr-0">
|
||||
<div class="card bg-success show-card-bg-success border-0 mt-4 mb-0">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col card-amount-badge text-center mt-3">
|
||||
<h5 class="text-muted mb-0 text-white">{{ trans('general.amount') }}</h5>
|
||||
|
||||
<span class="h2 font-weight-bold mb-0 text-white">
|
||||
@money($transaction->amount, $transaction->currency_code, true)
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($transaction->document)
|
||||
<div class="row mt-3 mb-3">
|
||||
<div class="col-100">
|
||||
<div class="text">
|
||||
<h3>{{ trans('invoices.related_revenue') }}</h3>
|
||||
|
||||
<table class="table table-flush table-hover mt-3">
|
||||
<thead class="thead-light">
|
||||
<tr class="border-bottom-1">
|
||||
<th class="item text-left">
|
||||
<span>{{ trans_choice('general.numbers', 1) }}</span>
|
||||
</th>
|
||||
|
||||
<th class="quantity">
|
||||
{{ trans_choice('general.customers', 1) }}
|
||||
</th>
|
||||
|
||||
<th class="price">
|
||||
{{ trans('invoices.invoice_date') }}
|
||||
</th>
|
||||
|
||||
<th class="price">
|
||||
{{ trans('invoices.invoice_date') }}
|
||||
</th>
|
||||
|
||||
<th class="total">
|
||||
{{ trans('general.amount') }}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr class="border-bottom-1">
|
||||
<td class="item">
|
||||
<a href="{{ route('invoices.show' , $transaction->document->id) }}">
|
||||
{{ $transaction->document->document_number }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
<td class="quantity">
|
||||
{{ $transaction->document->contact_name }}
|
||||
</td>
|
||||
|
||||
<td class="price">
|
||||
@date($transaction->document->due_at)
|
||||
</td>
|
||||
|
||||
<td class="price">
|
||||
@money($transaction->document->amount, $transaction->document->currency_code, true)
|
||||
</td>
|
||||
|
||||
<td class="total">
|
||||
@money($transaction->amount, $transaction->currency_code, true)
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="row mt-3 mb-3">
|
||||
<p>
|
||||
{{ trans('invoices.overdue_revenue') }}: <strong style="font-weight: bold;">@money($transaction->amount, $transaction->currency_code, true)</strong>
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
@ -1,180 +1,17 @@
|
||||
@extends('layouts.admin')
|
||||
|
||||
@section('title', trans('bills.payment_made') )
|
||||
@section('title', trans('invoices.payment_made'))
|
||||
|
||||
@section('new_button')
|
||||
@can('create-sales-revenues')
|
||||
|
||||
<a href="{{ route('revenues.create') }}" class="btn btn-white btn-sm">{{ trans('general.add_new') }}</a>
|
||||
@endcan
|
||||
<x-transactions.show.top-buttons type="expense" :transaction="$payment" hide-button-share />
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div id="app">
|
||||
<div class="row mt-3 w-100 mb-3" style="font-size: unset; padding: 0px 15px;">
|
||||
<div class="d-flex w-100" style="padding: 1.5rem;">
|
||||
<div class="row w-100 justify-content-between" style="font-size: unset;">
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.accounts', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Account name
|
||||
</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.categories', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Category name
|
||||
</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.vendors', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Vendor name</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans('general.amount') }}
|
||||
<strong><span class="float-left">
|
||||
{{ $payment->amount }} </span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans('general.date') }}
|
||||
<strong><span class="float-left">
|
||||
{{ Date::parse($payment->paid_at)->toDateString() }} </span></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card show-card">
|
||||
<div class="card-body show-card-body">
|
||||
<div class="row border-bottom-1 pt-6 pb-6">
|
||||
<div class="col-16">
|
||||
<div class="text company"><img src="data:image/png;base64,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" alt="Company - Brkcvn"></div>
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<div class="text company lead">
|
||||
<h2 class="mb-1">{{ setting('company.name') }}</h2>
|
||||
|
||||
<p class="mb-1">{{ trans('general.tax_number') }}: <strong>{{ setting('company.tax_number') }}</strong></p>
|
||||
|
||||
<p class="mb-1"><a href="tel:{{ setting('company.phone') }}">{{ setting('company.phone') }}</a></p>
|
||||
|
||||
<p class="mb-1"><a href="mailto:{{ setting('company.email') }}">{{ setting('company.email') }}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row border-bottom-1 w-100 mt-6 pb-6 d-flex flex-column">
|
||||
<h2 class="text-center text-uppercase mb-6">{{ trans_choice('bills.payment_made', 1) }}</h2>
|
||||
<div class="d-flex">
|
||||
<div class="d-flex flex-column col-lg-7 pl-0">
|
||||
<div class="d-flex mt-3">
|
||||
<div class="text company show-company col-lg-4 pl-0">
|
||||
<p>{{ trans('general.date') }}:</p>
|
||||
|
||||
<p>{{ trans_choice('general.accounts', 1) }}:</p>
|
||||
|
||||
<p>{{ trans_choice('general.categories', 1) }}:</p>
|
||||
<p>{{ trans_choice('general.payment_methods', 1) }}:</p>
|
||||
<p>{{ trans('general.reference') }}:</p>
|
||||
<p>{{ trans('general.description') }}:</p>
|
||||
</div>
|
||||
<div class="text company col-lg-8 pr-0 show-company show-company-value">
|
||||
<p class="border-bottom-1"><strong>12.12.2022</strong></p>
|
||||
|
||||
<p class="border-bottom-1"><strong>Account One</strong></p>
|
||||
<p class="border-bottom-1"><strong>Data Category</strong></p>
|
||||
<p class="border-bottom-1"><strong>Cash</strong></p>
|
||||
<p class="border-bottom-1"><strong>Lorem Ipsum</strong></p>
|
||||
<p><strong>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text company mt-5">
|
||||
<h2>{{ trans('general.paid_to') }}</h2>
|
||||
<h4 class="mb-1"><a href="">Name</a></h4>
|
||||
<p class="mb-1">Adress</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-end col-lg-5 pr-0">
|
||||
<div class="card bg-success show-card-bg-success border-0 mt-4 mb-0">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col card-amount-badge text-center mt-3">
|
||||
<h5 class="text-muted mb-0 text-white">{{ trans('general.amount') }}</h5>
|
||||
<span class="h2 font-weight-bold mb-0 text-white">₺0,00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row mt-3 mb-3">
|
||||
<div class="col-100">
|
||||
<div class="text">
|
||||
<h3>{{ trans('bills.related_bill') }}</h3>
|
||||
<table class="table table-flush table-hover mt-3">
|
||||
<thead class="thead-light">
|
||||
<tr class="border-bottom-1">
|
||||
<th class="item text-left"><span>{{ trans('bills.bill_number') }}</span></th>
|
||||
<th class="quantity">{{ trans_choice('general.vendors', 1) }}</th>
|
||||
<th class="price">{{ trans('bills.bill_date') }}</th>
|
||||
<th class="total">{{ trans('general.amount') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-bottom-1">
|
||||
<td class="item"><a href="">BILL-123</a></td>
|
||||
<td class="quantity">Vendor name</td>
|
||||
<td class="price">12.12.2022</td>
|
||||
<td class="total">₺6.000,00</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3 mb-3">
|
||||
<p>{{ trans('bills.overdue_payment') }}: <strong style="font-weight: bold;">₺6.000,00</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-6 pl-0 pr-0">
|
||||
<div class="accordion">
|
||||
<div class="card">
|
||||
<div class="card-header" id="accordion-transactions-header" data-toggle="collapse" data-target="#accordion-transactions-body" aria-expanded="false" aria-controls="accordion-transactions-body">
|
||||
<h4 class="mb-0">{{ trans('bills.payment_history') }}</h4>
|
||||
</div>
|
||||
<div id="accordion-transactions-body" class="collapse hide" aria-labelledby="accordion-transactions-header">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-flush table-hover">
|
||||
<thead class="thead-light">
|
||||
<tr class="row table-head-line">
|
||||
<th class="col-xs-6 col-sm-6">{{ trans('general.revenue_date') }}</th>
|
||||
<th class="col-xs-6 col-sm-6">{{ trans('general.created') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="row align-items-center border-top-1 tr-py">
|
||||
<td class="col-xs-6 col-sm-6">
|
||||
12.12.2022
|
||||
</td>
|
||||
<td class="col-xs-6 col-sm-6">
|
||||
Created name
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<x-transactions.show.content type="expense" :transaction="$payment" />
|
||||
@endsection
|
||||
|
||||
@push('scripts_start')
|
||||
<link rel="stylesheet" href="{{ asset('public/css/print.css?v=' . version('short')) }}" type="text/css">
|
||||
<link rel="stylesheet" href="{{ asset('public/css/print.css?v=' . version('short')) }}" type="text/css">
|
||||
|
||||
<script src="{{ asset('public/js/sales/revenues.js?v=' . version('short')) }}"></script>
|
||||
@endpush
|
||||
<x-transactions.script type="expense" />
|
||||
@endpush
|
||||
|
@ -3,178 +3,15 @@
|
||||
@section('title', trans('invoices.revenue_made'))
|
||||
|
||||
@section('new_button')
|
||||
@can('create-sales-revenues')
|
||||
|
||||
<a href="{{ route('revenues.create') }}" class="btn btn-white btn-sm">{{ trans('general.add_new') }}</a>
|
||||
@endcan
|
||||
<x-transactions.show.top-buttons type="income" :transaction="$revenue" />
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div id="app">
|
||||
<div class="row mt-3 w-100 mb-3" style="font-size: unset; padding: 0px 15px;">
|
||||
<div class="d-flex w-100" style="padding: 1.5rem;">
|
||||
<div class="row w-100 justify-content-between" style="font-size: unset;">
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.accounts', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Account name
|
||||
</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.categories', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Category name
|
||||
</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans_choice('general.customers', 1) }}
|
||||
<strong><span class="float-left">
|
||||
Customer name</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans('general.amount') }}
|
||||
<strong><span class="float-left">
|
||||
</span></strong>
|
||||
</div>
|
||||
<div class="show-head">
|
||||
{{ trans('general.date') }}
|
||||
<strong><span class="float-left">
|
||||
</span></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card show-card">
|
||||
<div class="card-body show-card-body">
|
||||
<div class="row border-bottom-1 pt-6 pb-6">
|
||||
<div class="col-16">
|
||||
<div class="text company"><img src="data:image/png;base64,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" alt="Company - Brkcvn"></div>
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<div class="text company lead">
|
||||
<h2 class="mb-1">{{ setting('company.name') }}</h2>
|
||||
|
||||
<p class="mb-1">{{ trans('general.tax_number') }}: <strong>{{ setting('company.tax_number') }}</strong></p>
|
||||
|
||||
<p class="mb-1"><a href="tel:{{ setting('company.phone') }}">{{ setting('company.phone') }}</a></p>
|
||||
|
||||
<p class="mb-1"><a href="mailto:{{ setting('company.email') }}">{{ setting('company.email') }}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row border-bottom-1 w-100 mt-6 pb-6 d-flex flex-column">
|
||||
<h2 class="text-center text-uppercase mb-6">{{ trans('invoices.revenue_made') }}</h2>
|
||||
<div class="d-flex">
|
||||
<div class="d-flex flex-column col-lg-7 pl-0">
|
||||
<div class="d-flex mt-3">
|
||||
<div class="text company show-company col-lg-4 pl-0">
|
||||
<p>{{ trans('general.date') }}:</p>
|
||||
|
||||
<p>{{ trans_choice('general.accounts', 1) }}:</p>
|
||||
|
||||
<p>{{ trans_choice('general.categories', 1) }}:</p>
|
||||
<p>{{ trans_choice('general.payment_methods', 1) }}:</p>
|
||||
<p>{{ trans('general.reference') }}:</p>
|
||||
<p>{{ trans('general.description') }}:</p>
|
||||
</div>
|
||||
<div class="text company col-lg-8 pr-0 show-company show-company-value">
|
||||
<p class="border-bottom-1"><strong>12.12.2022</strong></p>
|
||||
|
||||
<p class="border-bottom-1"><strong>Account One</strong></p>
|
||||
<p class="border-bottom-1"><strong>Data Category</strong></p>
|
||||
<p class="border-bottom-1"><strong>Cash</strong></p>
|
||||
<p class="border-bottom-1"><strong>Lorem Ipsum</strong></p>
|
||||
<p><strong>Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text company mt-5">
|
||||
<h2>{{ trans('general.paid_by') }}</h2>
|
||||
<h4 class="mb-1"><a href="">Name</a></h4>
|
||||
<p class="mb-1">Adress</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-end col-lg-5 pr-0">
|
||||
<div class="card bg-success show-card-bg-success border-0 mt-4 mb-0">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col card-amount-badge text-center mt-3">
|
||||
<h5 class="text-muted mb-0 text-white">{{ trans('general.amount') }}</h5>
|
||||
<span class="h2 font-weight-bold mb-0 text-white">₺0,00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row mt-3 mb-3">
|
||||
<div class="col-100">
|
||||
<div class="text">
|
||||
<h3>{{ trans('invoices.related_revenue') }}</h3>
|
||||
<table class="table table-flush table-hover mt-3">
|
||||
<thead class="thead-light">
|
||||
<tr class="border-bottom-1">
|
||||
<th class="item text-left"><span>{{ trans_choice('general.numbers', 1) }}</span></th>
|
||||
<th class="quantity"> {{ trans_choice('general.customers', 1) }}</th>
|
||||
<th class="price">{{ trans('invoices.invoice_date') }}</th>
|
||||
<th class="total">{{ trans('general.amount') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-bottom-1">
|
||||
<td class="item"><a href="">BILL-123</a></td>
|
||||
<td class="quantity">Vendor name</td>
|
||||
<td class="price">12.12.2022</td>
|
||||
<td class="total">₺6.000,00</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3 mb-3 d-none">
|
||||
<p>{{ trans('invoices.overdue_revenue') }}: <strong style="font-weight: bold;">₺6.000,00</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-6 pl-0 pr-0">
|
||||
<div class="accordion">
|
||||
<div class="card">
|
||||
<div class="card-header" id="accordion-transactions-header" data-toggle="collapse" data-target="#accordion-transactions-body" aria-expanded="false" aria-controls="accordion-transactions-body">
|
||||
<h4 class="mb-0">{{ trans('invoices.revenue_history') }}</h4>
|
||||
</div>
|
||||
<div id="accordion-transactions-body" class="collapse hide" aria-labelledby="accordion-transactions-header">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-flush table-hover">
|
||||
<thead class="thead-light">
|
||||
<tr class="row table-head-line">
|
||||
<th class="col-xs-6 col-sm-6">{{ trans('general.revenue_date') }}</th>
|
||||
<th class="col-xs-6 col-sm-6">{{ trans('general.created') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="row align-items-center border-top-1 tr-py">
|
||||
<td class="col-xs-6 col-sm-6">
|
||||
12.12.2022
|
||||
</td>
|
||||
<td class="col-xs-6 col-sm-6">
|
||||
Created name
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<x-transactions.show.content type="income" :transaction="$revenue" />
|
||||
@endsection
|
||||
|
||||
@push('scripts_start')
|
||||
<link rel="stylesheet" href="{{ asset('public/css/print.css?v=' . version('short')) }}" type="text/css">
|
||||
<link rel="stylesheet" href="{{ asset('public/css/print.css?v=' . version('short')) }}" type="text/css">
|
||||
|
||||
<script src="{{ asset('public/js/sales/revenues.js?v=' . version('short')) }}"></script>
|
||||
<x-transactions.script type="income" />
|
||||
@endpush
|
||||
|
@ -81,6 +81,9 @@ Route::group(['prefix' => 'sales'], function () {
|
||||
Route::get('invoices/export', 'Sales\Invoices@export')->name('invoices.export');
|
||||
Route::resource('invoices', 'Sales\Invoices', ['middleware' => ['date.format', 'money', 'dropzone']]);
|
||||
|
||||
Route::get('revenues/{revenue}/email', 'Sales\Revenues@emailRevenue')->name('revenues.email');
|
||||
Route::get('revenues/{revenue}/print', 'Sales\Revenues@printRevenue')->name('revenues.print');
|
||||
Route::get('revenues/{revenue}/pdf', 'Sales\Revenues@pdfRevenue')->name('revenues.pdf');
|
||||
Route::get('revenues/{revenue}/duplicate', 'Sales\Revenues@duplicate')->name('revenues.duplicate');
|
||||
Route::post('revenues/import', 'Sales\Revenues@import')->name('revenues.import');
|
||||
Route::get('revenues/export', 'Sales\Revenues@export')->name('revenues.export');
|
||||
@ -108,6 +111,9 @@ Route::group(['prefix' => 'purchases'], function () {
|
||||
Route::get('bills/export', 'Purchases\Bills@export')->name('bills.export');
|
||||
Route::resource('bills', 'Purchases\Bills', ['middleware' => ['date.format', 'money', 'dropzone']]);
|
||||
|
||||
Route::get('payments/{payment}/email', 'Purchases\Payments@emailPayment')->name('payments.email');
|
||||
Route::get('payments/{payment}/print', 'Purchases\Payments@printPayment')->name('payments.print');
|
||||
Route::get('payments/{payment}/pdf', 'Purchases\Payments@pdfPayment')->name('payments.pdf');
|
||||
Route::get('payments/{payment}/duplicate', 'Purchases\Payments@duplicate')->name('payments.duplicate');
|
||||
Route::post('payments/import', 'Purchases\Payments@import')->name('payments.import');
|
||||
Route::get('payments/export', 'Purchases\Payments@export')->name('payments.export');
|
||||
|
@ -14,3 +14,7 @@ Route::get('invoices/{invoice}/print', 'Portal\Invoices@printInvoice')->name('si
|
||||
Route::get('invoices/{invoice}/pdf', 'Portal\Invoices@pdfInvoice')->name('signed.invoices.pdf');
|
||||
Route::post('invoices/{invoice}/payment', 'Portal\Invoices@payment')->name('signed.invoices.payment');
|
||||
Route::post('invoices/{invoice}/confirm', 'Portal\Invoices@confirm')->name('signed.invoices.confirm');
|
||||
|
||||
Route::get('payments/{payment}', 'Portal\Payments@signed')->name('signed.payments.show');
|
||||
Route::get('payments/{payment}/print', 'Portal\Payments@printInvoice')->name('signed.payments.print');
|
||||
Route::get('payments/{payment}/pdf', 'Portal\Payments@pdfInvoice')->name('signed.payments.pdf');
|
||||
|
Loading…
x
Reference in New Issue
Block a user