type = $type; $this->transaction = $transaction; $this->transactionTemplate = $this->getTransactionTemplate($type, $transactionTemplate); $this->logo = $this->getLogo($logo); $this->payment_methods = ($payment_methods) ?: Modules::getPaymentMethods('all'); $this->date_format = $this->getCompanyDateFormat(); // Navbar Hide $this->hideButtonAddNew = $hideButtonAddNew; $this->hideButtonMoreActions = $hideButtonMoreActions; $this->hideButtonEdit = $hideButtonEdit; $this->hideButtonDuplicate = $hideButtonDuplicate; $this->hideButtonPrint = $hideButtonPrint; $this->hideButtonShare = $hideButtonShare; $this->hideButtonEmail = $hideButtonEmail; $this->hideButtonPdf = $hideButtonPdf; $this->hideButtonDelete = $hideButtonDelete; $this->checkButtonReconciled = $checkButtonReconciled; $this->hideButtonGroupDivider1 = $hideButtonGroupDivider1; $this->hideButtonGroupDivider2 = $hideButtonGroupDivider2; $this->hideButtonGroupDivider3 = $hideButtonGroupDivider3; // Navbar Permission $this->permissionCreate = $this->getPermissionCreate($type, $permissionCreate); $this->permissionUpdate = $this->getPermissionUpdate($type, $permissionUpdate); $this->permissionDelete = $this->getPermissionDelete($type, $permissionDelete); // Navbar route $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->signedUrl = $this->getSignedUrl($type, $signedUrl); $this->routeButtonEmail = $this->getRouteButtonEmail($type, $routeButtonEmail); $this->routeButtonPdf = $this->getRouteButtonPdf($type, $routeButtonPdf); $this->routeButtonDelete = $this->getRouteButtonDelete($type, $routeButtonDelete); $this->routeContactShow = $this->getRouteContactShow($type, $routeContactShow); // Navbar Text $this->textDeleteModal = $textDeleteModal; // Header Hide $this->hideHeader = $hideHeader; $this->hideHeaderAccount = $hideHeaderAccount; $this->hideHeaderCategory = $hideHeaderCategory; $this->hideHeaderContact = $hideHeaderContact; $this->hideHeaderCategory = $hideHeaderCategory; $this->hideHeaderAmount = $hideHeaderAmount; $this->hideHeaderPaidAt = $hideHeaderPaidAt; // Header Text $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); // Header Class $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); // Hide Attachment $this->hideAttachment = $hideAttachment; // Company Information Hide checker $this->hideCompany = $hideCompany; $this->hideCompanyLogo = $hideCompanyLogo; $this->hideCompanyDetails = $hideCompanyDetails; $this->hideCompanyName = $hideCompanyName; $this->hideCompanyAddress = $hideCompanyAddress; $this->hideCompanyTaxNumber = $hideCompanyTaxNumber; $this->hideCompanyPhone = $hideCompanyPhone; $this->hideCompanyEmail = $hideCompanyEmail; // Transaction Information Hide checker $this->hideContentTitle = $hideContentTitle; $this->hidePaidAt = $hidePaidAt; $this->hideAccount = $hideAccount; $this->hideCategory = $hideCategory; $this->hidePaymentMethods = $hidePaymentMethods; $this->hideReference = $hideReference; $this->hideDescription = $hideDescription; $this->hideAmount = $hideAmount; // Transaction Information Text $this->textContentTitle = $this->getTextContentTitle($type, $textContentTitle); $this->textPaidAt = $this->getTextPaidAt($type, $textPaidAt); $this->textAccount = $this->getTextAccount($type, $textAccount); $this->textCategory = $this->getTextCategory($type, $textCategory); $this->textPaymentMethods = $this->getTextPaymentMethods($type, $textPaymentMethods); $this->textReference = $this->getTextReference($type, $textReference); $this->textDescription = $this->getTextDescription($type, $textDescription); $this->textAmount = $this->getTextAmount($type, $textAmount); $this->textPaidBy = $this->getTextPaidBy($type, $textPaidBy); // Contact Information Hide checker $this->hideContact = $hideContact; $this->hideContactInfo = $hideContactInfo; $this->hideContactName = $hideContactName; $this->hideContactAddress = $hideContactAddress; $this->hideContactTaxNumber = $hideContactTaxNumber; $this->hideContactPhone = $hideContactPhone; $this->hideContactEmail = $hideContactEmail; // Releated Information Hide checker $this->hideReletad = $hideReletad; $this->hideReletadDocumentNumber = $hideReletadDocumentNumber; $this->hideReletadContact = $hideReletadContact; $this->hideReletadDocumentDate = $hideReletadDocumentDate; $this->hideReletadDocumentAmount = $hideReletadDocumentAmount; $this->hideReletadAmount = $hideReletadAmount; // Releated Information Text $this->textReleatedTransansaction = $this->getTextReleatedTransansaction($type, $textReleatedTransansaction); $this->textReleatedDocumentNumber = $this->getTextReleatedDocumentNumber($type, $textReleatedDocumentNumber); $this->textReleatedContact = $this->getTextReleatedContact($type, $textReleatedContact); $this->textReleatedDocumentDate = $this->getTextReleatedDocumentDate($type, $textReleatedDocumentDate); $this->textReleatedDocumentAmount = $this->getTextReleatedDocumentAmount($type, $textReleatedDocumentAmount); $this->textReleatedAmount = $this->getTextReleatedAmount($type, $textReleatedAmount); $this->routeDocumentShow = $this->routeDocumentShow($type, $routeDocumentShow); // Attachment data.. $this->attachment = ''; if (!empty($attachment)) { $this->attachment = $attachment; } else if (!empty($transaction)) { $this->attachment = $transaction->attachment; } // Histories Hide $this->hideFooter = $hideFooter; $this->hideFooterHistories = $hideFooterHistories; // Histories $this->histories = $this->getHistories($histories); $this->textHistories = $this->getTextHistories($type, $textHistories); $this->classFooterHistories = $this->getClassFooterHistories($type, $classFooterHistories); } 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_id = (!empty($this->transaction->contact->logo) && !empty($this->transaction->contact->logo->id)) ? $this->transaction->contact->logo->id : setting('company.logo'); $media = Media::find($media_id); 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 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 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 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 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 getRouteContactShow($type, $routeContactShow) { if (!empty($routeContactShow)) { return $routeContactShow; } //example route parameter. $parameter = 1; $route = Str::plural(config('type.' . $type . '.contact_type'), 2) . '.show'; try { route($route, $config_parameters); } catch (\Exception $e) { try { $route = Str::plural($type, 2) . '.' . $config_key; route($route, $config_parameters); } catch (\Exception $e) { $route = ''; } } if (!empty($route)) { return $route; } return 'customers.show'; } 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; } $translation = $this->getTextFromConfig($type, 'header_account', 'accounts', 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.accounts'; } protected function getTextHeaderCategory($type, $textHeaderCategory) { if (!empty($textHeaderCategory)) { return $textHeaderCategory; } $translation = $this->getTextFromConfig($type, 'header_category', 'categories', 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.categories'; } 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'); if (!empty($translation)) { return $translation; } return 'general.amount'; } protected function getTextHeaderPaidAt($type, $textHeaderPaidAt) { if (!empty($textHeaderPaidAt)) { return $textHeaderPaidAt; } $translation = $this->getTextFromConfig($type, 'header_paid_at', 'date'); if (!empty($translation)) { return $translation; } return 'general.date'; } protected function getClassHeaderAccount($type, $classHeaderAccount) { if (!empty($classHeaderAccount)) { return $classHeaderAccount; } $class = $this->getClassFromConfig($type, 'header_account'); if (!empty($class)) { return $class; } return 'col-4 col-lg-3'; } protected function getClassHeaderContact($type, $classHeaderContact) { if (!empty($classHeaderContact)) { return $classHeaderContact; } $class = $this->getClassFromConfig($type, 'header_contact'); if (!empty($class)) { return $class; } return 'col-4 col-lg-2'; } protected function getClassHeaderCategory($type, $classHeaderCategory) { if (!empty($classHeaderCategory)) { return $classHeaderCategory; } $class = $this->getClassFromConfig($type, 'header_category'); if (!empty($class)) { return $class; } return 'col-4 col-lg-3'; } protected function getClassHeaderAmount($type, $classHeaderAmount) { if (!empty($classHeaderAmount)) { return $classHeaderAmount; } $class = $this->getClassFromConfig($type, 'header_amount'); if (!empty($class)) { return $class; } return 'col-4 col-lg-2'; } protected function getClassHeaderPaidAt($type, $classHeaderPaidAt) { if (!empty($classHeaderPaidAt)) { return $classHeaderPaidAt; } $class = $this->getClassFromConfig($type, 'header_paid_at'); if (!empty($class)) { return $class; } return 'col-4 col-lg-2'; } protected function getTextContentTitle($type, $textContentTitle) { if (!empty($textContentTitle)) { return $textContentTitle; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'payment_made'; break; default: $default_key = 'revenue_received'; break; } $translation = $this->getTextFromConfig($type, $type . '_made', $default_key); if (!empty($translation)) { return $translation; } return 'revenues.revenue_received'; } protected function getTextPaidAt($type, $textPaidAt) { if (!empty($textPaidAt)) { return $textPaidAt; } $translation = $this->getTextFromConfig($type, 'paid_at', 'date'); if (!empty($translation)) { return $translation; } return 'general.date'; } protected function getTextAccount($type, $textAccount) { if (!empty($textAccount)) { return $textAccount; } $translation = $this->getTextFromConfig($type, 'accounts', 'accounts', 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.accounts'; } protected function getTextCategory($type, $textCategory) { if (!empty($textCategory)) { return $textCategory; } $translation = $this->getTextFromConfig($type, 'categories', 'categories', 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.categories'; } protected function getTextPaymentMethods($type, $textPaymentMethods) { if (!empty($textPaymentMethods)) { return $textPaymentMethods; } $translation = $this->getTextFromConfig($type, 'payment_methods', 'payment_methods', 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.payment_methods'; } protected function getTextReference($type, $textReference) { if (!empty($textReference)) { return $textReference; } $translation = $this->getTextFromConfig($type, 'reference', 'reference'); if (!empty($translation)) { return $translation; } return 'general.reference'; } protected function getTextDescription($type, $textDescription) { if (!empty($textDescription)) { return $textDescription; } $translation = $this->getTextFromConfig($type, 'description', 'description'); if (!empty($translation)) { return $translation; } return 'general.description'; } protected function getTextAmount($type, $textAmount) { if (!empty($textAmount)) { return $textAmount; } $translation = $this->getTextFromConfig($type, 'amount', 'amount'); if (!empty($translation)) { return $translation; } return 'general.amount'; } protected function getTextPaidBy($type, $textPaidBy) { if (!empty($textPaidBy)) { return $textPaidBy; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'paid_to'; break; default: $default_key = 'paid_by'; break; } $translation = $this->getTextFromConfig($type, 'paid_to_by', $default_key); if (!empty($translation)) { return $translation; } return 'revenues.paid_by'; } protected function getTextReleatedTransansaction($type, $textReleatedTransansaction) { if (!empty($textReleatedTransansaction)) { return $textReleatedTransansaction; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'related_bill'; break; default: $default_key = 'related_invoice'; break; } $translation = $this->getTextFromConfig($type, 'related_type', $default_key); if (!empty($translation)) { return $translation; } return 'revenues.related_invoice'; } protected function getTextReleatedDocumentNumber($type, $textReleatedDocumentNumber) { if (!empty($textReleatedDocumentNumber)) { return $textReleatedDocumentNumber; } $translation = $this->getTextFromConfig($type, 'related_document_number', 'numbers'); if (!empty($translation)) { return $translation; } return 'general.numbers'; } protected function getTextReleatedContact($type, $textReleatedContact) { if (!empty($textReleatedContact)) { return $textReleatedContact; } $default_key = Str::plural(config('type.' . $type . '.contact_type'), 2); $translation = $this->getTextFromConfig($type, 'related_contact', $default_key, 'trans_choice'); if (!empty($translation)) { return $translation; } return 'general.customers'; } protected function getTextReleatedDocumentDate($type, $textReleatedDocumentDate) { if (!empty($textReleatedDocumentDate)) { return $textReleatedDocumentDate; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'bill_date'; break; default: $default_key = 'invoice_date'; break; } $translation = $this->getTextFromConfig($type, 'related_document_date', $default_key); if (!empty($translation)) { return $translation; } return 'invoices.invoice_date'; } protected function getTextReleatedDocumentAmount($type, $textReleatedDocumentAmount) { if (!empty($textReleatedDocumentAmount)) { return $textReleatedDocumentAmount; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'bill_amount'; break; default: $default_key = 'invoice_amount'; break; } $translation = $this->getTextFromConfig($type, 'related_document_amount', $default_key); if (!empty($translation)) { return $translation; } return 'general.amount'; } protected function getTextReleatedAmount($type, $textReleatedAmount) { if (!empty($textReleatedAmount)) { return $textReleatedAmount; } $translation = $this->getTextFromConfig($type, 'related_amount', 'amount'); if (!empty($translation)) { return $translation; } return 'general.amount'; } protected function routeDocumentShow($type, $routeDocumentShow) { if (!empty($routeDocumentShow)) { return $routeDocumentShow; } if (!$this->transaction->document) { return $routeDocumentShow; } //example route parameter. $parameter = 1; $route = $this->getRouteFromConfig($this->transaction->document->type, 'show', $parameter); if (!empty($route)) { return $route; } return 'invoices.show'; } protected function getHistories($histories) { if (!empty($histories)) { return $histories; } $histories[] = $this->transaction; return $histories; } 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 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'; } }