Gustavosdo/summum

View on GitHub
estagio/compra/static/js/inline_compra.js

Summary

Maintainability
F
6 days
Test Coverage
 
    function calcula_valor_total() {

        var sum = 0;
        // iteração através de cada campo e adiciona o valor
        $(".valor-total-ic").each(function() {

            // adiciona somente se o valor é número
            if(!isNaN(this.value) && this.value.length!=0) {
                sum += parseFloat(this.value);
            }
        });
        // .toFixed() método de arredondamento da soma final para 2 casas decimais

        var descontoTotal = $('#id_desconto').val();
        var percentualDescontoTotal = (sum * descontoTotal) / 100.00;
        sum = sum - percentualDescontoTotal;

        $('#id_total').val(sum.toFixed(2));
    }

    function calcula_valor_total_inline(inline){
        var row = $(inline).closest('tr');
        var quantidade = row.find('.quantidade-ic').val();
        var valorUnitario = row.find('.valor-unitario-ic').val();
        var valorItemCompra = valorUnitario * quantidade;
        var desconto = row.find('.desconto').val();
        var valorPercentualDesconto = (valorItemCompra * desconto) / 100.00;
        valorItemCompra = valorItemCompra - valorPercentualDesconto; 

        var produto = row.find('.vForeignKeyRawIdAdminField').val();
        if (produto) {
            row.find('.valor-total-ic').val(valorItemCompra.toFixed(2));
        };
    }

    function novo_registro_inline(inline){
        inline.find('.quantidade-ic, .valor-unitario-ic, .desconto, .valor-total-ic').val("");
    }

    function limpa_campos_inline(inline){
        novo_registro_inline(inline);
        inline.find(".salmonella_label").empty();

        inline.find('.desconto').attr({"readonly": "readonly"});
        inline.find('.quantidade-ic').attr({"readonly": "readonly"});
        inline.find('.quantidade-ic').removeAttr('required');   
    }

    function dismissRelatedLookupPopup(win, chosenId) {
        var name = windowname_to_id(win.name);
        var elem = document.getElementById(name);
        elem.value = chosenId;
        django.jQuery(elem).trigger('change');
        win.close();

        var row = $(elem).closest('tr');
        var element = $('#'+name);
        var app = element.next("a").attr("data-app");
        var model = element.next("a").attr("data-model");
        
        if (app == 'movimento' && model == 'produtos'){
            busca_valor_unitario(elem.value, row);
        }
    }

    function busca_valor_unitario(produto, inline){
        $.ajax({       
            type: "GET",
            url: "/compra/compra/get_valor_unitario/"+produto,
            dataType: "json",
            success: function(retorno){
                $.each(retorno, function(i, produtos){ 
                    novo_registro_inline(inline);

                    var statusProduto = produtos.fields['status'];
                    if (statusProduto == false){
                        limpa_campos_inline(inline);
                    }
                    else{
                        var valorUnitario = produtos.fields['preco'];
                        var quantidadeProduto = inline.find('.valor-unitario-ic').val(valorUnitario);
                        inline.find('.quantidade-ic').focus();

                        jQuery(inline.find('.quantidade-ic')).attr({"required": "required"});
                        jQuery(inline.find('.quantidade-ic')).removeAttr('readonly');
                        jQuery(inline.find('.desconto')).removeAttr('readonly'); 
                    }
                });
            }
        }); 
    }

    $(".quantidade-ic, .desconto").keyup(function (){
        var inline = $(this);
        calcula_valor_total_inline(inline);
    });

    $(".vForeignKeyRawIdAdminField").change(function (){
        var inline = $(this);
        var app = inline.next("a").attr("data-app");
        var model = inline.next("a").attr("data-model");
        var valor = inline.val();

        if (app == 'movimento' && model == 'produtos'){
            var row = $(inline).closest('tr');

            if (valor != ""){
                busca_valor_unitario(valor, row);
            }
            else {
                limpa_campos_inline(row);
            }
            calcula_valor_total();
        }
    });

    $(".salmonella-clear-field").click(function(e){
        var $this = $(this);
        var row = $(this).closest('tr');
        limpa_campos_inline(row);
        calcula_valor_total();

        // Desabilita o link para remoção do item caso o mesmo seja um registro já salvo.
        // row.closest('.has_original').find('.inline-deletelink').addClass('disabled');
    });

    $(".inline-deletelink").click(function(e){
        calcula_valor_total();
    });

    $(".quantidade-ic, .desconto, #id_desconto").each(function() {

        $(this).keyup(function(){
            calcula_valor_total();
        });
    });


    // Corrige os campos do formulário após o reload da página
    $(document).ready(function(){
        $(".field-produto .vForeignKeyRawIdAdminField").each(function() {
            var obj = $(this);
            var row = obj.closest('tr');
            var valor = row.find('input[id*="id_itenscompra_set"][type="hidden"]').val();

            if( obj.val() != "") {
                jQuery(row.find('.quantidade-ic')).attr({"required": "required"});
                jQuery(row.find('.quantidade-ic')).removeAttr('readonly');
                jQuery(row.find('.desconto')).removeAttr('readonly'); 
            }

            if (valor.length != 0) {
                row.find('.salmonella-related-lookup, .salmonella-clear-field').addClass('disabled');
                row.find('.vForeignKeyRawIdAdminField, .quantidade-ic, .desconto').attr({"readonly": "readonly"});
            }
        });

        // Teste para ignorar a validação do HTML ao clicar no botão "Salvar Pedido"
        // $('button[type=submit][name=_addpedido]').click(function(){
        //     $('form').attr('novalidate','novalidate');
        // });
    });