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.

139 lignes
3.6KB

  1. <?php
  2. namespace App\Console\Commands\DataPatch;
  3. use App\Console\Commands\BaseCommand;
  4. use App\Http\API\SMBC\Payment\PollResultRecord;
  5. use App\Http\API\SMBC\Payment\SMBC;
  6. use App\Http\API\SMBC\Payment\PaymentStatus;
  7. use App\Kintone\KintoneRecordQueryOperator;
  8. use App\Kintone\Models\DropDown\SmbcPayment\SmbcPaymentStatus;
  9. use App\Kintone\Models\PaymentPlan;
  10. use App\Kintone\Models\SeasonTicketContract;
  11. use App\Kintone\Models\SeasonTicketContractPlan;
  12. use App\Kintone\Models\SmbcPayment;
  13. use App\Models\SmbcPollStatus;
  14. use App\Util\DateUtil;
  15. use App\Util\DBUtil;
  16. use Exception;
  17. use Illuminate\Database\Eloquent\ModelNotFoundException;
  18. use Illuminate\Support\Carbon;
  19. use Illuminate\Support\Collection;
  20. class FillPaymentPlan extends BaseCommand
  21. {
  22. const COMMAND = "data-patch:fill-payment-plan {parkingName}";
  23. /**
  24. * The name and signature of the console command.
  25. *
  26. * @var string
  27. */
  28. protected $signature = self::COMMAND;
  29. /**
  30. * The console command description.
  31. *
  32. * @var string
  33. */
  34. protected $description = '支払予定を完了へデータパッチする';
  35. static public function getCommand()
  36. {
  37. return self::COMMAND;
  38. }
  39. /**
  40. * @var Collection<int, SmbcPayment>
  41. */
  42. private Collection $results;
  43. /**
  44. * Create a new command instance.
  45. *
  46. * @return void
  47. */
  48. public function __construct()
  49. {
  50. parent::__construct();
  51. $this->applications = collect();
  52. $this->results = collect();
  53. }
  54. /**
  55. * Execute the console command.
  56. *
  57. * @return int
  58. */
  59. public function service(): int
  60. {
  61. // プランの取得
  62. $plans = $this->getPlans();
  63. foreach ($plans as $plan) {
  64. // 契約の取得
  65. $contracts = $this->getContracts($plan);
  66. $confirmMessage = sprintf("支払済みにしますか?[%s][%d件]", $plan->planName, $contracts->count());
  67. if (!$this->confirm($confirmMessage)) {
  68. continue;
  69. }
  70. // 支払予定の取得
  71. foreach ($contracts as $contract) {
  72. $payments = $this->getPaymentPlans($contract);
  73. // 支払済みへ変更
  74. foreach ($payments as $payment) {
  75. $payment->remainingAmount = 0;
  76. $payment->appropriationAmount = $payment->paymentPlanAmount;
  77. $payment->paymentPlanDate = DateUtil::now();
  78. $payment->save();
  79. }
  80. }
  81. }
  82. return self::RESULTCODE_SUCCESS;
  83. }
  84. private function getPlans()
  85. {
  86. $access = SeasonTicketContractPlan::getAccess();
  87. $query = SeasonTicketContractPlan::getQuery()->where(SeasonTicketContractPlan::FIELD_PARKING_NAME, $this->argument("parkingName"));
  88. $plans = $access->all($query);
  89. return $plans;
  90. }
  91. private function getContracts(SeasonTicketContractPlan $plan)
  92. {
  93. $access = SeasonTicketContract::getAccess();
  94. $query = SeasonTicketContract::getQuery()->where(SeasonTicketContract::FIELD_PLAN_NAME, $plan->planName);
  95. $contracts = $access->all($query);
  96. return $contracts;
  97. }
  98. private function getPaymentPlans(SeasonTicketContract $contract)
  99. {
  100. $access = PaymentPlan::getAccess();
  101. $query = PaymentPlan::getQuery()
  102. ->where(PaymentPlan::FIELD_SEASON_TICKET_CONTRACT_RECORD_NO, $contract->getRecordId())
  103. ->where(PaymentPlan::FIELD_REMAINING_AMOUNT, 0, KintoneRecordQueryOperator::NEQ);
  104. $contracts = $access->all($query);
  105. return $contracts;
  106. }
  107. }