領収証発行サービス
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

114 行
4.3KB

  1. <?php
  2. namespace App\Repositories\Custom\HelloTechno;
  3. use App\Models\ReceiptIssuingHTParkingCustomOrder as CustomOrder;
  4. use App\Models\ReceiptIssuingOrder;
  5. use App\Models\User;
  6. use App\Repositories\BaseRepository;
  7. use Illuminate\Database\Query\JoinClause;
  8. use Illuminate\Support\Collection;
  9. use Illuminate\Support\Facades\DB;
  10. class ReceiptIssuingOrderRepository extends BaseRepository
  11. {
  12. const CONDITION_ID = 'id';
  13. const CONDITION_STATUS = 'status';
  14. const CONDITION_CUSTOMER_CODE = 'customer_code';
  15. const CONDITION_PARKING_MANAGEMENT_CODE = 'parking_management_code';
  16. const CONDITION_CUSTOMER_NAME = 'customer_name';
  17. const CONDITION_PARKING_MANAGEMENT_NAME = 'parking_name';
  18. const TABLE_ORDER = "order";
  19. const TABLE_CUSTOM_ORDER = "custom_order";
  20. const TABLE_HANDLER = "handler";
  21. /**
  22. * コレクションを取得する
  23. *
  24. * @param array $condition
  25. * @return Collection<ParkingRepositoryData>
  26. */
  27. public function get(array $condition): Collection
  28. {
  29. $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER);
  30. $table = $order
  31. ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) {
  32. $join->on(
  33. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]),
  34. $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID])
  35. );
  36. })
  37. ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) {
  38. $join->on(
  39. $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]),
  40. $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID])
  41. );
  42. });
  43. // -----検索条件
  44. // 運営会社
  45. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE]));
  46. $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME);
  47. if ($customerName) {
  48. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%");
  49. }
  50. // 駐車場
  51. $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE]));
  52. $parkihngName = data_get($condition, static::CONDITION_PARKING_MANAGEMENT_NAME);
  53. if ($parkihngName) {
  54. $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%");
  55. }
  56. // ステータス
  57. $this->where($table, $condition, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS]));
  58. $table->select($this->columns());
  59. $main = DB::table($table, "main");
  60. // ソート
  61. $this->sort($main, $condition);
  62. $main->orderBy(static::CONDITION_ID);
  63. // リミット
  64. $this->limit($main, $condition);
  65. return ReceiptIssuingOrderRepositoryData::makeList($main->get());
  66. }
  67. private function columns()
  68. {
  69. $order = static::TABLE_ORDER;
  70. $custom = static::TABLE_CUSTOM_ORDER;
  71. $handler = static::TABLE_HANDLER;
  72. $columns = [
  73. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'),
  74. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_STATUS], 'status'),
  75. $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'),
  76. $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'),
  77. $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'),
  78. $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'),
  79. $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'),
  80. $this->makeColumnName([$handler, User::COL_NAME_ID], 'handler_id'),
  81. $this->makeColumnName([$handler, User::COL_NAME_NAME], 'handler_name'),
  82. ];
  83. return $columns;
  84. }
  85. }