Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/egrocer.codeskitter.site/app/Http/Controllers/API/
Upload File :
Current File : /home/users/unlimited/www/egrocer.codeskitter.site/app/Http/Controllers/API/AdminAuthController.php

<?php

// namespace App\Http\Controllers\Api;
namespace App\Http\Controllers\API;

use App\Helpers\CommonHelper;
use App\Http\Controllers\Controller;
use App\Models\Admin;
use App\Models\DeliveryBoy;
use App\Models\Role;
use App\Models\Seller;
use App\Models\SellerCommission;
use App\Models\Setting;
use App\Models\UserToken;
use App\Models\AdminToken;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use App\Models\User;
use Illuminate\Validation\Rule;


class AdminAuthController extends Controller
{
    public function login(Request $request)
    {
        $requestData = $request->all();
        $validator = Validator::make($requestData,[
            'email' => 'email|required',
            'password' => 'required'
        ]);

        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }
        if($request->type==3){
             $user = Admin::with('seller')->where('email', request()->email)->first();
                
            if(!$user || !$user->seller){
                return CommonHelper::responseError('User is not register with this email address!');
            }
        }elseif($request->type==4){
            $user = Admin::with('deliveryBoy')->where('email', request()->email)->first();
            if(!$user || !$user->deliveryBoy){
                return CommonHelper::responseError('User is not register with this email address!');
            }
        }else{
            $user = Admin::where('email', request()->email)->first(); 
            if(!$user){
                return CommonHelper::responseError('User is not register with this email address!');
            }
        }
       
        if (!Hash::check(request()->password, $user->password)) {
            return CommonHelper::responseError('Email/Password is wrong!');
        }

        $otherRoleIds = array(Role::$roleSeller, Role::$roleDeliveryBoy);
        if(in_array($user->role_id,$otherRoleIds) && \App\Models\Setting::get_value('purchase_code')==''){
            return CommonHelper::responseError('System is not activated yet, Please Contact to Administrator!');
        }

        if($user->role_id == Role::$roleSeller && isset($user->seller) && $user->seller->status == Seller::$statusRegistered){
            return CommonHelper::responseError("Your request under review, you will get notification after get approval!");
        }

        if($user->role_id == Role::$roleSeller && isset($user->seller) && $user->seller->status == Seller::$statusRejected){
            $data["status"] = $user->seller->status;
            $data["remark"] = $user->seller->remark ?? "";
            return CommonHelper::responseErrorWithData("Your request rejected, Please Contact to Administrator for approval!", $data);
        }

        //If delivery boy
        if($user->role_id == Role::$roleDeliveryBoy && isset($user->deliveryBoy) && $user->deliveryBoy->status == DeliveryBoy::$statusRegistered){
            return CommonHelper::responseError("Your request under review, you will get notification after get approval!");
        }

        if($user->role_id == Role::$roleDeliveryBoy && isset($user->deliveryBoy) && $user->deliveryBoy->status == DeliveryBoy::$statusRejected){
            $data["status"] = $user->deliveryBoy->status;
            $data["remark"] = $user->deliveryBoy->remark ?? "";
            return CommonHelper::responseErrorWithData("Your request rejected, Please Contact to Administrator for approval!", $data);
        }

        if($user->role_id == Role::$roleDeliveryBoy && isset($user->deliveryBoy) && $user->deliveryBoy->status == DeliveryBoy::$statusDeactivated){
            $data["status"] = $user->deliveryBoy->status;
            $data["remark"] = $user->deliveryBoy->remark ?? "";
            return CommonHelper::responseErrorWithData("Your Account is Deactivated, Please Contact to Administrator for activate!", $data);
        }

        Auth::login($user,false);

        if(isset($request->fcm_token)) {
            $type = "";
            $user_id = 0;
            if($user->role_id == Role::$roleSeller){
                $type = Role::$roleNameSeller;
                $user_id = auth()->user()->seller->id;
            }elseif($user->role_id == Role::$roleDeliveryBoy){
                $type = Role::$roleNameDeliveryBoy;
                $user_id = auth()->user()->deliveryBoy->id;
            }
            AdminToken::firstOrCreate([
                'user_id' => $user_id,
                'type' => $type,
                'fcm_token' => $request->fcm_token,
                'platform' => $request->platform
            ]);
        }


        $accessToken = $user->createToken('authToken')->accessToken;

        $res = ['user' => $user, 'access_token' => $accessToken];
        return CommonHelper::responseWithData($res);
    }

    public function logout (Request $request)
    {
        $token = $request->user()->token();
        $token->revoke();
        $response = ['message' => 'You have been successfully logged out!'];
        return response($response, 200);
    }

    public function forgetPassword(Request $request){

        $requestData = $request->all();
        $validator = Validator::make($requestData,[
            'email' => 'required|email|exists:admins',
        ],[
            'email.exists' => "This Email is not registered, Please enter valid Email Address"
        ]);

        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        $token = time().Str::random(30);

        DB::table('password_resets')->insert([
            'email' => $request->email,
            'token' => $token,
            'created_at' => Carbon::now()
        ]);

        $data = array();
        $data['type'] = "forgot_password";
        $data['token'] = $token;
        CommonHelper::sendMail($request->email,"Reset Password",$data);

        return CommonHelper::responseSuccess("We have e-mailed your password reset link!");
    }

    public function resetPassword(Request $request){

        $requestData = $request->all();
        $validator = Validator::make($requestData,[
            'password' => 'required|string|min:6|confirmed',
            'password_confirmation' => 'required'
        ]);

        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        $updatePassword = DB::table('password_resets')
            ->where(['token' => $request->token])
            ->first();

        if(!$updatePassword){
            return CommonHelper::responseError("Invalid token!");
        }

        $admin = Admin::where('email', $updatePassword->email)
            ->update(['password' => bcrypt($request->password)]);

        DB::table('password_resets')->where(['email'=> $updatePassword->email])->delete();

        return CommonHelper::responseSuccess("Password updated successfully!");
    }

    /*Seller*/
    public function sellerRegister(Request $request){
        $requestData = $request->all();
        $validator = Validator::make($requestData,[
            'name' => 'required',
            'email' => 'email|required|unique:admins',
            'mobile' => 'required',
            'password' => 'min:6|required_with:confirm_password|same:confirm_password',
            'categories_ids' => 'required',
            'store_name' => 'required',
            'store_url' => 'required',
            'city_id' => 'required',
            'pan_number' => 'required',
            'commission' => 'required',
            'national_id_card' => 'required|mimes:jpeg,jpg,png,gif,pdf',
            'address_proof' => 'required|mimes:jpeg,jpg,png,gif,pdf',
            'store_logo' => 'required|mimes:jpeg,jpg,png,gif,pdf',
            'store_description' => 'required',
        ],[
            'email.unique' => 'The :attribute has already been taken.',
        ]);

        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        DB::beginTransaction();
        try {
            $admin = Admin::create([
                'username' =>  $request->name,
                'store_name' => $request->store_name??"",
                'email' => $request->email,
                'password' => bcrypt($request->password),
                'role_id' => Role::$roleSeller,
                'created_by' => 0,
            ]);
            $seller = new Seller();
            $seller->admin_id = $admin->id;
            $seller->name = $request->name;
            $seller->slug = $request->store_name??"";
            $seller->store_name = $request->store_name;
            $seller->email = $request->email;
            $seller->mobile = $request->mobile;
            $seller->status = Seller::$statusRegistered;
            $seller->store_url = $request->store_url;
            $seller->categories = $request->categories_ids;
            $seller->tax_name = $request->tax_name;
            $seller->tax_number = $request->tax_number;
            $seller->pan_number = $request->pan_number;
            $seller->city_id = $request->city_id;
            $seller->store_description = $request->store_description;
            $seller->commission = $request->commission;
            if($request->hasFile('store_logo')){
                $file = $request->file('store_logo');
                $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
                $image = Storage::disk('public')->putFileAs('sellers', $file, $fileName);
                $seller->logo = $image;
            }
    
            if($request->hasFile('national_id_card')){
                $file = $request->file('national_id_card');
                $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
                $image = Storage::disk('public')->putFileAs('sellers', $file, $fileName);
                $seller->national_identity_card = $image;
            }
    
            if($request->hasFile('address_proof')){
                $file = $request->file('address_proof');
                $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
                $image = Storage::disk('public')->putFileAs('sellers', $file,$fileName);
                $seller->address_proof = $image;
            }
            $seller->save();
            if($seller->status == Seller::$statusRegistered ){
                $categories_ids = explode(',',$request->categories_ids);
                foreach ($categories_ids as $key => $category_id){
                    $commission = new SellerCommission();
                    $commission->seller_id = $seller->id;
                    $commission->category_id = $category_id;
                    $commission->save();
                }
            }
            try {
                CommonHelper::sendMailAdminStatus( "seller", $seller, $seller->status, $request->email);
            }catch ( \Exception $e){
                Log::error("Register Seller status send mail error",[$e->getMessage()] );
            }


           DB::commit();
            return CommonHelper::responseSuccess("Seller Registration Successful! Your Request send to admin and will approve soon. Thank You!");

        }catch (\Exception $e){
            Log::info("Seller Register Error : ",[$e->getMessage()]);
            DB::rollBack();
            return CommonHelper::responseError("Something went wrong!");
        }
    }

    public function saveSellerDetails(Request $request){

        $record = Seller::where('admin_id',auth()->user()->id)->first();
        if(!$record){
            return CommonHelper::responseError("Seller Details Not Found");
        }

        $validator = Validator::make($request->all(),[
            'name' => 'required',
            'email' => 'email|required|unique:admins,email,'.auth()->user()->id,

            'store_url' => 'required',
            'store_name' => 'required',

            'store_logo' => ($record->store_logo == "")?'required|':''.'mimes:jpeg,jpg,png,gif,pdf',
            'national_id_card' => ($record->national_id_card == "")?'required|':''.'mimes:jpeg,jpg,png,gif,pdf',
            'address_proof' => ($record->address_proof == "")?'required|':''.'mimes:jpeg,jpg,png,gif,pdf',

            'street' => 'required',
            'city_id' => 'required',
            'state' => 'required',
            'categories_ids' => 'required',
            'account_number' => 'required',
            'ifsc_code' => 'required',
            'bank_name' => 'required',
            'account_name' => 'required',
            'latitude' => 'required',
            'longitude' => 'required',
            'place_name' => 'required',
            'formatted_address' => 'required',
            'store_description' => 'required'
        ],[
            'email.unique' => 'The :attribute has already been taken.',
        ]);
        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        $record->name = $request->name;
        $record->email = $request->email;
        $record->mobile = $request->mobile;
        $record->store_url = $request->store_url;
        $record->store_name = $request->store_name;
        $record->street = $request->street;
        $record->pincode_id = ($request->pincode_id)??0;
        $record->city_id = $request->city_id;
        $record->state = $request->state;
        $record->categories = $request->categories_ids;
        $record->account_number = $request->account_number;
        $record->bank_ifsc_code = $request->ifsc_code;
        $record->bank_name = $request->bank_name;
        $record->account_name = $request->account_name;
        $record->tax_name = $request->tax_name;
        $record->tax_number = $request->tax_number;
        $record->pan_number = $request->pan_number;
        $record->latitude = $request->latitude;
        $record->longitude = $request->longitude;
        $record->place_name = $request->place_name;
        $record->formatted_address = $request->formatted_address;
        $record->store_description = $request->store_description;

        if($record->status == Seller::$statusRegistered ){
            $record->require_products_approval = $request->require_products_approval ?? 0;
            $record->customer_privacy = $request->customer_privacy ?? 0;
            $record->view_order_otp = $request->view_order_otp ?? 0;
            $record->assign_delivery_boy = $request->assign_delivery_boy ?? 0;
            $record->change_order_status_delivered = $request->change_order_status_delivered ?? 0;
        }

        if($request->hasFile('store_logo')){
            $file = $request->file('store_logo');
            $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
            $image = Storage::disk('public')->putFileAs('sellers', $file, $fileName);
            $record->logo = $image;
        }

        if($request->hasFile('national_id_card')){
            $file = $request->file('national_id_card');
            $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
            $image = Storage::disk('public')->putFileAs('sellers', $file, $fileName);
            $record->national_identity_card = $image;
        }

        if($request->hasFile('address_proof')){
            $file = $request->file('address_proof');
            $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
            $image = Storage::disk('public')->putFileAs('sellers', $file,$fileName);
            $record->address_proof = $image;
        }
        $record->save();

        if($record->status == Seller::$statusRegistered ){
            $categories_ids = explode(',',$request->categories_ids);
            foreach ($categories_ids as $key => $category_id){
                $commission = new SellerCommission();
                $commission->seller_id = $record->id;
                $commission->category_id = $category_id;
                $commission->save();
            }
        }
        if($record->status == Seller::$statusRegistered ) {
            return CommonHelper::responseSuccess("Your Request send to admin and will approve soon. Thank You!");
        }else{
            return CommonHelper::responseSuccess("Your updated successfully. Thank You!");
        }
    }


    /*Delivery Boy*/
    public function deliveryBoyRegister(Request $request){

        $requestData = $request->all();
        $validator = Validator::make($requestData,[
            'name' => 'required',
            'email' => 'email|required|unique:admins',
            'mobile' => 'required',
            'dob' => 'required',
            'password' => 'min:6|required_with:confirm_password|same:confirm_password',
            'city_id' => 'required',
            'bonus_type' => 'required',
            'bonus_percentage' => $request->bonus_type == 1 ? 'required' : '',
            'driving_license' => 'required|mimes:jpeg,jpg,png,gif,pdf',
            'national_identity_card' => 'required|mimes:jpeg,jpg,png,gif,pdf',
        ],[
            'email.unique' => 'The :attribute has already been taken.',
        ]);

        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        DB::beginTransaction();
        try {
            $data = array();
            $data['username'] = $request->name;
            $data['email'] = $request->email;
            $data['password'] = bcrypt($request->password);
            $data['role_id'] = Role::$roleDeliveryBoy;
            $data['created_by'] = 0;
            $admin = Admin::create($data);

            $deliveryBoy = new DeliveryBoy();
            $deliveryBoy->city_id = $request->city_id;
            $deliveryBoy->admin_id = $admin->id;
            $deliveryBoy->name = $request->name;
            $deliveryBoy->mobile = $request->mobile;
            $deliveryBoy->address = '';
            $deliveryBoy->dob = $request->dob;
            $deliveryBoy->bonus_type = $request->bonus_type;
            $deliveryBoy->bonus_percentage =  $request->bonus_percentage ?? 0;
           
            $deliveryBoy->status = DeliveryBoy::$statusRegistered;

            $driving_license = '';
            if($request->hasFile('driving_license')){
                $file = $request->file('driving_license');
                $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
                $driving_license = Storage::disk('public')
                    ->putFileAs('delivery_boy/driving_license', $file,$fileName);
            }
            $deliveryBoy->driving_license = $driving_license;
            $national_identity_card = '';
            if($request->hasFile('national_identity_card')){
                $file = $request->file('national_identity_card');
                $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
                $national_identity_card = Storage::disk('public')
                    ->putFileAs('delivery_boy/national_identity_card', $file, $fileName);
            }
            $deliveryBoy->national_identity_card = $national_identity_card;
            $deliveryBoy->save();

            try {
                CommonHelper::sendMailAdminStatus( "delivery_boy", $deliveryBoy, $deliveryBoy->status, $request->email);
            }catch ( \Exception $e){
                Log::error("Register delivery_boy status send mail error",[$e->getMessage()] );
            }

            DB::commit();
            return CommonHelper::responseSuccess("Delivery Boy Registration Successful!");

        }catch (\Exception $e){
            Log::info("Delivery Boy Register Error : ",[$e->getMessage()]);
            DB::rollBack();
            return CommonHelper::responseError("Something went wrong!");
        }
    }
    public function saveDeliveryBoyDetails(Request $request){

        $deliveryBoy = DeliveryBoy::where('admin_id',auth()->user()->id)->first();

        if(!$deliveryBoy){
            return CommonHelper::responseError("No Delivery boy details found!");
        }

        $validator = Validator::make($request->all(),[
            'name' => 'required',
            'mobile' => 'required',
            'dob' => 'required',
            'driving_license' => ($deliveryBoy->driving_license == "")?'required|':''.'mimes:jpeg,jpg,png,gif,pdf',
            'national_identity_card' => ($deliveryBoy->national_identity_card == "")?'required|':''.'mimes:jpeg,jpg,png,gif,pdf',
            'ifsc_code' => 'required',
            'bank_name' => 'required',
            'bank_account_number' => 'required',
            'account_name' => 'required',
            'city_id' => 'required',
            'address' => 'required'
        ],[
            'email.unique' => 'The :attribute has already been taken.',
        ]);
        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }

        $deliveryBoy->name = $request->name;
        $deliveryBoy->mobile = $request->mobile;
        $deliveryBoy->dob = $request->dob;
        $deliveryBoy->city_id = $request->city_id;
        $driving_license = '';
        if($request->hasFile('driving_license')){
            $file = $request->file('driving_license');
            $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
            $driving_license = Storage::disk('public')
                ->putFileAs('delivery_boy/driving_license', $file,$fileName);
        }
        $deliveryBoy->driving_license = $driving_license;
        $national_identity_card = '';
        if($request->hasFile('national_identity_card')){
            $file = $request->file('national_identity_card');
            $fileName = time().'_'.rand(1111,99999).'.'.$file->getClientOriginalExtension();
            $national_identity_card = Storage::disk('public')
                ->putFileAs('delivery_boy/national_identity_card', $file, $fileName);
        }
        $deliveryBoy->national_identity_card = $national_identity_card;
        $deliveryBoy->ifsc_code = $request->ifsc_code;
        $deliveryBoy->bank_name = $request->bank_name;
        $deliveryBoy->bank_account_number = $request->bank_account_number;
        $deliveryBoy->account_name = $request->account_name;
        $deliveryBoy->address = $request->address;
        $deliveryBoy->other_payment_information = $request->other_payment_information;
        $deliveryBoy->save();

        if($deliveryBoy->status == DeliveryBoy::$statusRegistered ) {
            return CommonHelper::responseSuccess("Your Request send to admin and will approve soon. Thank You!");
        }else{
            return CommonHelper::responseSuccess("Your updated successfully. Thank You!");
        }
    }

    public function validateLogin(){
        $login = validateLogin();
        if(isset($login['is_login']) && $login['is_login']==true){
            return CommonHelper::responseSuccess("Success");
        }
        return CommonHelper::responseError("Success");
    }
}