mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-08-05 07:32:14 +00:00
fix(recurring-invoices): scale scheduled generation
This commit is contained in:
@@ -3,14 +3,15 @@
|
||||
namespace App\Http\Controllers\Company\RecurringInvoice;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\RecurringInvoice;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Requests\RecurringInvoiceFrequencyRequest;
|
||||
use App\Services\Document\RecurringInvoiceScheduleService;
|
||||
|
||||
class RecurringInvoiceFrequencyController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request)
|
||||
public function __invoke(RecurringInvoiceFrequencyRequest $request, RecurringInvoiceScheduleService $schedule)
|
||||
{
|
||||
$nextInvoiceAt = RecurringInvoice::getNextInvoiceDate($request->frequency, $request->starts_at);
|
||||
$nextInvoiceAt = $schedule->firstFutureOccurrence($request->frequency, $request->starts_at, (int) $request->header('company'))
|
||||
->format('Y-m-d H:i:s');
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
||||
31
app/Http/Requests/RecurringInvoiceFrequencyRequest.php
Normal file
31
app/Http/Requests/RecurringInvoiceFrequencyRequest.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use App\Rules\ValidCronExpression;
|
||||
use Illuminate\Contracts\Validation\ValidationRule;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RecurringInvoiceFrequencyRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'frequency' => ['required', 'string', new ValidCronExpression],
|
||||
'starts_at' => ['required', 'date'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,8 @@ namespace App\Http\Requests;
|
||||
|
||||
use App\Models\CompanySetting;
|
||||
use App\Models\Customer;
|
||||
use App\Models\RecurringInvoice;
|
||||
use App\Rules\ValidCronExpression;
|
||||
use App\Services\Document\RecurringInvoiceScheduleService;
|
||||
use App\Support\DocumentTotals;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -28,6 +29,7 @@ class RecurringInvoiceRequest extends FormRequest
|
||||
$rules = [
|
||||
'starts_at' => [
|
||||
'required',
|
||||
'date',
|
||||
],
|
||||
'send_automatically' => [
|
||||
'required',
|
||||
@@ -67,6 +69,8 @@ class RecurringInvoiceRequest extends FormRequest
|
||||
],
|
||||
'frequency' => [
|
||||
'required',
|
||||
'string',
|
||||
new ValidCronExpression,
|
||||
],
|
||||
'limit_by' => [
|
||||
'required',
|
||||
@@ -108,7 +112,10 @@ class RecurringInvoiceRequest extends FormRequest
|
||||
$exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1;
|
||||
$currency = Customer::find($this->customer_id)->currency_id;
|
||||
|
||||
$nextInvoiceAt = RecurringInvoice::getNextInvoiceDate($this->frequency, $this->starts_at);
|
||||
$schedule = app(RecurringInvoiceScheduleService::class);
|
||||
$nextInvoiceAt = $schedule->toStored(
|
||||
$schedule->firstFutureOccurrence($this->frequency, $this->starts_at, (int) $this->header('company'))
|
||||
);
|
||||
|
||||
$tax_per_item = CompanySetting::getSetting('tax_per_item', $this->header('company')) ?? 'NO ';
|
||||
$discount_per_item = CompanySetting::getSetting('discount_per_item', $this->header('company')) ?? 'NO';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Services\Document\RecurringInvoiceScheduleService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
@@ -26,7 +27,11 @@ class RecurringInvoiceResource extends JsonResource
|
||||
'company_id' => $this->company_id,
|
||||
'creator_id' => $this->creator_id,
|
||||
'status' => $this->status,
|
||||
'next_invoice_at' => $this->next_invoice_at,
|
||||
'next_invoice_at' => $this->next_invoice_at
|
||||
? app(RecurringInvoiceScheduleService::class)
|
||||
->fromStored($this->next_invoice_at, $this->company_id)
|
||||
->format('Y-m-d H:i:s')
|
||||
: null,
|
||||
'frequency' => $this->frequency,
|
||||
'limit_by' => $this->limit_by,
|
||||
'limit_count' => $this->limit_count,
|
||||
|
||||
Reference in New Issue
Block a user