trs_matrimony/app/Http/Controllers/Api/PackageController.php
2024-08-22 09:31:12 +05:30

222 lines
9.7 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Models\User;
use App\Models\Member;
use App\Models\Wallet;
use App\Models\Package;
use Illuminate\Http\Request;
use App\Utility\EmailUtility;
use App\Models\PackagePayment;
use App\Http\Resources\PackageResource;
use App\Http\Controllers\Api\Controller;
use App\Notifications\DbStoreNotification;
use Illuminate\Support\Facades\Notification;
use Kutia\Larafirebase\Facades\Larafirebase;
use App\Http\Resources\PackagePaymentResource;
use App\Http\Controllers\Api\Payment\PaytmController;
use App\Http\Resources\PackagePaymentInvoiceResource;
use App\Http\Controllers\Api\Payment\PaypalController;
use App\Http\Controllers\Api\Payment\StripeController;
use App\Http\Controllers\Api\Payment\PaystackController;
use App\Http\Controllers\Api\Payment\RazorpayController;
use App\Http\Controllers\Api\payment\InstamojoController;
class PackageController extends Controller
{
public function active_packages()
{
$packages = Package::where('active', '1')->get();
return PackageResource::collection($packages)->additional([
'result' => true
]);
}
public function package_details(Request $request)
{
$package = Package::find($request->package_id);
if ($package) {
return (new PackageResource($package))->additional([
'result' => true
]);
}
return $this->failure_message('sorry!!, Invalid Data.');
}
public function package_purchase_history()
{
$package_payments = PackagePayment::latest()
->where('user_id', auth()->user()->id)
->paginate(10);
return PackagePaymentResource::collection($package_payments)->additional([
'result' => true
]);
}
public function package_purchase_history_invoice(Request $request)
{
$payment = PackagePayment::find($request->package_payment_id);
if ($payment) {
return (new PackagePaymentInvoiceResource($payment))->additional([
'result' => true
]);
}
return $this->failure_message('sorry!!, Invalid Data.');
}
public function package_purchase(Request $request)
{
$user = auth()->user();
$payment_type = 'package_payment';
$payment_data = array();
$payment_data['package_id'] = $request->package_id;
$payment_data['amount'] = $request->amount;
$payment_data['payment_method'] = $request->payment_method;
$payment_data['payment_type'] = $payment_type;
if ($request->payment_method == 'wallet') {
if ($user->balance < $request->amount) {
return $this->failure_message('You do not have enough balance.');
} else {
$user->balance = $user->balance - $request->amount;
$user->save();
return $this->package_payment_done($user->id,$payment_data, null);
}
} elseif ($request->payment_method == 'manual_payment_1' || $request->payment_method == 'manual_payment_2') {
$payment_proof = null;
if ($request->hasFile('payment_proof')) {
$payment_proof = upload_api_file($request->file('payment_proof'));
}
$package_payment = new PackagePayment();
$package_payment->payment_code = date('ymd-His');
$package_payment->user_id = $user->id;
$package_payment->package_id = $request->package_id;
$package_payment->payment_method = 'manual_payment';
$package_payment->payment_status = 'Due';
$package_payment->amount = $request->amount;
$package_payment->payment_details = '';
$package_payment->offline_payment = 1;
$package_payment->custom_payment_name = get_setting($request->payment_method . '_name');
$package_payment->custom_payment_transaction_id = $request->transaction_id;
$package_payment->custom_payment_proof = $payment_proof;
$package_payment->custom_payment_details = $request->payment_details;
$package_payment->save();
// Package Payment Store Notification for member
try {
$notify_type = 'package_purchase';
$id = unique_notify_id();
$notify_by = $user->id;
$info_id = $package_payment->id;
$message = $user->first_name . ' ' . $user->last_name . translate('has been purchased a new package. Payment Code: ') . $package_payment->payment_code;
$route = route('package-payments.index');
// fcm
if (get_setting('firebase_push_notification') == 1) {
$fcmTokens = User::where('user_type', 'admin')
->whereNotNull('fcm_token')
->pluck('fcm_token')
->toArray();
Larafirebase::withTitle($notify_type)
->withBody($message)
->sendMessage($fcmTokens);
}
// end of fcm
Notification::send(User::where('user_type', 'admin')->first(), new DbStoreNotification($notify_type, $id, $notify_by, $info_id, $message, $route));
} catch (\Exception $e) {
// dd($e);
}
// Payment approval email send to member
if ($user->email != null && get_email_template('package_purchase_email', 'status')) {
EmailUtility::package_purchase_email($user, $package_payment);
}
return response()->json(['result' => true, 'message' => translate("Payment completed")]);
}
}
public function package_payment_done($user_id, $payment_data, $payment_details)
{
$user = User::where('id', $user_id)->first();
$package_payment = new PackagePayment();
$package_payment->payment_code = date('ymd-His');
$package_payment->user_id = $user->id;
$package_payment->package_id = $payment_data['package_id'];
$package_payment->payment_method = $payment_data['payment_method'];
$package_payment->payment_status = 'Paid';
$package_payment->amount = $payment_data['amount'];
$package_payment->payment_details = $payment_details;
$package_payment->offline_payment = 2;
$package_payment->save();
$member = Member::where('user_id', $user->id)->first();
$package = Package::where('id', $payment_data['package_id'])->first();
$member->current_package_id = $package->id;
$member->remaining_interest = $member->remaining_interest + $package->express_interest;
$member->remaining_photo_gallery = $member->remaining_photo_gallery + $package->photo_gallery;
$member->remaining_contact_view = $member->remaining_contact_view + $package->contact;
$member->remaining_profile_image_view = $member->remaining_profile_image_view + $package->profile_image_view;
$member->remaining_gallery_image_view = $member->remaining_gallery_image_view + $package->gallery_image_view;
$member->auto_profile_match = $package->auto_profile_match;
$member->package_validity = date('Y-m-d', strtotime($member->package_validity . ' +' . $package->validity . 'days'));
if ($member->save()) {
$user->membership = 2;
$user->save();
if (addon_activation('referral_system') && $user->referred_by != null && $user->referral_comission == 0) {
// For Referred by user
$reffered_by = User::where('id', $user->referred_by)->first();
$wallet = new Wallet();
$wallet->user_id = $reffered_by->id;
$wallet->amount = get_setting('referred_by_user_commission');
$wallet->payment_method = 'reffered_commission';
$wallet->payment_details = '';
$wallet->referral_user = $user->id;
$wallet->save();
$reffered_by->balance = $reffered_by->balance + get_setting('referred_by_user_commission');
$reffered_by->save();
$user->referral_comission = 1;
$user->save();
}
// Package Payment Store Notification for member
try {
$notify_type = 'package_purchase';
$id = unique_notify_id();
$notify_by = $user->id;
$info_id = $package_payment->id;
$message = $user->first_name . ' ' . $user->last_name . translate('has been purchased a new package. Payment Code: ') . $package_payment->payment_code;
$route = route('package-payments.index');
// fcm
if (get_setting('firebase_push_notification') == 1) {
$fcmTokens = User::where('user_type', 'admin')
->whereNotNull('fcm_token')
->pluck('fcm_token')
->toArray();
Larafirebase::withTitle($notify_type)
->withBody($message)
->sendMessage($fcmTokens);
}
// end of fcm
Notification::send(User::where('user_type', 'admin')->first(), new DbStoreNotification($notify_type, $id, $notify_by, $info_id, $message, $route));
} catch (\Exception $e) {
// dd($e);
}
// Payment approval email send to member
if ($user->email != null && get_email_template('package_purchase_email', 'status')) {
EmailUtility::package_purchase_email($user, $package_payment);
}
}
return response()->json(['result' => true, 'message' => translate("Payment completed")]);
}
}