OrderResponse.java

package cz.vsb.crm.dto;

import cz.vsb.crm.model.Account;
import cz.vsb.crm.model.Lead;
import cz.vsb.crm.model.Order;
import cz.vsb.crm.model.User;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

public record OrderResponse(
        Long id,
        Long accountId,
        String accountName,
        Long leadId,
        Long createdById,
        String createdByName,
        BigDecimal totalAmount,
        LocalDate orderDate,
        String status,
        String orderType,
        List<OrderLineResponse> products) {

    public static OrderResponse from(Order order) {
        Account account = order.getAccount();
        Lead lead = order.getLead();
        User createdBy = order.getCreatedBy();
        List<OrderLineResponse> products = order.getOrderProducts().stream()
                .map(OrderLineResponse::from)
                .toList();
        return new OrderResponse(
                order.getId(),
                account != null ? account.getId() : null,
                account != null ? account.getCompanyName() : null,
                lead != null ? lead.getId() : null,
                createdBy != null ? createdBy.getId() : null,
                createdBy != null ? createdBy.getUsername() : null,
                order.getTotalAmount(),
                order.getOrderDate(),
                order.getStatus(),
                order.getOrderType(),
                products);
    }
}