CaiWuXiTong/app/Http/Controllers/Business/CourierSurchargeQuotes.php

89 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers\Business;
use App\Business\CourierSurchargeQuoteRepository;
use App\Models\Business\CourierSurchargeQuote;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class CourierSurchargeQuotes extends Controller
{
public function __construct(private readonly CourierSurchargeQuoteRepository $quotes)
{
$this->middleware('auth');
$this->middleware('company.identify');
$this->middleware('business.page:courier-payables,courier-surcharge');
}
public function store(Request $request): RedirectResponse
{
abort_unless($this->quotes->ready(), 503, '附加费报价数据表尚未完成迁移,请联系管理员。');
$this->quotes->create($this->validated($request), (int) user_id());
return $this->redirect()->with('success', '报价规则已新增并保存。');
}
public function update(Request $request, CourierSurchargeQuote $quote): RedirectResponse
{
$this->ensureCompany($quote);
abort_unless($this->quotes->ready(), 503, '附加费报价数据表尚未完成迁移,请联系管理员。');
$this->quotes->update($quote, $this->validated($request), (int) user_id());
return $this->redirect()->with('success', '报价规则已更新并保存。');
}
public function setStatus(Request $request, CourierSurchargeQuote $quote): RedirectResponse
{
$this->ensureCompany($quote);
abort_unless($this->quotes->ready(), 503, '附加费报价数据表尚未完成迁移,请联系管理员。');
$status = $request->validate([
'status' => ['required', 'in:' . CourierSurchargeQuote::STATUS_ACTIVE . ',' . CourierSurchargeQuote::STATUS_INACTIVE],
])['status'];
$this->quotes->setStatus($quote, $status, (int) user_id());
return $this->redirect()->with('success', '报价规则状态已更新。');
}
/** @return array<string,mixed> */
private function validated(Request $request): array
{
$data = $request->validate([
'courier' => ['required', 'string', 'max:191'],
'scope' => ['required', 'in:' . implode(',', CourierSurchargeQuoteRepository::SCOPES)],
'reconciler' => ['required', 'string', 'max:100'],
'types' => ['required', 'array', 'min:1', 'max:50'],
'types.*' => ['string', 'in:' . implode(',', $this->quotes->activeTypeNames())],
'mode' => ['required', 'in:' . implode(',', CourierSurchargeQuoteRepository::MODES)],
'standard' => ['required', 'string', 'max:2000'],
'condition' => ['required', 'string', 'max:2000'],
'effective_at' => ['required', 'date_format:Y-m-d'],
'remark' => ['nullable', 'string', 'max:2000'],
]);
$data['courier'] = trim($data['courier']);
$data['reconciler'] = trim($data['reconciler']);
$data['types'] = array_values(array_unique($data['types']));
return $data;
}
private function ensureCompany(CourierSurchargeQuote $quote): void
{
abort_unless((int) $quote->company_id === (int) company_id(), 404, '报价规则不存在。');
}
private function redirect(): RedirectResponse
{
return redirect()->route('business.pages.show', [
'company_id' => company_id() ?: 1,
'section' => 'courier-payables',
'page' => 'courier-surcharge',
]);
}
}