Add ROA price comparison to order detail modal — operators can now see if GoMag prices match Oracle before invoicing. Eliminates the #1 risk of invoicing with wrong prices. Backend: - New get_prices_for_order() in validation_service.py — batch Oracle query with dual-policy routing (sales/production by cont 341/345), PRETURI_CU_TVA handling, kit total calculation - Extend GET /api/sync/order/{orderNumber} with per-item pret_roa and order-level price_check summary - GET /api/dashboard/orders returns price_match=null (lightweight) Frontend: - Modal: price check badge (green/red/grey), "Pret GoMag" + "Pret ROA" columns, match dot per row, mismatch rows highlighted - Dashboard: price dot column (₽) in orders table - Mobile: inline mismatch indicator Cache-bust: shared.js?v=16, dashboard.js?v=28 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
"""E2E: Order detail modal structure and inline mapping."""
|
|
import pytest
|
|
from playwright.sync_api import Page, expect
|
|
|
|
pytestmark = pytest.mark.e2e
|
|
|
|
|
|
def test_order_detail_modal_has_roa_ids(page: Page, app_url: str):
|
|
"""R9: Verify order detail modal contains all ROA ID labels."""
|
|
page.goto(f"{app_url}/logs")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
modal = page.locator("#orderDetailModal")
|
|
expect(modal).to_be_attached()
|
|
|
|
modal_html = modal.inner_html()
|
|
assert "ID Comanda ROA" in modal_html, "Missing 'ID Comanda ROA' label in order detail modal"
|
|
assert "ID Partener" in modal_html, "Missing 'ID Partener' label in order detail modal"
|
|
assert "ID Adr. Facturare" in modal_html, "Missing 'ID Adr. Facturare' label in order detail modal"
|
|
assert "ID Adr. Livrare" in modal_html, "Missing 'ID Adr. Livrare' label in order detail modal"
|
|
|
|
|
|
def test_order_detail_items_table_columns(page: Page, app_url: str):
|
|
"""R9: Verify items table has all required columns."""
|
|
page.goto(f"{app_url}/logs")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
headers = page.locator("#orderDetailModal thead th")
|
|
texts = headers.all_text_contents()
|
|
|
|
# Current columns (may evolve — check dashboard.html for source of truth)
|
|
required_columns = ["SKU", "Produs", "CODMAT", "Cant.", "Pret GoMag", "Pret ROA", "Valoare"]
|
|
for col in required_columns:
|
|
assert col in texts, f"Column '{col}' missing from order detail items table. Found: {texts}"
|
|
|
|
|
|
def test_quick_map_from_order_detail(page: Page, app_url: str):
|
|
"""R9+R11: Verify quick map modal is reachable from order detail context."""
|
|
page.goto(f"{app_url}/logs")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
modal = page.locator("#quickMapModal")
|
|
expect(modal).to_be_attached()
|
|
|
|
expect(page.locator("#qmCodmatLines")).to_be_attached()
|
|
expect(page.locator("#qmPctWarning")).to_be_attached()
|
|
|
|
|
|
def test_dashboard_navigates_to_logs(page: Page, app_url: str):
|
|
"""Verify the sidebar on the dashboard contains a link to the logs page."""
|
|
page.goto(f"{app_url}/")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
logs_link = page.locator(".top-navbar a[href='/logs'], .bottom-nav a[href='/logs']")
|
|
expect(logs_link.first).to_be_visible()
|