diff --git a/app/Http/Controllers/TaskSchedulerController.php b/app/Http/Controllers/TaskSchedulerController.php index 706d01cb8e3b..932aa13ebcbe 100644 --- a/app/Http/Controllers/TaskSchedulerController.php +++ b/app/Http/Controllers/TaskSchedulerController.php @@ -51,6 +51,8 @@ class TaskSchedulerController extends BaseController switch ($request->job) { case 'client_report': $rules = (new GenericReportRequest)->rules(); + //custom rules for example here we require date_range but in genericRequest class we don't + $rules['date_range'] = 'string|required'; $validated = $request->validate($rules); $job->action_name = ScheduledJob::CREATE_CLIENT_REPORT; $job->action_class = $this->getClassPath(ClientExport::class); @@ -150,6 +152,7 @@ class TaskSchedulerController extends BaseController } $job->scheduler_id = $scheduler->id; + $job->company_id = auth()->user()->company()->id; return $job->save(); } @@ -167,7 +170,6 @@ class TaskSchedulerController extends BaseController $parameters[$rule] = $request->{$rule}; } } - $parameters['company'] = auth()->user()->company(); return $parameters; } diff --git a/app/Jobs/Ninja/TaskScheduler.php b/app/Jobs/Ninja/TaskScheduler.php index 772a1722ef78..0ad5a0492a45 100644 --- a/app/Jobs/Ninja/TaskScheduler.php +++ b/app/Jobs/Ninja/TaskScheduler.php @@ -13,6 +13,7 @@ namespace App\Jobs\Ninja; use App\Jobs\Report\SendToAdmin; +use App\Libraries\MultiDB; use App\Models\Company; use App\Models\ScheduledJob; use App\Models\Scheduler; @@ -45,6 +46,7 @@ class TaskScheduler implements ShouldQueue */ public function handle() { + $pending_schedulers = $this->fetchJobs(); foreach ($pending_schedulers as $scheduler) { $this->doJob($scheduler); @@ -54,11 +56,15 @@ class TaskScheduler implements ShouldQueue private function doJob(Scheduler $scheduler) { $job = $scheduler->job; - $parameters = $job->parameters; - $company = Company::where('company_key', $parameters['company']['company_key'])->first(); - if (!$job) { + + $company = Company::find($job->company_id); + if (!$job || !$company) { return; } + MultiDB::setDb($company->db); + $parameters = $job->parameters; + + switch ($job->action_name) { case ScheduledJob::CREATE_CLIENT_REPORT: SendToAdmin::dispatch($company, $parameters, $job->action_class, 'contacts.csv'); @@ -106,6 +112,30 @@ class TaskScheduler implements ShouldQueue } //setup new scheduled_run + $amount_of_days_until_next_run = $this->getAmountOfDays($scheduler->repeat_every); + $scheduler->scheduled_run = Carbon::now()->addDays($amount_of_days_until_next_run); + $scheduler->save(); + } + + private function getAmountOfDays(string $repeat_every): int + { + switch ($repeat_every) { + case Scheduler::DAILY: + return 1; + break; + case Scheduler::MONTHLY: + return 30; + break; + case Scheduler::WEEKLY: + return 7; + break; + case Scheduler::QUARTERLY: + return 90; + break; + case Scheduler::ANNUALLY: + return 365; + break; + } } private function fetchJobs() diff --git a/app/Models/ScheduledJob.php b/app/Models/ScheduledJob.php index 1ea55164386f..f339ae46ddb6 100644 --- a/app/Models/ScheduledJob.php +++ b/app/Models/ScheduledJob.php @@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Model; * @property array parameters * @property string action_name * @property integer scheduler_id + * @property integer company_id */ class ScheduledJob extends Model { @@ -40,9 +41,8 @@ class ScheduledJob extends Model const CREATE_TASK_REPORT = 'create_task_report'; - protected $fillable = ['action_class', 'action_name', 'parameters', 'scheduler_id']; + protected $fillable = ['action_class', 'action_name', 'parameters', 'scheduler_id','company_id']; protected $casts = [ - 'required_parameters' => 'array', 'scheduled_run' => 'date', 'parameters' => 'array' ]; diff --git a/database/migrations/2022_05_18_162152_create_scheduled_jobs_table.php b/database/migrations/2022_05_18_162152_create_scheduled_jobs_table.php index 7b5b93465a69..1395e8aa16e1 100644 --- a/database/migrations/2022_05_18_162152_create_scheduled_jobs_table.php +++ b/database/migrations/2022_05_18_162152_create_scheduled_jobs_table.php @@ -27,6 +27,7 @@ class CreateScheduledJobsTable extends Migration $table->string('action_name'); $table->string('action_class'); $table->json('parameters')->nullable(); + $table->foreignIdFor(\App\Models\Company::class); $table->foreignIdFor(\App\Models\Scheduler::class); $table->timestamps(); });