diff --git a/app/Http/Controllers/TaskSchedulerController.php b/app/Http/Controllers/TaskSchedulerController.php new file mode 100644 index 000000000000..706d01cb8e3b --- /dev/null +++ b/app/Http/Controllers/TaskSchedulerController.php @@ -0,0 +1,175 @@ +paused = $request->get('paused', false); + $scheduler->archived = (bool)$request->get('archived', false); + $scheduler->start_from = $request->get('start_from') ? Carbon::parse((int)$request->get('start_from')) : Carbon::now(); + $scheduler->repeat_every = $request->get('repeat_every'); + $scheduler->scheduled_run = $request->get('start_from') ? Carbon::parse((int)$request->get('start_from')) : Carbon::now();; + $scheduler->save(); + + if ($this->createJob($request, $scheduler)) { + $job = ScheduledJob::query()->latest()->first(); + } + return $job; + } + + public function createJob(CreateScheduledTaskRequest $request, Scheduler $scheduler): bool + { + $job = new ScheduledJob(); + + switch ($request->job) { + case 'client_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_CLIENT_REPORT; + $job->action_class = $this->getClassPath(ClientExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'client_contact_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_CLIENT_CONTACT_REPORT; + $job->action_class = $this->getClassPath(ContactExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'credit_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_CREDIT_REPORT; + $job->action_class = $this->getClassPath(CreditExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'document_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_DOCUMENT_REPORT; + $job->action_class = $this->getClassPath(DocumentExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'expense_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_EXPENSE_REPORT; + $job->action_class = $this->getClassPath(ExpenseExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'invoice_item_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_INVOICE_ITEM_REPORT; + $job->action_class = $this->getClassPath(InvoiceItemExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'invoice_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_INVOICE_REPORT; + $job->action_class = $this->getClassPath(InvoiceExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'payment_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_PAYMENT_REPORT; + $job->action_class = $this->getClassPath(PaymentExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'product_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_PRODUCT_REPORT; + $job->action_class = $this->getClassPath(ProductExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'profit_and_loss_report': + $rules = (new ProfitLossRequest())->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_PROFIT_AND_LOSS_REPORT; + $job->action_class = $this->getClassPath(ProfitAndLoss::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'quote_item_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_QUOTE_ITEM_REPORT; + $job->action_class = $this->getClassPath(QuoteItemExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'quote_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_QUOTE_REPORT; + $job->action_class = $this->getClassPath(QuoteExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'recurring_invoice_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_RECURRING_INVOICE_REPORT; + $job->action_class = $this->getClassPath(RecurringInvoiceExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + case 'task_report': + $rules = (new GenericReportRequest)->rules(); + $validated = $request->validate($rules); + $job->action_name = ScheduledJob::CREATE_TASK_REPORT; + $job->action_class = $this->getClassPath(TaskExport::class); + $job->parameters = $this->saveActionParameters($rules, $request); + break; + + } + $job->scheduler_id = $scheduler->id; + return $job->save(); + + } + + public function getClassPath($class): string + { + return $class = is_object($class) ? get_class($class) : $class; + } + + public function saveActionParameters(array $rules, $request): array + { + $parameters = []; + foreach ($rules as $rule => $key) { + if (isset($request->{$rule})) { + $parameters[$rule] = $request->{$rule}; + } + } + $parameters['company'] = auth()->user()->company(); + return $parameters; + } + + +} diff --git a/routes/api.php b/routes/api.php index fe04fbe3c2bf..abec15338f5a 100644 --- a/routes/api.php +++ b/routes/api.php @@ -45,8 +45,8 @@ Route::group(['middleware' => ['throttle:100,1', 'api_db', 'token_auth', 'locale Route::post('filters/{entity}', 'FilterController@index')->name('filters'); - Route::resource('client_gateway_tokens', 'ClientGatewayTokenController'); - + Route::resource('client_gateway_tokens', 'ClientGatewayTokenController'); + Route::post('connected_account', 'ConnectedAccountController@index'); Route::post('connected_account/gmail', 'ConnectedAccountController@handleGmailOauth'); @@ -54,9 +54,9 @@ Route::group(['middleware' => ['throttle:100,1', 'api_db', 'token_auth', 'locale Route::post('companies/purge/{company}', 'MigrationController@purgeCompany')->middleware('password_protected'); Route::post('companies/purge_save_settings/{company}', 'MigrationController@purgeCompanySaveSettings')->middleware('password_protected'); - + Route::resource('companies', 'CompanyController'); // name = (companies. index / create / show / update / destroy / edit - + Route::put('companies/{company}/upload', 'CompanyController@upload'); Route::post('companies/{company}/default', 'CompanyController@default'); @@ -170,6 +170,10 @@ Route::group(['middleware' => ['throttle:100,1', 'api_db', 'token_auth', 'locale Route::post('reports/tasks', 'Reports\TaskReportController'); Route::post('reports/profitloss', 'Reports\ProfitAndLossController'); + + Route::post('task_scheduler', 'TaskSchedulerController@store'); + + Route::get('scheduler', 'SchedulerController@index'); Route::post('support/messages/send', 'Support\Messages\SendingController');