diff --git a/app/Http/Controllers/Web/Auth/Me.php b/app/Http/Controllers/Web/Auth/Me.php index e3418b1..a295050 100644 --- a/app/Http/Controllers/Web/Auth/Me.php +++ b/app/Http/Controllers/Web/Auth/Me.php @@ -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; } diff --git a/app/Http/Controllers/Web/Auth/MeController.php b/app/Http/Controllers/Web/Auth/MeController.php index 680cff7..a2c6aa2 100644 --- a/app/Http/Controllers/Web/Auth/MeController.php +++ b/app/Http/Controllers/Web/Auth/MeController.php @@ -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 { - // } } } diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingOrdersController.php b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingOrdersController.php index 1ec3683..aa05544 100644 --- a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingOrdersController.php +++ b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingOrdersController.php @@ -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([ diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php index 9cb92ff..b976e24 100644 --- a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php +++ b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php @@ -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(), ); diff --git a/app/Logic/ReceiptIssuingOrder/CreateManager.php b/app/Logic/ReceiptIssuingOrder/CreateManager.php index 6e45598..c083579 100644 --- a/app/Logic/ReceiptIssuingOrder/CreateManager.php +++ b/app/Logic/ReceiptIssuingOrder/CreateManager.php @@ -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("契約不良"); } diff --git a/app/Models/Ex/LoginUser.php b/app/Models/Ex/LoginUser.php index 5b3c9ea..477f545 100644 --- a/app/Models/Ex/LoginUser.php +++ b/app/Models/Ex/LoginUser.php @@ -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()); } } diff --git a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php index ccc2575..8a00c23 100644 --- a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php +++ b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php @@ -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");