Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

144 lignes
5.0KB

  1. <?php
  2. namespace App\Kintone\Models;
  3. use App\Kintone\Models\DropDown\PaymentPlan\PaymentType;
  4. use App\Kintone\Models\SubTable\PaymentPlan\Deposit;
  5. use Illuminate\Support\Carbon;
  6. use Illuminate\Support\Collection;
  7. /**
  8. * アプリ名 入金予定・結果
  9. * @property int seasonTicketContractRecordNo
  10. * @property string parkingName
  11. * @property int parkingName
  12. * @property int customerCode
  13. * @property string paymentType
  14. * @property string paymentMethod
  15. * @property int targetYear
  16. * @property int targetMonth
  17. * @property int targetTermMonth
  18. * @property Carbon paymentPlanDate
  19. * @property int paymentPlanAmount
  20. * @property Carbon appropriationDate
  21. * @property int appropriationAmount
  22. * @property int remainingAmount
  23. * @property int firstPaymentEntryRecordNo
  24. * @property Collection<int ,Deposit> depositList
  25. * @property string[] partialFee
  26. * @property int icSeasonTicketContractId
  27. */
  28. class PaymentPlan extends KintoneModel
  29. {
  30. const CONFIG_KEY = "KINTONE_APP_PAYMENT_PLAN";
  31. const FIELD_SEASON_TICKET_CONTRACT_RECORD_NO = "contract_record_number";
  32. const FIELD_PARKING_NAME = "parking_name";
  33. const FIELD_CUSTOMER_CODE = "customer_code";
  34. const FIELD_PAYMENT_TYPE = "payment_type";
  35. const FIELD_PAYMENT_METHOD = "payment_method";
  36. const FIELD_TARGET_YEAR = "target_year";
  37. const FIELD_TARGET_MONTH = "target_month";
  38. const FIELD_TARGET_TERM_MONTH = "target_term_month";
  39. const FIELD_PAYMENT_PLAN_DATE = "payment_plan_date";
  40. const FIELD_PAYMENT_PLAN_AMOUNT = "payment_plan_amount";
  41. const FIELD_APPROPRIATION_DATE = "appropriation_date";
  42. const FIELD_APPROPRIATION_AMOUNT = "appropriation_amount";
  43. const FIELD_REMAINING_AMOUNT = "remaining_amount";
  44. const FIELD_FIRST_PAYMENT_ENTRY_RECORD_NO = "first_payment_entry_record_no";
  45. const FIELD_DEPOSIT_LIST = "保証金明細";
  46. const FIELD_DEPOSIT_LIST_NAME = "保証金明細_名称";
  47. const FIELD_DEPOSIT_LIST_AMOUNT = "保証金明細_金額";
  48. const FIELD_PARTIAL_FEE = "定期料金日割り分";
  49. const FIELD_IC_SEASON_TICKET_CONTRACT_ID = "IC定期_契約ID";
  50. protected const FIELDS = [
  51. ...parent::FIELDS,
  52. self::FIELD_SEASON_TICKET_CONTRACT_RECORD_NO => FieldType::NUMBER,
  53. self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT,
  54. self::FIELD_CUSTOMER_CODE => FieldType::NUMBER,
  55. self::FIELD_PAYMENT_TYPE => FieldType::DROP_DOWN,
  56. self::FIELD_PAYMENT_METHOD => FieldType::DROP_DOWN,
  57. self::FIELD_TARGET_YEAR => FieldType::NUMBER,
  58. self::FIELD_TARGET_MONTH => FieldType::NUMBER,
  59. self::FIELD_TARGET_TERM_MONTH => FieldType::NUMBER,
  60. self::FIELD_PAYMENT_PLAN_DATE => FieldType::DATE,
  61. self::FIELD_PAYMENT_PLAN_AMOUNT => FieldType::NUMBER,
  62. self::FIELD_APPROPRIATION_DATE => FieldType::DATE,
  63. self::FIELD_APPROPRIATION_AMOUNT => FieldType::NUMBER,
  64. self::FIELD_REMAINING_AMOUNT => FieldType::NUMBER,
  65. self::FIELD_FIRST_PAYMENT_ENTRY_RECORD_NO => FieldType::NUMBER,
  66. self::FIELD_DEPOSIT_LIST => FieldType::SUBTABLE,
  67. self::FIELD_PARTIAL_FEE => FieldType::CHECK_BOX,
  68. self::FIELD_IC_SEASON_TICKET_CONTRACT_ID => FieldType::NUMBER,
  69. ];
  70. protected const SUB_TABLES = [
  71. self::FIELD_DEPOSIT_LIST => Deposit::class,
  72. ];
  73. protected const FIELD_NAMES = [
  74. ...parent::FIELD_NAMES,
  75. self::FIELD_SEASON_TICKET_CONTRACT_RECORD_NO => 'season_ticekt_contract_record_no',
  76. self::FIELD_PAYMENT_TYPE => 'payment_type',
  77. self::FIELD_PAYMENT_METHOD => 'payment_method',
  78. self::FIELD_PAYMENT_PLAN_DATE => 'payment_plan_date',
  79. self::FIELD_TARGET_YEAR => 'target_year',
  80. self::FIELD_TARGET_MONTH => 'target_month',
  81. ];
  82. protected const RELATIONS = [
  83. SeasonTicketContract::class,
  84. ];
  85. protected function toArrayCustom(): array
  86. {
  87. return [
  88. 'payment_status' => $this->donePayment() ? "支払済み" : "未払い",
  89. 'payment_name' => $this->getViewName(),
  90. ];
  91. }
  92. /**
  93. * 支払い済みか判定
  94. *
  95. * @return boolean
  96. */
  97. public function donePayment(): bool
  98. {
  99. $paymentDate = $this->getDate(self::FIELD_APPROPRIATION_DATE);
  100. $remainingAmount = $this->getNumber(self::FIELD_REMAINING_AMOUNT);
  101. $paymentPlanAmount = $this->getNumber(self::FIELD_PAYMENT_PLAN_AMOUNT);
  102. $paymentAmount = $this->getNumber(self::FIELD_APPROPRIATION_AMOUNT);
  103. return !!$paymentDate && $remainingAmount === 0 && $paymentPlanAmount === $paymentAmount;
  104. }
  105. /**
  106. * 日割り分の請求データか判定
  107. *
  108. * @return boolean
  109. */
  110. public function isPartialFee(): bool
  111. {
  112. $target = $this->partialFee;
  113. if (is_array($target) && !!count($target)) {
  114. return true;
  115. }
  116. return false;
  117. }
  118. private function getViewName(): string
  119. {
  120. if ($this->paymentType === PaymentType::SEASON_TICKET) {
  121. return sprintf("%d年%d月分 定期料金", $this->targetYear, $this->targetMonth);
  122. }
  123. return $this->paymentType;
  124. }
  125. }