領収証発行サービス
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.8KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Custom\HelloTechno;
  3. use App\Codes\UserRole;
  4. use App\Exceptions\AppCommonException;
  5. use App\Features\LoginUser;
  6. use App\Http\Controllers\Web\IParam;
  7. use App\Http\Controllers\Web\WebController;
  8. use App\Logic\ReceiptIssuingOrder\Custom\HelloTechno\PDFDownLoadManagerHelloTechno;
  9. use App\Logic\ReceiptIssuingOrder\UpdateManager;
  10. use App\Models\ColumnName;
  11. use App\Models\ReceiptIssuingOrder;
  12. use App\Repositories\Custom\HelloTechno\ReceiptIssuingOrderRepository;
  13. use App\Util\DateUtil;
  14. use Illuminate\Database\Eloquent\Collection;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Http\Response;
  17. use Illuminate\Support\Arr;
  18. class DownloadLettersController extends HelloTechnoController
  19. {
  20. use LoginUser;
  21. public function name(): string
  22. {
  23. return "領収証PDFダウンロード(複数)";
  24. }
  25. public function description(): string
  26. {
  27. return "領収証PDFダウンロードする(複数)";
  28. }
  29. public function __construct(
  30. protected DownloadLettersParam $param,
  31. private ReceiptIssuingOrderRepository $repository,
  32. private PDFDownLoadManagerHelloTechno $manager
  33. ) {
  34. parent::__construct();
  35. $this->roleAllow(UserRole::NORMAL_ADMIN);
  36. }
  37. protected function getParam(): IParam
  38. {
  39. return $this->param;
  40. }
  41. protected function run(Request $request): Response
  42. {
  43. $param = $this->param;
  44. $a = $param->toArray();
  45. try {
  46. $this->transaction->beginTransaction();
  47. $targets = $this->repository->get(
  48. [
  49. ...$param->toArray(),
  50. ReceiptIssuingOrderRepository::CONDITION_CONTRACT_ID => $this->loginUser()->getCurrentContractId(),
  51. ReceiptIssuingOrderRepository::CONDITION_IS_CONFIRMED => true,
  52. ReceiptIssuingOrderRepository::CONDITION_HAS_MAILORDER => true,
  53. ]
  54. );
  55. $models = ReceiptIssuingOrder::findMany(Arr::pluck($targets, ReceiptIssuingOrder::COL_NAME_ID));
  56. $documents = $this->manager->initForDownloadLetters()->downlaodLetters($models);
  57. $this->updatePostDate($models);
  58. $this->transaction->commit();
  59. } catch (Exception $e) {
  60. $this->transaction->rollBack();
  61. throw $e;
  62. }
  63. return $documents;
  64. }
  65. private function updatePostDate(Collection $models)
  66. {
  67. foreach ($models as $order) {
  68. $manager = UpdateManager::instance();
  69. $messages = $manager->initById($order->id)
  70. ->mailPosted(DateUtil::now())
  71. ->update();
  72. if (count($messages) !== 0) {
  73. throw new AppCommonException(Arr::first($messages));
  74. }
  75. }
  76. }
  77. }