icSeasonTicektSeasonTicketLabelCountReleaseLimiterFlg */ 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定期関連情報_備考"; const FIELD_IC_SEASON_TICEKT_SEASON_TICKET_LABEL_COUNT = "IC定期関連情報_ラベル発行回数"; const FIELD_IC_SEASON_TICEKT_SEASON_TICKET_LABEL_COUNT_RELEASE_LIMITER_FLG = "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_SEASON_TICKET_LABEL_COUNT => FieldType::NUMBER, self::FIELD_IC_SEASON_TICEKT_SEASON_TICKET_LABEL_COUNT_RELEASE_LIMITER_FLG => FieldType::CHECK_BOX, ]; 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(); } }