Merhaba,
Henüz calendar üzerinde göstermedim fakat haftalık ders programını iki tarih arası vt ye ekleme/güncelleme/silme işlemini önceki haftalarda yapmıştım belki işinize yarayabilir.
Schema::create('timetables', function (Blueprint $table) {
$table->increments('id');
$table->integer('classroom_id')->unsigned()->index();
$table->foreign('classroom_id')->references('id')->on('classrooms')->onDelete('cascade');
$table->date('date')->nullable();
$table->smallInteger('lesson_hour_id')->unsigned()->index();
$table->foreign('lesson_hour_id')->references('id')->on('lesson_hours')->onDelete('cascade');
$table->integer('lesson_id')->unsigned()->index();
$table->integer('user_id')->unsigned()->index();
$table->timestamps();
});
view ilgili bölüm (bu işlem öncesinde ders seçme, ders saati tanımlama, sınıfa öğretmen atama vb. işlemler bulunmaktadır. Kullanacak olursanız, gerekli değişkenleri kendi sisteminize göre oluşturabilieceğinizi düşünüyorum)
{!! Form::model($classroom , ['method' => 'PATCH', 'action' => ['Admin\ClassroomController@timetableUpdate' , $classroom->id], 'class'=>'form-horizontal']) !!}
<div class="table-responsive">
<table id="table" class="table table-striped table-condensed">
<thead>
<tr>
<th class="text-right">Ders</th>
<th>Saat</th>
@foreach($dayList as $day)
<th> {{ $day }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($lessonHours as $lessonHour)
<tr>
<td class="text-right"><div class="form-control-static">{!! $lessonHour->lesson_number !!}</div></td>
<td class="text-right">{!! substr($lessonHour->pivot->start_time,0,5) !!}<br> {!! substr($lessonHour->pivot->end_time,0,5) !!}</td>
@foreach($dayList as $date => $day)
<td style="vertical-align: middle;">
<div class="form-group-sm">
{!! Form::select('lesson_user_id['.$date.']['.$lessonHour->id.']', $lessonUserList, isset($timetableList[$date][$lessonHour->id]) ? $timetableList[$date][$lessonHour->id] : '', ['placeholder' => '', 'class' => 'form-control']) !!}
</div>
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="col-sm-12">
<div class="form-group-sm">
{!! Form::label('first_date', 'Tarih Aralığı',['class'=>'col-sm-3 control-label']) !!}
<div class=" col-sm-5">
<div class="input-daterange input-group" id="datepicker">
{!! Form::text('first_date', $first_date , ['class' => 'form-control']) !!}
<span class="input-group-addon">-</span>
{!! Form::text('end_date', $end_date , ['class' => 'form-control']) !!}
</div>
</div>
<div class="col-sm-3">
{!! Form::submit('Kaydet', ['class' => 'btn btn-primary form-control']) !!}
</div>
</div>
</div>
{!! Form::close() !!}
/**
* Update the specified resource in storage.
*
* @param Classroom $classroom
* @param ClassroomRequest $request
* @return Response
*/
public function timetableUpdate(Classroom $classroom, Request $request)
{
$ok =0;
$now = Carbon::now()->toDateTimeString();
$arrayTimetable = $deleteList = [];
if($request->input('lesson_user_id')) foreach ($request->input('lesson_user_id') as $date => $lessonUser) {
$dayOfWeek = Carbon::parse($date)->dayOfWeek;
foreach ($lessonUser as $lesson_hour_id => $value) {
if($value) {
list($lesson_id, $user_id) = explode('-', $value);
$arrayTimetable[$dayOfWeek][$lesson_hour_id] = [
'classroom_id' => $classroom->id,
'lesson_hour_id' => $lesson_hour_id,
'lesson_id' => $lesson_id,
'user_id' => $user_id,
'created_at' => $now,
'updated_at' => $now,
];
} else $empthList[$dayOfWeek][$lesson_hour_id] = 1;
}
}
$first_date = Carbon::parse($request->input('first_date'));
$end_date = Carbon::parse($request->input('end_date'));
$timetables = Timetable::where('classroom_id', $classroom->id)->whereBetween('date', [$first_date, $end_date])->get();
foreach ($timetables as $timetable) {
$date = Carbon::parse($timetable->date);
$actionList[$date->format('Y-m-d')][$timetable->lesson_hour_id]=1;
$dayOfWeek = $date->dayOfWeek;
if(isset($empthList[$dayOfWeek][$timetable->lesson_hour_id])) {
$deleteList[] = $timetable->id;
continue;
}
$values = $arrayTimetable[$dayOfWeek][$timetable->lesson_hour_id];
if($timetable->lesson_id == $values['lesson_id'] && $timetable->user_id == $values['user_id']) continue;
$timetable->lesson_id = $values['lesson_id'];
$timetable->user_id = $values['user_id'];
if($timetable->save()) $ok++;
}
if(isset($deleteList) && Timetable::whereIn('id',$deleteList)->delete()) $ok++;
if($arrayTimetable) {
while ( $first_date<= $end_date) {
$dayOfWeek = $first_date->dayOfWeek;
if(!isset($arrayTimetable[$dayOfWeek])) {
$first_date->addDay();
continue;
}
$values = $arrayTimetable[$dayOfWeek];
foreach ($values as $lesson_hour_id => $value) {
if(isset($actionList[$first_date->format('Y-m-d')][$lesson_hour_id])) continue;
$value['date'] = $first_date->format('Y-m-d');
$inserts[]=$value;
}
$first_date->addDay();
}
if(isset($inserts)) {
if(\DB::table('timetables')->insert($inserts)) $ok++;
}
}
$ok ? Flash::success('İşlem başarıyla gerçekleştirildi')) : Flash::info('Değişiklik yapılmadı');
return redirect(route('admin.classrooms.timetable', $classroom->id));
}