mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-03 06:14:36 -04:00
INA-5 | Set multidb, set company_id as database parameter
This commit is contained in:
parent
39400d3b08
commit
5a6f4801ce
@ -51,6 +51,8 @@ class TaskSchedulerController extends BaseController
|
|||||||
switch ($request->job) {
|
switch ($request->job) {
|
||||||
case 'client_report':
|
case 'client_report':
|
||||||
$rules = (new GenericReportRequest)->rules();
|
$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);
|
$validated = $request->validate($rules);
|
||||||
$job->action_name = ScheduledJob::CREATE_CLIENT_REPORT;
|
$job->action_name = ScheduledJob::CREATE_CLIENT_REPORT;
|
||||||
$job->action_class = $this->getClassPath(ClientExport::class);
|
$job->action_class = $this->getClassPath(ClientExport::class);
|
||||||
@ -150,6 +152,7 @@ class TaskSchedulerController extends BaseController
|
|||||||
|
|
||||||
}
|
}
|
||||||
$job->scheduler_id = $scheduler->id;
|
$job->scheduler_id = $scheduler->id;
|
||||||
|
$job->company_id = auth()->user()->company()->id;
|
||||||
return $job->save();
|
return $job->save();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -167,7 +170,6 @@ class TaskSchedulerController extends BaseController
|
|||||||
$parameters[$rule] = $request->{$rule};
|
$parameters[$rule] = $request->{$rule};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$parameters['company'] = auth()->user()->company();
|
|
||||||
return $parameters;
|
return $parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ namespace App\Jobs\Ninja;
|
|||||||
|
|
||||||
|
|
||||||
use App\Jobs\Report\SendToAdmin;
|
use App\Jobs\Report\SendToAdmin;
|
||||||
|
use App\Libraries\MultiDB;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\ScheduledJob;
|
use App\Models\ScheduledJob;
|
||||||
use App\Models\Scheduler;
|
use App\Models\Scheduler;
|
||||||
@ -45,6 +46,7 @@ class TaskScheduler implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
|
|
||||||
$pending_schedulers = $this->fetchJobs();
|
$pending_schedulers = $this->fetchJobs();
|
||||||
foreach ($pending_schedulers as $scheduler) {
|
foreach ($pending_schedulers as $scheduler) {
|
||||||
$this->doJob($scheduler);
|
$this->doJob($scheduler);
|
||||||
@ -54,11 +56,15 @@ class TaskScheduler implements ShouldQueue
|
|||||||
private function doJob(Scheduler $scheduler)
|
private function doJob(Scheduler $scheduler)
|
||||||
{
|
{
|
||||||
$job = $scheduler->job;
|
$job = $scheduler->job;
|
||||||
$parameters = $job->parameters;
|
|
||||||
$company = Company::where('company_key', $parameters['company']['company_key'])->first();
|
$company = Company::find($job->company_id);
|
||||||
if (!$job) {
|
if (!$job || !$company) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
MultiDB::setDb($company->db);
|
||||||
|
$parameters = $job->parameters;
|
||||||
|
|
||||||
|
|
||||||
switch ($job->action_name) {
|
switch ($job->action_name) {
|
||||||
case ScheduledJob::CREATE_CLIENT_REPORT:
|
case ScheduledJob::CREATE_CLIENT_REPORT:
|
||||||
SendToAdmin::dispatch($company, $parameters, $job->action_class, 'contacts.csv');
|
SendToAdmin::dispatch($company, $parameters, $job->action_class, 'contacts.csv');
|
||||||
@ -106,6 +112,30 @@ class TaskScheduler implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
//setup new scheduled_run
|
//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()
|
private function fetchJobs()
|
||||||
|
@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
* @property array parameters
|
* @property array parameters
|
||||||
* @property string action_name
|
* @property string action_name
|
||||||
* @property integer scheduler_id
|
* @property integer scheduler_id
|
||||||
|
* @property integer company_id
|
||||||
*/
|
*/
|
||||||
class ScheduledJob extends Model
|
class ScheduledJob extends Model
|
||||||
{
|
{
|
||||||
@ -40,9 +41,8 @@ class ScheduledJob extends Model
|
|||||||
const CREATE_TASK_REPORT = 'create_task_report';
|
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 = [
|
protected $casts = [
|
||||||
'required_parameters' => 'array',
|
|
||||||
'scheduled_run' => 'date',
|
'scheduled_run' => 'date',
|
||||||
'parameters' => 'array'
|
'parameters' => 'array'
|
||||||
];
|
];
|
||||||
|
@ -27,6 +27,7 @@ class CreateScheduledJobsTable extends Migration
|
|||||||
$table->string('action_name');
|
$table->string('action_name');
|
||||||
$table->string('action_class');
|
$table->string('action_class');
|
||||||
$table->json('parameters')->nullable();
|
$table->json('parameters')->nullable();
|
||||||
|
$table->foreignIdFor(\App\Models\Company::class);
|
||||||
$table->foreignIdFor(\App\Models\Scheduler::class);
|
$table->foreignIdFor(\App\Models\Scheduler::class);
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user