1

1
 avatar
unknown
plain_text
2 years ago
4.1 kB
2
Indexable
# список заказов в ЛК
# преобразование заказов из ретейла в формат, необходимый для фронта
def orders_serialize(orders):
    serialized_orders = []

    for order in orders:
        code = order["delivery"].get("code")
        address = order["delivery"].get("address", {})
        city = address.get("city", "")
        if order.get("orderMethod") == "newsletter":
            address = {"city": "Подписка на рассылку", "text": ""}
        else:
            if not address.get("street"):
                if order.get("shipmentStore"):
                    if not city:
                        store = Store.objects.filter(code=order["shipmentStore"]).first()
                        if store:
                            if store.city:
                                city = store.city

                    address = {
                        "city": city,
                        "text": "Розничный покупатель",
                        "street": "Розничный покупатель",
                    }
                else:
                    address = {
                        "city": city,
                        "text": "Самовывоз",
                        "street": "Самовывоз",
                    }

        items = []
        for item in order["items"]:
            if item.get("prices"):
                for price in item["prices"]:
                    i = {
                        "name": item["offer"]["name"],
                        "quantity": price["quantity"],
                        "price": price["price"],
                    }
                    items.append(i)
            else:
                i = {
                    "name": item["offer"]["name"],
                    "quantity": item["quantity"],
                    "price": item["initialPrice"],
                }
                items.append(i)

        status_code = order.get("status", "")
        status = OrderStatus.objects.filter(code=status_code).first()
        if status:
            status = status.get_response()
        else:
            status = OrderStatus.dummy_response(status_code)

        number1c = ""
        if order.get("customFields"):
            if isinstance(order["customFields"], dict):
                order["customFields"].get("number1c", "")
            else:
                capture_message(f"Неизвестный customFields - {order['customFields']}")

        orderMethod = OrderMethod.objects.filter(code=order["orderMethod"]).first()
        if orderMethod:
            orderMethod = orderMethod.get_response()['name']
        else:
            orderMethod = order["orderMethod"]

        data = {
            "id": order["id"],
            "paid": order["prepaySum"] == order["totalSumm"],
            "site": order.get("site"),
            "status": status,
            "number": order.get("number"),
            "number1c": number1c,
            "order_method": orderMethod,
            "lastName": order.get("lastName"),
            "firstName": order.get("firstName"),
            "patronymic": order.get("patronymic"),
            "summ": order.get("summ"),
            "totalSumm": order.get("totalSumm"),
            "partnerSumm": int(order.get("totalSumm", 0) * 0.5),
            "phone": order.get("phone"),
            "city": order["delivery"].get("city"),
            "createdAt": order["createdAt"],
            "storehouse": order.get("shipmentStore", ""),
            "customerCity": order.get("customer", {}).get("address", {}).get("city"),
            "contactCity": order.get("contact", {}).get("address", {}).get("city"),
            "companyCity": order.get("company", {}).get("address", {}).get("city"),
            "delivery": {
                "code": code,
                "address": address,
                "date": order["delivery"].get("date"),
                "time": order["delivery"].get("time"),
            },
            "items": items,
        }
        serialized_orders.append(data)

    return serialized_orders