HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago-portal-updates/app/Http/Controllers/Admin/AdminController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Actions\AdminUpdateProfileAction;
use App\Actions\ChangePasswordAction;
use App\Helpers\Aws;
use App\Http\Controllers\Controller;
use App\Http\Requests\ChangePasswordRequest;
use App\Http\Requests\EditAdminProfileRequest;
use App\Models\Admin;
use App\Models\Cafe;
use App\Models\Order;
use App\Models\User;
use App\Models\PromoCodes;
use App\Services\AdminService;
use App\Services\ChangePasswordService;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Exception;
use Yajra\DataTables\Facades\DataTables;

class AdminController extends Controller
{
    private $adminService;
    private $changePasswordService;
    private $userModel;

    public function __construct()
    {
        $this->adminService = new AdminService(Admin::class);
        $this->changePasswordService = new ChangePasswordService(Admin::class);
        $this->userModel = new User;
    }

    public function index()
    {
        $data['allOrder'] = Order::count();
        $data['allRevenue'] = Order::sum('total_amount');
        $data['allUser'] = User::where([['is_active', 1], ['is_verified', 1], ['is_deleted', 0]])->count();
        $data['allCafe'] = Cafe::where([['is_active', 1], ['approved', 1], ['deleted_at', 0], ['is_admin_approved', 1]])->count();
        return view('admin.dashboard', $data);
    }

    public function myProfile()
    {
        $data = [];
        $data['name'] = Auth::user()->full_name;
        $data['email'] = Auth::user()->email;
        $data['profile_picture'] = Auth::user()->profile_picture ? Aws::presignedUri(Auth::user()->profile_picture) : '';
        $data['address'] = Auth::user()->address;
        $data['url'] = route('admin.editProfile');
        return view('admin.profile', $data);
    }

    public function editProfile()
    {
        $data = [];
        $data['name'] = Auth::user()->full_name;
        $data['email'] = Auth::user()->email;
        $data['profile_picture'] = Auth::user()->profile_picture ? Aws::presignedUri(Auth::user()->profile_picture) : '';
        $data['address'] = Auth::user()->address;
        $data['url'] = route('admin.updateProfile');
        $data['cancelUrl'] = route('admin.myProfile');
        return view('admin.edit-profile', $data);
    }

    public function updateProfile(EditAdminProfileRequest $request, AdminUpdateProfileAction $adminUpdateProfileAction)
    {
        return $adminUpdateProfileAction->handle(Admin::class, $request);
        // return $this->adminService->updateProfile($request);
    }

    public function changePasswordForm()
    {
        $url = route('admin.changePassword');
        return view('change-password', compact('url'));
    }

    public function changePassword(ChangePasswordRequest $request, ChangePasswordAction $changePasswordAction)
    {
        return $changePasswordAction->handle(Admin::class, $request);
        // return $this->changePasswordService->changePassword($request);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

	public function generateCodes(){
		$url = route('admin.submit-generate-codes');
     $promoCodes = PromoCodes::orderBy('created_at', 'desc')->paginate(10); // 10 per page
    return view('admin.generate-codes', compact('url', 'promoCodes'));
	}


	public function submitGenerateCodes(Request $request){
		try {
        $validated = $request->validate([
            'type' => 'required|in:year_free_then_fixed,month_free_then_discount',
            'quantity' => 'required|integer|min:1|max:1000',
        ]);

        $generatedCodes = [];

        for ($i = 0; $i < $validated['quantity']; $i++) {
            $code = strtoupper(Str::random(10));

            $data = [
                'code' => $code,
                'type' => $validated['type'],
                'is_active' => true,
            ];

            if ($validated['type'] === 'year_free_then_fixed') {
                $data['fixed_price'] = 12.99;
                $data['free_months'] = 12;
            } elseif ($validated['type'] === 'month_free_then_discount') {
                $data['fixed_price'] = null;
                $data['free_months'] = 1;
                $data['discount_percent'] = 15;
                $data['discount_duration_months'] = 12;
            }

            PromoCodes::create($data);
            $generatedCodes[] = $code;
        }

        return back()->with('success', 'Generated Promo Codes: <strong>' . implode(', ', $generatedCodes) . '</strong>');
    } catch (Exception $e) {
        return back()->withErrors(['error' => 'Something went wrong: ' . $e->getMessage()]);
    }
	}

}