|
- <?php
-
- namespace App\Kintone\Models;
-
- use App\Kintone\Models\DropDown\PaymentPlan\PaymentType;
- use App\Kintone\Models\SubTable\PaymentPlan\Deposit;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Collection;
-
- /**
- * アプリ名 入金予定・結果
- * @property int seasonTicketContractRecordNo
- * @property string parkingName
- * @property int parkingName
- * @property int customerCode
- * @property string paymentType
- * @property string paymentMethod
- * @property int targetYear
- * @property int targetMonth
- * @property int targetTermMonth
- * @property Carbon paymentPlanDate
- * @property int paymentPlanAmount
- * @property Carbon appropriationDate
- * @property int appropriationAmount
- * @property int remainingAmount
- * @property int firstPaymentEntryRecordNo
- * @property Collection<int ,Deposit> depositList
- * @property string[] partialFee
- * @property int icSeasonTicketContractId
- */
- 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 = "定期料金日割り分";
- const FIELD_IC_SEASON_TICKET_CONTRACT_ID = "IC定期_契約ID";
-
- 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,
- self::FIELD_IC_SEASON_TICKET_CONTRACT_ID => FieldType::NUMBER,
- ];
-
- 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 const RELATIONS = [
- SeasonTicketContract::class,
- ];
-
- 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;
- }
- }
|