update
This commit is contained in:
parent
cc636cd097
commit
1d82024a58
18
Dockerfile
18
Dockerfile
@ -3,19 +3,31 @@ FROM python:3.11-slim
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Install system dependencies
|
# Install system dependencies (cached unless this changes)
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
curl \
|
curl \
|
||||||
|
gcc \
|
||||||
|
g++ \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Upgrade pip and install build tools first (cached)
|
||||||
|
RUN pip install --upgrade pip setuptools wheel
|
||||||
|
|
||||||
# Copy requirements first for better caching
|
# Copy requirements first for better caching
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
|
|
||||||
# Install Python dependencies
|
# Install Python dependencies
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
# Remove --no-cache-dir to use pip's cache (much faster rebuilds)
|
||||||
|
# This layer will be cached unless requirements.txt changes
|
||||||
|
RUN pip install --upgrade pip && \
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
# Copy application files
|
# Copy application files
|
||||||
COPY . .
|
# Docker automatically detects file changes via content hash
|
||||||
|
# If any .py file changes, only this layer and after rebuild (apt-get & pip stay cached!)
|
||||||
|
COPY *.py ./
|
||||||
|
COPY *.yaml* ./
|
||||||
|
COPY *.md ./
|
||||||
|
|
||||||
# Create directories for reports and output
|
# Create directories for reports and output
|
||||||
RUN mkdir -p /app/reports /app/output
|
RUN mkdir -p /app/reports /app/output
|
||||||
|
|||||||
@ -81,6 +81,7 @@ def create_app(config_path: Optional[str] = None):
|
|||||||
try:
|
try:
|
||||||
request_data = request.json or {}
|
request_data = request.json or {}
|
||||||
download_from_sp = request_data.get('download_from_sharepoint', False)
|
download_from_sp = request_data.get('download_from_sharepoint', False)
|
||||||
|
downloaded_files = [] # Initialize here for scope
|
||||||
|
|
||||||
# Download from SharePoint if requested
|
# Download from SharePoint if requested
|
||||||
if download_from_sp:
|
if download_from_sp:
|
||||||
@ -105,9 +106,10 @@ def create_app(config_path: Optional[str] = None):
|
|||||||
file_pattern=sp_config.get('file_pattern'),
|
file_pattern=sp_config.get('file_pattern'),
|
||||||
overwrite=sp_config.get('overwrite', True)
|
overwrite=sp_config.get('overwrite', True)
|
||||||
)
|
)
|
||||||
logger.info(f"Downloaded {len(downloaded)} file(s) from SharePoint")
|
downloaded_files = downloaded if downloaded else []
|
||||||
|
logger.info(f"Downloaded {len(downloaded_files)} file(s) from SharePoint: {downloaded_files}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to download from SharePoint: {e}")
|
logger.error(f"Failed to download from SharePoint: {e}", exc_info=True)
|
||||||
return jsonify({
|
return jsonify({
|
||||||
'error': f'SharePoint download failed: {str(e)}'
|
'error': f'SharePoint download failed: {str(e)}'
|
||||||
}), 500
|
}), 500
|
||||||
@ -131,7 +133,9 @@ def create_app(config_path: Optional[str] = None):
|
|||||||
'message': 'Report generated successfully',
|
'message': 'Report generated successfully',
|
||||||
'output_file': output_file,
|
'output_file': output_file,
|
||||||
'summary': report_data.get('summary', {}),
|
'summary': report_data.get('summary', {}),
|
||||||
'vendors_count': len(report_data.get('vendors', []))
|
'vendors_count': len(report_data.get('vendors', [])),
|
||||||
|
'downloaded_files': len(downloaded_files) if download_from_sp else 0,
|
||||||
|
'downloaded_file_names': [Path(f).name for f in downloaded_files] if download_from_sp else []
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
return jsonify({
|
return jsonify({
|
||||||
|
|||||||
@ -61,6 +61,11 @@ def get_priority_badge_class(priority: Optional[str]) -> str:
|
|||||||
return "badge-secondary"
|
return "badge-secondary"
|
||||||
|
|
||||||
|
|
||||||
|
def escape_js_string(s: str) -> str:
|
||||||
|
"""Escape a string for use in JavaScript double-quoted strings."""
|
||||||
|
return s.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r')
|
||||||
|
|
||||||
|
|
||||||
def generate_html_report(json_path: str, output_path: Optional[str] = None) -> str:
|
def generate_html_report(json_path: str, output_path: Optional[str] = None) -> str:
|
||||||
"""
|
"""
|
||||||
Generate HTML report from JSON report file.
|
Generate HTML report from JSON report file.
|
||||||
@ -786,7 +791,7 @@ def generate_html_content(report_data: Dict) -> str:
|
|||||||
<div class="tabs-container">
|
<div class="tabs-container">
|
||||||
<div class="tabs" id="vendor-tabs">
|
<div class="tabs" id="vendor-tabs">
|
||||||
<button class="tab active" onclick="switchVendorTab('all')" data-vendor="all">All Vendors</button>
|
<button class="tab active" onclick="switchVendorTab('all')" data-vendor="all">All Vendors</button>
|
||||||
{''.join([f'<button class="tab" onclick="switchVendorTab(\'{vn}\')" data-vendor="{vn}">{vn}</button>' for vn in vendor_names])}
|
{''.join(['<button class="tab" onclick="switchVendorTab(' + "'" + escape_js_string(vn) + "'" + ')" data-vendor="' + vn + '">' + vn + '</button>' for vn in vendor_names])}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -1276,13 +1281,13 @@ def generate_vendor_section(vendor: Dict) -> str:
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, '{vendor_name}')" data-status="all">All ({total_items})</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="all">All ({total_items})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="updates_24h">Yesterday's Updates ({len(updates_24h.get('added', [])) + len(updates_24h.get('closed', [])) + len(updates_24h.get('changed_to_monitor', []))})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="updates_24h">Yesterday's Updates ({len(updates_24h.get('added', [])) + len(updates_24h.get('closed', [])) + len(updates_24h.get('changed_to_monitor', []))})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="oldest_unaddressed">Oldest Unaddressed ({len(oldest_unaddressed)})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="oldest_unaddressed">Oldest Unaddressed ({len(oldest_unaddressed)})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="closed">Closed ({closed_count})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="closed">Closed ({closed_count})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="monitor">Monitor ({monitor_count})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="monitor">Monitor ({monitor_count})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="open">Open ({open_count})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="open">Open ({open_count})</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, '{vendor_name}')" data-status="incomplete">Incomplete ({incomplete_count})</button>
|
<button class="status-tab" onclick="switchStatusTab(this, '" + escape_js_string(vendor_name) + "')" data-status="incomplete">Incomplete ({incomplete_count})</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="{vendor_name}">
|
<div class="status-tab-content active" data-status="all" data-vendor="{vendor_name}">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
PREPROCESSED EXCEL DATA
|
PREPROCESSED EXCEL DATA
|
||||||
================================================================================
|
================================================================================
|
||||||
Current Date (Baltimore/Eastern): 2025-11-06 11:37:45 EST
|
Current Date (Baltimore/Eastern): 2025-11-06 16:50:13 EST
|
||||||
Total Items: 162
|
Total Items: 162
|
||||||
|
|
||||||
VENDOR: Amazon
|
VENDOR: Amazon
|
||||||
|
|||||||
@ -587,7 +587,7 @@
|
|||||||
<header>
|
<header>
|
||||||
<h1>Vendor Punchlist Report</h1>
|
<h1>Vendor Punchlist Report</h1>
|
||||||
<div class="meta">
|
<div class="meta">
|
||||||
Generated: 2025-11-06 20:37:46 |
|
Generated: 2025-11-07 01:50:13 |
|
||||||
Total Vendors: 16 |
|
Total Vendors: 16 |
|
||||||
Total Items: 162
|
Total Items: 162
|
||||||
</div>
|
</div>
|
||||||
@ -673,7 +673,7 @@
|
|||||||
<div class="tabs-container">
|
<div class="tabs-container">
|
||||||
<div class="tabs" id="vendor-tabs">
|
<div class="tabs" id="vendor-tabs">
|
||||||
<button class="tab active" onclick="switchVendorTab('all')" data-vendor="all">All Vendors</button>
|
<button class="tab active" onclick="switchVendorTab('all')" data-vendor="all">All Vendors</button>
|
||||||
<button class="tab" onclick="switchVendorTab('Amazon')" data-vendor="Amazon">Amazon</button><button class="tab" onclick="switchVendorTab('Autstand')" data-vendor="Autstand">Autstand</button><button class="tab" onclick="switchVendorTab('Autstand/Beumer')" data-vendor="Autstand/Beumer">Autstand/Beumer</button><button class="tab" onclick="switchVendorTab('Autstand/DCS')" data-vendor="Autstand/DCS">Autstand/DCS</button><button class="tab" onclick="switchVendorTab('Beumer')" data-vendor="Beumer">Beumer</button><button class="tab" onclick="switchVendorTab('Caljan')" data-vendor="Caljan">Caljan</button><button class="tab" onclick="switchVendorTab('DCS')" data-vendor="DCS">DCS</button><button class="tab" onclick="switchVendorTab('DCS/Autstand')" data-vendor="DCS/Autstand">DCS/Autstand</button><button class="tab" onclick="switchVendorTab('DCS/Flow-Turn')" data-vendor="DCS/Flow-Turn">DCS/Flow-Turn</button><button class="tab" onclick="switchVendorTab('DCS/RME')" data-vendor="DCS/RME">DCS/RME</button><button class="tab" onclick="switchVendorTab('Datalogic')" data-vendor="Datalogic">Datalogic</button><button class="tab" onclick="switchVendorTab('FMH/Gorbel')" data-vendor="FMH/Gorbel">FMH/Gorbel</button><button class="tab" onclick="switchVendorTab('Gorbel')" data-vendor="Gorbel">Gorbel</button><button class="tab" onclick="switchVendorTab('MFO (Amazon)')" data-vendor="MFO (Amazon)">MFO (Amazon)</button><button class="tab" onclick="switchVendorTab('MISC')" data-vendor="MISC">MISC</button><button class="tab" onclick="switchVendorTab('Startup (Amazon)')" data-vendor="Startup (Amazon)">Startup (Amazon)</button>
|
<button class="tab" onclick="switchVendorTab("Amazon")" data-vendor="Amazon">Amazon</button><button class="tab" onclick="switchVendorTab("Autstand")" data-vendor="Autstand">Autstand</button><button class="tab" onclick="switchVendorTab("Autstand/Beumer")" data-vendor="Autstand/Beumer">Autstand/Beumer</button><button class="tab" onclick="switchVendorTab("Autstand/DCS")" data-vendor="Autstand/DCS">Autstand/DCS</button><button class="tab" onclick="switchVendorTab("Beumer")" data-vendor="Beumer">Beumer</button><button class="tab" onclick="switchVendorTab("Caljan")" data-vendor="Caljan">Caljan</button><button class="tab" onclick="switchVendorTab("DCS")" data-vendor="DCS">DCS</button><button class="tab" onclick="switchVendorTab("DCS/Autstand")" data-vendor="DCS/Autstand">DCS/Autstand</button><button class="tab" onclick="switchVendorTab("DCS/Flow-Turn")" data-vendor="DCS/Flow-Turn">DCS/Flow-Turn</button><button class="tab" onclick="switchVendorTab("DCS/RME")" data-vendor="DCS/RME">DCS/RME</button><button class="tab" onclick="switchVendorTab("Datalogic")" data-vendor="Datalogic">Datalogic</button><button class="tab" onclick="switchVendorTab("FMH/Gorbel")" data-vendor="FMH/Gorbel">FMH/Gorbel</button><button class="tab" onclick="switchVendorTab("Gorbel")" data-vendor="Gorbel">Gorbel</button><button class="tab" onclick="switchVendorTab("MFO (Amazon)")" data-vendor="MFO (Amazon)">MFO (Amazon)</button><button class="tab" onclick="switchVendorTab("MISC")" data-vendor="MISC">MISC</button><button class="tab" onclick="switchVendorTab("Startup (Amazon)")" data-vendor="Startup (Amazon)">Startup (Amazon)</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -708,13 +708,13 @@
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Amazon')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Amazon')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Amazon">
|
<div class="status-tab-content active" data-status="all" data-vendor="Amazon">
|
||||||
@ -860,13 +860,13 @@
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Autstand')" data-status="all">All (74)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (74)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="oldest_unaddressed">Oldest Unaddressed (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="closed">Closed (67)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (67)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="monitor">Monitor (4)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (4)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="open">Open (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand')" data-status="incomplete">Incomplete (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (3)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Autstand">
|
<div class="status-tab-content active" data-status="all" data-vendor="Autstand">
|
||||||
@ -3841,13 +3841,13 @@ KK 11/30 - Fixed the "Unknown" S04 message, verified with AWCS data</p>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="all">All (3)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="closed">Closed (2)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (2)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="monitor">Monitor (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/Beumer')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Autstand/Beumer">
|
<div class="status-tab-content active" data-status="all" data-vendor="Autstand/Beumer">
|
||||||
@ -4074,13 +4074,13 @@ KK 10/19 - Done</p>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="all">All (3)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="closed">Closed (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Autstand/DCS')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Autstand/DCS">
|
<div class="status-tab-content active" data-status="all" data-vendor="Autstand/DCS">
|
||||||
@ -4305,13 +4305,13 @@ KK 10/19 - Done</p>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Beumer')" data-status="all">All (32)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (32)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="oldest_unaddressed">Oldest Unaddressed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="closed">Closed (26)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (26)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="monitor">Monitor (5)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (5)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="open">Open (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Beumer')" data-status="incomplete">Incomplete (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (1)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Beumer">
|
<div class="status-tab-content active" data-status="all" data-vendor="Beumer">
|
||||||
@ -5660,13 +5660,13 @@ confirmed that it works</p>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Caljan')" data-status="all">All (4)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (4)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="closed">Closed (4)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (4)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Caljan')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Caljan">
|
<div class="status-tab-content active" data-status="all" data-vendor="Caljan">
|
||||||
@ -5931,13 +5931,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'DCS')" data-status="all">All (25)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (25)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="oldest_unaddressed">Oldest Unaddressed (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="closed">Closed (20)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (20)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="monitor">Monitor (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="open">Open (4)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (4)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS')" data-status="incomplete">Incomplete (4)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (4)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="DCS">
|
<div class="status-tab-content active" data-status="all" data-vendor="DCS">
|
||||||
@ -7108,13 +7108,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Autstand')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="DCS/Autstand">
|
<div class="status-tab-content active" data-status="all" data-vendor="DCS/Autstand">
|
||||||
@ -7260,13 +7260,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/Flow-Turn')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="DCS/Flow-Turn">
|
<div class="status-tab-content active" data-status="all" data-vendor="DCS/Flow-Turn">
|
||||||
@ -7412,13 +7412,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'DCS/RME')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'DCS/RME')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="DCS/RME">
|
<div class="status-tab-content active" data-status="all" data-vendor="DCS/RME">
|
||||||
@ -7564,13 +7564,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Datalogic')" data-status="all">All (5)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (5)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="oldest_unaddressed">Oldest Unaddressed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="closed">Closed (3)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (3)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="monitor">Monitor (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="open">Open (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Datalogic')" data-status="incomplete">Incomplete (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (1)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Datalogic">
|
<div class="status-tab-content active" data-status="all" data-vendor="Datalogic">
|
||||||
@ -7919,13 +7919,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'FMH/Gorbel')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="FMH/Gorbel">
|
<div class="status-tab-content active" data-status="all" data-vendor="FMH/Gorbel">
|
||||||
@ -8071,13 +8071,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Gorbel')" data-status="all">All (2)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (2)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="closed">Closed (2)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (2)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Gorbel')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Gorbel">
|
<div class="status-tab-content active" data-status="all" data-vendor="Gorbel">
|
||||||
@ -8266,13 +8266,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MFO (Amazon)')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="MFO (Amazon)">
|
<div class="status-tab-content active" data-status="all" data-vendor="MFO (Amazon)">
|
||||||
@ -8418,13 +8418,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'MISC')" data-status="all">All (7)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (7)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="closed">Closed (7)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (7)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'MISC')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="MISC">
|
<div class="status-tab-content active" data-status="all" data-vendor="MISC">
|
||||||
@ -8793,13 +8793,13 @@ https://t.corp.amazon.com/V1969041198</div>
|
|||||||
|
|
||||||
<div class="vendor-content">
|
<div class="vendor-content">
|
||||||
<div class="status-tabs">
|
<div class="status-tabs">
|
||||||
<button class="status-tab active" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="all">All (1)</button>
|
<button class="status-tab active" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="all">All (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="updates_24h">Yesterday's Updates (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="updates_24h">Yesterday's Updates (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="oldest_unaddressed">Oldest Unaddressed (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="closed">Closed (1)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="closed">Closed (1)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="monitor">Monitor (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="monitor">Monitor (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="open">Open (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="open">Open (0)</button>
|
||||||
<button class="status-tab" onclick="switchStatusTab(this, 'Startup (Amazon)')" data-status="incomplete">Incomplete (0)</button>
|
<button class="status-tab" onclick="switchStatusTab(this, "" + escape_js_string(vendor_name) + "")" data-status="incomplete">Incomplete (0)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-tab-content active" data-status="all" data-vendor="Startup (Amazon)">
|
<div class="status-tab-content active" data-status="all" data-vendor="Startup (Amazon)">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"report_generated_at": "2025-11-06T20:37:46.364471",
|
"report_generated_at": "2025-11-07T01:50:13.559722",
|
||||||
"vendors": [
|
"vendors": [
|
||||||
{
|
{
|
||||||
"vendor_name": "Amazon",
|
"vendor_name": "Amazon",
|
||||||
|
|||||||
@ -67,9 +67,10 @@ class SharePointDownloader:
|
|||||||
try:
|
try:
|
||||||
if self.use_app_authentication and self.client_id and self.client_secret:
|
if self.use_app_authentication and self.client_id and self.client_secret:
|
||||||
# App authentication (recommended for automation)
|
# App authentication (recommended for automation)
|
||||||
|
logger.info(f"Attempting app authentication with client_id: {self.client_id[:8]}...")
|
||||||
credentials = ClientCredential(self.client_id, self.client_secret)
|
credentials = ClientCredential(self.client_id, self.client_secret)
|
||||||
self.ctx = ClientContext(self.site_url).with_credentials(credentials)
|
self.ctx = ClientContext(self.site_url).with_credentials(credentials)
|
||||||
logger.info("Authenticated with SharePoint using app credentials")
|
logger.info("Created SharePoint context with app credentials")
|
||||||
elif self.username and self.password:
|
elif self.username and self.password:
|
||||||
# User authentication
|
# User authentication
|
||||||
credentials = UserCredential(self.username, self.password)
|
credentials = UserCredential(self.username, self.password)
|
||||||
@ -80,6 +81,7 @@ class SharePointDownloader:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
# Test connection
|
# Test connection
|
||||||
|
logger.info("Testing SharePoint connection...")
|
||||||
web = self.ctx.web
|
web = self.ctx.web
|
||||||
self.ctx.load(web)
|
self.ctx.load(web)
|
||||||
self.ctx.execute_query()
|
self.ctx.execute_query()
|
||||||
@ -87,7 +89,10 @@ class SharePointDownloader:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"SharePoint authentication failed: {e}")
|
logger.error(f"SharePoint authentication failed: {e}", exc_info=True)
|
||||||
|
logger.error(f"Site URL: {self.site_url}")
|
||||||
|
logger.error(f"Client ID: {self.client_id[:8] if self.client_id else 'None'}...")
|
||||||
|
logger.error(f"Using app auth: {self.use_app_authentication}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def download_file(
|
def download_file(
|
||||||
|
|||||||
26
test_docker.ps1
Normal file
26
test_docker.ps1
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Simple Docker test script
|
||||||
|
Write-Host "=== Testing Docker Image ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
Write-Host "`n1. Testing local file..." -ForegroundColor Yellow
|
||||||
|
python test_syntax.py
|
||||||
|
|
||||||
|
Write-Host "`n2. Building Docker image..." -ForegroundColor Yellow
|
||||||
|
docker build --no-cache -t vendor-report-api-test . 2>&1 | Select-String "Step|COPY|ERROR" | Select-Object -Last 5
|
||||||
|
|
||||||
|
Write-Host "`n3. Checking line 794 in LOCAL file:" -ForegroundColor Yellow
|
||||||
|
Get-Content html_generator.py | Select-Object -Index 793
|
||||||
|
|
||||||
|
Write-Host "`n4. Checking line 794 in DOCKER image:" -ForegroundColor Yellow
|
||||||
|
docker run --rm vendor-report-api-test sed -n '794p' /app/html_generator.py 2>&1
|
||||||
|
|
||||||
|
Write-Host "`n5. Checking line 1284 in LOCAL file:" -ForegroundColor Yellow
|
||||||
|
Get-Content html_generator.py | Select-Object -Index 1283
|
||||||
|
|
||||||
|
Write-Host "`n6. Checking line 1284 in DOCKER image:" -ForegroundColor Yellow
|
||||||
|
docker run --rm vendor-report-api-test sed -n '1284p' /app/html_generator.py 2>&1
|
||||||
|
|
||||||
|
Write-Host "`n7. Testing Python import in Docker:" -ForegroundColor Yellow
|
||||||
|
docker run --rm vendor-report-api-test python -c "import html_generator; print('SUCCESS')" 2>&1
|
||||||
|
|
||||||
|
Write-Host "`n=== Done ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
20
test_syntax.py
Normal file
20
test_syntax.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Quick syntax test for html_generator.py"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
import html_generator
|
||||||
|
print("SUCCESS: html_generator.py imports without syntax errors!")
|
||||||
|
print(f"escape_js_string function exists: {hasattr(html_generator, 'escape_js_string')}")
|
||||||
|
sys.exit(0)
|
||||||
|
except SyntaxError as e:
|
||||||
|
print(f"SYNTAX ERROR: {e}")
|
||||||
|
print(f" File: {e.filename}")
|
||||||
|
print(f" Line: {e.lineno}")
|
||||||
|
print(f" Text: {e.text}")
|
||||||
|
sys.exit(1)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"ERROR: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
55
verify_build.ps1
Normal file
55
verify_build.ps1
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Comprehensive build verification script
|
||||||
|
Write-Host "=== Vendor Report API Build Verification ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# 1. Verify local file syntax
|
||||||
|
Write-Host "`n1. Checking local file syntax..." -ForegroundColor Yellow
|
||||||
|
python -c "import html_generator; print('Local file syntax OK')" 2>&1
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "Local file has syntax errors!" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
} else {
|
||||||
|
Write-Host "Local file syntax OK" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. Check specific lines
|
||||||
|
Write-Host "`n2. Checking fixed lines..." -ForegroundColor Yellow
|
||||||
|
$line794 = (Get-Content html_generator.py)[793]
|
||||||
|
$line1284 = (Get-Content html_generator.py)[1283]
|
||||||
|
|
||||||
|
Write-Host "Line 794: $($line794.Substring(0, [Math]::Min(80, $line794.Length)))..."
|
||||||
|
if ($line794 -match '\\"') {
|
||||||
|
Write-Host "Line 794 still has backslash!" -ForegroundColor Red
|
||||||
|
} else {
|
||||||
|
Write-Host "Line 794 looks correct (no backslash)" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Line 1284: $($line1284.Substring(0, [Math]::Min(80, $line1284.Length)))..."
|
||||||
|
if ($line1284 -match '\\"') {
|
||||||
|
Write-Host "Line 1284 still has backslash!" -ForegroundColor Red
|
||||||
|
} else {
|
||||||
|
Write-Host "Line 1284 looks correct (no backslash)" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. Build image with --no-cache
|
||||||
|
Write-Host "`n3. Building Docker image with --no-cache..." -ForegroundColor Yellow
|
||||||
|
docker build --no-cache -t vendor-report-api-test . 2>&1 | Select-String "Step|COPY|ERROR" | Select-Object -Last 10
|
||||||
|
|
||||||
|
# 4. Verify what's in the image
|
||||||
|
Write-Host "`n4. Verifying Docker image contents..." -ForegroundColor Yellow
|
||||||
|
Write-Host "Line 794 in image:"
|
||||||
|
docker run --rm vendor-report-api-test sed -n '794p' /app/html_generator.py 2>&1
|
||||||
|
|
||||||
|
Write-Host "`nLine 1284 in image:"
|
||||||
|
docker run --rm vendor-report-api-test sed -n '1284p' /app/html_generator.py 2>&1
|
||||||
|
|
||||||
|
# 5. Test import in Docker
|
||||||
|
Write-Host "`n5. Testing Python import in Docker container..." -ForegroundColor Yellow
|
||||||
|
docker run --rm vendor-report-api-test python -c "import html_generator; print('SUCCESS')" 2>&1
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-Host "✓ Docker image works!" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "✗ Docker image still has errors!" -ForegroundColor Red
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`n=== Verification Complete ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
32
verify_docker_image.ps1
Normal file
32
verify_docker_image.ps1
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Verify what's actually in the Docker image
|
||||||
|
param(
|
||||||
|
[string]$ImageName = "vendor-report-api-test"
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host "=== Verifying Docker Image Contents ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# Build the image
|
||||||
|
Write-Host "`n1. Building image: $ImageName" -ForegroundColor Yellow
|
||||||
|
docker build -t $ImageName . 2>&1 | Select-String "COPY|Step"
|
||||||
|
|
||||||
|
# Check line 794 in the image
|
||||||
|
Write-Host "`n2. Checking line 794 in Docker image:" -ForegroundColor Yellow
|
||||||
|
docker run --rm $ImageName sed -n '794p' /app/html_generator.py
|
||||||
|
|
||||||
|
# Check line 1284 in the image
|
||||||
|
Write-Host "`n3. Checking line 1284 in Docker image:" -ForegroundColor Yellow
|
||||||
|
docker run --rm $ImageName sed -n '1284p' /app/html_generator.py
|
||||||
|
|
||||||
|
# Try to import the module
|
||||||
|
Write-Host "`n4. Testing Python import in Docker:" -ForegroundColor Yellow
|
||||||
|
docker run --rm $ImageName python -c "import html_generator; print('SUCCESS')" 2>&1
|
||||||
|
|
||||||
|
# Compare with local file
|
||||||
|
Write-Host "`n5. Local file line 794:" -ForegroundColor Yellow
|
||||||
|
Get-Content html_generator.py | Select-Object -Index 793
|
||||||
|
|
||||||
|
Write-Host "`n6. Local file line 1284:" -ForegroundColor Yellow
|
||||||
|
Get-Content html_generator.py | Select-Object -Index 1283
|
||||||
|
|
||||||
|
Write-Host "`n=== Done ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user