diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index e2064a511..b4483352b 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -243,18 +243,7 @@ class Bills extends Controller ]); // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - $bill->recurring()->create([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['billed_at'], - 'count' => (int) $request['recurring_count'], - ]); - } + $bill->createRecurring(); // Fire the event to make it extendible event(new BillCreated($bill)); @@ -459,26 +448,7 @@ class Bills extends Controller $this->addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total); // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - if ($bill->has('recurring')->count()) { - $function = 'update'; - } else { - $function = 'create'; - } - - $bill->recurring()->$function([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['billed_at'], - 'count' => (int) $request['recurring_count'], - ]); - } else { - $bill->recurring()->delete(); - } + $bill->updateRecurring(); // Fire the event to make it extendible event(new BillUpdated($bill)); diff --git a/app/Http/Controllers/Expenses/Payments.php b/app/Http/Controllers/Expenses/Payments.php index 1317ed992..fcb6ac7ed 100644 --- a/app/Http/Controllers/Expenses/Payments.php +++ b/app/Http/Controllers/Expenses/Payments.php @@ -97,18 +97,7 @@ class Payments extends Controller } // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - $payment->recurring()->create([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['paid_at'], - 'count' => (int) $request['recurring_count'], - ]); - } + $payment->createRecurring(); $message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]); @@ -210,26 +199,7 @@ class Payments extends Controller } // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - if ($payment->has('recurring')->count()) { - $function = 'update'; - } else { - $function = 'create'; - } - - $payment->recurring()->$function([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['paid_at'], - 'count' => (int) $request['recurring_count'], - ]); - } else { - $payment->recurring()->delete(); - } + $payment->updateRecurring(); $message = trans('messages.success.updated', ['type' => trans_choice('general.payments', 1)]); diff --git a/app/Http/Controllers/Incomes/Invoices.php b/app/Http/Controllers/Incomes/Invoices.php index 7d23019ab..4166520a0 100644 --- a/app/Http/Controllers/Incomes/Invoices.php +++ b/app/Http/Controllers/Incomes/Invoices.php @@ -261,18 +261,7 @@ class Invoices extends Controller $this->increaseNextInvoiceNumber(); // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - $invoice->recurring()->create([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['invoiced_at'], - 'count' => (int) $request['recurring_count'], - ]); - } + $invoice->createRecurring(); // Fire the event to make it extendible event(new InvoiceCreated($invoice)); @@ -480,26 +469,7 @@ class Invoices extends Controller $this->addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total); // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - if ($invoice->has('recurring')->count()) { - $function = 'update'; - } else { - $function = 'create'; - } - - $invoice->recurring()->$function([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['invoiced_at'], - 'count' => (int) $request['recurring_count'], - ]); - } else { - $invoice->recurring()->delete(); - } + $invoice->updateRecurring(); // Fire the event to make it extendible event(new InvoiceUpdated($invoice)); diff --git a/app/Http/Controllers/Incomes/Revenues.php b/app/Http/Controllers/Incomes/Revenues.php index 5e4d347e4..835968775 100644 --- a/app/Http/Controllers/Incomes/Revenues.php +++ b/app/Http/Controllers/Incomes/Revenues.php @@ -99,18 +99,7 @@ class Revenues extends Controller } // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - $revenue->recurring()->create([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['paid_at'], - 'count' => (int) $request['recurring_count'], - ]); - } + $revenue->createRecurring(); $message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]); @@ -212,26 +201,7 @@ class Revenues extends Controller } // Recurring - if ($request->get('recurring_frequency') != 'no') { - $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; - $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; - - if ($revenue->has('recurring')->count()) { - $function = 'update'; - } else { - $function = 'create'; - } - - $revenue->recurring()->$function([ - 'company_id' => session('company_id'), - 'frequency' => $frequency, - 'interval' => $interval, - 'started_at' => $request['paid_at'], - 'count' => (int) $request['recurring_count'], - ]); - } else { - $revenue->recurring()->delete(); - } + $revenue->updateRecurring(); $message = trans('messages.success.updated', ['type' => trans_choice('general.revenues', 1)]); diff --git a/app/Models/Expense/Bill.php b/app/Models/Expense/Bill.php index 1ac8ed36d..b46bdcb07 100644 --- a/app/Models/Expense/Bill.php +++ b/app/Models/Expense/Bill.php @@ -5,13 +5,14 @@ namespace App\Models\Expense; use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; +use App\Traits\Media; +use App\Traits\Recurring; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; -use App\Traits\Media; class Bill extends Model { - use Cloneable, Currencies, DateTime, Eloquence, Media; + use Cloneable, Currencies, DateTime, Eloquence, Media, Recurring; protected $table = 'bills'; diff --git a/app/Models/Expense/Payment.php b/app/Models/Expense/Payment.php index 46d1ed8f2..56a85d43e 100644 --- a/app/Models/Expense/Payment.php +++ b/app/Models/Expense/Payment.php @@ -6,13 +6,14 @@ use App\Models\Model; use App\Models\Setting\Category; use App\Traits\Currencies; use App\Traits\DateTime; +use App\Traits\Media; +use App\Traits\Recurring; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; -use App\Traits\Media; class Payment extends Model { - use Cloneable, Currencies, DateTime, Eloquence, Media; + use Cloneable, Currencies, DateTime, Eloquence, Media, Recurring; protected $table = 'payments'; diff --git a/app/Models/Income/Invoice.php b/app/Models/Income/Invoice.php index f1b149872..04b5b7f98 100644 --- a/app/Models/Income/Invoice.php +++ b/app/Models/Income/Invoice.php @@ -6,13 +6,14 @@ use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; use App\Traits\Incomes; +use App\Traits\Media; +use App\Traits\Recurring; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; -use App\Traits\Media; class Invoice extends Model { - use Cloneable, Currencies, DateTime, Eloquence, Incomes, Media; + use Cloneable, Currencies, DateTime, Eloquence, Incomes, Media, Recurring; protected $table = 'invoices'; diff --git a/app/Models/Income/Revenue.php b/app/Models/Income/Revenue.php index 0a61a25f5..87a794f42 100644 --- a/app/Models/Income/Revenue.php +++ b/app/Models/Income/Revenue.php @@ -6,13 +6,14 @@ use App\Models\Model; use App\Models\Setting\Category; use App\Traits\Currencies; use App\Traits\DateTime; +use App\Traits\Media; +use App\Traits\Recurring; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; -use App\Traits\Media; class Revenue extends Model { - use Cloneable, Currencies, DateTime, Eloquence, Media; + use Cloneable, Currencies, DateTime, Eloquence, Media, Recurring; protected $table = 'revenues'; diff --git a/app/Traits/Recurring.php b/app/Traits/Recurring.php new file mode 100644 index 000000000..3b4b6594f --- /dev/null +++ b/app/Traits/Recurring.php @@ -0,0 +1,56 @@ +get('recurring_frequency') == 'no') { + return; + } + + $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; + $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; + $started_at = $request->get('paid_at') ?: ($request->get('invoiced_at') ?: $request->get('billed_at')); + + $this->recurring()->create([ + 'company_id' => session('company_id'), + 'frequency' => $frequency, + 'interval' => $interval, + 'started_at' => $started_at, + 'count' => (int) $request['recurring_count'], + ]); + } + + public function updateRecurring() + { + $request = request(); + + if ($request->get('recurring_frequency') == 'no') { + $this->recurring()->delete(); + return; + } + + $frequency = ($request['recurring_frequency'] != 'custom') ? $request['recurring_frequency'] : $request['recurring_custom_frequency']; + $interval = ($request['recurring_frequency'] != 'custom') ? 1 : (int) $request['recurring_interval']; + $started_at = $request->get('paid_at') ?: ($request->get('invoiced_at') ?: $request->get('billed_at')); + + if ($this->has('recurring')->count()) { + $function = 'update'; + } else { + $function = 'create'; + } + + $this->recurring()->$function([ + 'company_id' => session('company_id'), + 'frequency' => $frequency, + 'interval' => $interval, + 'started_at' => $started_at, + 'count' => (int) $request['recurring_count'], + ]); + } +} \ No newline at end of file diff --git a/resources/views/partials/form/recurring.blade.php b/resources/views/partials/form/recurring.blade.php index 1b48f18be..3ed0607b4 100644 --- a/resources/views/partials/form/recurring.blade.php +++ b/resources/views/partials/form/recurring.blade.php @@ -1,12 +1,12 @@ @php - if (($page == 'create') || !$model->has('recurring')->count()) { + if (($page == 'create') || ($model->has('recurring')->count() > 0)) { $frequency = 'no'; $interval = 1; $custom_frequency = 'monthly'; $count = 0; } else { $r = $model->recurring; - $frequency = $r->frequency; + $frequency = ($r->interval != 1) ? 'custom' : $r->frequency; $interval = $r->interval; $custom_frequency = $r->frequency; $count = $r->count; @@ -40,4 +40,4 @@ {!! Form::number('recurring_count', $count, ['class' => 'form-control']) !!} {!! $errors->first('recurring_count', '
:message
') !!} - \ No newline at end of file +