Azure D365 Portal - Sales Order Details and Lines

This package adds:
1. Sales Orders list with clickable sales order number / row.
2. Sales Order Detail page: sales_order_detail.php
3. Header detail panel showing all stored header fields, including raw BYOD columns.
4. Lines table showing all sales order lines for that order.
5. Adjustable line columns. Default columns are shown first, but raw BYOD line columns can be selected.
6. Sales order line sync from Azure SQL BYOD through the Azure API bridge.

Important D365/Azure BYOD requirement:
You must publish and export TWO entities to BYOD:
- Sales order header entity, expected table example: dbo.SalesOrderHeaderV2Staging
- Sales order line entity, expected table example: dbo.SalesOrderLineV2Staging

The exact table names may be different in your D365 environment. Confirm in Azure SQL before setting environment variables.

New Azure API Bridge endpoint:
/sales-order-lines

Required App Service environment variables:
BYOD_SALES_ORDER_TABLE=dbo.SalesOrderHeaderV2Staging
BYOD_SALES_ORDER_SYNC_COLUMN=SYNCSTARTDATETIME
BYOD_SALES_ORDER_ORDER_COLUMN=SALESORDERNUMBER
BYOD_SALES_ORDER_LINE_TABLE=dbo.SalesOrderLineV2Staging
BYOD_SALES_ORDER_LINE_SYNC_COLUMN=SYNCSTARTDATETIME
BYOD_SALES_ORDER_LINE_ORDER_COLUMN=SALESORDERNUMBER
BYOD_SALES_ORDER_LINE_COMPANY_COLUMN=DATAAREAID
SQL_CONNECTION_TIMEOUT=120000
SQL_REQUEST_TIMEOUT=120000

New cPanel files:
public_html/d365_portal/sales_order_detail.php
public_html/d365_portal/assets/js/sales_order_detail.js
public_html/d365_portal/api/sales_order_detail.php
public_html/d365_portal/api/sync_sales_order_lines.php
public_html/d365_portal/api/debug_sales_order_lines.php

Updated files:
public_html/d365_portal/sales_orders.php
public_html/d365_portal/assets/js/sales_orders.js
public_html/d365_portal/assets/css/style.css
azure_api_bridge_nodejs/server.js
d365_private/config.php
sql/Azure_D365_sales_orders_update.sql

Testing sequence:
1. Import sql/Azure_D365_sales_orders_update.sql to MySQL.
2. Deploy updated azure_api_bridge_nodejs to Azure App Service.
3. Test from App Service SSH:
   curl -H "x-api-key: YOUR_API_KEY" "https://$WEBSITE_HOSTNAME/sales-orders?pageSize=5"
   curl -H "x-api-key: YOUR_API_KEY" "https://$WEBSITE_HOSTNAME/sales-order-lines?pageSize=5"
4. Run header full sync:
   https://yourdomain.com/d365_portal/api/sync_sales_orders.php?mode=full
5. Run line full sync:
   https://yourdomain.com/d365_portal/api/sync_sales_order_lines.php?mode=full
6. Debug lines:
   https://yourdomain.com/d365_portal/api/debug_sales_order_lines.php
7. Open sales order list and click a sales order:
   https://yourdomain.com/d365_portal/sales_orders.php
