Swift Solutions
Swift Solutions

Reputation: 189

where and whereIn suddenly stops working in laravel api

In my laravel api am using eloquent query with where condition like this. it was woriking fine before not it is not returning data . when i remove where and whereIn from query then it works fine.In tinker it is fetching data with where and whereIn .

Here is the query

    WorkingOrders::whereIn('status',[8,9])->where('gang_boss',auth()->user()->id)->orderBy('id','desc')->get();

whole controller is here

<?php

namespace App\Http\Controllers\GeneralApi;

use App\Events\ConfirmOrder;
use App\Http\Controllers\Controller;
use App\Models\Admin\Gang;
use App\Models\Admin\RightHandMan;
use App\Models\Admin\Staff;
use App\Models\Admin\StaffPivot;
use App\Models\Admin\Worker;
use App\Models\Admin\WorkerArrival;
use App\Models\Admin\WorkSheet;
use App\Models\WorkingOrders;
use App\Notifications\CustomNotification;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class WorkOrderController extends Controller

{


    public function workOrdersCompletedCancelled($user_id)
    {
        $role_id =  Auth::guard('staff_api')->user()->roles()->first()->id;
        $work_orders =  WorkingOrders::when($role_id == 2, function ($q) use ($user_id) {
            return $q->where('ranch', $user_id);
        })->when($role_id == 4, function ($q) use ($user_id) {
                return $q->where('right_hand_man_id', $user_id);
            })->when($role_id == 8, function ($q) use ($user_id) {
                return $q->where('supervisor', $user_id);
            })->when($role_id == 3, function ($q) use ($user_id) {
                $gang_ids = DB::table('worker_gang')->where('worker_id', $user_id)->pluck('gang_id')->toArray();
                $boss_ids = Gang::where('id', $gang_ids)->pluck('boss_id')->toArray();
                return $q->whereIn('gang_boss', $boss_ids);
            })->when($role_id == 10, function ($q) use ($user_id) {
                return $q->where('truck', $user_id);
            })->when($role_id == 1, function ($q) use ($user_id) {
                return $q->where('agent', $user_id);
            })->when($role_id == 9, function ($q) use ($user_id) {
                return $q->where('gang_boss', $user_id);
            })->whereIn('status', [0, 9])->with('gang_boss_details.bosses')
            ->with('type_of_cut_details')
            ->with('type_of_damage_details')
            ->with('number_of_boxes_details')
            ->with('size_of_boxes_details')
            ->with('packaging_company_details.packaging_companies')
            ->with('cutting_company_details:id,name')->with('supervisor_details:id,name')->with('agent_details:id,name')
            ->with('packaging_company_details:id,name')->with('truck_details:id,name')->with('ranch_details.ranch_owners')->with('right_hand_man:id,name')->with('weighing_machine_details:id,name,address,longitude,latitude')->with('worksheet')->orderBy('id', 'desc')->limit(20)->get();
        return response()->json($work_orders);
    }
    public function workOrders($boss_id)
    {
        $work_orders =  WorkingOrders::where('gang_boss', $boss_id)
            ->with('type_of_cut_details')
            ->with('type_of_damage_details')
            ->with('number_of_boxes_details')
            ->with('size_of_boxes_details')
            ->with('packaging_company_details.packaging_companies')
            ->with('gang_boss_details.bosses')->with('cutting_company_details:id,name')->with('supervisor_details:id,name')->with('agent_details:id,name')
            ->with('packaging_company_details')->with('truck_details:id,name')->with('ranch_details.ranch_owners')->with('right_hand_man:id,name')->with('weighing_machine_details:id,name,address,longitude,latitude')->with('worksheet')->orderBy('id', 'desc')->limit(20)->get();
        return response()->json($work_orders);
    }

    public function workOrderDetail($work_order_id)
    {
        $work_order =  WorkingOrders::with('cutting_company_details:id,name')
            ->with('type_of_cut_details')
            ->with('type_of_damage_details')
            ->with('number_of_boxes_details')
            ->with('size_of_boxes_details')
            ->with('packaging_company_details.packaging_companies')
            ->with('supervisor_details')->with('gang_boss_details.bosses')->with('agent_details')->with('ranch_details.ranch_owners')
            ->with('packaging_company_details')->with('weighing_machine_details:id,name,address,longitude,latitude')->with('worksheet')->with('truck_details.trucks')->with('right_hand_man')->find($work_order_id);
        return response()->json($work_order);
    }

    public function markOrderComplete($id)
    {
        $work_order = WorkingOrders::find($id);

         DB::table('notifications')->where('data','like','%'.$id.'%')->delete();
         $work_order->update(['status'=>9,'truck_delivered_fruit_at'=>date('Y-m-d H:i:s')]);

    }

    public function getRightHandManList()
    {
        $staff_child =   StaffPivot::where('staff_id', auth()->user()->id)->pluck('child_id')->toArray();
        $staff_role =  DB::table('staff_role')->whereIn('staff_id', $staff_child)->where('role_id', 4)->pluck('staff_id')->toArray();
        $staffs = Staff::whereIn('id', $staff_role)->pluck('id');
        $right_hand_men =  RightHandMan::whereIn('staff_id', $staffs)->with('staffs')->get();
        return response()->json($right_hand_men);
    }

    public function saveRightHandManList($right_hand_man, $work_order_id)
    {
        $work_order = WorkingOrders::find($work_order_id);
        if($work_order->status == 8){
            $status = 8;
        }else{
            $status = 3;
        }
        $work_order->update(['right_hand_man_id' => $right_hand_man, 'status' => $status,'confirmed_by_boss_at'=>date('Y-m-d H:i:s')]);
        $working_order = WorkingOrders::find($work_order_id);
        $appDetails = [
            'actionText' => Auth::user()->name . ' Se te asignó la orden de corte #' . $work_order_id,
            'actionURL' => "/work-order-detail/2/{$working_order->longitude}/{$working_order->latitude}",
        ];
        $rhm = Staff::find($right_hand_man);
        $rhm->notify(new CustomNotification($appDetails));
        event(new ConfirmOrder($working_order));
        return response()->json(['success' => 'Bañero asignado correctamente']);
    }

    public function getWorkSheet($work_order_id,$time)
    {
        $work_sheet = WorkSheet::where('work_order_id', $work_order_id)->first();
        $work_order = WorkingOrders::find($work_order_id);
        if($work_order->status == 8){
            $status = 8;
        }else{
            $status = 6;
        }
        $work_order->update(['status'=>$status,'arrival_to_ranch_at'=>date('Y-m-d H:i:s',strtotime($time))]);
        return response()->json($work_sheet);
    }

    public function saveWorkSheet($work_order_id, $column_name, $column_value)
    {
        if ($column_value == 'null') {
            $column_value = null;
        }
        $work_sheet =  WorkSheet::where('work_order_id', $work_order_id)->update([$column_name => $column_value]);
        return response()->json(['status' => true, 'message' => 'Hoja de campo guardada correctamente']);
    }

    public function addWorker(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'password' => 'required',
            'location' => 'required',
            'longitude' => 'required',
            'latitude' => 'required',
            'govt_id' => 'required',
            'phone_number' => 'required',
            'social_security_number' => 'required|unique:staffs,social_security_number',
            'time_as_worker' => 'required',
            'email' => 'required|email|unique:staffs,email'
        ]);
        $staff =   Staff::create([
            'name' => $request->name, 'password' => bcrypt($request->password), 'email' => $request->email, 'govt_id' => $request->govt_id,
            'social_security_number' => $request->social_security_number, 'phone_number' => $request->phone_number
        ]);
        DB::insert('insert into staff_role (role_id, staff_id) values (?, ?)', [3, $staff->id]);
        Worker::create(['staff_id' => $staff->id, 'time_as_worker' => $request->time_as_worker, 'address' => $request->location, 'latitude' => $request->latitude, 'longitude' => $request->longitude]);
        StaffPivot::create(['staff_id' => $request->boss_id, 'child_id' => $staff->id]);
        return response()->json(['status' => true, 'message' => 'Cortador creado correctamente']);
    }
    public function addRightHandMan(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'password' => 'required',
            'location' => 'required',
            'longitude' => 'required',
            'latitude' => 'required',
            'govt_id' => 'required',
            'phone_number' => 'required',
            'social_security_number' => 'required|unique:staffs,social_security_number',
            'time_as_right_hand_man' => 'required',
            'email' => 'required|email|unique:staffs,email'
        ]);
        $staff =   Staff::create([
            'name' => $request->name, 'password' => bcrypt($request->password), 'email' => $request->email, 'govt_id' => $request->govt_id,
            'social_security_number' => $request->social_security_number, 'phone_number' => $request->phone_number
        ]);
        DB::insert('insert into staff_role (role_id, staff_id) values (?, ?)', [4, $staff->id]);
        RightHandMan::create(['staff_id' => $staff->id, 'time_as_right_hand_man' => $request->time_as_right_hand_man, 'address' => $request->location, 'latitude' => $request->latitude, 'longitude' => $request->longitude]);
        StaffPivot::create(['staff_id' => $request->boss_id, 'child_id' => $staff->id]);
        return response()->json(['status' => true, 'message' => 'Bañero creado correctamente']);
    }

    public function getGangWorkers($gang_boss_id, $work_order_id)
    {
        $gang =  Gang::where('boss_id', $gang_boss_id)->first();
        $arrived_workers =  WorkerArrival::select('worker_id')->where('work_order_id', $work_order_id)->pluck('worker_id');
        return response()->json(['workers' => $gang->workers()->get(), 'arrived_workers' => $arrived_workers]);
    }
    public function getGangWorkersOnly($gang_boss_id)
    {
        $gang =  Gang::where('boss_id', $gang_boss_id)->first();

        return response()->json(['workers' => $gang->workers()->get()]);
    }

    public function storeWorkerArrival(Request $request)
    {


         WorkerArrival::where('work_order_id', $request->work_order_id)->delete();
        foreach ($request->worker_ids as $id) {
            if(!WorkerArrival::where('worker_id',$id)->where('work_order_id',$request->work_order_id)->exists()){
            WorkerArrival::create(['worker_id' => $id, 'work_order_id' => $request->work_order_id, 'is_reached' => 1]);
            }
        }
        $work_order = WorkingOrders::find($request->work_order_id);
        if($work_order->status == 8){
            $status = 8;
        }else{
            $status = 5;
        }
        $work_order->update(['status'=>$status,'arrival_to_mp_at'=>date('Y-m-d H:i:s',strtotime($request->time))]);
        event(new ConfirmOrder(WorkingOrders::find($request->work_order_id)));
        return response()->json(['status' => true, 'message' => 'Los cortadores que llegaron han sido registrados']);
    }

    public function getBossRightHandMan($boss_id)
    {
        $staff_child =   StaffPivot::where('staff_id', $boss_id)->pluck('child_id')->toArray();
        $staff_role =  DB::table('staff_role')->whereIn('staff_id', $staff_child)->where('role_id', 4)->pluck('staff_id')->toArray();
        $staffs = Staff::whereIn('id', $staff_role)->get();
        return response()->json($staffs);
    }

    public function getBossWorkers($boss_id)
    {
        // $gang =  Gang::where('boss_id', $boss_id)->first();

        // return response()->json(['workers' => $gang->workers()->get()]);
        $staff_child =   StaffPivot::where('staff_id', $boss_id)->pluck('child_id')->toArray();
        $staff_role =  DB::table('staff_role')->whereIn('staff_id', $staff_child)->where('role_id', 3)->pluck('staff_id')->toArray();
        $staffs = Staff::whereIn('id', $staff_role)->get();
        $gang =  Gang::where('boss_id', $boss_id)->first();

        return response()->json(['staff'=>$staffs,'workers'=>$gang->workers()->pluck('worker_id')->toArray()]);
    }

    public function deleteWorker(Request $request)
    {

        // Staff::find($request->worker_id)->delete();
        // Worker::where('staff_id', $request->worker_id)->delete();
        // $gang = Gang::where('boss_id', auth()->user()->id)->first();
        // DB::table('worker_gang')->where('worker_id', $request->worker_id)->where('gang_id', $gang->id)->delete();

        $gang = Gang::where('boss_id', auth()->user()->id)->first();
        StaffPivot::where('staff_id', auth()->user()->id)->where('child_id' , $request->worker_id)->delete();
        DB::table('worker_gang')->where('worker_id', $request->worker_id)->where('gang_id', $gang->id)->delete();

        return response()->json(['success', 'Cortador elimando de tu lista de trabajadores']);
    }

    public function checkExistingStaff(Request $request)
    {
        if (Staff::where('social_security_number', $request->social_security_number)->exists()) {
            return response()->json(['exists' => true, 'data' => Staff::where('social_security_number', $request->social_security_number)->first()]);
        }
        return response()->json(['exists' => false]);
    }
    public function addToMyProfile(Request $request)
    {
        if (!StaffPivot::where('staff_id', auth()->user()->id)->where('child_id', $request->child_id)->exists()) {
            StaffPivot::create(['staff_id' => auth()->user()->id, 'child_id' => $request->child_id]);
            return response()->json(['message' => 'Agregado correctamente a tu lista de trabajadores']);
        }
        return response()->json(['message' => 'Ya existe este usuario en tu lista de trabajadores']);
    }
    public function satffDetail($staff_id)
    {
        $satff = Staff::find($staff_id);
        return response()->json($satff);
    }

    public function addToGang(Request $request)
    {

        $gang =  Gang::where('boss_id', auth()->user()->id)->first();
        if (!DB::table('worker_gang')->where('worker_id', $request->worker_id)->where('gang_id', $gang->id)->exists()) {
            DB::table('worker_gang')->insert(['worker_id' => $request->worker_id, 'gang_id' => $gang->id]);
        }
        return response()->json(['status' => true, 'message' => 'Cortador asignado a la cuadrilla']);
    }


    public function removeWorkerFromGang(Request $request)
    {
        $gang =  Gang::where('boss_id', auth()->user()->id)->first();
        if (DB::table('worker_gang')->where('worker_id', $request->worker_id)->where('gang_id', $gang->id)->exists()) {
            DB::table('worker_gang')->where('worker_id', $request->worker_id)->where('gang_id', $gang->id)->delete();
            return response()->json(['status' => true, 'message' => 'Eliminado de la cuadrilla']);
        }
        return response()->json(['status' => true, 'message' => 'Este cortador no está en la cuadrilla']);
    }

    public function removeRHMFromWorkOrder(Request $request)
    {


        StaffPivot::where('child_id', $request->rhm)->where('staff_id', auth()->user()->id)->delete();

        return response()->json(['success', 'Bañero elimanado de tu lista de trabajadores']);
    }
    public function OrderComplete($id,$time)
    {
        $work_order = WorkingOrders::find($id);
        if($work_order->status == 8){
            $status = 8;
        }else{
            $status = 7;
        }

        $work_order->update(['status' => $status,'boss_marked_completed_at'=>date('Y-m-d H:i:s',strtotime($time))]);
        return response()->json(['status' => true, 'message' => 'Orden de corte completada']);
    }
    public function acceptance(Request $request)
    {

        if ($request->role == 'ranch') {

            WorkingOrders::where('id', $request->work_order_id)->update(['ranch_signature' => $request->acceptance]);
        }
        if ($request->role == 'supervisor') {
            WorkingOrders::where('id', $request->work_order_id)->update(['supervisor_signature' => $request->acceptance]);
        }

        return response()->json(['success' => 'Acción completada']);
    }


    public function storeWorkerData(Request $request)
    {

       WorkingOrders::find($request->work_order_id)->update(['boss_marked_completed_at'=>date('Y-m-d H:i:s'),'arrival_to_ranch_at'=>date('Y-m-d H:i:s')]);
        WorkSheet::where('work_order_id', $request->work_order_id)->update(['worker_data' => json_encode($request->worker_data),'number_of_box'=>json_encode($request->number_of_boxes)]);
        return response()->json(['success' => 'Datos del cortador guardados']);
    }

    public function getBossPayments(Request $request)
    {

        if($request->keyword !='false'){
        $staff_ids = Staff::select('id')->where('name','like',"%{$request->keyword}%")->pluck('id');
        $work_orders =  WorkingOrders::select('id','cutting_company','ranch','cutting_company_amount','final_kg','boss_amount')->with(['cutting_company_details:id,name','ranch_details:id,name','worksheet:work_order_id,worker_data,number_of_box'])->whereIn('status',[8,9])->where('gang_boss',auth()->user()->id)
        ->where(function($query)use($request,$staff_ids){
          $query->orWhere('id',$request->keyword)->orWhereIn('ranch',$staff_ids)->orWhereIn('cutting_company',$staff_ids);
        })->orderBy('id','desc')->get();
        foreach($work_orders as $work_order)
        {
            $work_order->setAttribute('payment',$this->getTotalAmountToPayToWorkers($work_order)['total_payment']);

        }
        return response()->json(['work_orders'=>$work_orders]);
    }else{

        $work_orders =  WorkingOrders::select('id','cutting_company','ranch','cutting_company_amount','final_kg','boss_amount')->with(['cutting_company_details:id,name','ranch_details:id,name','worksheet:work_order_id,worker_data,number_of_box'])->whereIn('status',[8,9])->where('gang_boss',auth()->user()->id)->orderBy('id','desc')->get();
        dd($work_orders);
        foreach($work_orders as $work_order)
        {
            $work_order->setAttribute('payment',$this->getTotalAmountToPayToWorkers($work_order)['total_payment']);

        }

        return response()->json(['work_orders'=>$work_orders]);
    }

    }

    public function getWorkOrderWorkerPayment($work_order_id)
    {

      $work_order =  WorkingOrders::with(['worksheet:work_order_id,worker_data,number_of_box','cutting_company_details:id,name','ranch_details:id,name'])->select('id','boss_amount','boss_marked_completed_at','cutting_company','ranch','date_of_work')->where('id',$work_order_id)->first();

      $work_order->setAttribute('total_amount_to_pay', $this->getTotalAmountToPayToWorkers($work_order)['total_payment']);

      return response()->json(['worker_payment_data'=>$this->getTotalAmountToPayToWorkers($work_order)['worker_payment_data'],'work_order'=>$work_order]);
    }

    public function getTotalAmountToPayToWorkers($work_order)
    {

        $total_amount_to_pay = 0;
        $worker_payment_data = [];
        $work_sheet= $work_order->worksheet;

        $data = json_decode($work_sheet->worker_data,true );
        $number_of_boxes = json_decode($work_sheet->number_of_box,true);
        foreach ((array)$data as $key => $worker_data){

            $box = 0;
            if(key_exists($key,$number_of_boxes))
            {
                $box =(int)$number_of_boxes[$key];
            }
           array_push($worker_payment_data,array('worker_id'=>explode("-",$key)[0],'photo_url'=>Staff::find(explode("-",$key)[0])->photo_url ?? '','worker_name'=>explode("-",$key)[1],'number_of_boxes'=>$box,'comment'=>$worker_data,
           'amount_to_pay'=>$box * (float)$work_order->boss_amount ));
           $total_amount_to_pay += ($box * (float)$work_order->boss_amount);
        }

        $worker_payment_data = collect($worker_payment_data);
        return array('total_payment'=>$total_amount_to_pay,'worker_payment_data'=>$worker_payment_data);
    }

   public function submitBossAmount($work_order_id,Request $request)
   {
        WorkingOrders::find($work_order_id)->update(['boss_amount'=>$request->boss_amount]);

        return response()->json(['status'=>true,'message'=>'Boss amount submitted successfully']);
   }
   public function getWorkerPayments(Request $request,$worker_id)
   {

       $staff_ids = Staff::select('id')->where('name','like',"%{$request->keyword}%")->pluck('id');
       $work_order_ids = WorkSheet::select('work_order_id')->where('worker_data','like',"%{$worker_id}%")->pluck('work_order_id');
       $work_orders =  WorkingOrders::select('id','cutting_company','ranch','cutting_company_amount','final_kg','boss_amount','date_of_work','boss_marked_completed_at')
       ->with(['cutting_company_details:id,name','ranch_details:id,name'])
       ->whereIn('status',[8,9])->whereIn('id',$work_order_ids)
       ->where(function($query)use($staff_ids,$request){
           $query->where('id',$request->keyword)->orWhereIn('ranch',$staff_ids)->orWhereIn('cutting_company',$staff_ids);
       })->orderBy('id','desc')->get();
       foreach($work_orders as $work_order)
       {
        $payment = $this->getTotalAmountToPayToWorkersForWorkPortal($work_order,$worker_id);
        $work_order->setAttribute('payment',$payment['total_payment']);
        $work_order->setAttribute('worker_payment_data',$payment['worker_payment_data']);
        $work_order->setAttribute('total_amount_to_pay',$payment['total_payment']);

    }
       return response()->json(['work_orders'=>$work_orders,'worker_payment_data']);
    }
    public function getTotalAmountToPayToWorkersForWorkPortal($work_order,$worker_id)
    {
        $total_amount_to_pay = 0;
        $worker_payment_data = [];
        $work_sheet= $work_order->worksheet;
        $worker_data = json_decode($work_sheet->worker_data,true );
        $number_of_boxes = json_decode($work_sheet->number_of_box,true);
        foreach ($worker_data as $key => $worker_data){
            $box = 0;
            if(key_exists($key,$number_of_boxes))
            {
                $box =(int)$number_of_boxes[$key];
            }
            if(explode("-",$key)[0]  == $worker_id){
             $worker_payment_data = array('worker_id'=>explode("-",$key)[0],'photo_url'=>Staff::find(explode("-",$key)[0])->photo_url ?? '','worker_name'=>explode("-",$key)[1],'number_of_boxes'=> $box ,'comment'=>$worker_data,
           'amount_to_pay'=> $box  * (float)$work_order->boss_amount );
           $total_amount_to_pay += ( $box  * (float)$work_order->boss_amount);
            }
        }

        $worker_payment_data = collect($worker_payment_data);

        return array('total_payment'=>$total_amount_to_pay,'worker_payment_data'=>$worker_payment_data);
    }
}

This is the full controller . I also tried to type cast variable which are using in where condition but nothing works.

Upvotes: 0

Views: 148

Answers (0)

Related Questions