Fazer soma com dados no dataset customizado

Boa tarde,

Eu possuo uma atividade que contém uma tabela filha, dentro dessa tabela filha existem os campos (endereço, produto, qtd movimentação, tipo de movimentação e o saldo do produto em estoque), já consegui fazer com que os dados inseridos pelo usuário na tabela filha sejam passados para um dataset customizado.

Porém, o problema que estou tentando resolver agora é o seguinte: eu preciso consultar todos os dados do dataset e faz o cálculo da entrada ou saída de estoque, para que, da próxima vez que o usuário iniciar uma solicitação o saldo seja atualizado.

No caso de ser uma saída deve-se subtrair da qtd em estoque (saldo), o valor informado no campo qtdMovimentacao. E no caso de ser uma entrada deve-se somar ao saldo o valor informado.

Código HTML onde está a tabela filha:

<table border="1" tablename="movimentacao" addbuttonlabel="Adicionar Movimentação"  nodeletebutton="false">
                                        <thead>
                                            <tr>
                                                <td><b>Endereço</b></td>
                                                <td><b>Produto</b></td>
                                                <td><b>Quantidade</b></td>
                                                <td><b>Tipo</b></td>
                                                <td><b>Saldo</b></td>
                                            </tr>
                                        </thead>
                                        <tr class="teste">
                                            <td class="form-group col-md-3"><input
                                            type="zoom"
                                                id = "endereco"
                                                name="endereco"
                                                data-zoom="{
                                                    'displayKey':'endereco',
                                                    'datasetId':'dsWMSEndereco',
                                                    'placeholder':'Escolha o endereço',
                                                    'fields':[
                                                        {
                                                           'field':'endereco',
                                                           'label':'Endereço',
                                                           'standard':true
                                                        }
                                                    ]
                                                 }"
                                            /></td>
                                        <td class="form-group col-md-4"><input
                                        type="zoom"
                                            id = "produto"
                                            name="produto"
                                            data-zoom="{
                                                'displayKey':'nomeProduto',
                                                'datasetId':'dsProdutosWMS',
                                                'placeholder':'Escolha o produto',
                                                'fields':[
                                                    {
                                                       'field':'nomeProduto',
                                                       'label':'Nome'

                                                    },{
                                                        'field':'pesoProduto',
                                                        'label':'Peso'
                                                    },{
                                                        'field':'valorProduto',
                                                        'label':'Valor',
                                                        'standard':true
                                                    }
                                                ]
                                             }"
                                        /></td>
                                        <td class="form-group col-md-2"><input type="number" id="qtdMovimentacao" name="qtdMovimentacao" class="form-control"></td>
                                        <td class="form-group col-md-2">
                                            <div class="radio">
                                                <label><input type="radio" name="tipoMovimentacao" id="tipoMovimentacao" value="saida">Saída</label>
                                                <label><input type="radio" name="tipoMovimentacao" id="tipoMovimentacao" value="entrada">Entrada</label>
                                            </div>
                                        </td>
                                        <td class="form-group col-md-1"><input id="saldo" name="saldo" type="text" class="form-control"></td>

                                        </tr>
                                    </table>

Código do ds, onde são armazenados os dados da tabela filha:

function createDataset(fields, constraints, sortFields) {
    console.log("entrei na criação de dataset filha");
    //Cria as colunas
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("NumFormulario");
    dataset.addColumn("endereco");
    dataset.addColumn("produto");
    dataset.addColumn("qtdMovimentacao");
    dataset.addColumn("tipoMovimentacao");
    dataset.addColumn("saldo");

    //Cria a constraint para buscar os formulários ativos
    var constraints = new Array();
    constraints.push(DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST));

    // No lugar do "datasetSeuForm" você coloca o dataset do seu formulário
    var datasetPrincipal = DatasetFactory.getDataset("dsInventarioWMS", null, constraints, null);

    for (var i = 0; i < datasetPrincipal.rowsCount; i++) {
        var documentId      = datasetPrincipal.getValue(i, "metadata#id");
        var documentVersion = datasetPrincipal.getValue(i, "metadata#version");

        //Cria as constraints para buscar os campos filhos, passando o tablename, número da formulário e versão
        var constraintsFilhos = new Array();
        constraintsFilhos.push(DatasetFactory.createConstraint("tablename", "movimentacao" ,"movimentacao", ConstraintType.MUST));
        constraintsFilhos.push(DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST));
        constraintsFilhos.push(DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST));

        //Busca o dataset
        // No lugar do "datasetSeuForm" você coloca o dataset do seu formulário
        var datasetFilhos = DatasetFactory.getDataset("dsInventarioWMS", null, constraintsFilhos, null);

        for (var j = 0; j < datasetFilhos.rowsCount; j++) {
            //Adiciona os valores nas colunas respectivamente.
            dataset.addRow(new Array(
                    documentId,
                    datasetFilhos.getValue(j, "endereco"), 
                    datasetFilhos.getValue(j, "produto"),
                    datasetFilhos.getValue(j, "qtdMovimentacao"),
                    datasetFilhos.getValue(j, "tipoMovimentacao"),
                    datasetFilhos.getValue(j, "saldo")));
        }
    }

    return dataset;
}

https://forum.fluig.com/890-consultar-dataset-no-validateform

Eu encontrei esse exemplo do link acima e tentei adaptar para o que eu preciso, porém não obtive sucesso.

Muito obrigado desde já pela ajuda

compartilhar
  • @Leonardo, você quer somar os dados do formulário ou do Dataset?

    Gabriel Franco da Rocha Nascimento   25 de Jun de 2018
  • Gabriel, desculpe a demora, estava offline nesses dias. Eu preciso fazer o seguinte: cada vez que o usuário cadastra uma movimentação de determinado produto, esses dados vão para um dataset interno. Eu preciso que essas movimentações sejam somadas (em caso de entrada) ou subtraídas (em caso de saída), do valor total em estoque daquele produto. Para que da próxima vez que o usuário iniciar a movimentação no campo saldo do formulário já esteja presente o valor somado e subtraído das demais movimentações.

    Leonardo Fioretti   27 de Jun de 2018
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do fluig Forum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags datasets datasets-customizados tabela paifilho bpm ou faça a sua própria pergunta.