From 50a84f9ffb24bbc9be661338426ec94aeeb8dea5 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 28 Jun 2017 17:39:32 +0300 Subject: [PATCH] Support creating/sending recurring invoices with the API --- app/Http/Controllers/InvoiceApiController.php | 13 ++++++++++++- app/Ninja/Datatables/RecurringInvoiceDatatable.php | 11 ++++++++--- app/Ninja/Repositories/InvoiceRepository.php | 4 ++-- resources/lang/en/texts.php | 1 + 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/InvoiceApiController.php b/app/Http/Controllers/InvoiceApiController.php index 42cd837a5d17..7eeb44e1ebd7 100644 --- a/app/Http/Controllers/InvoiceApiController.php +++ b/app/Http/Controllers/InvoiceApiController.php @@ -202,7 +202,10 @@ class InvoiceApiController extends BaseAPIController if ($payment) { app('App\Ninja\Mailers\ContactMailer')->sendPaymentConfirmation($payment); //$this->dispatch(new SendPaymentEmail($payment)); - } elseif (! $invoice->is_recurring) { + } else { + if ($invoice->is_recurring && $recurringInvoice = $this->invoiceRepo->createRecurringInvoice($invoice)) { + $invoice = $recurringInvoice; + } app('App\Ninja\Mailers\ContactMailer')->sendInvoice($invoice); //$this->dispatch(new SendInvoiceEmail($invoice)); } @@ -238,6 +241,10 @@ class InvoiceApiController extends BaseAPIController 'custom_value2' => 0, 'custom_taxes1' => false, 'custom_taxes2' => false, + 'tax_name1' => '', + 'tax_rate1' => 0, + 'tax_name2' => '', + 'tax_rate2' => 0, 'partial' => 0, ]; @@ -314,6 +321,10 @@ class InvoiceApiController extends BaseAPIController { $invoice = $request->entity(); + if ($invoice->is_recurring && $recurringInvoice = $this->invoiceRepo->createRecurringInvoice($invoice)) { + $invoice = $recurringInvoice; + } + //$this->dispatch(new SendInvoiceEmail($invoice)); $result = app('App\Ninja\Mailers\ContactMailer')->sendInvoice($invoice); diff --git a/app/Ninja/Datatables/RecurringInvoiceDatatable.php b/app/Ninja/Datatables/RecurringInvoiceDatatable.php index 074986d4eb59..9b0007aca944 100644 --- a/app/Ninja/Datatables/RecurringInvoiceDatatable.php +++ b/app/Ninja/Datatables/RecurringInvoiceDatatable.php @@ -17,10 +17,15 @@ class RecurringInvoiceDatatable extends EntityDatatable [ 'frequency', function ($model) { - $frequency = strtolower($model->frequency); - $frequency = preg_replace('/\s/', '_', $frequency); + if ($model->frequency) { + $frequency = strtolower($model->frequency); + $frequency = preg_replace('/\s/', '_', $frequency); + $label = trans('texts.freq_' . $frequency); + } else { + $label = trans('texts.freq_inactive'); + } - return link_to("recurring_invoices/{$model->public_id}/edit", trans('texts.freq_'.$frequency))->toHtml(); + return link_to("recurring_invoices/{$model->public_id}/edit", $label)->toHtml(); }, ], [ diff --git a/app/Ninja/Repositories/InvoiceRepository.php b/app/Ninja/Repositories/InvoiceRepository.php index 916c2bd5be78..39b6a361860a 100644 --- a/app/Ninja/Repositories/InvoiceRepository.php +++ b/app/Ninja/Repositories/InvoiceRepository.php @@ -144,7 +144,7 @@ class InvoiceRepository extends BaseRepository ->join('accounts', 'accounts.id', '=', 'invoices.account_id') ->join('clients', 'clients.id', '=', 'invoices.client_id') ->join('invoice_statuses', 'invoice_statuses.id', '=', 'invoices.invoice_status_id') - ->join('frequencies', 'frequencies.id', '=', 'invoices.frequency_id') + ->leftJoin('frequencies', 'frequencies.id', '=', 'invoices.frequency_id') ->join('contacts', 'contacts.client_id', '=', 'clients.id') ->where('invoices.account_id', '=', $accountId) ->where('invoices.invoice_type_id', '=', INVOICE_TYPE_STANDARD) @@ -430,7 +430,7 @@ class InvoiceRepository extends BaseRepository $invoice->last_sent_date = null; } - $invoice->frequency_id = array_get($data, 'frequency_id', 0); + $invoice->frequency_id = array_get($data, 'frequency_id', FREQUENCY_MONTHLY); $invoice->start_date = Utils::toSqlDate(array_get($data, 'start_date')); $invoice->end_date = Utils::toSqlDate(array_get($data, 'end_date')); $invoice->client_enable_auto_bill = isset($data['client_enable_auto_bill']) && $data['client_enable_auto_bill'] ? true : false; diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 27bc9ac0d2ff..acb3d5436009 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -1373,6 +1373,7 @@ $LANG = array( 'start_of_week' => 'First Day of the Week', // Frequencies + 'freq_inactive' => 'Inactive', 'freq_weekly' => 'Weekly', 'freq_two_weeks' => 'Two weeks', 'freq_four_weeks' => 'Four weeks',