FieldType::NUMBER, self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT, self::FIELD_CUSTOMER_CODE => FieldType::NUMBER, self::FIELD_PAYMENT_TYPE => FieldType::DROP_DOWN, self::FIELD_PAYMENT_METHOD => FieldType::DROP_DOWN, self::FIELD_TARGET_YEAR => FieldType::NUMBER, self::FIELD_TARGET_MONTH => FieldType::NUMBER, self::FIELD_TARGET_TERM_MONTH => FieldType::NUMBER, self::FIELD_PAYMENT_PLAN_DATE => FieldType::DATE, self::FIELD_PAYMENT_PLAN_AMOUNT => FieldType::NUMBER, self::FIELD_APPROPRIATION_DATE => FieldType::DATE, self::FIELD_APPROPRIATION_AMOUNT => FieldType::NUMBER, self::FIELD_REMAINING_AMOUNT => FieldType::NUMBER, ]; protected const FIELD_NAMES = [ ...parent::FIELD_NAMES, self::FIELD_SEASON_TICKET_CONTRACT_RECORD_NO => 'season_ticekt_contract_record_no', self::FIELD_PAYMENT_TYPE => 'payment_type', self::FIELD_PAYMENT_METHOD => 'payment_method', self::FIELD_PAYMENT_PLAN_DATE => 'payment_plan_date', self::FIELD_TARGET_YEAR => 'target_year', self::FIELD_TARGET_MONTH => 'target_month', ]; protected function toArrayCustom(): array { return [ 'payment_status' => $this->donePayment() ? "支払済み" : "未払い", 'payment_name' => $this->getViewName(), ]; } public function donePayment(): bool { $paymentDate = $this->getDate(self::FIELD_APPROPRIATION_DATE); $remainingAmount = $this->getNumber(self::FIELD_REMAINING_AMOUNT); return !!$paymentDate && $remainingAmount === 0; } private function getViewName(): string { if ($this->paymentType === PaymentType::SEASON_TICKET) { return sprintf("%d年%d月分 定期料金", $this->targetYear, $this->targetMonth); } return $this->paymentType; } }