// 🧱 ETAPA 1 — MODELAGEM (bem simples) | 📌 Entidades principais
// Classe	O que representa | Cliente	Quem faz o pedido | Produto	O que é vendido | Pedido	A compra
// ItemPedido	Produto + quantidade | StatusPedido	Situação do pedido | SistemaERP	Classe principal / menu

// 📂 ETAPA 2 — Estrutura do projeto
// erp-pedidos
// │
//   ├── pom.xml
//   │
//   └── src/main/java/com/joaodddev
//       ├── Main.java
//       │
//       ├── model
//    │      ├── Cliente.java
//    │      ├── Produto.java
//    │      ├── Pedido.java
//    │      ├── ItemPedido.java
//    │      └── StatusPedido.java
//       │
//       └── service
//           └── RelatorioService.java

// 🧍 1️⃣ Cliente.java | 📁 model/Cliente.java
package com.joaodddev.model;

public class Cliente {

    private int id;
    private String nome;

    public Cliente(int id, String nome) {
        this.id = id;
        this.nome = nome;
    }

    public int getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }
}

// 📦 2️⃣ Produto.java | 📁 model/Produto.java
package com.joaodddev.model;

public class Produto {

    private int id;
    private String nome;
    private double preco;

    public Produto(int id, String nome, double preco) {
        this.id = id;
        this.nome = nome;
        this.preco = preco;
    }

    public int getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public double getPreco() {
        return preco;
    }
}

// 🧾 3️⃣ StatusPedido (ENUM) | 📁 model/StatusPedido.java
package com.joaodddev.model;

public enum StatusPedido {
    CRIADO,
    FATURADO,
    CANCELADO
}

// 🧮 4️⃣ ItemPedido.java (composição) | 📁 model/ItemPedido.java
package com.joaodddev.model;

public class ItemPedido {

    private Produto produto;
    private int quantidade;

    public ItemPedido(Produto produto, int quantidade) {
        this.produto = produto;
        this.quantidade = quantidade;
    }

    public double getSubtotal() {
        return produto.getPreco() * quantidade;
    }

    public Produto getProduto() {
        return produto;
    }

    public int getQuantidade() {
        return quantidade;
    }
}

// 📋 5️⃣ Pedido.java | 📁 model/Pedido.java
package com.joaodddev.model;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class Pedido {

    private int id;
    private Cliente cliente;
    private LocalDate data;
    private StatusPedido status;
    private List<ItemPedido> itens;

    public Pedido(int id, Cliente cliente) {
        this.id = id;
        this.cliente = cliente;
        this.data = LocalDate.now();
        this.status = StatusPedido.CRIADO;
        this.itens = new ArrayList<>();
    }

    public void adicionarItem(ItemPedido item) {
        itens.add(item);
    }

    public double calcularTotal() {
        double total = 0;
        for (ItemPedido item : itens) {
            total += item.getSubtotal();
        }
        return total;
    }

    public void faturar() {
        this.status = StatusPedido.FATURADO;
    }

    public int getId() {
        return id;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public StatusPedido getStatus() {
        return status;
    }

    public LocalDate getData() {
        return data;
    }

    public List<ItemPedido> getItens() {
        return itens;
    }
}

// 🧾 6️⃣ RelatorioService.java | 📁 service/RelatorioService.java
package com.joaodddev.service;

import com.joaodddev.model.Pedido;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class RelatorioService {

    public static void exportarCSV(List<Pedido> pedidos) {

        try (FileWriter writer = new FileWriter("pedidos.csv")) {

            writer.write("ID,Cliente,Data,Status,Total\n");

            for (Pedido p : pedidos) {
                writer.write(
                        p.getId() + "," +
                        p.getCliente().getNome() + "," +
                        p.getData() + "," +
                        p.getStatus() + "," +
                        p.calcularTotal() + "\n"
                );
            }

            System.out.println("Arquivo CSV gerado com sucesso!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 🖥 7️⃣ Main.java (menu) | 📁 Main.java
package com.joaodddev;

import com.joaodddev.model.*;
import com.joaodddev.service.RelatorioService;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    private static List<Pedido> pedidos = new ArrayList<>();
    private static int contadorPedidos = 1;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        Cliente clientePadrao = new Cliente(1, "Empresa XPTO");

        Produto p1 = new Produto(1, "Notebook", 3500.00);
        Produto p2 = new Produto(2, "Mouse", 150.00);

        int opcao;

        do {
            System.out.println("\n===== MENU ERP =====");
            System.out.println("1 - Criar novo pedido");
            System.out.println("2 - Listar pedidos");
            System.out.println("3 - Faturar pedido");
            System.out.println("4 - Filtrar pedidos por período");
            System.out.println("5 - Exportar pedidos para CSV");
            System.out.println("0 - Sair");

            opcao = scanner.nextInt();

            switch (opcao) {

                case 1:
                    Pedido pedido = new Pedido(contadorPedidos++, clientePadrao);
                    pedido.adicionarItem(new ItemPedido(p1, 1));
                    pedido.adicionarItem(new ItemPedido(p2, 2));
                    pedidos.add(pedido);
                    System.out.println("Pedido criado com sucesso!");
                    break;

                case 2:
                    listarPedidos(pedidos);
                    break;

                case 3:
                    System.out.print("Digite o ID do pedido: ");
                    int id = scanner.nextInt();
                    faturarPedido(id);
                    break;

                case 4:
                    filtrarPorPeriodo(scanner);
                    break;

                case 5:
                    RelatorioService.exportarCSV(pedidos);
                    break;
            }

        } while (opcao != 0);

        scanner.close();
    }

    private static void listarPedidos(List<Pedido> lista) {
        for (Pedido p : lista) {
            System.out.println("Pedido #" + p.getId()
                    + " | Cliente: " + p.getCliente().getNome()
                    + " | Data: " + p.getData()
                    + " | Status: " + p.getStatus()
                    + " | Total: R$ " + p.calcularTotal());
        }
    }

    private static void faturarPedido(int id) {
        for (Pedido p : pedidos) {
            if (p.getId() == id) {
                p.faturar();
                System.out.println("Pedido faturado!");
                return;
            }
        }
        System.out.println("Pedido não encontrado!");
    }

    // ====== ETAPA 2 entra aqui ======
    private static void filtrarPorPeriodo(Scanner scanner) {

        System.out.print("Data inicial (AAAA-MM-DD): ");
        LocalDate inicio = LocalDate.parse(scanner.next());

        System.out.print("Data final (AAAA-MM-DD): ");
        LocalDate fim = LocalDate.parse(scanner.next());

        List<Pedido> filtrados = new ArrayList<>();

        for (Pedido p : pedidos) {
            if (!p.getData().isBefore(inicio) && !p.getData().isAfter(fim)) {
                filtrados.add(p);
            }
        }

        listarPedidos(filtrados);
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: