|
|
|
|
@ -1,194 +1,4 @@
|
|
|
|
|
# import frappe
|
|
|
|
|
# import requests
|
|
|
|
|
# from .constants import SALES_ORDER_ACKNOWLEDGEMENT_URL
|
|
|
|
|
|
|
|
|
|
# def format_sales_order_ack(data: dict) -> dict:
|
|
|
|
|
# """
|
|
|
|
|
# Format sales order acknowledgement.
|
|
|
|
|
|
|
|
|
|
# Args:
|
|
|
|
|
# data (dict): Sales order payload.
|
|
|
|
|
|
|
|
|
|
# Returns:
|
|
|
|
|
# dict: A formatted sales order acknowledgement.
|
|
|
|
|
# """
|
|
|
|
|
# try:
|
|
|
|
|
# order_header = data.get("Header", {}).get("OrderHeader", {})
|
|
|
|
|
# line_item = data.get("LineItem", [])
|
|
|
|
|
|
|
|
|
|
# if not order_header or not line_item:
|
|
|
|
|
# frappe.log_error(title="Invalid Order Payload", message=str(data))
|
|
|
|
|
# print("Invalid order payload received.")
|
|
|
|
|
# return {}
|
|
|
|
|
|
|
|
|
|
# acknowledgement_payload = {
|
|
|
|
|
# "Header": {
|
|
|
|
|
# "OrderHeader": {
|
|
|
|
|
# "TradingPartnerId": order_header.get("TradingPartnerId", ""),
|
|
|
|
|
# "PurchaseOrderNumber": order_header.get("PurchaseOrderNumber"),
|
|
|
|
|
# "TsetPurposeCode": "00",
|
|
|
|
|
# "AcknowledgementType": "AK",
|
|
|
|
|
# "AcknowledgementNumber": "",
|
|
|
|
|
# "AcknowledgementDate": order_header.get("PurchaseOrderDate"),
|
|
|
|
|
# },
|
|
|
|
|
# "Dates": [
|
|
|
|
|
# {
|
|
|
|
|
# "DateTimeQualifier": "064",
|
|
|
|
|
# "Date": order_header.get("PurchaseOrderDate")
|
|
|
|
|
# }
|
|
|
|
|
# ]
|
|
|
|
|
# },
|
|
|
|
|
# "LineItem": [
|
|
|
|
|
# {
|
|
|
|
|
# "OrderLine": {
|
|
|
|
|
# "LineSequenceNumber": item.get("OrderLine", {}).get("LineSequenceNumber"),
|
|
|
|
|
# "VendorPartNumber": item.get("OrderLine", {}).get("VendorPartNumber"),
|
|
|
|
|
# "ConsumerPackageCode": item.get("OrderLine", {}).get("ConsumerPackageCode"),
|
|
|
|
|
# "OrderQty": item.get("OrderLine", {}).get("OrderQty"),
|
|
|
|
|
# "OrderQtyUOM": item.get("OrderLine", {}).get("OrderQtyUOM"),
|
|
|
|
|
# "PurchasePrice": item.get("OrderLine", {}).get("PurchasePrice"),
|
|
|
|
|
# },
|
|
|
|
|
# "LineItemAcknowledgement": [
|
|
|
|
|
# {
|
|
|
|
|
# "ItemStatusCode": "IA",
|
|
|
|
|
# "ItemScheduleQty": item.get("OrderLine", {}).get("OrderQty"),
|
|
|
|
|
# "ItemScheduleUOM": item.get("OrderLine", {}).get("OrderQtyUOM"),
|
|
|
|
|
# "ItemScheduleQualifier": "",
|
|
|
|
|
# "ItemScheduleDate": order_header.get("PurchaseOrderDate"),
|
|
|
|
|
# }
|
|
|
|
|
# ]
|
|
|
|
|
# }
|
|
|
|
|
# for item in line_item
|
|
|
|
|
# ]
|
|
|
|
|
# }
|
|
|
|
|
|
|
|
|
|
# print("Formatted Sales Order Acknowledgement Payload:", acknowledgement_payload)
|
|
|
|
|
# return acknowledgement_payload
|
|
|
|
|
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# frappe.log_error(title="SO ACK Payload Formatting Error", message=str(e))
|
|
|
|
|
# print(f"Error formatting payload: {str(e)}")
|
|
|
|
|
# return {}
|
|
|
|
|
|
|
|
|
|
# def sales_order_acknowledgement(data: dict):
|
|
|
|
|
# """Send Sales Order Acknowledgement."""
|
|
|
|
|
# try:
|
|
|
|
|
# print("Fetching SPS Integration Settings...")
|
|
|
|
|
# doc = frappe.get_doc("SPS Integration Settings", "Develop")
|
|
|
|
|
# access_token = doc.get_password("access_token")
|
|
|
|
|
|
|
|
|
|
# headers = {
|
|
|
|
|
# "Content-Type": "application/json; charset=utf-8",
|
|
|
|
|
# "Authorization": f"Bearer {access_token}"
|
|
|
|
|
# }
|
|
|
|
|
|
|
|
|
|
# formatted_data = format_sales_order_ack(data)
|
|
|
|
|
|
|
|
|
|
# if not formatted_data:
|
|
|
|
|
# print("Error: No data to send in Sales Order Acknowledgement.")
|
|
|
|
|
# return
|
|
|
|
|
|
|
|
|
|
# print("Sending Sales Order Acknowledgement...")
|
|
|
|
|
# response = requests.post(url=SALES_ORDER_ACKNOWLEDGEMENT_URL, headers=headers, json=formatted_data)
|
|
|
|
|
|
|
|
|
|
# print(f"Response Status Code: {response.status_code}")
|
|
|
|
|
|
|
|
|
|
# if response.status_code in [200, 201]:
|
|
|
|
|
# response_json = response.json()
|
|
|
|
|
# frappe.log_error(title="SO Acknowledgement Success", message=str(response_json))
|
|
|
|
|
# print("Sales Order Acknowledgement Successful:", response_json)
|
|
|
|
|
# else:
|
|
|
|
|
# frappe.log_error(title="SO Acknowledgement Failure", message=response.text)
|
|
|
|
|
# print("Sales Order Acknowledgement Failed:", response.text)
|
|
|
|
|
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# frappe.log_error(title="SO Acknowledgement Error", message=str(e))
|
|
|
|
|
# print(f"Error in Sales Order Acknowledgement: {str(e)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# data = {
|
|
|
|
|
# "Meta" : {
|
|
|
|
|
# "OrderManagement" : "SA"
|
|
|
|
|
# },
|
|
|
|
|
# "Header" : {
|
|
|
|
|
# "OrderHeader" : {
|
|
|
|
|
# "TradingPartnerId" : "0RXALLALPHARDGO",
|
|
|
|
|
# "PurchaseOrderNumber" : "WGE680227-29",
|
|
|
|
|
# "TsetPurposeCode" : "00",
|
|
|
|
|
# "PrimaryPOTypeCode" : "SA",
|
|
|
|
|
# "PurchaseOrderDate" : "2025-02-10",
|
|
|
|
|
# "Vendor" : "ALPHAR"
|
|
|
|
|
# },
|
|
|
|
|
# "Dates" : [ {
|
|
|
|
|
# "DateTimeQualifier" : "010",
|
|
|
|
|
# "Date" : "2025-02-28"
|
|
|
|
|
# }, {
|
|
|
|
|
# "DateTimeQualifier" : "001",
|
|
|
|
|
# "Date" : "2025-03-30"
|
|
|
|
|
# } ],
|
|
|
|
|
# "Contacts" : [ {
|
|
|
|
|
# "ContactTypeCode" : "BD",
|
|
|
|
|
# "ContactName" : "XAX XAX"
|
|
|
|
|
# } ],
|
|
|
|
|
# "Address" : [ {
|
|
|
|
|
# "AddressTypeCode" : "BT",
|
|
|
|
|
# "LocationCodeQualifier" : "92",
|
|
|
|
|
# "AddressLocationNumber" : "00",
|
|
|
|
|
# "AddressName" : "Worldwide Golf Enterprises",
|
|
|
|
|
# "Address1" : "1430 Village Way",
|
|
|
|
|
# "Address2" : "Suite J",
|
|
|
|
|
# "City" : "Santa Ana",
|
|
|
|
|
# "State" : "CA",
|
|
|
|
|
# "PostalCode" : "92705"
|
|
|
|
|
# }, {
|
|
|
|
|
# "AddressTypeCode" : "ST",
|
|
|
|
|
# "LocationCodeQualifier" : "92",
|
|
|
|
|
# "AddressLocationNumber" : "29",
|
|
|
|
|
# "AddressName" : "ROGER DUNN",
|
|
|
|
|
# "Address1" : "11849 Foothill Blvd. Ste. D",
|
|
|
|
|
# "City" : "RANCHO CUCAMONGA",
|
|
|
|
|
# "State" : "CA",
|
|
|
|
|
# "PostalCode" : "91730",
|
|
|
|
|
# "Country" : "US"
|
|
|
|
|
# } ],
|
|
|
|
|
# "Notes" : [ {
|
|
|
|
|
# "Note" : "https://commerce.spscommerce.com/fulfillment/redirect/?searchType=exact&documentType=Order&keyword=WGE680227-29"
|
|
|
|
|
# }, {
|
|
|
|
|
# "Note" : "https: //commerce.spscommerce.com/fulfillment-monitor"
|
|
|
|
|
# } ]
|
|
|
|
|
# },
|
|
|
|
|
# "LineItem" : [ {
|
|
|
|
|
# "OrderLine" : {
|
|
|
|
|
# "LineSequenceNumber" : "1",
|
|
|
|
|
# "VendorPartNumber" : "CYBERE-BL",
|
|
|
|
|
# "ConsumerPackageCode" : "849650001612",
|
|
|
|
|
# "OrderQty" : 1.0,
|
|
|
|
|
# "OrderQtyUOM" : "EA",
|
|
|
|
|
# "PurchasePrice" : 949.0
|
|
|
|
|
# },
|
|
|
|
|
# "ProductOrItemDescription" : [ {
|
|
|
|
|
# "ProductCharacteristicCode" : "08",
|
|
|
|
|
# "ProductDescription" : "CYBERCART"
|
|
|
|
|
# } ]
|
|
|
|
|
# } ],
|
|
|
|
|
# "Summary" : {
|
|
|
|
|
# "TotalAmount" : 949.0
|
|
|
|
|
# }
|
|
|
|
|
# }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import frappe
|
|
|
|
|
import requests
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
# SPS Commerce API URL (Updated)
|
|
|
|
|
SPS_API_URL = "https://api.spscommerce.com/transactions/v5/data/testin/"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import json
|
|
|
|
|
import frappe
|
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
@ -299,13 +109,13 @@ def sales_order_acknowledgement(data: dict):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# Debugging prints
|
|
|
|
|
print("Final JSON Payload:", json.dumps(formatted_data, indent=2))
|
|
|
|
|
print(f"Request URL: {SPS_API_URL}")
|
|
|
|
|
print(f"Headers: {headers}")
|
|
|
|
|
print(f"Sending Request to SPS Commerce...")
|
|
|
|
|
# print("Final JSON Payload:", json.dumps(formatted_data, indent=2))
|
|
|
|
|
# print(f"Request URL: {SPS_API_URL}")
|
|
|
|
|
# print(f"Headers: {headers}")
|
|
|
|
|
# print(f"Sending Request to SPS Commerce...")
|
|
|
|
|
|
|
|
|
|
# Corrected API request (Using json= instead of data=)
|
|
|
|
|
response = requests.post(url=SPS_API_URL, headers=headers, data=json.dumps(formatted_data))
|
|
|
|
|
response = requests.post(url=doc.custom_order_acknowledgement_url, headers=headers, data=json.dumps(formatted_data))
|
|
|
|
|
|
|
|
|
|
print(f"Response Status Code: {response.status_code}")
|
|
|
|
|
print(f"Response Headers: {response.headers}")
|
|
|
|
|
|