domingo, 28 de junho de 2020

Contas Pagar/Receber - Parte IX - Retoques Finais Lançamento

IntroduĂ§Ă£o
Nesse nono post vou mostrar alguns recursos pra dar um toque final nos lançamentos de conta pagar e receber. Primeiro vou ajustar a tela de dados pra ficar com os campos bloqueados quando for acionado via aĂ§Ă£o dinĂ¢mica. Segundo vou ajustar os menus de acões Alterar e Excluir para ficar bloqueados caso a conta esteja baixado. Terceiro vou ajustar o atributo aberto do LancamentoEntity para true quando um conta for clonada. E pra finalizar vou adicionar os card's no dashboard de Contas Pagar, Contas Pago, Contas Receber, Contas Recebido.

Bloquear Tela Dados 
Quando a tela de dados for acionado via aĂ§Ă£o dinĂ¢mica vou mostrar como bloquear os campos, porque nĂ£o faz sentido alterar alguma informaĂ§Ă£o sendo que a tela foi acessada pra confirmar o cancelamento da baixa. Pra isso vou executar o mĂ©todo blockedMaster() na construĂ§Ă£o da action caso a aĂ§Ă£o seja dinĂ¢mica:
LancamentoDataAction.java:

@PostConstruct
private void init() {
tipoLancamento = TipoLancamentoType.abbreviationToEnum(JsfUtils.getParameterRequest("tipo"));
if (isStateInsert()) {
getEntity().setTipoLancamento(tipoLancamento);
} else if (isStateDynamic()) {
blockedMaster();
}
}

Executando a aĂ§Ă£o dinĂ¢mica:
No print acima podemos verificar que as ações de Alterar e Excluir estĂ£o desabilitadas porque a conta estĂ¡ baixado.

Bloquear AĂ§Ă£o CRUD 
Quando uma conta estiver baixado vou bloquear as ações de Alterar e Excluir. Porque nĂ£o faz sentido alterar ou apagar uma conta quando a mesma jĂ¡ foi baixado. Para isso vou adicionar as propriedades elChangeDisabled e elDeleteDisabled no e:divListaDatatable no lancamentoList.xhtml. Segue a implementaĂ§Ă£o:
<e:divListDatatable id="listEntityDataTableLancamento"
title="#{e:bundle('label.lista')} - #{lancamentoListAction.tipoLancamento.description}"
actionList="#{lancamentoListAction}" showColumnsTotalizer="true"
varRowDataTable="lancamento"
elChangeDisabled="#{(l -> not l.aberto)(lancamento)}"
elDeleteDisabled="#{(l -> not l.aberto)(lancamento)}"/>
E o resultado no menu:

@JArchEventCloneEntity 
Quando uma conta for clonada vou alterar o atributo aberto do LancamentoEntity para true. EntĂ£o mesmo que a clonagem de conta baixada a nova conta gerada ficara aberta. Pra essa soluĂ§Ă£o vou utilizar a anotaĂ§Ă£o @JArchEventCloneEntity para inteceptar o momento da clonagem e alterar o atributo. Segue o excmplo:
LancamentoObserver.java: 

private void clonaLancamento(@Observes @JArchEventCloneEntity LancamentoEntity lancamento) {
lancamento.setAberto(true);
}


Card's Lançamentos
Agora vou mostrar com adicionar 4 novos card's no dashboad: Contas Pagar, Contas Pago, Contas Receber e Contas Recebido. Vou começar adicionando os card's no dashboard da tela de Bem Vindo. bemVindo.xhtml
<e:dashboardUnity icon="fa fa-money fa-5x"
classMinHeight="h100"
styleIcon="color: red"
title="#{bemVindoAction.quantidadeContaPagar}"
labelButtonLink="#{e:bundle('label.acessar')}"
link="../lancamento/lancamentoList.jsf?tipo=PAG"
descriptionLink="#{e:bundle('message.acessarPagina')}"/>

<e:dashboardUnity icon="fa fa-money fa-5x"
classMinHeight="h100"
styleIcon="color: orange"
title="#{bemVindoAction.quantidadeContaPago}"
labelButtonLink="#{e:bundle('label.acessar')}"
link="../lancamento/lancamentoList.jsf?tipo=PAG"
descriptionLink="#{e:bundle('message.acessarPagina')}"/>

<e:dashboardUnity icon="fa fa-money fa-5x"
classMinHeight="h100"
styleIcon="color: blue"
title="#{bemVindoAction.quantidadeContaReceber}"
labelButtonLink="#{e:bundle('label.acessar')}"
link="../lancamento/lancamentoList.jsf?tipo=REC"
descriptionLink="#{e:bundle('message.acessarPagina')}"/>

<e:dashboardUnity icon="fa fa-money fa-5x"
classMinHeight="h100"
styleIcon="color: green"
title="#{bemVindoAction.quantidadeContaRecebido}"
labelButtonLink="#{e:bundle('label.acessar')}"
link="../lancamento/lancamentoList.jsf?tipo=REC"
descriptionLink="#{e:bundle('message.acessarPagina')}"/>
A novidade em relaĂ§Ă£o ao post de dashboard estĂ¡ por conta da propriedade styleIcon, que para cada card estĂ¡ sendo estilizado com uma cor diferente. Agora segue a implementaĂ§Ă£o na action de bem vindo.
BemVindoAction.java

@Inject
public LancamentoFacade lancamentoFacade;
public
String getQuantidadeContaPagar() {
return BundleUtils.messageBundle("label.contaPagar") + " " +
lancamentoFacade
.clientJpaql()
.where()
.equalsTo(LancamentoEntity_.tipoLancamento, TipoLancamentoType.PAGAR)
.and()
.equalsTo(LancamentoEntity_.aberto, true)
.collect()
.count();
}

public String getQuantidadeContaPago() {
return BundleUtils.messageBundle("label.contaPago") + " " +
lancamentoFacade
.clientJpaql()
.where()
.equalsTo(LancamentoEntity_.tipoLancamento, TipoLancamentoType.PAGAR)
.and()
.equalsTo(LancamentoEntity_.aberto, false)
.collect()
.count();
}

public String getQuantidadeContaReceber() {
return BundleUtils.messageBundle("label.contaReceber") + " " +
lancamentoFacade
.clientJpaql()
.where()
.equalsTo(LancamentoEntity_.tipoLancamento, TipoLancamentoType.RECEBER)
.and()
.equalsTo(LancamentoEntity_.aberto, true)
.collect()
.count();
}

public String getQuantidadeContaRecebido() {
return BundleUtils.messageBundle("label.contaRecebido") + " " +
lancamentoFacade
.clientJpaql()
.where()
.equalsTo(LancamentoEntity_.tipoLancamento, TipoLancamentoType.RECEBER)
.and()
.equalsTo(LancamentoEntity_.aberto, false)
.collect()
.count();
}

As quantidades acima estĂ¡ usando a JPQL do JARCH atravĂ©s da Fachada. Para maiores informações sobre a JPQL do JARCH ver os posts: 
https://jarchframe.blogspot.com/2018/08/biblioteca-jpql-jarch.html 
Adicionar as seguintes chaves no bundle:
label.contaPago=Conta Pago
label.contaRecebido=Conta Recebido
E um pequeno ajuste no tamanho da fonte do card, adicionando o seguinte seletor css.
bemVindo.css:

.jarch__dashboard-conteiner h3 {
font-size: 20px;
}
O resultado do dashboard:


ConclusĂ£o
Nesse post mostrei mais alguns recursos, como desabilitar os componentes na tela de dados quando for aĂ§Ă£o dinĂ¢mica, como inteceptar o evento de clone, desabilitaĂ§Ă£o dos menus de CRUD e adiĂ§Ă£o de card's estilizados. No prĂ³ximo post vou mostrar outros recursos do JARCH. 

Segue o link dessa video aula: https://youtu.be/dL5aWABnMX0

Até mais,

Nenhum comentĂ¡rio:

Postar um comentĂ¡rio

VersĂ£o 23.3.0-Final

      IntroduĂ§Ă£o Nesse post vou mostrar as principais novidades da versĂ£o 23.3.0, algumas correções e pequenas alterações. Alterações AlĂ©m d...