You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.3 KiB

<?php
namespace App\Http\Controllers\Admin;
use App\Models\Holiday;
use App\Models\Project;
use Illuminate\Http\Request;
use Kris\LaravelFormBuilder\FormBuilder;
class HolidayController extends CommonController
{
public $bladePath = "admin.holiday";
public $urlPrefix = "admin/project/holiday";
public $modelName = "节假日倍率";
public $modelClass = Holiday::class;
public function index(Request $request)
{
$data = $this->model
->with("project")
->when($request->project_id, function ($query) use ($request) {
$query->where("project_id", $request->project_id);
})
->orderBy("project_id")
->orderBy("date", "desc")
->orderBy("id", "desc")
->paginate(100);
return view($this->bladePath . ".index", compact("data"));
}
public function create(FormBuilder $formBuilder)
{
$projects = Project::orderBy("id", "desc")->get();
$holiday = new Holiday();
if (request()->project_id) {
$holiday->project_id = request()->project_id;
}
$isEdit = false;
return view($this->bladePath . ".create", compact("projects", "holiday", "isEdit"));
}
public function store(Request $request)
{
$request->validate([
"project_id" => "required|integer",
"price_ratio" => "required|numeric|min:0",
"dates" => "required|array|min:1",
"dates.*" => "required|date_format:Y-m-d",
"remark" => "nullable|string",
], [
"dates.required" => "请至少选择一个日期",
"dates.min" => "请至少选择一个日期",
]);
$dates = collect($request->dates)->filter()->unique()->values();
foreach ($dates as $date) {
Holiday::updateOrCreate(
[
"project_id" => $request->project_id,
"date" => $date,
],
[
"price_ratio" => $request->price_ratio,
"remark" => $request->remark,
]
);
}
$url = url($this->urlPrefix . "?project_id=" . $request->project_id);
return $this->success("保存成功,共处理 {$dates->count()} 个日期", $url);
}
public function edit($id = null, Request $request, FormBuilder $formBuilder)
{
$projects = Project::orderBy("id", "desc")->get();
$holiday = $this->model->find($id ?: $request->id);
$isEdit = true;
return view($this->bladePath . ".create", compact("projects", "holiday", "isEdit"));
}
public function update($id = null, Request $request)
{
$request->validate([
"project_id" => "required|integer",
"price_ratio" => "required|numeric|min:0",
"date" => "required|date_format:Y-m-d",
"remark" => "nullable|string",
]);
$holiday = $this->model->find($id ?: $request->id);
$holiday->update([
"project_id" => $request->project_id,
"date" => $request->date,
"price_ratio" => $request->price_ratio,
"remark" => $request->remark,
]);
$url = url($this->urlPrefix . "?project_id=" . $request->project_id);
return $this->success("修改成功", $url);
}
}