depositList * @property string[] partialFee */ class PaymentPlan extends KintoneModel { const CONFIG_KEY = "KINTONE_APP_PAYMENT_PLAN"; const FIELD_SEASON_TICKET_CONTRACT_RECORD_NO = "contract_record_number"; const FIELD_PARKING_NAME = "parking_name"; const FIELD_CUSTOMER_CODE = "customer_code"; const FIELD_PAYMENT_TYPE = "payment_type"; const FIELD_PAYMENT_METHOD = "payment_method"; const FIELD_TARGET_YEAR = "target_year"; const FIELD_TARGET_MONTH = "target_month"; const FIELD_TARGET_TERM_MONTH = "target_term_month"; const FIELD_PAYMENT_PLAN_DATE = "payment_plan_date"; const FIELD_PAYMENT_PLAN_AMOUNT = "payment_plan_amount"; const FIELD_APPROPRIATION_DATE = "appropriation_date"; const FIELD_APPROPRIATION_AMOUNT = "appropriation_amount"; const FIELD_REMAINING_AMOUNT = "remaining_amount"; const FIELD_FIRST_PAYMENT_ENTRY_RECORD_NO = "first_payment_entry_record_no"; const FIELD_DEPOSIT_LIST = "保証金明細"; const FIELD_DEPOSIT_LIST_NAME = "保証金明細_名称"; const FIELD_DEPOSIT_LIST_AMOUNT = "保証金明細_金額"; const FIELD_PARTIAL_FEE = "定期料金日割り分"; protected const FIELDS = [ ...parent::FIELDS, self::FIELD_SEASON_TICKET_CONTRACT_RECORD_NO => 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, self::FIELD_FIRST_PAYMENT_ENTRY_RECORD_NO => FieldType::NUMBER, self::FIELD_DEPOSIT_LIST => FieldType::SUBTABLE, self::FIELD_PARTIAL_FEE => FieldType::CHECK_BOX, ]; protected const SUB_TABLES = [ self::FIELD_DEPOSIT_LIST => Deposit::class, ]; 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(), ]; } /** * 支払い済みか判定 * * @return boolean */ public function donePayment(): bool { $paymentDate = $this->getDate(self::FIELD_APPROPRIATION_DATE); $remainingAmount = $this->getNumber(self::FIELD_REMAINING_AMOUNT); $paymentPlanAmount = $this->getNumber(self::FIELD_PAYMENT_PLAN_AMOUNT); $paymentAmount = $this->getNumber(self::FIELD_APPROPRIATION_AMOUNT); return !!$paymentDate && $remainingAmount === 0 && $paymentPlanAmount === $paymentAmount; } /** * 日割り分の請求データか判定 * * @return boolean */ public function isPartialFee(): bool { $target = $this->partialFee; if (is_array($target) && !!count($target)) { return true; } return false; } private function getViewName(): string { if ($this->paymentType === PaymentType::SEASON_TICKET) { return sprintf("%d年%d月分 定期料金", $this->targetYear, $this->targetMonth); } return $this->paymentType; } }