| @@ -4,20 +4,34 @@ namespace App\Http\Controllers\Web\Auth; | |||
| use App\Models\User; | |||
| use App\Codes\UserRole; | |||
| use App\Features\LoginUser; | |||
| use Illuminate\Support\Arr; | |||
| use Illuminate\Support\Facades\Auth; | |||
| trait Me | |||
| { | |||
| use LoginUser; | |||
| protected function me() | |||
| { | |||
| if (Auth::check()) { | |||
| $user = Auth::user()->toArray(); | |||
| $user = Auth::user(); | |||
| return array_intersect_key($user, array_flip([ | |||
| $filteredUser = Arr::only($user->toArray(), [ | |||
| User::COL_NAME_ID, | |||
| User::COL_NAME_CONTRACT_ID, | |||
| User::COL_NAME_ROLE, | |||
| ])); | |||
| User::COL_NAME_NAME, | |||
| ]); | |||
| $contract = $this->loginUser()->getCurrentContract(); | |||
| if ($contract) { | |||
| $filteredUser[User::COL_NAME_CONTRACT_ID] = $contract->id; | |||
| $filteredUser['contract_name'] = $contract->name; | |||
| $filteredUser['custom'] = $contract->custom(); | |||
| }; | |||
| return $filteredUser; | |||
| } | |||
| return null; | |||
| } | |||
| @@ -37,14 +37,5 @@ class MeController extends WebController | |||
| return $this->successResponse($me); | |||
| } | |||
| return $this->failedResponse(); | |||
| // if (Auth::check()) { | |||
| // $user = Auth::user(); | |||
| // $ret = $user->get([ | |||
| // User::COL_NAME_CONTRACT_ID, | |||
| // User::COL_NAME_ROLE, | |||
| // ]); | |||
| // } else { | |||
| // } | |||
| } | |||
| } | |||
| @@ -39,7 +39,12 @@ class ReceiptIssuingOrdersController extends HelloTechnoController | |||
| { | |||
| $param = $this->param; | |||
| $list = $this->repository->get($param->toArray()); | |||
| $condition = [ | |||
| ...$param->toArray(), | |||
| ReceiptIssuingOrderRepository::CONDITION_CONTRACT_ID => Auth::user()->contract_id, | |||
| ]; | |||
| $list = $this->repository->get($condition); | |||
| return $this->successResponse([ | |||
| @@ -3,8 +3,8 @@ | |||
| namespace App\Http\Controllers\Web\Custom\HelloTechno; | |||
| use App\Http\Controllers\Web\BaseParam; | |||
| use App\Models\ReceiptIssuingHTParkingCustomOrder as HT; | |||
| use App\Models\ReceiptIssuingOrder; | |||
| use App\Repositories\Custom\HelloTechno\ReceiptIssuingOrderRepository as Repository; | |||
| use Illuminate\Support\Carbon; | |||
| /** | |||
| * @property ?string $id | |||
| @@ -13,6 +13,12 @@ use App\Models\ReceiptIssuingOrder; | |||
| * @property ?string $parkingManagementCode | |||
| * @property ?string $parkingName | |||
| * @property ?int $adjustSeqNo | |||
| * @property ?bool $done | |||
| * @property ?string $status | |||
| * @property ?Carbon $orderDateFrom | |||
| * @property ?Carbon $orderDateTo | |||
| * @property ?string $smsPhoneNumber | |||
| * @property ?string $handlerName | |||
| */ | |||
| class ReceiptIssuingsOrdersParam extends BaseParam | |||
| @@ -22,12 +28,18 @@ class ReceiptIssuingsOrdersParam extends BaseParam | |||
| return | |||
| array_merge( | |||
| [ | |||
| ReceiptIssuingOrder::COL_NAME_ID => $this->str(true), | |||
| HT::COL_NAME_CUSTOMER_CODE => $this->str(true), | |||
| HT::COL_NAME_CUSTOMER_NAME => $this->str(true), | |||
| HT::COL_NAME_PARKING_MANAGEMENT_CODE => $this->str(true), | |||
| HT::COL_NAME_PARKING_NAME => $this->str(true), | |||
| HT::COL_NAME_ADJUST_SEQ_NO => $this->numeric(true), | |||
| Repository::CONDITION_ID => $this->str(true), | |||
| Repository::CONDITION_CUSTOMER_CODE => $this->str(true), | |||
| Repository::CONDITION_CUSTOMER_NAME => $this->str(true), | |||
| Repository::CONDITION_PARKING_MANAGEMENT_CODE => $this->str(true), | |||
| Repository::CONDITION_PARKING_NAME => $this->str(true), | |||
| Repository::CONDITION_ADJSUT_SEQ_NO => $this->numeric(true), | |||
| Repository::CONDITION_SMS_PHONE_NUMBER => $this->str(true), | |||
| Repository::CONDITION_DONE => $this->boolean(true), | |||
| Repository::CONDITION_STATUS => $this->str(true), | |||
| Repository::CONDITION_ORDER_DATE_FROM => $this->date(true), | |||
| Repository::CONDITION_ORDER_DATE_TO => $this->date(true), | |||
| Repository::CONDITION_HANDLER_NAME => $this->str(true), | |||
| ], | |||
| $this->sortableRules(), | |||
| ); | |||
| @@ -54,7 +54,7 @@ class CreateManager extends ReceiptIssuingOrderManager | |||
| $order->order_datetime = DateUtil::now(); | |||
| $this->refreshToken(); | |||
| $contractId = $this->loginUser()->getContractId(); | |||
| $contractId = $this->loginUser()->getCurrentContractId(); | |||
| if ($contractId === null) { | |||
| throw new LogicException("契約不良"); | |||
| } | |||
| @@ -8,11 +8,12 @@ use App\Models\Contract; | |||
| use App\Models\User; | |||
| use Illuminate\Database\Eloquent\Model; | |||
| use Illuminate\Support\Facades\Auth; | |||
| use Illuminate\Support\Facades\Session; | |||
| use LogicException; | |||
| class LoginUser | |||
| { | |||
| private const SESSION_KEY_SADMIN_CONTRACT_ID = 'SESSION_KEY_SADMIN_CONTRACT_ID'; | |||
| private const SESSION_KEY_CURERNT_CONTRACT_ID = self::class . "/SESSION_KEY_CURERNT_CONTRACT_ID"; | |||
| public function __construct( | |||
| @@ -26,20 +27,6 @@ class LoginUser | |||
| return Auth::user(); | |||
| } | |||
| public function contract(): ?Contract | |||
| { | |||
| if (!Auth::check()) { | |||
| return null; | |||
| } | |||
| if ($this->contract->isNotSavedModel()) { | |||
| $this->contract = $this->user()->contract; | |||
| } | |||
| return $this->contract; | |||
| } | |||
| public function checkAuthorization(array|Model $target): bool | |||
| { | |||
| if (app()->runningInConsole()) { | |||
| @@ -62,18 +49,26 @@ class LoginUser | |||
| return $contractId === $this->user()->contract_id; | |||
| } | |||
| public function getContractId(): ?string | |||
| public function setCurrentContractId(string $contractId) | |||
| { | |||
| if ($this->user()->role === UserRole::SUPER_ADMIN) { | |||
| $session = request()->session(); | |||
| $user = $this->user(); | |||
| if ($user && Auth::user()->role !== UserRole::SUPER_ADMIN) { | |||
| throw new LogicException("スーパー管理者以外の成り代わりを検知"); | |||
| } | |||
| Session::put(self::SESSION_KEY_CURERNT_CONTRACT_ID, $contractId); | |||
| } | |||
| if ($session->exists(self::SESSION_KEY_SADMIN_CONTRACT_ID)) { | |||
| return $session->get(self::SESSION_KEY_SADMIN_CONTRACT_ID); | |||
| } | |||
| return $this->contract()->id; | |||
| public function getCurrentContractId(): string | |||
| { | |||
| $user = $this->user(); | |||
| if ($user && $user->role === UserRole::SUPER_ADMIN) { | |||
| return Session::get(self::SESSION_KEY_CURERNT_CONTRACT_ID, ""); | |||
| } | |||
| return data_get($user, User::COL_NAME_CONTRACT_ID, ""); | |||
| } | |||
| return data_get($this->contract(), Contract::COL_NAME_ID); | |||
| public function getCurrentContract(): ?Contract | |||
| { | |||
| return Contract::find($this->getCurrentContractId()); | |||
| } | |||
| } | |||
| @@ -7,6 +7,7 @@ use App\Models\ReceiptIssuingOrder; | |||
| use App\Models\User; | |||
| use App\Repositories\BaseRepository; | |||
| use Illuminate\Database\Query\JoinClause; | |||
| use Illuminate\Support\Carbon; | |||
| use Illuminate\Support\Collection; | |||
| use Illuminate\Support\Facades\DB; | |||
| @@ -15,11 +16,24 @@ class ReceiptIssuingOrderRepository extends BaseRepository | |||
| const CONDITION_ID = 'id'; | |||
| const CONDITION_CONTRACT_ID = 'contract_id'; | |||
| const CONDITION_CUSTOMER_CODE = 'customer_code'; | |||
| const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code'; | |||
| const CONDITION_CUSTOMER_NAME = 'customer_name'; | |||
| const CONDITION_PARKING_MANAGEMENT_NAME = 'parking_name'; | |||
| const CONDITION_PARKING_NAME = 'parking_name'; | |||
| const CONDITION_ADJSUT_SEQ_NO = 'adjust_seq_no'; | |||
| const CONDITION_DONE = 'done'; | |||
| const CONDITION_STATUS = 'status'; | |||
| const CONDITION_SMS_PHONE_NUMBER = 'sms_phone_number'; | |||
| const CONDITION_HANDLER_NAME = 'handler_name'; | |||
| const CONDITION_ORDER_DATE_FROM = 'order_date_from'; | |||
| const CONDITION_ORDER_DATE_TO = 'order_date_to'; | |||
| const TABLE_ORDER = "order"; | |||
| @@ -37,6 +51,7 @@ class ReceiptIssuingOrderRepository extends BaseRepository | |||
| { | |||
| $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER); | |||
| $table = $order | |||
| ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) { | |||
| $join->on( | |||
| @@ -55,6 +70,40 @@ class ReceiptIssuingOrderRepository extends BaseRepository | |||
| // ID | |||
| $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID])); | |||
| // 契約ID | |||
| $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_CONTRACT_ID])); | |||
| // 電話番号 | |||
| $phoneNumber = data_get($condition, static::CONDITION_SMS_PHONE_NUMBER); | |||
| if ($phoneNumber) { | |||
| $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), 'like', "%{$phoneNumber}%"); | |||
| } | |||
| // 完了確認 | |||
| $done = data_get($condition, static::CONDITION_DONE); | |||
| if ($done !== null) { | |||
| $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), $done); | |||
| } | |||
| // ステータス | |||
| $status = data_get($condition, static::CONDITION_STATUS); | |||
| if ($status) { | |||
| $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_NAME]), 'like', "%{$status}%"); | |||
| } | |||
| // 受付日時 | |||
| $orderDateFrom = data_get($condition, static::CONDITION_ORDER_DATE_FROM); | |||
| if ($orderDateFrom instanceof Carbon) { | |||
| $orderDateFrom->setTime(0, 0); | |||
| $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '>=', $orderDateFrom); | |||
| } | |||
| $orderDateTo = data_get($condition, static::CONDITION_ORDER_DATE_TO); | |||
| if ($orderDateTo instanceof Carbon) { | |||
| $orderDateTo->setTime(0, 0)->addDay(); | |||
| $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '<=', $orderDateTo); | |||
| } | |||
| // 運営会社 | |||
| $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE])); | |||
| $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME); | |||
| @@ -64,11 +113,18 @@ class ReceiptIssuingOrderRepository extends BaseRepository | |||
| // 駐車場 | |||
| $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE])); | |||
| $parkihngName = data_get($condition, static::CONDITION_PARKING_MANAGEMENT_NAME); | |||
| $parkihngName = data_get($condition, static::CONDITION_PARKING_NAME); | |||
| if ($parkihngName) { | |||
| $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%"); | |||
| } | |||
| // 担当者 | |||
| $handlerName = data_get($condition, static::CONDITION_HANDLER_NAME); | |||
| if ($handlerName) { | |||
| $table->where($this->makeColumnName([static::TABLE_HANDLER, User::COL_NAME_NAME]), 'like', "%{$handlerName}%"); | |||
| } | |||
| $table->select($this->columns()); | |||
| $main = DB::table($table, "main"); | |||