|
- <?php
-
- namespace App\Kintone\Models;
-
- use App\Kintone\Models\DropDown\SeasonTicketContractPlan\VehicleType;
- use App\Util\DateUtil;
- use Illuminate\Support\Carbon;
-
- /**
- * アプリ名 車室情報管理
- * @property string customerCode
- * @property string seasonTicketSeqNo
- * @property string parkingName
- * @property string roomNo
- * @property string planName
- * @property string vehicleNo
- * @property string registerNo
- * @property ?Carbon contractStartDate
- * @property ?Carbon contractEndDate
- * @property ?int icSeasonTicektContractId
- * @property ?string icSeasonTicektParkingManagementCode
- * @property ?int icSeasonTicektSeasonTicketSeqNo
- * @property ?string icSeasonTicektVehicleTypeName
- * @property ?string icSeasonTicektParkingUseTypeName
- * @property ?string icSeasonTicektContractorTypeName
- * @property ?Carbon icSeasonTicektStartDate
- * @property ?Carbon icSeasonTicektEndDate
- * @property ?string icSeasonTicektPositionMemo
- * @property ?string icSeasonTicektMemo
- */
- class SeasonTicketContract extends KintoneModel
- {
- const CONFIG_KEY = "KINTONE_APP_SEASON_TICKET_CONTRACT";
-
- const FIELD_CUSTOMER_CODE = "顧客コード";
- const FIELD_PARKING_NAME = "駐車場名";
- const FIELD_ROOM_NO = "車室番号";
- const FIELD_SEASON_TICKET_SEQ_NO = "定期券番号_0";
- const FIELD_VEHICLE_NO = "車両番号";
- const FIELD_REGISTER_NO = "防犯登録番号";
- const FIELD_CONTRACT_START_DATE = "契約日";
- const FIELD_CONTRACT_END_DATE = "解約日";
- const FIELD_CONTRACT_AMOUNT = "契約金額";
- const FIELD_PLAN_NAME = "契約駐車場_0";
-
- const FIELD_STUDENT_LICENSE_IMAGES = "学生証画像";
- const FIELD_OTHER_LICENSE_IMAGES = "障がい者手帳画像";
- const FIELD_STUDENT_LICENSE_IMAGES_UPLOAD_DATETIME = "学生証画像更新日時";
- const FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME = "障がい者手帳画像更新日時";
- const FIELD_STUDENT_LICENSE_EXPIRES_DATE = "学生証有効期限";
- const FIELD_OTHER_LICENSE_EXPIRES_DATE = "障がい者手帳有効期限";
-
- const FIELD_IC_SEASON_TICEKT_CONTRACT_ID = "IC定期関連情報_契約ID";
- const FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE = "IC定期関連情報_駐車場管理コード";
- const FIELD_IC_SEASON_TICEKT_SEASON_TICKET_SEQ_NO = "IC定期関連情報_定期券番号";
- const FIELD_IC_SEASON_TICEKT_VEHICLE_TYPE_NAME = "IC定期関連情報_車種";
- const FIELD_IC_SEASON_TICEKT_PARKING_USE_TYPE_NAME = "IC定期関連情報_駐車場利用方法";
- const FIELD_IC_SEASON_TICEKT_CONTRACTOR_TYPE_NAME = "IC定期関連情報_契約者種類";
- const FIELD_IC_SEASON_TICEKT_START_DATE = "IC定期関連情報_有効期限開始";
- const FIELD_IC_SEASON_TICEKT_END_DATE = "IC定期関連情報_有効期限終了";
- const FIELD_IC_SEASON_TICEKT_POSITION_MEMO = "IC定期関連情報_駐車位置情報";
- const FIELD_IC_SEASON_TICEKT_MEMO = "IC定期関連情報_備考";
-
- protected const FIELDS = [
- ...parent::FIELDS,
- self::FIELD_CUSTOMER_CODE => FieldType::NUMBER,
- self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_ROOM_NO => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_SEASON_TICKET_SEQ_NO => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_VEHICLE_NO => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_REGISTER_NO => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_CONTRACT_START_DATE => FieldType::DATE,
- self::FIELD_CONTRACT_END_DATE => FieldType::DATE,
- self::FIELD_CONTRACT_AMOUNT => FieldType::NUMBER,
- self::FIELD_PLAN_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_STUDENT_LICENSE_IMAGES => FieldType::FILE,
- self::FIELD_OTHER_LICENSE_IMAGES => FieldType::FILE,
- self::FIELD_STUDENT_LICENSE_IMAGES_UPLOAD_DATETIME => FieldType::DATETIME,
- self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => FieldType::DATETIME,
- self::FIELD_STUDENT_LICENSE_EXPIRES_DATE => FieldType::DATE,
- self::FIELD_OTHER_LICENSE_EXPIRES_DATE => FieldType::DATE,
- self::FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_IC_SEASON_TICEKT_CONTRACT_ID => FieldType::NUMBER,
- self::FIELD_IC_SEASON_TICEKT_SEASON_TICKET_SEQ_NO => FieldType::NUMBER,
- self::FIELD_IC_SEASON_TICEKT_VEHICLE_TYPE_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_IC_SEASON_TICEKT_PARKING_USE_TYPE_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_IC_SEASON_TICEKT_CONTRACTOR_TYPE_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_IC_SEASON_TICEKT_START_DATE => FieldType::DATE,
- self::FIELD_IC_SEASON_TICEKT_END_DATE => FieldType::DATE,
- self::FIELD_IC_SEASON_TICEKT_POSITION_MEMO => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_IC_SEASON_TICEKT_MEMO => FieldType::MULTI_LINE_TEXT,
- ];
-
- protected const FIELD_NAMES = [
- ...parent::FIELD_NAMES,
- self::FIELD_SEASON_TICKET_SEQ_NO => 'season_ticekt_contract_record_no',
- self::FIELD_PARKING_NAME => 'parking_name',
- self::FIELD_ROOM_NO => 'room_no',
- self::FIELD_VEHICLE_NO => 'vehicle_no',
- self::FIELD_REGISTER_NO => 'register_no',
- self::FIELD_CONTRACT_START_DATE => 'contract_start_date',
- self::FIELD_CONTRACT_END_DATE => 'contract_end_date',
- self::FIELD_CONTRACT_AMOUNT => 'contract_amount',
- self::FIELD_STUDENT_LICENSE_IMAGES_UPLOAD_DATETIME => 'student_license_images_upload_datetime',
- self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => 'other_license_images_upload_datetime',
- ];
-
- private ?SeasonTicketContractPlan $plan = null;
- private ?Parking $parking = null;
- private ?Customer $customer = null;
-
- protected function toArrayCustom(): array
- {
- return [
- 'can_some_apply' => $this->canSomeApply(),
- 'can_parking_certificate_apply' => $this->canParkingCertificateApply(),
- 'can_change_plan_apply' => $this->canChangePlanApply(),
- 'is_terminated' => $this->isTerminated(),
- 'is_ic_season_ticket' => $this->isIcSeasonTicket(),
- ];
- }
-
- public function getParking(): Parking
- {
- if ($this->parking === null) {
- $this->parking = Parking::findByParkingName($this->parkingName);
- }
- return $this->parking;
- }
-
- public function getCustomer(): Customer
- {
- if ($this->customer === null) {
- $this->customer = Customer::findByCustomerCode($this->customerCode);
- }
- return $this->customer;
- }
-
- public function getPlan(): SeasonTicketContractPlan
- {
- if ($this->plan === null) {
- $this->plan = SeasonTicketContractPlan::findByName($this->planName);
- }
- return $this->plan;
- }
-
- /**
- * 各種申請を行うことができるか判定する
- *
- * @return boolean
- */
- public function canSomeApply(): bool
- {
- return !$this->isTerminated();
- }
-
- public function isTerminated(): bool
- {
- return $this->contractEndDate instanceof Carbon ? $this->contractEndDate <= DateUtil::now() : false;
- }
- public function isIcSeasonTicket(): bool
- {
- return !!$this->icSeasonTicektContractId;
- }
-
- public function canParkingCertificateApply(): bool
- {
- return !in_array($this->getPlan()->vehicleType, [
- VehicleType::V5_自転車,
- VehicleType::V6_原付,
- VehicleType::V7_バイク,
- VehicleType::V8_小型バイク,
- VehicleType::V9_中型バイク,
- VehicleType::V10_大型バイク,
- VehicleType::V11_小型中型バイク,
- VehicleType::V12_中型大型バイク,
- VehicleType::V13_ナイトカード,
- ]);
- }
-
- public function canChangePlanApply(): bool
- {
- return $this->getPlan()->canChangePlanNameList->isNotEmpty();
- }
- }
|