arquivo-upload.js 11.8 KB
var Protocolo = Protocolo || {};

Protocolo.UploadArquivo = (function () {

    function UploadArquivo() {
        this.inputNomeArquivo = $('#nome-arquivo');
        this.inputContentType = $('#content-type');
        this.inputTamanho = $('#tamanho-arquivo');
        this.inputUUID = $('input[name=uuid]');
        this.labelNomeArquivo = $(".js-nome-arquivo");
        this.btnAnexar = $(".js-btn-anexar");
        this.nomeArquivoOriginal = $('#nome-original');
        this.comboTipoDocumento = $("#tipo-documento");
        this.inputDescricaoDocumento = $('#descricao-documento');
        this.inputUploadSelect = $('#upload-select');
        this.btnSelecione = $('.upload-text-file');
        this.btnEnviar = $('.js-btn-enviar');

        
        this.containerArquivosAdicionados = $("#container-arquivos-adicionados");

        this.htmlThumbnailArquivoTemplate = $('#imagem-arquivo').html();
        this.template = Handlebars.compile(this.htmlThumbnailArquivoTemplate);

        this.htmlTabelaListaArquivosTemplate = $('#tabela-lista-arquivos').html();
        this.tabelaListaArquivostemplate = Handlebars.compile(this.htmlTabelaListaArquivosTemplate);

        this.containerThumbnailArquivo = $('.js-container-imagem-arquivo');

        this.uploadDrop = $('#upload-drop');
        this.btnAnexar.on('click', onBtnAnexar.bind(this));

        this.imgLoading = $('.js-img-loading');

        this.radioProtocoloAnterior = $('.js-radio-protocolo-anterior');

        this.divProtocoloAnterior = $('#divProtocoloAnterior');
        this.inputNumeroProtocoloAnterior = $('#numero-protocolo');
        this.hiddenPossuiProtocoloAnterior = $('#possui-protocolo-anterior');
    }

    UploadArquivo.prototype.iniciar = function () {
        var settings = {
            type: 'json',
            allow: '*.(pdf)',
            filelimit: 1,
            action: this.containerThumbnailArquivo.data('url-arquivos'),
            complete: onUploadCompleto.bind(this),
            error: onUploadErro.bind(this),
            beforeSend: adicionarCsrfToken,
            loadstart: onLoadStart.bind(this)
        };
        UIkit.uploadSelect($('#upload-select'), settings);
        UIkit.uploadDrop(this.uploadDrop, settings);
        listaArquivosAdicionados.call(this);
        
        if (this.inputNomeArquivo.val()) {
            renderizarThumbnailArquivo.call(this, {
                nome: this.inputNomeArquivo.val(),
                tamanho: this.inputTamanho.val(),
                contentType: this.inputContentType.val(),
                nomeOriginal: this.nomeArquivoOriginal.val()
            });
        } else{
        	this.btnAnexar.prop("disabled", true);
            this.btnEnviar.prop("disabled", false);
        }

        this.radioProtocoloAnterior.on('click', onRAdioProtocoloAnteriorClick.bind(this));

        if (this.hiddenPossuiProtocoloAnterior.val() === 'S') {
            mostraProtocoloAnterior.call(this);
        } else {
            escondeProtocoloAnterior.call(this);
        }

    };

    function onRAdioProtocoloAnteriorClick(event) {
        var radio = $(event.currentTarget);
        if (radio.val() === 'S') {
            mostraProtocoloAnterior.call(this);
        } else {
            escondeProtocoloAnterior.call(this);
        }
    }

    function mostraProtocoloAnterior() {
        this.divProtocoloAnterior.removeClass('hidden');
        this.hiddenPossuiProtocoloAnterior.val('S');
        var radio = $('#radio-possui-protocolo-n');
        radio.prop('checked', true);
        this.inputNumeroProtocoloAnterior.focus();
    }

    function escondeProtocoloAnterior() {
        this.hiddenPossuiProtocoloAnterior.val('N');
        this.divProtocoloAnterior.addClass('hidden');
        var radio = $('#radio-possui-protocolo-s');
        radio.prop('checked', true);
    }

    function onLoadStart() {
        this.imgLoading.removeClass('hidden');
        this.btnSelecione.addClass('hidden');
    }

    function listaArquivosAdicionados() {
        $.ajax({
            url: this.containerArquivosAdicionados.data('action'),
            method: 'GET',
            contentType: 'application/json',
            success: onListarAnexosConcluido.bind(this),
            error: onErroListarAnexo.bind(this)
        });

    }

    function bindBtnExcluirArquivoSelecionado() {
        var btnExcluirArquivoSelecionado = $('.js-btn-excluir-arquivo');
        btnExcluirArquivoSelecionado.on('click', onBtnExcluirArquivoSelecionado.bind(this));
        return btnExcluirArquivoSelecionado;
    }

    function onUploadCompleto(resposta) {
   		renderizarThumbnailArquivo.call(this, resposta);
    }
    function temArquivoDuplicado(resposta,nomeNovo){
    	var nomeNovo = nomeNovo;
    	var tamanhoNovo =resposta.tamanho;
    	var limparUpload=false;
    	arquivos = $('.js-cliente-pesquisa-rapida');
    	$('.js-cliente-pesquisa-rapida').each(function() {
    		var nome = $(this).find('td[data-nome]').data('nome');
    		var tamanho = $(this).find('td[data-tamanho]').data('tamanho');
    		if ((nomeNovo==nome)&&(tamanhoNovo==tamanho)){
    			onErroArquivoDuplicado();
    			$('.js-img-loading').addClass('hidden');
    			limparUpload=true;
    			return ;
    		} 
    		});
    	if(limparUpload){
    		$('.js-imagem-arquivo').remove();
			this.imgLoading.addClass('hidden');
			limparAtributosUpload.call(this);
			
    	}
    }
    

    function onUploadErro(resposta) {
        $.jAlert({
            'title': 'Erro',
            'content': resposta.message,
            'theme': 'dark_red',
            'btns': {'text': 'FECHAR'}
        });
    }
    function onErroArquivoDuplicado() {
        $.jAlert({
            'title': 'Erro',
            'content': 'Arquivo já foi adcionado!',
            'theme': 'dark_red',
            'btns': {'text': 'FECHAR'}
        });
    }

    function renderizarThumbnailArquivo(resposta) {
        this.imgLoading.addClass('hidden');
        this.btnSelecione.removeClass('hidden');
        if (resposta.tamanho == undefined) {
            limparAtributosUpload.call(this);
            $.jAlert({
                'title': 'Erro',
                'content': resposta.message,
                'theme': 'dark_red',
                'btns': {'text': 'FECHAR'}
            });
        }else {

            this.inputNomeArquivo.val(resposta.nome);
            this.inputContentType.val(resposta.contentType);
            this.inputTamanho.val(resposta.tamanho);
            this.nomeArquivoOriginal.val(resposta.nomeOriginal);

            this.uploadDrop.addClass('hidden');

            var logo = resposta.logo;

            var tamanho = resposta.tamanho;
            
            var nomeDefinitivo=resposta.nomeOriginal;
            
            if (resposta.nomeOriginal.length>100){
            	nomeDefinitivo = nomeDefinitivo.slice(0,90)+"..."+nomeDefinitivo.slice(93,96)+'.pdf';
        	}
                        
            var htmlThumbnailArquivo = this.template({
                arquivo: logo,
                nome: nomeDefinitivo + " (" + tamanho + ") Kb",
            });
            this.containerThumbnailArquivo.append(htmlThumbnailArquivo);

            this.nomeArquivoOriginal.val(nomeDefinitivo);
            
            $('.js-remove-arquivo').on('click', onRemoverArquivo.bind(this));

            this.btnAnexar.prop("disabled", false);
            this.btnEnviar.prop("disabled", true);

            
            temArquivoDuplicado.call(this,resposta,nomeDefinitivo);
        }
    }


    function onRemoverArquivo(evento) {
        $('.js-imagem-arquivo').remove();
        limparAtributosUpload.call(this);
    }

    function limparAtributosUpload() {
    	$('#upload-drop').removeClass('hidden');
        this.inputUploadSelect.val(null);
        this.inputNomeArquivo.val('');
        this.inputContentType.val('');
        this.inputTamanho.val('');
        this.inputDescricaoDocumento.val('');
        this.comboTipoDocumento.val('');
        this.labelNomeArquivo.text('Arquivo');
        this.btnAnexar.prop("disabled", true);
        this.btnEnviar.prop("disabled", false);
    }

    function onBtnAnexar(event) {
        event.preventDefault();
        if (this.inputNomeArquivo.val() && this.comboTipoDocumento.find('option:selected').val()) {
            $.ajax({
                url: this.btnAnexar.data('action'),
                method: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({
                    uuid: this.inputUUID.val(),
                    nome: this.inputNomeArquivo.val(),
                    nomeOriginal: this.nomeArquivoOriginal.val(),
                    tamanho: this.inputTamanho.val(),
                    tipoDocumento: this.comboTipoDocumento.find('option:selected').text(),
                    descricaoDocumento: this.inputDescricaoDocumento.val(),
                    codigoTipoDocumento: this.comboTipoDocumento.find('option:selected').val(),
                    contentType: this.inputContentType.val()
                }),
                success: onAnexoConcluida.bind(this),
                error: onErroAnexo.bind(this)
            });
        } else {
            $.jAlert({
                'title': 'Erro',
                'content': 'Selecione um tipo de documento.',
                'theme': 'dark_red',
                'btns': {'text': 'FECHAR'}
            });
        }
    }

    function onAnexoConcluida() {
        $.ajax({
            url: this.containerArquivosAdicionados.data('action'),
            method: 'GET',
            contentType: 'application/json',
            success: onListarAnexosConcluido.bind(this),
            error: onErroListarAnexo.bind(this)
        });

        this.inputUploadSelect.val('');

        $('.js-imagem-arquivo').remove();
        limparAtributosUpload.call(this);
    }

    function onErroAnexo(resposta) {
        var responseObject = jQuery.parseJSON(resposta.responseText);
        $.jAlert({
            'title': 'Erro',
            'content': responseObject.message,
            'theme': 'dark_red',
            'btns': {'text': 'FECHAR'}
        });
    }

    function onListarAnexosConcluido(resposta) {
        var html = this.tabelaListaArquivostemplate(resposta);
        this.containerArquivosAdicionados.html(html);
        bindBtnExcluirArquivoSelecionado.call(this);
    }

    function onErroListarAnexo(resposta) {
        var responseObject = jQuery.parseJSON(resposta.responseText);
        $.jAlert({
            'title': 'Erro',
            'content': responseObject.message,
            'theme': 'dark_red',
            'btns': {'text': 'FECHAR'}
        });
    }

    function onBtnExcluirArquivoSelecionado(event) {
        event.preventDefault();
        var nomeArquivoExclusao = $(event.currentTarget).data("nome");
        var url = this.containerArquivosAdicionados.data('action') + "?nome=" + nomeArquivoExclusao;

        $.ajax({
            url: url,
            method: 'DELETE',
            contentType: 'application/json',
            success: onExclusaoSucesso.bind(this),
            error: onExclusaoErro.bind(this)
        });
    }

    function onExclusaoSucesso() {
        $.ajax({
            url: this.containerArquivosAdicionados.data('action'),
            method: 'GET',
            contentType: 'application/json',
            success: onListarAnexosConcluido.bind(this),
            error: onErroListarAnexo.bind(this)
        });
    }

    function onExclusaoErro(resposta) {
        var responseObject = jQuery.parseJSON(resposta.responseText);
        $.jAlert({
            'title': 'Erro',
            'content': responseObject.message,
            'theme': 'dark_red',
            'btns': {'text': 'FECHAR'}
        });
    }

    function adicionarCsrfToken(xhr) {
        var token = $('input[name=_csrf]').val();
        var header = $('input[name=_csrf_header]').val();
        xhr.setRequestHeader(header, token);
    }

    return UploadArquivo;

})();

$(function () {
    var uploadArquivo = new Protocolo.UploadArquivo();
    uploadArquivo.iniciar();
});