diff --git a/e2e/tests/admin-order.spec.ts b/e2e/tests/admin-order.spec.ts index 8b7745dca02..db23feaeb31 100644 --- a/e2e/tests/admin-order.spec.ts +++ b/e2e/tests/admin-order.spec.ts @@ -303,56 +303,6 @@ test.describe('Admin Order (EA04)', () => { expect(page.url()).toMatch(/\/admin\/order\/\d+\/edit$/); }); - test('order_受注削除 (EA0401-UC08-T01)', async ({ page }) => { - // First create an order to delete, so we don't affect fixture data - await createOrderViaUI(page, '削除テスト', '太郎'); - - // Go to order list and search for it - await goOrderList(page); - await searchOrder(page, '削除テスト'); - await expect(page.locator(searchResultMsg)).not.toContainText('検索結果:0件が該当しました'); - - // Get the order number for the first row - const orderNum = await page.locator('#search_result tbody tr:first-child a.action-edit').textContent(); - - // Select the first order - await page.locator('#search_result > tbody > tr:nth-child(1) > td > input[type=checkbox]').check(); - await page.waitForTimeout(500); - - // The bulk wrapper should become visible -- but the delete button is in bulkDeleteModal - // Open the delete modal via JS (there's no visible delete button in the bulk wrapper for orders, - // but the modal exists) - // Actually let's find the delete opener - const deleteOpener = page.locator('[data-bs-target="#bulkDeleteModal"]'); - const openerCount = await deleteOpener.count(); - - if (openerCount > 0) { - await deleteOpener.click(); - } else { - // If there's no opener button, trigger the modal directly - await page.evaluate(() => { - const modal = document.querySelector('#bulkDeleteModal') as HTMLElement; - if (modal) { - // @ts-ignore - const bsModal = new bootstrap.Modal(modal); - bsModal.show(); - } - }); - } - await page.waitForTimeout(500); - - // Click confirm delete - await page.locator('#btn_bulk_delete').click(); - await page.waitForLoadState('load'); - await page.waitForTimeout(2000); - - // Verify the deleted order is no longer at the top - await goOrderList(page); - await searchOrder(page, '削除テスト'); - // After deletion, we expect 0 results for this search - await expect(page.locator(searchResultMsg)).toContainText('検索結果:0件が該当しました'); - }); - test('order_受注メール通知 (EA0402-UC01-T01)', async ({ page }) => { // Go to order list and search await goOrderList(page); diff --git a/src/Eccube/Controller/Admin/Order/OrderController.php b/src/Eccube/Controller/Admin/Order/OrderController.php index efdfef12728..bb2b1af2b6b 100644 --- a/src/Eccube/Controller/Admin/Order/OrderController.php +++ b/src/Eccube/Controller/Admin/Order/OrderController.php @@ -13,7 +13,6 @@ namespace Eccube\Controller\Admin\Order; -use Eccube\Common\Constant; use Eccube\Controller\AbstractController; use Eccube\Entity\ExportCsvRow; use Eccube\Entity\Master\CsvType; @@ -247,27 +246,6 @@ public function index(Request $request, ?int $page_no = null): array ]; } - #[Route(path: '/%eccube_admin_route%/order/bulk_delete', name: 'admin_order_bulk_delete', methods: ['POST'])] - public function bulkDelete(Request $request): RedirectResponse - { - $this->isTokenValid(); - $ids = $request->get('ids'); - foreach ($ids as $order_id) { - $Order = $this->orderRepository - ->find($order_id); - if ($Order) { - $this->entityManager->remove($Order); - log_info('受注削除', [$Order->getId()]); - } - } - - $this->entityManager->flush(); - - $this->addSuccess('admin.common.delete_complete', 'admin'); - - return $this->redirectToRoute('admin_order', ['resume' => Constant::ENABLED]); - } - /** * 受注CSVの出力. */ diff --git a/src/Eccube/Resource/locale/messages.en.yaml b/src/Eccube/Resource/locale/messages.en.yaml index 0954041eeb7..ac535c501c4 100644 --- a/src/Eccube/Resource/locale/messages.en.yaml +++ b/src/Eccube/Resource/locale/messages.en.yaml @@ -976,8 +976,6 @@ admin.order.shipping_status: Shipping Status admin.order.delivery: Delivery to admin.order.not_payment: Unpaid admin.order.unshipped: Unshipped -admin.order.delete__confirm_title: Deleting Order Info -admin.order.delete__confirm_message: Are you sure to delete the order information? admin.order.delete_item__confirm_message: "The item will be deleted from the order. Are you sure to delete %name%?" admin.order.change_payment_method_message: If the payment charge changes, please update it manually. admin.order.non_member: Non-Member diff --git a/src/Eccube/Resource/locale/messages.ja.yaml b/src/Eccube/Resource/locale/messages.ja.yaml index 3d890deaf88..41c4bb412d0 100644 --- a/src/Eccube/Resource/locale/messages.ja.yaml +++ b/src/Eccube/Resource/locale/messages.ja.yaml @@ -975,8 +975,6 @@ admin.order.shipping_status: 出荷状況 admin.order.delivery: お届け先 admin.order.not_payment: 未入金 admin.order.unshipped: 未出荷 -admin.order.delete__confirm_title: 注文情報を削除します -admin.order.delete__confirm_message: 注文情報を削除してよろしいですか? admin.order.delete_item__confirm_message: "明細は注文から削除されます。「%name%」を削除してよろしいですか?" admin.order.change_payment_method_message: お支払方法の変更に伴う手数料の変更は手動にてお願いします admin.order.non_member: 非会員 diff --git a/src/Eccube/Resource/template/admin/Order/index.twig b/src/Eccube/Resource/template/admin/Order/index.twig index 9fa6274fddf..95d55b08ff4 100644 --- a/src/Eccube/Resource/template/admin/Order/index.twig +++ b/src/Eccube/Resource/template/admin/Order/index.twig @@ -35,12 +35,6 @@ file that was distributed with this source code. toggleBtnBulk('input[id^="check_"]', '.btn-bulk-wrapper'); }); - $('#btn_bulk_delete').on('click', function(event) { - event.preventDefault(); - $('#form_bulk').attr('action', "{{ url('admin_order_bulk_delete') }}").submit(); - return false; - }); - // PDF出力(複数) $('#bulkExportPdf').on('click', function(event) { window.open('', 'newwin', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=700, height=700'); @@ -402,7 +396,6 @@ file that was distributed with this source code. {{ 'admin.order.send_mail'|trans }} - {# TODO 削除処理は将来バージョンで対応 #}
@@ -649,29 +642,6 @@ file that was distributed with this source code.
- - - diff --git a/tests/Eccube/Tests/Web/Admin/Order/OrderControllerTest.php b/tests/Eccube/Tests/Web/Admin/Order/OrderControllerTest.php index 58a7a5bdcb7..e9330fd748d 100644 --- a/tests/Eccube/Tests/Web/Admin/Order/OrderControllerTest.php +++ b/tests/Eccube/Tests/Web/Admin/Order/OrderControllerTest.php @@ -236,20 +236,32 @@ public function testIndexWithNext() $this->verify(); } - public function testBulkDelete() + /** + * 受注の一括削除は、出荷の ID を受注の ID として扱い別の受注を削除していたため撤去した. + * + * @see https://github.com/EC-CUBE/ec-cube/issues/7208 + */ + public function testBulkDeleteIsNotAvailable(): void { $Customer = $this->createCustomer(); - $NewOrders = $this->createOrders(array_fill(0, 5, $Customer)); - $orderIds = array_map(static fn ($o) => $o->getId(), $NewOrders); + $NewOrders = $this->createOrders(array_fill(0, 3, $Customer)); + $orderIds = array_map(static fn (Order $Order) => $Order->getId(), $NewOrders); + $shippingIds = array_map(static fn (Order $Order) => $Order->getShippings()->first()->getId(), $NewOrders); $this->client->request( Request::METHOD_POST, - $this->generateUrl('admin_order_bulk_delete'), - ['ids' => $orderIds] + '/'.static::getContainer()->getParameter('eccube_admin_route').'/order/bulk_delete', + [ + 'ids' => array_merge($orderIds, $shippingIds), + Constant::TOKEN_NAME => 'dummy', + ] ); + $this->assertSame(Response::HTTP_NOT_FOUND, $this->client->getResponse()->getStatusCode(), (string) $this->client->getResponse()->getContent()); + + $this->entityManager->clear(); $Orders = $this->entityManager->getRepository(Order::class)->findBy(['id' => $orderIds]); - $this->assertCount(0, $Orders); + $this->assertCount(3, $Orders); } public function testExportOrder()