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 {public static final String FILTRO_AUTORIZADO = "lancamentoEntity.filtroAutorizado";/* CODIGO OMITIDO */
/* 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.
Nenhum comentário:
Postar um comentário