company = $company; $this->request = $request; $this->report_class = $report_class; $this->file_name = $file_name; } public function handle() { MultiDB::setDb($this->company->db); $export = new $this->report_class($this->company, $this->request); $csv = base64_encode($export->run()); $files = []; $files[] = ['file' => $csv, 'file_name' => "{$this->file_name}", 'mime' => 'text/csv']; if (in_array(get_class($export), [ARDetailReport::class, ARSummaryReport::class, ClientBalanceReport::class, ClientSalesReport::class, TaxSummaryReport::class])) { $pdf = base64_encode($export->getPdf()); $files[] = ['file' => $pdf, 'file_name' => str_replace(".csv", ".pdf", $this->file_name), 'mime' => 'application/pdf']; } $user = $this->company->owner(); if (isset($this->request['user_id'])) { $user = User::find($this->request['user_id']) ?? $this->company->owner(); } $nmo = new NinjaMailerObject(); $nmo->mailable = new DownloadReport($this->company, $files); $nmo->company = $this->company; $nmo->settings = $this->company->settings; $nmo->to_user = $user; try { (new NinjaMailerJob($nmo))->handle(); } catch (\Throwable $th) { nlog("EXCEPTION:: SendToAdmin:: could not email report for" . $th->getMessage()); } } // public function middleware() // { // return [(new WithoutOverlapping("report-{$this->company->company_key}-{$this->report_class}"))->expireAfter(60)]; // } public function failed(\Throwable $exception = null) { if($exception) { nlog("EXCEPTION:: SendToAdmin:: could not email report for" . $exception->getMessage()); } } }