diff --git a/app/services/tcgplayer_api.py b/app/services/tcgplayer_api.py index c0bf9cf..02436eb 100644 --- a/app/services/tcgplayer_api.py +++ b/app/services/tcgplayer_api.py @@ -12,6 +12,7 @@ from weasyprint import HTML import json import time import re +import csv logger = logging.getLogger(__name__) @@ -271,30 +272,52 @@ class TCGPlayerAPIService: return output_filename + def get_address_labels_csv(self, order_ids: list[str]): + url = f"{self.config.ORDER_BASE_URL}/shipping/export{self.config.API_VERSION}" + payload = { + "orderNumbers": order_ids, + "timezoneOffset": -4 + } + response = self.requests_util.send_request(url, method='POST', cookies=self.cookies, json=payload) + if response: + # get filename from response headers + header = response.headers.get('Content-Disposition', '') + match = re.search(r'filename="?([^";]+)"?', header) + filename = match.group(1) if match else f'shipping{datetime.now().strftime("%Y%m%d_%H%M%S")}.csv' + output_filename = f'/app/tmp/{filename}' + # save file to disk + with open(output_filename, 'wb') as f: + f.write(response.content) + + return output_filename + def get_address_labels_pdf(self, order_ids: list[str]): + shipping_csv_filename = self.get_address_labels_csv(order_ids) + with open(shipping_csv_filename, 'r') as f: + reader = csv.DictReader(f) + orders = {} + for row in reader: + order_id = row.pop('Order #') + orders[order_id] = row + labels_html = [] - for order_id in order_ids: - order = self.get_order(order_id) - - if order: - try: - # Extract relevant information from the order - order_info = { - "recipient_name": order['shippingAddress']['recipientName'], - "address_line1": order['shippingAddress']['addressOne'], - "address_line2": order['shippingAddress'].get('addressTwo', ''), - "city": order['shippingAddress']['city'], - "state": order['shippingAddress']['territory'], - "zip_code": order['shippingAddress']['postalCode'], - "return_address_path": self.return_address_png - } + for order in orders: + if float(order['Value of Products']) >49.99: + continue + # Extract relevant information from the order + order_info = { + "recipient_name": order['FirstName'] + ' ' + order['LastName'], + "address_line1": order['Address1'], + "address_line2": order['Address2'] if 'Address2' in order else '', + "city": order['City'], + "state": order['State'], + "zip_code": order['PostalCode'], + "return_address_path": self.return_address_png + } - # Render the label HTML using the template - labels_html.append(self.address_label_template.render(order_info)) - except KeyError as e: - print(f"Missing field in order {order_id}: {e}") - continue + # Render the label HTML using the template + labels_html.append(self.address_label_template.render(order_info)) if labels_html: # Combine the rendered labels into one HTML string diff --git a/requests.md b/requests.md index 255a6e3..ea487e3 100644 --- a/requests.md +++ b/requests.md @@ -18,7 +18,7 @@ curl -X POST "http://192.168.1.41:8000/api/boxes/d95d26a8-1f82-47f2-89fa-3f88a46 curl -X POST "http://192.168.1.41:8000/api/processOrders" \ -H "Content-Type: application/json" \ - -d '{"order_ids": ["E576ED4C-EBD55A-27AE6","E576ED4C-CC32F2-76408"]}' + -d '{"order_ids": ["E576ED4C-AD8CC8-9E57E","E576ED4C-2EC48E-7F185","E576ED4C-9B72C2-5E208","E576ED4C-67DAA6-B06B5","E576ED4C-7E52E0-CCE11","E576ED4C-572216-87C96","E576ED4C-37BADB-8BE45","E576ED4C-2D9E83-89C64","E576ED4C-C8080B-8066C","E576ED4C-A41099-E4F92","E576ED4C-2B5122-5E719","E576ED4C-95BB1D-07DDA","E576ED4C-1CF99A-20072","E576ED4C-342542-28CDB","E576ED4C-42720B-514DB","E576ED4C-911CB9-15174","E576ED4C-EBD55A-27AE6","E576ED4C-CC32F2-76408","E576ED4C-45328B-E65B4","E576ED4C-1F26F5-84367","E576ED4C-1D4FE5-71100","E576ED4C-BCEC53-A7CF2","E576ED4C-132791-5AF2E"]}' curl -X POST "http://192.168.1.41:8000/api/processOrders" \ -H "Content-Type: application/json" \