diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 2e6b735fb71d..1ad03907e6b4 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -115,6 +115,8 @@ class CompanySettings extends BaseSettings { public $invoice_design_id = '1'; public $quote_design_id = '1'; public $invoice_footer = ''; + public $credit_footer = ''; + public $credit_terms = ''; public $invoice_labels = ''; public $tax_name1 = ''; public $tax_rate1 = 0; @@ -336,6 +338,8 @@ class CompanySettings extends BaseSettings { 'invoice_footer' => 'string', 'invoice_labels' => 'string', 'invoice_terms' => 'string', + 'credit_footer' => 'string', + 'credit_terms' => 'string', 'name' => 'string', 'payment_terms' => 'integer', 'payment_type_id' => 'string', diff --git a/app/Factory/CreditFactory.php b/app/Factory/CreditFactory.php index 9e6d5902d21b..aee479df9c2a 100644 --- a/app/Factory/CreditFactory.php +++ b/app/Factory/CreditFactory.php @@ -11,11 +11,12 @@ namespace App\Factory; +use App\Models\Client; use App\Models\Credit; class CreditFactory { - public static function create(int $company_id, int $user_id) :Credit + public static function create(int $company_id, int $user_id, object $settings, Client $client) :Credit { $credit = new Credit(); $credit->status_id = Credit::STATUS_DRAFT; @@ -23,9 +24,9 @@ class CreditFactory $credit->discount = 0; $credit->is_amount_discount = true; $credit->po_number = ''; - $credit->footer = ''; - $credit->terms = ''; - $credit->public_notes = ''; + $credit->footer = strlen($settings->credit_footer) > 0 ? $settings->credit_footer : ''; + $credit->terms = strlen($settings->credit_terms) > 0 ? $settings->credit_terms : ''; + $credit->public_notes = strlen($client->public_notes) > 0 ? $client->public_notes : ''; $credit->private_notes = ''; $credit->date = null; $credit->due_date = null; diff --git a/app/Factory/InvoiceFactory.php b/app/Factory/InvoiceFactory.php index 8e9c40e121db..bf2ec8d69ca9 100644 --- a/app/Factory/InvoiceFactory.php +++ b/app/Factory/InvoiceFactory.php @@ -13,12 +13,13 @@ namespace App\Factory; use App\DataMapper\ClientSettings; use App\DataMapper\CompanySettings; +use App\Models\Client; use App\Models\Invoice; use Illuminate\Support\Facades\Log; class InvoiceFactory { - public static function create(int $company_id, int $user_id) :Invoice + public static function create(int $company_id, int $user_id, object $settings, Client $client) :Invoice { $invoice = new Invoice(); $invoice->status_id = Invoice::STATUS_DRAFT; @@ -26,9 +27,9 @@ class InvoiceFactory $invoice->discount = 0; $invoice->is_amount_discount = true; $invoice->po_number = ''; - $invoice->footer = ''; - $invoice->terms = ''; - $invoice->public_notes = ''; + $invoice->footer = strlen($settings->invoice_footer) > 0 ? $settings->invoice_footer : ''; + $invoice->terms = strlen($settings->invoice_terms) > 0 ? $settings->invoice_terms : ''; + $invoice->public_notes = strlen($client->public_notes) > 0 ? $client->public_notes : ''; $invoice->private_notes = ''; $invoice->date = null; $invoice->due_date = null; diff --git a/app/Factory/QuoteFactory.php b/app/Factory/QuoteFactory.php index 6587e64cf949..b2f3affd031e 100644 --- a/app/Factory/QuoteFactory.php +++ b/app/Factory/QuoteFactory.php @@ -13,12 +13,13 @@ namespace App\Factory; use App\DataMapper\ClientSettings; use App\DataMapper\CompanySettings; +use App\Models\Client; use App\Models\Quote; use Illuminate\Support\Facades\Log; class QuoteFactory { - public static function create(int $company_id, int $user_id) :Quote + public static function create(int $company_id, int $user_id, object $settings, Client $client) :Quote { $quote = new Quote(); $quote->status_id = Quote::STATUS_DRAFT; @@ -26,9 +27,9 @@ class QuoteFactory $quote->discount = 0; $quote->is_amount_discount = true; $quote->po_number = ''; - $quote->footer = ''; - $quote->terms = ''; - $quote->public_notes = ''; + $quote->footer = strlen($settings->quote_footer) > 0 ? $settings->quote_footer : ''; + $quote->terms = strlen($settings->quote_terms) > 0 ? $settings->quote_terms : ''; + $quote->public_notes = strlen($client->public_notes) > 0 ? $client->public_notes : ''; $quote->private_notes = ''; $quote->date = null; $quote->due_date = null; diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 88cc27fe0475..5a39e14dd807 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -29,6 +29,7 @@ use App\Jobs\Invoice\CreateInvoicePdf; use App\Jobs\Invoice\EmailInvoice; use App\Jobs\Invoice\StoreInvoice; use App\Jobs\Invoice\ZipInvoices; +use App\Models\Client; use App\Models\Invoice; use App\Models\InvoiceInvitation; use App\Repositories\InvoiceRepository; @@ -203,7 +204,10 @@ class InvoiceController extends BaseController { * */ public function store(StoreInvoiceRequest $request) { - $invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id)); + + $client = Client::find($request->input('client_id')); + + $invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id), $client->getMergedSettings(), $client); $invoice = StoreInvoice::dispatchNow($invoice, $request->all(), $invoice->company);//todo potentially this may return mixed ie PDF/$invoice... need to revisit when we implement UI diff --git a/app/Services/Invoice/MarkPaid.php b/app/Services/Invoice/MarkPaid.php index 831c9f84c799..c439faae9748 100644 --- a/app/Services/Invoice/MarkPaid.php +++ b/app/Services/Invoice/MarkPaid.php @@ -18,9 +18,12 @@ use App\Models\Payment; use App\Services\AbstractService; use App\Services\Client\ClientService; use App\Services\Payment\PaymentService; +use App\Utils\Traits\GeneratesCounter; class MarkPaid extends AbstractService { + use GeneratesCounter; + private $client_service; private $invoice; @@ -42,6 +45,7 @@ class MarkPaid extends AbstractService $payment = PaymentFactory::create($this->invoice->company_id, $this->invoice->user_id); $payment->amount = $this->invoice->balance; + $payment->number = $this->getNextPaymentNumber($payment->client); $payment->status_id = Payment::STATUS_COMPLETED; $payment->client_id = $this->invoice->client_id; $payment->transaction_reference = ctrans('texts.manual_entry');