import requests from get_order_number_from_crm_by_id import get_order_number from create_order_in_crm import BASE_URL, CRM_API_KEY from get_orders import get_auth_token, LOGIN, PASSWORD from models import EpicenterOrder, db def get_ttn_number_from_order(order_id: int): order_number = get_order_number(order_id) order = ( EpicenterOrder.select() .where(EpicenterOrder.order_number == order_number) .first() ) if not order: print(f"Order with order number {order_number} not found.") order_url = BASE_URL + f"order/{order_id}/" print(order_id, order_url) headers = { "accept": "application/json", "Authorization": f"Bearer {CRM_API_KEY}", } params = { "include": "shipping", } try: response = requests.get(order_url, headers=headers, params=params) data = response.json() tracking_code = data["shipping"].get("tracking_code") return tracking_code except Exception as e: print(f"An unexpected error occurred: {e}") def change_status_to_confirmed(order_number: int, auth_token: str): order = ( EpicenterOrder.select() .where(EpicenterOrder.order_number == order_number) .first() ) order_id = order.order_id order.status = "confirmed" first_headers = { "authority": "core-api.epicentrm.cloud", "accept": "*/*", "accept-language": "en-US,en;q=0.9,ru;q=0.8,ru-RU;q=0.7", "access-control-request-headers": "authorization,content-type", "access-control-request-method": "POST", "origin": "https://admin.epicentrm.com.ua", "referer": "https://admin.epicentrm.com.ua/", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", } first_response = requests.options( f"https://core-api.epicentrm.cloud/v2/oms/orders/{order_id}/change-status/to/confirmed", headers=first_headers, ) second_headers = { "authority": "core-api.epicentrm.cloud", "accept": "*/*", "accept-language": "en-US,en;q=0.9,ru;q=0.8,ru-RU;q=0.7", "authorization": f"Bearer {auth_token}", # 'content-length': '0', "content-type": "application/json", "origin": "https://admin.epicentrm.com.ua", "referer": "https://admin.epicentrm.com.ua/", "sec-ch-ua": '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", } second_response = requests.post( f"https://core-api.epicentrm.cloud/v2/oms/orders/{order_id}/change-status/to/confirmed", headers=second_headers, ) def update_status_to_sent(order_number: int, order_id_crm: int): auth_token = get_auth_token(LOGIN, PASSWORD) with db.transaction(): change_status_to_confirmed(order_number, auth_token) order = ( EpicenterOrder.select() .where(EpicenterOrder.order_number == order_number) .first() ) order_id = order.order_id order.order_status = "sent" ttn_number = get_ttn_number_from_order(order_id_crm) order.ttn = ttn_number order.save() first_headers = { "authority": "core-api.epicentrm.cloud", "accept": "*/*", "accept-language": "en-US,en;q=0.9,ru;q=0.8,ru-RU;q=0.7", "access-control-request-headers": "authorization,content-type", "access-control-request-method": "POST", "origin": "https://admin.epicentrm.com.ua", "referer": "https://admin.epicentrm.com.ua/", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", } first_response = requests.options( "https://core-api.epicentrm.cloud/v2/oms/orders/{order_id}/change-status/to/sent", headers=first_headers, ) second_headers = { "authority": "core-api.epicentrm.cloud", "accept": "*/*", "accept-language": "en-US,en;q=0.9,ru;q=0.8,ru-RU;q=0.7", "authorization": f"Bearer {auth_token}", "content-type": "application/json", "origin": "https://admin.epicentrm.com.ua", "referer": "https://admin.epicentrm.com.ua/", "sec-ch-ua": '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", } json_data = { "reason_code": "", "comment": None, "translationKey": "", "number": ttn_number, "provider": "nova_poshta", } second_response = requests.post( f"https://core-api.epicentrm.cloud/v2/oms/orders/{order_id}/change-status/to/sent", headers=second_headers, json=json_data, ) def get_and_write_ttn_number(order_id_crm: int): order_number = get_order_number(order_id=order_id_crm) update_status_to_sent(order_number, order_id_crm)