Bläddra i källkod

Implementação da solicitação de registro de CPR CERC.

Ranghetti 4 månader sedan
förälder
incheckning
a74ced6fb4
33 ändrade filer med 1176 tillägg och 2 borttagningar
  1. 41 1
      src/main/java/com/platform2easy/genesis/domain/mock/DatabaseFake.java
  2. 36 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/AgenteCpr.java
  3. 37 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Area.java
  4. 35 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/AreaProduto.java
  5. 46 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/ContratoValorCpr.java
  6. 25 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Credor.java
  7. 29 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Devedor.java
  8. 32 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/EmissaoCpr.java
  9. 25 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Garantia.java
  10. 30 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Garantidor.java
  11. 30 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/ParcelaCpr.java
  12. 45 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/Produto.java
  13. 46 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/ProdutoArea.java
  14. 45 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/SolicitacaoRegistroCpr.java
  15. 5 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/StatusSolicitacaoRegistroCpr.java
  16. 5 0
      src/main/java/com/platform2easy/genesis/domain/model/cerc/TipoCpr.java
  17. 7 0
      src/main/java/com/platform2easy/genesis/domain/repository/cerc/ContratoValorCprRepository.java
  18. 7 0
      src/main/java/com/platform2easy/genesis/domain/repository/cerc/EmissaoCprRepository.java
  19. 7 0
      src/main/java/com/platform2easy/genesis/domain/repository/cerc/SolicitacaoRegistroCprRepository.java
  20. 34 0
      src/main/java/com/platform2easy/genesis/domain/service/cerc/ContratoValorCprService.java
  21. 33 0
      src/main/java/com/platform2easy/genesis/domain/service/cerc/EmissaoCprService.java
  22. 36 0
      src/main/java/com/platform2easy/genesis/domain/service/cerc/SolicitacaoRegistroCprService.java
  23. 1 0
      src/main/java/com/platform2easy/genesis/security/config/SecurityConfiguration.java
  24. 63 0
      src/main/java/com/platform2easy/genesis/web/controller/cerc/ContratoValorCprController.java
  25. 65 0
      src/main/java/com/platform2easy/genesis/web/controller/cerc/EmissaoCprController.java
  26. 78 0
      src/main/java/com/platform2easy/genesis/web/controller/cerc/SolicitacaoRegistroCprController.java
  27. 48 0
      src/main/resources/templates/cpr/contract/form.html
  28. 57 0
      src/main/resources/templates/cpr/contract/list.html
  29. 41 0
      src/main/resources/templates/cpr/emission/form.html
  30. 54 0
      src/main/resources/templates/cpr/emission/list.html
  31. 49 0
      src/main/resources/templates/cpr/register/form.html
  32. 64 0
      src/main/resources/templates/cpr/register/list.html
  33. 20 1
      src/main/resources/templates/fragments/menu.html

+ 41 - 1
src/main/java/com/platform2easy/genesis/domain/mock/DatabaseFake.java

@@ -2,24 +2,64 @@ package com.platform2easy.genesis.domain.mock;
 
 import com.platform2easy.genesis.domain.enums.UserRole;
 import com.platform2easy.genesis.domain.model.User2Easy;
+import com.platform2easy.genesis.domain.model.cerc.ContratoValorCpr;
+import com.platform2easy.genesis.domain.model.cerc.EmissaoCpr;
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.model.cerc.StatusSolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.model.cerc.TipoCpr;
 import com.platform2easy.genesis.domain.repository.UserRepository;
+import com.platform2easy.genesis.domain.repository.cerc.ContratoValorCprRepository;
+import com.platform2easy.genesis.domain.repository.cerc.EmissaoCprRepository;
+import com.platform2easy.genesis.domain.repository.cerc.SolicitacaoRegistroCprRepository;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.core.annotation.Order;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
 @Component
 @Order(1)
 public class DatabaseFake implements CommandLineRunner {
 
     private final UserRepository userRepository;
+    private final EmissaoCprRepository emissaoCprRepository;
+    private final ContratoValorCprRepository contratoValorCprRepository;
+    private final SolicitacaoRegistroCprRepository solicitacaoRegistroCprRepository;
 
-    public DatabaseFake(UserRepository userRepository) {
+    public DatabaseFake(UserRepository userRepository, EmissaoCprRepository emissaoCprRepository, ContratoValorCprRepository contratoValorCprRepository, SolicitacaoRegistroCprRepository solicitacaoRegistroCprRepository) {
         this.userRepository = userRepository;
+        this.emissaoCprRepository = emissaoCprRepository;
+        this.contratoValorCprRepository = contratoValorCprRepository;
+        this.solicitacaoRegistroCprRepository = solicitacaoRegistroCprRepository;
     }
 
+
     @Override
     public void run(String... args) {
+        var contrato = new ContratoValorCpr();
+        contrato.setCodigoContratoOperacaoCredito("TF123");
+        contrato.setValorTotalCredito(new BigDecimal(10000));
+        contrato.setValorLiquidoCredito(new BigDecimal(10000));
+        contrato.setNaturezaOperacao("YU899");
+        contrato.setDataTransacao(LocalDate.now());
+        contratoValorCprRepository.save(contrato);
+
+        var emissao = new EmissaoCpr();
+        emissao.setLocalEmissao("Paraná");
+        emissao.setDataEntrega(LocalDate.now());
+        emissao.setRazaoSocialEmissor("TOO EASY TRADING COMMODITIES LTDA");
+        emissao.setTipoCpr(TipoCpr.FINANCEIRO);
+        emissaoCprRepository.save(emissao);
+
+        var registro = new SolicitacaoRegistroCpr();
+        registro.setStatus(StatusSolicitacaoRegistroCpr.NOVO);
+        registro.setAditivo("Milho seco em grãos, padrão comercial tipo exportação");
+        registro.setContratoValorCpr(contrato);
+        registro.setEmissaoCpr(emissao);
+        solicitacaoRegistroCprRepository.save(registro);
+
         userRepository.save(new User2Easy(null, "admin", new BCryptPasswordEncoder().encode("admin"), "Administrador", UserRole.ADMIN));
         userRepository.save(new User2Easy(null, "operador", new BCryptPasswordEncoder().encode("1234"), "Operador Escrow", UserRole.ESCROW_USER));
         userRepository.save(new User2Easy(null, "produtor", new BCryptPasswordEncoder().encode("1234"), "Produtor", UserRole.TRADER_USER));

+ 36 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/AgenteCpr.java

@@ -0,0 +1,36 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class AgenteCpr {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private String celularEmissor;
+    private String cepEmissor;
+    private List<Credor> credores;
+    private String detentorCarteira;
+    private String detentorCnpj;
+    private List<Devedor> devedores;
+    private String emailEmissor;
+    private String emissorAgenciaCredito;
+    private String emissorBancoCredito;
+    private String emissorContaCorrenteCredito;
+    private List<Garantidor> garantidores;
+    private String numeroDocumentoEmissor;
+    private Integer tipoPessoaEmissor;
+}

+ 37 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Area.java

@@ -0,0 +1,37 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Area {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private BigDecimal areaTotal;
+    private String cartorio;
+    private String cep;
+    private String endereco;
+    private String fracaoUnitariaImovel;
+    private BigDecimal latitude;
+    private BigDecimal longitude;
+    private String matricula;
+    private String nomeFazenda;
+    private List<Produto> produtos;
+    private String proprietario;
+    private BigDecimal reservaLegal;
+    private Boolean status;
+}

+ 35 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/AreaProduto.java

@@ -0,0 +1,35 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.*;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class AreaProduto {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private BigDecimal areaTotal;
+    private String cartorio;
+    private String cep;
+    private String endereco;
+    private String fracaoUnitariaImovel;
+    private BigDecimal latitude;
+    private BigDecimal longitude;
+    private String matricula;
+    private String nomeFazenda;
+    private String proprietario;
+    private BigDecimal reservaLegal;
+    private Boolean status;
+
+
+
+}

+ 46 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/ContratoValorCpr.java

@@ -0,0 +1,46 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class ContratoValorCpr {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private Boolean autorizoRegistroEDeclaroQueFoiDadoBaixaNoRegistroEmQuaisquerOutrasIf;
+    private String codigoContratoOperacaoCredito;
+    private String codigoContratoScr;
+    private String codigoMoeda;
+
+    private LocalDateTime dataBaixaOutraIf;
+    private LocalDateTime dataContratoSistemaIF;
+    private LocalDateTime dataRegistroOriginal;
+    private LocalDate dataTransacao;
+
+    private String identificacaoPadronizadaOperacaoCredito;
+    private String indexacao;
+    private String naturezaOperacao;
+    private BigDecimal percentualIndexador;
+    private Integer quantidadeParcelaContratada;
+    private String referenciaExterna;
+    private BigDecimal taxaJurosOperacao;
+    private String tipoAtivo;
+    private BigDecimal valorFinanciadoContrato;
+    private BigDecimal valorLiquidoCredito;
+    private BigDecimal valorTotalCredito;
+}

+ 25 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Credor.java

@@ -0,0 +1,25 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Credor {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private String credorNumeroDocumento;
+    private Boolean credorStatus;
+    private Integer credorTipoPessoa;
+    private LocalDateTime dataEndosso;
+    private Boolean endossatario;
+
+}

+ 29 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Devedor.java

@@ -0,0 +1,29 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Devedor {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private String devedorCep;
+    private String devedorEmail;
+    private String devedorNomeRazaoSocial;
+    private String devedorNumeroCelular;
+    private String devedorNumeroDocumento;
+    private Boolean devedorStatus;
+    private Integer devedorTipoPessoa;
+}

+ 32 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/EmissaoCpr.java

@@ -0,0 +1,32 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+
+@Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class EmissaoCpr {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private LocalDate dataEntrega;
+    private String localEmissao;
+    private String razaoSocialEmissor;
+
+    @Enumerated(EnumType.STRING)
+    private TipoCpr tipoCpr;
+}

+ 25 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Garantia.java

@@ -0,0 +1,25 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+@Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Garantia {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Integer id;
+
+    private Boolean garantia_status;
+    private String tipoGarantia;
+
+}

+ 30 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Garantidor.java

@@ -0,0 +1,30 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Garantidor {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id")
+    private Long id;
+
+    private String celularGarantidor;
+    private String emailGarantidor;
+    private String garantidorCep;
+    private String garantidorNumeroDocumento;
+    private Boolean garantidorStatus;
+    private Integer garantidorTipoPessoa;
+    private Integer tipoGarantidor;
+
+}

+ 30 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/ParcelaCpr.java

@@ -0,0 +1,30 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class ParcelaCpr {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Integer id;
+
+    private Integer numeroParcela;
+    private String codigoControleParcelaContratoIf;
+    private String dataVencimentoParcela;
+    private BigDecimal precoCessaoParcela;
+    private Integer status;
+    private BigDecimal valorParcela;
+    private BigDecimal valorPrincipalParcela;
+}

+ 45 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/Produto.java

@@ -0,0 +1,45 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class Produto {
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private BigDecimal areaNecessariaCpr;
+    private BigDecimal areaProdutivaTotal;
+    private String classeTipoPh;
+    private String cultura;
+    private String especificidadeCultura;
+    private String formaAcondicionamento;
+    private String indiceApuracaoProduto;
+    private String instituicaoResponsavelIndice;
+    private String localEntregaCidade;
+    private String localEntregaRegional;
+    private String localEntregaUf;
+    private BigDecimal precoVolume;
+    private String producao;
+    private String produtividade;
+    private String safra;
+    private String situacao;
+    private Boolean status;
+    private String unidadeMedidaVolume;
+    private BigDecimal valorRegistro;
+    private String volumeQuantidade;
+
+
+}

+ 46 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/ProdutoArea.java

@@ -0,0 +1,46 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+//todo @Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class ProdutoArea {
+
+    //todo @Id
+    //todo @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Integer id;
+
+    private BigDecimal areaNecessariaCpr;
+    private BigDecimal areaProdutivaTotal;
+    private List<AreaProduto> areas;
+    private String classeTipoPh;
+    private String cultura;
+    private String especificidadeCultura;
+    private String formaAcondicionamento;
+    private String indiceApuracaoProduto;
+    private String instituicaoResponsavelIndice;
+    private String localEntregaCidade;
+    private String localEntregaRegional;
+    private String localEntregaUf;
+    private BigDecimal precoVolume;
+    private String producao;
+    private String produtividade;
+    private String safra;
+    private String situacao;
+    private Boolean status;
+    private String unidadeMedidaVolume;
+    private BigDecimal valorRegistro;
+    private String volumeQuantidade;
+}

+ 45 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/SolicitacaoRegistroCpr.java

@@ -0,0 +1,45 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Entity
+@Getter
+@Setter
+@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+public class SolicitacaoRegistroCpr {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @EqualsAndHashCode.Include
+    private Long id;
+
+    private String aditivo;
+
+    //todo private AgenteCpr agenteCpr;
+    //todo private List<Area> areas;
+
+    @ManyToOne
+    private ContratoValorCpr contratoValorCpr;
+
+    @ManyToOne
+    private EmissaoCpr emissaoCpr;
+
+    //todo private List<Garantia> garantias;
+    //todo private List<ParcelaCpr> parcelas;
+    //todo private List<ProdutoArea> produtos;
+
+    @Enumerated(EnumType.STRING)
+    private StatusSolicitacaoRegistroCpr status;
+}

+ 5 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/StatusSolicitacaoRegistroCpr.java

@@ -0,0 +1,5 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+public enum StatusSolicitacaoRegistroCpr {
+    NOVO, ACEITO, LIQUIDADO, RECUSADO, CANCELADO
+}

+ 5 - 0
src/main/java/com/platform2easy/genesis/domain/model/cerc/TipoCpr.java

@@ -0,0 +1,5 @@
+package com.platform2easy.genesis.domain.model.cerc;
+
+public enum TipoCpr {
+    FISICO, FINANCEIRO
+}

+ 7 - 0
src/main/java/com/platform2easy/genesis/domain/repository/cerc/ContratoValorCprRepository.java

@@ -0,0 +1,7 @@
+package com.platform2easy.genesis.domain.repository.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.ContratoValorCpr;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ContratoValorCprRepository extends JpaRepository<ContratoValorCpr, Long> {
+}

+ 7 - 0
src/main/java/com/platform2easy/genesis/domain/repository/cerc/EmissaoCprRepository.java

@@ -0,0 +1,7 @@
+package com.platform2easy.genesis.domain.repository.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.EmissaoCpr;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface EmissaoCprRepository extends JpaRepository<EmissaoCpr, Long> {
+}

+ 7 - 0
src/main/java/com/platform2easy/genesis/domain/repository/cerc/SolicitacaoRegistroCprRepository.java

@@ -0,0 +1,7 @@
+package com.platform2easy.genesis.domain.repository.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface SolicitacaoRegistroCprRepository extends JpaRepository<SolicitacaoRegistroCpr, Long> {
+}

+ 34 - 0
src/main/java/com/platform2easy/genesis/domain/service/cerc/ContratoValorCprService.java

@@ -0,0 +1,34 @@
+package com.platform2easy.genesis.domain.service.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.ContratoValorCpr;
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.repository.cerc.ContratoValorCprRepository;
+import jakarta.transaction.Transactional;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class ContratoValorCprService {
+
+    private final ContratoValorCprRepository repository;
+
+    @Transactional
+    public void save(ContratoValorCpr entity) {
+        repository.save(entity);
+    }
+    public ContratoValorCpr getById(Long id) {
+        return repository.findById(id).orElse(new ContratoValorCpr());
+    }
+
+    public void delete(Long id) {
+        repository.deleteById(id);
+    }
+
+    public List<ContratoValorCpr> listAll() {
+        return repository.findAll();
+    }
+
+}

+ 33 - 0
src/main/java/com/platform2easy/genesis/domain/service/cerc/EmissaoCprService.java

@@ -0,0 +1,33 @@
+package com.platform2easy.genesis.domain.service.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.EmissaoCpr;
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.repository.cerc.EmissaoCprRepository;
+import jakarta.transaction.Transactional;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class EmissaoCprService {
+
+    private final EmissaoCprRepository repository;
+
+    @Transactional
+    public void save(EmissaoCpr enity) {
+        repository.save(enity);
+    }
+    public EmissaoCpr getById(Long id) {
+        return repository.findById(id).orElse(new EmissaoCpr());
+    }
+
+    public void delete(Long id) {
+        repository.deleteById(id);
+    }
+
+    public List<EmissaoCpr> listAll() {
+        return repository.findAll();
+    }
+}

+ 36 - 0
src/main/java/com/platform2easy/genesis/domain/service/cerc/SolicitacaoRegistroCprService.java

@@ -0,0 +1,36 @@
+package com.platform2easy.genesis.domain.service.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.model.cerc.StatusSolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.repository.cerc.SolicitacaoRegistroCprRepository;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class SolicitacaoRegistroCprService {
+
+    private final SolicitacaoRegistroCprRepository repository;
+
+    @Transactional
+    public void save(SolicitacaoRegistroCpr entity) {
+        if (entity.getId() == null) entity.setStatus(StatusSolicitacaoRegistroCpr.NOVO);
+
+        repository.save(entity);
+    }
+
+    public SolicitacaoRegistroCpr getById(Long id) {
+        return repository.findById(id).orElse(new SolicitacaoRegistroCpr());
+    }
+
+    public void delete(Long id) {
+        repository.deleteById(id);
+    }
+
+    public List<SolicitacaoRegistroCpr> listAll() {
+        return repository.findAll();
+    }
+}

+ 1 - 0
src/main/java/com/platform2easy/genesis/security/config/SecurityConfiguration.java

@@ -41,6 +41,7 @@ public class SecurityConfiguration {
                 .cors(Customizer.withDefaults())
                 .exceptionHandling(Customizer.withDefaults())
                 .httpBasic(Customizer.withDefaults())
+                .headers(headers -> headers.frameOptions(frameOptionsConfig -> frameOptionsConfig.sameOrigin()))//liberar o banco
                 .authorizeHttpRequests(auth -> auth
                         .requestMatchers("/login", "/images/**", "/css/**", "/error/**").permitAll()
                         .requestMatchers(HttpMethod.POST, "/authentication/login").permitAll()

+ 63 - 0
src/main/java/com/platform2easy/genesis/web/controller/cerc/ContratoValorCprController.java

@@ -0,0 +1,63 @@
+package com.platform2easy.genesis.web.controller.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.ContratoValorCpr;
+import com.platform2easy.genesis.domain.service.cerc.ContratoValorCprService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("cpr/contract")
+@AllArgsConstructor
+public class ContratoValorCprController {
+
+    private static final String FORM = "cpr/contract/form";
+    private static final String LIST = "cpr/contract/list";
+    private static final String REDIRECT_ALL = "redirect:/cpr/contract/all";
+    private static final String TITLE_PAGE = "titlePage";
+
+
+    private final ContratoValorCprService service;
+
+    private String openForm(ContratoValorCpr cprContract, String title, Model model) {
+        model.addAttribute(TITLE_PAGE, title);
+        model.addAttribute("cprContract", cprContract);
+        return FORM;
+    }
+
+    @GetMapping()
+    public String init(ContratoValorCpr cprContract, Model model) {
+        return openForm(cprContract, "Cadastrar Contrato de CPR", model);
+    }
+
+    @GetMapping("edit/{id}")
+    public String edit(@PathVariable Long id, Model model) {
+        return openForm(service.getById(id), "Editar Contrato de CPR", model);
+    }
+
+    @PostMapping()
+    public String save(@ModelAttribute ContratoValorCpr cprContract) {
+        service.save(cprContract);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("remove/{id}")
+    public String remove(@PathVariable Long id, Model model) {
+        service.delete(id);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("all")
+    public String listAll(Model model) {
+        model.addAttribute(TITLE_PAGE, "Contratos de CPR's");
+        model.addAttribute("cprContracts", service.listAll());
+        return LIST;
+    }
+
+
+}

+ 65 - 0
src/main/java/com/platform2easy/genesis/web/controller/cerc/EmissaoCprController.java

@@ -0,0 +1,65 @@
+package com.platform2easy.genesis.web.controller.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.ContratoValorCpr;
+import com.platform2easy.genesis.domain.model.cerc.EmissaoCpr;
+import com.platform2easy.genesis.domain.service.cerc.ContratoValorCprService;
+import com.platform2easy.genesis.domain.service.cerc.EmissaoCprService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("cpr/emission")
+@AllArgsConstructor
+public class EmissaoCprController {
+
+    private static final String FORM = "cpr/emission/form";
+    private static final String LIST = "cpr/emission/list";
+    private static final String REDIRECT_ALL = "redirect:/cpr/emission/all";
+    private static final String TITLE_PAGE = "titlePage";
+
+
+    private final EmissaoCprService service;
+
+    private String openForm(EmissaoCpr cprEmission, String title, Model model) {
+        model.addAttribute(TITLE_PAGE, title);
+        model.addAttribute("cprEmission", cprEmission);
+        return FORM;
+    }
+
+    @GetMapping()
+    public String init(EmissaoCpr cprEmission, Model model) {
+        return openForm(cprEmission, "Cadastrar Emissão de CPR", model);
+    }
+
+    @GetMapping("edit/{id}")
+    public String edit(@PathVariable Long id, Model model) {
+        return openForm(service.getById(id), "Editar Emissão de CPR", model);
+    }
+
+    @PostMapping()
+    public String save(@ModelAttribute EmissaoCpr cprEmission) {
+        service.save(cprEmission);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("remove/{id}")
+    public String remove(@PathVariable Long id, Model model) {
+        service.delete(id);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("all")
+    public String listAll(Model model) {
+        model.addAttribute(TITLE_PAGE, "Emissões de CPR's");
+        model.addAttribute("cprEmissions", service.listAll());
+        return LIST;
+    }
+
+
+}

+ 78 - 0
src/main/java/com/platform2easy/genesis/web/controller/cerc/SolicitacaoRegistroCprController.java

@@ -0,0 +1,78 @@
+package com.platform2easy.genesis.web.controller.cerc;
+
+import com.platform2easy.genesis.domain.model.cerc.SolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.model.cerc.StatusSolicitacaoRegistroCpr;
+import com.platform2easy.genesis.domain.service.cerc.ContratoValorCprService;
+import com.platform2easy.genesis.domain.service.cerc.EmissaoCprService;
+import com.platform2easy.genesis.domain.service.cerc.SolicitacaoRegistroCprService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("cpr/register")
+@AllArgsConstructor
+public class SolicitacaoRegistroCprController {
+
+    private static final String FORM = "cpr/register/form";
+    private static final String LIST = "cpr/register/list";
+    private static final String REDIRECT_ALL = "redirect:/cpr/register/all";
+    private static final String TITLE_PAGE = "titlePage";
+
+
+    private final SolicitacaoRegistroCprService service;
+    private final ContratoValorCprService contratoValorCprService;
+    private final EmissaoCprService emissaoCprService;
+
+    private String openForm(SolicitacaoRegistroCpr cprRegister, String title, Model model) {
+        model.addAttribute(TITLE_PAGE, title);
+        model.addAttribute("cprRegister", cprRegister);
+        model.addAttribute("contracts", contratoValorCprService.listAll());
+        model.addAttribute("emissions", emissaoCprService.listAll());
+        return FORM;
+    }
+
+    @GetMapping()
+    public String init(SolicitacaoRegistroCpr cprRegister, Model model) {
+        return openForm(cprRegister, "Registrar CPR", model);
+    }
+
+    @GetMapping("edit/{id}")
+    public String edit(@PathVariable Long id, Model model) {
+        return openForm(service.getById(id), "Registro de CPR", model);
+    }
+
+    @GetMapping("send/{id}")
+    public String send(@PathVariable Long id, Model model) {
+        var registro = service.getById(id);
+        registro.setStatus(StatusSolicitacaoRegistroCpr.ACEITO);
+        service.save(registro);
+        return REDIRECT_ALL;
+    }
+
+    @PostMapping()
+    public String save(@ModelAttribute SolicitacaoRegistroCpr cprRegister) {
+        service.save(cprRegister);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("remove/{id}")
+    public String remove(@PathVariable Long id, Model model) {
+        service.delete(id);
+        return REDIRECT_ALL;
+    }
+
+    @GetMapping("all")
+    public String listAll(Model model) {
+        model.addAttribute(TITLE_PAGE, "Registros de CPR's");
+        model.addAttribute("cprRegisters", service.listAll());
+        return LIST;
+    }
+
+
+}

+ 48 - 0
src/main/resources/templates/cpr/contract/form.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <h1 class="mb-4" th:text="${titlePage}"></h1>
+                <form th:object="${cprContract}">
+                    <div class="mb-3">
+                        <input hidden="true" th:field="*{id}">
+
+                        <label class="form-label" for="codigoContratoOperacaoCredito">Código Contrato da Operação de Crédito</label>
+                        <input class="form-control" id="codigoContratoOperacaoCredito" th:field="*{codigoContratoOperacaoCredito}" required>
+
+                        <label class="form-label" for="naturezaOperacao">Natureza de Operação</label>
+                        <input class="form-control" id="naturezaOperacao" th:field="*{naturezaOperacao}" required>
+
+                        <label class="form-label" for="dataTransacao">Data da Transação</label>
+                        <input class="form-control" id="dataTransacao" th:field="*{dataTransacao}" type="date" required>
+
+                        <label class="form-label" for="valorLiquidoCredito">Valor Liquido do Crédito</label>
+                        <div class="input-group">
+                            <span class="input-group-text">R$</span>
+                            <input class="form-control autodecimal" id="valorLiquidoCredito" th:field="*{valorLiquidoCredito}" placeholder="0,00"
+                                   required>
+                        </div>
+
+                        <label class="form-label" for="valorTotalCredito">Valor Total do Crédito</label>
+                        <div class="input-group">
+                            <span class="input-group-text">R$</span>
+                            <input class="form-control autodecimal" id="valorTotalCredito" th:field="*{valorTotalCredito}" placeholder="0,00"
+                                   required>
+                        </div>
+                    </div>
+
+                    <button class="btn btn-dark" formmethod="post" th:formaction="@{/cpr/contract}" type="submit">Salvar</button>
+                </form>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 57 - 0
src/main/resources/templates/cpr/contract/list.html

@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <div class="d-flex align-items-center justify-content-between mb-4">
+                    <h1 class="mb-4" th:text="${titlePage}"></h1>
+                    <a th:href="@{/cpr/contract}" type="button" class="btn btn-outline-dark" title="Novo">
+                        <i class="bi bi-plus-square"></i>
+                    </a>
+                </div>
+                <table class="table table-hover">
+                    <thead>
+                    <tr>
+                        <th>Código</th>
+                        <th>Código Contrato</th>
+                        <th>Natureza de Operação</th>
+                        <th>Data Transação</th>
+                        <th>Valor Liquido Contrato</th>
+                        <th>Valor Total Contrato</th>
+                        <th>Ações</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr th:each="object : ${cprContracts}">
+                        <td th:text="${object.id}">0</td>
+                        <td th:text="${object.codigoContratoOperacaoCredito}">0</td>
+                        <td th:text="${object.naturezaOperacao}">0</td>
+                        <td th:text="${#temporals.format(object.dataTransacao, 'dd/MM/yyyy')}">0</td>
+                        <td th:text="${object.valorLiquidoCredito}">0</td>
+                        <td th:text="${object.valorTotalCredito}">0</td>
+
+                        <td>
+                            <a th:href="@{'/cpr/contract/edit/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Editar">
+                                <i class="bi bi-pencil-square"></i>
+                            </a>
+                            <a th:href="@{'/cpr/contract/remove/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Remover">
+                                <i class="bi bi-dash-square"></i>
+                            </a>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 41 - 0
src/main/resources/templates/cpr/emission/form.html

@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <h1 class="mb-4" th:text="${titlePage}"></h1>
+                <form th:object="${cprEmission}">
+                    <div class="mb-3">
+                        <input hidden="true" th:field="*{id}">
+
+                        <label class="form-label" for="razaoSocialEmissor">Razão Social do Emissor</label>
+                        <input class="form-control" id="razaoSocialEmissor" th:field="*{razaoSocialEmissor}" required>
+
+                        <label class="form-label" for="localEmissao">Local de Emissão</label>
+                        <input class="form-control" id="localEmissao" th:field="*{localEmissao}" required>
+
+                        <label class="form-label" for="dataEntrega">Data da Entrega</label>
+                        <input class="form-control" id="dataEntrega" th:field="*{dataEntrega}" type="date" required>
+
+                        <label class="form-label" for="tipoCpr">Tipo</label>
+                        <select class="form-select" id="tipoCpr" th:field="*{tipoCpr}" required>
+                            <option value="" selected="selected">Selecione...</option>
+                            <option value="FISICO">Físico</option>
+                            <option value="FINANCEIRO">Financeiro</option>
+                        </select>
+                    </div>
+
+                    <button class="btn btn-dark" formmethod="post" th:formaction="@{/cpr/emission}" type="submit">Salvar</button>
+                </form>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 54 - 0
src/main/resources/templates/cpr/emission/list.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <div class="d-flex align-items-center justify-content-between mb-4">
+                    <h1 class="mb-4" th:text="${titlePage}"></h1>
+                    <a th:href="@{/cpr/emission}" type="button" class="btn btn-outline-dark" title="Novo">
+                        <i class="bi bi-plus-square"></i>
+                    </a>
+                </div>
+                <table class="table table-hover">
+                    <thead>
+                    <tr>
+                        <th>Código</th>
+                        <th>Razão Social do Emissor</th>
+                        <th>Local de Emissão</th>
+                        <th>Data da Entrega</th>
+                        <th>Tipo</th>
+                        <th>Ações</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr th:each="object : ${cprEmissions}">
+                        <td th:text="${object.id}">0</td>
+                        <td th:text="${object.razaoSocialEmissor}">0</td>
+                        <td th:text="${object.localEmissao}">0</td>
+                        <td th:text="${#temporals.format(object.dataEntrega, 'dd/MM/yyyy')}">0</td>
+                        <td th:text="${object.tipoCpr}">0</td>
+                        <td>
+                            <a th:href="@{'/cpr/register/edit/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Editar">
+                                <i class="bi bi-pencil-square"></i>
+                            </a>
+                            <a th:href="@{'/cpr/register/remove/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Remover">
+                                <i class="bi bi-dash-square"></i>
+                            </a>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 49 - 0
src/main/resources/templates/cpr/register/form.html

@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <h1 class="mb-4" th:text="${titlePage}"></h1>
+                <form th:object="${cprRegister}">
+                    <div class="mb-3">
+                        <input hidden="true" th:field="*{id}">
+
+                        <label class="form-label" for="aditivo">Aditivo</label>
+                        <input class="form-control" id="aditivo" th:field="*{aditivo}" required>
+
+                        <label class="form-label" for="contratoValorCpr">Código Contrato</label>
+                        <select class="form-select" id="contratoValorCpr" th:field="*{contratoValorCpr}" required>
+                            <option value="" selected="selected">Selecione...</option>
+                            <option th:each="contract : ${contracts}"
+                            th:value="${contract.id}"
+                            th:text="${contract.codigoContratoOperacaoCredito}">
+                        </select>
+
+                        <label class="form-label" for="emissaoCpr">Emissor</label>
+                        <select class="form-select" id="emissaoCpr" th:field="*{emissaoCpr}" required>
+                            <option value="" selected="selected">Selecione...</option>
+                            <option th:each="emission : ${emissions}"
+                            th:value="${emission.id}"
+                            th:text="${emission.razaoSocialEmissor}">
+                        </select>
+
+                        <label class="form-label" for="status">Status</label>
+                        <input class="form-control" id="status" th:field="*{status}" disabled>
+
+                    </div>
+
+                    <button class="btn btn-dark" formmethod="post" th:formaction="@{/cpr/register}" type="submit">Salvar</button>
+
+                </form>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 64 - 0
src/main/resources/templates/cpr/register/list.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:replace="~{fragments/head :: head}">
+    <meta charset="UTF-8">
+    <title>Too Easy</title>
+</head>
+<body>
+<div th:replace="~{layout}">
+    <div th:fragment="content">
+        <section>
+            <div class="container p-4 shadow bg-white rounded">
+                <div class="d-flex align-items-center justify-content-between mb-4">
+                    <h1 class="mb-4" th:text="${titlePage}"></h1>
+                    <a th:href="@{/cpr/register}" type="button" class="btn btn-outline-dark" title="Novo">
+                        <i class="bi bi-plus-square"></i>
+                    </a>
+                </div>
+                <table class="table table-hover">
+                    <thead>
+                    <tr>
+                        <th>Código</th>
+                        <th>Adtivo</th>
+                        <th>Código Contrato</th>
+                        <th>Valor Contrato</th>
+                        <th>Local Emissão</th>
+                        <th>Data Entrega</th>
+                        <th>Status</th>
+                        <th>Ações</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr th:each="object : ${cprRegisters}">
+                        <td th:text="${object.id}">0</td>
+                        <td th:text="${object.aditivo}">0</td>
+                        <td th:text="${object.contratoValorCpr.codigoContratoOperacaoCredito}">0</td>
+                        <td th:text="${object.contratoValorCpr.valorTotalCredito}">0</td>
+
+                        <td th:text="${object.emissaoCpr.localEmissao}">0</td>
+                        <td th:text="${#temporals.format(object.emissaoCpr.dataEntrega, 'dd/MM/yyyy')}">0</td>
+
+                        <td th:text="${object.status}">0</td>
+                        <td>
+                            <a th:href="@{'/cpr/register/send/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Enviar">
+                                <i class="bi bi-send"></i>
+                            </a>
+                            <a th:href="@{'/cpr/register/edit/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Editar">
+                                <i class="bi bi-pencil-square"></i>
+                            </a>
+                            <a th:href="@{'/cpr/register/remove/' + ${object.id}}" type="button" class="btn btn-outline-dark"
+                               title="Remover">
+                                <i class="bi bi-dash-square"></i>
+                            </a>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </section>
+    </div>
+</div>
+</body>
+</html>

+ 20 - 1
src/main/resources/templates/fragments/menu.html

@@ -20,6 +20,16 @@
 <nav th:fragment="nav-mobileMenu" class="col-md-2 bg-dark sidebar collapse d-md-block" id="mobileMenu">
     <a th:href="@{/}">🏠 Início</a>
 
+    <a class="dropdown-toggle d-block text-white" data-bs-toggle="collapse" href="#cpr-submenu"
+       role="button" aria-expanded="false" aria-controls="cpr-submenu">
+        📝️ CPR
+    </a>
+    <div class="collapse ms-2" id="cpr-submenu">
+        <a th:href="@{/cpr/contract/all}" class="d-block text-white">📝️ Contrato</a>
+        <a th:href="@{/cpr/emission/all}" class="d-block text-white">📝️ Emissão</a>
+        <a th:href="@{/cpr/register/all}" class="d-block text-white">📝️ Registro</a>
+    </div>
+
     <a class="dropdown-toggle d-block text-white" data-bs-toggle="collapse" href="#commodities-submenu"
        role="button" aria-expanded="false" aria-controls="commodities-submenu">
         🛢️ Commodities
@@ -54,7 +64,16 @@
     </div>
 
     <a th:href="@{/user/listar}" sec:authorize="hasRole('ADMIN')">👥 Usuários</a>
-    <a href="#">⚙️ Configurações</a>
+
+    <a class="dropdown-toggle d-block text-white" data-bs-toggle="collapse" href="#config-subMenu"
+       role="button" aria-expanded="false" aria-controls="config-subMenu" sec:authorize="hasRole('ADMIN')">
+        ⚙️ Configurações
+    </a>
+    <div class="collapse ms-2" id="config-subMenu" sec:authorize="hasRole('ADMIN')">
+        <a th:href="@{/banco}" target="_blank" class="d-block text-white">🗄️ Banco de Dados H2</a>
+    </div>
+
+
     <a th:href="@{/logout}">🚪 Sair</a>
 </nav>
 </body>