diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 7df9cb498e32..0f0003e3fb2d 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Account; +use App\Models\ScheduledReport; use Auth; use Input; use Str; @@ -109,8 +110,16 @@ class ReportController extends BaseController } $params['report'] = $report; $params = array_merge($params, $report->results()); - if ($isExport) { - return self::export($format, $reportType, $params); + switch ($action) { + case 'export': + return self::export($format, $reportType, $params); + break; + case 'schedule': + self::schedule($params, $options); + break; + case 'cancel_schedule': + self::cancelSchdule(); + break; } } else { $params['columns'] = []; @@ -119,7 +128,27 @@ class ReportController extends BaseController $params['report'] = false; } - return View::make('reports.chart_builder', $params); + $params['scheduledReports'] = ScheduledReport::scope()->whereUserId(auth()->user()->id)->get(); + + return View::make('reports.report_builder', $params); + } + + private function schedule($params, $options) + { + $options['report_type'] = $params['reportType']; + + $schedule = ScheduledReport::createNew(); + $schedule->config = json_encode($options); + $schedule->frequency = request('frequency'); + $schedule->save(); + } + + private function cancelSchdule() + { + ScheduledReport::scope() + ->whereUserId(auth()->user()->id) + ->wherePublicId(request('scheduled_report_id')) + ->delete(); } /** diff --git a/app/Http/Middleware/DuplicateSubmissionCheck.php b/app/Http/Middleware/DuplicateSubmissionCheck.php index 49036c8eb591..813ac8e1728f 100644 --- a/app/Http/Middleware/DuplicateSubmissionCheck.php +++ b/app/Http/Middleware/DuplicateSubmissionCheck.php @@ -30,7 +30,7 @@ class DuplicateSubmissionCheck $lastPage = session(SESSION_LAST_REQUEST_PAGE); $lastTime = session(SESSION_LAST_REQUEST_TIME); - if ($lastPage == $path && (microtime(true) - $lastTime <= 2)) { + if ($lastPage == $path && (microtime(true) - $lastTime <= 1)) { return redirect('/')->with('warning', trans('texts.duplicate_post')); } diff --git a/app/Models/ScheduledReport.php b/app/Models/ScheduledReport.php new file mode 100644 index 000000000000..9b616fb66edc --- /dev/null +++ b/app/Models/ScheduledReport.php @@ -0,0 +1,22 @@ +boolean('show_shipping_address')->default(false)->nullable(); }); + + Schema::dropIfExists('scheduled_reports'); + Schema::create('scheduled_reports', function ($table) { + $table->increments('id'); + $table->unsignedInteger('user_id'); + $table->unsignedInteger('account_id')->index(); + $table->timestamps(); + $table->softDeletes(); + + $table->text('config'); + $table->enum('frequency', ['daily', 'weekly', 'monthly']); + + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade'); + + $table->unsignedInteger('public_id')->nullable(); + $table->unique(['account_id', 'public_id']); + }); + } /** @@ -77,5 +96,7 @@ class AddSubdomainToLookups extends Migration Schema::table('account_gateways', function ($table) { $table->dropColumn('show_shipping_address'); }); + + Schema::dropIfExists('scheduled_reports'); } } diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 74ebe7f3d60f..4415c9a3238d 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -1378,6 +1378,7 @@ $LANG = array( // Frequencies 'freq_inactive' => 'Inactive', + 'freq_daily' => 'Daily', 'freq_weekly' => 'Weekly', 'freq_two_weeks' => 'Two weeks', 'freq_four_weeks' => 'Four weeks', @@ -2544,7 +2545,8 @@ $LANG = array( 'show_shipping_address_help' => 'Require client to provide their shipping address', 'ship_to_billing_address' => 'Ship to billing address', 'delivery_note' => 'Delivery Note', - 'show_tasks_in_portal' => 'Show tasks in the client portal' + 'show_tasks_in_portal' => 'Show tasks in the client portal', + 'cancel_schedule' => 'Cancel Schedule', ); diff --git a/resources/views/reports/chart_builder.blade.php b/resources/views/reports/report_builder.blade.php similarity index 84% rename from resources/views/reports/chart_builder.blade.php rename to resources/views/reports/report_builder.blade.php index 4e4c237b4ed6..9153643d9d55 100644 --- a/resources/views/reports/chart_builder.blade.php +++ b/resources/views/reports/report_builder.blade.php @@ -85,8 +85,9 @@ {!! Former::open()->addClass('report-form')->rules(['start_date' => 'required', 'end_date' => 'required']) !!}
{!! Former::populateField('start_date', $startDate) !!} @@ -177,15 +178,31 @@ @endif -