Browse Source

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

Ranghetti 10 tháng trước cách đây
mục cha
commit
a74ced6fb4
33 tập tin đã thay đổi với 1176 bổ sung2 xóa
  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>