mardi 17 décembre 2019

How to update model status using toggles in a table in laravel?

I am new in toggles. i want to update model status using toggles in the table and also update database at the same time.

Route

Route::prefix('attendance')->group(function () {
            Route::post('search', 'AttendanceController@searchAttendance')->name('man_power.search_attendance');

            Route::post('store', 'AttendanceController@storeAttendance')->name('man_power.store_attendance');

            Route::get('report', 'AttendanceController@report')->name('man_power.attendance_report');
            Route::post('report', 'AttendanceController@showReport')->name('man_power.attendance_report');

            Route::get('edit/{id}', 'AttendanceController@edit')->name('man_power.attendance.edit');
            Route::patch('edit/{id}', 'AttendanceController@update');

            Route::delete('delete', 'AttendanceController@delete')->name('man_power.attendance.delete');
        });

AttendanceController.php(only function)

public function showReport(Request $request) {

        $this->checkPermission();

        if(Auth::user()->isAdmin() || Auth::user()->isAccountant()) {
            $project = Project::findOrFail($request->post('pid'));
        }
        else {
            $project = Auth::user()->projects()
                ->findOrFail($request->post('pid'));
        }

        $attendances = $project->attendances()
            ->whereBetween('attendance_date', [Carbon::parse($request->post('start')), Carbon::parse($request->post('end'))])
            ->orderByDesc('attendance_date')
            ->get();


        return view('admin.manpower.report.ajax-attendance')
            ->with([
                'project'       => $project,
                'attendances'   => $this->makeAttendanceReport($attendances),
                'start'         => Carbon::parse($request->post('start'))->toFormattedDateString(),
                'end'           => Carbon::parse($request->post('end'))->toFormattedDateString()
            ]);
    }

protected function makeAttendanceReport(Collection $collection) {
        $attendances = collect();

        foreach ($collection as $item) {
            $uuid = Carbon::parse($item->attendance_date)->format('Y_m_d') . '_' . $item->user->id;

            if($attendances->isNotEmpty() && $existingKey = $this->uuidExists($uuid, $attendances)) {
                $shift = ['id' => $item->shift->shift_id, 'name' => $item->shift->shift_name];

                array_push($attendances[$existingKey]->shifts, $shift);
                $attendances[$existingKey]->payable += ($item->attendance_payable_amount ? $item->attendance_payable_amount : 0);
                $attendances[$existingKey]->paid += ($item->attendance_paid_amount ? $item->attendance_paid_amount : 0);
            }
            else {
                $attendances->push( $this->makeNewCollectionItem($item) );
            }
        }

        return $attendances;
    }


public function storeAttendance(Request $request) {
        $this->checkPermission();
        if(Auth::user()->isAdmin() || Auth::user()->isAccountant()) {
            $project = Project::findOrFail($request->post('project_id'));
        }
        else {
            $project = Auth::user()->projects()
                ->findOrFail($request->post('project_id'));
        }
        if(!$project) {
            return sendJsonResponse('error', 'Project not found or you are not authorised!');
        }
        $dtCheck = $this->checkDateTimeForAttendance($request->post('date'), $request->post('shift'));
        if($dtCheck != 'ok') {
            return sendJsonResponse('error', $dtCheck);
        }

        $staff = $project->users()->find($request->post('labour_id'));
        if(!$staff) {
            return sendJsonResponse('error', 'Staff not found!');
        }

        $oldAtt = Attendance::whereAttendanceProjectId($project->project_id)
            ->where('attendance_user_id', '=', $staff->id)
            ->where('attendance_date', '=', $request->post('date'))
            ->where('attendance_shift_id', '=', $request->post('shift'))
            ->first();

        if($oldAtt) {
            return sendJsonResponse('error', 'Attendance already taken!');
        }

        $attendance = new Attendance();

        $attendance->attendance_date = $request->post('date');
        $attendance->attendance_user_id = $request->post('labour_id');
        $attendance->attendance_project_id = $project->project_id;
        $attendance->attendance_shift_id = $request->post('shift');
        $attendance->attendance_payable_amount = number_format($staff->salary / 2, 2);
        $attendance->attendance_paid_amount = $request->post('paid');
        $attendance->attendance_note = $request->post('note');
        $attendance->status = true;

        $attendance->save();

        addActivity('attendance', $attendance->attendance_id, 'Attendance Added');
        if($attendance->attendance_paid_amount > 0) {
            $payment = createNewPayment([
                'type' => 'debit',
                'to_user' => $attendance->attendance_user_id,
                'from_user' => (!Auth::user()->isAdmin() && !Auth::user()->isAccountant()) ? Auth::id() : null,
                'to_bank_account' => null,
                'from_bank_account' => null,
                'amount' => $attendance->attendance_paid_amount,
                'project' => $attendance->attendance_project_id,
                'purpose' => 'salary',
                'by' => 'cash',
                'date' => $attendance->attendance_date,
                'image' => null,
                'note'  => $attendance->attendance_note
            ]);
            if(!$payment) {
                return redirectBackWithNotification();
            }
        }

        return sendJsonResponse('success', 'Attendance Added Successfully!');
    }

mainly this function are working with toggle button

my ajax file is

@foreach($attendances as $index => $attendance)
<td>
                                        <input type="checkbox" data-id="" name="status" class="js-switch" >
                                    </td>
@endforeach


and script

let elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch')); elems.forEach(function(html) { let switchery = new Switchery(html, { size: 'small' }); }); $(document).ready(function(){ $('.js-switch').change(function () { let status = $(this).prop('checked') === true ? 1 : 0; let userId = $(this).data('attendance_id'); $.ajax({ type: "GET", dataType: "json", url: '', data: {'status': status, 'user_id': userId}, success: function (data) { toastr.options.closeButton = true; toastr.options.closeMethod = 'fadeOut'; toastr.options.closeDuration = 100; toastr.success(data.message); } }); }); });

i want to update toggle button in database so that if i change a toggle button and refresh the page then button should be the changeable. in database i add ``` $table->boolean('status')->default(0);``` .

How can i update toggle button in database in ```showReport``` function?


via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire