From 7336cd4234c872d4f9e92749a4d7418c8c96cf50 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 21 Nov 2017 23:51:59 +0200 Subject: [PATCH] Working on scheduled reports --- app/Http/Controllers/ReportController.php | 35 +++++++- .../Middleware/DuplicateSubmissionCheck.php | 2 +- app/Models/ScheduledReport.php | 22 +++++ ..._11_15_114422_add_subdomain_to_lookups.php | 21 +++++ resources/lang/en/texts.php | 4 +- ...der.blade.php => report_builder.blade.php} | 80 +++++++++++++++---- 6 files changed, 143 insertions(+), 21 deletions(-) create mode 100644 app/Models/ScheduledReport.php rename resources/views/reports/{chart_builder.blade.php => report_builder.blade.php} (84%) 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::text('action') !!} - {!! Former::text('format') !!} + {!! Former::text('action') !!} + {!! Former::text('frequency') !!} + {!! Former::text('scheduled_report_id') !!}
{!! Former::populateField('start_date', $startDate) !!} @@ -177,15 +178,31 @@ @endif -
- {!! DropdownButton::primary(trans('texts.export')) - ->large() - ->withAttributes(array('id' => 'export-button')) - ->withContents([ - ['url' => 'javascript:onExportClick("csv")', 'label' => 'CSV'], - ['url' => 'javascript:onExportClick("xlsx")', 'label' => 'XLSX'], - ['url' => 'javascript:onExportClick("pdf")', 'label' => 'PDF'], +
+ + {!! Former::select('format') + ->addOption('CSV', 'csv') + ->addOption('XLSX', 'xlsx') + ->addOption('PDF', 'pdf') + ->raw() !!}   + + {!! Button::normal(trans('texts.export')) + ->withAttributes(['onclick' => 'onExportClick()']) + ->appendIcon(Icon::create('download-alt')) !!} + + {!! Button::normal(trans('texts.cancel_schedule')) + ->withAttributes(['id' => 'cancelSchduleButton', 'onclick' => 'onCancelScheduleClick()', 'style' => 'display:none']) + ->appendIcon(Icon::create('remove')) !!} + + + {!! DropdownButton::primary(trans('texts.schedule')) + ->withAttributes(['id'=>'scheduleDropDown']) + ->withContents([ + ['url' => 'javascript:onScheduleClick("daily")', 'label' => trans('texts.freq_daily')], + ['url' => 'javascript:onScheduleClick("weekly")', 'label' => trans('texts.freq_weekly')], + ['url' => 'javascript:onScheduleClick("monthly")', 'label' => trans('texts.freq_monthly')], ]) !!} +    {!! Button::success(trans('texts.run')) ->withAttributes(array('id' => 'submitButton')) ->submit() @@ -277,13 +294,37 @@