本日の成果。
2Dのキャラを左右に移動させることができました。
本日の成果。
2Dのキャラを左右に移動させることができました。
前回までの状況はこちら。
最新ソースはこちら。(github)
https://github.com/takishita2nd/hotel-mng
最後は集計処理です。
今までは年月ごとに集計していましたが、今回はさらに部屋ごとに集計します。
さらに、部屋ごとに値段を自由に設定できるようにしたので、合計金額の算出処理も変更になります。
では、Viewに、部屋ごとにフィルタするコントロールを追加します。
{!! Form::open(['url' => action('RegisterManagementController@totalToMonthly')]) !!}
<table>
<tr>
<td>{!! Form::select('room', $rooms) !!}</td>
<td>{!! Form::submit('表示') !!}</td>
</tr>
</table>
{!! Form::close() !!}
<table class="total">
<tr>
<th class="yearmonth">年月</th>
<th class="name">部屋</th>
<th class="couont">件数</th>
<th class="total">売上</th>
</tr>
@foreach ($Lists as $list)
<tr>
<td class="yearmonth">{{ $list->yearmonth }}</td>
<td class="name">{{ $list->roomname }}</td>
<td class="couont">{{ $list->count }}</td>
<td class="total">{{ $list->total }}</td>
</tr>
@endforeach
</table>
フィルタ処理は、他のフィルタ処理と同様に、POSTリクエストすると、クエリパラメータ付きのURLに変換して、GETリクエストにリダイレクトします。
/**
* 月毎の集計を表示
*/
public function total(Request $request)
{
if(is_null($request->input('room')))
{
return view('register.total',
[
'Lists' => $this->registerManagement->countByMonthly(),
'rooms' => $this->roomRepository->getRoomList()
]);
}
else
{
return view('register.total',
[
'Lists' => $this->registerManagement->countByMonthly($request->input('room')),
'rooms' => $this->roomRepository->getRoomList()
]);
}
}
/**
* 月毎の集計を表示
*/
public function totalToMonthly(Request $request)
{
return redirect('management/total?room='.$request->room);
}
次にリポジトリの処理。
今回は集計処理を行うDBアクセスと、部屋の値段を取得するDBアクセスを行い、PHP側で金額を算出させます。
/**
* 月毎に集計する
*/
public function countByMonthly($room = 1)
{
$lists = ReserveDayList::select(DB::raw('DATE_FORMAT(day, "%Y-%m") as yearmonth'), DB::raw('count(*) as count'), 'rooms.name as roomname')
->leftJoin('reserve_day_list_reserve_management', 'reserve_day_lists.id', '=', 'reserve_day_list_reserve_management.reserve_day_list_id')
->leftJoin('reserve_managements', 'reserve_day_list_reserve_management.reserve_management_id', '=', 'reserve_managements.id')
->leftJoin('reserve_management_room', 'reserve_managements.id', '=', 'reserve_management_room.reserve_management_id')
->leftJoin('rooms', 'reserve_management_room.room_id', '=', 'rooms.id')
->where('reserve_managements.lodging', true)
->where('rooms.id', $room)
->groupby('yearmonth')
->groupby('roomname')
->get();
$model3 = Room::where('id', $room)->first();
$ret = array();
$index = 0;
foreach($lists as $list)
{
$list->total = $list->count * $model3->price;
$ret[$index] = $list;
$index++;
}
return $ret;
}
テーブルはすべて結合。
年月と部屋名でグループ分けすることで、それごとのレコード数を取得することができます。
さらに、WHERE句で部屋IDを指定することによって、必要な部屋の情報だけを取得することができます。
この関数の引数は部屋ID=1で初期化してあります。
この関数を使用するときに、引数を入れなければ、値1として処理実行されます。
これは部屋IDが指定されない場合のデフォルト処理として使用します。
これで一通り必要な機能は実装できたはず。
最終確認して提出したいと思います。
バナークリックで応援よろしくお願いします。
イノシシ肉を、姿そのままで購入しました。
角煮を作ろうと思いましたが、思った以上にバラにお肉がなくて、 急遽、晩酌用のビールを使ってカルボナード(ビール煮)にしました。
お肉が箸で切れるぐらい柔らかく仕上がりました。
味付けは濃いめにした方が、お酒のあてとしては最高だと思います。
今回使わなかった部位は、後ほど食材として使用します。
ナレーション:ついなちゃん(VOICEROID2)
おそらく、レベル25の楽曲で一番難しいとされている曲「ティアドロップス」
難しいと言われている所以が、以下の3連スライドなのです。
ここでつまずく人が多い。(オイラも含めて)
まず、こういった、同じところでつまずく場合は、一度プレイ画面をキャプチャ録画して、どこでミスしているのかを確認した方が良いです。
上の動画では、二つ目のスライドの始点でミスしているのがわかりますね。
スライドは始点と終点の指の位置が合っていないとミスト判定される可能性が高いです。
始点と終点の指の位置が正確になるように、意識してプレイして見るとクリアできる確率が高くなりますよ。
最後に、オイラはフルコンしたという証拠を。
本日の成果。
まぁ、前回から、反射の設定しただけと、玉の色を変えただけなんですけどね。
テキストの切りが良いので。
前回までの状況はこちら
最新ソースはこちら
https://github.com/takishita2nd/hotel-mng
今回は予約一覧とスケジュール一覧を部屋でフィルタをかける修正を行います。
フィルタに部屋を追加します。
{!! Form::open(['url' => action('RegisterManagementController@indexToMonthly')]) !!}
<table>
<tr>
<td>{!! Form::selectYear('year', 2019, 2020) !!}年</td>
<td>{!! Form::selectMonth('month') !!}</td>
<td>{!! Form::select('room', $rooms) !!}</td>
<td>{!! Form::submit('表示') !!}</td>
</tr>
</table>
{!! Form::close() !!}
部屋情報をViewに渡し、選択した部屋IDを受け取るようにコントローラーを修正します。
public function index(Request $request)
{
if(is_null($request->input('year')) || is_null($request->input('month')) || is_null($request->input('room')))
{
return view('register.index',
[
'registerLists' => $this->registerManagement->getList(),
'rooms' => $this->roomRepository->getRoomList()
]
);
}
else
{
return view('register.index',
[
'registerLists' => $this->registerManagement->getListByMonth($request->input('year'),
$request->input('month'),
$request->input('room')),
'rooms' => $this->roomRepository->getRoomList()
]
);
}
}
public function indexToMonthly(Request $request)
{
return redirect('management?year='.$request->year.'&month='.$request->month.'&room='.$request->room);
}
関数名おかしいけど気にするな。
public function getListByMonth($year, $month, $room)
{
return ReserveManagement::leftJoin('reserve_management_room', 'reserve_managements.id', '=', 'reserve_management_room.reserve_management_id')
->where('start_day', '>=', date('Y-m-d', strtotime('first day of '.$year.'-'.$month)))
->where('start_day', '<=', date('Y-m-d', strtotime('last day of '.$year.'-'.$month)))
->where('reserve_management_room.room_id', $room)
->where('lodging', false)
->orderBy('start_day')
->get();
}
予約管理テーブルと部屋(正確には中間テーブル)を結合して、指定された部屋番号でwhere句を追加します。
これで得られたリストが年月と部屋でフィルタされたものになります。
同じようにスケジュール一覧も修正します。
public function schedule(Request $request)
{
if(is_null($request->input('year')) || is_null($request->input('month')) || is_null($request->input('room')))
{
return view('register.schedule',
[
'Lists' => $this->registerManagement->getSchedule(),
'rooms' => $this->roomRepository->getRoomList()
]
);
}
else
{
return view('register.schedule',
[
'Lists' => $this->registerManagement->getScheduleByMonth($request->input('year'),
$request->input('month'),
$request->input('room')),
'rooms' => $this->roomRepository->getRoomList()
]
);
}
}
public function scheduleToMonthly(Request $request)
{
return redirect('management/schedule?year='.$request->year.'&month='.$request->month.'&room='.$request->room);
}
public function getScheduleByMonth($year, $month, $room)
{
return ReserveDayList::select('day', 'reserve_managements.name as name', 'rooms.name as room', 'lodging')
->leftJoin('reserve_day_list_reserve_management', 'reserve_day_lists.id', '=', 'reserve_day_list_reserve_management.reserve_day_list_id')
->leftJoin('reserve_managements', 'reserve_day_list_reserve_management.reserve_management_id', '=', 'reserve_managements.id')
->leftJoin('reserve_management_room', 'reserve_managements.id', '=', 'reserve_management_room.reserve_management_id')
->leftJoin('rooms', 'reserve_management_room.room_id', '=', 'rooms.id')
->where('day', '>=', date('Y-m-d', strtotime('first day of '.$year.'-'.$month)))
->where('day', '<=', date('Y-m-d', strtotime('last day of '.$year.'-'.$month)))
->where('rooms.id', $room)
->orderBy('day')
->get();
}
リポジトリはガッツリ書き換えました。
全部テーブルを結合して、where句でフィルタして、必要な情報をselectして・・・とやって、全部データベース一発で出力できるようにしました。
あとは集計処理ですな。
バナークリックで応援よろしくお願いします。
先日、バンドリクリパのライブビューイングがあったので、その時間までの時間つぶしと、BanG Dream! 3rd seasonの制作発表会のライブ試聴のため、寄っていったお店です。
以前、ランチでおそばを頂いたのですが、ディナーも安く飲めるらしいので、今回このお店を選択しました。
というか、サッポロファクトリーの周りって、飲めるところ少ないよね。
飲み放題90分750円ですが、+230円でビール付きにすることもできます。
日替わりで色々サービスが変わるようです。
入店した日は、鳥ハツとキノコのバター炒めが100円引きでした。
美味しかったのは焼き鶏ね。
味噌とか、特製だれで味付けしてあるの。
めっちゃ美味しかった。
また近くに来ることがあったら寄りたいな。
駅から近いしね。
ごちそうさまでした。
バナークリックで応援よろしくお願いします。
本日の成果。
特にプログラム組まなくてもここまでできました。
前回までの状況はこちら。
最新ソースはこちら。
https://github.com/takishita2nd/hotel-mng
今回も内容薄いかもしれん。
今までは予約登録時、日にちが重複していればエラーを表示させていました。
これが通用するのは部屋が一つしか無い場合のみでして、
今回は部屋が複数あるので、日にちだけのチェックだけではなくて、部屋もチェックに含めなければいけません。
というわけで、引数に部屋IDを追加。
/**
* 登録処理
*/
public function store(ManagementRequest $request)
{
if($this->registerManagement->checkSchedule($request->start_day,
$request->days,
$request->room) == false)
{
return redirect('management/create')
->with(['error' => 'スケジュールが重複します'])
->withInput();
}
/**
* 更新処理
*/
public function update(ManagementRequest $request)
{
if($this->registerManagement->checkScheduleForUpdate($request->start_day,
$request->days,
$request->id,
$request->room) == false)
{
return redirect('management/create')
->with(['error' => 'スケジュールが重複します'])
->withInput();
}
そしてチェック処理本体。
/**
* スケジュールの重複を確認する
*
* @return boolean
*/
public function checkSchedule($date, $num, $room)
{
for($i = 0; $i < $num; $i++)
{
$record = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
if(is_null($record) == false)
{
if($record->reserveManagements()->first()->rooms()->first()->id == $room)
{
return false;
}
}
}
return true;
}
/**
* 更新時のスケジュールの重複を確認する
*
* @return boolean
*/
public function checkScheduleForUpdate($date, $num, $userId, $room)
{
for($i = 0; $i < $num; $i++)
{
$model2 = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
if(is_null($model2) == false)
{
if($model2->reserveManagements()->first()->rooms()->first()->id == $room)
{
if($model2->reserveManagements()->first()->id != $userId)
{
return false;
}
}
}
}
return true;
}
strtotime($date.’+0 day’)ってできたんだ。
やってることは部屋チェックを追加しただけです。
簡単ですね。
これで、日付は同じだけど部屋が違う場合は予約可、日付と部屋が同じ場合は予約不可、というロジックが完成しました。
バナークリックで応援よろしくおねがいします。
本日行われたBanG Dream! 3rd season発表会の内容からバンドリ!ガールズバンドパーティ!の情報を抜粋します。
🎸#バンドリ制作発表会 速報💫
— バンドリ! ガールズバンドパーティ! (@bang_dream_gbp) December 12, 2019
アニメ「BanG Dream! 3rd Season」OP・ED楽曲のアプリ内追加が決定😍
OP『イニシャル』
ED『夢を撃ち抜く瞬間に!』
『イニシャル』は本日21時に追加❣
Youtubeにて新情報をお届け中📣
→https://t.co/oXNcA3G8Ts#バンドリ #ガルパ pic.twitter.com/Bm9LsvcEbX
🎸#バンドリ制作発表会 速報💫
— バンドリ! ガールズバンドパーティ! (@bang_dream_gbp) December 12, 2019
現在CM放送中のタイアップ楽曲『White Afternoon』の追加が決定✨
Youtubeにて新情報をお届け中📣
→https://t.co/oXNcA3G8Ts #バンドリ #ガルパ pic.twitter.com/9G7JdxUwv6
BanG Dream! 3rd seasonのOP「イニシャル」が本日21時に追加されました。
他2曲も実装予定です。
🎸#バンドリ制作発表会 速報💫
— バンドリ! ガールズバンドパーティ! (@bang_dream_gbp) December 12, 2019
「ゆく年くる年カバー楽曲追加キャンペーン!」開催決定🎉
今後追加されるカバー楽曲のヒントを公開‼️
ぜひ予想してみてくださいね🎶
楽曲は次回「@ハロハピCiRCLE放送局」にて発表😍
Youtubeにて新情報をお届け中📣https://t.co/oXNcA3G8Ts#バンドリ #ガルパ pic.twitter.com/CvSgZJ3kxP
カバー曲キャンペーン。
Twitter上での予想は、
マクロス・Fの「ライオン」?
五等分の花嫁の「五等分の気持ち」?
「!」はいろいろ予想が別れているようです。
というか、これだけじゃわからんわ。
12月22日のハロハピ放送局で明らかになるようです。
その他、ログインキャンペーンなどが行われます。
年末年始も眠れない。