*/ public function get(array $condition): Collection { $order = ReceiptIssuingOrder::getBuilder(static::TABLE_ORDER); $table = $order ->joinSub(CustomOrder::getBuilder(), static::TABLE_CUSTOM_ORDER, function (JoinClause $join) { $join->on( $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID]), $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_RECEIPT_ISSUING_ORDER_ID]) ); }) ->leftJoinSub(User::getBuilder(), static::TABLE_HANDLER, function (JoinClause $join) { $join->on( $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_HANDLER_ID]), $this->makeColumnName([static::TABLE_HANDLER, CustomOrder::COL_NAME_ID]) ); }); // -----検索条件 // ID $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID])); // 契約ID $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_CONTRACT_ID])); // 電話番号 $phoneNumber = data_get($condition, static::CONDITION_SMS_PHONE_NUMBER); if ($phoneNumber) { $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), 'like', "%{$phoneNumber}%"); } // 完了確認 $done = data_get($condition, static::CONDITION_DONE); if ($done !== null) { $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), $done); } // ステータス $status = data_get($condition, static::CONDITION_STATUS); if ($status) { $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_NAME]), 'like', "%{$status}%"); } // 受付日時 $orderDateFrom = data_get($condition, static::CONDITION_ORDER_DATE_FROM); if ($orderDateFrom instanceof Carbon) { $orderDateFrom->setTime(0, 0); $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '>=', $orderDateFrom); } $orderDateTo = data_get($condition, static::CONDITION_ORDER_DATE_TO); if ($orderDateTo instanceof Carbon) { $orderDateTo->setTime(0, 0)->addDay(); $table->where($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME]), '<=', $orderDateTo); } // 運営会社 $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE])); $customerName = data_get($condition, static::CONDITION_CUSTOMER_NAME); if ($customerName) { $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_NAME]), 'like', "%{$customerName}%"); } // 駐車場 $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE])); $parkihngName = data_get($condition, static::CONDITION_PARKING_NAME); if ($parkihngName) { $table->where($this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_PARKING_NAME]), 'like', "%{$parkihngName}%"); } // 担当者 $handlerName = data_get($condition, static::CONDITION_HANDLER_NAME); if ($handlerName) { $table->where($this->makeColumnName([static::TABLE_HANDLER, User::COL_NAME_NAME]), 'like', "%{$handlerName}%"); } $table->select($this->columns()); $main = DB::table($table, "main"); // ソート $this->sort($main, $condition); $main->orderBy(static::CONDITION_ID); // リミット $this->limit($main, $condition); return ReceiptIssuingOrderRepositoryData::makeList($main->get()); } private function columns() { $order = static::TABLE_ORDER; $custom = static::TABLE_CUSTOM_ORDER; $handler = static::TABLE_HANDLER; $columns = [ $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY1]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY2]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN_EXPIRES_AT]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_SMS_SEND_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_FIRST_ACCESS_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_DOWNLOAD_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_SEND_SUCCESS]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_SHOP_NAME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_ISSUER]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NAME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_PURPOSE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_INVOICE_NO]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_EMAIL]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_PREF_CODE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ZIP_CODE]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS1]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS2]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS3]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_NAME]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MEMO]), $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_UPDATED_AT]), $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'), $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'), $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'), $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'), $this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'), $this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'), ]; return $columns; } }