Files
lottery_ycms/lottery/invoices.py
2025-06-13 21:10:20 +09:00

138 lines
5.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import json
import os
from dotenv import load_dotenv
load_dotenv()
def fetch_invoices(api_url, api_key=None, params=None):
"""
Запрашивает счета с API по указанному URL.
Параметры:
api_url (str): URL для получения счетов.
api_key (str, optional): API ключ для авторизации.
params (dict, optional): Параметры запроса.
Возвращает:
dict: Декодированный JSON-ответ при успешном запросе или None в случае ошибки.
"""
headers = {
"accept": "application/ld+json"
}
if api_key:
headers["X-API-Key"] = api_key
try:
response = requests.get(api_url, headers=headers, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Ошибка при запросе счетов: {e}")
return None
def print_invoice(invoice):
"""
Выводит информацию об одном счёте.
"""
print("-" * 60)
print(f"Invoice: {invoice.get('@id', 'N/A')}")
print(f" Type: {invoice.get('@type', 'N/A')}")
print(f" Created at: {invoice.get('created_at', 'N/A')}")
print(f" Closed at: {invoice.get('closed_at', 'N/A')}")
print(f" External ID: {invoice.get('ext_id', 'N/A')}")
print(f" External Type: {invoice.get('ext_type', 'N/A')}")
# Данные клиента
client = invoice.get("client", {})
print(" Client:")
print(f" ID: {client.get('@id', 'N/A')}")
print(f" Type: {client.get('@type', 'N/A')}")
print(f" Name: {client.get('name', 'N/A')}")
print(f" Club Card Number: {client.get('club_card_num', 'N/A')}")
# Финансовые данные
print(f" Sum: {invoice.get('sum', 'N/A')}")
print(f" Company Number: {invoice.get('comp_num', 'N/A')}")
print(f" Bonus: {invoice.get('bonus', 'N/A')}")
print(f" Start Bonus: {invoice.get('start_bonus', 'N/A')}")
print(f" Deposit Sum: {invoice.get('deposit_sum', 'N/A')}")
print(f" Notes: {invoice.get('notes', 'N/A')}")
print("-" * 60)
def print_view(view):
"""
Выводит информацию о навигации (пагинация) коллекции.
"""
print("\nНавигация коллекции:")
print(f" View ID: {view.get('@id', 'N/A')}")
print(f" Type: {view.get('@type', 'N/A')}")
print(f" First page: {view.get('first', 'N/A')}")
print(f" Last page: {view.get('last', 'N/A')}")
print(f" Previous page: {view.get('previous', 'N/A')}")
print(f" Next page: {view.get('next', 'N/A')}")
def print_search(search):
"""
Выводит информацию о параметрах поиска.
"""
print("\nПараметры поиска:")
print(f" Type: {search.get('@type', 'N/A')}")
print(f" Template: {search.get('template', 'N/A')}")
print(f" Variable Representation: {search.get('variableRepresentation', 'N/A')}")
mapping = search.get('mapping', [])
if mapping:
print(" Mapping:")
for m in mapping:
print(f" Variable: {m.get('variable', 'N/A')}")
print(f" Property: {m.get('property', 'N/A')}")
print(f" Required: {m.get('required', 'N/A')}")
else:
print(" Mapping: N/A")
def print_invoices_data(data):
"""
Анализирует и выводит всю информацию, полученную от API.
"""
total_items = data.get("totalItems", 0)
print(f"\nОбщее количество счетов: {total_items}\n")
# Разбор счетов
members = data.get("member", [])
if members:
print("Счета:")
for invoice in members:
print_invoice(invoice)
else:
print("Счета не найдены.")
# Разбор навигационной информации
view = data.get("view")
if view:
print_view(view)
else:
print("\nИнформация о навигации не предоставлена.")
# Разбор параметров поиска
search = data.get("search")
if search:
print_search(search)
else:
print("\nИнформация о параметрах поиска не предоставлена.")
if __name__ == '__main__':
base_url = "http://10.8.0.4:8000/api/invoices"
params = {
"page": 1,
"created_at[before]": "2025-03-05", # можно изменить диапазон дат по необходимости
"created_at[after]": "2025-02-01"
}
api_key = os.getenv("API_KEY") # Если API-ключ не требуется, можно оставить None
data = fetch_invoices(base_url, api_key, params)
if data is not None:
print_invoices_data(data)
else:
print("Не удалось получить данные счетов с API.")