Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

Parcelas não pagam queria por em destaque.

Galera tenho uma venda com parcelas, e na Entidade parcela tenho um atributo com quantidadeDeParcela, faço a venda e tudo ok. Depois eu quero fazer contas a receber que seria minhas parcelas da venda, e nessa lista de parcelas queria que minhas parcelas pendende que tem o atributo status ficassem vermelhas ou algo do tipo parecido para poder marcar qual parcelas ainda estão com o status 0 que seria pendende ou algo do tipo, imagino que seria algo com scrypt, nunca fiz algo parecido e nunca vi algo parecido, por isso que to perdido em fazer essa ação.

12 respostas

Alisson, tudo bem ?

Cara você pode criar um enum para representar esse status. Feito isso você consegue na hora de criar as parcelas já settar para esse Status e você pode no xhtml fazer uma validação do status, e então colocar uma estilização diferente no item.

E dado que for pago, você altera o status e salva no banco !

Espero ter ajudado.

Abraços

Matheus tudo bom? Então na minha entidade parcela eu posso deletar o atributo status? Ou eu deixo esse atributo lá ainda?

Pode deixar o atributo, mas você vai trocar o tipo dele, vai se tornar um enum.

Matheus nunca usei Enum também, poderia me ajudar até nisso? kkkk tenho medo de fazer caca e dar erro em tudo aqui.

Sem problemas

O Enum é como se fosse uma classe abstrata, e os valores que estão lá serão classes que herdam da classe pai.


public enum Nivel {
    USUARIO, ADMIN;
}

Então eu posso usar agora para referenciar no meu código, tudo como Nivel e através de polimorfismo posso referenciar tanto um USUARIO, quanto um ADMIN.

No seu caso seria algo assim :



public enum Status {
    ATIVO, INATIVO;
}

E na classe parcela :


public class Parcela {

    private Status status;
}

A única que você precisa falar é como a JPA vai armazenar esse seu enum no bd, usamos a anotação @Enumerated para isso :


public class Parcela {
    @Enumerated(EnumType.STRING)
    private Status status;
}

Eu gosto de deixar como String pois na hora de fazer uma busca manual do banco eu sei qual é o tipo, mas também é possível deixar como um campo numérico.

Espero ter ajudado

Abraços

Matheus a enum pode ser entendida como uma Class do seu atributo? Pela lógica que você tá falando para criar uma enum, é quando tem valores especificos? Tipo sexo de uma pessoa, masculino feminino? Poderia criar uma enum nesse caso? Claro que isso é um exemplo, mais seria para essa situação as enum? Ai praticamente essa Enum.

private class Exemplo {
@// ANOTAÇÃO
    private SexoPessoa pessoa;
}
private enum SexoPessoa {
    MASCULINO, FEMININO;
}

Ai para settar seria mais ou menos?

    Exemplo exemplo = new Exemplo();
    exemplo.setSexoPessoa(SexoPessoa.MASCULINO);

Tipo isso?

Na enum você passaria os valores correto? Assim ganha mais controle sobre uma variavel. Enum então seria para isso? Nossa se for isso é muito bom ter ela aqui kkkk, nunca ouvi falar e sequer usei enum kkk.

Mais a minha duvida aqui é outra, mais mesmo assim cara obrigado! Você sempre me ajudando.

Então fazendo isso Matheus como fazer o restante para trocar a cor da minha parcela? as que tiverem com status pago deixo verde as restante vermelha.

Exatamente isso que você disse, ele ainda consegue fazer mais algumas coisas.

haha

Para trabalhar com essa parte, você pode definir um css e fazer referencia no campo :

<style type="text/css">
.vermelho{
    color: #FF000;
}
</style>


<h:outputText styleClass="vermelho" />

O único problema é que tem que ser dinamico, certo ?

Então você pode usar a ideia de um if ternario :

<h:outputText styleClass="#{parcelaBean.isAtivo ? vermelho : verde}" />

Espero ter ajudado.

Certo, poderia ver se está no caminho certo?

    <ui:define name="title">
        Venda
       </ui:define>

    <ui:define name="content">
        <style type="text/css">
            .vermelho {
            color: #FF000;
            }
            </style>


        <h:outputText styleClass="vermelho" />
        <div class="ui-g">
            <div class="ui-g-12">
                <div class="ui-fluid">
                    <p:growl id="mensagem" life="6000" />
                    <h:form id="formularioVenda">
                        <p:dataTable reflow="true" emptyMessage=""
                            value="#{vendaBean.listaVendaParcelas}" var="parcela">
                            <f:facet name="header">
                                <p:commandButton value="Inserir"
                                    oncomplete="PF('venda').show();"
                                    update=":formularioVendaProduto" style="width:100px"
                                    styleClass="secondary" />
                            </f:facet>
                            <p:column headerText="Data" filterBy="#{parcela.dataVencimento}">
                                <h:outputLabel value="#{parcela.dataVencimento}" />
                            </p:column>
                            <p:column headerText="Data"
                                filterBy="#{parcela.venda.cliente.nome}">
                                <h:outputLabel value="#{parcela.venda.cliente.nome}" />
                            </p:column>
                        </p:dataTable>
                    </h:form>
                </div>

Agora falta eu por um atributo no tabela? do status? E uma duvida, criei uma Enum do tipo String certo? Então o correto seria criar comparar não com o isAtivo né? Algo do tipo

<h:outputLabel value = #{parcela.status.equals('PAGO') ?vermelho: verde}

Mais ou menos isso?

Matheus não deu resultado nenhum aqui, fiz dessa forma, poderia ver se está correto?

<ui:define name="title">
        Venda
       </ui:define>

    <ui:define name="content">
        <style type="text/css">
            .vermelho {
                color: #FF0000;
            }
</style>


        <h:outputText styleClass="vermelho" />
        <div class="ui-g">
            <div class="ui-g-12">
                <div class="ui-fluid">
                    <p:growl id="mensagem" life="6000" />
                    <h:form id="formularioVenda">
                        <p:dataTable reflow="true" emptyMessage=""
                            value="#{vendaBean.listaVendaParcelas}" var="parcela">
                            <f:facet name="header">
                                <p:commandButton value="Inserir"
                                    oncomplete="PF('venda').show();"
                                    update=":formularioVendaProduto" style="width:100px"
                                    styleClass="secondary" />
                            </f:facet>
                            <p:column headerText="Data" filterBy="#{parcela.dataVencimento}">
                                <h:outputLabel value="#{parcela.dataVencimento}" />
                            </p:column>
                            <p:column headerText="Data"
                                filterBy="#{parcela.venda.cliente.nome}">
                                <h:outputLabel value="#{parcela.venda.cliente.nome}" />
                            </p:column>
                            <p:column headerText="Status">
                                <h:outputLabel value="#{parcela.status}"
                                    styleClass="#{parcela.status == 'PAGO' ? vermelho : verde}"
                                    id="vermelho" />
                            </p:column>
                        </p:dataTable>
                    </h:form>
                </div>

Ai adicionei

 <p:column headerText="Status">
                                <h:outputLabel value="#{parcela.status}"
                                    styleClass="#{parcela.status == 'PAGO' ? vermelho : verde}"
                                    id="vermelho" />
                            </p:column>

Mais não rolou.

Ele devia ter ficado vermelho e você viu que você não definiu nada para o verde né ?

Sim sim eu vi que não adicionei nada para o verde, no meu dataTable tem os 2 tipo de status efetuados PAGO E PENDENTE, mais não deu, o verde depois implemento, quero ver se da certo aqui ai finalizo tudo corretamente, eu acho que eu errei nas linhas da implementação, ou está do jeito certo?

<ui:define name="content">
        <style type="text/css">
            .vermelho {
                color: #FF0000;
            }
</style>


        <h:outputText styleClass="vermelho" />
<p:column headerText="Status">
                                <h:outputLabel value="#{parcela.status}"
                                    styleClass="#{parcela.status == 'PAGO' ? vermelho : verde}"
                                    id="vermelho" />
                            </p:column>

Está correto assim mesmo?

solução!

Resolvido, para manipular componente do primefaces precisa do !important no css.