diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php index 6c8dde938f12..988928722164 100644 --- a/app/Models/BaseModel.php +++ b/app/Models/BaseModel.php @@ -12,6 +12,7 @@ namespace App\Models; use App\DataMapper\ClientSettings; +use App\Jobs\Util\WebhookHandler; use App\Utils\Traits\MakesHash; use App\Utils\Traits\UserSessionAttributes; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -167,7 +168,7 @@ class BaseModel extends Model */ public function resolveRouteBinding($value, $field = null) { - + if (is_numeric($value)) { throw new ModelNotFoundException("Record with value {$value} not found"); } @@ -189,12 +190,12 @@ class BaseModel extends Model public function numberFormatter() { - $number = strlen($this->number) >= 1 ? $this->translate_entity() . "_" . $this->number : class_basename($this) . "_" . Str::random(5); + $number = strlen($this->number) >= 1 ? $this->translate_entity() . "_" . $this->number : class_basename($this) . "_" . Str::random(5); $formatted_number = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $number); - + $formatted_number = mb_ereg_replace("([\.]{2,})", '', $formatted_number); - + $formatted_number = preg_replace('/\s+/', '_', $formatted_number); return $formatted_number; @@ -205,4 +206,14 @@ class BaseModel extends Model return ctrans('texts.item'); } + public function sendEvent($event_id, $additional_data=""){ + $subscriptions = Webhook::where('company_id', $this->company_id) + ->where('event_id', $event_id) + ->exists(); + if ($subscriptions) { + WebhookHandler::dispatch($event_id, $this, $this->company, $additional_data)->delay(0); + } + } + + } diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php index 27d6e81b7dab..6a1c44a87fab 100644 --- a/app/Models/Webhook.php +++ b/app/Models/Webhook.php @@ -136,6 +136,14 @@ class Webhook extends BaseModel const EVENT_ARCHIVE_PURCHASE_ORDER = 59; //tested + const EVENT_SENT_INVOICE = 60; + + const EVENT_SENT_QUOTE = 61; + + const EVENT_SENT_CREDIT = 62; + + const EVENT_SENT_PURCHASE_ORDER = 63; + public static $valid_events = [ self::EVENT_CREATE_PURCHASE_ORDER, self::EVENT_UPDATE_PURCHASE_ORDER, @@ -194,7 +202,11 @@ class Webhook extends BaseModel self::EVENT_RESTORE_QUOTE, self::EVENT_RESTORE_INVOICE, self::EVENT_RESTORE_PAYMENT, - self::EVENT_RESTORE_VENDOR + self::EVENT_RESTORE_VENDOR, + self::EVENT_SENT_INVOICE, + self::EVENT_SENT_QUOTE, + self::EVENT_SENT_CREDIT, + self::EVENT_SENT_PURCHASE_ORDER ]; diff --git a/app/Services/Credit/MarkSent.php b/app/Services/Credit/MarkSent.php index 17ee581a8245..d8ad848dbc70 100644 --- a/app/Services/Credit/MarkSent.php +++ b/app/Services/Credit/MarkSent.php @@ -12,7 +12,9 @@ namespace App\Services\Credit; use App\Events\Credit\CreditWasMarkedSent; +use App\Jobs\Util\WebhookHandler; use App\Models\Credit; +use App\Models\Webhook; use App\Utils\Ninja; class MarkSent @@ -49,9 +51,11 @@ class MarkSent ->service() ->adjustCreditBalance($this->credit->amount) ->save(); - + event(new CreditWasMarkedSent($this->credit, $this->credit->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $this->credit->sendEvent(Webhook::EVENT_SENT_CREDIT); + return $this->credit; } } diff --git a/app/Services/Invoice/MarkSent.php b/app/Services/Invoice/MarkSent.php index 38daae25d480..f9e3519f3b00 100644 --- a/app/Services/Invoice/MarkSent.php +++ b/app/Services/Invoice/MarkSent.php @@ -12,8 +12,10 @@ namespace App\Services\Invoice; use App\Events\Invoice\InvoiceWasUpdated; +use App\Jobs\Util\WebhookHandler; use App\Models\Client; use App\Models\Invoice; +use App\Models\Webhook; use App\Services\AbstractService; use App\Utils\Ninja; @@ -71,6 +73,7 @@ class MarkSent extends AbstractService if($fire_webhook) event('eloquent.updated: App\Models\Invoice', $this->invoice); + $this->invoice->sendEvent(Webhook::EVENT_SENT_INVOICE, "client"); return $this->invoice->fresh(); } diff --git a/app/Services/PurchaseOrder/MarkSent.php b/app/Services/PurchaseOrder/MarkSent.php index 6d4446ba9946..a81d91b45433 100644 --- a/app/Services/PurchaseOrder/MarkSent.php +++ b/app/Services/PurchaseOrder/MarkSent.php @@ -11,7 +11,9 @@ namespace App\Services\PurchaseOrder; +use App\Jobs\Util\WebhookHandler; use App\Models\PurchaseOrder; +use App\Models\Webhook; use App\Utils\Ninja; class MarkSent @@ -43,6 +45,8 @@ class MarkSent ->adjustBalance($this->purchase_order->amount) //why was this commented out previously? ->save(); + $this->purchase_order->sendEvent(Webhook::EVENT_SENT_PURCHASE_ORDER, "vendor"); + return $this->purchase_order; } } diff --git a/app/Services/Quote/MarkSent.php b/app/Services/Quote/MarkSent.php index c428e11bc482..76a4687db885 100644 --- a/app/Services/Quote/MarkSent.php +++ b/app/Services/Quote/MarkSent.php @@ -12,7 +12,9 @@ namespace App\Services\Quote; use App\Events\Quote\QuoteWasMarkedSent; +use App\Jobs\Util\WebhookHandler; use App\Models\Quote; +use App\Models\Webhook; use App\Utils\Ninja; use Carbon\Carbon; @@ -52,6 +54,8 @@ class MarkSent event(new QuoteWasMarkedSent($this->quote, $this->quote->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $this->quote->sendEvent(Webhook::EVENT_SENT_QUOTE, "client"); + return $this->quote; } }