db) { MultiDB::setDb($this->db); } $invoice = false; try { nlog("autobill {$this->invoice_id}"); $invoice = Invoice::withTrashed()->find($this->invoice_id); if ($invoice) { $invoice->service()->autoBill(); } } catch (\Exception $e) { nlog("Failed to capture payment for {$this->invoice_id} ->".$e->getMessage()); if ($this->send_email_on_failure && $invoice) { $invoice->invitations->each(function ($invitation) use ($invoice) { //2025-04-06 additional conditional check to prevent duplicate emails from being sent. if ($invitation->contact && !$invitation->contact->trashed() && strlen($invitation->contact->email) >= 1 && $invoice->client->getSetting('auto_email_invoice') && !$invitation->contact->is_locked && $invoice->client->getSetting('client_online_payment_notification')) { try { EmailEntity::dispatch($invitation->withoutRelations(), $invoice->company->db)->delay(rand(1, 2)); $invoice->entityEmailEvent($invitation, 'invoice', 'email_template_invoice'); } catch (\Exception $e) { nlog($e->getMessage()); } nlog("Firing email for invoice {$invoice->number} which failed to capture payment"); } }); $invoice->sendEvent(Webhook::EVENT_SENT_INVOICE, "client"); } } } }