You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							67 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							67 lines
						
					
					
						
							2.6 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\Api\V1;
 | 
						|
 | 
						|
use App\CentralLogics\CustomerLogic;
 | 
						|
use App\CentralLogics\Helpers;
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
use App\Models\BusinessSetting;
 | 
						|
use App\Models\LoyaltyPointTransaction;
 | 
						|
use Illuminate\Support\Facades\Validator;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Mail;
 | 
						|
 | 
						|
class LoyaltyPointController extends Controller
 | 
						|
{
 | 
						|
    public function point_transfer(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'point' => 'required|integer|min:1'
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        if($request->user()->loyalty_point <= 0 || $request->user()->loyalty_point < (int)BusinessSetting::where('key','loyalty_point_minimum_point')->first()->value || $request->point > $request->user()->loyalty_point) {
 | 
						|
            return response()->json(['errors' => [ ['code' => 'point', 'message' => trans('messages.insufficient_point')]]], 203);
 | 
						|
        }
 | 
						|
 | 
						|
        try
 | 
						|
        {
 | 
						|
            $wallet_transaction = CustomerLogic::create_wallet_transaction($request->user()->id,$request->point,'loyalty_point',$request->reference);
 | 
						|
            CustomerLogic::create_loyalty_point_transaction($request->user()->id, $wallet_transaction->transaction_id, $request->point, 'point_to_wallet');
 | 
						|
            if(config('mail.status')) {
 | 
						|
                Mail::to($request->user()->email)->send(new \App\Mail\AddFundToWallet($wallet_transaction));
 | 
						|
            }
 | 
						|
 | 
						|
            return response()->json(['message' => translate('messages.point_to_wallet_transfer_successfully')], 200);
 | 
						|
        }catch(\Exception $ex){
 | 
						|
            info($ex);
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json(['errors' => [ ['code' => 'customer_wallet', 'message' => translate('messages.failed_to_transfer')]]], 203);
 | 
						|
    }
 | 
						|
 | 
						|
    public function transactions(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'limit' => 'required',
 | 
						|
            'offset' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $paginator = LoyaltyPointTransaction::where('user_id', $request->user()->id)->latest()->paginate($request->limit, ['*'], 'page', $request->offset);
 | 
						|
 | 
						|
        $data = [
 | 
						|
            'total_size' => $paginator->total(),
 | 
						|
            'limit' => $request->limit,
 | 
						|
            'offset' => $request->offset,
 | 
						|
            'data' => $paginator->items()
 | 
						|
        ];
 | 
						|
        return response()->json($data, 200);
 | 
						|
    }
 | 
						|
}
 | 
						|
 |