Source: components/admin/controllers/bysat.js

/**
 * @ngdoc controllers
 * @name BySat
 * @module s4c.components.admin.controllers.BySat
 *
 * @description
 * `BySat` Controller da tela de BySat do módulo de administração
 * 
 * 
 */
(function () {
    'use strict';

    angular.module('s4c.controllers.BySatCtrl', [])
        .controller('BySatCtrl', BySatCtrl);

    BySatCtrl.$inject = [
        '$scope',
        '$http',
        '$mdDialog',
        'API_ENDPOINT',
        'Integracao'
    ]

    function BySatCtrl($scope, $http, $mdDialog, API_ENDPOINT, Integracao) {
        angular.extend($scope, {
            'prefixoTipoForca': {
                arquivo: '',
                versao: 1,
                dados: []
            },
            'ordemPlacaGrupamentoModelo': {
                arquivo: '',
                versao: 1,
                dados: []
            },
            erros: {},
            avancado: {},
            enviar: enviar,
            mensagensDeErro: mensagensDeErro,
            atualizarURL: atualizarURL
        });

        Integracao.obter('BySat').then(function (bysat) {
            $scope.avancado = bysat.detalhes;
        });

        /**
         * @method mensagensDeErro
         */
        function mensagensDeErro() {
            return _.values($scope.erros);
        }

        /**
         * @method enviar
         */
        function enviar() {
            $http.post($scope.avancado.url, {
                prefixoTipoForca: $scope.prefixoTipoForca,
                ordemPlacaGrupamentoModelo: $scope.ordemPlacaGrupamentoModelo
            }).then(function () {
                $mdDialog.show(
                    $mdDialog.alert()
                        .title('Sucesso')
                        .content('O upload dos arquivos foi feito com sucesso.')
                        .ariaLabel('O upload dos arquivos foi feito com sucesso.')
                        .ok('OK')
                );
            }, function () {
                $mdDialog.show(
                    $mdDialog.alert()
                        .title('Erro')
                        .content('Ocorreu um erro ao tentar fazer o upload do arquivos, tenve novamente mais tarde.')
                        .ariaLabel('Ocorreu um erro ao tentar fazer o upload do arquivos, tenve novamente mais tarde.')
                        .ok('OK')
                );
            });
        }

        /**
         * @method atualizarURL
         */
        function atualizarURL() {
            Integracao.atualizar('BySat', $scope.avancado);
        }

        $('#botao-arquivo-1').on('click', function (e) {
            var input = $('#arquivo-1');
            e.stopPropagation();
            input.val(null);
            input.click();
        });

        $('#botao-arquivo-2').on('click', function (e) {
            var input = $('#arquivo-2');
            e.stopPropagation();
            input.val(null);
            input.click();
        })

        $('#arquivo-1').on('change', function (ctx) {
            ctx = ctx.target;
            $('#nomeArquivo-1').text(ctx.files[0].name);
            var files = ctx.files;
            var i, f;
            for (i = 0, f = files[i]; i != files.length; ++i) {
                var reader = new FileReader();
                var name = f.name;
                reader.onload = function (e) {
                    var data = e.target.result;

                    var workbook = XLSX.read(data, { type: 'binary' });

                    workbook.Custprops.name = name;

                    $scope.erros = {};

                    _.chain(workbook.Sheets)
                        .values()
                        .each(function (sheet) {
                            var dados = XLS.utils.sheet_to_json(sheet);

                            _.each(dados, function (dado) {

                                _.chain(dado)
                                    .keys()
                                    .each(function (key) {
                                        dado[_.camelCase(key)] = dado[key];

                                        delete dado[key];
                                    })
                                    .value();

                                if (!_.trim(dado.prefixo)) {
                                    $scope.erros['prefixoVazio'] = 'Campo "prefixo" é obrigatório';
                                }

                                if (!_.trim(dado.tipo)) {
                                    $scope.erros['prefixoVazio'] = 'Campo "tipo" é obrigatório';
                                }

                                if (!_.trim(dado.forca)) {
                                    $scope.erros['prefixoVazio'] = 'Campo "forca" é obrigatório';
                                }
                            });

                            $scope.prefixoTipoForca.dados = $scope.prefixoTipoForca.dados.concat(dados);
                        })
                        .value();

                    $scope.prefixoTipoForca.arquivo = workbook.Custprops.name;

                    if (_.values($scope.erros).length === 0) {
                        $scope.sucessoArquivo1 = true;
                    } else {
                        $scope.sucessoArquivo1 = false;
                    }

                    $scope.$apply();
                };
                reader.readAsBinaryString(f);
            }
        });

        $('#arquivo-2').on('change', function (ctx) {
            ctx = ctx.target;
            console.log(ctx);
            $('#nomeArquivo-2').text(ctx.files[0].name);
            var files = ctx.files;
            var i, f;
            for (i = 0, f = files[i]; i != files.length; ++i) {
                var reader = new FileReader();
                var name = f.name;
                reader.onload = function (e) {
                    var data = e.target.result;

                    var workbook = XLSX.read(data, { type: 'binary' });

                    workbook.Custprops.name = name;

                    $scope.erros = {};

                    _.chain(workbook.Sheets)
                        .values()
                        .each(function (sheet) {
                            var dados = XLS.utils.sheet_to_json(sheet);

                            _.each(dados, function (dado) {

                                _.chain(dado)
                                    .keys()
                                    .each(function (key) {
                                        dado[_.camelCase(key)] = dado[key];

                                        delete dado[key];
                                    })
                                    .value();

                                if (!_.trim(dado.grupamento)) {
                                    dado.grupamento = 'Não alocado';
                                }

                                if (!_.trim(dado.numeroDeOrdem)) {
                                    $scope.erros['numeroDeOrdemVazio'] = 'Número de ordem é obrigatório';
                                } else if (dado.numeroDeOrdem.split('-').length != 2) {
                                    $scope.erros['numeroDeOrdemSemPrefixo'] = 'Campo "numeroDeOrdem" deve ter prefixo';
                                }

                                if (!dado.placa) {
                                    // Adicionando placa se não existir
                                    dado.placa = '-';
                                    //$scope.erros['placaVazio'] = 'Campo "placa" é obrigatório';
                                }

                                dado.numeroOrdem = dado.numeroDeOrdem;
                                delete dado.numeroDeOrdem;
                            });

                            $scope.ordemPlacaGrupamentoModelo.dados = $scope.ordemPlacaGrupamentoModelo.dados.concat(dados);
                        })
                        .value();
                    $scope.ordemPlacaGrupamentoModelo.arquivo = workbook.Custprops.name;

                    if (_.values($scope.erros).length === 0) {
                        $scope.sucessoArquivo2 = true;
                    } else {
                        $scope.sucessoArquivo2 = false;
                    }

                    $scope.$apply();
                };
                reader.readAsBinaryString(f);
            }
        })
    }
}());