item = $accessory; $this->admin = $checkedOutBy; $this->note = $note; $this->checkout_qty = $accessory->checkout_qty; $this->target = $checkedOutTo; $this->acceptance = $acceptance; $this->settings = Setting::getSettings(); } /** * Get the notification's delivery channels. * * @return array */ public function via() { $notifyBy = []; if (Setting::getSettings()->webhook_selected == 'google' && Setting::getSettings()->webhook_endpoint) { $notifyBy[] = GoogleChatChannel::class; } if (Setting::getSettings()->webhook_selected == 'microsoft' && Setting::getSettings()->webhook_endpoint) { $notifyBy[] = MicrosoftTeamsChannel::class; } if (Setting::getSettings()->webhook_selected == 'slack' || Setting::getSettings()->webhook_selected == 'general' ) { $notifyBy[] = 'slack'; } /** * Only send notifications to users that have email addresses */ if ($this->target instanceof User && $this->target->email != '') { /** * Send an email if the asset requires acceptance, * so the user can accept or decline the asset */ if ($this->item->requireAcceptance()) { $notifyBy[1] = 'mail'; } /** * Send an email if the item has a EULA, since the user should always receive it */ if ($this->item->getEula()) { $notifyBy[1] = 'mail'; } /** * Send an email if an email should be sent at checkin/checkout */ if ($this->item->checkin_email()) { $notifyBy[1] = 'mail'; } } return $notifyBy; } public function toSlack() { $target = $this->target; $admin = $this->admin; $item = $this->item; $note = $this->note; $botname = ($this->settings->webhook_botname) ? $this->settings->webhook_botname : 'Snipe-Bot'; $channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : ''; $fields = [ 'To' => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>', 'By' => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>', ]; return (new SlackMessage) ->content(':arrow_up: :keyboard: Accessory Checked Out') ->from($botname) ->to($channel) ->attachment(function ($attachment) use ($item, $note, $admin, $fields) { $attachment->title(htmlspecialchars_decode($this->checkout_qty.' x '.$item->present()->name), $item->present()->viewUrl()) ->fields($fields) ->content($note); }); } public function toMicrosoftTeams() { $target = $this->target; $admin = $this->admin; $item = $this->item; $note = $this->note; if(!Str::contains(Setting::getSettings()->webhook_endpoint, 'workflows')) { return MicrosoftTeamsMessage::create() ->to($this->settings->webhook_endpoint) ->type('success') ->addStartGroupToSection('activityTitle') ->title(trans('mail.Accessory_Checkout_Notification')) ->addStartGroupToSection('activityText') ->fact(htmlspecialchars_decode($item->present()->name), '', 'activityTitle') ->fact(trans('mail.assigned_to'), $target->present()->name) ->fact(trans('general.qty'), $this->checkout_qty) ->fact(trans('mail.checkedout_from'), $item->location->name ? $item->location->name : '') ->fact(trans('mail.Accessory_Checkout_Notification') . " by ", $admin->present()->fullName()) ->fact(trans('admin/consumables/general.remaining'), $item->numRemaining()) ->fact(trans('mail.notes'), $note ?: ''); } $message = trans('mail.Accessory_Checkout_Notification'); $details = [ trans('mail.assigned_to') => $target->present()->name, trans('mail.accessory_name') => htmlspecialchars_decode($item->present()->name), trans('general.qty') => $this->checkout_qty, trans('mail.checkedout_from') => $item->location->name ? $item->location->name : '', trans('mail.Accessory_Checkout_Notification'). ' by' => $admin->present()->fullName(), trans('admin/consumables/general.remaining')=> $item->numRemaining(), trans('mail.notes') => $note ?: '', ]; return array($message, $details); } public function toGoogleChat() { $target = $this->target; $item = $this->item; $note = $this->note; return GoogleChatMessage::create() ->to($this->settings->webhook_endpoint) ->card( Card::create() ->header( ''.trans('mail.Accessory_Checkout_Notification').'' ?: '', htmlspecialchars_decode($item->present()->name) ?: '', ) ->section( Section::create( KeyValue::create( trans('mail.assigned_to') ?: '', $target->present()->name ?: '', trans('admin/consumables/general.remaining').": ". $item->numRemaining(), ) ->onClick(route('users.show', $target->id)) ) ) ); } /** * Get the mail representation of the notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail() { Log::debug($this->item->getImageUrl()); $eula = $this->item->getEula(); $req_accept = $this->item->requireAcceptance(); $accept_url = is_null($this->acceptance) ? null : route('account.accept.item', $this->acceptance); return (new MailMessage)->markdown('notifications.markdown.checkout-accessory', [ 'item' => $this->item, 'admin' => $this->admin, 'note' => $this->note, 'target' => $this->target, 'eula' => $eula, 'req_accept' => $req_accept, 'accept_url' => $accept_url, 'checkout_qty' => $this->checkout_qty, ]) ->subject(trans('mail.Confirm_accessory_delivery')); } }