type = $type; $this->document = $document; /** Advanced Component Start */ $this->categoryType = $this->getCategoryType($type, $categoryType); $this->hideRecurring = $hideRecurring; $this->hideCategory = $hideCategory; $this->hideAttachment = $hideAttachment; /** Advanced Component End */ /** Company Component Start */ $this->hideLogo = $hideLogo; $this->hideDocumentTitle = $hideDocumentTitle; $this->hideDocumentSubheading = $hideDocumentSubheading; $this->hideCompanyEdit = $hideCompanyEdit; $this->titleSetting = $this->getTitleSettingValue($titleSetting); $this->subheadingSetting = $this->getSubheadingSettingValue($subheadingSetting); /** Company Component End */ /** Content Component Start */ $this->routeStore = $this->getRouteStore($type, $routeStore); $this->routeUpdate = $this->getRouteUpdate($type, $routeUpdate, $document); $this->routeCancel = $this->getRouteCancel($type, $routeCancel); $this->formId = $formId; $this->formSubmit = $formSubmit; $this->hideCompany = $hideCompany; $this->hideAdvanced = $hideAdvanced; $this->hideFooter = $hideFooter; $this->hideButtons = $hideButtons; $this->footerSetting = $this->getFooterSettingValue($footerSetting); $this->notesSetting = $this->getNotesSettingValue($notesSetting); /** Content Component End */ /** Metadata Component Start */ $this->contacts = $this->getContacts($type, $contacts); $this->contact = $this->getContact($contact, $document); $this->contactType = $this->getContactType($type, $contactType); $this->textAddContact = $this->getTextAddContact($type, $textAddContact); $this->textCreateNewContact = $this->getTextCreateNewContact($type, $textCreateNewContact); $this->textEditContact = $this->getTextEditContact($type, $textEditContact); $this->textContactInfo = $this->getTextContactInfo($type, $textContactInfo); $this->textChooseDifferentContact = $this->getTextChooseDifferentContact($type, $textChooseDifferentContact); $this->hideContact = $hideContact; $this->hideIssuedAt = $hideIssuedAt; $this->hideDocumentNumber = $hideDocumentNumber; $this->hideDueAt = $hideDueAt; $this->hideOrderNumber = $hideOrderNumber; $this->issuedAt = $this->getIssuedAt($type, $document, $issuedAt); $this->documentNumber = $this->getDocumentNumber($type, $document, $documentNumber); $this->dueAt = $this->getDueAt($type, $document, $dueAt); $this->orderNumber = $this->getOrderNumber($type, $document, $orderNumber); $this->textIssuedAt = $this->getTextIssuedAt($type, $textIssuedAt); $this->textDocumentNumber = $this->getTextDocumentNumber($type, $textDocumentNumber); $this->textDueAt = $this->getTextDueAt($type, $textDueAt); $this->textOrderNumber = $this->getTextOrderNumber($type, $textOrderNumber); /** Metadata Component End */ /** Items Component Start */ $this->textItems = $this->getTextItems($type, $textItems); $this->textQuantity = $this->getTextQuantity($type, $textQuantity); $this->textPrice = $this->getTextPrice($type, $textPrice); $this->textAmount = $this->getTextAmount($type, $textAmount); $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->hideEditItemColumns = $hideEditItemColumns; $this->isSalePrice = $isSalePrice; $this->isPurchasePrice = $isPurchasePrice; /** Items Component End */ } protected function getRouteStore($type, $routeStore) { if (!empty($routeStore)) { return $routeStore; } $route = $this->getRouteFromConfig($type, 'store'); if (!empty($route)) { return $route; } return 'invoices.store'; } protected function getRouteUpdate($type, $routeUpdate, $document, $parameters = []) { if (!empty($routeUpdate)) { return $routeUpdate; } $parameters = [ config('type.' . $type. '.route.parameter') => ($document) ? $document->id : 1, ]; $route = $this->getRouteFromConfig($type, 'update', $parameters); if (!empty($route)) { return $route; } return 'invoices.update'; } protected function getRouteCancel($type, $routeCancel) { if (!empty($routeCancel)) { return $routeCancel; } $route = $this->getRouteFromConfig($type, 'index'); if (!empty($route)) { return $route; } return 'invoices.index'; } protected function getCategoryType($type, $categoryType) { if (!empty($categoryType)) { return $categoryType; } if ($category_type = config('type.' . $type . '.category_type')) { return $category_type; } // set default type $type = Document::INVOICE_TYPE; return config('type.' . $type . '.category_type'); } protected function getContacts($type, $contacts) { if (!empty($contacts)) { return $contacts; } $contact_type = $this->getContactType($type, null); if ($contact_type) { $contacts = Contact::$contact_type()->enabled()->orderBy('name')->take(setting('default.select_limit'))->get(); } else { $contacts = Contact::enabled()->orderBy('name')->take(setting('default.select_limit'))->get(); } return $contacts; } protected function getContact($contact, $document) { if (!empty($contact)) { return $contact; } $contact = new \stdClass(); if (!empty($document) && !empty($document->contact)) { $contact = $document->contact; } if (request()->old('contact', false)) { $contact = request()->old('contact'); } return $contact; } protected function getContactType($type, $contactType) { if (!empty($contactType)) { return $contactType; } if ($contact_type = config('type.' . $type . '.contact_type')) { return $contact_type; } // set default type $type = Document::INVOICE_TYPE; return config('type.' . $type . '.contact_type'); } protected function getTextAddContact($type, $textAddContact) { if (!empty($textAddContact)) { return $textAddContact; } $default_key = Str::plural(config('type.' . $type . '.contact_type'), 2); $translation = $this->getTextFromConfig($type, 'add_contact', $default_key, 'trans_choice'); if (!empty($translation)) { return [ 'general.form.add', $translation, ]; } return [ 'general.form.add', 'general.customers', ]; } protected function getTextCreateNewContact($type, $textCreateNewContact) { if (!empty($textCreateNewContact)) { return $textCreateNewContact; } /* $default_key = Str::plural(config('type.' . $type . '.contact_type'), 2); $translation = $this->getTextFromConfig($type, 'create_new_contact', $default_key, 'trans_choice'); if (!empty($translation)) { return [ 'general.form.add_new', $translation, ]; } */ return 'general.add_new'; } protected function getTextEditContact($type, $textEditContact) { if (!empty($textEditContact)) { return $textEditContact; } $translation = $this->getTextFromConfig($type, 'edit_contact', 'form.edit'); if (!empty($translation)) { return $translation; } return 'general.form.edit'; } 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 getTextChooseDifferentContact($type, $textChooseDifferentContact) { if (!empty($textChooseDifferentContact)) { return $textChooseDifferentContact; } $default_key = Str::plural(config('type.' . $type . '.contact_type'), 2); $translation = $this->getTextFromConfig($type, 'choose_different_contact', $default_key, 'trans_choice'); if (!empty($translation)) { return [ 'general.form.choose_different', $translation, ]; } return [ 'general.form.choose_different', 'general.customers', ]; } protected function getIssuedAt($type, $document, $issuedAt) { if (!empty($issuedAt)) { return $issuedAt; } if ($document) { return $document->issued_at; } $issued_at = $type . '_at'; if (request()->has($issued_at)) { $issuedAt = request()->get($issued_at); } else { $issuedAt = request()->get('invoice_at', Date::now()->toDateString()); } return $issuedAt; } protected function getDocumentNumber($type, $document, $documentNumber) { if (!empty($documentNumber)) { return $documentNumber; } if ($document) { return $document->document_number; } $document_number = $this->getNextDocumentNumber($type); if (empty($document_number)) { $document_number = $this->getNextDocumentNumber(Document::INVOICE_TYPE); } return $document_number; } protected function getDueAt($type, $document, $dueAt) { if (!empty($dueAt)) { return $dueAt; } if ($document) { return $document->due_at; } $issued_at = $type . '_at'; if (request()->has($issued_at)) { $issuedAt = request()->get($issued_at); } else { $issuedAt = Date::now()->toDateString(); } $addDays = setting($this->getSettingKey($type, 'payment_terms'), 0) ?: 0; $dueAt = Date::parse($issuedAt)->addDays($addDays)->toDateString(); return $dueAt; } protected function getOrderNumber($type, $document, $orderNumber) { if (!empty($orderNumber)) { return $orderNumber; } if ($document) { return $document->order_number; } $order_number = null; } protected function getTextDocumentNumber($type, $textDocumentNumber) { if (!empty($textDocumentNumber)) { return $textDocumentNumber; } switch ($type) { case 'bill': case 'expense': case 'purchase': $default_key = 'bill_number'; break; default: $default_key = 'invoice_number'; break; } $translation = $this->getTextFromConfig($type, 'document_number', $default_key); if (!empty($translation)) { return $translation; } return 'invoices.invoice_number'; } 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 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); } protected function getTitleSettingValue($titleSetting) { if (!empty($titleSetting)) { return $titleSetting; } return setting($this->getSettingKey($this->type, 'title')); } protected function getSubheadingSettingValue($subheadingSetting) { if (!empty($subheadingSetting)) { return $subheadingSetting; } return setting($this->getSettingKey($this->type, 'subheading')); } protected function getFooterSettingValue($footerSetting) { if (!empty($footerSetting)) { return $footerSetting; } return setting($this->getSettingKey($this->type, 'footer')); } protected function getNotesSettingValue($notesSetting) { if (!empty($notesSetting)) { return $notesSetting; } return setting($this->getSettingKey($this->type, 'notes')); } }