Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,22 @@
4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года.

## Автор решения
Кузьмина Наталья Вячеславовна

## Описание реализации

1. Для генерации этого отчета используется функция generate_report(data), которая принимает входные данные и возвращает строку в формате JSON.
2. Сначала открывается файл input.json и загружаются данные о заказах в формате JSON. Для этого используется стандартный модуль Python json.
3. Данные содержат заказы с разными статусами. Программа отбирает только те заказы, которые имеют статус "COMPLETED" (завершенный заказ). Другие статусы, такие как "CANCELED", "CREATED", или "DELIVERY", игнорируются.
4. Создается словарь словарь для хранения суммарных трат по месяцам. Используя модуль datetime, преобразуется строковое представление даты заказа в объект datetime. Затем извлекаются из этого объекта название месяца (в нижнем регистре) и суммирует значения поля "total", которое содержит общую стоимость заказа.
5. По итогу создается отчет в формате JSON, содержащий список месяцев с максимальными тратами.

## Инструкция по сборке и запуску решения

1. Сохраните JSON-файл с данными о заказах в файл input.json.
2. Запустите Python-скрипт report.py для выполнения отчета:

```
cd src
python report.py
```
38 changes: 38 additions & 0 deletions src/input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"user_id": "3acfb0b7-04bd-4978-be4c-3929372277c1",
"ordered_at": "2023-01-16T13:56:39.492",
"status": "COMPLETED",
"total": "1917.00"
},
{
"user_id": "25b003b9-ab22-4a24-a616-dd0303f983d8",
"ordered_at": "2023-03-05T08:34:21.123",
"status": "COMPLETED",
"total": "13990.00"
},
{
"user_id": "e1470ada-fcbb-4424-8c46-065b6409ca4b",
"ordered_at": "2016-03-16T13:56:39.492",
"status": "COMPLETED",
"total": "215.50"
},
{
"user_id": "081a47a5-b7bf-462c-a11a-68002a179152",
"ordered_at": "2023-12-08T21:36:59.281",
"status": "COMPLETED",
"total": "49499.00"
},
{
"user_id": "0999c6aa-1bac-4ded-9a54-92fff4f34d69",
"ordered_at": "2023-12-14T11:10:29.408",
"status": "CANCELED",
"total": "13650.00"
},
{
"user_id": "0999c6aa-1bac-4ded-9a54-92fff4f34d69",
"ordered_at": "2023-12-14T11:15:31.108",
"status": "COMPLETED",
"total": "14760.00"
}
]
34 changes: 34 additions & 0 deletions src/report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import json
from collections import defaultdict
from datetime import datetime

# Функция для формирования отчета о месяцах с наибольшими тратами
def generate_report(data):
# Словарь для хранения общей суммы трат по месяцам
monthly_expenses = defaultdict(float)

# Обработка данных
for record in data:
if record["status"] == "COMPLETED":
order_date = datetime.fromisoformat(record["ordered_at"])
month = order_date.strftime("%B").lower()
monthly_expenses[month] += float(record["total"])

# Определение максимальной суммы трат
max_expense = max(monthly_expenses.values())

# Определение месяцев с максимальными тратами
max_months = [month for month, expense in monthly_expenses.items() if expense == max_expense]

return json.dumps({"months": sorted(max_months)})

def run_report():
with open("input.json", "r") as f:
data = json.load(f)

report = generate_report(data)

print("Наибольший период трат:", report)

if __name__ == "__main__":
run_report()