HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/circ.itp/woo-from-shopping-admin.asp
<%Option Explicit%>
<!--#include file="woo-to-itp.asp"-->
<%DisableCache%><!DOCTYPE html>
<html>
<head>
<title>Shopping Admin to Woo</title>
</head>

<body>
<h3>Shopping Admin to Woo</h3>
<%

' (SS,4/8/25)
If Not IsWooLiveMode Then
  Response.Write "<p><strong>In ""Test mode"", no data written to CIRC Shopping Admin database</strong></p>" & NL
End If

' (SS,15/8/25)
Initialise
SendToWooCommerce
Finalise

' commands for specified order no
' including: set pick list note, set ready for despatch note, message to customer, mark as completed
' commands: picklist, readyfordespatch, messagetocustomer, completed
' picklist id can be specified instead of order no for SWC_PICK_LIST command
Sub SendToWooCommerce
  Const SWC_PICK_LIST = "picklist"
  Const SWC_READY_FOR_DESPATCH = "readyfordespatch"
  Const SWC_MESSAGE_TO_CUSTOMER = "messagetocustomer"
  Const SWC_COMPLETED = "completed"

  Dim LOrderNo, LPickListID, LCmd
  
  LOrderNo = CleanRequestQueryString("orderno")
  LPickListID = CleanRequestQueryString("picklistid")
  
  LCmd = CleanRequestQueryString("cmd")
  
  If LCmd = "" Then
    Response.Write "Command not specified"
    Exit Sub        
  ElseIf LCmd <> SWC_PICK_LIST AND LCmd <> SWC_READY_FOR_DESPATCH AND LCmd <> SWC_MESSAGE_TO_CUSTOMER AND LCmd <> SWC_COMPLETED Then
    Response.Write "Command invalid"
    Exit Sub
  ElseIf LOrderNo = "" And LCmd <> SWC_PICK_LIST Then
    Response.Write "Order No not specified"
    Exit Sub
  ElseIf LPickListID = "" And LCmd = SWC_PICK_LIST Then
    Response.Write "Pick List ID not specified"
    Exit Sub
  End If
  
  Response.Write "Order No: " & LOrderNo & BR
  Response.Write "Pick List ID: " & LPickListID & BR
  Response.Write "Command: " & LCmd & BR
  Response.Write BR
  
  
  Dim LWooCommerceOrderID, LStatus, LReadyForDespatchDate, LMessageToCustomer, LPickListOrderIDs
  
  If LCmd = SWC_PICK_LIST Then
    LPickListOrderIDs = WC_GetOrderIDsForPickList(LPickListID)
    Response.Write "WooCommerce Order IDs in pick list: " & LPickListOrderIDs & BR
    If LPickListOrderIDs = "" Then
      Response.Write "No WooCommerce Order IDs in pick list"
      Exit Sub
    End If
  Else
    ' verify order no, get WooCommerceOrderID, ready for despatch date and message to customer, and status
    If Not GetSQL4Values("SELECT WooCommerceOrderID, Status, ReadyForDespatch, MessageToCustomer FROM orders WHERE OrderNo = '" & CleanSQLStr(LOrderNo) & "'", LWooCommerceOrderID, LStatus, LReadyForDespatchDate, LMessageToCustomer) Then
      Response.Write "Order No: " & LOrderNo & " doesn't exist" & BR
      Exit Sub
    End If

    Response.Write "WooCommerce Order ID: " & LWooCommerceOrderID & BR
    Response.Write "Status: " & LStatus & BR
    Response.Write "ReadyForDespatch: " & LReadyForDespatchDate & BR
    
    If NB(LWooCommerceOrderID) = "" Then
      Response.Write "WooCommerce Order ID missing for this order"
      Exit Sub
    End If

    If LCmd = SWC_MESSAGE_TO_CUSTOMER Then
      LMessageToCustomer = Trim(NB(LMessageToCustomer))
      ' Response.Write "CustomerMessage: <hr>" & LMessageToCustomer & "<hr>" & BR    
      LMessageToCustomer = WC_EmailBodyMessageAddTokens(LOrderNo, LMessageToCustomer)
      LMessageToCustomer = ConvertNewlinesToHTML(LMessageToCustomer)
      Response.Write "CustomerMessage: <hr>" & LMessageToCustomer & "<hr>" & BR         
    End If
         
  End If
  
  If LCmd = SWC_PICK_LIST Then
    ' for each order ID in list
    Dim LOrderIDArray, i    
    LOrderIDArray = Split(LPickListOrderIDs, ",")    
    For i = LBound(LOrderIDArray) To UBound(LOrderIDArray)
      LWooCommerceOrderID = Trim(LOrderIDArray(i))
      Response.Write "LWooCommerceOrderID " & i & ": " & LWooCommerceOrderID & BR
      DoWooCommerceSend LWooCommerceOrderID, WST_NOTE, "Added to pick list: " & LPickListID, ""      
    Next
  ElseIf LCmd = SWC_READY_FOR_DESPATCH Then
    If NB(LReadyForDespatchDate) = "" Then
      Response.Write "Not yet ready for despatch" & BR
    Else
      DoWooCommerceSend LWooCommerceOrderID, WST_NOTE, "Ready for despatch: " & LReadyForDespatchDate, ""
    End If
  ElseIf LCmd = SWC_MESSAGE_TO_CUSTOMER Then
    If LMessageToCustomer = "" Then
      Response.Write "No message to customer" & BR
    Else
      DoWooCommerceSend LWooCommerceOrderID, WST_METADATA, LMessageToCustomer, "messageToCustomer"
      ' DoWooCommerceSend LWooCommerceOrderID, WST_METADATA, "Just testing 2", "messageToCustomer"
    End If
  ElseIf LCmd = SWC_COMPLETED Then
    DoWooCommerceSend LWooCommerceOrderID, WST_STATUS, "completed", ""
  End If

End Sub

' (SS,6/1/25) for CIRC, replace new {ORDER_NO} and {DELIVERY_POSTCODE} tokens in courier tracking URL
' (SS,15/8/25) taken from EmailBodyMessageAddTokens in apputils, added {STORE_EMAIL}
Function WC_EmailBodyMessageAddTokens(AOrderNo, AMessage)
  Dim LResult 
  LResult = ReplaceStr(AMessage, "{ORDER_NO}", AOrderNo)
  
  OpenQuery "SELECT OrderNo, Postcode, DeliveryPostcode FROM orders WHERE OrderNo = '" & CleanSQLStr(AOrderNo) & "'"  
  Dim LDeliveryPostcode
  LDeliveryPostcode = NB(GetQueryValue("DeliveryPostcode"))
  If LDeliveryPostcode = "" Then LDeliveryPostcode = NB(GetQueryValue("Postcode"))
  LResult = ReplaceStr(LResult, "{DELIVERY_POSTCODE}", URLEncode(LDeliveryPostcode)) ' URLEncode converts space to + (not %20)
  CloseQuery
  
  LResult = ReplaceStr(LResult, "{STORE_EMAIL}", "sales@castironradiatorcentre.co.uk")
  
  WC_EmailBodyMessageAddTokens = LResult
End Function

' (SS,15/8/25) returns list of WooCommerceOrderID for given pick list ID
Function WC_GetOrderIDsForPickList(APickListID)
  Dim LResult
  
  LResult = ""
  OpenQuery "SELECT WooCommerceOrderID FROM orders WHERE PickListID = '" & CleanSQLStr(APickListID) & "' AND WooCommerceOrderID IS NOT NULL ORDER BY WooCommerceOrderID"  
  Do While Not EndOfQuery
    LResult = LResult & IIf(LResult = "", "", ",") & GetQueryValue("WooCommerceOrderID")
    NextQueryRecord
  Loop
  CloseQuery  

  WC_GetOrderIDsForPickList = LResult
End Function

' (SS,15/8/25) get WC order ID for given ITP order no
' !!! might not be required anymore
Function WC_GetWooCommerceOrderID(AOrderNo)
  WC_GetWooCommerceOrderID = GetSQLValueAsString("SELECT WooCommerceOrderID FROM orders WHERE OrderNo = '" & CleanSQLStr(AOrderNo) & "'")
End Function
 
%>
</body>
</html>