sexta-feira, 24 de julho de 2020

Contas Pagar/Receber - Parte XXI - Implementação da Automação do BPM

Introdução
Nesse vigésimo primeiro post vou começar a implementação para interação com o BPM modelado nos post anteriores.

Autorização Conta
Antes de começar a implementação vou ajustar no BPM as tasks Avaliar Conta definindo o atributo Candidate Groups com o cargo do usuário, primeiro na Lane do Supervisor:

Agora na Lane do Gerente:

E por último na Lane do Diretor:

Agora voltando para a implementação dentro da aplicação, vou implementar no LancamentoEntity um novo atributo para identificar se a conta está autorizada. Vou adicionar o seguinte atributo:
LancamentoEntity.java:

/* CODIGO ANTERIOR OMITIDO */

@Column(name = "sn_autorizado")
@Convert(converter = BooleanSNJpaConverter.class)
private Boolean autorizado;

/* CODIGO OMITIDO */

public Boolean getAutorizado() {
return autorizado;
}

public void setAutorizado(Boolean autorizado) {
this.autorizado = autorizado;
}

/* CODIGO POSTERIOR OMITIDO */

Como essa solicitação vem de um determinado cliente (DSF), vou criar um parâmetro para informar se utiliza o BPM. Segue a implementação do parâmetro:
ParametroUtilizaBpmAutorizacaoConta.java:

@JArchParameter
public class ParametroUtilizaBpmAutorizacaoLancamento extends Parameter<Boolean, ParametroFacade> {
@Override
public String system() {
return BundleUtils.messageBundle("label.siglaSistema");
}

@Override
public String category() {
return BundleUtils.messageBundle("label.lancamento");
}

@Override
public String description() {
return BundleUtils.messageBundle("label.utilizaBpm");
}

@Override
public String explanation() {
return BundleUtils.messageBundle("message.utilizaBpm");
}

@Override
public Boolean getValue() {
return Boolean.valueOf(getValueString()) || getValueString().equals("S");
}

@Override
public void setValue(Boolean value) {
if (value == null) {
setValueString(null);
} else {
setValueString(value ? "S" : "N");
}
}

@Override
public FieldType getType() {
return FieldType.BOOLEAN;
}

@Override
public Boolean valueDefault() {
return false;
}

@Override
public int row() {
return 9;
}
}
E a criação da chave no bundle.
bundle_pt_BR.properties:

label.utilizaBpm=Utiliza BPM

Agora preciso ajustar o preenchimento dessa informação no Observer. Segue a implementação:
LancamentoObserver.java
/* CODIGO OMITIDO */
@JArchParameter
@Inject
private ParametroUtilizaBpmAutorizacaoLancamento parametroUtilizaBpmAutorizacaoLancamento;

/* CODIGO OMITIDO */
private void criacaoLancamento(@Observes @JArchEventCreateEntity LancamentoEntity lancamento,
UserInformation userInformation) {
lancamento.setAberto(true);
lancamento.setBanco(parametroBancoDefault.getValue());
lancamento.setCentroCusto(parametroCentroCustoDefault.getValue());
lancamento.setCategoria(parametroCategoriaDefault.getValue());
lancamento.setPessoa(parametroPessoaDefault.getValue());

boolean autorizado = !parametroUtilizaBpmAutorizacaoLancamento.getValue()
|| userInformation.get(UsuarioEntity.class).getCargo() != CargoType.OPERADOR;

lancamento.setAutorizado(autorizado);
}

private void clonaLancamento(@Observes @JArchEventCloneEntity LancamentoEntity lancamento,
UserInformation userInformation) {
lancamento.setAberto(true);

boolean autorizado = !parametroUtilizaBpmAutorizacaoLancamento.getValue()
|| userInformation.get(UsuarioEntity.class).getCargo() != CargoType.OPERADOR;

lancamento.setAutorizado(autorizado);
}
/* CODIGO POSTERIOR OMITIDO */
Agora vou adicionar na fachada um método para autorizar a conta, segue a implementação:
LancamentoFacade.java:
/* CODIGO ANTERIOR OMITIDO */
public void autorizaConta(Long idLancamento) {
LancamentoEntity lancamento = find(idLancamento);
lancamento.setAutorizado(true);
change(lancamento);
}
/* CODIGO POSTERIOR OMITIDO */
Agora vou criar um filtro default para que somente seja listado contas autorizadas na tela de lista, segue a implementação:
LancamentoEntity.java:
/* CODIGO ANTERIOR OMITIDO */

@JArchSearchWhereJpa(id = LancamentoEntity.FILTRO_AUTORIZADO, conditionWhereJpa = "lancamento.autorizado = true")
/* CODIGO OMITIDO */

public class LancamentoEntity extends CrudMultiTenantEntity {
/* CODIGO OMITIDO */
public static final String FILTRO_AUTORIZADO = "lancamentoEntity.filtroAutorizado";
/* CODIGO POSTERIOR OMITIDO */
Conclusão
Nesse post eu comecei com as implementações da automação do BPM. Nos próximos posts vou continuar com as demais implementações.

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

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...