type = $type; $this->document = $document; /** Advanced Component Start */ $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; /** Company Component End */ /** Content Component Start */ $this->formRoute = ($formRoute) ? $formRoute : $this->getRoute($type, $document); $this->formId = $formId; $this->formSubmit = $formSubmit; $this->hideCompany = $hideCompany; $this->hideAdvanced = $hideAdvanced; $this->hideFooter = $hideFooter; $this->hideButtons = $hideButtons; /** 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 getRoute($type, $document, $parameters = []) { $page = Str::plural($type, 2); $route = $page . '.store'; if ($document) { $parameters = [ Str::replaceFirst('-', '_', $type) => $document->id ]; $route = $page . '.update'; } try { route($route, $parameters); } catch (\Exception $e) { $route = ''; } return $route; } 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; } return $contact; } protected function getContactType($type, $contact_type) { if (!empty($contact_type)) { return $contact_type; } switch ($type) { case 'bill': case 'expense': case 'purchase': $contact_type = 'vendor'; break; default: $contact_type = 'customer'; break; } return $contact_type; } protected function getTextAddContact($type, $textAddContact) { if (!empty($textAddContact)) { return $textAddContact; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textAddContact = [ 'general.form.add', 'general.vendors' ]; break; default: $textAddContact = [ 'general.form.add', 'general.customers' ]; break; } return $textAddContact; } protected function getTextCreateNewContact($type, $textCreateNewContact) { if (!empty($textCreateNewContact)) { return $textCreateNewContact; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textCreateNewContact = [ 'general.form.add_new', 'general.vendors' ]; break; default: $textCreateNewContact = [ 'general.form.add_new', 'general.customers' ]; break; } return $textCreateNewContact; } protected function getTextEditContact($type, $textEditContact) { if (!empty($textEditContact)) { return $textEditContact; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textEditContact = 'general.form.edit'; break; default: $textEditContact = 'general.form.edit'; break; } return $textEditContact; } protected function getTextContactInfo($type, $textContactInfo) { if (!empty($textContactInfo)) { return $textContactInfo; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textContactInfo = 'bills.bill_from'; break; default: $textContactInfo = 'invoices.bill_to'; break; } return $textContactInfo; } protected function getTextChooseDifferentContact($type, $textChooseDifferentContact) { if (!empty($textChooseDifferentContact)) { return $textChooseDifferentContact; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textChooseDifferentContact = [ 'general.form.choose_different', 'general.vendors' ]; break; default: $textChooseDifferentContact = [ 'general.form.choose_different', 'general.customers' ]; break; } return $textChooseDifferentContact; } protected function getIssuedAt($type, $document, $issued_at) { if (!empty($issued_at)) { return $issued_at; } if ($document) { return $document->issued_at; } switch ($type) { case 'bill': case 'expense': case 'purchase': $issued_at = request()->get('billed_at', Date::now()->toDateString()); break; default: $issued_at = request()->get('invoiced_at', Date::now()->toDateString()); break; } return $issued_at; } protected function getDocumentNumber($type, $document, $document_number) { if (!empty($document_number)) { return $document_number; } if ($document) { return $document->document_number; } switch ($type) { case 'bill': case 'expense': case 'purchase': $document_number = $this->getNextDocumentNumber(Document::BILL_TYPE); break; default: $document_number = $this->getNextDocumentNumber(Document::INVOICE_TYPE); break; } return $document_number; } protected function getDueAt($type, $document, $due_at) { if (!empty($due_at)) { return $due_at; } if ($document) { return $document->due_at; } switch ($type) { case 'bill': case 'expense': case 'purchase': $due_at = request()->get('billed_at', Date::now()->toDateString()); break; default: $due_at = Date::parse(request()->get('invoiced_at', Date::now()->toDateString()))->addDays(setting('invoice.payment_terms', 0))->toDateString(); break; } return $due_at; } protected function getOrderNumber($type, $document, $order_number) { if (!empty($order_number)) { return $order_number; } 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': $textDocumentNumber = 'bills.bill_number'; break; default: $textDocumentNumber = 'invoices.invoice_number'; break; } return $textDocumentNumber; } protected function getTextOrderNumber($type, $textOrderNumber) { if (!empty($textOrderNumber)) { return $textOrderNumber; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textOrderNumber = 'bills.order_number'; break; default: $textOrderNumber = 'invoices.order_number'; break; } return $textOrderNumber; } protected function getTextIssuedAt($type, $textIssuedAt) { if (!empty($textIssuedAt)) { return $textIssuedAt; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textIssuedAt = 'bills.bill_date'; break; default: $textIssuedAt = 'invoices.invoice_date'; break; } return $textIssuedAt; } protected function getTextDueAt($type, $textDueAt) { if (!empty($textDueAt)) { return $textDueAt; } switch ($type) { case 'bill': case 'expense': case 'purchase': $textDueAt = 'bills.due_date'; break; default: $textDueAt = 'invoices.due_date'; break; } return $textDueAt; } protected function getTextItems($type, $text_items) { if (!empty($text_items)) { return $text_items; } switch ($type) { case 'bill': case 'expense': case 'purchase': $text_items = 'general.items'; break; default: $text_items = setting('invoice.item_name', 'general.items'); if ($text_items == 'custom') { $text_items = setting('invoice.item_name_input'); } break; } return $text_items; } protected function getTextQuantity($type, $text_quantity) { if (!empty($text_quantity)) { return $text_quantity; } switch ($type) { case 'bill': case 'expense': case 'purchase': $text_quantity = 'bills.quantity'; break; default: $text_quantity = setting('invoice.quantity_name', 'invoices.quantity'); if ($text_quantity == 'custom') { $text_quantity = setting('invoice.quantity_name_input'); } break; } return $text_quantity; } protected function getTextPrice($type, $text_price) { if (!empty($text_price)) { return $text_price; } switch ($type) { case 'bill': case 'expense': case 'purchase': $text_price = 'bills.price'; break; default: $text_price = setting('invoice.price_name', 'invoices.price'); if ($text_price == 'custom') { $text_price = setting('invoice.price_name_input'); } break; } return $text_price; } protected function getTextAmount($type, $text_amount) { if (!empty($text_amount)) { return $text_amount; } $text_amount = 'general.amount'; return $text_amount; } protected function getHideItems($type, $hideItems, $hideName, $hideDescription) { if (!empty($hideItems)) { return $hideItems; } $hideItems = ($this->getHideName($type, $hideName) & $this->getHideDescription($type, $hideDescription)) ? true : false; return $hideItems; } protected function getHideName($type, $hideName) { if (!empty($hideName)) { return $hideName; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hideName = setting('bill.hide_item_name', $hideName); break; default: $hideName = setting('invoice.hide_item_name', $hideName); break; } return $hideName; } protected function getHideDescription($type, $hideDescription) { if (!empty($hideDescription)) { return $hideDescription; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hideDescription = setting('bill.hide_item_description', $hideDescription); break; default: $hideDescription = setting('invoice.hide_item_description', $hideDescription); break; } return $hideDescription; } protected function getHideQuantity($type, $hideQuantity) { if (!empty($hideQuantity)) { return $hideQuantity; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hideQuantity = setting('bill.hide_quantity', $hideQuantity); break; default: $hideQuantity = setting('invoice.hide_quantity', $hideQuantity); break; } return $hideQuantity; } protected function getHidePrice($type, $hidePrice) { if (!empty($hidePrice)) { return $hidePrice; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hidePrice = setting('bill.hide_price', $hidePrice); break; default: $hidePrice = setting('invoice.hide_price', $hidePrice); break; } return $hidePrice; } protected function getHideDiscount($type, $hideDiscount) { if (!empty($hideDiscount)) { return $hideDiscount; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hideDiscount = setting('bill.hide_discount', $hideDiscount); break; default: $hideDiscount = setting('invoice.hide_discount', $hideDiscount); break; } return $hideDiscount; } protected function getHideAmount($type, $hideAmount) { if (!empty($hideAmount)) { return $hideAmount; } switch ($type) { case 'bill': case 'expense': case 'purchase': $hideAmount = setting('bill.hide_amount', $hideAmount); break; default: $hideAmount = setting('invoice.hide_amount', $hideAmount); break; } return $hideAmount; } }