diff --git a/app/Console/Commands/SentScheduleNotification.php b/app/Console/Commands/SentScheduleNotification.php new file mode 100644 index 0000000..7dad744 --- /dev/null +++ b/app/Console/Commands/SentScheduleNotification.php @@ -0,0 +1,76 @@ +where('is_active', 0) + ->orderByDesc('id') + ->get(); + + $currentDateTime = new DateTime(); + + foreach ($getAllPushNotifications as $inAppNotificationItem) { + + $storedDateTime = new DateTime($inAppNotificationItem->delivery_schedule); + + $currentTime = $currentDateTime->format('Y-m-d H:i'); + $storedTime = $storedDateTime->format('Y-m-d H:i'); + + if ($currentTime == $storedTime) { + $title = $inAppNotificationItem->type; + $description = $inAppNotificationItem->description; + $imagePath = $inAppNotificationItem->image; + + $principalData = IamPrincipal::find($inAppNotificationItem->principal_xid); + + if ($principalData && $principalData->one_signal_player_id) { + OneSignalHelper::sendNotificationApi( + $principalData->one_signal_player_id, + $title, + $description, + 'Dashboard Notification', + $imagePath, + $id = null + ); + + Log::info("INAPP scheduled notification sent successfully"); + + $inAppNotificationItem->is_active = 1; + $inAppNotificationItem->save(); + } + } + } + } +} diff --git a/app/Http/Controllers/Admin/ManageNotificationsController.php b/app/Http/Controllers/Admin/ManageNotificationsController.php index c470b3a..ef0d09b 100644 --- a/app/Http/Controllers/Admin/ManageNotificationsController.php +++ b/app/Http/Controllers/Admin/ManageNotificationsController.php @@ -81,10 +81,10 @@ class ManageNotificationsController extends Controller * Created at : 10 June 2024 * Use : To add notification . */ + public function store_notificaton_data(Request $request) { try { - $request->validate([ 'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048', ]); @@ -104,65 +104,144 @@ class ManageNotificationsController extends Controller $states = $request->states; - // $dateTime = now(); - // $formattedDateTime = $dateTime->format('Y-m-d H:i:s'); - // $unsubscribe = Subscriptions::select('iam_principal_xid')->where('next_payment_date', '>=', $formattedDateTime)->get(); + $dateTime = now(); + $formattedDateTime = $dateTime->format('Y-m-d H:i:s'); + $iamPrincipals = Subscriptions::select('iam_principal_xid') + ->where('next_payment_date', '>=', $formattedDateTime) + ->get(); - $userQuery = IamPrincipal::where('is_active', 1) + $iamPrincipalIds = $iamPrincipals->pluck('iam_principal_xid'); + + $subscribe = IamPrincipal::whereIn('id', $iamPrincipalIds) + ->where('is_active', 1) ->where('notification_status', 1) ->where('principal_type_xid', 3) - ->whereIn('state_xid', $states); + ->whereIn('state_xid', $states) + ->get(); if ($request->user_type == 1) { - $allCustomerOneSignalIds = $userQuery->pluck('id'); + $allCustomerOneSignalIds = $subscribe->pluck('id'); $UserData = IamPrincipal::whereIn('id', $allCustomerOneSignalIds)->get(); foreach ($UserData as $customerIdItem) { - if ($customerIdItem->one_signal_player_id) { - onesignalhelper::sendNotificationApi( - $customerIdItem->one_signal_player_id, - $request->title, - $request->description, - 'Dashboard Notification', - $imagePath, - $id = null - ); + // user_type 1 = subscribed user + if ($request->schedule_radio1 == 1 && $request->schedule_date) { + // Scheduled Notification + NotificationDetails::create([ + 'principal_xid' => $customerIdItem->id, + 'description' => $request->description, + 'type' => $request->title, + 'image' => $imagePath, + 'date_added' => $request->schedule_date, + 'is_schedule' => 1, + 'delivery_schedule' => $request->schedule_date, + 'is_active' => 0, + + ]); + } else { + // Immediate Notification + if ($customerIdItem->one_signal_player_id) { + onesignalhelper::sendNotificationApi( + $customerIdItem->one_signal_player_id, + $request->title, + $request->description, + 'Dashboard Notification', + $imagePath, + $id = null + ); + } + onesignalhelper::StoreNotificationDetails($customerIdItem->id, 'Notification', $request->title, $imagePath); } - onesignalhelper::StoreNotificationDetails($customerIdItem->id, 'Notification', $request->title, $imagePath); } } elseif ($request->user_type == 2) { - $allRestaurantOneSignalIds = $userQuery->pluck('id'); + //user_type 2 unsubscribed users + $allPrincipalIds = IamPrincipal::where('principal_type_xid', 3) + ->pluck('id'); + + $subscribedIds = Subscriptions::select('iam_principal_xid') + ->where('next_payment_date', '>=', $formattedDateTime) + ->pluck('iam_principal_xid'); + + $unsubscribedIds = $allPrincipalIds->diff($subscribedIds); + + $unsubscribedPrincipals = IamPrincipal::whereIn('id', $unsubscribedIds) + ->where('is_active', 1) + ->where('notification_status', 1) + ->whereIn('state_xid', $states) + ->get(); + + $allRestaurantOneSignalIds = $unsubscribedPrincipals->pluck('id'); $restaurantData = IamPrincipal::whereIn('id', $allRestaurantOneSignalIds)->get(); - foreach ($restaurantData as $restIdItem) { - if ($restIdItem->one_signal_player_id) { - onesignalhelper::sendNotificationApi( - $restIdItem->one_signal_player_id, - $request->title, - $request->description, - 'Dashboard Notification', - $imagePath, - $id = null - ); + foreach ($restaurantData as $restaurantsData) { + if ($request->schedule_radio1 == 1 && $request->schedule_date) { + // Scheduled Notification + NotificationDetails::create([ + 'principal_xid' => $restaurantsData->id, + 'description' => $request->description, + 'type' => $request->title, + 'image' => $imagePath, + 'date_added' => $request->schedule_date, + 'is_schedule' => 1, + 'delivery_schedule' => $request->schedule_date, + 'is_active' => 0, + + + ]); + } else { + // Immediate Notification + if ($restaurantsData->one_signal_player_id) { + onesignalhelper::sendNotificationApi( + $restaurantsData->one_signal_player_id, + $request->title, + $request->description, + $request->title, + $imagePath, + $id = null + ); + } + onesignalhelper::StoreNotificationDetails($restaurantsData->id, 'Notification', $request->title, $imagePath); } - onesignalhelper::StoreNotificationDetails($restIdItem->id, 'Notification', $request->title, $imagePath); } } elseif ($request->user_type == 3) { + // user_type 3 = subscribed and unsubscribed users + $userQuery = IamPrincipal::where('is_active', 1) + ->where('notification_status', 1) + ->where('principal_type_xid', 3) + ->whereIn('state_xid', $states); + $allUserOneSignalIds = $userQuery->pluck('id'); $UserData = IamPrincipal::whereIn('id', $allUserOneSignalIds)->get(); - foreach ($UserData as $userItem) { - if ($userItem->one_signal_player_id) { - onesignalhelper::sendNotificationApi( - $userItem->one_signal_player_id, - $request->title, - $request->description, - 'Dashboard Notification', - $imagePath, - $id = null - ); + foreach ($UserData as $CustomerData) { + if ($request->schedule_radio1 == 1 && $request->schedule_date) { + // Scheduled Notification + NotificationDetails::create([ + 'principal_xid' => $CustomerData->id, + 'description' => $request->description, + 'type' => $request->title, + 'image' => $imagePath, + 'date_added' => $request->schedule_date, + 'is_schedule' => 1, + 'delivery_schedule' => $request->schedule_date, + 'is_active' => 0, + + + ]); + } else { + // Immediate Notification + if ($CustomerData->one_signal_player_id) { + onesignalhelper::sendNotificationApi( + $CustomerData->one_signal_player_id, + $request->title, + $request->description, + 'Dashboard Notification', + $imagePath, + $id = null + ); + } + onesignalhelper::StoreNotificationDetails($CustomerData->id, 'Notification', $request->title, $imagePath); } - onesignalhelper::StoreNotificationDetails($userItem->id, 'Notification', $request->title, $imagePath); } } @@ -178,6 +257,7 @@ class ManageNotificationsController extends Controller + /** * Created By : Sayli Raut * Created at : 10 June 2024 diff --git a/app/Http/Helpers/onesignalhelper.php b/app/Http/Helpers/onesignalhelper.php index 7fa88db..65a1e8f 100644 --- a/app/Http/Helpers/onesignalhelper.php +++ b/app/Http/Helpers/onesignalhelper.php @@ -27,13 +27,12 @@ class onesignalhelper ], 'big_picture' => $imageUrl, - 'external_id' => [$playerId] - // 'authorization' => env('ONE_SIGNAL_AUTHORIZE') + 'external_id' => [$playerId], + 'authorization' => env('ONE_SIGNAL_AUTHORIZE') ]; $result = OneSignal::sendPush($fields, null ,env('ONE_SIGNAL_APP_ID')); - // Log::info($result); - + Log::info($result); } diff --git a/resources/views/Admin/pages/manage_notification/manage_notifications_add.blade.php b/resources/views/Admin/pages/manage_notification/manage_notifications_add.blade.php index 0908717..0b05694 100644 --- a/resources/views/Admin/pages/manage_notification/manage_notifications_add.blade.php +++ b/resources/views/Admin/pages/manage_notification/manage_notifications_add.blade.php @@ -67,7 +67,7 @@